diff --git a/README.md b/README.md index faae8ef..004755d 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,6 @@ computations (with large data) from Go using various [backends supported by Open It can be used to power Machine Learning frameworks (e.g. [GoMLX](github.com/gomlx/gomlx)), image processing, scientific computation, game AIs, etc. -**NEW**: Experimental, and somewhat limited **Apple/Metal support**. - And because Jax, TensorFlow and [optionally PyTorch](https://pytorch.org/xla/release/2.3/index.html) run on XLA, it is possible to run Jax functions in Go with `gopjrt`, and probably TensorFlow and PyTorch as well. See example 2 below. @@ -204,16 +202,7 @@ For Linux (or Windows+WSL)+CUDA (NVidia GPU) support, in addition also run ([see curl -sSf https://raw.githubusercontent.com/gomlx/gopjrt/main/cmd/install_cuda.sh | bash ``` -For Darwin/arm64 (M1, M2) GPU support, run the following script ([see source](https://github.com/gomlx/gopjrt/blob/main/cmd/install_darwin_arm64.sh)) to install under `/usr/local/{lib,include}`: - -* **VERY EXPERIMENTAL**: only a subset of the operations and types supported (`float64` doesn't work). See https://developer.apple.com/metal/jax/. - And the CPU version of XLA is not working either. More of a `gopjrt` developer version. - -```bash -curl -sSf https://raw.githubusercontent.com/gomlx/gopjrt/main/cmd/install_darwin_arm64.sh | bash -``` - -**TODO(Darwin)**: Create a Homebrew version. +* ** 🚧🛠️ Mac (Darwin) support currently broken 🛠🚧️**: follow discussion in [XLA's issue #19152](https://github.com/openxla/xla/issues/19152) (and on XLA's discord channels) **That's it**. The next sections explains in more details for those interested in special cases. @@ -244,7 +233,7 @@ The installation scripts download the Linux/CUDA PJRT or the Darwin/arm64 and Da If you have any questions, or want a custom installation of hte XLA Builder library, check and modify [`cmd/install_linux_amd64.sh`](https://github.com/gomlx/gopjrt/blob/main/cmd/install_linux_amd64.sh), [`cmd/install_cuda.sh`](https://github.com/gomlx/gopjrt/blob/main/cmd/install_cuda.sh) or -[`cmd/install_darwin_arm64.sh`](https://github.com/gomlx/gopjrt/blob/main/cmd/install_darwin_arm64.sh) (**VERY EXPERIMENTAL, GPU ONLY**) +[`cmd/install_darwin_arm64.sh`](https://github.com/gomlx/gopjrt/blob/main/cmd/install_darwin_arm64.sh) (🚧🛠️ **broken see note above** 🛠🚧️) they are self-explaining. ### Installing PJRT plugins diff --git a/c/WORKSPACE b/c/WORKSPACE index 02c4abc..d24d967 100644 --- a/c/WORKSPACE +++ b/c/WORKSPACE @@ -21,10 +21,10 @@ http_archive( # Notice bazel.sh scrape the line below for the OpenXLA version, the format # of the line should remain the same (the hash in between quotes), or bazel.sh # must be changed accordingly. -OPENXLA_XLA_COMMIT_HASH = "5389d1b4b97942d71f8b598e88d4a6d4648229d8" # From 2024-10-18 +OPENXLA_XLA_COMMIT_HASH = "9ab7d704d7fe7e73fc3976adc2ccec070bc9a2ea" # From 2024-11-16 http_archive( name = "xla", - sha256 = "01556591a05a802ead29e67e5366d2056c3eafb27ed2f0abf7ce7978f1f4a32e", # From 2024-10-18 + sha256 = "29e3e69bbbcce846d4f18564870629e4680c46789b8ddcaceea1b0f25c233468", # From 2024-11-16 strip_prefix = "xla-" + OPENXLA_XLA_COMMIT_HASH, urls = [ "https://github.com/openxla/xla/archive/{hash}.zip".format(hash = OPENXLA_XLA_COMMIT_HASH), diff --git a/c/bazel.sh b/c/bazel.sh index 92dd6d7..2373039 100755 --- a/c/bazel.sh +++ b/c/bazel.sh @@ -16,6 +16,7 @@ export USE_BAZEL_VERSION=7.4.0 # First version allowing cc_static_library rule. DEBUG=0 OUTPUT_DIR="" +USE_STABLEHLO="false" while [[ $# -gt 0 ]]; do case $1 in --debug) @@ -28,6 +29,11 @@ while [[ $# -gt 0 ]]; do OUTPUT_DIR="--output_base=$1" shift ;; + --stablehlo) + echo "Linking StableHLO support." + USE_STABLEHLO="true" + shift + ;; -*|--*) echo "Unknown flag $1" exit 1 @@ -99,15 +105,15 @@ case "${TARGET_PLATFORM}" in echo "Building for macOS amd64" STARTUP_FLAGS="${STARTUP_FLAGS} --bazelrc=custom_darwin_amd64.bazelrc" BUILD_FLAGS="${BUILD_FLAGS} --config=macos_amd64" - # Apple/Metal PJRT only works with StableHLO, so we link it along. - BUILD_FLAGS="${BUILD_FLAGS} --define use_stablehlo=false" + if [[ "$USE_TABLE_HLO" == "false" ]] ; then + echo "*** Apple/Metal PJRT (maintained by Apple) only works with StableHLO, consider adding --USE_STABLEHLO" + fi ;; "darwin_arm64") echo "Building for macOS arm64" BUILD_FLAGS="${BUILD_FLAGS} --config=macos_arm64" # Apple/Metal PJRT only works with StableHLO, so we link it along. - BUILD_FLAGS="${BUILD_FLAGS} --define use_stablehlo=true" ;; *) @@ -130,6 +136,9 @@ BUILD_FLAGS="${BUILD_FLAGS} --define tsl_protobuf_header_only=false" # We need the dependencies to be linked statically -- they won't come from some external .so: BUILD_FLAGS="${BUILD_FLAGS} --define framework_shared_object=false" +# Link-in StableHLO support: this multiplies by 8 the size of the gomlx_xlabuilder library, because +# it links in LLVM. But it's required for the Apple/Metal support. +BUILD_FLAGS="${BUILD_FLAGS} --define use_stablehlo=${USE_STABLEHLO}" # XLA rules weren't meant to be exported, so we overrule their visibility # constraints. diff --git a/c/gomlx/xlabuilder/BUILD b/c/gomlx/xlabuilder/BUILD index f50e32c..6432a21 100644 --- a/c/gomlx/xlabuilder/BUILD +++ b/c/gomlx/xlabuilder/BUILD @@ -7,10 +7,10 @@ gomlx_xlabuilder_deps = [ "@com_google_absl//absl/types:optional", "@com_google_absl//absl/base:log_severity", "@com_google_absl//absl/log:initialize", + "@com_google_absl//absl/status", "@xla//xla:comparison_util", "@xla//xla:literal", "@xla//xla:shape_util", - "@xla//xla:status", "@xla//xla:statusor", "@xla//xla:types", "@xla//xla:util", diff --git a/c/gomlx/xlabuilder/utils.cpp b/c/gomlx/xlabuilder/utils.cpp index 35d5977..bb16d3a 100644 --- a/c/gomlx/xlabuilder/utils.cpp +++ b/c/gomlx/xlabuilder/utils.cpp @@ -44,8 +44,8 @@ int initCall = initSetTfLogs(); int xla_wrapper_version() { return XlaWrapperVersion; } // Cast C pointer type to C++ object pointer. -xla::Status *XlaStatusCast(XlaStatus *s) { - return static_cast(s); +absl::Status *XlaStatusCast(XlaStatus *s) { + return static_cast(s); } char *c_str(const std::string &s) { return strdup(s.c_str()); } @@ -82,8 +82,8 @@ int XlaStatusCode(XlaStatus *status) { return int(XlaStatusCast(status)->code()); } -XlaStatus *FromStatus(const xla::Status &status) { - return static_cast(new xla::Status(status)); +XlaStatus *FromStatus(const absl::Status &status) { + return static_cast(new absl::Status(status)); } void XlaStatusFree(XlaStatus *xla_status) { diff --git a/c/gomlx/xlabuilder/utils.h b/c/gomlx/xlabuilder/utils.h index 66842ae..d7e5f02 100644 --- a/c/gomlx/xlabuilder/utils.h +++ b/c/gomlx/xlabuilder/utils.h @@ -16,13 +16,13 @@ // utils.h holds several small C/Go connector tools: // -// - handling of xla::Status and xla::StatusOr. +// - handling of absl::Status and xla::StatusOr. // - C definitions of VectorPointers and VectorData // - Memory stats, usage and heap checker for leaks. #ifndef _GOMLX_XLABUILDER_STATUS_H #define _GOMLX_XLABUILDER_STATUS_H -// utils.h holds the simplified C interface to xla::Status and xla::StatusOr +// utils.h holds the simplified C interface to absl::Status and xla::StatusOr // objects. #include @@ -35,7 +35,7 @@ typedef _Bool bool; extern "C" { #endif -// XlaStatus behind the scenes is a xla::Status type. +// XlaStatus is an *absl::Status cast to void* (is used to be `xla::Status`, now `absl::Status`). typedef void XlaStatus; // StatusOr contains status or the value from the C++ StatusOr. @@ -75,7 +75,7 @@ typedef struct { #include #include -#include "xla/status.h" +#include "absl/status/status.h" #include "xla/statusor.h" // #include "xla/xla/shape_util.h" @@ -113,12 +113,12 @@ extern VectorPointers *c_vector_str(const std::vector &v); // FromStatus creates a dynamically allocated status (aliased to *XlaStatus) // from the given one -- contents are transferred. -XlaStatus *FromStatus(const xla::Status &status); +XlaStatus *FromStatus(const absl::Status &status); template StatusOr FromStatusOr(xla::StatusOr> &status_or) { StatusOr r; r.status = - static_cast(new xla::Status(std::move(status_or.status()))); + static_cast(new absl::Status(std::move(status_or.status()))); if (status_or.ok()) { r.value = static_cast(status_or->get()); status_or->release(); // Ownership should go to StatusOr. @@ -129,7 +129,7 @@ template StatusOr FromStatusOr(xla::StatusOr> &s template StatusOr FromStatusOr(xla::StatusOr &status_or) { StatusOr r; r.status = - static_cast(new xla::Status(std::move(status_or.status()))); + static_cast(new absl::Status(std::move(status_or.status()))); if (status_or.ok()) { r.value = static_cast(status_or.Value()); } diff --git a/c/gomlx/xlabuilder/xlabuilder.cpp b/c/gomlx/xlabuilder/xlabuilder.cpp index 6d5b771..a5eb06a 100644 --- a/c/gomlx/xlabuilder/xlabuilder.cpp +++ b/c/gomlx/xlabuilder/xlabuilder.cpp @@ -241,7 +241,7 @@ XlaStatus *XlaBuilderAddOp(XlaBuilder *builder, SerializedOp *serialized_op) { // Create the update computation: only Add supported for now. auto shape_or = builder->GetShape(*inputs[0]); if (!shape_or.ok()) { - return new xla::Status(std::move(shape_or.status())); + return new absl::Status(std::move(shape_or.status())); } xla::PrimitiveType primitive_type = shape_or.value().element_type(); auto update_computation = @@ -619,7 +619,7 @@ XlaStatus *XlaBuilderAddOp(XlaBuilder *builder, SerializedOp *serialized_op) { break; default: - return new xla::Status( + return new absl::Status( absl::StatusCode::kInvalidArgument, absl::StrFormat("unknown op_type=%d for XlaBuilderAddOp", serialized_op->op_type)); @@ -627,9 +627,9 @@ XlaStatus *XlaBuilderAddOp(XlaBuilder *builder, SerializedOp *serialized_op) { if (!op.valid()) { auto status = builder->first_error(); if (!status.ok()) { - return new xla::Status(status); + return new absl::Status(status); } - return new xla::Status( + return new absl::Status( absl::StatusCode::kInvalidArgument, absl::StrFormat("failed to convert serialized_op to XLA: op_type=%d", serialized_op->op_type)); diff --git a/c/xla_configure.darwin_amd64.bazelrc b/c/xla_configure.darwin_amd64.bazelrc index 88f514b..4da019b 100644 --- a/c/xla_configure.darwin_amd64.bazelrc +++ b/c/xla_configure.darwin_amd64.bazelrc @@ -1,14 +1,16 @@ -build --action_env CLANG_COMPILER_PATH=/usr/local/Cellar/llvm/19.1.3/bin/clang-19 -build --repo_env CC=/usr/local/Cellar/llvm/19.1.3/bin/clang-19 -build --repo_env BAZEL_COMPILER=/usr/local/Cellar/llvm/19.1.3/bin/clang-19 -build --linkopt --ld-path=/usr/local/bin/ld.lld +build --action_env CLANG_COMPILER_PATH=/usr/bin/clang +build --repo_env CC=/usr/bin/clang +build --repo_env BAZEL_COMPILER=/usr/bin/clang +build --linkopt --ld-path=/usr/bin/ld +build --action_env LD_LIBRARY_PATH=/usr/local/lib build --action_env PYTHON_BIN_PATH=/usr/local/opt/python@3.13/bin/python3.13 build --python_path /usr/local/opt/python@3.13/bin/python3.13 test --test_env LD_LIBRARY_PATH test --test_size_filters small,medium build --copt -Wno-sign-compare build --copt -Wno-error=unused-command-line-argument -build --build_tag_filters -no_oss,-gpu -build --test_tag_filters -no_oss,-gpu -test --build_tag_filters -no_oss,-gpu -test --test_tag_filters -no_oss,-gpu +build --copt -Wno-gnu-offsetof-extensions +build --build_tag_filters -no_oss,-no_mac,-gpu +build --test_tag_filters -no_oss,-no_mac,-gpu +test --build_tag_filters -no_oss,-no_mac,-gpu +test --test_tag_filters -no_oss,-no_mac,-gpu diff --git a/c/xla_configure.darwin_arm64.bazelrc b/c/xla_configure.darwin_arm64.bazelrc index 8835b8c..098e591 100644 --- a/c/xla_configure.darwin_arm64.bazelrc +++ b/c/xla_configure.darwin_arm64.bazelrc @@ -1,14 +1,13 @@ -build --action_env CLANG_COMPILER_PATH=/opt/homebrew/Cellar/llvm/19.1.2/bin/clang-19 -build --repo_env CC=/opt/homebrew/Cellar/llvm/19.1.2/bin/clang-19 -build --repo_env BAZEL_COMPILER=/opt/homebrew/Cellar/llvm/19.1.2/bin/clang-19 -build --linkopt --ld-path=/opt/homebrew/bin/ld.lld +build --action_env CLANG_COMPILER_PATH=/usr/bin/clang +build --repo_env CC=/usr/bin/clang +build --repo_env BAZEL_COMPILER=/usr/bin/clang build --action_env PYTHON_BIN_PATH=/opt/homebrew/opt/python@3.13/bin/python3.13 build --python_path /opt/homebrew/opt/python@3.13/bin/python3.13 test --test_env LD_LIBRARY_PATH test --test_size_filters small,medium build --copt -Wno-sign-compare build --copt -Wno-error=unused-command-line-argument -build --build_tag_filters -no_oss,-gpu -build --test_tag_filters -no_oss,-gpu -test --build_tag_filters -no_oss,-gpu -test --test_tag_filters -no_oss,-gpu +build --build_tag_filters -no_oss,-no_mac,-gpu +build --test_tag_filters -no_oss,-no_mac,-gpu +test --build_tag_filters -no_oss,-no_mac,-gpu +test --test_tag_filters -no_oss,-no_mac,-gpu diff --git a/cmd/pjrt_codegen/main.go b/cmd/pjrt_codegen/main.go index 56cc92e..3768393 100644 --- a/cmd/pjrt_codegen/main.go +++ b/cmd/pjrt_codegen/main.go @@ -1,24 +1,33 @@ -// codegen parses the pjrt_c_api.h and generates boilerplate code for creating the various C structures. +// pjrt_codegen copies prjt_c_api.h from github.com/openxla/xla source (pointed by XLA_SRC env variable), +// parses it and generates boilerplate code for creating the various C structures. package main import ( - "bytes" + "github.com/janpfeifer/gonb/common" "github.com/janpfeifer/must" - "io" + "log" "os" + "path" ) -const pjrtCAPIHFilePath = "pjrt_c_api.h" +const ( + xlaSrcEnvVar = "XLA_SRC" + pjrtAPIFileName = "pjrt_c_api.h" +) func main() { - // Read pjrt_c_api.h - f := must.M1(os.OpenFile(pjrtCAPIHFilePath, os.O_RDONLY, os.ModePerm)) - var b bytes.Buffer - _ = must.M1(io.Copy(&b, f)) - must.M(f.Close()) - contents := b.String() + xlaSrc := os.Getenv(xlaSrcEnvVar) + if xlaSrc == "" { + log.Fatalf("Please set %s to the directory containing the cloned github.com/openxla/xla repository.\n", xlaSrcEnvVar) + } + xlaSrc = common.ReplaceTildeInDir(xlaSrc) + + // Copy pjrt_c_api.h. + contentsBytes := must.M1(os.ReadFile(path.Join(xlaSrc, "xla", "pjrt", "c", pjrtAPIFileName))) + must.M(os.WriteFile(pjrtAPIFileName, contentsBytes, 0644)) // Create various Go generate files. + contents := string(contentsBytes) generateNewStruct(contents) generateAPICalls(contents) generateEnums(contents) diff --git a/cmd/protoc_xla_protos/main.go b/cmd/protoc_xla_protos/main.go index 41fb942..dab38d3 100644 --- a/cmd/protoc_xla_protos/main.go +++ b/cmd/protoc_xla_protos/main.go @@ -11,6 +11,8 @@ package main import ( "fmt" + "github.com/pkg/errors" + "log" "os" "os/exec" "path" @@ -30,6 +32,7 @@ var protos = []string{ "xla/autotuning.proto", "xla/pjrt/compile_options.proto", "xla/service/hlo.proto", + "xla/service/metrics.proto", "xla/stream_executor/device_description.proto", "xla/xla.proto", "xla/xla_data.proto", @@ -38,8 +41,7 @@ var protos = []string{ func main() { xlaSrc := os.Getenv(xlaSrcEnvVar) if xlaSrc == "" { - fmt.Fprintf(os.Stderr, "Please set %s to the directory containing the cloned github.com/openxla/xla repository.\n", xlaSrcEnvVar) - os.Exit(1) + log.Fatalf("Please set %s to the directory containing the cloned github.com/openxla/xla repository.\n", xlaSrcEnvVar) } // Generate the --go_opt=M... flags @@ -54,14 +56,12 @@ func main() { packageName := protoPackage(proto) err := os.Mkdir(packageName, 0755) if err != nil && !os.IsExist(err) { - fmt.Fprintf(os.Stderr, "Failed to create sub-directory %q: %+v", packageName, err) - os.Exit(1) + log.Fatalf("Failed to create sub-directory %q: %+v", packageName, err) } // Remove go_package options from the proto file protoPath := filepath.Join(xlaSrc, proto) if err := removeGoPackageOption(protoPath); err != nil { - fmt.Fprintf(os.Stderr, "Error removing go_package option from %s: %v\n", proto, err) - os.Exit(1) + log.Fatalf("Error removing go_package option from %s: %v\n", proto, err) } // Construct the protoc command @@ -79,9 +79,17 @@ func main() { cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error executing protoc for %s: %v\n", proto, err) - fmt.Fprintf(os.Stderr, "Command:\n%s\n", cmd) - os.Exit(1) + log.Printf("Command:\n%s\n", cmd) + log.Fatalf("Error executing protoc for %s: %v\n", proto, err) + } + + currentDir, err := os.Getwd() + if err != nil { + log.Fatalf("Failed to get current directory: %v", err) + } + localCopyPath := path.Join(currentDir, path.Base(protoPath)) + if err := copyFile(localCopyPath, protoPath); err != nil { + log.Fatalf("Failed to copy file: %v", err) } } } @@ -103,3 +111,18 @@ func removeGoPackageOption(protoPath string) error { return os.WriteFile(protoPath, newContent, 0644) } + +func copyFile(dst, src string) error { + // Read all content of src to data, may cause OOM for a large file. + data, err := os.ReadFile(src) + if err != nil { + return errors.Wrapf(err, "failed to read %q", src) + } + + // Write data to dst + err = os.WriteFile(dst, data, 0644) + if err != nil { + return errors.Wrapf(err, "failed to read %q", src) + } + return nil +} diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2c3367a..42bcdf9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,3 +1,17 @@ +# v0.4.7 - 2024-11-17 + +* Sync'ed with updated proto definitions from OpenXLA/XLA project. +* TestEndToEnd: added `klog` flags; list devices before trying to compile. +* Renamed deprecated xla::Status to absl::Status. +* Update to XLA and PJRT v0.57 + * Updated XLA dependency. + * Updated PJRT CPU plugin. + * Updated `pjrt_c_api.h`: copying over from XLA source is now part of the generate program. + * Note: PJRT v0.56 was broken for a few days, and the version was skipped. + (breakage here https://github.com/openxla/xla/commit/590b36f89d8cb038e9e3929aeaea6e60451ef3fc#r149134910) +* **Mac version broken** :( : Following up on https://github.com/openxla/xla/issues/19152. Since it's + outside our control, not blocking the release here. + # v0.4.6 * Fix to installation script: missing `sudo` to remove old library, not observing the GOPJRT_NOSUDO request. diff --git a/go.mod b/go.mod index a73cea9..d61098e 100644 --- a/go.mod +++ b/go.mod @@ -5,17 +5,17 @@ go 1.23 require ( github.com/chewxy/math32 v1.10.1 github.com/janpfeifer/gonb v0.10.1 - github.com/janpfeifer/must v0.0.2 + github.com/janpfeifer/must v0.2.0 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.9.0 github.com/x448/float16 v0.8.4 - google.golang.org/protobuf v1.34.2 - k8s.io/klog/v2 v2.120.1 + google.golang.org/protobuf v1.35.2 + k8s.io/klog/v2 v2.130.1 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect diff --git a/go.sum b/go.sum index 1d7caf0..ae61213 100644 --- a/go.sum +++ b/go.sum @@ -2,16 +2,16 @@ github.com/chewxy/math32 v1.10.1 h1:LFpeY0SLJXeaiej/eIp2L40VYfscTvKh/FSEZ68uMkU= github.com/chewxy/math32 v1.10.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/janpfeifer/gonb v0.10.1 h1:yk29LAN5EF0OMKdnXd6xWTmlI/Tedajk7ssVu/1eBis= github.com/janpfeifer/gonb v0.10.1/go.mod h1:+MSQUlKT05Z5YBdU3CZUfmORwgCLwpAu2jzwy7VbgkQ= -github.com/janpfeifer/must v0.0.2 h1:9e61R0lD/Rs5ZRMUEOss0885JMmEI4KK6thsPfmlgEQ= -github.com/janpfeifer/must v0.0.2/go.mod h1:S6c5Yg/YSMR43cJw4zhIq7HFMci90a7kPY9XA4c8UIs= +github.com/janpfeifer/must v0.2.0 h1:yWy1CE5gtk1i2ICBvqAcMMXrCMqil9CJPkc7x81fRdQ= +github.com/janpfeifer/must v0.2.0/go.mod h1:S6c5Yg/YSMR43cJw4zhIq7HFMci90a7kPY9XA4c8UIs= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -22,11 +22,11 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= diff --git a/gopjrt_test.go b/gopjrt_test.go index 847cca3..12b2085 100644 --- a/gopjrt_test.go +++ b/gopjrt_test.go @@ -7,14 +7,22 @@ import ( "github.com/gomlx/gopjrt/pjrt" "github.com/gomlx/gopjrt/xlabuilder" "github.com/stretchr/testify/require" + "k8s.io/klog/v2" + "os" "testing" ) var ( flagPluginName = flag.String("plugin", "cpu", "PRJT plugin name or full path") flagTestAllDevices = flag.Bool("alldevices", false, "Test all devices. Defaults to false because CPU PJRT seems to falsely advertise more than one device") + flagSaveHLO = flag.String("savehlo", "", "Save HLO to file. If empty, do not save.") + flagLoadHLO = flag.String("loadhlo", "", "Load HLO to test from file (as opposed to the one created with XlaBuilder.") ) +func init() { + klog.InitFlags(nil) +} + // TestEndToEnd builds, compiles and executes a minimal computation f(x) = x^2 using xlabuilder to build the computation, // and pjrt to compile and execute it. func TestEndToEnd(t *testing.T) { @@ -32,7 +40,12 @@ func TestEndToEnd(t *testing.T) { // Get computation created. comp, err := builder.Build(fX) require.NoError(t, err, "Failed to build XlaComputation from ops.") - //fmt.Printf("HloModule proto:\n%s\n\n", comp.TextHLO()) + fmt.Printf("HloModule proto:\n%s\n\n", comp.TextHLO()) + if *flagSaveHLO != "" { + cBuffer := comp.SerializedHLO() + err := os.WriteFile(*flagSaveHLO, cBuffer.Bytes(), 0644) + require.NoError(t, err) + } // PJRT plugin and create a client. plugin, err := pjrt.GetPlugin(*flagPluginName) @@ -42,11 +55,6 @@ func TestEndToEnd(t *testing.T) { require.NoErrorf(t, err, "Failed to create a client on %s", plugin) fmt.Printf(" client: %s\n", client) - // Compile program. - loadedExec, err := client.Compile().WithComputation(comp).Done() - require.NoErrorf(t, err, "Failed to compile our x^2 HLO program") - fmt.Printf("Compiled program: name=%s, #outputs=%d\n", loadedExec.Name, loadedExec.NumOutputs) - // List devices. addressableDevices := client.AddressableDevices() fmt.Println("Addressable devices:") @@ -60,6 +68,19 @@ func TestEndToEnd(t *testing.T) { } fmt.Println() + // Compile program. + var loadedExec *pjrt.LoadedExecutable + if *flagLoadHLO == "" { + loadedExec, err = client.Compile().WithComputation(comp).Done() + require.NoErrorf(t, err, "Failed to compile our x^2 HLO program") + } else { + hloProgram, err := os.ReadFile(*flagLoadHLO) + require.NoErrorf(t, err, "Failed to load HLO from file %q", *flagLoadHLO) + loadedExec, err = client.Compile().WithHLO(hloProgram).Done() + require.NoErrorf(t, err, "Failed to compile HLO program loaded from %q", *flagLoadHLO) + } + fmt.Printf("Compiled program: name=%s, #outputs=%d\n", loadedExec.Name, loadedExec.NumOutputs) + // Test values: inputs := []float32{0.1, 1, 3, 4, 5} wants := []float32{1.01, 2, 10, 17, 26} diff --git a/pjrt/buffers.go b/pjrt/buffers.go index 1328631..39b798b 100644 --- a/pjrt/buffers.go +++ b/pjrt/buffers.go @@ -340,6 +340,7 @@ func ScalarToRaw[T dtypes.Supported](value T) ([]byte, dtypes.DType, []int) { // Size returns the size in bytes if required for the buffer to be transferred with ToHost. func (b *Buffer) Size() (int, error) { + defer runtime.KeepAlive(b) if b == nil || b.client.plugin == nil || b.cBuffer == nil { // Already destroyed ? return 0, errors.New("Buffer is nil, or its plugin or wrapped C representation is nil -- has it been destroyed already?") @@ -362,6 +363,7 @@ func (b *Buffer) Size() (int, error) { // This always request a major-to-minor layout, the assumption of the layout in host memory -- TPUs are known to // reorganize the layout. func (b *Buffer) ToHost(dst []byte) error { + defer runtime.KeepAlive(b) if b == nil || b.client.plugin == nil || b.cBuffer == nil { // Already destroyed ? return errors.New("Buffer is nil, or its plugin or wrapped C representation is nil -- has it been destroyed already?") @@ -518,6 +520,7 @@ func BufferToArray[T dtypes.Supported](buffer *Buffer) (flatValues []T, dimensio // // Similar to the generic BufferToArray[T], but this returns an anonymous typed (`any`) flat slice instead of using generics. func (b *Buffer) ToFlatDataAndDimensions() (flat any, dimensions []int, err error) { + defer runtime.KeepAlive(b) var dtype dtypes.DType dtype, err = b.DType() if err != nil { diff --git a/pjrt/common.c b/pjrt/common.c index e1f8750..a724882 100644 --- a/pjrt/common.c +++ b/pjrt/common.c @@ -46,4 +46,4 @@ void Set_PJRT_NamedValue_Union(PJRT_NamedValue *named_value, PJRT_NamedValueUnio named_value->bool_value = split_value.bool_value; break; } -} +} \ No newline at end of file diff --git a/pjrt/compile.go b/pjrt/compile.go index 4e40dad..19989f4 100644 --- a/pjrt/compile.go +++ b/pjrt/compile.go @@ -46,13 +46,22 @@ type CompileConfig struct { func newCompileConfig(client *Client) (cc *CompileConfig) { cc = &CompileConfig{ - plugin: client.plugin, - client: client, - options: &compile_options.CompileOptionsProto{}, + plugin: client.plugin, + client: client, + options: &compile_options.CompileOptionsProto{ + ArgumentLayouts: nil, + ParameterIsTupledArguments: false, + ExecutableBuildOptions: nil, + CompilePortableExecutable: true, + ProfileVersion: 0, + SerializedMultiSliceConfig: nil, + EnvOptionOverrides: nil, + TargetConfig: nil, + }, } // Default values specified in the comments of the proto (but not as proper proto defaults). cc.options.ExecutableBuildOptions = &compile_options.ExecutableBuildOptionsProto{ - DeviceOrdinal: -1, + DeviceOrdinal: -1, // -1 means not set. NumReplicas: 1, NumPartitions: 1, } @@ -90,6 +99,7 @@ func (cc *CompileConfig) Done() (*LoadedExecutable, error) { programPtr := unsafe.SliceData(cc.program) pinner.Pin(programPtr) defer pinner.Unpin() + pinner.Pin(cc) // Get options and pin it. binOptions, err := proto.Marshal(cc.options) diff --git a/pjrt/dynamiclib_darwin.go b/pjrt/dynamiclib_darwin.go index c6e413a..80bf915 100644 --- a/pjrt/dynamiclib_darwin.go +++ b/pjrt/dynamiclib_darwin.go @@ -64,7 +64,7 @@ func loadPlugin(pluginPath string) (handleWrapper dllHandleWrapper, err error) { nameC := C.CString(pluginPath) klog.V(2).Infof("trying to load library %s\n", pluginPath) - handle := C.dlopen(nameC, C.RTLD_LAZY) + handle := C.dlopen(nameC, C.RTLD_LAZY|C.RTLD_LOCAL) cFree(nameC) if handle == nil { msg := C.GoString(C.dlerror()) diff --git a/pjrt/dynamiclib_dlopen.go b/pjrt/dynamiclib_dlopen.go index 19c52bb..9c7e6ae 100644 --- a/pjrt/dynamiclib_dlopen.go +++ b/pjrt/dynamiclib_dlopen.go @@ -128,7 +128,7 @@ func loadPlugin(pluginPath string) (handleWrapper dllHandleWrapper, err error) { nameC := C.CString(pluginPath) klog.V(2).Infof("trying to load library %s\n", pluginPath) - handle := C.dlopen(nameC, C.RTLD_LAZY) + handle := C.dlopen(nameC, C.RTLD_LAZY|C.RTLD_LOCAL) cFree(nameC) if handle == nil { msg := C.GoString(C.dlerror()) diff --git a/pjrt/error.go b/pjrt/error.go index cefe9d7..0a99f19 100644 --- a/pjrt/error.go +++ b/pjrt/error.go @@ -10,6 +10,7 @@ package pjrt import "C" import ( "github.com/pkg/errors" + "unsafe" ) // pjrtErrorDestroy calls C.PJRT_Error_Destroy. @@ -20,13 +21,15 @@ func pjrtErrorDestroy(plugin *Plugin, pErr *C.PJRT_Error) { C.call_PJRT_Error_Destroy(plugin.api, args) } -// pjrtErrorMessage calls C.PJRT_Error_Message. +// pjrtErrorMessage calls C.PJRT_Error_Message and returns the message from an error structure. func pjrtErrorMessage(plugin *Plugin, pErr *C.PJRT_Error) string { args := C.new_PJRT_Error_Message_Args() defer cFree(args) args.error = pErr C.call_PJRT_Error_Message(plugin.api, args) - msg := C.GoString(args.message) // I'm guessing the C-message memory is still owned by the PJRT_Error structure, so I'm not freeing it. + msg := string(unsafe.Slice((*byte)(unsafe.Pointer(args.message)), int(args.message_size))) // Notice bytes are copied. + // I'm guessing the C-message memory is still owned by the PJRT_Error structure, so I'm not freeing it. + // The C++ PJRT Client library also doesn't free the message. return msg } diff --git a/pjrt/error_test.go b/pjrt/error_test.go new file mode 100644 index 0000000..a440018 --- /dev/null +++ b/pjrt/error_test.go @@ -0,0 +1,30 @@ +package pjrt + +import ( + "fmt" + "github.com/gomlx/gopjrt/dtypes" + "github.com/gomlx/gopjrt/xlabuilder" + "github.com/stretchr/testify/require" + "testing" +) + +func TestError(t *testing.T) { + client := getPJRTClient(t) + builder := xlabuilder.New(t.Name()) + + // f(x, y) = x+y + x := capture(xlabuilder.Parameter(builder, "x", 0, xlabuilder.MakeShape(dtypes.F32))).Test(t) // Scalar float32. + y := capture(xlabuilder.Parameter(builder, "y", 1, xlabuilder.MakeShape(dtypes.F32))).Test(t) // Scalar float32. + fXY := capture(xlabuilder.Add(x, y)).Test(t) + + // Take program and compile. + comp := capture(builder.Build(fXY)).Test(t) + exec, err := client.Compile().WithComputation(comp).Done() + require.NoErrorf(t, err, "Failed to compile program") + + // Call with no arguments: should return an error. + _, err = exec.Execute().Done() + require.ErrorContains(t, err, "PJRT error") + require.ErrorContains(t, err, "Execution supplied 0 buffers but compiled program expected 2 buffers") + fmt.Printf("Received expected error: %s", err) +} diff --git a/pjrt/gen_api_calls.c b/pjrt/gen_api_calls.c index 22d001f..6062d29 100644 --- a/pjrt/gen_api_calls.c +++ b/pjrt/gen_api_calls.c @@ -570,6 +570,11 @@ PJRT_Error* call_PJRT_Buffer_IsDeleted(const PJRT_Api *api, PJRT_Buffer_IsDelete return api->PJRT_Buffer_IsDeleted(args); } +// call_PJRT_Buffer_CopyRawToHost calls the corresponding PJRT API method. +PJRT_Error* call_PJRT_Buffer_CopyRawToHost(const PJRT_Api *api, PJRT_Buffer_CopyRawToHost_Args* args) { + return api->PJRT_Buffer_CopyRawToHost(args); +} + // call_PJRT_Buffer_CopyToDevice calls the corresponding PJRT API method. // Copies the buffer to device `dst_device` within the same client. Caller is // responsible for freeing returned `dst_buffer` with PJRT_Buffer_Destroy. diff --git a/pjrt/gen_api_calls.h b/pjrt/gen_api_calls.h index 29ba85c..01b81c7 100644 --- a/pjrt/gen_api_calls.h +++ b/pjrt/gen_api_calls.h @@ -419,6 +419,9 @@ extern PJRT_Error* call_PJRT_Buffer_Delete(const PJRT_Api *api, PJRT_Buffer_Dele // True if and only if PJRT_Buffer_Delete has previously been called. extern PJRT_Error* call_PJRT_Buffer_IsDeleted(const PJRT_Api *api, PJRT_Buffer_IsDeleted_Args* args); +// call_PJRT_Buffer_CopyRawToHost calls the corresponding PJRT API method. +extern PJRT_Error* call_PJRT_Buffer_CopyRawToHost(const PJRT_Api *api, PJRT_Buffer_CopyRawToHost_Args* args); + // call_PJRT_Buffer_CopyToDevice calls the corresponding PJRT API method. // Copies the buffer to device `dst_device` within the same client. Caller is // responsible for freeing returned `dst_buffer` with PJRT_Buffer_Destroy. diff --git a/pjrt/gen_new_struct.c b/pjrt/gen_new_struct.c index dfc2ec3..adc1353 100644 --- a/pjrt/gen_new_struct.c +++ b/pjrt/gen_new_struct.c @@ -707,6 +707,14 @@ PJRT_Buffer_IsDeleted_Args* new_PJRT_Buffer_IsDeleted_Args() { return p; } +// new_PJRT_Buffer_CopyRawToHost_Args allocates a zero-initialized C.PJRT_Buffer_CopyRawToHost_Args structure, sets its .struct_size, and returns it. +PJRT_Buffer_CopyRawToHost_Args* new_PJRT_Buffer_CopyRawToHost_Args() { + PJRT_Buffer_CopyRawToHost_Args* p = malloc(sizeof(PJRT_Buffer_CopyRawToHost_Args)); + memset(p, 0, sizeof(PJRT_Buffer_CopyRawToHost_Args)); + p->struct_size = PJRT_Buffer_CopyRawToHost_Args_STRUCT_SIZE; + return p; +} + // new_PJRT_Buffer_CopyToDevice_Args allocates a zero-initialized C.PJRT_Buffer_CopyToDevice_Args structure, sets its .struct_size, and returns it. PJRT_Buffer_CopyToDevice_Args* new_PJRT_Buffer_CopyToDevice_Args() { PJRT_Buffer_CopyToDevice_Args* p = malloc(sizeof(PJRT_Buffer_CopyToDevice_Args)); diff --git a/pjrt/gen_new_struct.h b/pjrt/gen_new_struct.h index 402b52d..e8cb81f 100644 --- a/pjrt/gen_new_struct.h +++ b/pjrt/gen_new_struct.h @@ -278,6 +278,9 @@ extern PJRT_Buffer_Delete_Args* new_PJRT_Buffer_Delete_Args(); // new_PJRT_Buffer_IsDeleted_Args allocates a zero-initialized C.PJRT_Buffer_IsDeleted_Args structure, sets its .struct_size, and returns it. extern PJRT_Buffer_IsDeleted_Args* new_PJRT_Buffer_IsDeleted_Args(); +// new_PJRT_Buffer_CopyRawToHost_Args allocates a zero-initialized C.PJRT_Buffer_CopyRawToHost_Args structure, sets its .struct_size, and returns it. +extern PJRT_Buffer_CopyRawToHost_Args* new_PJRT_Buffer_CopyRawToHost_Args(); + // new_PJRT_Buffer_CopyToDevice_Args allocates a zero-initialized C.PJRT_Buffer_CopyToDevice_Args structure, sets its .struct_size, and returns it. extern PJRT_Buffer_CopyToDevice_Args* new_PJRT_Buffer_CopyToDevice_Args(); diff --git a/pjrt/minimal_test.go b/pjrt/minimal_test.go new file mode 100644 index 0000000..041b5f2 --- /dev/null +++ b/pjrt/minimal_test.go @@ -0,0 +1,108 @@ +package pjrt + +import ( + "flag" + "fmt" + "github.com/gomlx/gopjrt/protos/hlo" + "github.com/janpfeifer/must" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/proto" + "os" + "runtime" + "testing" +) + +var flagLoadHLO = flag.String("loadhlo", "", "Load HLO to test from file (as opposed to the one created with XlaBuilder.") + +// hloText describes the following program: +// +// HloModule x_x_1.5, entry_computation_layout={(f32[])->f32[]} +// ENTRY x_x_1.5 { +// x.1 = f32[] parameter(0) +// multiply.2 = f32[] multiply(x.1, x.1) +// constant.3 = f32[] constant(1) +// ROOT add.4 = f32[] add(multiply.2, constant.3) +// } +// +// In JAX, a similar HLO program can be generated with: +// +// import jax +// from jax import numpy as jnp +// +// def f(x): +// return x**2 + 1 +// +// x = jnp.array(0.1, dtype=jnp.float32) +// ir1 = jax.jit(f).lower(x) +// ir2 = ir1.compiler_ir("hlo") +// serializedHLO = ir2.as_serialized_hlo_module_proto() +// +// with open("/tmp/hlo.pb", "wb") as f: +// f.write(serializedHLO) +var hloText = `name:"x*x+1.5" entry_computation_name:"x*x+1.5" entry_computation_id:5 computations:{name:"x*x+1.5" ` + + `instructions:{name:"x.1" opcode:"parameter" shape:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} metadata:{} id:1 frontend_attributes:{}} instructions:{name:"multiply.2" opcode:"multiply" shape:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} metadata:{} id:2 operand_ids:1 operand_ids:1 frontend_attributes:{}} instructions:{name:"constant.3" opcode:"constant" shape:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} metadata:{} literal:{shape:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} f32s:1} id:3 frontend_attributes:{}} instructions:{name:"add.4" opcode:"add" shape:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} metadata:{} id:4 operand_ids:2 operand_ids:3 frontend_attributes:{}} program_shape:{parameters:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} result:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} parameter_names:"x"} id:5 root_id:4} host_program_shape:{parameters:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} result:{element_type:F32 layout:{tail_padding_alignment_in_elements:1}} parameter_names:"x"} id:5` + +// TestMinimal is a minimal end-to-end test of loading, compiling and executing a small program using PJRT. +// +// Set (export) XLA_FLAGS=--xla_dump_to=/tmp/xla_dump to get details of its compilation. +func TestMinimal(t *testing.T) { + // Load HLO program. + var hloSerialized []byte + var hloModule hlo.HloModuleProto + if *flagLoadHLO != "" { + fmt.Printf("Loading HLO program from %s...\n", *flagLoadHLO) + hloSerialized = must.M1(os.ReadFile(*flagLoadHLO)) + must.M(proto.Unmarshal(hloSerialized, &hloModule)) + } else { + // Serialize HLO program from hloText: + must.M(prototext.Unmarshal([]byte(hloText), &hloModule)) + hloSerialized = must.M1(proto.Marshal(&hloModule)) + } + fmt.Printf("HLO Program:\n%s\n\n", hloModule.String()) + + // `dlopen` PJRT plugin. + plugin := must.M1(GetPlugin(*flagPluginName)) + defer runtime.KeepAlive(plugin) + fmt.Printf("PJRT: %s\n", plugin.String()) + + // Create client. + client := must.M1(plugin.NewClient(nil)) + defer runtime.KeepAlive(client) + devices := client.AddressableDevices() + for ii, dev := range devices { + desc := must.M1(dev.GetDescription()) + fmt.Printf("\tDevice #%d: %s\n", ii, desc.DebugString()) + } + + // Compile. + defer runtime.KeepAlive(hloSerialized) + loadedExec := must.M1(client.Compile().WithHLO(hloSerialized).Done()) + defer runtime.KeepAlive(loadedExec) + fmt.Printf("\t- program compiled successfully.\n") + + // Test values: + inputs := []float32{0.1, 1, 3, 4, 5} + wants := []float32{1.01, 2, 10, 17, 26} + fmt.Printf("f(x) = x^2 + 1:\n") + for ii, input := range inputs { + // Transfer input to an on-device buffer. + inputBuffer, err := ScalarToBufferOnDeviceNum(client, 0, input) + require.NoErrorf(t, err, "Failed to create on-device buffer for input %v, deviceNum=%d", input, 0) + + // Execute: it returns the output on-device buffer(s). + outputBuffers, err := loadedExec.Execute(inputBuffer).OnDevicesByNum(0).Done() + require.NoErrorf(t, err, "Failed to execute on input %d, deviceNum=%d", input, 0) + + // Transfer output on-device buffer to a "host" value (in Go). + output, err := BufferToScalar[float32](outputBuffers[0]) + require.NoErrorf(t, err, "Failed to transfer results of execution on input %d", input) + + // Print and check value is what we wanted. + fmt.Printf("\tf(x=%g) = %g\n", input, output) + require.InDelta(t, output, wants[ii], 0.001) + + // Release inputBuffer -- and don't wait for the GC. + require.NoError(t, inputBuffer.Destroy()) + } +} diff --git a/pjrt/pjrt_c_api.h b/pjrt/pjrt_c_api.h index 96b7175..75b83df 100644 --- a/pjrt/pjrt_c_api.h +++ b/pjrt/pjrt_c_api.h @@ -79,7 +79,7 @@ PJRT_DEFINE_STRUCT_TRAITS(PJRT_Extension_Base, next); // Changes include: // * Adding a new field to the PJRT_Api or argument structs // * Renaming a method or argument (doesn't affect ABI) -#define PJRT_API_MINOR 54 +#define PJRT_API_MINOR 57 // The plugin should set the major_version and minor_version of // PJRT_Api.pjrt_api_version to be the `PJRT_API_MAJOR` and `PJRT_API_MINOR` in @@ -644,6 +644,10 @@ typedef enum { // 2-bit integer types PJRT_Buffer_Type_S2, PJRT_Buffer_Type_U2, + + // More truncated 8 bit floating-point formats. + PJRT_Buffer_Type_F8E4M3, + PJRT_Buffer_Type_F8E3M4, } PJRT_Buffer_Type; typedef enum { @@ -1755,6 +1759,20 @@ PJRT_DEFINE_STRUCT_TRAITS(PJRT_Buffer_IsDeleted_Args, is_deleted); // True if and only if PJRT_Buffer_Delete has previously been called. typedef PJRT_Error* PJRT_Buffer_IsDeleted(PJRT_Buffer_IsDeleted_Args* args); +struct PJRT_Buffer_CopyRawToHost_Args { + size_t struct_size; + PJRT_Extension_Base* extension_start; + PJRT_Buffer* buffer; + void* dst; + int64_t offset; + int64_t transfer_size; + PJRT_Event* event; // out +}; +PJRT_DEFINE_STRUCT_TRAITS(PJRT_Buffer_CopyRawToHost_Args, event); + +typedef PJRT_Error* PJRT_Buffer_CopyRawToHost( + PJRT_Buffer_CopyRawToHost_Args* args); + struct PJRT_Buffer_CopyToDevice_Args { size_t struct_size; PJRT_Extension_Base* extension_start; @@ -2118,7 +2136,7 @@ typedef PJRT_Error* PJRT_Compile(PJRT_Compile_Args* args); #define _PJRT_API_STRUCT_FIELD(fn_type) fn_type* fn_type // Please modify PJRT_Api_STRUCT_SIZE if the last field of PJRT_Api is changed. -typedef struct { +typedef struct PJRT_Api { size_t struct_size; PJRT_Extension_Base* extension_start; @@ -2246,11 +2264,11 @@ typedef struct { _PJRT_API_STRUCT_FIELD(PJRT_ExecuteContext_Create); _PJRT_API_STRUCT_FIELD(PJRT_ExecuteContext_Destroy); + _PJRT_API_STRUCT_FIELD(PJRT_Buffer_CopyRawToHost); } PJRT_Api; enum { - PJRT_Api_STRUCT_SIZE = - PJRT_STRUCT_SIZE(PJRT_Api, PJRT_Client_TopologyDescription) + PJRT_Api_STRUCT_SIZE = PJRT_STRUCT_SIZE(PJRT_Api, PJRT_Buffer_CopyRawToHost) }; #undef _PJRT_API_STRUCT_FIELD diff --git a/pjrt/prjt_test.go b/pjrt/pjrt_test.go similarity index 100% rename from pjrt/prjt_test.go rename to pjrt/pjrt_test.go diff --git a/pjrt/test_jax_hlo.pb b/pjrt/test_jax_hlo.pb new file mode 100644 index 0000000..7008e42 Binary files /dev/null and b/pjrt/test_jax_hlo.pb differ diff --git a/protos/autotune_results.proto b/protos/autotune_results.proto new file mode 100644 index 0000000..cf3ddcc --- /dev/null +++ b/protos/autotune_results.proto @@ -0,0 +1,52 @@ +/* Copyright 2022 The OpenXLA Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +package xla; + +import "xla/autotuning.proto"; + +// A collection of algorithms for particular dot/convs. Usually this is "the +// best" algorithm for the particular dot/conv, although that's not strictly +// required. +// +// Users don't interact with this proto directly. It's used internally to +// facilitate ahead-of-time autotuning -- The string used by +// xla::{Serialize,Load}AutotuneResults is, internally, a serialization of this +// proto. +// +// LINT.IfChange +message AutotuneResults { + message Entry { + string device = 1; + string hlo = 2; + AutotuneResult result = 3; + } + + int32 version = 1; + reserved 2; // dots + reserved 3; // convs + repeated Entry results = 4; +} +// LINT.ThenChange( +// "service/gpu/autotuner_util.cc:version" +// ) + +message AutotuningLogs { + repeated AutotuningLog logs = 1; + + // Next ID: 2 +} diff --git a/protos/autotune_results/autotune_results.pb.go b/protos/autotune_results/autotune_results.pb.go index 21ea7a9..426fda8 100644 --- a/protos/autotune_results/autotune_results.pb.go +++ b/protos/autotune_results/autotune_results.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/autotune_results.proto package autotune_results @@ -57,11 +57,9 @@ type AutotuneResults struct { func (x *AutotuneResults) Reset() { *x = AutotuneResults{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotune_results_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotune_results_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResults) String() string { @@ -72,7 +70,7 @@ func (*AutotuneResults) ProtoMessage() {} func (x *AutotuneResults) ProtoReflect() protoreflect.Message { mi := &file_xla_autotune_results_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -111,11 +109,9 @@ type AutotuningLogs struct { func (x *AutotuningLogs) Reset() { *x = AutotuningLogs{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotune_results_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotune_results_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuningLogs) String() string { @@ -126,7 +122,7 @@ func (*AutotuningLogs) ProtoMessage() {} func (x *AutotuningLogs) ProtoReflect() protoreflect.Message { mi := &file_xla_autotune_results_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -160,11 +156,9 @@ type AutotuneResults_Entry struct { func (x *AutotuneResults_Entry) Reset() { *x = AutotuneResults_Entry{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotune_results_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotune_results_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResults_Entry) String() string { @@ -175,7 +169,7 @@ func (*AutotuneResults_Entry) ProtoMessage() {} func (x *AutotuneResults_Entry) ProtoReflect() protoreflect.Message { mi := &file_xla_autotune_results_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -273,44 +267,6 @@ func file_xla_autotune_results_proto_init() { if File_xla_autotune_results_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_autotune_results_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResults); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotune_results_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*AutotuningLogs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotune_results_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResults_Entry); 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{ diff --git a/protos/autotuning.proto b/protos/autotuning.proto new file mode 100644 index 0000000..b3d6b8e --- /dev/null +++ b/protos/autotuning.proto @@ -0,0 +1,126 @@ +// This file defines protos that store the results of autotuning various +// operations. +// +// They are in proto format because we want to log them structured. They offer +// tremendous statistical, testing, and debugging value. +syntax = "proto3"; + +package xla; + +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "xla/tsl/protobuf/dnn.proto"; + +message CudnnVersion { + int32 major = 1; + int32 minor = 2; + int32 patch = 3; +} + +message ComputeCapability { + int32 major = 1; + int32 minor = 2; +} + +message AutotuneResult { + enum FailureKind { + UNKNOWN = 0; + + // Algorithm wrote memory outside its output buffers. + REDZONE_MODIFIED = 1; + + // Algorithm gave a different result from a reference algorithm. + WRONG_RESULT = 2; + + // Algorithm was rejected for failing to run or for known bugs. + DISQUALIFIED = 3; + } + + message FailureResult { + FailureKind kind = 1; + string msg = 2; + + // For failure_kind == WRONG_RESULT, this field indicates the reference + // configuration that we compared against. + // + // Note that the reference algorithm isn't always correct. However, + // empirically it's more correct, as it's "algo 0", less fancy than the + // compared one. + oneof key { + ConvKey reference_conv = 11; + GemmKey reference_gemm = 12; + CudaConvPlanKey reference_cuda_conv_plan = 14; + stream_executor.dnn.AlgorithmProto reference_algorithm = 15; + } + + int64 buffer_address = 13; + } + + // Legacy and unused in new data; superseded by AlgorithmProto. + message ConvKey { + int64 algorithm = 1; + bool tensor_ops_enabled = 2; + } + + message GemmKey { + int64 algorithm = 1; + } + + // Legacy and unused in new data; superseded by AlgorithmProto. + message CudaConvPlanKey { + string exec_plan_id = 1; + } + + // If you don't need a proto in your code, please use TritonGemmConfig instead + // of using this proto directly. + message TritonGemmKey { + int64 block_m = 1; + int64 block_n = 2; + int64 block_k = 3; + int64 split_k = 4; + int64 num_stages = 5; + int64 num_warps = 6; + int64 num_ctas = 7; + } + + message CustomKernelFusionKey { + int64 kernel_index = 1; + } + + int64 scratch_bytes = 8; + google.protobuf.Duration run_time = 9; + + FailureResult failure = 7; + + oneof key { + ConvKey conv = 5; + GemmKey gemm = 6; + TritonGemmKey triton = 17; + CudaConvPlanKey cuda_conv_plan = 15; + CustomKernelFusionKey custom_kernel_fusion = 18; + stream_executor.dnn.AlgorithmProto algorithm = 16; + } + + // Next ID: 19 +} + +message AutotuningLog { + google.protobuf.Any instr = 1; + + // Records all auto-tuning results per algorithm. + repeated AutotuneResult results = 2; + + CudnnVersion cudnn_version = 3; + ComputeCapability compute_capability = 4; + + // stream_executor::DeviceDescription::pci_bus_id. + string device_pci_bus_id = 5; + + string blas_version = 6; + + string fusion_name = 7; + + int64 fusion_count = 8; + + // Next ID: 9 +} diff --git a/protos/autotuning/autotuning.pb.go b/protos/autotuning/autotuning.pb.go index 004bef9..20f18d1 100644 --- a/protos/autotuning/autotuning.pb.go +++ b/protos/autotuning/autotuning.pb.go @@ -6,8 +6,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/autotuning.proto package autotuning @@ -96,11 +96,9 @@ type CudnnVersion struct { func (x *CudnnVersion) Reset() { *x = CudnnVersion{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CudnnVersion) String() string { @@ -111,7 +109,7 @@ func (*CudnnVersion) ProtoMessage() {} func (x *CudnnVersion) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -158,11 +156,9 @@ type ComputeCapability struct { func (x *ComputeCapability) Reset() { *x = ComputeCapability{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ComputeCapability) String() string { @@ -173,7 +169,7 @@ func (*ComputeCapability) ProtoMessage() {} func (x *ComputeCapability) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -223,11 +219,9 @@ type AutotuneResult struct { func (x *AutotuneResult) Reset() { *x = AutotuneResult{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult) String() string { @@ -238,7 +232,7 @@ func (*AutotuneResult) ProtoMessage() {} func (x *AutotuneResult) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -382,11 +376,9 @@ type AutotuningLog struct { func (x *AutotuningLog) Reset() { *x = AutotuningLog{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuningLog) String() string { @@ -397,7 +389,7 @@ func (*AutotuningLog) ProtoMessage() {} func (x *AutotuningLog) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -494,11 +486,9 @@ type AutotuneResult_FailureResult struct { func (x *AutotuneResult_FailureResult) Reset() { *x = AutotuneResult_FailureResult{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_FailureResult) String() string { @@ -509,7 +499,7 @@ func (*AutotuneResult_FailureResult) ProtoMessage() {} func (x *AutotuneResult_FailureResult) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -620,11 +610,9 @@ type AutotuneResult_ConvKey struct { func (x *AutotuneResult_ConvKey) Reset() { *x = AutotuneResult_ConvKey{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_ConvKey) String() string { @@ -635,7 +623,7 @@ func (*AutotuneResult_ConvKey) ProtoMessage() {} func (x *AutotuneResult_ConvKey) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -674,11 +662,9 @@ type AutotuneResult_GemmKey struct { func (x *AutotuneResult_GemmKey) Reset() { *x = AutotuneResult_GemmKey{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_GemmKey) String() string { @@ -689,7 +675,7 @@ func (*AutotuneResult_GemmKey) ProtoMessage() {} func (x *AutotuneResult_GemmKey) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -722,11 +708,9 @@ type AutotuneResult_CudaConvPlanKey struct { func (x *AutotuneResult_CudaConvPlanKey) Reset() { *x = AutotuneResult_CudaConvPlanKey{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_CudaConvPlanKey) String() string { @@ -737,7 +721,7 @@ func (*AutotuneResult_CudaConvPlanKey) ProtoMessage() {} func (x *AutotuneResult_CudaConvPlanKey) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -777,11 +761,9 @@ type AutotuneResult_TritonGemmKey struct { func (x *AutotuneResult_TritonGemmKey) Reset() { *x = AutotuneResult_TritonGemmKey{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_TritonGemmKey) String() string { @@ -792,7 +774,7 @@ func (*AutotuneResult_TritonGemmKey) ProtoMessage() {} func (x *AutotuneResult_TritonGemmKey) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -866,11 +848,9 @@ type AutotuneResult_CustomKernelFusionKey struct { func (x *AutotuneResult_CustomKernelFusionKey) Reset() { *x = AutotuneResult_CustomKernelFusionKey{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_autotuning_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_autotuning_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutotuneResult_CustomKernelFusionKey) String() string { @@ -881,7 +861,7 @@ func (*AutotuneResult_CustomKernelFusionKey) ProtoMessage() {} func (x *AutotuneResult_CustomKernelFusionKey) ProtoReflect() protoreflect.Message { mi := &file_xla_autotuning_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1107,128 +1087,6 @@ func file_xla_autotuning_proto_init() { if File_xla_autotuning_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_autotuning_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*CudnnVersion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ComputeCapability); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*AutotuningLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_FailureResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_ConvKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_GemmKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_CudaConvPlanKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_TritonGemmKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_autotuning_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*AutotuneResult_CustomKernelFusionKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_xla_autotuning_proto_msgTypes[2].OneofWrappers = []any{ (*AutotuneResult_Conv)(nil), (*AutotuneResult_Gemm)(nil), diff --git a/protos/compile_options.proto b/protos/compile_options.proto new file mode 100644 index 0000000..56b0f58 --- /dev/null +++ b/protos/compile_options.proto @@ -0,0 +1,156 @@ +syntax = "proto3"; + +package xla; + +import "xla/stream_executor/device_description.proto"; +import "xla/xla.proto"; +import "xla/xla_data.proto"; + +// A serialization of xla::ExecutableBuildOptions. +// Next id: 22. +message ExecutableBuildOptionsProto { + // If set, this is the device to build the computation for. Valid + // device_ordinal values are: 0 to # of devices - 1. These values are + // identical to the device ordinal values used by StreamExecutor. The built + // executable will be executable on any device equivalent to the specified + // device as determined by Backend::devices_equivalent(). A value of -1 + // indicates this option has not been set. + int64 device_ordinal = 1; + + // If set, this specifies the layout of the result of the computation. If not + // set, the service will chose the layout of the result. A Shape is used to + // store the layout to accommodate tuple result shapes. A value of nullptr + // indicates the option has not been set. + xla.ShapeProto result_layout = 2; + + // Expose access to the XLA compilation environments, which will be passed to + // the compilation process. + xla.CompilationEnvironmentsProto comp_envs = 13; + + // Expose access to the XLA debug options which will be passed to the + // compilation process. + xla.DebugOptions debug_options = 3; + + // The number of replicas of this computation that are to be executed. + // Defaults to 1. + int64 num_replicas = 4; + + // The number of partitions in this computation. Defaults to 1. + int64 num_partitions = 5; + + // Indicates whether to use SPMD (true) or MPMD (false) partitioning when + // num_partitions > 1 and XLA is requested to partition the input program. + bool use_spmd_partitioning = 6; + + // Whether to automatically generate XLA shardings for SPMD partitioner. + bool use_auto_spmd_partitioning = 7; + + // The amount of effort to spend on optimizing for minimizing program + // execution time, as a value in [-1.0, +1.0]. The baseline is 0.0, which + // strongly prioritizes execution time at the cost of longer compile times, + // suitable for production workloads. A value of -0.5 would be appropriate for + // research use cases that prefer faster compilations to iterate more quickly. + // Positive values, on the other hand, might enable costly optimizations that + // are off by default. + float exec_time_optimization_effort = 20; + + // The amount of effort to spend on making the program fit in memory (where + // "fit in memory" here has a backend-dependent meaning), as a value in + // [-1.0,+1.0]. The baseline is 0.0, which expends significant effort on + // attempting to make the program fit. A value of -1.0 would be appropriate + // for use cases that wish to spend minimal effort here and fail as quickly as + // possible instead. Positive values, on the other hand, might enable costly + // algorithms to reduce memory usage that are off by default. + float memory_fitting_effort = 21; + + // Whether HLOs should be deduplicated. + bool deduplicate_hlo = 8; + + // If set, this specifies a static device assignment for the computation. + // Otherwise, the computation will be compiled generically and can be run with + // any device assignment compatible with the computation's replica and + // partition counts. + xla.DeviceAssignmentProto device_assignment = 9; + + // Whether input and output buffers are aliased if the associated parameter is + // passed-through XLA modules without being changed. + bool alias_passthrough_params = 10; + + // By default, XLA builds an executable by invoking standard compilation, i.e. + // running Compiler::Compile, or both Compiler::RunHloPasses and + // Compiler::RunBackend. When run_backend_only is set to true, XLA builds an + // executable by invoking only RunBackend and skip invoking RunHloPasses, + // which can be used to compile post-optimizations HLO modules. + bool run_backend_only = 11; + + // Allows sharding propagation to propagate to the parameters. This changes + // the input shape of the computation (which is undesirable), but it can be + // used to allow to run partial compilation to determine what would be the + // input sharding of a computation if XLA would be allowed to propagate the + // sharding which can be used by higher level framework as a way to query + // intermediate sharding of operations when multiple computation would be + // chained and merged together. + // This is a vector of bool, because the user can control which parameters can + // have the sharding substituted. If only one boolean value is passed in the + // vector that is interpreted as the value to be applied for every parameter. + repeated bool allow_spmd_sharding_propagation_to_parameters = 18; + + // Allows sharding propagation to propagate to the outputs. This changes the + // output shape of the computation (which is undesirable), but it can be used + // to allow to run partial compilation to determine what would be the output + // sharding of a computation if XLA would be allowed to propagate the sharding + // which can be used by higher level framework as a way to query intermediate + // sharding of operations when multiple computation would be chained and + // merged together. + // This is a vector of bool, because the user can control (if the output of + // the computation is a tuple) which elements of the tuple can have the + // sharding substituted and which don't. If only one boolean value is passed + // in the vector that's interpreted as the value to be applied for every + // single element of the output tuple. One value per element of the tuple + // means that each value is attached to one of the output elements. + repeated bool allow_spmd_sharding_propagation_to_output = 12; + + // Opaque profile data for any feedback directed optimizations. + bytes fdo_profile = 14; + + int64 device_memory_size = 15; + + // Mesh shape in auto sharding options. + repeated int64 auto_spmd_partitioning_mesh_shape = 16; + + // Mesh ids in auto sharding options. + repeated int64 auto_spmd_partitioning_mesh_ids = 17; + + // Use Shardy, a new partitioner, to replace the existing + // ShardingPropagation and SpmdPartitioner. See go/xla-sdy-pipeline for + // details. + bool use_shardy_partitioner = 19; +} + +message OptionOverrideProto { + oneof value { + string string_field = 1; + bool bool_field = 2; + int64 int_field = 3; + double double_field = 4; + } +} + +message CompileOptionsProto { + // Refer CompileOptions for documentation of fields. + repeated ShapeProto argument_layouts = 1; + bool parameter_is_tupled_arguments = 2; + ExecutableBuildOptionsProto executable_build_options = 3; + bool compile_portable_executable = 4; + int64 profile_version = 5; + bytes serialized_multi_slice_config = 6; + map env_option_overrides = 7; + + stream_executor.GpuTargetConfigProto target_config = 8; +} + +// Helper for serializing opaque executables alongside CompileOptions. +message ExecutableAndOptionsProto { + bytes serialized_executable = 1; + CompileOptionsProto compile_options = 2; +} diff --git a/protos/compile_options/compile_options.pb.go b/protos/compile_options/compile_options.pb.go index 4e5cf2c..64379e7 100644 --- a/protos/compile_options/compile_options.pb.go +++ b/protos/compile_options/compile_options.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/pjrt/compile_options.proto package compile_options @@ -24,7 +24,7 @@ const ( ) // A serialization of xla::ExecutableBuildOptions. -// Next id: 20. +// Next id: 22. type ExecutableBuildOptionsProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -58,6 +58,22 @@ type ExecutableBuildOptionsProto struct { UseSpmdPartitioning bool `protobuf:"varint,6,opt,name=use_spmd_partitioning,json=useSpmdPartitioning,proto3" json:"use_spmd_partitioning,omitempty"` // Whether to automatically generate XLA shardings for SPMD partitioner. UseAutoSpmdPartitioning bool `protobuf:"varint,7,opt,name=use_auto_spmd_partitioning,json=useAutoSpmdPartitioning,proto3" json:"use_auto_spmd_partitioning,omitempty"` + // The amount of effort to spend on optimizing for minimizing program + // execution time, as a value in [-1.0, +1.0]. The baseline is 0.0, which + // strongly prioritizes execution time at the cost of longer compile times, + // suitable for production workloads. A value of -0.5 would be appropriate for + // research use cases that prefer faster compilations to iterate more quickly. + // Positive values, on the other hand, might enable costly optimizations that + // are off by default. + ExecTimeOptimizationEffort float32 `protobuf:"fixed32,20,opt,name=exec_time_optimization_effort,json=execTimeOptimizationEffort,proto3" json:"exec_time_optimization_effort,omitempty"` + // The amount of effort to spend on making the program fit in memory (where + // "fit in memory" here has a backend-dependent meaning), as a value in + // [-1.0,+1.0]. The baseline is 0.0, which expends significant effort on + // attempting to make the program fit. A value of -1.0 would be appropriate + // for use cases that wish to spend minimal effort here and fail as quickly as + // possible instead. Positive values, on the other hand, might enable costly + // algorithms to reduce memory usage that are off by default. + MemoryFittingEffort float32 `protobuf:"fixed32,21,opt,name=memory_fitting_effort,json=memoryFittingEffort,proto3" json:"memory_fitting_effort,omitempty"` // Whether HLOs should be deduplicated. DeduplicateHlo bool `protobuf:"varint,8,opt,name=deduplicate_hlo,json=deduplicateHlo,proto3" json:"deduplicate_hlo,omitempty"` // If set, this specifies a static device assignment for the computation. @@ -114,11 +130,9 @@ type ExecutableBuildOptionsProto struct { func (x *ExecutableBuildOptionsProto) Reset() { *x = ExecutableBuildOptionsProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_pjrt_compile_options_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_pjrt_compile_options_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecutableBuildOptionsProto) String() string { @@ -129,7 +143,7 @@ func (*ExecutableBuildOptionsProto) ProtoMessage() {} func (x *ExecutableBuildOptionsProto) ProtoReflect() protoreflect.Message { mi := &file_xla_pjrt_compile_options_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -200,6 +214,20 @@ func (x *ExecutableBuildOptionsProto) GetUseAutoSpmdPartitioning() bool { return false } +func (x *ExecutableBuildOptionsProto) GetExecTimeOptimizationEffort() float32 { + if x != nil { + return x.ExecTimeOptimizationEffort + } + return 0 +} + +func (x *ExecutableBuildOptionsProto) GetMemoryFittingEffort() float32 { + if x != nil { + return x.MemoryFittingEffort + } + return 0 +} + func (x *ExecutableBuildOptionsProto) GetDeduplicateHlo() bool { if x != nil { return x.DeduplicateHlo @@ -293,11 +321,9 @@ type OptionOverrideProto struct { func (x *OptionOverrideProto) Reset() { *x = OptionOverrideProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_pjrt_compile_options_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_pjrt_compile_options_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OptionOverrideProto) String() string { @@ -308,7 +334,7 @@ func (*OptionOverrideProto) ProtoMessage() {} func (x *OptionOverrideProto) ProtoReflect() protoreflect.Message { mi := &file_xla_pjrt_compile_options_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -404,11 +430,9 @@ type CompileOptionsProto struct { func (x *CompileOptionsProto) Reset() { *x = CompileOptionsProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_pjrt_compile_options_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_pjrt_compile_options_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CompileOptionsProto) String() string { @@ -419,7 +443,7 @@ func (*CompileOptionsProto) ProtoMessage() {} func (x *CompileOptionsProto) ProtoReflect() protoreflect.Message { mi := &file_xla_pjrt_compile_options_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -502,11 +526,9 @@ type ExecutableAndOptionsProto struct { func (x *ExecutableAndOptionsProto) Reset() { *x = ExecutableAndOptionsProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_pjrt_compile_options_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_pjrt_compile_options_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecutableAndOptionsProto) String() string { @@ -517,7 +539,7 @@ func (*ExecutableAndOptionsProto) ProtoMessage() {} func (x *ExecutableAndOptionsProto) ProtoReflect() protoreflect.Message { mi := &file_xla_pjrt_compile_options_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -556,7 +578,7 @@ var file_xla_pjrt_compile_options_proto_rawDesc = []byte{ 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x78, 0x6c, 0x61, 0x2f, 0x78, 0x6c, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x78, 0x6c, 0x61, 0x2f, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd2, 0x08, 0x0a, 0x1b, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc9, 0x09, 0x0a, 0x1b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, @@ -583,113 +605,120 @@ var file_xla_pjrt_compile_options_proto_rawDesc = []byte{ 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x12, - 0x47, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x61, 0x6c, 0x69, 0x61, - 0x73, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x75, 0x6e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x75, - 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x5f, 0x0a, 0x2d, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x12, 0x20, - 0x03, 0x28, 0x08, 0x52, 0x28, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, - 0x29, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x24, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x64, 0x6f, 0x5f, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x66, 0x64, 0x6f, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x48, 0x0a, 0x21, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, - 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, - 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x1d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, - 0x44, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, - 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x68, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x75, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x79, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x22, 0xa8, 0x01, 0x0a, 0x13, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, - 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, - 0x69, 0x6e, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, - 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x07, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x05, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3a, - 0x0a, 0x10, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, - 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0f, 0x61, 0x72, 0x67, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x73, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x64, 0x5f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x73, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x64, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5a, 0x0a, - 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x52, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x62, 0x0a, 0x14, 0x65, 0x6e, 0x76, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, + 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1a, 0x65, + 0x78, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x5f, 0x66, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x66, 0x66, 0x6f, + 0x72, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x38, 0x0a, 0x18, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, + 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x16, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, + 0x75, 0x67, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x75, 0x6e, + 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x75, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x12, 0x5f, 0x0a, 0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x6d, + 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x08, 0x52, 0x28, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x29, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, + 0x6d, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x08, 0x52, 0x24, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, + 0x6d, 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x66, 0x64, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x66, 0x64, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2c, + 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x48, 0x0a, 0x21, + 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x70, + 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, + 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, + 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x03, 0x52, + 0x1b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x75, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x75, 0x73, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x79, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x65, 0x72, 0x22, 0xa8, 0x01, 0x0a, 0x13, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, + 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x05, + 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x3a, 0x0a, 0x10, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x0f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x73, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x49, 0x73, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x64, 0x41, 0x72, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5a, 0x0a, 0x18, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x16, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x6f, + 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x1a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x62, 0x0a, 0x14, + 0x65, 0x6e, 0x76, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x65, 0x6e, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x65, 0x6e, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x2e, 0x47, 0x70, 0x75, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x5f, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 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, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x33, 0x0a, 0x15, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x14, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x4a, 0x0a, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x2e, 0x47, 0x70, 0x75, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x5f, 0x0a, 0x17, + 0x45, 0x6e, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 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, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, + 0x0a, 0x19, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x33, 0x0a, 0x15, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -740,56 +769,6 @@ func file_xla_pjrt_compile_options_proto_init() { if File_xla_pjrt_compile_options_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_pjrt_compile_options_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ExecutableBuildOptionsProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_pjrt_compile_options_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*OptionOverrideProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_pjrt_compile_options_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*CompileOptionsProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_pjrt_compile_options_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ExecutableAndOptionsProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_xla_pjrt_compile_options_proto_msgTypes[1].OneofWrappers = []any{ (*OptionOverrideProto_StringField)(nil), (*OptionOverrideProto_BoolField)(nil), diff --git a/protos/device_description.proto b/protos/device_description.proto new file mode 100644 index 0000000..2415091 --- /dev/null +++ b/protos/device_description.proto @@ -0,0 +1,74 @@ +/* Copyright 2022 The OpenXLA Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +package stream_executor; + +import "xla/autotune_results.proto"; + +message CudaComputeCapabilityProto { + int32 major = 1; + int32 minor = 2; +} + +message RocmComputeCapabilityProto { + string gcn_arch_name = 1; +} + +message GpuDeviceInfoProto { + int32 threads_per_block_limit = 1; + int32 threads_per_warp = 2; + int32 shared_memory_per_block = 3; + int32 shared_memory_per_core = 4; + int32 threads_per_core_limit = 5; + int32 core_count = 6; + int64 fpus_per_core = 7; + int32 block_dim_limit_x = 8; + int32 block_dim_limit_y = 9; + int32 block_dim_limit_z = 10; + int64 memory_bandwidth = 11; + int64 l2_cache_size = 12; + float clock_rate_ghz = 13; + int64 device_memory_size = 14; + int32 shared_memory_per_block_optin = 15; + oneof compute_capability { + CudaComputeCapabilityProto cuda_compute_capability = 16; + RocmComputeCapabilityProto rocm_compute_capability = 17; + } + int64 registers_per_core_limit = 18; + int64 registers_per_block_limit = 19; +} + +message DnnVersionInfoProto { + int32 major = 1; + int32 minor = 2; + int32 patch = 3; +} + +message GpuTargetConfigProto { + GpuDeviceInfoProto gpu_device_info = 1; + reserved 2, 3; + reserved "cuda_compute_capability", "rocm_compute_capability"; + string platform_name = 4; + DnnVersionInfoProto dnn_version_info = 5; + + // TODO(b/248362914): Autotuning results should be separate from + // GpuTargetConfig because autotuning can be updated regularly separate from + // the target. + xla.AutotuneResults autotune_results = 6; + + string device_description_str = 7; +} diff --git a/protos/device_description/device_description.pb.go b/protos/device_description/device_description.pb.go index 121eec9..aabbdd9 100644 --- a/protos/device_description/device_description.pb.go +++ b/protos/device_description/device_description.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/stream_executor/device_description.proto package device_description @@ -47,11 +47,9 @@ type CudaComputeCapabilityProto struct { func (x *CudaComputeCapabilityProto) Reset() { *x = CudaComputeCapabilityProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_stream_executor_device_description_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_stream_executor_device_description_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CudaComputeCapabilityProto) String() string { @@ -62,7 +60,7 @@ func (*CudaComputeCapabilityProto) ProtoMessage() {} func (x *CudaComputeCapabilityProto) ProtoReflect() protoreflect.Message { mi := &file_xla_stream_executor_device_description_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -101,11 +99,9 @@ type RocmComputeCapabilityProto struct { func (x *RocmComputeCapabilityProto) Reset() { *x = RocmComputeCapabilityProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_stream_executor_device_description_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_stream_executor_device_description_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RocmComputeCapabilityProto) String() string { @@ -116,7 +112,7 @@ func (*RocmComputeCapabilityProto) ProtoMessage() {} func (x *RocmComputeCapabilityProto) ProtoReflect() protoreflect.Message { mi := &file_xla_stream_executor_device_description_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -169,11 +165,9 @@ type GpuDeviceInfoProto struct { func (x *GpuDeviceInfoProto) Reset() { *x = GpuDeviceInfoProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_stream_executor_device_description_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_stream_executor_device_description_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GpuDeviceInfoProto) String() string { @@ -184,7 +178,7 @@ func (*GpuDeviceInfoProto) ProtoMessage() {} func (x *GpuDeviceInfoProto) ProtoReflect() protoreflect.Message { mi := &file_xla_stream_executor_device_description_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -367,11 +361,9 @@ type DnnVersionInfoProto struct { func (x *DnnVersionInfoProto) Reset() { *x = DnnVersionInfoProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_stream_executor_device_description_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_stream_executor_device_description_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DnnVersionInfoProto) String() string { @@ -382,7 +374,7 @@ func (*DnnVersionInfoProto) ProtoMessage() {} func (x *DnnVersionInfoProto) ProtoReflect() protoreflect.Message { mi := &file_xla_stream_executor_device_description_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -435,11 +427,9 @@ type GpuTargetConfigProto struct { func (x *GpuTargetConfigProto) Reset() { *x = GpuTargetConfigProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_stream_executor_device_description_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_stream_executor_device_description_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GpuTargetConfigProto) String() string { @@ -450,7 +440,7 @@ func (*GpuTargetConfigProto) ProtoMessage() {} func (x *GpuTargetConfigProto) ProtoReflect() protoreflect.Message { mi := &file_xla_stream_executor_device_description_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -656,68 +646,6 @@ func file_xla_stream_executor_device_description_proto_init() { if File_xla_stream_executor_device_description_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_stream_executor_device_description_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*CudaComputeCapabilityProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_stream_executor_device_description_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*RocmComputeCapabilityProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_stream_executor_device_description_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GpuDeviceInfoProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_stream_executor_device_description_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*DnnVersionInfoProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_stream_executor_device_description_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GpuTargetConfigProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_xla_stream_executor_device_description_proto_msgTypes[2].OneofWrappers = []any{ (*GpuDeviceInfoProto_CudaComputeCapability)(nil), (*GpuDeviceInfoProto_RocmComputeCapability)(nil), diff --git a/protos/dnn.proto b/protos/dnn.proto new file mode 100644 index 0000000..1441802 --- /dev/null +++ b/protos/dnn.proto @@ -0,0 +1,205 @@ +// LINT: LEGACY_NAMES +syntax = "proto3"; + +package stream_executor.dnn; + +import "google/protobuf/wrappers.proto"; + + + +// Specifies the data type used by an operation. +enum DataType { + kFloat = 0; + kDouble = 1; + kHalf = 2; + kInt8 = 3; + kInt32 = 4; + kComplexFloat = 5; + kComplexDouble = 6; + kBF16 = 7; + kF8E5M2 = 8; + kF8E4M3FN = 9; + kF8E5M2FNUZ = 10; + kF8E4M3FNUZ = 11; + kInt64 = 12; + kF8E4M3 = 13; + kF8E3M4 = 14; +} + +// Describes how a convolution input or output layer's data is formatted. +enum DataLayout { + // Naming convention: + // Y <-> row or height + // X <-> column or width + // Batch <-> batch, or N + // Depth <-> feature, or channel + // TODO(timshen): turn them into cuDNN names, e.g. kNCHW. + // + // Note: In cudnn, kBatchDepthYX4 and kBatchDepthYX32 are the same layout + // (namely, NCHW_VECT_C). It differentiates between these two by using a + // different data type (int8x4 vs int8x32). In StreamExecutor we use + // different layouts for these, because we don't usually pass an explicit data + // type to StreamExecutor functions. + kYXDepthBatch = 0; + kYXBatchDepth = 1; + kBatchYXDepth = 2; // cuDNN's NHWC layout + kBatchDepthYX = 3; // cuDNN's NCHW layout + kBatchDepthYX4 = 4; // cuDNN's NCHW_VECT_C with 4-elem vectors (e.g. int8x4) + kBatchDepthYX32 = 5; // cuDNN's NCHW_VECT_C with 32-elem vects (e.g. int8x32) +} + +// Describes how a convolution filter is laid out in the memory. +enum FilterLayout { + // Naming convention: + // Y <-> row or height + // X <-> column or width + // Output <-> output feature, or N + // Input <-> input feature, or N + // TODO(timshen): turn them into cuDNN names, e.g. kNCHW. + kOutputInputYX = 0; // cuDNN's NCHW layout + kOutputYXInput = 1; // cuDNN's NHWC layout + kOutputInputYX4 = 2; // cuDNN's NCHW_VECT_C layout with 4-elem vectors + kOutputInputYX32 = 5; // cuDNN's NCHW_VECT_C layout with 32-elem vectors + // cuDNN-specific filter reordering (using `cudnnReorderFilterAndBias`) + // When the filter is reordered, so is the bias (if present). + kOutputInputYX32_CudnnReordered = 6; + kInputYXOutput = 3; + kYXInputOutput = 4; +} + +// Describes a kind of non-linearity (threshold-like mathematical function). +enum ActivationMode { + kNone = 0; + kSigmoid = 1; + // Rectified linear activation: f(x) = x < 0 ? 0 : x + kRelu = 2; + // Rectified linear activation; where upper maximum is 6.0. + kRelu6 = 3; + // Rectified linear activation; where upper maximum specified by + // BatchDescriptor::value_max(). + kReluX = 4; + kTanh = 5; + // Like ReluX; but passes all values in the range [-X,X]. + kBandPass = 6; + // Exponential linear activation: f(x) = x < 0 ? e^x - 1 : x + kElu = 7; + // Leaky Rectified linear activation: f(x) = x < 0 ? alpha * x : x + kLeakyRelu = 8; + // Gaussian Error linear unit activation: + // x * P(X <= x) = 0.5 * x * (1 + erf(x / sqrt(2))), where P(X) ~ N(0, 1). + kGeluExact = 9; +} + +// Describe the math definition for the conv op. The popular behavior is +// actually called cross-correlation in math, despite the operation is often +// referred as convolution. See cuDNN cudnnConvolutionMode_t. +enum ConvolutionMode { + CROSS_CORRELATION = 0; + CONVOLUTION = 1; +} + +enum ConvolutionKind { + INVALID = 0; + FORWARD = 1; + BACKWARD_FILTER = 2; + BACKWARD_DATA = 3; + FORWARD_BIAS_ACTIVATION = 4; + FORWARD_GRAPH = 5; +} + +// Generic tensor representation. +message TensorDescriptorProto { + repeated int64 dimensions = 1; + DataType data_type = 2; + oneof layout_oneof { + DataLayout data_layout = 3; + FilterLayout filter_layout = 4; + } +} + +// Generic algorithm representation. +message AlgorithmProto { + enum MathType { + DEFAULT_MATH = 0; + // The GPU may operate 4x4 matrix FMA. + // See cuDNN's documentation for CUDNN_TENSOR_OP_MATH. + TENSOR_OP_MATH = 1; + } + int64 algo_id = 1; + MathType math_type = 2; + reserved 3; + + map tuning_knobs = 4; + // Legacy algorithm enums and cuDNN Frontend engine numbers need to coexist in + // the same proto medium-term, until we can be confident of no longer needing + // the legacy cuDNN convolution API. Once the migration is complete, we can + // stop producing legacy algorithm enums and remove this field. + bool is_cudnn_frontend = 5; + + // For ROCm only, it's impossible to re-query the required workspace size + // after running the algorithm search, so we must store the workspace size + // along with the choice of algorithm. For consistency and convenience, + // cuDNN uses this field in the same way, even though it would be possible to + // re-query the workspace size from cuDNN at each use. + // + // Since this message is persisted in files, we need to be able to distinguish + // 0 workspace size from unknown workspace size in an old message, so this is + // a message field. + google.protobuf.UInt64Value workspace_size = 6; +} + +// Proto definition of AlgorithmConfig in "dnn.h". +// TODO(ruochengw): After cl/380702564 is submitted, add support for algorithm +// configs with cuDNN Frontend APIs. +message AlgorithmConfigProto { + // Use oneof to emulate optional semantics in proto2 since older + // version of proto3 cannot distinguish "unset field" and "default field". + oneof optional_algorithm { + AlgorithmProto algorithm = 1; + } + oneof optional_algorithm_no_scratch { + AlgorithmProto algorithm_no_scratch = 2; + } + oneof optional_scratch_size { + int64 scratch_size = 3; + } +} + +// Convolution-specific parameters. +message ConvolutionDescriptorProto { + repeated int64 paddings = 1; + repeated int64 strides = 2; + repeated int64 dilations = 3; + // The "accumulator" type. For example, use F32 as an accumulator for F16 + // convolutions. + // See cuDNN's cudnnConvolutionMode_t. + DataType compute_mode = 4; + // See cuDNN's group count. + int32 group_count = 5; + ConvolutionMode convolution_mode = 6; + // Tensorflow node name, same as in NodeDef, for debugging purposes. + string name = 7; +} + +// NormKind kind +enum NormKind { + LAYER_FWD_INFER = 0; + LAYER_FWD_TRAIN = 1; + LAYER_BWD = 2; +} + +// FusedMHAKind kind +enum FusedMHAKind { + BMM1_OUTPUT_UNKNOWN = 0; + BMM1_OUTPUT_INPUT_TYPE = 1; + BMM1_OUTPUT_FLOAT = 2; +} + +// FusedMHAMaskKind kind +enum FMHAMaskKind { + NO_MASK = 0; + PADDING = 1; + CAUSAL = 2; + PADDING_CAUSAL = 3; + ALIBI = 4; +} diff --git a/protos/dnn/dnn.pb.go b/protos/dnn/dnn.pb.go index 1239139..f513671 100644 --- a/protos/dnn/dnn.pb.go +++ b/protos/dnn/dnn.pb.go @@ -2,8 +2,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/tsl/protobuf/dnn.proto package dnn @@ -40,6 +40,8 @@ const ( DataType_kF8E5M2FNUZ DataType = 10 DataType_kF8E4M3FNUZ DataType = 11 DataType_kInt64 DataType = 12 + DataType_kF8E4M3 DataType = 13 + DataType_kF8E3M4 DataType = 14 ) // Enum value maps for DataType. @@ -58,6 +60,8 @@ var ( 10: "kF8E5M2FNUZ", 11: "kF8E4M3FNUZ", 12: "kInt64", + 13: "kF8E4M3", + 14: "kF8E3M4", } DataType_value = map[string]int32{ "kFloat": 0, @@ -73,6 +77,8 @@ var ( "kF8E5M2FNUZ": 10, "kF8E4M3FNUZ": 11, "kInt64": 12, + "kF8E4M3": 13, + "kF8E3M4": 14, } ) @@ -653,11 +659,9 @@ type TensorDescriptorProto struct { func (x *TensorDescriptorProto) Reset() { *x = TensorDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TensorDescriptorProto) String() string { @@ -668,7 +672,7 @@ func (*TensorDescriptorProto) ProtoMessage() {} func (x *TensorDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -762,11 +766,9 @@ type AlgorithmProto struct { func (x *AlgorithmProto) Reset() { *x = AlgorithmProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AlgorithmProto) String() string { @@ -777,7 +779,7 @@ func (*AlgorithmProto) ProtoMessage() {} func (x *AlgorithmProto) ProtoReflect() protoreflect.Message { mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -854,11 +856,9 @@ type AlgorithmConfigProto struct { func (x *AlgorithmConfigProto) Reset() { *x = AlgorithmConfigProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AlgorithmConfigProto) String() string { @@ -869,7 +869,7 @@ func (*AlgorithmConfigProto) ProtoMessage() {} func (x *AlgorithmConfigProto) ProtoReflect() protoreflect.Message { mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -978,11 +978,9 @@ type ConvolutionDescriptorProto struct { func (x *ConvolutionDescriptorProto) Reset() { *x = ConvolutionDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConvolutionDescriptorProto) String() string { @@ -993,7 +991,7 @@ func (*ConvolutionDescriptorProto) ProtoMessage() {} func (x *ConvolutionDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_xla_tsl_protobuf_dnn_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1148,7 +1146,7 @@ var file_xla_tsl_protobuf_dnn_proto_rawDesc = []byte{ 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0xc1, 0x01, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0xdb, 0x01, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x6b, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x48, 0x61, 0x6c, 0x66, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x49, 0x6e, 0x74, 0x38, 0x10, @@ -1160,63 +1158,65 @@ var file_xla_tsl_protobuf_dnn_proto_rawDesc = []byte{ 0x6b, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x6b, 0x46, 0x38, 0x45, 0x35, 0x4d, 0x32, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x6b, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x0b, 0x12, 0x0a, 0x0a, - 0x06, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x10, 0x0c, 0x2a, 0x81, 0x01, 0x0a, 0x0a, 0x44, 0x61, - 0x74, 0x61, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x11, 0x0a, 0x0d, 0x6b, 0x59, 0x58, 0x44, - 0x65, 0x70, 0x74, 0x68, 0x42, 0x61, 0x74, 0x63, 0x68, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x6b, - 0x59, 0x58, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, 0x10, 0x01, 0x12, 0x11, - 0x0a, 0x0d, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x59, 0x58, 0x44, 0x65, 0x70, 0x74, 0x68, 0x10, - 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, - 0x59, 0x58, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, - 0x70, 0x74, 0x68, 0x59, 0x58, 0x34, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x6b, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, 0x59, 0x58, 0x33, 0x32, 0x10, 0x05, 0x2a, 0xae, 0x01, - 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, - 0x0a, 0x0e, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, - 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x59, 0x58, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x34, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x6b, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x33, 0x32, 0x10, - 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x59, 0x58, 0x33, 0x32, 0x5f, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x65, 0x64, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x59, 0x58, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x59, - 0x58, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x10, 0x04, 0x2a, 0x90, - 0x01, 0x0a, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x6b, 0x53, 0x69, 0x67, 0x6d, 0x6f, 0x69, 0x64, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x52, - 0x65, 0x6c, 0x75, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x6b, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x10, - 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x6b, 0x52, 0x65, 0x6c, 0x75, 0x58, 0x10, 0x04, 0x12, 0x09, 0x0a, - 0x05, 0x6b, 0x54, 0x61, 0x6e, 0x68, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x6b, 0x42, 0x61, 0x6e, - 0x64, 0x50, 0x61, 0x73, 0x73, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x6b, 0x45, 0x6c, 0x75, 0x10, - 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x6b, 0x4c, 0x65, 0x61, 0x6b, 0x79, 0x52, 0x65, 0x6c, 0x75, 0x10, - 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x6b, 0x47, 0x65, 0x6c, 0x75, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, - 0x09, 0x2a, 0x39, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x52, 0x4f, 0x53, 0x53, 0x5f, 0x43, 0x4f, - 0x52, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, - 0x4f, 0x4e, 0x56, 0x4f, 0x4c, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x83, 0x01, 0x0a, - 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, - 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x41, - 0x43, 0x4b, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, - 0x11, 0x0a, 0x0d, 0x42, 0x41, 0x43, 0x4b, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x42, 0x49, - 0x41, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, - 0x11, 0x0a, 0x0d, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, - 0x10, 0x05, 0x2a, 0x43, 0x0a, 0x08, 0x4e, 0x6f, 0x72, 0x6d, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x13, - 0x0a, 0x0f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x46, 0x57, 0x44, 0x5f, 0x49, 0x4e, 0x46, 0x45, - 0x52, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x46, 0x57, 0x44, - 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x5f, 0x42, 0x57, 0x44, 0x10, 0x02, 0x2a, 0x5a, 0x0a, 0x0c, 0x46, 0x75, 0x73, 0x65, 0x64, - 0x4d, 0x48, 0x41, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4d, 0x4d, 0x31, 0x5f, - 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4d, 0x4d, 0x31, 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, - 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, - 0x42, 0x4d, 0x4d, 0x31, 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x10, 0x02, 0x2a, 0x53, 0x0a, 0x0c, 0x46, 0x4d, 0x48, 0x41, 0x4d, 0x61, 0x73, 0x6b, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x43, 0x41, 0x55, 0x53, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x41, 0x44, - 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x09, 0x0a, - 0x05, 0x41, 0x4c, 0x49, 0x42, 0x49, 0x10, 0x04, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x06, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x6b, 0x46, 0x38, + 0x45, 0x34, 0x4d, 0x33, 0x10, 0x0d, 0x12, 0x0b, 0x0a, 0x07, 0x6b, 0x46, 0x38, 0x45, 0x33, 0x4d, + 0x34, 0x10, 0x0e, 0x2a, 0x81, 0x01, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x12, 0x11, 0x0a, 0x0d, 0x6b, 0x59, 0x58, 0x44, 0x65, 0x70, 0x74, 0x68, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x6b, 0x59, 0x58, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x6b, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x59, 0x58, 0x44, 0x65, 0x70, 0x74, 0x68, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x6b, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, 0x59, 0x58, 0x10, 0x03, 0x12, 0x12, + 0x0a, 0x0e, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, 0x68, 0x59, 0x58, 0x34, + 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x70, 0x74, + 0x68, 0x59, 0x58, 0x33, 0x32, 0x10, 0x05, 0x2a, 0xae, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, + 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x59, 0x58, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x10, 0x01, + 0x12, 0x13, 0x0a, 0x0f, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x59, 0x58, 0x34, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x6b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x33, 0x32, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x6b, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x33, 0x32, 0x5f, + 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x10, 0x06, + 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x59, 0x58, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x6b, 0x59, 0x58, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x10, 0x04, 0x2a, 0x90, 0x01, 0x0a, 0x0e, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x6b, + 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x6b, 0x53, 0x69, 0x67, 0x6d, 0x6f, + 0x69, 0x64, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x52, 0x65, 0x6c, 0x75, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x6b, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x6b, + 0x52, 0x65, 0x6c, 0x75, 0x58, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x6b, 0x54, 0x61, 0x6e, 0x68, + 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x6b, 0x42, 0x61, 0x6e, 0x64, 0x50, 0x61, 0x73, 0x73, 0x10, + 0x06, 0x12, 0x08, 0x0a, 0x04, 0x6b, 0x45, 0x6c, 0x75, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x6b, + 0x4c, 0x65, 0x61, 0x6b, 0x79, 0x52, 0x65, 0x6c, 0x75, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x6b, + 0x47, 0x65, 0x6c, 0x75, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x09, 0x2a, 0x39, 0x0a, 0x0f, 0x43, + 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x43, 0x52, 0x4f, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x4c, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x56, 0x4f, 0x4c, 0x55, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x83, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4f, 0x52, 0x57, 0x41, + 0x52, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x41, 0x43, 0x4b, 0x57, 0x41, 0x52, 0x44, + 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x41, 0x43, + 0x4b, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, + 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x42, 0x49, 0x41, 0x53, 0x5f, 0x41, 0x43, 0x54, + 0x49, 0x56, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4f, 0x52, + 0x57, 0x41, 0x52, 0x44, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x10, 0x05, 0x2a, 0x43, 0x0a, 0x08, + 0x4e, 0x6f, 0x72, 0x6d, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x5f, 0x46, 0x57, 0x44, 0x5f, 0x49, 0x4e, 0x46, 0x45, 0x52, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x46, 0x57, 0x44, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4e, + 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x42, 0x57, 0x44, 0x10, + 0x02, 0x2a, 0x5a, 0x0a, 0x0c, 0x46, 0x75, 0x73, 0x65, 0x64, 0x4d, 0x48, 0x41, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x4d, 0x4d, 0x31, 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, + 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x4d, + 0x4d, 0x31, 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x42, 0x4d, 0x4d, 0x31, 0x5f, 0x4f, + 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x2a, 0x53, 0x0a, + 0x0c, 0x46, 0x4d, 0x48, 0x41, 0x4d, 0x61, 0x73, 0x6b, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, + 0x07, 0x4e, 0x4f, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, + 0x44, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x55, 0x53, 0x41, + 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, + 0x41, 0x55, 0x53, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x49, 0x42, 0x49, + 0x10, 0x04, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1274,56 +1274,6 @@ func file_xla_tsl_protobuf_dnn_proto_init() { if File_xla_tsl_protobuf_dnn_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_tsl_protobuf_dnn_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*TensorDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_tsl_protobuf_dnn_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*AlgorithmProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_tsl_protobuf_dnn_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*AlgorithmConfigProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_tsl_protobuf_dnn_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ConvolutionDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_xla_tsl_protobuf_dnn_proto_msgTypes[0].OneofWrappers = []any{ (*TensorDescriptorProto_DataLayout)(nil), (*TensorDescriptorProto_FilterLayout)(nil), diff --git a/protos/hlo.proto b/protos/hlo.proto new file mode 100644 index 0000000..26a9a89 --- /dev/null +++ b/protos/hlo.proto @@ -0,0 +1,828 @@ +/* Copyright 2017 The OpenXLA Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// This proto file defines messages which represent the HLO module. This is a +// full fidelity serialization of the c++ HLO constructs. +// +// Many of the protos below are simple 1-to-1 serializations of the +// corresponding C++ classes, e.g., HloModule, HloComputation, and +// HloInstruction. +// +// FIELD NAMES ARE IMPORTANT +// +// Unlike most protos, you can't safely change the names of fields, even if you +// keep the numeric ids the same. This is because we sometimes serialize these +// protos as JSON, which includes the field names in the serialization. + +syntax = "proto3"; + +package xla; + +import "google/protobuf/any.proto"; +import "xla/service/metrics.proto"; +import "xla/xla_data.proto"; + +option cc_enable_arenas = true; + +enum CustomCallSchedule { + SCHEDULE_NONE = 0; + SCHEDULE_LATEST = 1; + SCHEDULE_EARLIEST = 2; +} + +// The version of the API used by the custom call function. The signatures for +// each version are given below. +// TODO(b/189822916): Remove this enum when all clients are migrated to the +// status-returning API. +enum CustomCallApiVersion { + API_VERSION_UNSPECIFIED = 0; + + // The first version of the API, with the following signatures: + // + // CPU: + // void do_custom_call(void* out, const void** in); + // + // GPU: + // void do_custom_call(CUstream stream, void** buffers, + // const char* opaque, size_t opaque_len); + API_VERSION_ORIGINAL = 1; + + // When the ability to return success/failure status was added: + // + // CPU: + // void do_custom_call(void* out, const void** in, + // XlaCustomCallStatus* status); + // + // GPU: + // void do_custom_call(CUstream stream, void** buffers, + // const char* opaque, size_t opaque_len, + // XlaCustomCallStatus* status); + // + API_VERSION_STATUS_RETURNING = 2; + + // Fixes the API signatures on the CPU side of the version STATUS_RETURNING by + // adding the opaque string so that the custom call API is consistent across + // CPUs and GPUs. For GPUs, the behaviors invoked by + // API_VERSION_STATUS_RETURNING and API_VERSION_STATUS_RETURNING_UNIFIED are + // the same. + // + // CPU: + // void do_custom_call(void* out, const void** in, + // const char* opaque, size_t opaque_len, + // XlaCustomCallStatus* status); + // + // GPU: + // void do_custom_call(CUstream stream, void** buffers, + // const char* opaque, size_t opaque_len, + // XlaCustomCallStatus* status); + // + API_VERSION_STATUS_RETURNING_UNIFIED = 3; + + // Api version implementing XLA runtime custom call calling convention. These + // custom calls can be registered as an XLA runtime custom call (1) or as XLA + // runtime FFI binding (2). + // + // This type of custom call uses custom ABI to pass type information along + // with custom call arguments. Also it passes buffer arguments together with + // data type, sizes and strides. + // + // Example: (XLA runtime custom call) + // + // absl::Status DoCustomCall(StridedMemrefView arg, float attr); + // + // CustomCall::Bind("custom_call") + // .Arg() + // .Attr("attr") + // .To(DoCustomCall); + // + // (1) xla/runtime/custom_call.h + // (2) xla/runtime/ffi/ffi.h + API_VERSION_TYPED_FFI = 4; +} + +// Serialization of HloInstruction. +// Next ID: 91 +message HloInstructionProto { + reserved 10; + reserved "parameter_name"; + reserved 12; + reserved "fused_instructions_computation"; + reserved 4; + reserved "operand_names"; + reserved 5; + reserved "control_predecessor_names"; + reserved 6; + reserved "called_computation_names"; + reserved 44; + reserved "replica_group_ids"; + // Use backend_config instead for custom_call_opaque. + reserved 53; + reserved "custom_call_opaque"; + // Use backend_config instead for all_reduce_barrier. + reserved 46; + reserved "all_reduce_barrier"; + + string name = 1; + string opcode = 2; + xla.ShapeProto shape = 3; + + xla.OpMetadata metadata = 7; + + // Literal, only present for kConstant. + xla.LiteralProto literal = 8; + + // Parameter number is only present for kParameter. + int64 parameter_number = 9; + + // Fusion state, only present for kFusion. + string fusion_kind = 11; + + // Index for kGetTupleElement. + int64 tuple_index = 13; + + // Dimensions present for some operations that require reshaping or + // broadcasting, including Reshape, Reduce, ReduceWindow, and Reverse. + repeated int64 dimensions = 14; + + // Describes the window in a windowed operation such as convolution. + xla.Window window = 15; + + // Describes the dimension numbers used for a convolution. + xla.ConvolutionDimensionNumbers convolution_dimension_numbers = 16; + + // The number of feature groups. Used for a convolution. Must be a divisor of + // the input feature dimension and output feature dimension. If not specified, + // it will use a default value of 1. + int64 feature_group_count = 50; + + int64 batch_group_count = 58; + + // Describes the [begin, end) index range and stride for slices. + message SliceDimensions { + int64 start = 1; + int64 limit = 2; + int64 stride = 3; + } + repeated SliceDimensions slice_dimensions = 17; + + // The bit sizes for a reduce-precision operation. + int32 exponent_bits = 18; + int32 mantissa_bits = 19; + + // Describes the [start, start + size) range size for a dynamic slice + // ('start' is specified dynamically in the second operand of the operation). + repeated int64 dynamic_slice_sizes = 20; + + // The padding configuration that describes the edge padding and interior + // padding of this pad instruction. Only set for pad instructions. + xla.PaddingConfig padding_config = 21; + + // Outfeed configuration information, only present for kOutfeed. + bytes outfeed_config = 22; + + // The distribution requested for random number generation. + // Only present for kRng. + xla.RandomDistribution distribution = 23; + + // A small float number added to the variance to avoid divide-by-zero error. + // Only present for kBatchNormTraining, kBatchNormInference, and + // kBatchNormGrad. + float epsilon = 24; + + // An integer value representing the index of the feature dimension. + // Only present for kBatchNormTraining, kBatchNormInference, and + // kBatchNormGrad. + int64 feature_index = 25; + + // Represents a unique identifier for each Send/Recv instruction pair or + // optionally for collective instructions (AllReduce, CollectivePermute, + // AllToAll). Non-positive channel_id is equivalent to no channel id. + int64 channel_id = 26; + + // The string representation of the infeed configuration. + bytes infeed_config = 27; + + // Name of a external target (eg, global symbol) to call, only present for + // kCustomCall. + string custom_call_target = 28; + + // Shape of outfeed request. + xla.ShapeProto outfeed_shape = 29; + + // Describes the dimension numbers used for a dot operation + xla.DotDimensionNumbers dot_dimension_numbers = 30; + + // Describes the dimension numbers used for a ragged dot operation + xla.RaggedDotDimensionNumbers ragged_dot_dimension_numbers = 90; + + // FFT type (FFT, IFFT, etc). + xla.FftType fft_type = 31; + + // FFT length. + repeated int64 fft_length = 32; + + // Comparison direction only used for kCompare. + string comparison_direction = 63; + + // Gather dimension numbers. + xla.GatherDimensionNumbers gather_dimension_numbers = 33; + repeated int64 gather_slice_sizes = 34; + + // Used to be compute host-related fields. + reserved 41; + reserved 42; + + // The id of this instruction. + int64 id = 35; + + repeated int64 operand_ids = 36; + repeated int64 control_predecessor_ids = 37; + repeated int64 called_computation_ids = 38; + + xla.OpSharding sharding = 40; + + // Backend configuration for the instruction. Has backend-specific meaning. + bytes backend_config = 43; + + // Deprecated, but keeping for backward compatibility. + // Use collective_device_list. Cross replica op fields. + repeated ReplicaGroup replica_groups = 49 [deprecated = true]; + + // Deprecated, but keeping it for backward compatibility. Use channel_id. + // Non-positive all_reduce_id is equivalent to no all_reduce_id. + int64 all_reduce_id = 45 [deprecated = true]; + + // If true, interprets ids in ReplicaGroup as global device ids, which is + // a linearized id of `replica_id * partition_count + partition_id`. + bool use_global_device_ids = 71; + + // Whether this Send/Recv instruction transfers data to/from the host. Only + // present for Send and Recv instructions and their SendDone and RecvDone + // partners. + bool is_host_transfer = 47; + + // Whether this Sort instruction should be stable. + bool is_stable = 60; + + xla.ScatterDimensionNumbers scatter_dimension_numbers = 48; + + // Precision configuration for the instruction. Has backend-specific meaning. + xla.PrecisionConfig precision_config = 51; + + // Collective permute field. + repeated SourceTarget source_target_pairs = 52; + + // Sharding for kDomain instructions. + xla.OpSharding domain_entry_sharding = 54; + xla.OpSharding domain_exit_sharding = 55; + + // For custom call this indicates that the layouts are constrained. If + // constrain_layout is true then the 'shape' field must contain a layout, and + // 'operand_shapes_with_layout' must contain a shape with layout for each + // operand. + bool constrain_layout = 56; + repeated xla.ShapeProto operand_shapes_with_layout = 57; + + // Options for TriangularSolve + xla.TriangularSolveOptions triangular_solve_options = 59; + + // Options for Cholesky + xla.CholeskyOptions cholesky_options = 62; + + // Describes how parameters behave with regards to replicas. + xla.ParameterReplication parameter_replication = 61; + + reserved 64; + + // Whether the kCustomCall instruction has side-effects, only present for + // kCustomCall. + bool custom_call_has_side_effect = 65; + + // A list of OutputOperandAliasing pairs that specifies aliasing buffers + // between output and operands for kCustomCall and kFusion. + repeated xla.OutputOperandAliasing output_operand_aliasing = 74; + + // Specifies the desired schedule for the custom-call. The field is only + // present for custom-call. + CustomCallSchedule custom_call_schedule = 76; + + // The delta value for kRngGetAndUpdateState. + int64 delta = 66; + + // Specifies if the gather/scatter indices are guaranteed to be sorted by the + // caller. + bool indices_are_sorted = 67; + + // Frontend attributes to pass to the XLA backend. + xla.FrontendAttributes frontend_attributes = 68; + + // Specifies if all elements updated are guaranteed to be unique by + // the caller. + bool unique_indices = 69; + + // RNG algorithm used by kRngBitGenerator. + xla.RandomAlgorithm rng_algorithm = 70; + + // The comparison type used for kCompare. + string comparison_type = 72; + + // Specifies if this is a cross-program-prefetch, used by kCopyStart. + // Deprecated and replaced by optional_cross_program_prefetch_index. + bool is_cross_program_prefetch = 73 [deprecated = true]; + + // Specifies the cross-program-prefetch index used by kCopyStart. Uses oneof + // to emulate the 'optional' keyword for proto3 versions before v3.15.0 + // released 2021/2/18. + oneof optional_cross_program_prefetch_index { + int32 cross_program_prefetch_index = 80; + } + + // If a convolution is dynamic, a dynamic padding type will be specified. + xla.PaddingType padding_type = 75; + + // The API version used by the custom call function. This field is only + // present for custom-call. + // TODO(b/189822916): Remove this field when all clients are migrated to the + // status-returning API. + CustomCallApiVersion custom_call_api_version = 77; + + // Used to be async_group_id. + reserved 78; + + // Represents a unique execution thread name for one or more async groups. + // Each HLO module may contain a main thread and one or more parallel threads. + // Empty async_execution_thread is equivalent to main thread. + string async_execution_thread = 79; + + // Represents the K value for top-k. + int64 k = 81; + + // Represents the largest flag for top-k. + bool largest = 85; + + // Represents the information for tracking propagation of values within HLO + // graph. + xla.StatisticsViz statistics_viz = 82; + + // Used to be operation_queue_id. + reserved 83; + // Used to be wait_on_operation_queues. + reserved 84; + + // Sparsity descriptor for dot operation. + repeated xla.SparsityDescriptor dot_sparsity = 86; + + // Represents the list of devices that participate in a collective operation. + xla.CollectiveDeviceListProto collective_device_list = 87; + + // For HLO value tracking. + xla.OriginalValueProto original_value = 88; + + // Specifies if a call instruction is a composite. + bool is_composite = 89; +} + +// Serialization of HloComputation. +message HloComputationProto { + reserved 3; + reserved "root_name"; + + string name = 1; + + // The array of instructions is always in a valid dependency order, where + // operands appear before their users. + repeated HloInstructionProto instructions = 2; + + // The program shape (with layout) of this computation. + + xla.ProgramShapeProto program_shape = 4; + + // The id of this computation. + int64 id = 5; + + // The id of the root of the computation. + int64 root_id = 6; + + // Whether this is a fusion computation. Fusion computations should use this + // to determine whether they are a fusion in CreateFromProto since the + // parent fusion_instruction_ may get removed and be nullptr. + bool is_fusion_computation = 7; + + // The name of execution thread this computation belongs to. + string execution_thread = 8; +} + +// Serialization of an HLO schedule. An HLO schedule contains a total order of +// instructions for each non-fusion computation in the module. +message HloScheduleProto { + message InstructionSequence { + repeated int64 instruction_ids = 1; + } + + // Map from computation id to sequence. + map sequences = 1; +} + +enum Kind { + // Define a UNDEFINED_ALIAS equal to zero to get around the default-0 proto3 + // behavior and missing has_*() APIs. + UNDEFINED_ALIAS = 0; + // The buffers may or may not alias at runtime. + MAY_ALIAS = 1; + // The buffers must alias at runtime. + MUST_ALIAS = 2; +} + +message HloInputOutputAliasProto { + // The following proto describes a pair of aliased an input + // (described by parameter number and a ShapeIndex of the parameter) + // and an output (described by a ShapeIndex of the root + // instruction). For example: + // + // entry = { + // output_shape_index={1}, + // parameter_number=0, + // parameter_shape_index={1, 2}, + // } + // + // This entry indicates that the first parameter's {1, 2} element is + // aliased with the {1} element of the root instruction. + message AliasEntryProto { + // ShapeIndex of the root hlo. + repeated int64 output_shape_index = 1; + // Number of the parameter in entry computation. + int64 parameter_number = 2; + // ShapeIndex of the parameter instruction. + repeated int64 parameter_shape_index = 3; + // The kind of alias to be setup. + Kind kind = 4; + } + + repeated AliasEntryProto entries = 1; +} + +message HloBufferDonorProto { + // The following proto describes an input (described by parameter number and a + // ShapeIndex of the parameter) that can donate its butter to any output + // tensor. It is similar to HloInputOutputAliasProto, but without a paired + // output. For example: + // + // entry = { + // parameter_number=0, + // parameter_shape_index={1, 2}, + // } + // + // This entry indicates that the first parameter's {1, 2} element can donate + // its buffer. + message BufferDonorEntryProto { + // Number of the parameter in entry computation. + int64 parameter_number = 1; + // ShapeIndex of the parameter instruction. + repeated int64 parameter_shape_index = 2; + } + + repeated BufferDonorEntryProto entries = 1; +} + +message CrossProgramPrefetch { + int64 parameter = 1; + repeated int64 index = 2; + int64 offset = 3; +} + +// Serialization of stack frames index representations. +// Stack frames index presented in four flat arrays: +// 1. File names array. +// 2. Function names array. +// 3. File location array. +// 4. Frame array. +// All reference ids in sub-protos are 1-based positions of the +// entity in the flat array. +// Ids are 1-based to keep 0 value as representation of non-set property. +message StackFrameIndexProto { + // Serialization of file position. + message FileLocation { + // 1-based position of file name. + int32 file_name_id = 1; + // 1-based position of function name. + int32 function_name_id = 2; + // Line number. + int32 line = 3; + // Column number. + int32 column = 4; + } + + // Serialization of frame. + message StackFrame { + // 1-based position of file location. + int32 file_location_id = 1; + // 1-based position of the parent frame. + int32 parent_frame_id = 2; + } + + // Flat index array of file names. + repeated string file_names = 1; + // Flat index array of function names. + repeated string function_names = 2; + // Flat index array of file locations. + repeated FileLocation file_locations = 3; + // Flat index array of frames. + repeated StackFrame stack_frames = 4; +} + +// Serialization of HloModule. +message HloModuleProto { + string name = 1; + string entry_computation_name = 2; + int64 entry_computation_id = 6; + + // The array of computations is always in a valid dependency order, where + // callees appear before their callers. + repeated HloComputationProto computations = 3; + + // The host program shape (with layout) of the entry computation. + xla.ProgramShapeProto host_program_shape = 4; + + // The id of this module. + int64 id = 5; + + // The schedule for this module. + HloScheduleProto schedule = 7; + + // Describes alias information between inputs and outputs. + HloInputOutputAliasProto input_output_alias = 8; + + // Describes the information of input buffer donors. + HloBufferDonorProto buffer_donor = 18; + + repeated CrossProgramPrefetch cross_program_prefetches = 10; + + // True if the module contains dynamic computation. + bool is_dynamic = 11; + + xla.OpSharding spmd_output_sharding = 12; + + repeated xla.OpSharding spmd_parameters_shardings = 14; + + // Uses AutoSharding pass or not. + bool use_auto_spmd_partitioning = 16; + + // The type of optimization profile in use for module-level optimizations. + enum ProfileType { + INVALID = 0; + FLAG = 1; + FUSION = 2; + LAYOUT = 3; + DOT = 4; + FLAGNET = 5; + } + // The type of profile generation strategy used to generate the profile. + enum ProfileGenerationStrategy { + PROFILE_GENERATION_STRATEGY_UNKNOWN = 0; + PROFILE_GENERATION_STRATEGY_GA = 1; + PROFILE_GENERATION_STRATEGY_FANTA = 2; + PROFILE_GENERATION_STRATEGY_CFO = 3; + } + // Information about the optimization profile that this module contains. + message ProfileInfo { + // The optimization profiles that this module contains. + ProfileType profile_type = 1; + // Speedup of tuned config compared to default config. + double relative_speedup = 2; + // The source of the optimization profile that this module contains. + xla.ProfileSource profile_source = 3; + // The compilation event that triggered the use of the profile. + xla.CompilationEvent compilation_event = 4; + // The fingerprint of this profile. `fingerprint` should match a key + // in the profile table. + string fingerprint = 5; + // The type of profile generation strategy used to generate the profile. + ProfileGenerationStrategy profile_generation_strategy = 6; + } + + // Profile information for the HLO module. + repeated ProfileInfo profile_info = 13; + + // DeviceAssignment object information. + DeviceAssignmentProto device_assignment = 15; + + // Stack frames index. + StackFrameIndexProto stack_frame_index = 17; + + // Frontend attributes to pass to the XLA backend. + xla.FrontendAttributes frontend_attributes = 19; + + reserved 9; + reserved "dynamic_parameter_binding"; +} + +// Serialization of LogicalBuffer. +message LogicalBufferProto { + // Location represents an instruction and its shape index, which uniquely + // identifies a point where a buffer is needed. + message Location { + // TODO(b/239098765): Remove instruction_name and computation_name. + string instruction_name = 2 [deprecated = true]; + int64 instruction_id = 4; + repeated int64 shape_index = 3; + + reserved 1; + } + + int64 id = 1; + int64 size = 2; + + // The location where the buffer is defined. + Location defined_at = 3; + + int64 color = 4; +} + +// Serialization of BufferAllocation. +message BufferAllocationProto { + // Assigned represents a single LogicalBuffer that is assigned to this + // BufferAllocation. + message Assigned { + int64 logical_buffer_id = 1; + int64 offset = 2; + int64 size = 3; + } + + int64 index = 1; + int64 size = 2; + bool is_thread_local = 3; + bool is_tuple = 11; + bool is_entry_computation_parameter = 5; + bool is_constant = 12; + int64 parameter_number = 6; + repeated int64 parameter_shape_index = 10; + bool maybe_live_out = 7; + int64 color = 8; + repeated Assigned assigned = 9; +} + +// A trace of a HeapSimulator run. +message HeapSimulatorTrace { + // The trace includes a list of events, where each event describes one action + // performed by the heap simulator. + message Event { + enum Kind { + ALLOC = 0; // A memory region was allocated for the buffer. + FREE = 1; // A memory region was freed for the buffer. + + // A buffer was shared with another (canonical) buffer. This is similar to + // ALLOC, except that instead of allocating a new region of memory, the + // memory region of the canonical buffer is directly re-used. Multiple + // buffers may share with the same canonical buffer. The lifetime of the + // canonical buffer is extended to the union of all lifetimes. + SHARE_WITH = 2; + } + Kind kind = 1; + + // The id of the LogicalBuffer that the event applies to. + int64 buffer_id = 2; + + // The HloInstruction that the simulation was processing that caused this + // event to occur, identified by its computation and instruction name. E.g. + // buffers defined by instruction A are allocated when processing A. + string computation_name = 3; + string instruction_name = 4; + + // The id of the canonical LogicalBuffer that the buffer shares with. Only + // set for SHARE_WITH events. + int64 share_with_canonical_id = 5; + } + repeated Event events = 1; + bool whole_module_simulation = 2; + int64 buffer_allocation_index = 3; +} + +// An abstraction representing a set of HLO module built to run concurrently +// across different devices. +message HloModuleGroupProto { + string name = 1; + repeated HloModuleProto hlo_modules = 2; +} + +// Serialization of BufferAssignment. +message BufferAssignmentProto { + // Alias represents a source LogicalBuffer, and the buffer location that + // aliases it. + message BufferAlias { + int64 source_buffer_id = 1; + LogicalBufferProto.Location location = 2; + } + + repeated LogicalBufferProto logical_buffers = 1; + repeated BufferAlias buffer_aliases = 2; + repeated BufferAllocationProto buffer_allocations = 3; + repeated HeapSimulatorTrace heap_simulator_traces = 4; +} + +// Grouping message that contains all of the information above. +message HloProto { + reserved 2; + reserved "hlo_ordering"; + + HloModuleProto hlo_module = 1; + BufferAssignmentProto buffer_assignment = 3; +} + +// Encapsulates HloProto together with the arguments, result, and +// execution_platform. This message is used for purposes such as +// analysis/replay/file-storage. +message HloSnapshot { + // The hlo graph. + HloProto hlo = 1; + + // The arguments passed to the graph. + repeated LiteralProto arguments = 2; + + // The result of the graph. + LiteralProto result = 3; + + // The name of the platform used to run the graph. + string execution_platform = 4; +} + +// Metadata for an HLO module. Dumped after HLO passes and before LLO lowering +// with filename module_####.metadata.textproto, where #### is +// canonical_module_id. +message HloModuleMetadataProto { + // Uniquely identifies an HloModuleMetadata. Equal to the first unique_id + // of the module (a module may go through multiple unique_ids). If a module + // is partitioned into multiple modules, those modules will each have a new + // HloModuleMetadata with a different canonical_module_id. + int64 canonical_module_id = 1; + + // Name of the module group that the module is part of. + string module_group_name = 2; + + // The canonical module id of the module that this one is partitioned from, + // if applicable. + int64 original_module_id = 3; + + // The canonical module ids of the modules that this one is partitioned into, + // if applicable. + repeated int64 partitioned_module_ids = 4; + + // Metadata for the HLO passes that are run on the module. + repeated HloPassMetadata pass_metadata = 5; +} + +// Metadata for one run of an HLO pass on a module. Provides more information +// when processing debug dumps of HloProtos about the order of HLO passes and +// various other stats like duration. `pass_id` may also be used to identify a +// particular run of a pass in debug info that propagates through stages of +// compilation. +message HloPassMetadata { + // For a given module, pass_id uniquely identifies a run of an HLO pass on + // that module. Note that a pass_id may not always refer to the same pass + // because the order of passes during compilation may change. For finding + // metadata for a particular pass, pass_name and pipeline_name would be more + // reliable, although note that they may not be unique. + int64 pass_id = 1; + string pass_name = 2; + string pipeline_name = 3; + + // Filenames of the dumps of the module after this pass ran. Module may be + // dumped in multiple formats, and the order of formats in this field will + // stay consistent across passes. + repeated string dump_filenames = 4; + + // Return value of pass.Run(). True if this pass changed the module, or, in + // the case where the module was run through this pass as part of a module + // group, true if this pass changed any module in the same module group. + bool module_changed = 5; + + // The unique_id of the module that this pass is run on. May be different from + // the canonical_module_id of the HloModuleMetadata that this HloPassMetadata + // is inside. + int64 module_id = 6; + + // If the module went through this pass as part of a module group, this is + // set as the ids of all the modules in the module group. Empty otherwise. + repeated int64 module_group_module_ids = 7; + + // Timestamp before and after the pass is run. Note they may be equal. + int64 start_timestamp_usec = 8; + int64 end_timestamp_usec = 9; + + // Custom metadata for the pass. + google.protobuf.Any custom_metadata = 10; + + // Used to log any number of key, value pair stats per pass. + repeated KeyValueMetric kv_metrics = 11; +} diff --git a/protos/hlo/hlo.pb.go b/protos/hlo/hlo.pb.go index 1603f1e..9af157f 100644 --- a/protos/hlo/hlo.pb.go +++ b/protos/hlo/hlo.pb.go @@ -28,13 +28,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/service/hlo.proto package hlo import ( + metrics "github.com/gomlx/gopjrt/protos/metrics" xla_data "github.com/gomlx/gopjrt/protos/xla_data" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -328,6 +329,59 @@ func (HloModuleProto_ProfileType) EnumDescriptor() ([]byte, []int) { return file_xla_service_hlo_proto_rawDescGZIP(), []int{7, 0} } +// The type of profile generation strategy used to generate the profile. +type HloModuleProto_ProfileGenerationStrategy int32 + +const ( + HloModuleProto_PROFILE_GENERATION_STRATEGY_UNKNOWN HloModuleProto_ProfileGenerationStrategy = 0 + HloModuleProto_PROFILE_GENERATION_STRATEGY_GA HloModuleProto_ProfileGenerationStrategy = 1 + HloModuleProto_PROFILE_GENERATION_STRATEGY_FANTA HloModuleProto_ProfileGenerationStrategy = 2 + HloModuleProto_PROFILE_GENERATION_STRATEGY_CFO HloModuleProto_ProfileGenerationStrategy = 3 +) + +// Enum value maps for HloModuleProto_ProfileGenerationStrategy. +var ( + HloModuleProto_ProfileGenerationStrategy_name = map[int32]string{ + 0: "PROFILE_GENERATION_STRATEGY_UNKNOWN", + 1: "PROFILE_GENERATION_STRATEGY_GA", + 2: "PROFILE_GENERATION_STRATEGY_FANTA", + 3: "PROFILE_GENERATION_STRATEGY_CFO", + } + HloModuleProto_ProfileGenerationStrategy_value = map[string]int32{ + "PROFILE_GENERATION_STRATEGY_UNKNOWN": 0, + "PROFILE_GENERATION_STRATEGY_GA": 1, + "PROFILE_GENERATION_STRATEGY_FANTA": 2, + "PROFILE_GENERATION_STRATEGY_CFO": 3, + } +) + +func (x HloModuleProto_ProfileGenerationStrategy) Enum() *HloModuleProto_ProfileGenerationStrategy { + p := new(HloModuleProto_ProfileGenerationStrategy) + *p = x + return p +} + +func (x HloModuleProto_ProfileGenerationStrategy) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (HloModuleProto_ProfileGenerationStrategy) Descriptor() protoreflect.EnumDescriptor { + return file_xla_service_hlo_proto_enumTypes[4].Descriptor() +} + +func (HloModuleProto_ProfileGenerationStrategy) Type() protoreflect.EnumType { + return &file_xla_service_hlo_proto_enumTypes[4] +} + +func (x HloModuleProto_ProfileGenerationStrategy) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use HloModuleProto_ProfileGenerationStrategy.Descriptor instead. +func (HloModuleProto_ProfileGenerationStrategy) EnumDescriptor() ([]byte, []int) { + return file_xla_service_hlo_proto_rawDescGZIP(), []int{7, 1} +} + type HeapSimulatorTrace_Event_Kind int32 const ( @@ -366,11 +420,11 @@ func (x HeapSimulatorTrace_Event_Kind) String() string { } func (HeapSimulatorTrace_Event_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_xla_service_hlo_proto_enumTypes[4].Descriptor() + return file_xla_service_hlo_proto_enumTypes[5].Descriptor() } func (HeapSimulatorTrace_Event_Kind) Type() protoreflect.EnumType { - return &file_xla_service_hlo_proto_enumTypes[4] + return &file_xla_service_hlo_proto_enumTypes[5] } func (x HeapSimulatorTrace_Event_Kind) Number() protoreflect.EnumNumber { @@ -383,7 +437,7 @@ func (HeapSimulatorTrace_Event_Kind) EnumDescriptor() ([]byte, []int) { } // Serialization of HloInstruction. -// Next ID: 90 +// Next ID: 91 type HloInstructionProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -449,6 +503,8 @@ type HloInstructionProto struct { OutfeedShape *xla_data.ShapeProto `protobuf:"bytes,29,opt,name=outfeed_shape,json=outfeedShape,proto3" json:"outfeed_shape,omitempty"` // Describes the dimension numbers used for a dot operation DotDimensionNumbers *xla_data.DotDimensionNumbers `protobuf:"bytes,30,opt,name=dot_dimension_numbers,json=dotDimensionNumbers,proto3" json:"dot_dimension_numbers,omitempty"` + // Describes the dimension numbers used for a ragged dot operation + RaggedDotDimensionNumbers *xla_data.RaggedDotDimensionNumbers `protobuf:"bytes,90,opt,name=ragged_dot_dimension_numbers,json=raggedDotDimensionNumbers,proto3" json:"ragged_dot_dimension_numbers,omitempty"` // FFT type (FFT, IFFT, etc). FftType xla_data.FftType `protobuf:"varint,31,opt,name=fft_type,json=fftType,proto3,enum=xla.FftType" json:"fft_type,omitempty"` // FFT length. @@ -571,11 +627,9 @@ type HloInstructionProto struct { func (x *HloInstructionProto) Reset() { *x = HloInstructionProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloInstructionProto) String() string { @@ -586,7 +640,7 @@ func (*HloInstructionProto) ProtoMessage() {} func (x *HloInstructionProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -790,6 +844,13 @@ func (x *HloInstructionProto) GetDotDimensionNumbers() *xla_data.DotDimensionNum return nil } +func (x *HloInstructionProto) GetRaggedDotDimensionNumbers() *xla_data.RaggedDotDimensionNumbers { + if x != nil { + return x.RaggedDotDimensionNumbers + } + return nil +} + func (x *HloInstructionProto) GetFftType() xla_data.FftType { if x != nil { return x.FftType @@ -1165,11 +1226,9 @@ type HloComputationProto struct { func (x *HloComputationProto) Reset() { *x = HloComputationProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloComputationProto) String() string { @@ -1180,7 +1239,7 @@ func (*HloComputationProto) ProtoMessage() {} func (x *HloComputationProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1257,11 +1316,9 @@ type HloScheduleProto struct { func (x *HloScheduleProto) Reset() { *x = HloScheduleProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloScheduleProto) String() string { @@ -1272,7 +1329,7 @@ func (*HloScheduleProto) ProtoMessage() {} func (x *HloScheduleProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1304,11 +1361,9 @@ type HloInputOutputAliasProto struct { func (x *HloInputOutputAliasProto) Reset() { *x = HloInputOutputAliasProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloInputOutputAliasProto) String() string { @@ -1319,7 +1374,7 @@ func (*HloInputOutputAliasProto) ProtoMessage() {} func (x *HloInputOutputAliasProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1351,11 +1406,9 @@ type HloBufferDonorProto struct { func (x *HloBufferDonorProto) Reset() { *x = HloBufferDonorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloBufferDonorProto) String() string { @@ -1366,7 +1419,7 @@ func (*HloBufferDonorProto) ProtoMessage() {} func (x *HloBufferDonorProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1400,11 +1453,9 @@ type CrossProgramPrefetch struct { func (x *CrossProgramPrefetch) Reset() { *x = CrossProgramPrefetch{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CrossProgramPrefetch) String() string { @@ -1415,7 +1466,7 @@ func (*CrossProgramPrefetch) ProtoMessage() {} func (x *CrossProgramPrefetch) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1477,11 +1528,9 @@ type StackFrameIndexProto struct { func (x *StackFrameIndexProto) Reset() { *x = StackFrameIndexProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StackFrameIndexProto) String() string { @@ -1492,7 +1541,7 @@ func (*StackFrameIndexProto) ProtoMessage() {} func (x *StackFrameIndexProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1576,11 +1625,9 @@ type HloModuleProto struct { func (x *HloModuleProto) Reset() { *x = HloModuleProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleProto) String() string { @@ -1591,7 +1638,7 @@ func (*HloModuleProto) ProtoMessage() {} func (x *HloModuleProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1747,11 +1794,9 @@ type LogicalBufferProto struct { func (x *LogicalBufferProto) Reset() { *x = LogicalBufferProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LogicalBufferProto) String() string { @@ -1762,7 +1807,7 @@ func (*LogicalBufferProto) ProtoMessage() {} func (x *LogicalBufferProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1826,11 +1871,9 @@ type BufferAllocationProto struct { func (x *BufferAllocationProto) Reset() { *x = BufferAllocationProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BufferAllocationProto) String() string { @@ -1841,7 +1884,7 @@ func (*BufferAllocationProto) ProtoMessage() {} func (x *BufferAllocationProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1946,11 +1989,9 @@ type HeapSimulatorTrace struct { func (x *HeapSimulatorTrace) Reset() { *x = HeapSimulatorTrace{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HeapSimulatorTrace) String() string { @@ -1961,7 +2002,7 @@ func (*HeapSimulatorTrace) ProtoMessage() {} func (x *HeapSimulatorTrace) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2010,11 +2051,9 @@ type HloModuleGroupProto struct { func (x *HloModuleGroupProto) Reset() { *x = HloModuleGroupProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleGroupProto) String() string { @@ -2025,7 +2064,7 @@ func (*HloModuleGroupProto) ProtoMessage() {} func (x *HloModuleGroupProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2068,11 +2107,9 @@ type BufferAssignmentProto struct { func (x *BufferAssignmentProto) Reset() { *x = BufferAssignmentProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BufferAssignmentProto) String() string { @@ -2083,7 +2120,7 @@ func (*BufferAssignmentProto) ProtoMessage() {} func (x *BufferAssignmentProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2138,11 +2175,9 @@ type HloProto struct { func (x *HloProto) Reset() { *x = HloProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloProto) String() string { @@ -2153,7 +2188,7 @@ func (*HloProto) ProtoMessage() {} func (x *HloProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2202,11 +2237,9 @@ type HloSnapshot struct { func (x *HloSnapshot) Reset() { *x = HloSnapshot{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloSnapshot) String() string { @@ -2217,7 +2250,7 @@ func (*HloSnapshot) ProtoMessage() {} func (x *HloSnapshot) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2287,11 +2320,9 @@ type HloModuleMetadataProto struct { func (x *HloModuleMetadataProto) Reset() { *x = HloModuleMetadataProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleMetadataProto) String() string { @@ -2302,7 +2333,7 @@ func (*HloModuleMetadataProto) ProtoMessage() {} func (x *HloModuleMetadataProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2390,15 +2421,15 @@ type HloPassMetadata struct { EndTimestampUsec int64 `protobuf:"varint,9,opt,name=end_timestamp_usec,json=endTimestampUsec,proto3" json:"end_timestamp_usec,omitempty"` // Custom metadata for the pass. CustomMetadata *anypb.Any `protobuf:"bytes,10,opt,name=custom_metadata,json=customMetadata,proto3" json:"custom_metadata,omitempty"` + // Used to log any number of key, value pair stats per pass. + KvMetrics []*metrics.KeyValueMetric `protobuf:"bytes,11,rep,name=kv_metrics,json=kvMetrics,proto3" json:"kv_metrics,omitempty"` } func (x *HloPassMetadata) Reset() { *x = HloPassMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloPassMetadata) String() string { @@ -2409,7 +2440,7 @@ func (*HloPassMetadata) ProtoMessage() {} func (x *HloPassMetadata) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2494,6 +2525,13 @@ func (x *HloPassMetadata) GetCustomMetadata() *anypb.Any { return nil } +func (x *HloPassMetadata) GetKvMetrics() []*metrics.KeyValueMetric { + if x != nil { + return x.KvMetrics + } + return nil +} + // Describes the [begin, end) index range and stride for slices. type HloInstructionProto_SliceDimensions struct { state protoimpl.MessageState @@ -2507,11 +2545,9 @@ type HloInstructionProto_SliceDimensions struct { func (x *HloInstructionProto_SliceDimensions) Reset() { *x = HloInstructionProto_SliceDimensions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloInstructionProto_SliceDimensions) String() string { @@ -2522,7 +2558,7 @@ func (*HloInstructionProto_SliceDimensions) ProtoMessage() {} func (x *HloInstructionProto_SliceDimensions) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2568,11 +2604,9 @@ type HloScheduleProto_InstructionSequence struct { func (x *HloScheduleProto_InstructionSequence) Reset() { *x = HloScheduleProto_InstructionSequence{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloScheduleProto_InstructionSequence) String() string { @@ -2583,7 +2617,7 @@ func (*HloScheduleProto_InstructionSequence) ProtoMessage() {} func (x *HloScheduleProto_InstructionSequence) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2635,11 +2669,9 @@ type HloInputOutputAliasProto_AliasEntryProto struct { func (x *HloInputOutputAliasProto_AliasEntryProto) Reset() { *x = HloInputOutputAliasProto_AliasEntryProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloInputOutputAliasProto_AliasEntryProto) String() string { @@ -2650,7 +2682,7 @@ func (*HloInputOutputAliasProto_AliasEntryProto) ProtoMessage() {} func (x *HloInputOutputAliasProto_AliasEntryProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2718,11 +2750,9 @@ type HloBufferDonorProto_BufferDonorEntryProto struct { func (x *HloBufferDonorProto_BufferDonorEntryProto) Reset() { *x = HloBufferDonorProto_BufferDonorEntryProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloBufferDonorProto_BufferDonorEntryProto) String() string { @@ -2733,7 +2763,7 @@ func (*HloBufferDonorProto_BufferDonorEntryProto) ProtoMessage() {} func (x *HloBufferDonorProto_BufferDonorEntryProto) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2780,11 +2810,9 @@ type StackFrameIndexProto_FileLocation struct { func (x *StackFrameIndexProto_FileLocation) Reset() { *x = StackFrameIndexProto_FileLocation{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StackFrameIndexProto_FileLocation) String() string { @@ -2795,7 +2823,7 @@ func (*StackFrameIndexProto_FileLocation) ProtoMessage() {} func (x *StackFrameIndexProto_FileLocation) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2852,11 +2880,9 @@ type StackFrameIndexProto_StackFrame struct { func (x *StackFrameIndexProto_StackFrame) Reset() { *x = StackFrameIndexProto_StackFrame{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StackFrameIndexProto_StackFrame) String() string { @@ -2867,7 +2893,7 @@ func (*StackFrameIndexProto_StackFrame) ProtoMessage() {} func (x *StackFrameIndexProto_StackFrame) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2910,17 +2936,18 @@ type HloModuleProto_ProfileInfo struct { ProfileSource xla_data.ProfileSource `protobuf:"varint,3,opt,name=profile_source,json=profileSource,proto3,enum=xla.ProfileSource" json:"profile_source,omitempty"` // The compilation event that triggered the use of the profile. CompilationEvent xla_data.CompilationEvent `protobuf:"varint,4,opt,name=compilation_event,json=compilationEvent,proto3,enum=xla.CompilationEvent" json:"compilation_event,omitempty"` - // The fingerprint of the unoptimized module this profile was applied to. + // The fingerprint of this profile. `fingerprint` should match a key + // in the profile table. Fingerprint string `protobuf:"bytes,5,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` + // The type of profile generation strategy used to generate the profile. + ProfileGenerationStrategy HloModuleProto_ProfileGenerationStrategy `protobuf:"varint,6,opt,name=profile_generation_strategy,json=profileGenerationStrategy,proto3,enum=xla.HloModuleProto_ProfileGenerationStrategy" json:"profile_generation_strategy,omitempty"` } func (x *HloModuleProto_ProfileInfo) Reset() { *x = HloModuleProto_ProfileInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleProto_ProfileInfo) String() string { @@ -2931,7 +2958,7 @@ func (*HloModuleProto_ProfileInfo) ProtoMessage() {} func (x *HloModuleProto_ProfileInfo) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2981,6 +3008,13 @@ func (x *HloModuleProto_ProfileInfo) GetFingerprint() string { return "" } +func (x *HloModuleProto_ProfileInfo) GetProfileGenerationStrategy() HloModuleProto_ProfileGenerationStrategy { + if x != nil { + return x.ProfileGenerationStrategy + } + return HloModuleProto_PROFILE_GENERATION_STRATEGY_UNKNOWN +} + // Location represents an instruction and its shape index, which uniquely // identifies a point where a buffer is needed. type LogicalBufferProto_Location struct { @@ -2998,11 +3032,9 @@ type LogicalBufferProto_Location struct { func (x *LogicalBufferProto_Location) Reset() { *x = LogicalBufferProto_Location{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LogicalBufferProto_Location) String() string { @@ -3013,7 +3045,7 @@ func (*LogicalBufferProto_Location) ProtoMessage() {} func (x *LogicalBufferProto_Location) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3064,11 +3096,9 @@ type BufferAllocationProto_Assigned struct { func (x *BufferAllocationProto_Assigned) Reset() { *x = BufferAllocationProto_Assigned{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BufferAllocationProto_Assigned) String() string { @@ -3079,7 +3109,7 @@ func (*BufferAllocationProto_Assigned) ProtoMessage() {} func (x *BufferAllocationProto_Assigned) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3137,11 +3167,9 @@ type HeapSimulatorTrace_Event struct { func (x *HeapSimulatorTrace_Event) Reset() { *x = HeapSimulatorTrace_Event{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HeapSimulatorTrace_Event) String() string { @@ -3152,7 +3180,7 @@ func (*HeapSimulatorTrace_Event) ProtoMessage() {} func (x *HeapSimulatorTrace_Event) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3215,11 +3243,9 @@ type BufferAssignmentProto_BufferAlias struct { func (x *BufferAssignmentProto_BufferAlias) Reset() { *x = BufferAssignmentProto_BufferAlias{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_service_hlo_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_service_hlo_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BufferAssignmentProto_BufferAlias) String() string { @@ -3230,7 +3256,7 @@ func (*BufferAssignmentProto_BufferAlias) ProtoMessage() {} func (x *BufferAssignmentProto_BufferAlias) ProtoReflect() protoreflect.Message { mi := &file_xla_service_hlo_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3265,673 +3291,703 @@ var file_xla_service_hlo_proto_rawDesc = []byte{ 0x0a, 0x15, 0x78, 0x6c, 0x61, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x68, 0x6c, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x78, 0x6c, 0x61, 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, 0x12, 0x78, 0x6c, 0x61, 0x2f, 0x78, 0x6c, 0x61, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x21, 0x0a, 0x13, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x78, 0x6c, 0x61, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x12, 0x78, 0x6c, 0x61, 0x2f, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe4, 0x21, 0x0a, 0x13, 0x48, 0x6c, 0x6f, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, + 0x61, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, + 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, + 0x0a, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x10, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x75, 0x70, 0x6c, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x75, + 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x69, + 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x64, 0x0a, + 0x1d, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x32, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x11, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x53, 0x0a, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, - 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x07, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, - 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x66, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1e, 0x0a, - 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, - 0x06, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x78, 0x6c, 0x61, 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x12, 0x64, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x1b, 0x63, 0x6f, 0x6e, - 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x3a, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x10, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x44, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x44, - 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x42, 0x69, 0x74, 0x73, 0x12, 0x23, - 0x0a, 0x0d, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x73, 0x73, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x73, 0x73, 0x61, 0x42, - 0x69, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x73, - 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x11, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0d, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, - 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3b, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x18, 0x18, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x69, 0x6e, 0x66, 0x65, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x12, 0x34, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x73, - 0x68, 0x61, 0x70, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x6f, 0x75, 0x74, - 0x66, 0x65, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x64, 0x6f, 0x74, - 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x42, 0x69, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x6e, + 0x74, 0x69, 0x73, 0x73, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x73, 0x73, 0x61, 0x42, 0x69, 0x74, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x03, 0x52, 0x11, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x39, + 0x0a, 0x0e, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x75, 0x74, + 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x3b, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0c, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, + 0x6e, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x69, 0x6e, 0x66, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x34, + 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x6f, 0x75, 0x74, 0x66, 0x65, 0x65, 0x64, 0x53, + 0x68, 0x61, 0x70, 0x65, 0x12, 0x4c, 0x0a, 0x15, 0x64, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x6d, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x13, 0x64, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x13, 0x64, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x66, 0x66, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x46, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x66, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x66, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x20, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x66, 0x66, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x31, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x5f, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x18, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x47, 0x61, 0x74, 0x68, 0x65, - 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x52, 0x16, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x61, 0x74, - 0x68, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, - 0x22, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6c, 0x69, - 0x63, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x23, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x24, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x25, 0x20, 0x03, 0x28, 0x03, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x49, 0x64, 0x73, - 0x12, 0x34, 0x0a, 0x16, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x26, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x14, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, - 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0e, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x31, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x26, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, - 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x03, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x31, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x47, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x12, 0x75, 0x73, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, - 0x73, 0x48, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1b, 0x0a, - 0x09, 0x69, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x19, 0x73, 0x63, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x17, 0x73, 0x63, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x34, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x15, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, - 0x14, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x1a, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x39, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x17, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x57, - 0x69, 0x74, 0x68, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x55, 0x0a, 0x18, 0x74, 0x72, 0x69, - 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x16, 0x74, 0x72, 0x69, 0x61, 0x6e, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3f, 0x0a, 0x10, 0x63, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x43, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x0f, 0x63, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x4e, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x18, 0x41, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, - 0x6c, 0x6c, 0x48, 0x61, 0x73, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, - 0x52, 0x0a, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, - 0x64, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x4a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x15, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x69, 0x6e, 0x67, 0x12, 0x49, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, - 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x42, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x64, - 0x65, 0x6c, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x5f, - 0x61, 0x72, 0x65, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x43, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x72, 0x65, 0x53, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x12, 0x48, 0x0a, 0x13, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x45, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x6e, 0x67, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, - 0x52, 0x0c, 0x72, 0x6e, 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x27, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x48, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, - 0x73, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x19, 0x69, 0x73, 0x5f, 0x63, 0x72, - 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x18, 0x49, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x16, - 0x69, 0x73, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, - 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x41, 0x0a, 0x1c, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, + 0x72, 0x73, 0x12, 0x5f, 0x0a, 0x1c, 0x72, 0x61, 0x67, 0x67, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x74, + 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, + 0x61, 0x67, 0x67, 0x65, 0x64, 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x19, 0x72, 0x61, 0x67, 0x67, 0x65, 0x64, + 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x66, 0x66, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x46, 0x66, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x07, 0x66, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x66, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x20, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x09, 0x66, 0x66, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x14, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, + 0x0a, 0x18, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x16, 0x67, + 0x61, 0x74, 0x68, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, + 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x22, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x10, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x24, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, + 0x64, 0x49, 0x64, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, + 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x25, 0x20, 0x03, 0x28, 0x03, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, + 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x26, 0x20, 0x03, 0x28, 0x03, 0x52, 0x14, 0x63, 0x61, + 0x6c, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x28, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x31, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x12, 0x26, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x0b, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, + 0x75, 0x73, 0x65, 0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x47, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x75, 0x73, 0x65, + 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x6f, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, + 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x19, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x17, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x12, 0x3f, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x41, 0x0a, 0x13, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x34, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x52, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, + 0x61, 0x69, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x15, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x36, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x14, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, + 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x45, 0x78, 0x69, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, + 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x18, 0x38, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x1a, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6c, + 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x39, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x17, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x4c, + 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x55, 0x0a, 0x18, 0x74, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, + 0x6c, 0x61, 0x72, 0x5f, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x54, 0x72, + 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x16, 0x74, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, + 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x10, + 0x63, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x68, 0x6f, + 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x63, 0x68, + 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, + 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, + 0x1b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x68, 0x61, 0x73, + 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x41, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x61, + 0x73, 0x53, 0x69, 0x64, 0x65, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x4a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x15, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x12, + 0x49, 0x0a, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, + 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, + 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, + 0x6c, 0x74, 0x61, 0x18, 0x42, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, + 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x61, 0x72, 0x65, 0x5f, + 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x43, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x41, 0x72, 0x65, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x48, + 0x0a, 0x13, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x45, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, + 0x39, 0x0a, 0x0d, 0x72, 0x6e, 0x67, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x18, 0x46, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x72, 0x6e, + 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x48, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x19, 0x69, 0x73, 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, - 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x50, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x19, - 0x63, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x33, 0x0a, 0x0c, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x10, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x50, - 0x0a, 0x17, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x70, - 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x19, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, - 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x34, 0x0a, 0x16, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x51, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x01, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x55, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x7a, - 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x56, 0x69, 0x7a, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x56, 0x69, 0x7a, 0x12, 0x3a, 0x0a, 0x0c, 0x64, 0x6f, 0x74, - 0x5f, 0x73, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x18, 0x56, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x53, 0x70, 0x61, - 0x72, 0x73, 0x69, 0x74, 0x79, 0x12, 0x54, 0x0a, 0x16, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x14, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x58, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0d, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, - 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x18, 0x59, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x69, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x1a, 0x55, - 0x0a, 0x0f, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, - 0x74, 0x72, 0x69, 0x64, 0x65, 0x42, 0x27, 0x0a, 0x25, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x5f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, - 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x04, - 0x08, 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, - 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x2c, - 0x10, 0x2d, 0x4a, 0x04, 0x08, 0x35, 0x10, 0x36, 0x4a, 0x04, 0x08, 0x2e, 0x10, 0x2f, 0x4a, 0x04, - 0x08, 0x29, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x40, 0x10, 0x41, - 0x4a, 0x04, 0x08, 0x4e, 0x10, 0x4f, 0x4a, 0x04, 0x08, 0x53, 0x10, 0x54, 0x4a, 0x04, 0x08, 0x54, - 0x10, 0x55, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x52, 0x1e, 0x66, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x18, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x52, 0x12, 0x61, - 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, - 0x72, 0x22, 0xbd, 0x02, 0x0a, 0x13, 0x48, 0x6c, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, - 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x69, - 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x49, - 0x64, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x13, 0x69, 0x73, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0xff, 0x01, 0x0a, 0x10, 0x48, 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x18, 0x49, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x16, 0x69, 0x73, 0x43, 0x72, + 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x12, 0x41, 0x0a, 0x1c, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x50, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x19, 0x63, 0x72, 0x6f, 0x73, + 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x33, 0x0a, 0x0c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x50, 0x0a, 0x17, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x69, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, + 0x6c, 0x6c, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, + 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x73, + 0x79, 0x6e, 0x63, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, + 0x61, 0x64, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x51, 0x20, 0x01, 0x28, 0x03, 0x52, 0x01, 0x6b, + 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x7a, 0x18, 0x52, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x56, 0x69, 0x7a, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x56, 0x69, 0x7a, 0x12, 0x3a, 0x0a, 0x0c, 0x64, 0x6f, 0x74, 0x5f, 0x73, 0x70, 0x61, + 0x72, 0x73, 0x69, 0x74, 0x79, 0x18, 0x56, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x6f, 0x74, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, + 0x79, 0x12, 0x54, 0x0a, 0x16, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x57, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x52, 0x14, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x58, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x18, 0x59, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, + 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x1a, 0x55, 0x0a, 0x0f, 0x53, 0x6c, + 0x69, 0x63, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x64, + 0x65, 0x42, 0x27, 0x0a, 0x25, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x72, + 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, + 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, + 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x2c, 0x10, 0x2d, 0x4a, 0x04, + 0x08, 0x35, 0x10, 0x36, 0x4a, 0x04, 0x08, 0x2e, 0x10, 0x2f, 0x4a, 0x04, 0x08, 0x29, 0x10, 0x2a, + 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x40, 0x10, 0x41, 0x4a, 0x04, 0x08, 0x4e, + 0x10, 0x4f, 0x4a, 0x04, 0x08, 0x53, 0x10, 0x54, 0x4a, 0x04, 0x08, 0x54, 0x10, 0x55, 0x52, 0x0e, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x1e, + 0x66, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x19, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, + 0x6f, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x18, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x73, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x5f, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x5f, 0x72, + 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x22, 0xbd, 0x02, + 0x0a, 0x13, 0x48, 0x6c, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, + 0x68, 0x61, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, + 0x15, 0x69, 0x73, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x73, + 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x68, 0x72, 0x65, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x52, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xff, 0x01, + 0x0a, 0x10, 0x48, 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x42, 0x0a, 0x09, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x3e, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x1a, 0x67, 0x0a, 0x0e, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 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, 0x3f, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x09, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x3e, 0x0a, 0x13, 0x49, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x1a, 0x67, 0x0a, 0x0e, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 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, 0x3f, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xa3, 0x02, 0x0a, 0x18, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x47, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0xbd, 0x01, 0x0a, 0x0f, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x0a, - 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4b, - 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x13, 0x48, 0x6c, - 0x6f, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x48, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x42, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x76, 0x0a, 0x15, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x32, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, - 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x22, 0x62, 0x0a, 0x14, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0xdd, 0x03, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x86, - 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x20, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 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, 0x1a, 0x5e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xd1, 0x0b, 0x0a, 0x0e, 0x48, 0x6c, 0x6f, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, - 0x0a, 0x16, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xa3, 0x02, 0x0a, 0x18, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x47, 0x0a, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x6c, 0x69, + 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0xbd, 0x01, 0x0a, 0x0f, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, + 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, + 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x13, 0x48, 0x6c, 0x6f, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x48, 0x0a, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, 0x6f, + 0x6e, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, + 0x6f, 0x6e, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x07, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x76, 0x0a, 0x15, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, + 0x62, 0x0a, 0x14, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, + 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0xdd, 0x03, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, + 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x0b, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x86, 0x01, 0x0a, 0x0c, 0x46, + 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, + 0x10, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 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, 0x1a, 0x5e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x69, 0x6c, + 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x49, 0x64, 0x22, 0xf7, 0x0d, 0x0a, 0x0e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x12, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, - 0x12, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x48, 0x6c, 0x6f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3b, 0x0a, 0x0c, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x6e, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0b, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 0x12, 0x53, 0x0a, 0x18, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x16, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x69, 0x73, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x69, 0x73, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x12, 0x41, 0x0a, 0x14, 0x73, - 0x70, 0x6d, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x73, 0x70, 0x6d, 0x64, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4b, - 0x0a, 0x19, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x17, 0x73, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x75, - 0x73, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x11, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0f, 0x73, 0x74, 0x61, - 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x48, 0x0a, 0x13, - 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, - 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x12, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x9d, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, - 0x65, 0x65, 0x64, 0x75, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, - 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x42, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, - 0x46, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x41, 0x59, 0x4f, - 0x55, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x4f, 0x54, 0x10, 0x04, 0x12, 0x0b, 0x0a, - 0x07, 0x46, 0x4c, 0x41, 0x47, 0x4e, 0x45, 0x54, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, - 0x52, 0x19, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x99, 0x02, 0x0a, 0x12, - 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x1a, 0x87, 0x01, - 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x10, 0x69, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xaa, 0x04, 0x0a, 0x15, 0x42, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x69, - 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x43, - 0x0a, 0x1e, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x32, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, - 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x5f, 0x6c, 0x69, 0x76, - 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x61, 0x79, - 0x62, 0x65, 0x4c, 0x69, 0x76, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, - 0x3f, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x1a, 0x62, 0x0a, 0x08, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x22, 0xd4, 0x03, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x62, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x1a, 0x96, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6d, - 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, + 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, + 0x6c, 0x6f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x44, 0x0a, 0x12, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, + 0x6c, 0x6f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, + 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3b, 0x0a, 0x0c, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5f, 0x64, 0x6f, 0x6e, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x44, 0x6f, + 0x6e, 0x6f, 0x72, 0x12, 0x53, 0x0a, 0x18, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x72, 0x6f, 0x73, + 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x52, 0x16, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x12, 0x41, 0x0a, 0x14, 0x73, 0x70, 0x6d, 0x64, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x73, 0x70, 0x6d, 0x64, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4b, 0x0a, 0x19, 0x73, 0x70, + 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x17, + 0x73, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x53, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x61, + 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, + 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, + 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x45, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x48, 0x0a, 0x13, 0x66, 0x72, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x46, 0x72, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x12, + 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x1a, 0x8c, 0x03, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, + 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x65, 0x65, 0x64, 0x75, + 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x11, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x10, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x6e, 0x74, 0x12, 0x6d, 0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, + 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x19, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x79, 0x22, 0x52, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x55, 0x53, 0x49, 0x4f, + 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x41, 0x59, 0x4f, 0x55, 0x54, 0x10, 0x03, 0x12, + 0x07, 0x0a, 0x03, 0x44, 0x4f, 0x54, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4c, 0x41, 0x47, + 0x4e, 0x45, 0x54, 0x10, 0x05, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x67, 0x79, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, + 0x47, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, + 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x47, 0x41, 0x10, 0x01, + 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, + 0x46, 0x41, 0x4e, 0x54, 0x41, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x4f, 0x46, 0x49, + 0x4c, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, + 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x46, 0x4f, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x09, + 0x10, 0x0a, 0x52, 0x19, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x99, 0x02, + 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x1a, + 0x87, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x2b, - 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x53, - 0x48, 0x41, 0x52, 0x45, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x02, 0x22, 0x5f, 0x0a, 0x13, 0x48, - 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x0a, 0x68, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xb7, 0x03, 0x0a, - 0x15, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, - 0x6c, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, - 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x12, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x11, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x15, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x73, 0x69, 0x6d, 0x75, 0x6c, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x13, 0x68, 0x65, 0x61, 0x70, - 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x1a, - 0x75, 0x0a, 0x0b, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x28, - 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9b, 0x01, 0x0a, 0x08, 0x48, 0x6c, 0x6f, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x0a, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, - 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x68, 0x6c, - 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0c, 0x68, 0x6c, 0x6f, 0x5f, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x48, 0x6c, 0x6f, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x03, 0x68, 0x6c, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x03, 0x68, 0x6c, 0x6f, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, - 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x61, 0x72, 0x67, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0x93, 0x02, 0x0a, 0x16, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x0a, 0x13, 0x63, - 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, - 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x70, - 0x61, 0x73, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xad, 0x03, 0x0a, 0x0f, 0x48, 0x6c, 0x6f, 0x50, 0x61, - 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x61, - 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x61, 0x73, - 0x73, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x75, 0x6d, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x75, 0x73, 0x65, 0x63, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x73, 0x65, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x75, 0x73, 0x65, 0x63, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x55, 0x73, 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x52, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x53, 0x0a, 0x12, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x11, 0x0a, 0x0d, - 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x13, 0x0a, 0x0f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x4c, 0x41, 0x54, 0x45, - 0x53, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, - 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x49, 0x45, 0x53, 0x54, 0x10, 0x02, 0x2a, 0xb4, 0x01, 0x0a, 0x14, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, - 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x28, 0x0a, - 0x24, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x50, 0x49, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x44, 0x5f, 0x46, 0x46, 0x49, - 0x10, 0x04, 0x2a, 0x3a, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, - 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4d, 0x41, 0x59, 0x5f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, 0x01, 0x12, 0x0e, - 0x0a, 0x0a, 0x4d, 0x55, 0x53, 0x54, 0x5f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, 0x02, 0x42, 0x03, - 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xaa, 0x04, 0x0a, 0x15, 0x42, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, + 0x0f, 0x69, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x74, 0x75, 0x70, 0x6c, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x54, 0x75, 0x70, 0x6c, 0x65, + 0x12, 0x43, 0x0a, 0x1e, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, + 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x5f, 0x6c, + 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, + 0x61, 0x79, 0x62, 0x65, 0x4c, 0x69, 0x76, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x12, 0x3f, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x1a, 0x62, 0x0a, 0x08, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x2a, + 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0xd4, 0x03, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x70, 0x53, + 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, + 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x96, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x36, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4b, 0x69, 0x6e, 0x64, + 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, + 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x2b, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x4c, 0x4f, + 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x02, 0x22, 0x5f, 0x0a, + 0x13, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x68, 0x6c, 0x6f, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x0a, 0x68, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xb7, + 0x03, 0x0a, 0x15, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x40, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, + 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x69, + 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0d, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x12, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x52, 0x11, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x15, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x73, 0x69, 0x6d, + 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x65, 0x61, 0x70, 0x53, 0x69, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x13, 0x68, 0x65, + 0x61, 0x70, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x73, 0x1a, 0x75, 0x0a, 0x0b, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x6c, 0x69, 0x61, 0x73, + 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9b, 0x01, 0x0a, 0x08, 0x48, 0x6c, 0x6f, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x0a, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, + 0x68, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x10, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0c, 0x68, 0x6c, 0x6f, 0x5f, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x48, 0x6c, 0x6f, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x03, 0x68, 0x6c, 0x6f, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x03, 0x68, 0x6c, 0x6f, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x61, + 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4c, + 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0x93, 0x02, 0x0a, 0x16, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x0a, + 0x13, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x6f, + 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, + 0x0d, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x48, 0x6c, 0x6f, 0x50, 0x61, + 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x70, 0x61, 0x73, 0x73, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe1, 0x03, 0x0a, 0x0f, 0x48, 0x6c, 0x6f, + 0x50, 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, + 0x70, 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, + 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x75, 0x6d, 0x70, 0x5f, + 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x75, 0x6d, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x75, 0x73, 0x65, + 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x73, 0x65, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x75, 0x73, 0x65, + 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x73, 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x0f, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x52, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x0a, 0x6b, 0x76, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x09, 0x6b, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2a, 0x53, 0x0a, 0x12, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, + 0x45, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x49, 0x45, 0x53, 0x54, 0x10, + 0x02, 0x2a, 0xb4, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, + 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x50, + 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x49, 0x5f, 0x56, + 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x10, + 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, + 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, + 0x15, 0x41, 0x50, 0x49, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x44, 0x5f, 0x46, 0x46, 0x49, 0x10, 0x04, 0x2a, 0x3a, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x41, 0x4c, + 0x49, 0x41, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x41, 0x59, 0x5f, 0x41, 0x4c, 0x49, + 0x41, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x55, 0x53, 0x54, 0x5f, 0x41, 0x4c, 0x49, + 0x41, 0x53, 0x10, 0x02, 0x42, 0x03, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3946,155 +4002,161 @@ func file_xla_service_hlo_proto_rawDescGZIP() []byte { return file_xla_service_hlo_proto_rawDescData } -var file_xla_service_hlo_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_xla_service_hlo_proto_enumTypes = make([]protoimpl.EnumInfo, 6) var file_xla_service_hlo_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_xla_service_hlo_proto_goTypes = []any{ - (CustomCallSchedule)(0), // 0: xla.CustomCallSchedule - (CustomCallApiVersion)(0), // 1: xla.CustomCallApiVersion - (Kind)(0), // 2: xla.Kind - (HloModuleProto_ProfileType)(0), // 3: xla.HloModuleProto.ProfileType - (HeapSimulatorTrace_Event_Kind)(0), // 4: xla.HeapSimulatorTrace.Event.Kind - (*HloInstructionProto)(nil), // 5: xla.HloInstructionProto - (*HloComputationProto)(nil), // 6: xla.HloComputationProto - (*HloScheduleProto)(nil), // 7: xla.HloScheduleProto - (*HloInputOutputAliasProto)(nil), // 8: xla.HloInputOutputAliasProto - (*HloBufferDonorProto)(nil), // 9: xla.HloBufferDonorProto - (*CrossProgramPrefetch)(nil), // 10: xla.CrossProgramPrefetch - (*StackFrameIndexProto)(nil), // 11: xla.StackFrameIndexProto - (*HloModuleProto)(nil), // 12: xla.HloModuleProto - (*LogicalBufferProto)(nil), // 13: xla.LogicalBufferProto - (*BufferAllocationProto)(nil), // 14: xla.BufferAllocationProto - (*HeapSimulatorTrace)(nil), // 15: xla.HeapSimulatorTrace - (*HloModuleGroupProto)(nil), // 16: xla.HloModuleGroupProto - (*BufferAssignmentProto)(nil), // 17: xla.BufferAssignmentProto - (*HloProto)(nil), // 18: xla.HloProto - (*HloSnapshot)(nil), // 19: xla.HloSnapshot - (*HloModuleMetadataProto)(nil), // 20: xla.HloModuleMetadataProto - (*HloPassMetadata)(nil), // 21: xla.HloPassMetadata - (*HloInstructionProto_SliceDimensions)(nil), // 22: xla.HloInstructionProto.SliceDimensions - (*HloScheduleProto_InstructionSequence)(nil), // 23: xla.HloScheduleProto.InstructionSequence - nil, // 24: xla.HloScheduleProto.SequencesEntry - (*HloInputOutputAliasProto_AliasEntryProto)(nil), // 25: xla.HloInputOutputAliasProto.AliasEntryProto - (*HloBufferDonorProto_BufferDonorEntryProto)(nil), // 26: xla.HloBufferDonorProto.BufferDonorEntryProto - (*StackFrameIndexProto_FileLocation)(nil), // 27: xla.StackFrameIndexProto.FileLocation - (*StackFrameIndexProto_StackFrame)(nil), // 28: xla.StackFrameIndexProto.StackFrame - (*HloModuleProto_ProfileInfo)(nil), // 29: xla.HloModuleProto.ProfileInfo - (*LogicalBufferProto_Location)(nil), // 30: xla.LogicalBufferProto.Location - (*BufferAllocationProto_Assigned)(nil), // 31: xla.BufferAllocationProto.Assigned - (*HeapSimulatorTrace_Event)(nil), // 32: xla.HeapSimulatorTrace.Event - (*BufferAssignmentProto_BufferAlias)(nil), // 33: xla.BufferAssignmentProto.BufferAlias - (*xla_data.ShapeProto)(nil), // 34: xla.ShapeProto - (*xla_data.OpMetadata)(nil), // 35: xla.OpMetadata - (*xla_data.LiteralProto)(nil), // 36: xla.LiteralProto - (*xla_data.Window)(nil), // 37: xla.Window - (*xla_data.ConvolutionDimensionNumbers)(nil), // 38: xla.ConvolutionDimensionNumbers - (*xla_data.PaddingConfig)(nil), // 39: xla.PaddingConfig - (xla_data.RandomDistribution)(0), // 40: xla.RandomDistribution - (*xla_data.DotDimensionNumbers)(nil), // 41: xla.DotDimensionNumbers - (xla_data.FftType)(0), // 42: xla.FftType - (*xla_data.GatherDimensionNumbers)(nil), // 43: xla.GatherDimensionNumbers - (*xla_data.OpSharding)(nil), // 44: xla.OpSharding - (*xla_data.ReplicaGroup)(nil), // 45: xla.ReplicaGroup - (*xla_data.ScatterDimensionNumbers)(nil), // 46: xla.ScatterDimensionNumbers - (*xla_data.PrecisionConfig)(nil), // 47: xla.PrecisionConfig - (*xla_data.SourceTarget)(nil), // 48: xla.SourceTarget - (*xla_data.TriangularSolveOptions)(nil), // 49: xla.TriangularSolveOptions - (*xla_data.CholeskyOptions)(nil), // 50: xla.CholeskyOptions - (*xla_data.ParameterReplication)(nil), // 51: xla.ParameterReplication - (*xla_data.OutputOperandAliasing)(nil), // 52: xla.OutputOperandAliasing - (*xla_data.FrontendAttributes)(nil), // 53: xla.FrontendAttributes - (xla_data.RandomAlgorithm)(0), // 54: xla.RandomAlgorithm - (xla_data.PaddingType)(0), // 55: xla.PaddingType - (*xla_data.StatisticsViz)(nil), // 56: xla.StatisticsViz - (*xla_data.SparsityDescriptor)(nil), // 57: xla.SparsityDescriptor - (*xla_data.CollectiveDeviceListProto)(nil), // 58: xla.CollectiveDeviceListProto - (*xla_data.OriginalValueProto)(nil), // 59: xla.OriginalValueProto - (*xla_data.ProgramShapeProto)(nil), // 60: xla.ProgramShapeProto - (*xla_data.DeviceAssignmentProto)(nil), // 61: xla.DeviceAssignmentProto - (*anypb.Any)(nil), // 62: google.protobuf.Any - (xla_data.ProfileSource)(0), // 63: xla.ProfileSource - (xla_data.CompilationEvent)(0), // 64: xla.CompilationEvent + (CustomCallSchedule)(0), // 0: xla.CustomCallSchedule + (CustomCallApiVersion)(0), // 1: xla.CustomCallApiVersion + (Kind)(0), // 2: xla.Kind + (HloModuleProto_ProfileType)(0), // 3: xla.HloModuleProto.ProfileType + (HloModuleProto_ProfileGenerationStrategy)(0), // 4: xla.HloModuleProto.ProfileGenerationStrategy + (HeapSimulatorTrace_Event_Kind)(0), // 5: xla.HeapSimulatorTrace.Event.Kind + (*HloInstructionProto)(nil), // 6: xla.HloInstructionProto + (*HloComputationProto)(nil), // 7: xla.HloComputationProto + (*HloScheduleProto)(nil), // 8: xla.HloScheduleProto + (*HloInputOutputAliasProto)(nil), // 9: xla.HloInputOutputAliasProto + (*HloBufferDonorProto)(nil), // 10: xla.HloBufferDonorProto + (*CrossProgramPrefetch)(nil), // 11: xla.CrossProgramPrefetch + (*StackFrameIndexProto)(nil), // 12: xla.StackFrameIndexProto + (*HloModuleProto)(nil), // 13: xla.HloModuleProto + (*LogicalBufferProto)(nil), // 14: xla.LogicalBufferProto + (*BufferAllocationProto)(nil), // 15: xla.BufferAllocationProto + (*HeapSimulatorTrace)(nil), // 16: xla.HeapSimulatorTrace + (*HloModuleGroupProto)(nil), // 17: xla.HloModuleGroupProto + (*BufferAssignmentProto)(nil), // 18: xla.BufferAssignmentProto + (*HloProto)(nil), // 19: xla.HloProto + (*HloSnapshot)(nil), // 20: xla.HloSnapshot + (*HloModuleMetadataProto)(nil), // 21: xla.HloModuleMetadataProto + (*HloPassMetadata)(nil), // 22: xla.HloPassMetadata + (*HloInstructionProto_SliceDimensions)(nil), // 23: xla.HloInstructionProto.SliceDimensions + (*HloScheduleProto_InstructionSequence)(nil), // 24: xla.HloScheduleProto.InstructionSequence + nil, // 25: xla.HloScheduleProto.SequencesEntry + (*HloInputOutputAliasProto_AliasEntryProto)(nil), // 26: xla.HloInputOutputAliasProto.AliasEntryProto + (*HloBufferDonorProto_BufferDonorEntryProto)(nil), // 27: xla.HloBufferDonorProto.BufferDonorEntryProto + (*StackFrameIndexProto_FileLocation)(nil), // 28: xla.StackFrameIndexProto.FileLocation + (*StackFrameIndexProto_StackFrame)(nil), // 29: xla.StackFrameIndexProto.StackFrame + (*HloModuleProto_ProfileInfo)(nil), // 30: xla.HloModuleProto.ProfileInfo + (*LogicalBufferProto_Location)(nil), // 31: xla.LogicalBufferProto.Location + (*BufferAllocationProto_Assigned)(nil), // 32: xla.BufferAllocationProto.Assigned + (*HeapSimulatorTrace_Event)(nil), // 33: xla.HeapSimulatorTrace.Event + (*BufferAssignmentProto_BufferAlias)(nil), // 34: xla.BufferAssignmentProto.BufferAlias + (*xla_data.ShapeProto)(nil), // 35: xla.ShapeProto + (*xla_data.OpMetadata)(nil), // 36: xla.OpMetadata + (*xla_data.LiteralProto)(nil), // 37: xla.LiteralProto + (*xla_data.Window)(nil), // 38: xla.Window + (*xla_data.ConvolutionDimensionNumbers)(nil), // 39: xla.ConvolutionDimensionNumbers + (*xla_data.PaddingConfig)(nil), // 40: xla.PaddingConfig + (xla_data.RandomDistribution)(0), // 41: xla.RandomDistribution + (*xla_data.DotDimensionNumbers)(nil), // 42: xla.DotDimensionNumbers + (*xla_data.RaggedDotDimensionNumbers)(nil), // 43: xla.RaggedDotDimensionNumbers + (xla_data.FftType)(0), // 44: xla.FftType + (*xla_data.GatherDimensionNumbers)(nil), // 45: xla.GatherDimensionNumbers + (*xla_data.OpSharding)(nil), // 46: xla.OpSharding + (*xla_data.ReplicaGroup)(nil), // 47: xla.ReplicaGroup + (*xla_data.ScatterDimensionNumbers)(nil), // 48: xla.ScatterDimensionNumbers + (*xla_data.PrecisionConfig)(nil), // 49: xla.PrecisionConfig + (*xla_data.SourceTarget)(nil), // 50: xla.SourceTarget + (*xla_data.TriangularSolveOptions)(nil), // 51: xla.TriangularSolveOptions + (*xla_data.CholeskyOptions)(nil), // 52: xla.CholeskyOptions + (*xla_data.ParameterReplication)(nil), // 53: xla.ParameterReplication + (*xla_data.OutputOperandAliasing)(nil), // 54: xla.OutputOperandAliasing + (*xla_data.FrontendAttributes)(nil), // 55: xla.FrontendAttributes + (xla_data.RandomAlgorithm)(0), // 56: xla.RandomAlgorithm + (xla_data.PaddingType)(0), // 57: xla.PaddingType + (*xla_data.StatisticsViz)(nil), // 58: xla.StatisticsViz + (*xla_data.SparsityDescriptor)(nil), // 59: xla.SparsityDescriptor + (*xla_data.CollectiveDeviceListProto)(nil), // 60: xla.CollectiveDeviceListProto + (*xla_data.OriginalValueProto)(nil), // 61: xla.OriginalValueProto + (*xla_data.ProgramShapeProto)(nil), // 62: xla.ProgramShapeProto + (*xla_data.DeviceAssignmentProto)(nil), // 63: xla.DeviceAssignmentProto + (*anypb.Any)(nil), // 64: google.protobuf.Any + (*metrics.KeyValueMetric)(nil), // 65: xla.KeyValueMetric + (xla_data.ProfileSource)(0), // 66: xla.ProfileSource + (xla_data.CompilationEvent)(0), // 67: xla.CompilationEvent } var file_xla_service_hlo_proto_depIdxs = []int32{ - 34, // 0: xla.HloInstructionProto.shape:type_name -> xla.ShapeProto - 35, // 1: xla.HloInstructionProto.metadata:type_name -> xla.OpMetadata - 36, // 2: xla.HloInstructionProto.literal:type_name -> xla.LiteralProto - 37, // 3: xla.HloInstructionProto.window:type_name -> xla.Window - 38, // 4: xla.HloInstructionProto.convolution_dimension_numbers:type_name -> xla.ConvolutionDimensionNumbers - 22, // 5: xla.HloInstructionProto.slice_dimensions:type_name -> xla.HloInstructionProto.SliceDimensions - 39, // 6: xla.HloInstructionProto.padding_config:type_name -> xla.PaddingConfig - 40, // 7: xla.HloInstructionProto.distribution:type_name -> xla.RandomDistribution - 34, // 8: xla.HloInstructionProto.outfeed_shape:type_name -> xla.ShapeProto - 41, // 9: xla.HloInstructionProto.dot_dimension_numbers:type_name -> xla.DotDimensionNumbers - 42, // 10: xla.HloInstructionProto.fft_type:type_name -> xla.FftType - 43, // 11: xla.HloInstructionProto.gather_dimension_numbers:type_name -> xla.GatherDimensionNumbers - 44, // 12: xla.HloInstructionProto.sharding:type_name -> xla.OpSharding - 45, // 13: xla.HloInstructionProto.replica_groups:type_name -> xla.ReplicaGroup - 46, // 14: xla.HloInstructionProto.scatter_dimension_numbers:type_name -> xla.ScatterDimensionNumbers - 47, // 15: xla.HloInstructionProto.precision_config:type_name -> xla.PrecisionConfig - 48, // 16: xla.HloInstructionProto.source_target_pairs:type_name -> xla.SourceTarget - 44, // 17: xla.HloInstructionProto.domain_entry_sharding:type_name -> xla.OpSharding - 44, // 18: xla.HloInstructionProto.domain_exit_sharding:type_name -> xla.OpSharding - 34, // 19: xla.HloInstructionProto.operand_shapes_with_layout:type_name -> xla.ShapeProto - 49, // 20: xla.HloInstructionProto.triangular_solve_options:type_name -> xla.TriangularSolveOptions - 50, // 21: xla.HloInstructionProto.cholesky_options:type_name -> xla.CholeskyOptions - 51, // 22: xla.HloInstructionProto.parameter_replication:type_name -> xla.ParameterReplication - 52, // 23: xla.HloInstructionProto.output_operand_aliasing:type_name -> xla.OutputOperandAliasing - 0, // 24: xla.HloInstructionProto.custom_call_schedule:type_name -> xla.CustomCallSchedule - 53, // 25: xla.HloInstructionProto.frontend_attributes:type_name -> xla.FrontendAttributes - 54, // 26: xla.HloInstructionProto.rng_algorithm:type_name -> xla.RandomAlgorithm - 55, // 27: xla.HloInstructionProto.padding_type:type_name -> xla.PaddingType - 1, // 28: xla.HloInstructionProto.custom_call_api_version:type_name -> xla.CustomCallApiVersion - 56, // 29: xla.HloInstructionProto.statistics_viz:type_name -> xla.StatisticsViz - 57, // 30: xla.HloInstructionProto.dot_sparsity:type_name -> xla.SparsityDescriptor - 58, // 31: xla.HloInstructionProto.collective_device_list:type_name -> xla.CollectiveDeviceListProto - 59, // 32: xla.HloInstructionProto.original_value:type_name -> xla.OriginalValueProto - 5, // 33: xla.HloComputationProto.instructions:type_name -> xla.HloInstructionProto - 60, // 34: xla.HloComputationProto.program_shape:type_name -> xla.ProgramShapeProto - 24, // 35: xla.HloScheduleProto.sequences:type_name -> xla.HloScheduleProto.SequencesEntry - 25, // 36: xla.HloInputOutputAliasProto.entries:type_name -> xla.HloInputOutputAliasProto.AliasEntryProto - 26, // 37: xla.HloBufferDonorProto.entries:type_name -> xla.HloBufferDonorProto.BufferDonorEntryProto - 27, // 38: xla.StackFrameIndexProto.file_locations:type_name -> xla.StackFrameIndexProto.FileLocation - 28, // 39: xla.StackFrameIndexProto.stack_frames:type_name -> xla.StackFrameIndexProto.StackFrame - 6, // 40: xla.HloModuleProto.computations:type_name -> xla.HloComputationProto - 60, // 41: xla.HloModuleProto.host_program_shape:type_name -> xla.ProgramShapeProto - 7, // 42: xla.HloModuleProto.schedule:type_name -> xla.HloScheduleProto - 8, // 43: xla.HloModuleProto.input_output_alias:type_name -> xla.HloInputOutputAliasProto - 9, // 44: xla.HloModuleProto.buffer_donor:type_name -> xla.HloBufferDonorProto - 10, // 45: xla.HloModuleProto.cross_program_prefetches:type_name -> xla.CrossProgramPrefetch - 44, // 46: xla.HloModuleProto.spmd_output_sharding:type_name -> xla.OpSharding - 44, // 47: xla.HloModuleProto.spmd_parameters_shardings:type_name -> xla.OpSharding - 29, // 48: xla.HloModuleProto.profile_info:type_name -> xla.HloModuleProto.ProfileInfo - 61, // 49: xla.HloModuleProto.device_assignment:type_name -> xla.DeviceAssignmentProto - 11, // 50: xla.HloModuleProto.stack_frame_index:type_name -> xla.StackFrameIndexProto - 53, // 51: xla.HloModuleProto.frontend_attributes:type_name -> xla.FrontendAttributes - 30, // 52: xla.LogicalBufferProto.defined_at:type_name -> xla.LogicalBufferProto.Location - 31, // 53: xla.BufferAllocationProto.assigned:type_name -> xla.BufferAllocationProto.Assigned - 32, // 54: xla.HeapSimulatorTrace.events:type_name -> xla.HeapSimulatorTrace.Event - 12, // 55: xla.HloModuleGroupProto.hlo_modules:type_name -> xla.HloModuleProto - 13, // 56: xla.BufferAssignmentProto.logical_buffers:type_name -> xla.LogicalBufferProto - 33, // 57: xla.BufferAssignmentProto.buffer_aliases:type_name -> xla.BufferAssignmentProto.BufferAlias - 14, // 58: xla.BufferAssignmentProto.buffer_allocations:type_name -> xla.BufferAllocationProto - 15, // 59: xla.BufferAssignmentProto.heap_simulator_traces:type_name -> xla.HeapSimulatorTrace - 12, // 60: xla.HloProto.hlo_module:type_name -> xla.HloModuleProto - 17, // 61: xla.HloProto.buffer_assignment:type_name -> xla.BufferAssignmentProto - 18, // 62: xla.HloSnapshot.hlo:type_name -> xla.HloProto - 36, // 63: xla.HloSnapshot.arguments:type_name -> xla.LiteralProto - 36, // 64: xla.HloSnapshot.result:type_name -> xla.LiteralProto - 21, // 65: xla.HloModuleMetadataProto.pass_metadata:type_name -> xla.HloPassMetadata - 62, // 66: xla.HloPassMetadata.custom_metadata:type_name -> google.protobuf.Any - 23, // 67: xla.HloScheduleProto.SequencesEntry.value:type_name -> xla.HloScheduleProto.InstructionSequence - 2, // 68: xla.HloInputOutputAliasProto.AliasEntryProto.kind:type_name -> xla.Kind - 3, // 69: xla.HloModuleProto.ProfileInfo.profile_type:type_name -> xla.HloModuleProto.ProfileType - 63, // 70: xla.HloModuleProto.ProfileInfo.profile_source:type_name -> xla.ProfileSource - 64, // 71: xla.HloModuleProto.ProfileInfo.compilation_event:type_name -> xla.CompilationEvent - 4, // 72: xla.HeapSimulatorTrace.Event.kind:type_name -> xla.HeapSimulatorTrace.Event.Kind - 30, // 73: xla.BufferAssignmentProto.BufferAlias.location:type_name -> xla.LogicalBufferProto.Location - 74, // [74:74] is the sub-list for method output_type - 74, // [74:74] is the sub-list for method input_type - 74, // [74:74] is the sub-list for extension type_name - 74, // [74:74] is the sub-list for extension extendee - 0, // [0:74] is the sub-list for field type_name + 35, // 0: xla.HloInstructionProto.shape:type_name -> xla.ShapeProto + 36, // 1: xla.HloInstructionProto.metadata:type_name -> xla.OpMetadata + 37, // 2: xla.HloInstructionProto.literal:type_name -> xla.LiteralProto + 38, // 3: xla.HloInstructionProto.window:type_name -> xla.Window + 39, // 4: xla.HloInstructionProto.convolution_dimension_numbers:type_name -> xla.ConvolutionDimensionNumbers + 23, // 5: xla.HloInstructionProto.slice_dimensions:type_name -> xla.HloInstructionProto.SliceDimensions + 40, // 6: xla.HloInstructionProto.padding_config:type_name -> xla.PaddingConfig + 41, // 7: xla.HloInstructionProto.distribution:type_name -> xla.RandomDistribution + 35, // 8: xla.HloInstructionProto.outfeed_shape:type_name -> xla.ShapeProto + 42, // 9: xla.HloInstructionProto.dot_dimension_numbers:type_name -> xla.DotDimensionNumbers + 43, // 10: xla.HloInstructionProto.ragged_dot_dimension_numbers:type_name -> xla.RaggedDotDimensionNumbers + 44, // 11: xla.HloInstructionProto.fft_type:type_name -> xla.FftType + 45, // 12: xla.HloInstructionProto.gather_dimension_numbers:type_name -> xla.GatherDimensionNumbers + 46, // 13: xla.HloInstructionProto.sharding:type_name -> xla.OpSharding + 47, // 14: xla.HloInstructionProto.replica_groups:type_name -> xla.ReplicaGroup + 48, // 15: xla.HloInstructionProto.scatter_dimension_numbers:type_name -> xla.ScatterDimensionNumbers + 49, // 16: xla.HloInstructionProto.precision_config:type_name -> xla.PrecisionConfig + 50, // 17: xla.HloInstructionProto.source_target_pairs:type_name -> xla.SourceTarget + 46, // 18: xla.HloInstructionProto.domain_entry_sharding:type_name -> xla.OpSharding + 46, // 19: xla.HloInstructionProto.domain_exit_sharding:type_name -> xla.OpSharding + 35, // 20: xla.HloInstructionProto.operand_shapes_with_layout:type_name -> xla.ShapeProto + 51, // 21: xla.HloInstructionProto.triangular_solve_options:type_name -> xla.TriangularSolveOptions + 52, // 22: xla.HloInstructionProto.cholesky_options:type_name -> xla.CholeskyOptions + 53, // 23: xla.HloInstructionProto.parameter_replication:type_name -> xla.ParameterReplication + 54, // 24: xla.HloInstructionProto.output_operand_aliasing:type_name -> xla.OutputOperandAliasing + 0, // 25: xla.HloInstructionProto.custom_call_schedule:type_name -> xla.CustomCallSchedule + 55, // 26: xla.HloInstructionProto.frontend_attributes:type_name -> xla.FrontendAttributes + 56, // 27: xla.HloInstructionProto.rng_algorithm:type_name -> xla.RandomAlgorithm + 57, // 28: xla.HloInstructionProto.padding_type:type_name -> xla.PaddingType + 1, // 29: xla.HloInstructionProto.custom_call_api_version:type_name -> xla.CustomCallApiVersion + 58, // 30: xla.HloInstructionProto.statistics_viz:type_name -> xla.StatisticsViz + 59, // 31: xla.HloInstructionProto.dot_sparsity:type_name -> xla.SparsityDescriptor + 60, // 32: xla.HloInstructionProto.collective_device_list:type_name -> xla.CollectiveDeviceListProto + 61, // 33: xla.HloInstructionProto.original_value:type_name -> xla.OriginalValueProto + 6, // 34: xla.HloComputationProto.instructions:type_name -> xla.HloInstructionProto + 62, // 35: xla.HloComputationProto.program_shape:type_name -> xla.ProgramShapeProto + 25, // 36: xla.HloScheduleProto.sequences:type_name -> xla.HloScheduleProto.SequencesEntry + 26, // 37: xla.HloInputOutputAliasProto.entries:type_name -> xla.HloInputOutputAliasProto.AliasEntryProto + 27, // 38: xla.HloBufferDonorProto.entries:type_name -> xla.HloBufferDonorProto.BufferDonorEntryProto + 28, // 39: xla.StackFrameIndexProto.file_locations:type_name -> xla.StackFrameIndexProto.FileLocation + 29, // 40: xla.StackFrameIndexProto.stack_frames:type_name -> xla.StackFrameIndexProto.StackFrame + 7, // 41: xla.HloModuleProto.computations:type_name -> xla.HloComputationProto + 62, // 42: xla.HloModuleProto.host_program_shape:type_name -> xla.ProgramShapeProto + 8, // 43: xla.HloModuleProto.schedule:type_name -> xla.HloScheduleProto + 9, // 44: xla.HloModuleProto.input_output_alias:type_name -> xla.HloInputOutputAliasProto + 10, // 45: xla.HloModuleProto.buffer_donor:type_name -> xla.HloBufferDonorProto + 11, // 46: xla.HloModuleProto.cross_program_prefetches:type_name -> xla.CrossProgramPrefetch + 46, // 47: xla.HloModuleProto.spmd_output_sharding:type_name -> xla.OpSharding + 46, // 48: xla.HloModuleProto.spmd_parameters_shardings:type_name -> xla.OpSharding + 30, // 49: xla.HloModuleProto.profile_info:type_name -> xla.HloModuleProto.ProfileInfo + 63, // 50: xla.HloModuleProto.device_assignment:type_name -> xla.DeviceAssignmentProto + 12, // 51: xla.HloModuleProto.stack_frame_index:type_name -> xla.StackFrameIndexProto + 55, // 52: xla.HloModuleProto.frontend_attributes:type_name -> xla.FrontendAttributes + 31, // 53: xla.LogicalBufferProto.defined_at:type_name -> xla.LogicalBufferProto.Location + 32, // 54: xla.BufferAllocationProto.assigned:type_name -> xla.BufferAllocationProto.Assigned + 33, // 55: xla.HeapSimulatorTrace.events:type_name -> xla.HeapSimulatorTrace.Event + 13, // 56: xla.HloModuleGroupProto.hlo_modules:type_name -> xla.HloModuleProto + 14, // 57: xla.BufferAssignmentProto.logical_buffers:type_name -> xla.LogicalBufferProto + 34, // 58: xla.BufferAssignmentProto.buffer_aliases:type_name -> xla.BufferAssignmentProto.BufferAlias + 15, // 59: xla.BufferAssignmentProto.buffer_allocations:type_name -> xla.BufferAllocationProto + 16, // 60: xla.BufferAssignmentProto.heap_simulator_traces:type_name -> xla.HeapSimulatorTrace + 13, // 61: xla.HloProto.hlo_module:type_name -> xla.HloModuleProto + 18, // 62: xla.HloProto.buffer_assignment:type_name -> xla.BufferAssignmentProto + 19, // 63: xla.HloSnapshot.hlo:type_name -> xla.HloProto + 37, // 64: xla.HloSnapshot.arguments:type_name -> xla.LiteralProto + 37, // 65: xla.HloSnapshot.result:type_name -> xla.LiteralProto + 22, // 66: xla.HloModuleMetadataProto.pass_metadata:type_name -> xla.HloPassMetadata + 64, // 67: xla.HloPassMetadata.custom_metadata:type_name -> google.protobuf.Any + 65, // 68: xla.HloPassMetadata.kv_metrics:type_name -> xla.KeyValueMetric + 24, // 69: xla.HloScheduleProto.SequencesEntry.value:type_name -> xla.HloScheduleProto.InstructionSequence + 2, // 70: xla.HloInputOutputAliasProto.AliasEntryProto.kind:type_name -> xla.Kind + 3, // 71: xla.HloModuleProto.ProfileInfo.profile_type:type_name -> xla.HloModuleProto.ProfileType + 66, // 72: xla.HloModuleProto.ProfileInfo.profile_source:type_name -> xla.ProfileSource + 67, // 73: xla.HloModuleProto.ProfileInfo.compilation_event:type_name -> xla.CompilationEvent + 4, // 74: xla.HloModuleProto.ProfileInfo.profile_generation_strategy:type_name -> xla.HloModuleProto.ProfileGenerationStrategy + 5, // 75: xla.HeapSimulatorTrace.Event.kind:type_name -> xla.HeapSimulatorTrace.Event.Kind + 31, // 76: xla.BufferAssignmentProto.BufferAlias.location:type_name -> xla.LogicalBufferProto.Location + 77, // [77:77] is the sub-list for method output_type + 77, // [77:77] is the sub-list for method input_type + 77, // [77:77] is the sub-list for extension type_name + 77, // [77:77] is the sub-list for extension extendee + 0, // [0:77] is the sub-list for field type_name } func init() { file_xla_service_hlo_proto_init() } @@ -4102,344 +4164,6 @@ func file_xla_service_hlo_proto_init() { if File_xla_service_hlo_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_service_hlo_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*HloInstructionProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*HloComputationProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*HloScheduleProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*HloInputOutputAliasProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*HloBufferDonorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*CrossProgramPrefetch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*StackFrameIndexProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*LogicalBufferProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*BufferAllocationProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*HeapSimulatorTrace); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleGroupProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*BufferAssignmentProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*HloProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*HloSnapshot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleMetadataProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*HloPassMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*HloInstructionProto_SliceDimensions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*HloScheduleProto_InstructionSequence); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*HloInputOutputAliasProto_AliasEntryProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*HloBufferDonorProto_BufferDonorEntryProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*StackFrameIndexProto_FileLocation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*StackFrameIndexProto_StackFrame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleProto_ProfileInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*LogicalBufferProto_Location); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*BufferAllocationProto_Assigned); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*HeapSimulatorTrace_Event); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_service_hlo_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*BufferAssignmentProto_BufferAlias); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_xla_service_hlo_proto_msgTypes[0].OneofWrappers = []any{ (*HloInstructionProto_CrossProgramPrefetchIndex)(nil), } @@ -4448,7 +4172,7 @@ func file_xla_service_hlo_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xla_service_hlo_proto_rawDesc, - NumEnums: 5, + NumEnums: 6, NumMessages: 29, NumExtensions: 0, NumServices: 0, diff --git a/protos/metrics.proto b/protos/metrics.proto new file mode 100644 index 0000000..ab359a5 --- /dev/null +++ b/protos/metrics.proto @@ -0,0 +1,77 @@ +syntax = "proto3"; + +package xla; + +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +// Defines generic pass stats. +message KeyValueMetric { + string key = 1; + int64 value = 2; +} + +// Defines pass specific metrics. +message PassMetrics { + // Unique ID of the module on which the pass was run. + uint64 module_id = 1; + // The name of the pass. + string pass_name = 2; + // Duration of the pass. + google.protobuf.Duration pass_duration = 3; + // Custom pass metrics. Used for cases where a more complex structure + // is needed than a simple key - value pair (via generic metric). + // This is kept opaque, via `google.protobuf.Any`, in order to + // decouple pass agnostic compilation logs from possibly proprietary compiler + // passes. + google.protobuf.Any custom_metrics = 4; + // Used to log any number of generic metrics per pass. + // Encapsulates simple metrics regarding a pass via a key - value pair. + // For more complex metrics for a pass, see custom_metric above. + repeated KeyValueMetric kv_metrics = 5; +} + +// Defines compilation job information. +message JobInfo { + // Name of the job running compilation. + optional string name = 1; + // Cell in which the job is running. + optional string cell = 2; + // User running the job. + optional string user = 3; + // Unique id when combined with user and cell field. + optional int64 uid = 4; + // Task index, which will not change across job restarts. + optional int64 task_id = 5; + // Task unique id, which may change across job restarts. + optional int64 task_uid = 6; +} + +// Defines XLA compilation metrics. +message CompilationLogEntry { + // Time when the event captured by this log entry occurred. + google.protobuf.Timestamp timestamp = 1; + // Defines compilation stages for which metrics are collected. + enum CompilationStage { + UNSPECIFIED = 0; + END_TO_END = 1; + HLO_PASSES = 2; + CODE_GENERATION = 3; + BACKEND_PASSES = 4; + } + // Compilation stage recorded by this log entry. + CompilationStage stage = 2; + // Duration of the given compilation stage. + google.protobuf.Duration duration = 3; + // Task index from which this log entry was recorded or + // -1 if the task index could not be fetched. In the case task_index is not + // equal to -1, it is guaranteed to match the task_id in job_info. + int32 task_index = 4; + // Pass specific metrics. + repeated PassMetrics pass_metrics = 5; + // IDs of modules on which the compilation stage was run. + repeated uint64 module_ids = 6; + // Job information. + JobInfo job_info = 7; +} diff --git a/protos/metrics/metrics.pb.go b/protos/metrics/metrics.pb.go new file mode 100644 index 0000000..389f6b1 --- /dev/null +++ b/protos/metrics/metrics.pb.go @@ -0,0 +1,562 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc v3.21.12 +// source: xla/service/metrics.proto + +package metrics + +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" + 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) +) + +// Defines compilation stages for which metrics are collected. +type CompilationLogEntry_CompilationStage int32 + +const ( + CompilationLogEntry_UNSPECIFIED CompilationLogEntry_CompilationStage = 0 + CompilationLogEntry_END_TO_END CompilationLogEntry_CompilationStage = 1 + CompilationLogEntry_HLO_PASSES CompilationLogEntry_CompilationStage = 2 + CompilationLogEntry_CODE_GENERATION CompilationLogEntry_CompilationStage = 3 + CompilationLogEntry_BACKEND_PASSES CompilationLogEntry_CompilationStage = 4 +) + +// Enum value maps for CompilationLogEntry_CompilationStage. +var ( + CompilationLogEntry_CompilationStage_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "END_TO_END", + 2: "HLO_PASSES", + 3: "CODE_GENERATION", + 4: "BACKEND_PASSES", + } + CompilationLogEntry_CompilationStage_value = map[string]int32{ + "UNSPECIFIED": 0, + "END_TO_END": 1, + "HLO_PASSES": 2, + "CODE_GENERATION": 3, + "BACKEND_PASSES": 4, + } +) + +func (x CompilationLogEntry_CompilationStage) Enum() *CompilationLogEntry_CompilationStage { + p := new(CompilationLogEntry_CompilationStage) + *p = x + return p +} + +func (x CompilationLogEntry_CompilationStage) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CompilationLogEntry_CompilationStage) Descriptor() protoreflect.EnumDescriptor { + return file_xla_service_metrics_proto_enumTypes[0].Descriptor() +} + +func (CompilationLogEntry_CompilationStage) Type() protoreflect.EnumType { + return &file_xla_service_metrics_proto_enumTypes[0] +} + +func (x CompilationLogEntry_CompilationStage) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CompilationLogEntry_CompilationStage.Descriptor instead. +func (CompilationLogEntry_CompilationStage) EnumDescriptor() ([]byte, []int) { + return file_xla_service_metrics_proto_rawDescGZIP(), []int{3, 0} +} + +// Defines generic pass stats. +type KeyValueMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *KeyValueMetric) Reset() { + *x = KeyValueMetric{} + mi := &file_xla_service_metrics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KeyValueMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValueMetric) ProtoMessage() {} + +func (x *KeyValueMetric) ProtoReflect() protoreflect.Message { + mi := &file_xla_service_metrics_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 KeyValueMetric.ProtoReflect.Descriptor instead. +func (*KeyValueMetric) Descriptor() ([]byte, []int) { + return file_xla_service_metrics_proto_rawDescGZIP(), []int{0} +} + +func (x *KeyValueMetric) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KeyValueMetric) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +// Defines pass specific metrics. +type PassMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique ID of the module on which the pass was run. + ModuleId uint64 `protobuf:"varint,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` + // The name of the pass. + PassName string `protobuf:"bytes,2,opt,name=pass_name,json=passName,proto3" json:"pass_name,omitempty"` + // Duration of the pass. + PassDuration *durationpb.Duration `protobuf:"bytes,3,opt,name=pass_duration,json=passDuration,proto3" json:"pass_duration,omitempty"` + // Custom pass metrics. Used for cases where a more complex structure + // is needed than a simple key - value pair (via generic metric). + // This is kept opaque, via `google.protobuf.Any`, in order to + // decouple pass agnostic compilation logs from possibly proprietary compiler + // passes. + CustomMetrics *anypb.Any `protobuf:"bytes,4,opt,name=custom_metrics,json=customMetrics,proto3" json:"custom_metrics,omitempty"` + // Used to log any number of generic metrics per pass. + // Encapsulates simple metrics regarding a pass via a key - value pair. + // For more complex metrics for a pass, see custom_metric above. + KvMetrics []*KeyValueMetric `protobuf:"bytes,5,rep,name=kv_metrics,json=kvMetrics,proto3" json:"kv_metrics,omitempty"` +} + +func (x *PassMetrics) Reset() { + *x = PassMetrics{} + mi := &file_xla_service_metrics_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PassMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PassMetrics) ProtoMessage() {} + +func (x *PassMetrics) ProtoReflect() protoreflect.Message { + mi := &file_xla_service_metrics_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 PassMetrics.ProtoReflect.Descriptor instead. +func (*PassMetrics) Descriptor() ([]byte, []int) { + return file_xla_service_metrics_proto_rawDescGZIP(), []int{1} +} + +func (x *PassMetrics) GetModuleId() uint64 { + if x != nil { + return x.ModuleId + } + return 0 +} + +func (x *PassMetrics) GetPassName() string { + if x != nil { + return x.PassName + } + return "" +} + +func (x *PassMetrics) GetPassDuration() *durationpb.Duration { + if x != nil { + return x.PassDuration + } + return nil +} + +func (x *PassMetrics) GetCustomMetrics() *anypb.Any { + if x != nil { + return x.CustomMetrics + } + return nil +} + +func (x *PassMetrics) GetKvMetrics() []*KeyValueMetric { + if x != nil { + return x.KvMetrics + } + return nil +} + +// Defines compilation job information. +type JobInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the job running compilation. + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + // Cell in which the job is running. + Cell *string `protobuf:"bytes,2,opt,name=cell,proto3,oneof" json:"cell,omitempty"` + // User running the job. + User *string `protobuf:"bytes,3,opt,name=user,proto3,oneof" json:"user,omitempty"` + // Unique id when combined with user and cell field. + Uid *int64 `protobuf:"varint,4,opt,name=uid,proto3,oneof" json:"uid,omitempty"` + // Task index, which will not change across job restarts. + TaskId *int64 `protobuf:"varint,5,opt,name=task_id,json=taskId,proto3,oneof" json:"task_id,omitempty"` + // Task unique id, which may change across job restarts. + TaskUid *int64 `protobuf:"varint,6,opt,name=task_uid,json=taskUid,proto3,oneof" json:"task_uid,omitempty"` +} + +func (x *JobInfo) Reset() { + *x = JobInfo{} + mi := &file_xla_service_metrics_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobInfo) ProtoMessage() {} + +func (x *JobInfo) ProtoReflect() protoreflect.Message { + mi := &file_xla_service_metrics_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 JobInfo.ProtoReflect.Descriptor instead. +func (*JobInfo) Descriptor() ([]byte, []int) { + return file_xla_service_metrics_proto_rawDescGZIP(), []int{2} +} + +func (x *JobInfo) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *JobInfo) GetCell() string { + if x != nil && x.Cell != nil { + return *x.Cell + } + return "" +} + +func (x *JobInfo) GetUser() string { + if x != nil && x.User != nil { + return *x.User + } + return "" +} + +func (x *JobInfo) GetUid() int64 { + if x != nil && x.Uid != nil { + return *x.Uid + } + return 0 +} + +func (x *JobInfo) GetTaskId() int64 { + if x != nil && x.TaskId != nil { + return *x.TaskId + } + return 0 +} + +func (x *JobInfo) GetTaskUid() int64 { + if x != nil && x.TaskUid != nil { + return *x.TaskUid + } + return 0 +} + +// Defines XLA compilation metrics. +type CompilationLogEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Time when the event captured by this log entry occurred. + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Compilation stage recorded by this log entry. + Stage CompilationLogEntry_CompilationStage `protobuf:"varint,2,opt,name=stage,proto3,enum=xla.CompilationLogEntry_CompilationStage" json:"stage,omitempty"` + // Duration of the given compilation stage. + Duration *durationpb.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + // Task index from which this log entry was recorded or + // -1 if the task index could not be fetched. In the case task_index is not + // equal to -1, it is guaranteed to match the task_id in job_info. + TaskIndex int32 `protobuf:"varint,4,opt,name=task_index,json=taskIndex,proto3" json:"task_index,omitempty"` + // Pass specific metrics. + PassMetrics []*PassMetrics `protobuf:"bytes,5,rep,name=pass_metrics,json=passMetrics,proto3" json:"pass_metrics,omitempty"` + // IDs of modules on which the compilation stage was run. + ModuleIds []uint64 `protobuf:"varint,6,rep,packed,name=module_ids,json=moduleIds,proto3" json:"module_ids,omitempty"` + // Job information. + JobInfo *JobInfo `protobuf:"bytes,7,opt,name=job_info,json=jobInfo,proto3" json:"job_info,omitempty"` +} + +func (x *CompilationLogEntry) Reset() { + *x = CompilationLogEntry{} + mi := &file_xla_service_metrics_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CompilationLogEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompilationLogEntry) ProtoMessage() {} + +func (x *CompilationLogEntry) ProtoReflect() protoreflect.Message { + mi := &file_xla_service_metrics_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 CompilationLogEntry.ProtoReflect.Descriptor instead. +func (*CompilationLogEntry) Descriptor() ([]byte, []int) { + return file_xla_service_metrics_proto_rawDescGZIP(), []int{3} +} + +func (x *CompilationLogEntry) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *CompilationLogEntry) GetStage() CompilationLogEntry_CompilationStage { + if x != nil { + return x.Stage + } + return CompilationLogEntry_UNSPECIFIED +} + +func (x *CompilationLogEntry) GetDuration() *durationpb.Duration { + if x != nil { + return x.Duration + } + return nil +} + +func (x *CompilationLogEntry) GetTaskIndex() int32 { + if x != nil { + return x.TaskIndex + } + return 0 +} + +func (x *CompilationLogEntry) GetPassMetrics() []*PassMetrics { + if x != nil { + return x.PassMetrics + } + return nil +} + +func (x *CompilationLogEntry) GetModuleIds() []uint64 { + if x != nil { + return x.ModuleIds + } + return nil +} + +func (x *CompilationLogEntry) GetJobInfo() *JobInfo { + if x != nil { + return x.JobInfo + } + return nil +} + +var File_xla_service_metrics_proto protoreflect.FileDescriptor + +var file_xla_service_metrics_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x78, 0x6c, 0x61, + 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, 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, 0x38, 0x0a, 0x0e, + 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x22, 0xf8, 0x01, 0x0a, 0x0b, 0x50, 0x61, 0x73, 0x73, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x3e, 0x0a, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3b, 0x0a, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x04, 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, 0x0d, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x32, 0x0a, + 0x0a, 0x6b, 0x76, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x6b, 0x76, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x63, 0x65, 0x6c, 0x6c, 0x88, 0x01, 0x01, 0x12, + 0x17, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x03, 0x75, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x1c, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x48, 0x04, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, + 0x08, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x05, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x55, 0x69, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, + 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x42, + 0x07, 0x0a, 0x05, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x75, 0x69, 0x64, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x75, 0x69, 0x64, 0x22, 0xd1, 0x03, 0x0a, 0x13, 0x43, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 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, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x08, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x33, 0x0a, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, + 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4a, + 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0x6c, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x45, + 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x4c, 0x4f, 0x5f, 0x50, 0x41, 0x53, 0x53, + 0x45, 0x53, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x47, 0x45, 0x4e, + 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, 0x43, + 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x45, 0x53, 0x10, 0x04, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_xla_service_metrics_proto_rawDescOnce sync.Once + file_xla_service_metrics_proto_rawDescData = file_xla_service_metrics_proto_rawDesc +) + +func file_xla_service_metrics_proto_rawDescGZIP() []byte { + file_xla_service_metrics_proto_rawDescOnce.Do(func() { + file_xla_service_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_xla_service_metrics_proto_rawDescData) + }) + return file_xla_service_metrics_proto_rawDescData +} + +var file_xla_service_metrics_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_xla_service_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_xla_service_metrics_proto_goTypes = []any{ + (CompilationLogEntry_CompilationStage)(0), // 0: xla.CompilationLogEntry.CompilationStage + (*KeyValueMetric)(nil), // 1: xla.KeyValueMetric + (*PassMetrics)(nil), // 2: xla.PassMetrics + (*JobInfo)(nil), // 3: xla.JobInfo + (*CompilationLogEntry)(nil), // 4: xla.CompilationLogEntry + (*durationpb.Duration)(nil), // 5: google.protobuf.Duration + (*anypb.Any)(nil), // 6: google.protobuf.Any + (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp +} +var file_xla_service_metrics_proto_depIdxs = []int32{ + 5, // 0: xla.PassMetrics.pass_duration:type_name -> google.protobuf.Duration + 6, // 1: xla.PassMetrics.custom_metrics:type_name -> google.protobuf.Any + 1, // 2: xla.PassMetrics.kv_metrics:type_name -> xla.KeyValueMetric + 7, // 3: xla.CompilationLogEntry.timestamp:type_name -> google.protobuf.Timestamp + 0, // 4: xla.CompilationLogEntry.stage:type_name -> xla.CompilationLogEntry.CompilationStage + 5, // 5: xla.CompilationLogEntry.duration:type_name -> google.protobuf.Duration + 2, // 6: xla.CompilationLogEntry.pass_metrics:type_name -> xla.PassMetrics + 3, // 7: xla.CompilationLogEntry.job_info:type_name -> xla.JobInfo + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_xla_service_metrics_proto_init() } +func file_xla_service_metrics_proto_init() { + if File_xla_service_metrics_proto != nil { + return + } + file_xla_service_metrics_proto_msgTypes[2].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_xla_service_metrics_proto_rawDesc, + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_xla_service_metrics_proto_goTypes, + DependencyIndexes: file_xla_service_metrics_proto_depIdxs, + EnumInfos: file_xla_service_metrics_proto_enumTypes, + MessageInfos: file_xla_service_metrics_proto_msgTypes, + }.Build() + File_xla_service_metrics_proto = out.File + file_xla_service_metrics_proto_rawDesc = nil + file_xla_service_metrics_proto_goTypes = nil + file_xla_service_metrics_proto_depIdxs = nil +} diff --git a/protos/xla.proto b/protos/xla.proto new file mode 100644 index 0000000..6ab37cf --- /dev/null +++ b/protos/xla.proto @@ -0,0 +1,1293 @@ +/* Copyright 2017 The OpenXLA Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +package xla; + +import "google/protobuf/any.proto"; +import "xla/service/hlo.proto"; +import "xla/xla_data.proto"; + +// Proto version of `xla::CompilationEnvironments`. +message CompilationEnvironmentsProto { + repeated google.protobuf.Any environments = 1; +} + +// Debugging options for XLA. These options may change at any time - there are +// no guarantees about backward or forward compatibility for these fields. +// +// Debug options naming and organization: +// +// 1. Backend-agnostic options: `xla_$flag_name` - go first, and sorted +// alphabetically by the flag name. +// +// 2. Backend-specific options: `xla_$backend_$flag_name` - must be in the +// corresponding backend section, and sorted alphabetically by the flag name. +// +message DebugOptions { + //--------------------------------------------------------------------------// + // XLA backend-agnostic options. + //--------------------------------------------------------------------------// + // go/keep-sorted start + + // go/keep-sorted end + + //--------------------------------------------------------------------------// + // XLA:CPU options. + //--------------------------------------------------------------------------// + // go/keep-sorted start newline_separated=yes skip_lines=1 + + // Use region analysis in copy insertion pass. + bool xla_cpu_copy_insertion_use_region_analysis = 337; + + // When true, XLA:CPU uses HLO module scheduler that is optimized for + // extracting concurrency at the cost of extra memory: we extend the live + // ranges of temporaries to allow XLA runtime to schedule independent + // operations in parallel on separate threads. + bool xla_cpu_enable_concurrency_optimized_scheduler = 307; + + // When true, "unsafe" mathematical optimizations are enabled. These + // transformations include but are not limited to: + // + // - Reducing the precision of operations (e.g. using an approximate sin + // function, or transforming x/y into x * (1/y)). + // - Assuming that operations never produce or consume NaN or +/- Inf (this + // behavior can be adjusted using xla_cpu_fast_math_allow_{nans|infs}). + // - Assuming that +0 and -0 are indistinguishable. + bool xla_cpu_enable_fast_math = 99; + + // When false we lower the Minimum and Maximum hlos in the CPU backend such + // that Min(NotNaN, NaN) = Min(NaN, NotNaN) = NaN. In other words, if flag + // this is false we always propagate NaNs through Min and Max. + // + // Note, this does not correspond to the exact same behavior as the gpu flag + // below! + bool xla_cpu_enable_fast_min_max = 140; + + // When xla_cpu_enable_fast_math is true then this controls whether we forbid + // to use the reciprocal of an argument instead of division. Ignored when + // xla_cpu_enable_fast_math is false. + bool xla_cpu_fast_math_honor_division = 126; + + // When xla_cpu_enable_fast_math is true then this controls whether we forbid + // to approximate calculations for functions. Ignored when + // xla_cpu_enable_fast_math is false. + bool xla_cpu_fast_math_honor_functions = 129; + + // When xla_cpu_enable_fast_math is true then this controls whether we allow + // operations to produce infinites. Ignored when xla_cpu_enable_fast_math is + // false. + bool xla_cpu_fast_math_honor_infs = 121; + + // When xla_cpu_enable_fast_math is true then this controls whether we allow + // operations to produce NaNs. Ignored when xla_cpu_enable_fast_math is + // false. + bool xla_cpu_fast_math_honor_nans = 120; + + // When true, XLA:CPU uses the thunk runtime to execute compiled program. + bool xla_cpu_use_thunk_runtime = 298; + + // Enabling this will enable optimizations that ignore the possibility of NaN. + bool xla_enable_fast_math = 335; + + // The number of parts to split the LLVM module into before codegen. This + // allows XLA to compile all parts in parallel, and resolve kernel symbols + // from different dynamic libraries. + int32 xla_cpu_parallel_codegen_split_count = 323; + + // A `prefer-vector-width` value that is passed to the LLVM backend. Default + // value is `256` (AVX2 on x86 platforms). + int32 xla_cpu_prefer_vector_width = 308; + + // When set, XLA:CPU will only generate code up to the specified ISA. + // (It will not use newer ISAs.) Using the string format allows us to extend + // the flag for more flexible control if necessary. + string xla_cpu_max_isa = 333; + + // go/keep-sorted end + + //--------------------------------------------------------------------------// + // XLA:GPU options. + //--------------------------------------------------------------------------// + // go/keep-sorted start newline_separated=yes skip_lines=1 + + // Specifies the behavior of per kernel autotuning cache. + AutotuneCacheMode xla_gpu_experimental_autotune_cache_mode = 324; + + // Experimentally disables binary libraries in GPU compiler passes. + bool xla_gpu_experimental_disable_binary_libraries = 329; + + // Dump FDO profiles in a binary format to a separate file. + bool xla_gpu_experimental_dump_fdo_profiles = 338; + + // Enabling this flag will attempt to redirect every already-constructed + // fusion possible to the Triton emitter. + // + // For example, a fusion with kind kLoop will be transformed to a fusion with + // kind kCustom (and underlying kTritonFusionKind) if it can be tiled + // correctly, and if all the instructions it contains are supported by XLA's + // Triton emitter. Tile sizes are assigned automatically. + // + // Pre-existing block-level fusions are left unmodified. + bool xla_gpu_experimental_enable_fusion_block_level_rewriter = 334; + + // When enabled, the PriorityFusion pass will try to make Triton fusions first + // and foremost where it is possible. + // + // A kCustom fusion with underlying kTritonFusionKind will be created if it + // can be tiled correctly, and if all the instructions it contains are + // supported by XLA's Triton emitter. Tile sizes are assigned automatically. + bool xla_gpu_experimental_enable_triton_heroless_priority_fusion = 340; + + // Gates the experimental feature coupling the Triton Softmax pattern matcher + // with priority fusion. + bool xla_gpu_experimental_enable_triton_softmax_priority_fusion = 325; + + // Internal debug/testing flag to switch Triton GEMM fusions on or off. + bool xla_gpu_unsupported_enable_triton_gemm = 322; + + // go/keep-sorted end + + //--------------------------------------------------------------------------// + // XLA:TPU options. + //--------------------------------------------------------------------------// + // go/keep-sorted start + + // go/keep-sorted end + + //--------------------------------------------------------------------------// + // A bag of XLA options that have to be categorized. + //--------------------------------------------------------------------------// + + // Show addresses of HLO ops in graph dump. + bool xla_hlo_graph_addresses = 2; + + // Instrument the computation to collect per-HLO cycle counts. + bool xla_hlo_profile = 9; + + // List of HLO passes to disable/enable. These names must exactly match the + // pass names as specified by the HloPassInterface::name() method. + // + // At least one of xla_disable_hlo_passes and xla_enable_hlo_passes_only must + // be empty. + repeated string xla_disable_hlo_passes = 30; + repeated string xla_enable_hlo_passes_only = 124; + + // Disables all HLO passes. Notes that some passes are necessary for + // correctness and the invariants that must be satisfied by "fully optimized" + // HLO are different for different devices and may change over time. The only + // "guarantee", such as it is, is that if you compile XLA and dump the + // optimized HLO for some graph, you should be able to run it again on the + // same device with the same build of XLA. + bool xla_disable_all_hlo_passes = 104; + + // Numerical optimization level for the XLA compiler backend; the specific + // interpretation of this value is left to the backends. + int32 xla_backend_optimization_level = 31; + + // Embed the compiler IR as a string in the executable. + bool xla_embed_ir_in_executable = 33; + + // Eliminate implicit broadcasts when lowering user computations to HLO + // instructions; use explicit broadcast instead. + bool xla_eliminate_hlo_implicit_broadcast = 35; + + // When generating calls to Eigen in the CPU backend, use multi-threaded Eigen + // mode. + bool xla_cpu_multi_thread_eigen = 60; + + // Path to directory with cuda/ptx tools and libraries. + string xla_gpu_cuda_data_dir = 61; + + // Enable flush-to-zero semantics in the GPU backend. + bool xla_gpu_ftz = 62; + + reserved 63; // Was xla_gpu_disable_multi_streaming + reserved 134; // Was xla_gpu_use_random_streams + + // If true, in LLVM-based backends, emit !alias.scope metadata in + // generated IR. + bool xla_llvm_enable_alias_scope_metadata = 70; + + // If true, in LLVM-based backends, emit !noalias metadata in the + // generated IR. + bool xla_llvm_enable_noalias_metadata = 71; + + // If true, in LLVM-based backends, emit !invariant.load metadata in + // the generated IR. + bool xla_llvm_enable_invariant_load_metadata = 72; + + // If true, a set of expensive LLVM optimization passes will not be run. + bool xla_llvm_disable_expensive_passes = 73; + + reserved 80; // Was hlo_reduce_precision_options + + // This is used by ClientLibraryTestBase::ComputeAndCompare*. If true, the + // computation will run n! times with all permunations of layouts for the + // output shape in rank n. For example, with a 3D shape, all permutations of + // the set {0, 1, 2} are tried. + bool xla_test_all_output_layouts = 90; + + // This is used by ClientLibraryTestBase::ComputeAndCompare*. If true, the + // computation will run for all permunations of layouts of all input + // arguments. For example, with 2 input arguments in 2D and 4D shapes, the + // computation will run 2! * 4! times. + bool xla_test_all_input_layouts = 91; + + // Assign colors based on sharding information when generating the Graphviz + // HLO graph. + bool xla_hlo_graph_sharding_color = 92; + + reserved 93; // Was xla_hlo_tfgraph_device_scopes + reserved 94; // Was xla_gpu_use_cudnn_batchnorm + + // Generate calls to MKL-DNN in the CPU backend. + bool xla_cpu_use_mkl_dnn = 97; + + reserved 177; // Was xla_cpu_use_xla_runtime + + reserved 98; // Was xla_gpu_max_kernel_unroll_factor + + // When true we lower the Minimum and Maximum hlos in the GPU backend such + // that Min(NotNaN, NaN) = Min(NaN, NotNaN) = NotNaN. In other words, if flag + // this is true we don't propagate NaNs through Min and Max. + // + // Note, this does not correspond to the exact same behavior as the cpu flag + // above! + bool xla_gpu_enable_fast_min_max = 100; + + reserved 207; // Was xla_cpu_sparse_cuda_threads + + // Allows xla to increase the output precision of floating point operations + // and all floating-point conversions to be simplified, including those + // that affect the numerics. The `FloatNormalization` pass inserts many + // `f32 -> bf16 -> f32` conversion pairs. These are not removed by the + // `AlgebraicSimplifier`, as that will only simplify conversions that are + // no-ops, e.g. `bf16 -> f32 -> bf16`. Removing these improves accuracy. + bool xla_allow_excess_precision = 122; + + // Crashes the program when any kind of verification fails, instead of just + // logging the failures. One example is cross checking of convolution results + // among different algorithms. + bool xla_gpu_crash_on_verification_failures = 101; + + // 0: Disable gemm and convolution autotuning. + // 1: Enable autotuning, but disable correctness checking. + // 2: Also set output buffers to random numbers during autotuning. + // 3: Also reset output buffers to random numbers after autotuning each + // algorithm. + // 4+: Also check for correct outputs and for out-of-bounds reads/writes. + // + // Default: 4. + int32 xla_gpu_autotune_level = 123; + + // Force the host platform to pretend that there are these many host + // "devices". All these devices are backed by the same threadpool. Defaults + // to 1. + // + // Setting this to anything other than 1 can increase overhead from context + // switching but we let the user override this behavior to help run tests on + // the host that run models in parallel across multiple devices. + int32 xla_force_host_platform_device_count = 102; + + // If set to true XLA:GPU invokes `ptxas` with -O0 (default is -O3). + bool xla_gpu_disable_gpuasm_optimizations = 103; + + enum ShapeChecks { + // Do not insert any shape checks for dynamically shaped operations; output + // buffers might contain garbage data if shapes don't match. + IGNORE = 0; + + // Check shapes at runtime, will insert an extra synchronization if shapes + // cannot be proven correct at compile time. + RUNTIME = 1; + + // Will refuse to compile any program where shape correctness can not be + // established at compile time. + COMPILE_TIME = 2; + } + + ShapeChecks xla_gpu_shape_checks = 170; + + reserved 171; // Was xla_cpu_enable_mlir_lowering + + reserved 173; // Was xla_gpu_enable_mlir_lowering + + reserved 179; // Was xla_gpu_enable_softmax_fusion + + // Enable fast math with eigen in the HLO evaluator. + bool xla_hlo_evaluator_use_fast_path = 106; + + // Temporary option to allow support for both the R1 and the scalar index + // versions of DynamicSlice and DynamicUpdateSlice. Only used for testing. + bool xla_allow_scalar_index_dynamic_ops = 107; + + enum StepMarkerLocation { + // Generate a step marker at the program entry. This handles the case where + // each step is done by one or multiple program execution(s). Only the first + // program will be tagged for generating a step marker at the program entry. + // This is the default. + STEP_MARK_AT_ENTRY = 0; + // Generate a step marker at each iteration of the top level while loop, + // which is assumed to be a training loop. + STEP_MARK_AT_TOP_LEVEL_WHILE_LOOP = 1; + // Generate a step marker at each iteration of the second level while loops, + // which is assumed to be a training or eval loop. + STEP_MARK_AT_SECOND_LEVEL_WHILE_LOOP = 3; + // No step marker generated. + STEP_MARK_NONE = 2; + } + // Option to emit a target-specific marker to indicate the start of a training + // step. The location of the marker (if any) is determined by the option + // value. + StepMarkerLocation xla_step_marker_location = 108; + + // + // BEGIN flags controlling dumping HLO modules for debugging. + // + // When dumping is enabled, HLO modules dumped at the very beginning and end + // of compilation, and optionally also during the pass pipeline. + // + // In general, if you set one of these flags, we will try to infer reasonable + // defaults for the others. For example: + // + // * Setting --xla_dump_to=/tmp/foo without specifying a format + // with --xla_dump_hlo_as_* will turn on --xla_dump_hlo_as_text. + // + // * Setting --xla_dump_hlo_as_text without specifying --xla_dump_to will + // dump to stdout. + // + + // Directory to dump into. + string xla_dump_to = 109; + + // If specified, will only dump modules which match this regexp. + string xla_dump_hlo_module_re = 110; + + // If this flag is specified, will also dump HLO before and after passes that + // match this regular expression. Set to .* to dump before/after all passes. + string xla_dump_hlo_pass_re = 111; + + // Specifies the format that HLO is dumped in. Multiple of these may be + // specified. + bool xla_dump_hlo_as_text = 112; + bool xla_dump_hlo_as_proto = 113; + bool xla_dump_hlo_as_dot = 114; + bool xla_dump_hlo_as_url = 115; + + // Dump HLO graphs as an HTML (DOT -> SVG inlined in HTML) + bool xla_dump_hlo_as_html = 116; + + // Dump the visualization of the fusion progress. + bool xla_dump_fusion_visualization = 149; + + // If true, every time an HLO module is run, we will dump an HloSnapshot + // (essentially, a serialized module plus its inputs) to the --xla_dump_to + // directory. + bool xla_dump_hlo_snapshots = 118; + + // Include a timestamp in the dumped filenames. + bool xla_dump_include_timestamp = 131; + + // Max number of hlo module dumps in a directory. Set to < 0 for unbounded. + int32 xla_dump_max_hlo_modules = 132; + + // Dump HloModuleMetadata as a text proto for each HLO module. + bool xla_dump_module_metadata = 144; + + // GZip-compress protos dumped via --xla_dump_hlo_as_proto. + bool xla_dump_compress_protos = 151; + + // Dump HLO in long text format. Ignored unless xla_dump_hlo_as_text is true. + bool xla_dump_hlo_as_long_text = 164; + + // + // END flags controlling dumping HLO modules. + // + + // Overrides for XLA GPU's convolution layout heuristic. + bool xla_gpu_force_conv_nchw = 125; + bool xla_gpu_force_conv_nhwc = 146; + + // Paths to files with ptx code. + repeated string xla_gpu_ptx_file = 127; + + // Whether to dump llvm ir when compiling to ptx. + bool xla_gpu_dump_llvmir = 155; + + // Whether to dump mlir using pretty print form. + bool xla_dump_enable_mlir_pretty_form = 185; + + // Denylist for cuDNN convolutions. + string xla_gpu_algorithm_denylist_path = 128; + + reserved 130; // Was xla_gpu_deterministic_reductions + + // Debug options that trigger execution errors when NaN or Inf are detected. + bool xla_tpu_detect_nan = 135; + bool xla_tpu_detect_inf = 136; + + // True if TraceMe annotations are enabled for XLA:CPU. + bool xla_cpu_enable_xprof_traceme = 137; + + // It is usually preferable to not fallback to the driver; it can consume more + // memory, or have bugs. + bool xla_gpu_unsafe_fallback_to_driver_on_ptxas_not_found = 138; + + // Extra parameters to pass the GPU assembler. + string xla_gpu_asm_extra_flags = 141; + + // Per-heap size constraint. New heaps will be created if per-heap max size is + // reached. + int32 xla_multiheap_size_constraint_per_heap = 142; + + reserved 143; // Was xla_detailed_logging_and_dumping + + // Enable detailed logging into vlog. If this is disabled, no + // compilation summary will be printed in the end of computation. + bool xla_detailed_logging = 252; + + // Enable HLO dumping. If this is disabled, no HLO modules will be dumped. + bool xla_enable_dumping = 253; + + // Overrides normal multi-threaded compilation setting to use this many + // threads. Setting to 0 (the default value) means no enforcement. + int32 xla_gpu_force_compilation_parallelism = 147; + bool xla_gpu_enable_llvm_module_compilation_parallelism = 268; + + // Guarantees run-to-run determinism. + // This flag implies --xla_gpu_exclude_nondeterministic_ops and in addition + // disables autotuning. + bool xla_gpu_deterministic_ops = 148; + + // Paths to files with LLVM code. + repeated string xla_gpu_llvm_ir_file = 150; + + // Enum to define all collective ops + // that xla supports. + enum CollectiveOpType { + NOOP = 0; + ALLREDUCE = 1; + ALLGATHER = 2; + REDUCESCATTER = 3; + COLLECTIVEBROADCAST = 4; + ALLTOALL = 5; + COLLECTIVEPERMUTE = 6; + } + + repeated CollectiveOpType xla_gpu_disable_async_collectives = 289; + + // Used to be xla_gpu_enable_async_all_reduce + // xla_gpu_enable_async_collective_broadcast + // xla_gpu_enable_async_collective_permute + // xla_gpu_enable_async_all_gather + // xla_gpu_enable_async_reduce_scatter + // xla_gpu_enable_async_all_to_all + // xla_gpu_enable_async_collectives + reserved 152, 278, 183, 199, 200, 201, 238; + + // Size threshold (in bytes) for the GPU collective combiners. + int64 xla_gpu_all_reduce_combine_threshold_bytes = 157; + int64 xla_gpu_all_gather_combine_threshold_bytes = 212; + int64 xla_gpu_reduce_scatter_combine_threshold_bytes = 213; + + // Combine all-gather/scatter-reduce ops with the same dimension or + // irrespective of their dimension. + bool xla_gpu_enable_all_gather_combine_by_dim = 254; + bool xla_gpu_enable_reduce_scatter_combine_by_dim = 257; + + // Was xla_gpu_all_reduce_contiguous, xla_gpu_enable_all_reduce_splitter + reserved 158, 299; + + // Enable allreduce reassociation on allreduces that are converted to a wider + // type. The resulting allreduce will be promoted to a wider-typed allreduce. + bool xla_gpu_enable_reassociation_for_converted_ar = 209; + + // Number of devices per host for first stage of BlueConnect decomposition + // pass. The pass will attempt to decompose all-reduces ops into a + // ReduceScatter-AllReduce-AllGather sequence, with the initial ReduceScatter + // being performed over all of the devices in the same host. Set to < 1 to + // disable all-reduce decomposition. + int32 xla_gpu_all_reduce_blueconnect_num_devices_per_host = 159; + + // Enable hoisting of reduce-scatter out of while loops. + bool xla_gpu_enable_while_loop_reduce_scatter_code_motion = 203; + + // Inflate collective cost by running each collective multiple times. + int32 xla_gpu_collective_inflation_factor = 205; + + // Whether to force inline before llvm module split to get a more balanced + // splits for parallel compilation. + bool xla_llvm_force_inline_before_split = 300; + + // Whether to use the cuDNN frontend API for convolutions when possible. + bool xla_gpu_enable_cudnn_frontend = 160; + + bool xla_gpu_enable_cudnn_fmha = 218; + bool xla_gpu_fused_attention_use_cudnn_rng = 235; + + // Rewrite layer norm patterns into cuDNN library calls. + bool xla_gpu_enable_cudnn_layer_norm = 262; + + // Disable dumping metadata in HLO dumps. + bool xla_dump_disable_metadata = 153; + + // If this flag is specified, will only dump HLO before and after passes in + // the pass pipeline that matches this regular expression. Default empty value + // enables dumping in all pipelines. + string xla_dump_hlo_pipeline_re = 154; + + // If true, abort immediately when conv algorithm picker fails, rather than + // logging a warning and proceeding with fallback. + bool xla_gpu_strict_conv_algorithm_picker = 156; + + reserved 161; // Was xla_gpu_bef_executable + reserved 162; // Was xla_gpu_bef_thunk + + reserved 169; // Was xla_gpu_enable_xla_runtime_executable + + // If true, XLA will try to pattern match subgraphs of HLO operations into + // custom fusions registered in the current process (pre-compiled hand written + // kernels, e.g. various GEMM fusions writtent in CUTLASS). + bool xla_gpu_enable_custom_fusions = 263; + + // A regular expression enabling only a subset of custom fusions. Enabled only + // if `xla_gpu_enable_custom_fusion` set to true. + string xla_gpu_enable_custom_fusions_re = 264; + + // Enables address computation fusion to optimize dynamic-slice and + // dynamic-update-slice operations around library calls. + bool xla_gpu_enable_dynamic_slice_fusion = 105; + + reserved 233; // was xla_gpu_enable_gpu2_runtime + reserved 234; // was xla_gpu_enable_gpu2_hal + + // Timeout in seconds before terminating jobs that are stuck in a NCCL + // Rendezvous. Negative value disables the timeout and will not terminate. + int64 xla_gpu_nccl_termination_timeout_seconds = 163; + + // Enables shared constants for XLA/GPU. This allows large constants to be + // shared among multiple GPU executables. + bool xla_gpu_enable_shared_constants = 165; + + // Whether to use cuBLASLt for GEMMs on GPUs. + bool xla_gpu_enable_cublaslt = 166; + + // Commands are categorized into 5 types: + // FUSION represents regular fusion kernels. + // CUBLAS/CUBLASLT, CUDNN, and COLLECTIVES represent library calls. + // CONDITIONALS represents control flow. + enum CommandBufferCmdType { + INVALID = 0; + FUSION = 1; + CUBLAS = 2; + CUDNN = 3; + COLLECTIVES = 4; + CONDITIONALS = 5; + CUSTOM_CALL = 6; + CUBLASLT = 7; + DYNAMIC_SLICE = 8; + } + + // Determine the types of commands that are recorded into command buffers. + repeated CommandBufferCmdType xla_gpu_enable_command_buffer = 258; + + reserved 202; // Was xla_gpu_graph_num_runs_to_instantiate + + // This number determines how many moved instructions like fusion kernels are + // required for a region to be captured as a function to be launched as a GPU + // graph. + int32 xla_gpu_graph_min_graph_size = 208; + + // Identify concurrent regions in GPU graphs and execute them concurrently. + bool xla_gpu_graph_enable_concurrent_region = 215; + + reserved 230; // Was xla_gpu_graph_eviction_timeout_seconds + + // Size threshold (in megabytes) for the GPU redzone scratch allocator. + int64 xla_gpu_redzone_scratch_max_megabytes = 167; + + // Amount of padding the redzone allocator will put on one side of each buffer + // it allocates. (So the buffer's total size will be increased by 2x this + // value.) + // + // Higher values make it more likely that we'll catch an out-of-bounds read or + // write. Smaller values consume less memory during autotuning. Note that a + // fused cudnn conv has up to 6 total buffers (4 inputs, 1 output, and 1 + // scratch), so this can be multiplied by quite a lot. + int64 xla_gpu_redzone_padding_bytes = 228; + + reserved 168; // Was xla_gpu_simplify_all_fp_conversions. + + reserved 172; // Was xla_gpu_normalize_layouts. + + // Generate calls to Arm Compute Library in the CPU backend. + bool xla_cpu_use_acl = 174; + + // By default, XLA:CPU will run fp16 dot/conv as fp32, as this is generally + // (much) faster on our hardware. Set this flag to disable this behavior. + bool xla_cpu_strict_dot_conv_math = 175; + + // An option to enable using cuDNN runtime compiled fusion kernels which is + // available and recommended for Ampere+ GPUs. + bool xla_gpu_use_runtime_fusion = 181; + + bool xla_dump_latency_hiding_schedule = 182; + + // By default, MLIR lowering will use Linalg elementwise fusion. If this flag + // is enabled, the pipeline will use tiling, fusion, peeling, vectorization + // instead. + bool xla_cpu_enable_mlir_tiling_and_fusion = 184; + + // XLA:CPU-Next tiling parameters for matmul. + bool xla_cpu_enable_custom_matmul_tiling = 195; + int64 xla_cpu_matmul_tiling_m_dim = 196; + int64 xla_cpu_matmul_tiling_n_dim = 197; + int64 xla_cpu_matmul_tiling_k_dim = 198; + + bool xla_cpu_enable_mlir_fusion_outlining = 192; + + // If set, use the experimental deallocation pass from mlir-hlo. + bool xla_cpu_enable_experimental_deallocation = 191; + + bool xla_gpu_enable_latency_hiding_scheduler = 186; + bool xla_gpu_enable_highest_priority_async_stream = 216; + bool xla_gpu_enable_analytical_latency_estimator = 255; + + bool xla_gpu_lhs_enable_gpu_async_tracker = 204; + string xla_gpu_pgle_profile_file_or_directory_path = 210; + int32 xla_gpu_memory_limit_slop_factor = 260; + + bool xla_gpu_enable_pipelined_collectives = 239; + bool xla_gpu_enable_pipelined_all_reduce = 217; + bool xla_gpu_enable_pipelined_all_gather = 227; + bool xla_gpu_enable_pipelined_reduce_scatter = 231; + bool xla_gpu_enable_pipelined_p2p = 246; + + reserved 313; // Was xla_gpu_run_post_layout_collective_pipeliner. + + // The minimum data size in bytes to trigger collective-permute-decomposer + // transformation. + int64 xla_gpu_collective_permute_decomposer_threshold = 237; + + enum PartitioningAlgorithm { + PARTITIONING_ALGORITHM_NOOP = 0; + PARTITIONING_ALGORITHM_EXP0 = 1; + PARTITIONING_ALGORITHM_EXP1 = 2; + PARTITIONING_ALGORITHM_EXP2 = 3; + } + // The partitioning algorithm to be used in the PartitionAssignment pass. + PartitioningAlgorithm xla_partitioning_algorithm = 187; + + bool xla_gpu_enable_triton_gemm = 188; + + bool xla_gpu_enable_cudnn_int8x32_convolution_reordering = 189; + + // Creates triton fusion for all supported gemms. + // To make sure only triton gemm is chosen by the autotuner run with + // `xla_gpu_cublas_fallback` set to false. + bool xla_gpu_triton_gemm_any = 190; + + reserved 211; // Was xla_gpu_enable_dot_strength_reduction + + bool xla_gpu_exhaustive_tiling_search = 219; + + reserved 220; // Was xla_gpu_enable_triton_softmax_fusion + + reserved 286; // Was xla_gpu_enable_triton_softmax_priority_fusion + + // File to write autotune results to. It will be a binary file unless the name + // ends with .txt or .textproto. Warning: The results are written at every + // compilation, possibly multiple times per process. This only works on CUDA. + string xla_gpu_dump_autotune_results_to = 222; + + // File to load autotune results from. It will be considered a binary file + // unless the name ends with .txt or .textproto. At most one loading will + // happen during the lifetime of one process, even if the first one is + // unsuccessful or different file paths are passed here. This only works on + // CUDA. + string xla_gpu_load_autotune_results_from = 223; + + // Description of the target platform in GpuTargetConfigProto format; if + // provided, deviceless compilation is assumed, and the current device is + // ignored. + string xla_gpu_target_config_filename = 261; + + // Memory budget in GB per device for AutoSharding. + int32 xla_gpu_auto_spmd_partitioning_memory_budget_gb = 224; + + // See the definition of the + // xla_gpu_auto_spmd_partitioning_memory_budget_ratio flag for the meaning of + // this field. + float xla_gpu_auto_spmd_partitioning_memory_budget_ratio = 225; + + bool xla_gpu_triton_gemm_disable_reduced_precision_reduction = 226; + + int32 xla_gpu_triton_fusion_level = 229; + + bool xla_gpu_dump_autotuned_gemm_fusions = 232; + + string xla_gpu_override_gemm_autotuner = 295; + + bool xla_gpu_copy_insertion_use_region_analysis = 236; + + // If true, each fusion instruction will have a cost model runtime estimate in + // backend config after compilation. + bool xla_gpu_collect_cost_model_stats = 240; + + bool xla_gpu_enable_split_k_autotuning = 241; + + // Whether reduction epilogue fusion is enabled in fusion passes. + bool xla_gpu_enable_reduction_epilogue_fusion = 243; + // Allow early return when acquiring NCCL cliques. + bool xla_gpu_enable_nccl_clique_optimization = 244; + + // Replace custom calls with noop operations. + bool xla_gpu_mock_custom_calls = 245; + + // Allow Triton GEMM autotuning to fall back to cuBLAS when that is + // faster. + bool xla_gpu_cublas_fallback = 247; + + // Enable double buffering for loops. + bool xla_gpu_enable_while_loop_double_buffering = 248; + + enum WhileLoopUnrolling { + WHILE_LOOP_UNROLLING_NO_UNROLL = 0; + // Has the same effect as setting + // `xla_gpu_enable_while_loop_double_buffering`. + WHILE_LOOP_UNROLLING_DOUBLE_BUFFER = 1; + // Enables full loop unrolling using the same strategy as `DOUBLE_BUFFER`. + WHILE_LOOP_UNROLLING_FULL_UNROLL = 2; + // Enables loop unrolling when we have at least one collective within a + // while loop. + WHILE_LOOP_UNROLLING_AUTO_UNROLL = 3; + } + + // Determine the while loop unrolling scheme. + WhileLoopUnrolling xla_gpu_enable_while_loop_unrolling = 294; + + // Change the layout of the second triton dot operand to be column major. + // Only works for (bf16 x bf16) -> bf16. + bool xla_gpu_ensure_minor_dot_contraction_dims = 249; + + // Filter out kernels that spill registers during autotuning. + bool xla_gpu_filter_kernels_spilling_registers_on_autotuning = 250; + + // Maximum number of buffers to print when debugging buffer assignment. + int64 xla_debug_buffer_assignment_show_max = 251; + + int32 xla_gpu_llvm_verification_level = 256; + + // Enable radix sort using CUB. + bool xla_gpu_enable_cub_radix_sort = 259; + + // Threshold to enable windowed einsum (collective matmul) in MB. + int64 xla_gpu_threshold_for_windowed_einsum_mib = 265; + + // Enables currently disabled features within Triton for Hopper. + bool xla_gpu_enable_triton_hopper = 266; + + // Enable NCCL user buffers. + bool xla_gpu_enable_nccl_user_buffers = 267; + + // Enable NCCL communicator splitting. + bool xla_gpu_enable_nccl_comm_splitting = 272; + + // Enable NCCL per stream communicators. + bool xla_gpu_enable_nccl_per_stream_comms = 276; + + // If enabled, uses the libnvptxcompiler library to compile PTX to cuBIN. + bool xla_gpu_enable_libnvptxcompiler = 269; + + bool xla_gpu_enable_dot_strength_reduction = 270; + // Whether to use multiple compute streams to run windowed einsum. + bool xla_gpu_multi_streamed_windowed_einsum = 280; + + bool xla_gpu_experimental_stream_annotation = 342; + + // If enabled, uses bf16_6way gemm to compute F32 gemm. + bool xla_gpu_enable_bf16_6way_gemm = 271; + + // If enabled, uses bf16_3way gemm to compute F32 gemm. + bool xla_gpu_enable_bf16_3way_gemm = 279; + + // Specify the maximum number of channels(SMs) NCCL + // will use for collective operations. + int64 xla_gpu_nccl_collective_max_nchannels = 273; + + // Specify the maximum number of channels(SMs) NCCL + // will use for p2p operations. + int64 xla_gpu_nccl_p2p_max_nchannels = 274; + + reserved 275; // was xla_gpu_enable_mlir_emitters + reserved 281; // was xla_gpu_max_mlir_kernels + reserved 282; // was xla_gpu_skip_mlir_kernels + reserved 303; // was xla_gpu_mlir_emitter_level + + // Threshold to rewrite matmul to cuBLAS or Triton (minimum combined number of + // elements of both matrices in non-batch dimensions to be considered for a + // rewrite). + int64 xla_gpu_gemm_rewrite_size_threshold = 283; + + // If true, will require complete AOT autotuning results; in the case of + // missing AOT result, the model will not be compiled or executed, a + // `NotFound` error will be returned. + bool xla_gpu_require_complete_aot_autotune_results = 284; + + // Let GEMM fusion autotuning probe cuDNN as a backend. + // Current levels: + // 0: Disabled. + // 1: Fusions of GEMM, elementwise, transpose/reshape operations. + // 2: + Broadcasts, slicing. + // 3: + Nontrivial noncontracting dimension reshapes/transposes. + int32 xla_gpu_cudnn_gemm_fusion_level = 285; + + // This instructs the runtime whether to use + // memcpy for p2p communication when source and + // target are located within a node(nvlink). + bool xla_gpu_use_memcpy_local_p2p = 287; + + // If non-zero, limits the number of solutions to be used by GEMM autotuner. + // This might be useful if underlying math library returns too many GEMM + // solutions. + int64 xla_gpu_autotune_max_solutions = 288; + + // If true, large constants will be printed out when dumping HLOs. + bool xla_dump_large_constants = 290; + + // If true, will verify that the numerical results of Triton fusions match + // the results of regular emitters. + bool xla_gpu_verify_triton_fusion_numerics = 291; + + // File to write autotune logs to. It will stored in txt format. + string xla_gpu_dump_autotune_logs_to = 292; + + // Base length to rewrite the reduce window to, no rewrite if set to 0. + int64 xla_reduce_window_rewrite_base_length = 293; + + // If true, will enable host memory offloading on a device. + bool xla_gpu_enable_host_memory_offloading = 296; + + // Excludes non-deterministic ops from compiled executables. + // Unlike --xla_gpu_deterministic_ops does not disable autotuning - the + // compilation itself can be non-deterministic. + // Scatter ops can non-deterministic by default; these get converted to + // a deterministic implementation. + bool xla_gpu_exclude_nondeterministic_ops = 297; + + // If true, Nccl errors will terminate the process. + bool xla_gpu_nccl_terminate_on_error = 301; + + reserved 302; // was xla_use_shardy + + bool xla_gpu_shard_autotuning = 304; + + bool xla_gpu_enable_approx_costly_collectives = 305; + + string xla_gpu_kernel_cache_file = 306; + + // Recognises rotate-right patterns (slice, slice, concat) within a while + // loop and labels the while loop as a pipelined while loop. This is an + // unsafe flag. + bool xla_gpu_unsafe_pipelined_loop_annotator = 309; + + string xla_gpu_per_fusion_autotune_cache_dir = 310; + + // The command buffer trace cache size, increasing the cache size may + // sometimes reduces the chances of doing command buffer tracing for + // updating command buffer instance. + int64 xla_cmd_buffer_trace_cache_size = 311; + + // Enable this flag will use a separate memory space color for + // temp buffer, and then will use separate memory allocator to allocate it, + // as there is no other memory allocation interference, + // it will allocate temp buffer to some fix address on every iteration, + // which is good for cuda-graph perf. + bool xla_gpu_temp_buffer_use_separate_color = 312; + + // Custom call targets with legacy registry API (non FFI API), + // that support recording to command buffer custom command, + // i.e., custom call target supports cuda-graph capturing for CUDA devices. + // This flag is read if CUSTOM_CALL command type is recorded into + // command buffer. + repeated string legacy_command_buffer_custom_call_targets = 314; + + // This flag is used for controlling HLO dumping and NVTX marker. If turned + // on, both HLO dumping and NVTX marker will use syntactic sugar wrappers + // as op names, while the actual op names will be shown if turned off. + // + // Here is an example HLO excerpt with the flag off: + // + // async_computation { + // param_0 = f32[1,4,8]{1,0,2} parameter(0) + // ROOT all-to-all.3.1 = f32[1,4,8]{1,0,2} all-to-all(param_0), + // replica_groups={{0,1,2,3,4,5,6,7}}, dimensions={2} + // } + // ... + // + // all-to-all-start = + // ((f32[1,4,8]{1,0,2}), f32[1,4,8]{1,0,2}) async-start(bitcast.24.0), + // calls=async_computation, backend_config={...} + // all-to-all-done = f32[1,4,8]{1,0,2} async-done(all-to-all-start) + // + // and with the flag on: + // + // all-to-all-start = ((f32[1,4,8]{1,0,2}), f32[1,4,8]{1,0,2}) + // all-to-all-start(bitcast.24.0), + // replica_groups={{0,1,2,3,4,5,6,7}}, dimensions={2}, + // backend_config={...} + // all-to-all-done = f32[1,4,8]{1,0,2} all-to-all-done(all-to-all-start) + bool xla_syntax_sugar_async_ops = 315; + + // Relative precision for comparing different GEMM solutions + float xla_gpu_autotune_gemm_rtol = 316; + + // Allow launching command buffers while profiling active. + // When disabled, execute in op-by-op mode. + // TODO(b/355487968): Remove this option when validation complete. + bool xla_enable_command_buffers_during_profiling = 317; + + // Limit for the number of kernel configurations (plans) to use during + // autotuning of cuDNN GEMM fusions. The more - the slower the autotuning + // but potentially higher the performance. + int32 xla_gpu_cudnn_gemm_max_plans = 318; + + // If enabled, uses the libnvjitlink library for PTX compilation and linking + bool xla_gpu_enable_libnvjitlink = 319; + + // If true, XLA will wrap `dot` operations into async computations in an + // effort to parallelize matrix operations. + bool xla_gpu_async_dot = 321; + + enum AutotuneCacheMode { + AUTOTUNE_CACHE_MODE_UNSPECIFIED = 0; + + // If the cache exists per fusion autotuner loads it and terminates, + // otherwise runs autotuner and dumps the result. + AUTOTUNE_CACHE_MODE_UPDATE = 1; + + // Sets readonly access to the cache for the per fusion autotuner. Same as + // above, but doesn't dump anything. + AUTOTUNE_CACHE_MODE_READ = 2; + } + + // Timeouts for RendezvousSingle stuck warning and termination. + int32 xla_gpu_executable_warn_stuck_timeout_seconds = 327; + int32 xla_gpu_executable_terminate_timeout_seconds = 328; + + // Whether to ignore channel ids(including verifier channel id checks) + // for collectives in the given HLO. + bool xla_experimental_ignore_channel_id = 330; + + // DotMerger pass threshold size to be used in MB. + int32 xla_gpu_dot_merger_threshold_mb = 331; + + // If enabled, in the absence of user provided knobs might tune pass + // configurations based on the HLO. For example it decides to unroll the while + // loop by a factor of two if a collective op is present. + bool xla_gpu_enable_heuristic_pass_configuration = 332; + + // This controls how many in-flight collectives latency hiding scheduler + // can schedule. Example usage: + // With xla_gpu_experimental_parallel_collective_overlap_limit = 1: + // coll.1-start = collective(input) + // coll.1-done = collective(coll.1-start) + // coll.2-start = collective(input2) + // coll.2-done = collective(coll.2-start) + // With xla_gpu_experimental_parallel_collective_overlap_limit = 2: + // coll.1-start = collective(input) + // coll.2-start = collective(input2) + // coll.1-done = collective(coll.1-start) + // coll.2-done = collective(coll.2-start) + int32 xla_gpu_experimental_parallel_collective_overlap_limit = 336; + + // If set >= 0, this controls the total bytes(combined sizes of both + // operands in bytes) to enable windowed einsum and + // xla_gpu_threshold_for_windowed_einsum_mib will be ignored. + int64 xla_gpu_operand_bytes_threshold_for_windowed_einsum = 339; + + // Enables strict PGLE checking. If an FDO profile is specified and latency + // hiding scheduler encounters missing instructions in the profile + // compilation will halt or warn depending on the value of this option. + enum PGLEStrictnessLevel { + PGLE_STRICTNESS_LEVEL_OFF = 0; + PGLE_STRICTNESS_LEVEL_WARN = 1; + PGLE_STRICTNESS_LEVEL_ERROR = 2; + } + PGLEStrictnessLevel xla_gpu_pgle_accuracy_checker = 341; + + // Next id: 343 + + // Extra options to pass to the compilation backend (e.g. LLVM); specific + // interpretation of these values is left to the backend. + map xla_backend_extra_options = 500; + + // Reserved tags were xla_hlo_dump_as_graphdef, xla_dump_to, + // xla_gpu_use_horizontal_fusion, + // xla_gpu_unsafe_fallback_to_driver_on_ptxas_error, + // xla_gpu_simplify_scatters, xla_gpu_simplify_gathers + // xla_gpu_enable_cuda_graphs + // xla_gpu_allow_all_reduce_kernel + // xla_gpu_enable_experimental_block_size + // xla_gpu_graph_level + // xla_gpu_single_wave_autotuning + // xla_gpu_enable_persistent_temp_buffers + // xla_gpu_enable_triton_gemm_int4 + // xla_gpu_enable_priority_fusion + // xla_gpu_pgle_accuracy_checker + reserved 5, 117, 133, 139, 176, 178, 180, 193, 214, 194, 221, 242, 206, 320, + 326; +} + +// Contains flags which affects the GPU compilation result. +// These flags are part of Debug Options as of now, and will be migrated to +// this proto. +message GpuCompilationEnvironment { + // Temporary dummy flag is added to test the flow. + // To be removed when we add flags here. + int64 dummy_flag = 1; +} + +message ShardableValueUpdatePairProto { + int64 input_parameter_number = 1; + repeated int64 parameter_shape_index = 2; + repeated int64 output_shape_index = 3; +} + +// These settings control how XLA compiles and/or runs code. Not all settings +// will have an effect on every platform. +// +// When adding new fields, keep in mind that boolean fields default to false. +// Next id: 27. +message ExecutionOptions { + // This optional field's layout is used as a hint when storing the output of + // this computation. Subsequent transfers of this output array to the client + // may be faster when using this layout. + // + // We use a Shape here to accommodate computations that return a tuple. + ShapeProto shape_with_output_layout = 2; + + // Used to seed random-number generators used in this computation. If this is + // 0, we generate a seed ourselves. + // + // TODO(b/32083678): Changing the seed unnecessarily forces a recompilation. + uint64 seed = 3; + + DebugOptions debug_options = 4; + + // This optional field specifies a particular set of devices to run the + // computation on. The computation will be partitioned across these devices. + // If not provided, the default device will be chosen. + repeated DeviceHandle device_handles = 5; + + // Number of replicas of the computation to run. If zero, uses the default + // number of replicas for the XLA service. + int32 num_replicas = 6; + + // This optional field specifies the device assignment if known at compile + // time. + DeviceAssignmentProto device_assignment = 7; + + // Alias input and output buffers for parameters that are passed-through XLA + // modules without being changed. + bool alias_passthrough_params = 8; + + // Number of partitions of the computation to run (model parallelism). + // If zero, uses the default number of partitions for the XLA service. + int32 num_partitions = 9; + + // Used to identify a set of programs that should be launch together. + int32 launch_id = 10; + + // Indicates whether to use SPMD (true) or MPMD (false) partitioning when + // num_partitions > 1 and XLA is requested to partition the input program. + bool use_spmd_partitioning = 11; + + // Whether to automatically generate XLA shardings for SPMD partitioner. + bool use_auto_spmd_partitioning = 15; + + // Device mesh shape used to create the sharding search space when + // use_auto_spmd_partitioning=true. + repeated int64 auto_spmd_partitioning_mesh_shape = 16; + + // Device mesh ids compatible with the above mesh_shape used when + // use_auto_spmd_partitioning=true. + repeated int64 auto_spmd_partitioning_mesh_ids = 17; + + // The amount of effort to spend on optimizing for minimizing program + // execution time, as a value in [-1.0, +1.0]. The baseline is 0.0, which + // strongly prioritizes execution time at the cost of longer compile times, + // suitable for production workloads. A value of -0.5 would be appropriate for + // research use cases that prefer faster compilations to iterate more quickly. + // Positive values, on the other hand, might enable costly optimizations that + // are off by default. + float exec_time_optimization_effort = 25; + + // The amount of effort to spend on making the program fit in memory (where + // "fit in memory" here has a backend-dependent meaning), as a value in + // [-1.0,+1.0]. The baseline is 0.0, which expends significant effort on + // attempting to make the program fit. A value of -1.0 would be appropriate + // for use cases that wish to spend minimal effort here and fail as quickly as + // possible instead. Positive values, on the other hand, might enable costly + // algorithms to reduce memory usage that are off by default. + float memory_fitting_effort = 26; + + // If set, deduplicate hlo into function calls to reduce binary size. Only + // works on TPU. + bool deduplicate_hlo = 12; + + reserved 13; // Was broadcast_replicated_parameters_via_collectives + + // Allows sharding propagation to propagate to the parameters. This changes + // the input shape of the computation (which is undesirable), but it can be + // used to allow to run partial compilation to determine what would be the + // input sharding of a computation if XLA would be allowed to propagate the + // sharding which can be used by higher level framework as a way to query + // intermediate sharding of operations when multiple computation would be + // chained and merged together. + // This is a vector of bool, because the user can control which parameters can + // have the sharding substituted. If only one boolean value is passed in the + // vector that is interpreted as the value to be applied for every parameter. + repeated bool allow_spmd_sharding_propagation_to_parameters = 23; + + // Allows sharding propagation to propagate to the outputs. This changes the + // output shape of the computation (which is undesirable), but it can be used + // to allow to run partial compilation to determine what would be the output + // sharding of a computation if XLA would be allowed to propagate the sharding + // which can be used by higher level framework as a way to query intermediate + // sharding of operations when multiple computation would be chained and + // merged together. + // This is a vector of bool, because the user can control (if the output of + // the computation is a tuple) which elements of the tuple can have the + // sharding substituted and which don't. If only one boolean value is passed + // in the vector that's interpreted as the value to be applied for every + // single element of the output tuple. One value per element of the tuple + // means that each value is attached to one of the output elements. + repeated bool allow_spmd_sharding_propagation_to_output = 14; + + // Whether to broadcast args across all replicas. One entry per arg. + repeated bool param_requires_broadcast_via_collectives = 18; + + // If enabled, the compiler may generate sharding and unsharding programs as + // separate HLO modules, and modify the main program's input and output to + // be sharded. + bool allow_separate_sharding_programs = 19; + + // The list of input/output pairs in the main program that could be sharded. + repeated ShardableValueUpdatePairProto shardable_value_update_pairs = 20; + + // Profiling data for feedback directed optimizations. Note that this is not + // the only way to feed FDO data into the compiler and individual backends + // may choose to get FDO data by other means. + bytes fdo_profile = 21; + + // Amount of device memory available for the executable to use. + int64 device_memory_size = 22; + + // Use Shardy, a new partitioner, to replace the existing + // ShardingPropagation and SpmdPartitioner. See go/xla-sdy-pipeline for + // details. + bool use_shardy_partitioner = 24; +} + +// Serialization of HloModuleConfig. See the C++ class definition for +// descriptions of each field. +// There are no guarantees of backwards or forwards compatibility. +// Next id: 38. +message HloModuleConfigProto { + enum FusionConfigCollection { + OFF = 0; // Do not collect configuration. + PER_EDGE = 1; // Collect per-edge configuration. + PER_NODE = 2; // Collect per-node configuration. + } + + message BoolList { + repeated bool vals = 1; + } + message Int64List { + repeated int64 vals = 1; + } + message Int64ListList { + repeated Int64List lists = 1; + } + + xla.ProgramShapeProto entry_computation_layout = 1; + uint64 seed = 2; + int32 launch_id = 3; + int64 replica_count = 4; + int64 num_partitions = 5; + repeated bool param_requires_broadcast_via_collectives = 6; + bool use_spmd_partitioning = 7; + bool use_auto_spmd_partitioning = 8; + repeated int64 auto_spmd_partitioning_mesh_shape = 9; + repeated int64 auto_spmd_partitioning_mesh_ids = 10; + float exec_time_optimization_effort = 36; + float memory_fitting_effort = 37; + bool deduplicate_hlo = 11; + int64 intra_op_parallelism_threads = 12; + string device_type = 13; + + DebugOptions debug_options = 14; + DeviceAssignmentProto static_device_assignment = 15; + // The original device assignment before being changed by a simulator. + // Simulators, like HybridSim, may change the device assignment to a smaller + // topology, to make simulation easier. + DeviceAssignmentProto pre_simulation_device_assignment = 35; + bool allow_separate_sharding_programs = 30; + repeated ShardableValueUpdatePairProto shardable_value_update_pairs = 16; + bool alias_passthrough_params = 17; + bool content_aware_computation_sorting = 18; + FusionConfigCollection fusion_config_collection = 19; + + repeated BoolList fusion_config = 20; + map dot_config = 21; + repeated Int64ListList layout_config = 22; + + repeated uint64 memory_space_assignment_config = 23; + repeated BoolList phase_ordering_config = 24; + int32 phase_index = 25; + reserved 26; // Was flag_config + repeated bool allow_spmd_sharding_propagation_to_parameters = 33; + repeated bool allow_spmd_sharding_propagation_to_output = 27; + map analysis_allowance_map = 28; + xla.PrecisionConfig.Precision matrix_unit_operand_precision = 29; + bytes fdo_profile = 31; + int64 device_memory_size = 32; + bool use_shardy_partitioner = 34; +} + +message HloModuleProtoWithConfig { + HloModuleProto hlo_module = 1; + HloModuleConfigProto config = 2; +} + +// A trace estimated by the Latency Hiding Scheduler. +message ScheduleProto { + message Instruction { + // Instruction id (matches the id in HloInstructionProto). + int64 id = 1; + + // Start and end timestamps in cycles. + double start_timestamp_cycles = 2; + double end_timestamp_cycles = 3; + } + repeated Instruction instructions = 1; + // Computation id (matches the id in HloComputationProto). + int64 computation_id = 2; + HloModuleProto hlo_module = 3; + int64 cycles_per_microsecond = 4; +} diff --git a/protos/xla/xla.pb.go b/protos/xla/xla.pb.go index 79d6f00..bc96b8c 100644 --- a/protos/xla/xla.pb.go +++ b/protos/xla/xla.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/xla.proto package xla @@ -224,14 +224,15 @@ func (DebugOptions_CollectiveOpType) EnumDescriptor() ([]byte, []int) { type DebugOptions_CommandBufferCmdType int32 const ( - DebugOptions_INVALID DebugOptions_CommandBufferCmdType = 0 - DebugOptions_FUSION DebugOptions_CommandBufferCmdType = 1 - DebugOptions_CUBLAS DebugOptions_CommandBufferCmdType = 2 - DebugOptions_CUDNN DebugOptions_CommandBufferCmdType = 3 - DebugOptions_COLLECTIVES DebugOptions_CommandBufferCmdType = 4 - DebugOptions_CONDITIONALS DebugOptions_CommandBufferCmdType = 5 - DebugOptions_CUSTOM_CALL DebugOptions_CommandBufferCmdType = 6 - DebugOptions_CUBLASLT DebugOptions_CommandBufferCmdType = 7 + DebugOptions_INVALID DebugOptions_CommandBufferCmdType = 0 + DebugOptions_FUSION DebugOptions_CommandBufferCmdType = 1 + DebugOptions_CUBLAS DebugOptions_CommandBufferCmdType = 2 + DebugOptions_CUDNN DebugOptions_CommandBufferCmdType = 3 + DebugOptions_COLLECTIVES DebugOptions_CommandBufferCmdType = 4 + DebugOptions_CONDITIONALS DebugOptions_CommandBufferCmdType = 5 + DebugOptions_CUSTOM_CALL DebugOptions_CommandBufferCmdType = 6 + DebugOptions_CUBLASLT DebugOptions_CommandBufferCmdType = 7 + DebugOptions_DYNAMIC_SLICE DebugOptions_CommandBufferCmdType = 8 ) // Enum value maps for DebugOptions_CommandBufferCmdType. @@ -245,16 +246,18 @@ var ( 5: "CONDITIONALS", 6: "CUSTOM_CALL", 7: "CUBLASLT", + 8: "DYNAMIC_SLICE", } DebugOptions_CommandBufferCmdType_value = map[string]int32{ - "INVALID": 0, - "FUSION": 1, - "CUBLAS": 2, - "CUDNN": 3, - "COLLECTIVES": 4, - "CONDITIONALS": 5, - "CUSTOM_CALL": 6, - "CUBLASLT": 7, + "INVALID": 0, + "FUSION": 1, + "CUBLAS": 2, + "CUDNN": 3, + "COLLECTIVES": 4, + "CONDITIONALS": 5, + "CUSTOM_CALL": 6, + "CUBLASLT": 7, + "DYNAMIC_SLICE": 8, } ) @@ -447,6 +450,58 @@ func (DebugOptions_AutotuneCacheMode) EnumDescriptor() ([]byte, []int) { return file_xla_xla_proto_rawDescGZIP(), []int{1, 6} } +// Enables strict PGLE checking. If an FDO profile is specified and latency +// hiding scheduler encounters missing instructions in the profile +// compilation will halt or warn depending on the value of this option. +type DebugOptions_PGLEStrictnessLevel int32 + +const ( + DebugOptions_PGLE_STRICTNESS_LEVEL_OFF DebugOptions_PGLEStrictnessLevel = 0 + DebugOptions_PGLE_STRICTNESS_LEVEL_WARN DebugOptions_PGLEStrictnessLevel = 1 + DebugOptions_PGLE_STRICTNESS_LEVEL_ERROR DebugOptions_PGLEStrictnessLevel = 2 +) + +// Enum value maps for DebugOptions_PGLEStrictnessLevel. +var ( + DebugOptions_PGLEStrictnessLevel_name = map[int32]string{ + 0: "PGLE_STRICTNESS_LEVEL_OFF", + 1: "PGLE_STRICTNESS_LEVEL_WARN", + 2: "PGLE_STRICTNESS_LEVEL_ERROR", + } + DebugOptions_PGLEStrictnessLevel_value = map[string]int32{ + "PGLE_STRICTNESS_LEVEL_OFF": 0, + "PGLE_STRICTNESS_LEVEL_WARN": 1, + "PGLE_STRICTNESS_LEVEL_ERROR": 2, + } +) + +func (x DebugOptions_PGLEStrictnessLevel) Enum() *DebugOptions_PGLEStrictnessLevel { + p := new(DebugOptions_PGLEStrictnessLevel) + *p = x + return p +} + +func (x DebugOptions_PGLEStrictnessLevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DebugOptions_PGLEStrictnessLevel) Descriptor() protoreflect.EnumDescriptor { + return file_xla_xla_proto_enumTypes[7].Descriptor() +} + +func (DebugOptions_PGLEStrictnessLevel) Type() protoreflect.EnumType { + return &file_xla_xla_proto_enumTypes[7] +} + +func (x DebugOptions_PGLEStrictnessLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DebugOptions_PGLEStrictnessLevel.Descriptor instead. +func (DebugOptions_PGLEStrictnessLevel) EnumDescriptor() ([]byte, []int) { + return file_xla_xla_proto_rawDescGZIP(), []int{1, 7} +} + type HloModuleConfigProto_FusionConfigCollection int32 const ( @@ -480,11 +535,11 @@ func (x HloModuleConfigProto_FusionConfigCollection) String() string { } func (HloModuleConfigProto_FusionConfigCollection) Descriptor() protoreflect.EnumDescriptor { - return file_xla_xla_proto_enumTypes[7].Descriptor() + return file_xla_xla_proto_enumTypes[8].Descriptor() } func (HloModuleConfigProto_FusionConfigCollection) Type() protoreflect.EnumType { - return &file_xla_xla_proto_enumTypes[7] + return &file_xla_xla_proto_enumTypes[8] } func (x HloModuleConfigProto_FusionConfigCollection) Number() protoreflect.EnumNumber { @@ -507,11 +562,9 @@ type CompilationEnvironmentsProto struct { func (x *CompilationEnvironmentsProto) Reset() { *x = CompilationEnvironmentsProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CompilationEnvironmentsProto) String() string { @@ -522,7 +575,7 @@ func (*CompilationEnvironmentsProto) ProtoMessage() {} func (x *CompilationEnvironmentsProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -559,8 +612,8 @@ type DebugOptions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // go/keep-sorted start newline_separated=yes - // + // Use region analysis in copy insertion pass. + XlaCpuCopyInsertionUseRegionAnalysis bool `protobuf:"varint,337,opt,name=xla_cpu_copy_insertion_use_region_analysis,json=xlaCpuCopyInsertionUseRegionAnalysis,proto3" json:"xla_cpu_copy_insertion_use_region_analysis,omitempty"` // When true, XLA:CPU uses HLO module scheduler that is optimized for // extracting concurrency at the cost of extra memory: we extend the live // ranges of temporaries to allow XLA runtime to schedule independent @@ -600,6 +653,8 @@ type DebugOptions struct { XlaCpuFastMathHonorNans bool `protobuf:"varint,120,opt,name=xla_cpu_fast_math_honor_nans,json=xlaCpuFastMathHonorNans,proto3" json:"xla_cpu_fast_math_honor_nans,omitempty"` // When true, XLA:CPU uses the thunk runtime to execute compiled program. XlaCpuUseThunkRuntime bool `protobuf:"varint,298,opt,name=xla_cpu_use_thunk_runtime,json=xlaCpuUseThunkRuntime,proto3" json:"xla_cpu_use_thunk_runtime,omitempty"` + // Enabling this will enable optimizations that ignore the possibility of NaN. + XlaEnableFastMath bool `protobuf:"varint,335,opt,name=xla_enable_fast_math,json=xlaEnableFastMath,proto3" json:"xla_enable_fast_math,omitempty"` // The number of parts to split the LLVM module into before codegen. This // allows XLA to compile all parts in parallel, and resolve kernel symbols // from different dynamic libraries. @@ -607,10 +662,33 @@ type DebugOptions struct { // A `prefer-vector-width` value that is passed to the LLVM backend. Default // value is `256` (AVX2 on x86 platforms). XlaCpuPreferVectorWidth int32 `protobuf:"varint,308,opt,name=xla_cpu_prefer_vector_width,json=xlaCpuPreferVectorWidth,proto3" json:"xla_cpu_prefer_vector_width,omitempty"` + // When set, XLA:CPU will only generate code up to the specified ISA. + // (It will not use newer ISAs.) Using the string format allows us to extend + // the flag for more flexible control if necessary. + XlaCpuMaxIsa string `protobuf:"bytes,333,opt,name=xla_cpu_max_isa,json=xlaCpuMaxIsa,proto3" json:"xla_cpu_max_isa,omitempty"` // Specifies the behavior of per kernel autotuning cache. XlaGpuExperimentalAutotuneCacheMode DebugOptions_AutotuneCacheMode `protobuf:"varint,324,opt,name=xla_gpu_experimental_autotune_cache_mode,json=xlaGpuExperimentalAutotuneCacheMode,proto3,enum=xla.DebugOptions_AutotuneCacheMode" json:"xla_gpu_experimental_autotune_cache_mode,omitempty"` // Experimentally disables binary libraries in GPU compiler passes. XlaGpuExperimentalDisableBinaryLibraries bool `protobuf:"varint,329,opt,name=xla_gpu_experimental_disable_binary_libraries,json=xlaGpuExperimentalDisableBinaryLibraries,proto3" json:"xla_gpu_experimental_disable_binary_libraries,omitempty"` + // Dump FDO profiles in a binary format to a separate file. + XlaGpuExperimentalDumpFdoProfiles bool `protobuf:"varint,338,opt,name=xla_gpu_experimental_dump_fdo_profiles,json=xlaGpuExperimentalDumpFdoProfiles,proto3" json:"xla_gpu_experimental_dump_fdo_profiles,omitempty"` + // Enabling this flag will attempt to redirect every already-constructed + // fusion possible to the Triton emitter. + // + // For example, a fusion with kind kLoop will be transformed to a fusion with + // kind kCustom (and underlying kTritonFusionKind) if it can be tiled + // correctly, and if all the instructions it contains are supported by XLA's + // Triton emitter. Tile sizes are assigned automatically. + // + // Pre-existing block-level fusions are left unmodified. + XlaGpuExperimentalEnableFusionBlockLevelRewriter bool `protobuf:"varint,334,opt,name=xla_gpu_experimental_enable_fusion_block_level_rewriter,json=xlaGpuExperimentalEnableFusionBlockLevelRewriter,proto3" json:"xla_gpu_experimental_enable_fusion_block_level_rewriter,omitempty"` + // When enabled, the PriorityFusion pass will try to make Triton fusions first + // and foremost where it is possible. + // + // A kCustom fusion with underlying kTritonFusionKind will be created if it + // can be tiled correctly, and if all the instructions it contains are + // supported by XLA's Triton emitter. Tile sizes are assigned automatically. + XlaGpuExperimentalEnableTritonHerolessPriorityFusion bool `protobuf:"varint,340,opt,name=xla_gpu_experimental_enable_triton_heroless_priority_fusion,json=xlaGpuExperimentalEnableTritonHerolessPriorityFusion,proto3" json:"xla_gpu_experimental_enable_triton_heroless_priority_fusion,omitempty"` // Gates the experimental feature coupling the Triton Softmax pattern matcher // with priority fusion. XlaGpuExperimentalEnableTritonSoftmaxPriorityFusion bool `protobuf:"varint,325,opt,name=xla_gpu_experimental_enable_triton_softmax_priority_fusion,json=xlaGpuExperimentalEnableTritonSoftmaxPriorityFusion,proto3" json:"xla_gpu_experimental_enable_triton_softmax_priority_fusion,omitempty"` @@ -903,7 +981,6 @@ type DebugOptions struct { XlaGpuEnablePipelinedAllGather bool `protobuf:"varint,227,opt,name=xla_gpu_enable_pipelined_all_gather,json=xlaGpuEnablePipelinedAllGather,proto3" json:"xla_gpu_enable_pipelined_all_gather,omitempty"` XlaGpuEnablePipelinedReduceScatter bool `protobuf:"varint,231,opt,name=xla_gpu_enable_pipelined_reduce_scatter,json=xlaGpuEnablePipelinedReduceScatter,proto3" json:"xla_gpu_enable_pipelined_reduce_scatter,omitempty"` XlaGpuEnablePipelinedP2P bool `protobuf:"varint,246,opt,name=xla_gpu_enable_pipelined_p2p,json=xlaGpuEnablePipelinedP2p,proto3" json:"xla_gpu_enable_pipelined_p2p,omitempty"` - XlaGpuRunPostLayoutCollectivePipeliner bool `protobuf:"varint,313,opt,name=xla_gpu_run_post_layout_collective_pipeliner,json=xlaGpuRunPostLayoutCollectivePipeliner,proto3" json:"xla_gpu_run_post_layout_collective_pipeliner,omitempty"` // The minimum data size in bytes to trigger collective-permute-decomposer // transformation. XlaGpuCollectivePermuteDecomposerThreshold int64 `protobuf:"varint,237,opt,name=xla_gpu_collective_permute_decomposer_threshold,json=xlaGpuCollectivePermuteDecomposerThreshold,proto3" json:"xla_gpu_collective_permute_decomposer_threshold,omitempty"` @@ -916,7 +993,6 @@ type DebugOptions struct { // `xla_gpu_cublas_fallback` set to false. XlaGpuTritonGemmAny bool `protobuf:"varint,190,opt,name=xla_gpu_triton_gemm_any,json=xlaGpuTritonGemmAny,proto3" json:"xla_gpu_triton_gemm_any,omitempty"` XlaGpuExhaustiveTilingSearch bool `protobuf:"varint,219,opt,name=xla_gpu_exhaustive_tiling_search,json=xlaGpuExhaustiveTilingSearch,proto3" json:"xla_gpu_exhaustive_tiling_search,omitempty"` - XlaGpuEnablePriorityFusion bool `protobuf:"varint,221,opt,name=xla_gpu_enable_priority_fusion,json=xlaGpuEnablePriorityFusion,proto3" json:"xla_gpu_enable_priority_fusion,omitempty"` // File to write autotune results to. It will be a binary file unless the name // ends with .txt or .textproto. Warning: The results are written at every // compilation, possibly multiple times per process. This only works on CUDA. @@ -983,7 +1059,8 @@ type DebugOptions struct { XlaGpuEnableLibnvptxcompiler bool `protobuf:"varint,269,opt,name=xla_gpu_enable_libnvptxcompiler,json=xlaGpuEnableLibnvptxcompiler,proto3" json:"xla_gpu_enable_libnvptxcompiler,omitempty"` XlaGpuEnableDotStrengthReduction bool `protobuf:"varint,270,opt,name=xla_gpu_enable_dot_strength_reduction,json=xlaGpuEnableDotStrengthReduction,proto3" json:"xla_gpu_enable_dot_strength_reduction,omitempty"` // Whether to use multiple compute streams to run windowed einsum. - XlaGpuMultiStreamedWindowedEinsum bool `protobuf:"varint,280,opt,name=xla_gpu_multi_streamed_windowed_einsum,json=xlaGpuMultiStreamedWindowedEinsum,proto3" json:"xla_gpu_multi_streamed_windowed_einsum,omitempty"` + XlaGpuMultiStreamedWindowedEinsum bool `protobuf:"varint,280,opt,name=xla_gpu_multi_streamed_windowed_einsum,json=xlaGpuMultiStreamedWindowedEinsum,proto3" json:"xla_gpu_multi_streamed_windowed_einsum,omitempty"` + XlaGpuExperimentalStreamAnnotation bool `protobuf:"varint,342,opt,name=xla_gpu_experimental_stream_annotation,json=xlaGpuExperimentalStreamAnnotation,proto3" json:"xla_gpu_experimental_stream_annotation,omitempty"` // If enabled, uses bf16_6way gemm to compute F32 gemm. XlaGpuEnableBf16_6WayGemm bool `protobuf:"varint,271,opt,name=xla_gpu_enable_bf16_6way_gemm,json=xlaGpuEnableBf166wayGemm,proto3" json:"xla_gpu_enable_bf16_6way_gemm,omitempty"` // If enabled, uses bf16_3way gemm to compute F32 gemm. @@ -994,14 +1071,6 @@ type DebugOptions struct { // Specify the maximum number of channels(SMs) NCCL // will use for p2p operations. XlaGpuNcclP2PMaxNchannels int64 `protobuf:"varint,274,opt,name=xla_gpu_nccl_p2p_max_nchannels,json=xlaGpuNcclP2pMaxNchannels,proto3" json:"xla_gpu_nccl_p2p_max_nchannels,omitempty"` - // Choose the level of mlir emitters that are enabled. - // Current levels: - // 0: Disabled. - // 1: Loop emitter - // 2: + Loop-like emitters - // 3: + Transpose - // 4: + Reduce - XlaGpuMlirEmitterLevel int64 `protobuf:"varint,303,opt,name=xla_gpu_mlir_emitter_level,json=xlaGpuMlirEmitterLevel,proto3" json:"xla_gpu_mlir_emitter_level,omitempty"` // Threshold to rewrite matmul to cuBLAS or Triton (minimum combined number of // elements of both matrices in non-batch dimensions to be considered for a // rewrite). @@ -1039,9 +1108,6 @@ type DebugOptions struct { // Excludes non-deterministic ops from compiled executables. // Unlike --xla_gpu_deterministic_ops does not disable autotuning - the // compilation itself can be non-deterministic. - // At present, the HLO op SelectAndScatter does not have a - // deterministic XLA:GPU implementation. - // Compilation errors out if SelectAndScatter is encountered. // Scatter ops can non-deterministic by default; these get converted to // a deterministic implementation. XlaGpuExcludeNondeterministicOps bool `protobuf:"varint,297,opt,name=xla_gpu_exclude_nondeterministic_ops,json=xlaGpuExcludeNondeterministicOps,proto3" json:"xla_gpu_exclude_nondeterministic_ops,omitempty"` @@ -1109,15 +1175,9 @@ type DebugOptions struct { XlaGpuCudnnGemmMaxPlans int32 `protobuf:"varint,318,opt,name=xla_gpu_cudnn_gemm_max_plans,json=xlaGpuCudnnGemmMaxPlans,proto3" json:"xla_gpu_cudnn_gemm_max_plans,omitempty"` // If enabled, uses the libnvjitlink library for PTX compilation and linking XlaGpuEnableLibnvjitlink bool `protobuf:"varint,319,opt,name=xla_gpu_enable_libnvjitlink,json=xlaGpuEnableLibnvjitlink,proto3" json:"xla_gpu_enable_libnvjitlink,omitempty"` - // If enabled, generates triton gemm kernels for int4 inputs. - XlaGpuEnableTritonGemmInt4 bool `protobuf:"varint,320,opt,name=xla_gpu_enable_triton_gemm_int4,json=xlaGpuEnableTritonGemmInt4,proto3" json:"xla_gpu_enable_triton_gemm_int4,omitempty"` // If true, XLA will wrap `dot` operations into async computations in an // effort to parallelize matrix operations. XlaGpuAsyncDot bool `protobuf:"varint,321,opt,name=xla_gpu_async_dot,json=xlaGpuAsyncDot,proto3" json:"xla_gpu_async_dot,omitempty"` - // Enables strict PGLE checking. If an FDO profile is specified and latency - // hiding scheduler encounters missing instructions in the profile - // compilation will halt. - XlaGpuEnablePgleAccuracyChecker bool `protobuf:"varint,326,opt,name=xla_gpu_enable_pgle_accuracy_checker,json=xlaGpuEnablePgleAccuracyChecker,proto3" json:"xla_gpu_enable_pgle_accuracy_checker,omitempty"` // Timeouts for RendezvousSingle stuck warning and termination. XlaGpuExecutableWarnStuckTimeoutSeconds int32 `protobuf:"varint,327,opt,name=xla_gpu_executable_warn_stuck_timeout_seconds,json=xlaGpuExecutableWarnStuckTimeoutSeconds,proto3" json:"xla_gpu_executable_warn_stuck_timeout_seconds,omitempty"` XlaGpuExecutableTerminateTimeoutSeconds int32 `protobuf:"varint,328,opt,name=xla_gpu_executable_terminate_timeout_seconds,json=xlaGpuExecutableTerminateTimeoutSeconds,proto3" json:"xla_gpu_executable_terminate_timeout_seconds,omitempty"` @@ -1130,6 +1190,27 @@ type DebugOptions struct { // configurations based on the HLO. For example it decides to unroll the while // loop by a factor of two if a collective op is present. XlaGpuEnableHeuristicPassConfiguration bool `protobuf:"varint,332,opt,name=xla_gpu_enable_heuristic_pass_configuration,json=xlaGpuEnableHeuristicPassConfiguration,proto3" json:"xla_gpu_enable_heuristic_pass_configuration,omitempty"` + // This controls how many in-flight collectives latency hiding scheduler + // can schedule. Example usage: + // With xla_gpu_experimental_parallel_collective_overlap_limit = 1: + // + // coll.1-start = collective(input) + // coll.1-done = collective(coll.1-start) + // coll.2-start = collective(input2) + // coll.2-done = collective(coll.2-start) + // + // With xla_gpu_experimental_parallel_collective_overlap_limit = 2: + // + // coll.1-start = collective(input) + // coll.2-start = collective(input2) + // coll.1-done = collective(coll.1-start) + // coll.2-done = collective(coll.2-start) + XlaGpuExperimentalParallelCollectiveOverlapLimit int32 `protobuf:"varint,336,opt,name=xla_gpu_experimental_parallel_collective_overlap_limit,json=xlaGpuExperimentalParallelCollectiveOverlapLimit,proto3" json:"xla_gpu_experimental_parallel_collective_overlap_limit,omitempty"` + // If set >= 0, this controls the total bytes(combined sizes of both + // operands in bytes) to enable windowed einsum and + // xla_gpu_threshold_for_windowed_einsum_mib will be ignored. + XlaGpuOperandBytesThresholdForWindowedEinsum int64 `protobuf:"varint,339,opt,name=xla_gpu_operand_bytes_threshold_for_windowed_einsum,json=xlaGpuOperandBytesThresholdForWindowedEinsum,proto3" json:"xla_gpu_operand_bytes_threshold_for_windowed_einsum,omitempty"` + XlaGpuPgleAccuracyChecker DebugOptions_PGLEStrictnessLevel `protobuf:"varint,341,opt,name=xla_gpu_pgle_accuracy_checker,json=xlaGpuPgleAccuracyChecker,proto3,enum=xla.DebugOptions_PGLEStrictnessLevel" json:"xla_gpu_pgle_accuracy_checker,omitempty"` // Extra options to pass to the compilation backend (e.g. LLVM); specific // interpretation of these values is left to the backend. XlaBackendExtraOptions map[string]string `protobuf:"bytes,500,rep,name=xla_backend_extra_options,json=xlaBackendExtraOptions,proto3" json:"xla_backend_extra_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -1137,11 +1218,9 @@ type DebugOptions struct { func (x *DebugOptions) Reset() { *x = DebugOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DebugOptions) String() string { @@ -1152,7 +1231,7 @@ func (*DebugOptions) ProtoMessage() {} func (x *DebugOptions) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1167,6 +1246,13 @@ func (*DebugOptions) Descriptor() ([]byte, []int) { return file_xla_xla_proto_rawDescGZIP(), []int{1} } +func (x *DebugOptions) GetXlaCpuCopyInsertionUseRegionAnalysis() bool { + if x != nil { + return x.XlaCpuCopyInsertionUseRegionAnalysis + } + return false +} + func (x *DebugOptions) GetXlaCpuEnableConcurrencyOptimizedScheduler() bool { if x != nil { return x.XlaCpuEnableConcurrencyOptimizedScheduler @@ -1223,6 +1309,13 @@ func (x *DebugOptions) GetXlaCpuUseThunkRuntime() bool { return false } +func (x *DebugOptions) GetXlaEnableFastMath() bool { + if x != nil { + return x.XlaEnableFastMath + } + return false +} + func (x *DebugOptions) GetXlaCpuParallelCodegenSplitCount() int32 { if x != nil { return x.XlaCpuParallelCodegenSplitCount @@ -1237,6 +1330,13 @@ func (x *DebugOptions) GetXlaCpuPreferVectorWidth() int32 { return 0 } +func (x *DebugOptions) GetXlaCpuMaxIsa() string { + if x != nil { + return x.XlaCpuMaxIsa + } + return "" +} + func (x *DebugOptions) GetXlaGpuExperimentalAutotuneCacheMode() DebugOptions_AutotuneCacheMode { if x != nil { return x.XlaGpuExperimentalAutotuneCacheMode @@ -1251,6 +1351,27 @@ func (x *DebugOptions) GetXlaGpuExperimentalDisableBinaryLibraries() bool { return false } +func (x *DebugOptions) GetXlaGpuExperimentalDumpFdoProfiles() bool { + if x != nil { + return x.XlaGpuExperimentalDumpFdoProfiles + } + return false +} + +func (x *DebugOptions) GetXlaGpuExperimentalEnableFusionBlockLevelRewriter() bool { + if x != nil { + return x.XlaGpuExperimentalEnableFusionBlockLevelRewriter + } + return false +} + +func (x *DebugOptions) GetXlaGpuExperimentalEnableTritonHerolessPriorityFusion() bool { + if x != nil { + return x.XlaGpuExperimentalEnableTritonHerolessPriorityFusion + } + return false +} + func (x *DebugOptions) GetXlaGpuExperimentalEnableTritonSoftmaxPriorityFusion() bool { if x != nil { return x.XlaGpuExperimentalEnableTritonSoftmaxPriorityFusion @@ -2056,13 +2177,6 @@ func (x *DebugOptions) GetXlaGpuEnablePipelinedP2P() bool { return false } -func (x *DebugOptions) GetXlaGpuRunPostLayoutCollectivePipeliner() bool { - if x != nil { - return x.XlaGpuRunPostLayoutCollectivePipeliner - } - return false -} - func (x *DebugOptions) GetXlaGpuCollectivePermuteDecomposerThreshold() int64 { if x != nil { return x.XlaGpuCollectivePermuteDecomposerThreshold @@ -2105,13 +2219,6 @@ func (x *DebugOptions) GetXlaGpuExhaustiveTilingSearch() bool { return false } -func (x *DebugOptions) GetXlaGpuEnablePriorityFusion() bool { - if x != nil { - return x.XlaGpuEnablePriorityFusion - } - return false -} - func (x *DebugOptions) GetXlaGpuDumpAutotuneResultsTo() string { if x != nil { return x.XlaGpuDumpAutotuneResultsTo @@ -2329,6 +2436,13 @@ func (x *DebugOptions) GetXlaGpuMultiStreamedWindowedEinsum() bool { return false } +func (x *DebugOptions) GetXlaGpuExperimentalStreamAnnotation() bool { + if x != nil { + return x.XlaGpuExperimentalStreamAnnotation + } + return false +} + func (x *DebugOptions) GetXlaGpuEnableBf16_6WayGemm() bool { if x != nil { return x.XlaGpuEnableBf16_6WayGemm @@ -2357,13 +2471,6 @@ func (x *DebugOptions) GetXlaGpuNcclP2PMaxNchannels() int64 { return 0 } -func (x *DebugOptions) GetXlaGpuMlirEmitterLevel() int64 { - if x != nil { - return x.XlaGpuMlirEmitterLevel - } - return 0 -} - func (x *DebugOptions) GetXlaGpuGemmRewriteSizeThreshold() int64 { if x != nil { return x.XlaGpuGemmRewriteSizeThreshold @@ -2539,13 +2646,6 @@ func (x *DebugOptions) GetXlaGpuEnableLibnvjitlink() bool { return false } -func (x *DebugOptions) GetXlaGpuEnableTritonGemmInt4() bool { - if x != nil { - return x.XlaGpuEnableTritonGemmInt4 - } - return false -} - func (x *DebugOptions) GetXlaGpuAsyncDot() bool { if x != nil { return x.XlaGpuAsyncDot @@ -2553,13 +2653,6 @@ func (x *DebugOptions) GetXlaGpuAsyncDot() bool { return false } -func (x *DebugOptions) GetXlaGpuEnablePgleAccuracyChecker() bool { - if x != nil { - return x.XlaGpuEnablePgleAccuracyChecker - } - return false -} - func (x *DebugOptions) GetXlaGpuExecutableWarnStuckTimeoutSeconds() int32 { if x != nil { return x.XlaGpuExecutableWarnStuckTimeoutSeconds @@ -2595,6 +2688,27 @@ func (x *DebugOptions) GetXlaGpuEnableHeuristicPassConfiguration() bool { return false } +func (x *DebugOptions) GetXlaGpuExperimentalParallelCollectiveOverlapLimit() int32 { + if x != nil { + return x.XlaGpuExperimentalParallelCollectiveOverlapLimit + } + return 0 +} + +func (x *DebugOptions) GetXlaGpuOperandBytesThresholdForWindowedEinsum() int64 { + if x != nil { + return x.XlaGpuOperandBytesThresholdForWindowedEinsum + } + return 0 +} + +func (x *DebugOptions) GetXlaGpuPgleAccuracyChecker() DebugOptions_PGLEStrictnessLevel { + if x != nil { + return x.XlaGpuPgleAccuracyChecker + } + return DebugOptions_PGLE_STRICTNESS_LEVEL_OFF +} + func (x *DebugOptions) GetXlaBackendExtraOptions() map[string]string { if x != nil { return x.XlaBackendExtraOptions @@ -2617,11 +2731,9 @@ type GpuCompilationEnvironment struct { func (x *GpuCompilationEnvironment) Reset() { *x = GpuCompilationEnvironment{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GpuCompilationEnvironment) String() string { @@ -2632,7 +2744,7 @@ func (*GpuCompilationEnvironment) ProtoMessage() {} func (x *GpuCompilationEnvironment) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2666,11 +2778,9 @@ type ShardableValueUpdatePairProto struct { func (x *ShardableValueUpdatePairProto) Reset() { *x = ShardableValueUpdatePairProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ShardableValueUpdatePairProto) String() string { @@ -2681,7 +2791,7 @@ func (*ShardableValueUpdatePairProto) ProtoMessage() {} func (x *ShardableValueUpdatePairProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2721,7 +2831,7 @@ func (x *ShardableValueUpdatePairProto) GetOutputShapeIndex() []int64 { // will have an effect on every platform. // // When adding new fields, keep in mind that boolean fields default to false. -// Next id: 25. +// Next id: 27. type ExecutionOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2768,6 +2878,22 @@ type ExecutionOptions struct { // Device mesh ids compatible with the above mesh_shape used when // use_auto_spmd_partitioning=true. AutoSpmdPartitioningMeshIds []int64 `protobuf:"varint,17,rep,packed,name=auto_spmd_partitioning_mesh_ids,json=autoSpmdPartitioningMeshIds,proto3" json:"auto_spmd_partitioning_mesh_ids,omitempty"` + // The amount of effort to spend on optimizing for minimizing program + // execution time, as a value in [-1.0, +1.0]. The baseline is 0.0, which + // strongly prioritizes execution time at the cost of longer compile times, + // suitable for production workloads. A value of -0.5 would be appropriate for + // research use cases that prefer faster compilations to iterate more quickly. + // Positive values, on the other hand, might enable costly optimizations that + // are off by default. + ExecTimeOptimizationEffort float32 `protobuf:"fixed32,25,opt,name=exec_time_optimization_effort,json=execTimeOptimizationEffort,proto3" json:"exec_time_optimization_effort,omitempty"` + // The amount of effort to spend on making the program fit in memory (where + // "fit in memory" here has a backend-dependent meaning), as a value in + // [-1.0,+1.0]. The baseline is 0.0, which expends significant effort on + // attempting to make the program fit. A value of -1.0 would be appropriate + // for use cases that wish to spend minimal effort here and fail as quickly as + // possible instead. Positive values, on the other hand, might enable costly + // algorithms to reduce memory usage that are off by default. + MemoryFittingEffort float32 `protobuf:"fixed32,26,opt,name=memory_fitting_effort,json=memoryFittingEffort,proto3" json:"memory_fitting_effort,omitempty"` // If set, deduplicate hlo into function calls to reduce binary size. Only // works on TPU. DeduplicateHlo bool `protobuf:"varint,12,opt,name=deduplicate_hlo,json=deduplicateHlo,proto3" json:"deduplicate_hlo,omitempty"` @@ -2818,11 +2944,9 @@ type ExecutionOptions struct { func (x *ExecutionOptions) Reset() { *x = ExecutionOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecutionOptions) String() string { @@ -2833,7 +2957,7 @@ func (*ExecutionOptions) ProtoMessage() {} func (x *ExecutionOptions) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2939,6 +3063,20 @@ func (x *ExecutionOptions) GetAutoSpmdPartitioningMeshIds() []int64 { return nil } +func (x *ExecutionOptions) GetExecTimeOptimizationEffort() float32 { + if x != nil { + return x.ExecTimeOptimizationEffort + } + return 0 +} + +func (x *ExecutionOptions) GetMemoryFittingEffort() float32 { + if x != nil { + return x.MemoryFittingEffort + } + return 0 +} + func (x *ExecutionOptions) GetDeduplicateHlo() bool { if x != nil { return x.DeduplicateHlo @@ -3005,7 +3143,7 @@ func (x *ExecutionOptions) GetUseShardyPartitioner() bool { // Serialization of HloModuleConfig. See the C++ class definition for // descriptions of each field. // There are no guarantees of backwards or forwards compatibility. -// Next id: 36. +// Next id: 38. type HloModuleConfigProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3021,6 +3159,8 @@ type HloModuleConfigProto struct { UseAutoSpmdPartitioning bool `protobuf:"varint,8,opt,name=use_auto_spmd_partitioning,json=useAutoSpmdPartitioning,proto3" json:"use_auto_spmd_partitioning,omitempty"` AutoSpmdPartitioningMeshShape []int64 `protobuf:"varint,9,rep,packed,name=auto_spmd_partitioning_mesh_shape,json=autoSpmdPartitioningMeshShape,proto3" json:"auto_spmd_partitioning_mesh_shape,omitempty"` AutoSpmdPartitioningMeshIds []int64 `protobuf:"varint,10,rep,packed,name=auto_spmd_partitioning_mesh_ids,json=autoSpmdPartitioningMeshIds,proto3" json:"auto_spmd_partitioning_mesh_ids,omitempty"` + ExecTimeOptimizationEffort float32 `protobuf:"fixed32,36,opt,name=exec_time_optimization_effort,json=execTimeOptimizationEffort,proto3" json:"exec_time_optimization_effort,omitempty"` + MemoryFittingEffort float32 `protobuf:"fixed32,37,opt,name=memory_fitting_effort,json=memoryFittingEffort,proto3" json:"memory_fitting_effort,omitempty"` DeduplicateHlo bool `protobuf:"varint,11,opt,name=deduplicate_hlo,json=deduplicateHlo,proto3" json:"deduplicate_hlo,omitempty"` IntraOpParallelismThreads int64 `protobuf:"varint,12,opt,name=intra_op_parallelism_threads,json=intraOpParallelismThreads,proto3" json:"intra_op_parallelism_threads,omitempty"` DeviceType string `protobuf:"bytes,13,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"` @@ -3052,11 +3192,9 @@ type HloModuleConfigProto struct { func (x *HloModuleConfigProto) Reset() { *x = HloModuleConfigProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleConfigProto) String() string { @@ -3067,7 +3205,7 @@ func (*HloModuleConfigProto) ProtoMessage() {} func (x *HloModuleConfigProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3152,6 +3290,20 @@ func (x *HloModuleConfigProto) GetAutoSpmdPartitioningMeshIds() []int64 { return nil } +func (x *HloModuleConfigProto) GetExecTimeOptimizationEffort() float32 { + if x != nil { + return x.ExecTimeOptimizationEffort + } + return 0 +} + +func (x *HloModuleConfigProto) GetMemoryFittingEffort() float32 { + if x != nil { + return x.MemoryFittingEffort + } + return 0 +} + func (x *HloModuleConfigProto) GetDeduplicateHlo() bool { if x != nil { return x.DeduplicateHlo @@ -3331,11 +3483,9 @@ type HloModuleProtoWithConfig struct { func (x *HloModuleProtoWithConfig) Reset() { *x = HloModuleProtoWithConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleProtoWithConfig) String() string { @@ -3346,7 +3496,7 @@ func (*HloModuleProtoWithConfig) ProtoMessage() {} func (x *HloModuleProtoWithConfig) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3390,11 +3540,9 @@ type ScheduleProto struct { func (x *ScheduleProto) Reset() { *x = ScheduleProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ScheduleProto) String() string { @@ -3405,7 +3553,7 @@ func (*ScheduleProto) ProtoMessage() {} func (x *ScheduleProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3458,11 +3606,9 @@ type HloModuleConfigProto_BoolList struct { func (x *HloModuleConfigProto_BoolList) Reset() { *x = HloModuleConfigProto_BoolList{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleConfigProto_BoolList) String() string { @@ -3473,7 +3619,7 @@ func (*HloModuleConfigProto_BoolList) ProtoMessage() {} func (x *HloModuleConfigProto_BoolList) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3505,11 +3651,9 @@ type HloModuleConfigProto_Int64List struct { func (x *HloModuleConfigProto_Int64List) Reset() { *x = HloModuleConfigProto_Int64List{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleConfigProto_Int64List) String() string { @@ -3520,7 +3664,7 @@ func (*HloModuleConfigProto_Int64List) ProtoMessage() {} func (x *HloModuleConfigProto_Int64List) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3552,11 +3696,9 @@ type HloModuleConfigProto_Int64ListList struct { func (x *HloModuleConfigProto_Int64ListList) Reset() { *x = HloModuleConfigProto_Int64ListList{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HloModuleConfigProto_Int64ListList) String() string { @@ -3567,7 +3709,7 @@ func (*HloModuleConfigProto_Int64ListList) ProtoMessage() {} func (x *HloModuleConfigProto_Int64ListList) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3603,11 +3745,9 @@ type ScheduleProto_Instruction struct { func (x *ScheduleProto_Instruction) Reset() { *x = ScheduleProto_Instruction{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ScheduleProto_Instruction) String() string { @@ -3618,7 +3758,7 @@ func (*ScheduleProto_Instruction) ProtoMessage() {} func (x *ScheduleProto_Instruction) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3668,944 +3808,978 @@ var file_xla_xla_proto_rawDesc = []byte{ 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 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, 0x0c, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0xef, 0x80, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x2e, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, - 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x18, 0xb3, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x29, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, - 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x18, 0x78, 0x6c, - 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, - 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x18, 0x63, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, - 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, - 0x74, 0x68, 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, - 0x78, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, - 0x12, 0x45, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, - 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x7e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x43, - 0x70, 0x75, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x44, - 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x63, - 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x68, 0x6f, 0x6e, - 0x6f, 0x72, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x81, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, 0x73, 0x74, 0x4d, - 0x61, 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3d, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, - 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, - 0x73, 0x18, 0x79, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, - 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x73, - 0x12, 0x3d, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, - 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x6e, 0x61, 0x6e, 0x73, - 0x18, 0x78, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, - 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x4e, 0x61, 0x6e, 0x73, 0x12, - 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x74, - 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xaa, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, 0x73, 0x65, 0x54, 0x68, - 0x75, 0x6e, 0x6b, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, - 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0xc3, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, 0x70, - 0x75, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x67, 0x65, 0x6e, - 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x78, 0x6c, - 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0xb4, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x7b, 0x0a, 0x28, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xc4, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x60, 0x0a, 0x2d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x6c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0xc9, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x28, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, 0x86, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x18, 0xd1, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x78, 0x6c, 0x61, + 0x43, 0x70, 0x75, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x12, 0x62, 0x0a, 0x2e, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x18, 0xb3, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x29, 0x78, 0x6c, 0x61, 0x43, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x68, 0x18, 0x63, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x12, 0x3c, 0x0a, + 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x8c, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x12, 0x45, 0x0a, 0x20, 0x78, + 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, + 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x7e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, 0x73, + 0x74, 0x4d, 0x61, 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x44, 0x69, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, + 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, + 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x48, 0x6f, + 0x6e, 0x6f, 0x72, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x1c, + 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x68, 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x73, 0x18, 0x79, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, + 0x74, 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x73, 0x12, 0x3d, 0x0a, 0x1c, 0x78, + 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, + 0x5f, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x5f, 0x6e, 0x61, 0x6e, 0x73, 0x18, 0x78, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, + 0x68, 0x48, 0x6f, 0x6e, 0x6f, 0x72, 0x4e, 0x61, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, + 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x74, 0x68, 0x75, 0x6e, 0x6b, 0x5f, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xaa, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, + 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, 0x73, 0x65, 0x54, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x18, 0xcf, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x61, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x68, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x63, + 0x70, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0xc3, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x50, 0x61, + 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x67, 0x65, 0x6e, 0x53, 0x70, 0x6c, + 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, + 0x70, 0x75, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0xb4, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x78, + 0x6c, 0x61, 0x43, 0x70, 0x75, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, + 0x75, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x73, 0x61, 0x18, 0xcd, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, 0x78, 0x49, 0x73, 0x61, 0x12, 0x7b, + 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xc4, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, + 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x60, 0x0a, 0x2d, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0xc9, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x28, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x52, 0x0a, + 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x66, 0x64, 0x6f, 0x5f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0xd2, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x3a, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x73, - 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, - 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xc5, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x33, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x53, 0x6f, 0x66, - 0x74, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x18, 0xc2, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x55, 0x6e, 0x73, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, - 0x6f, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x12, 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, - 0x6f, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x26, 0x0a, - 0x0f, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x1e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, - 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, - 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, - 0x73, 0x73, 0x65, 0x73, 0x18, 0x68, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x6c, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x42, - 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x65, - 0x6d, 0x62, 0x65, 0x64, 0x5f, 0x69, 0x72, 0x5f, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, - 0x45, 0x6d, 0x62, 0x65, 0x64, 0x49, 0x72, 0x49, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6c, 0x69, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, - 0x74, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x18, 0x23, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x45, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x48, - 0x6c, 0x6f, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, - 0x61, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x69, 0x67, 0x65, - 0x6e, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x45, 0x69, 0x67, 0x65, 0x6e, 0x12, - 0x30, 0x0a, 0x15, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, 0x64, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, - 0x72, 0x12, 0x1e, 0x0a, 0x0b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x74, 0x7a, - 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x74, - 0x7a, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1f, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x47, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x4c, - 0x6c, 0x76, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x53, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, - 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x48, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x4c, 0x6c, - 0x76, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, - 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x49, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, - 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x74, - 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, - 0x61, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x65, 0x73, - 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x73, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x54, 0x65, - 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6c, 0x6f, - 0x72, 0x12, 0x2c, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, - 0x5f, 0x6d, 0x6b, 0x6c, 0x5f, 0x64, 0x6e, 0x6e, 0x18, 0x61, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, 0x73, 0x65, 0x4d, 0x6b, 0x6c, 0x44, 0x6e, 0x6e, 0x12, - 0x3b, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x64, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x12, 0x3b, 0x0a, 0x1a, - 0x78, 0x6c, 0x61, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x7a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x17, 0x78, 0x6c, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x63, 0x65, 0x73, 0x73, - 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x26, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x72, 0x61, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x5f, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x65, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x43, 0x72, 0x61, 0x73, 0x68, 0x4f, 0x6e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x16, - 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, - 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x78, 0x6c, - 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x66, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x1f, 0x78, 0x6c, 0x61, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x61, 0x73, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x67, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x70, 0x75, - 0x61, 0x73, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x4f, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x68, 0x61, 0x70, - 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x11, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x53, 0x68, 0x61, 0x70, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x12, 0x43, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x48, - 0x6c, 0x6f, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x46, 0x61, - 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x49, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, 0x6b, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, - 0x61, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4f, 0x70, - 0x73, 0x12, 0x5d, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x6c, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x65, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x53, 0x74, - 0x65, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0b, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x74, 0x6f, 0x18, - 0x6d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x54, 0x6f, - 0x12, 0x32, 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x12, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x52, 0x65, 0x12, 0x2e, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, - 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x18, 0x6f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x50, 0x61, - 0x73, 0x73, 0x52, 0x65, 0x12, 0x2e, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, - 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x70, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, - 0x54, 0x65, 0x78, 0x74, 0x12, 0x30, 0x0a, 0x15, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, - 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x71, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, - 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, - 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x64, 0x6f, 0x74, 0x18, 0x72, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, - 0x73, 0x44, 0x6f, 0x74, 0x12, 0x2c, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, - 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x73, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x55, - 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, - 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x74, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x48, 0x74, - 0x6d, 0x6c, 0x12, 0x42, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x66, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x44, - 0x75, 0x6d, 0x70, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, - 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, - 0x18, 0x76, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, - 0x6c, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x78, - 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x17, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x18, 0x78, 0x6c, 0x61, - 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x84, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x78, 0x6c, - 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x61, 0x78, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x90, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x18, - 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x15, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x38, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, - 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x74, - 0x65, 0x78, 0x74, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x44, - 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x4c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, - 0x12, 0x34, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x6e, 0x63, 0x68, 0x77, 0x18, 0x7d, 0x20, 0x01, 0x28, + 0x61, 0x6c, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x64, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x12, 0x72, 0x0a, 0x37, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x18, 0xce, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x30, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x72, 0x12, 0x7a, 0x0a, 0x3b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x66, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xd4, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x34, 0x78, 0x6c, 0x61, + 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x48, 0x65, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x73, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x78, 0x0a, 0x3a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x5f, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0xc5, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x33, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x53, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x26, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, + 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x18, 0xc2, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x12, + 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x14, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x78, 0x6c, 0x61, 0x5f, 0x68, 0x6c, + 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x33, + 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x6c, + 0x6f, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, + 0x78, 0x6c, 0x61, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x4f, 0x6e, 0x6c, 0x79, 0x12, + 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, + 0x6c, 0x6c, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x68, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x6c, 0x6c, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x78, + 0x6c, 0x61, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x3a, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x5f, 0x69, 0x72, + 0x5f, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x21, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x49, 0x72, + 0x49, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x24, + 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, + 0x6f, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x45, + 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x49, 0x6d, 0x70, 0x6c, 0x69, + 0x63, 0x69, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x1a, + 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x5f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x45, 0x69, 0x67, 0x65, 0x6e, 0x12, 0x30, 0x0a, 0x15, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x64, 0x69, + 0x72, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, + 0x75, 0x64, 0x61, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x72, 0x12, 0x1e, 0x0a, 0x0b, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x74, 0x7a, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x74, 0x7a, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, + 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, + 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x53, 0x63, 0x6f, 0x70, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, + 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x61, + 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x47, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x6f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x53, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x48, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x49, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, + 0x76, 0x6d, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x49, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x45, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, + 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, + 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x18, + 0x5a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, + 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x3a, + 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x5b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, + 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x18, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x68, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x13, 0x78, 0x6c, + 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x6d, 0x6b, 0x6c, 0x5f, 0x64, 0x6e, + 0x6e, 0x18, 0x61, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, + 0x73, 0x65, 0x4d, 0x6b, 0x6c, 0x44, 0x6e, 0x6e, 0x12, 0x3b, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, + 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x64, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x61, 0x73, 0x74, 0x4d, + 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x7a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x72, + 0x61, 0x73, 0x68, 0x5f, 0x6f, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x65, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x72, 0x61, 0x73, 0x68, 0x4f, + 0x6e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x7b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, + 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, + 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x66, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x70, 0x75, + 0x61, 0x73, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x67, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x70, 0x75, 0x61, 0x73, 0x6d, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x14, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x68, 0x61, 0x70, + 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x11, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x53, + 0x68, 0x61, 0x70, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x43, 0x0a, 0x1f, 0x78, 0x6c, + 0x61, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x75, 0x73, 0x65, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x6a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x48, 0x6c, 0x6f, 0x45, 0x76, 0x61, 0x6c, 0x75, + 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x46, 0x61, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x49, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x61, + 0x6c, 0x61, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, + 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4f, 0x70, 0x73, 0x12, 0x5d, 0x0a, 0x18, 0x78, 0x6c, + 0x61, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, + 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x74, 0x65, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x53, 0x74, 0x65, 0x70, 0x4d, 0x61, 0x72, 0x6b, 0x65, + 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0b, 0x78, 0x6c, 0x61, + 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x74, 0x6f, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x12, 0x32, 0x0a, 0x16, 0x78, 0x6c, 0x61, + 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x72, 0x65, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x78, 0x6c, 0x61, 0x44, 0x75, + 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x12, 0x2e, 0x0a, + 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x61, + 0x73, 0x73, 0x5f, 0x72, 0x65, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x78, 0x6c, 0x61, + 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x52, 0x65, 0x12, 0x2e, 0x0a, + 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x70, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, + 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x54, 0x65, 0x78, 0x74, 0x12, 0x30, 0x0a, + 0x15, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x71, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x78, 0x6c, + 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x2c, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, + 0x61, 0x73, 0x5f, 0x64, 0x6f, 0x74, 0x18, 0x72, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, + 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x44, 0x6f, 0x74, 0x12, 0x2c, 0x0a, + 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x73, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x44, + 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x14, 0x78, + 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x61, 0x73, 0x5f, 0x68, + 0x74, 0x6d, 0x6c, 0x18, 0x74, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x44, 0x75, + 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, 0x73, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x42, 0x0a, 0x1d, 0x78, + 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x76, + 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x95, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x33, 0x0a, 0x16, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x76, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x13, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, + 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x44, 0x75, + 0x6d, 0x70, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, + 0x61, 0x78, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x84, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x61, + 0x78, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x78, + 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, + 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, + 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x73, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, + 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, + 0x38, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, + 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0xa4, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x41, + 0x73, 0x4c, 0x6f, 0x6e, 0x67, 0x54, 0x65, 0x78, 0x74, 0x12, 0x34, 0x0a, 0x17, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, + 0x6e, 0x63, 0x68, 0x77, 0x18, 0x7d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x4e, 0x63, 0x68, 0x77, 0x12, + 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x6e, 0x68, 0x77, 0x63, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x76, 0x4e, 0x63, 0x68, 0x77, 0x12, 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x6e, 0x68, 0x77, - 0x63, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x4e, 0x68, 0x77, 0x63, 0x12, 0x27, 0x0a, - 0x10, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x70, 0x74, 0x78, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x7f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x50, - 0x74, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x69, 0x72, 0x18, 0x9b, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x75, 0x6d, 0x70, - 0x4c, 0x6c, 0x76, 0x6d, 0x69, 0x72, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, - 0x6d, 0x70, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6c, 0x69, 0x72, 0x5f, 0x70, - 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0xb9, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x6c, 0x69, 0x72, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x45, - 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, - 0x74, 0x68, 0x6d, 0x5f, 0x64, 0x65, 0x6e, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x44, 0x65, 0x6e, 0x79, 0x6c, 0x69, 0x73, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x70, 0x75, - 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x18, 0x87, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x54, 0x70, 0x75, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x4e, 0x61, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x70, 0x75, 0x5f, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x54, 0x70, 0x75, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x49, 0x6e, - 0x66, 0x12, 0x3f, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x78, 0x70, 0x72, 0x6f, 0x66, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x6d, - 0x65, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x58, 0x70, 0x72, 0x6f, 0x66, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x34, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, - 0x73, 0x61, 0x66, 0x65, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, - 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x6e, 0x5f, 0x70, 0x74, 0x78, 0x61, 0x73, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x46, - 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, - 0x6e, 0x50, 0x74, 0x78, 0x61, 0x73, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x35, - 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x73, 0x6d, 0x5f, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x18, - 0x8e, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x68, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, - 0x6e, 0x74, 0x50, 0x65, 0x72, 0x48, 0x65, 0x61, 0x70, 0x12, 0x31, 0x0a, 0x14, 0x78, 0x6c, 0x61, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, - 0x67, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x78, 0x6c, 0x61, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x0a, 0x12, - 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x69, - 0x6e, 0x67, 0x18, 0xfd, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x51, 0x0a, 0x25, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, - 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x21, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x69, - 0x0a, 0x32, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, - 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x8c, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x2c, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6c, 0x76, 0x6d, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x3a, 0x0a, 0x19, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x4f, 0x70, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x69, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x96, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6c, 0x76, 0x6d, - 0x49, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x6d, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, - 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0xa1, 0x02, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, - 0x6e, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, - 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x74, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd4, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x6c, 0x6c, - 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x54, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x2e, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd5, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x28, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x64, 0x75, - 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, - 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x6c, 0x6c, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x42, - 0x79, 0x44, 0x69, 0x6d, 0x12, 0x5c, 0x0a, 0x2c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x79, - 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x81, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x25, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, - 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x44, - 0x69, 0x6d, 0x12, 0x5f, 0x0a, 0x2d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x72, 0x18, 0xd1, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, - 0x64, 0x41, 0x72, 0x12, 0x69, 0x0a, 0x33, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, - 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, - 0x63, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x6b, - 0x0a, 0x34, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x64, 0x75, - 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x2c, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x6c, 0x65, - 0x4c, 0x6f, 0x6f, 0x70, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x43, 0x6f, 0x64, 0x65, 0x4d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x23, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x22, 0x78, 0x6c, - 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, - 0x18, 0xac, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x66, - 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x18, 0xa0, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, - 0x6e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, - 0x6e, 0x5f, 0x66, 0x6d, 0x68, 0x61, 0x18, 0xda, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, - 0x46, 0x6d, 0x68, 0x61, 0x12, 0x4f, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x66, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x75, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x72, 0x6e, 0x67, 0x18, 0xeb, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x75, 0x73, 0x65, - 0x64, 0x41, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x43, 0x75, 0x64, - 0x6e, 0x6e, 0x52, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x18, 0x86, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, - 0x6e, 0x6e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x6f, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x19, 0x78, - 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x99, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x16, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, - 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x5f, 0x72, 0x65, 0x18, 0x9a, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x44, - 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x43, 0x6f, 0x6e, - 0x76, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, - 0x12, 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x87, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, 0x75, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72, 0x65, 0x18, 0x88, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x12, 0x4b, 0x0a, 0x23, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53, 0x6c, 0x69, - 0x63, 0x65, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xa3, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x23, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x73, 0x18, 0xa5, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, - 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x62, 0x6c, 0x61, 0x73, - 0x6c, 0x74, 0x18, 0xa6, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x62, 0x6c, 0x61, 0x73, 0x6c, 0x74, 0x12, - 0x69, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x18, 0x82, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x43, 0x6d, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x47, 0x72, 0x61, 0x70, 0x68, 0x4d, 0x69, - 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x18, 0xd7, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x47, 0x72, 0x61, 0x70, 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x50, - 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x64, 0x7a, 0x6f, 0x6e, - 0x65, 0x5f, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, - 0x67, 0x61, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x53, 0x63, 0x72, - 0x61, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x64, 0x7a, - 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x52, 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, - 0x73, 0x65, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0xae, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x78, - 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, 0x73, 0x65, 0x41, 0x63, 0x6c, 0x12, 0x3e, 0x0a, 0x1c, 0x78, - 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x64, 0x6f, - 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x18, 0xaf, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x44, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x4d, 0x61, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xb5, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x55, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, - 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x68, 0x69, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0xb6, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x61, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x48, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x12, 0x4f, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6c, 0x69, 0x72, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, - 0x61, 0x6e, 0x64, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, - 0x6c, 0x69, 0x72, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x64, 0x46, 0x75, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x6d, - 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0xc3, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, - 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x6d, - 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x5f, 0x64, 0x69, 0x6d, 0x18, - 0xc4, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, - 0x74, 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x44, 0x69, 0x6d, 0x12, 0x3c, - 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, - 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xc5, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, 0x74, 0x6d, - 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x44, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x1b, - 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x5f, 0x74, - 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xc6, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, 0x74, 0x6d, 0x75, 0x6c, - 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4b, 0x44, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, + 0x6e, 0x76, 0x4e, 0x68, 0x77, 0x63, 0x12, 0x27, 0x0a, 0x10, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x70, 0x74, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x7f, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x50, 0x74, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x2e, 0x0a, 0x13, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, + 0x6c, 0x6c, 0x76, 0x6d, 0x69, 0x72, 0x18, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x6c, 0x76, 0x6d, 0x69, 0x72, 0x12, + 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x6d, 0x6c, 0x69, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x74, 0x74, 0x79, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x44, + 0x75, 0x6d, 0x70, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6c, 0x69, 0x72, 0x50, 0x72, 0x65, + 0x74, 0x74, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x64, 0x65, 0x6e, + 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, + 0x68, 0x6d, 0x44, 0x65, 0x6e, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2c, + 0x0a, 0x12, 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6e, 0x18, 0x87, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, + 0x54, 0x70, 0x75, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6e, 0x12, 0x2c, 0x0a, 0x12, + 0x78, 0x6c, 0x61, 0x5f, 0x74, 0x70, 0x75, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x6e, 0x66, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x78, 0x6c, 0x61, 0x54, 0x70, + 0x75, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x12, 0x3f, 0x0a, 0x1c, 0x78, 0x6c, + 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x78, 0x70, 0x72, + 0x6f, 0x66, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x58, + 0x70, 0x72, 0x6f, 0x66, 0x54, 0x72, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x34, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x66, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x5f, 0x6f, 0x6e, 0x5f, 0x70, 0x74, 0x78, 0x61, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x54, 0x6f, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x4f, 0x6e, 0x50, 0x74, 0x78, 0x61, 0x73, 0x4e, + 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x61, 0x73, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, + 0x75, 0x41, 0x73, 0x6d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x52, + 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x65, 0x61, 0x70, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x18, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x21, 0x78, 0x6c, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x68, 0x65, 0x61, 0x70, 0x53, 0x69, 0x7a, + 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x48, 0x65, + 0x61, 0x70, 0x12, 0x31, 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x12, 0x78, 0x6c, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x18, 0xfd, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x6d, + 0x70, 0x69, 0x6e, 0x67, 0x12, 0x51, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x93, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x6f, 0x72, 0x63, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, + 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x69, 0x0a, 0x32, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x8c, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x2c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x4c, 0x6c, 0x76, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, + 0x73, 0x6d, 0x12, 0x3a, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, + 0x94, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x73, 0x12, 0x2f, + 0x0a, 0x14, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x69, + 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x96, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6c, 0x76, 0x6d, 0x49, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x12, + 0x6d, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x18, 0xa1, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x1d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, + 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x59, + 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x9d, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x6c, 0x6c, 0x52, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x5f, + 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x24, + 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x43, + 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x2e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, + 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd5, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x28, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x67, 0x61, + 0x74, 0x68, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x79, 0x5f, + 0x64, 0x69, 0x6d, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x74, 0x68, 0x65, + 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x44, 0x69, 0x6d, 0x12, 0x5c, 0x0a, + 0x2c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, + 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x81, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x25, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x44, 0x69, 0x6d, 0x12, 0x5f, 0x0a, 0x2d, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, + 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, + 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x72, 0x18, 0xd1, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x41, 0x72, 0x12, 0x69, 0x0a, 0x33, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, + 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x75, 0x6d, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x50, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x34, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, + 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0xcb, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x2c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x52, 0x65, 0x64, + 0x75, 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x4d, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0xcd, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x18, 0xac, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x4c, 0x6c, 0x76, 0x6d, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x49, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, + 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, + 0x18, 0xa0, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x66, 0x6d, 0x68, 0x61, 0x18, + 0xda, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x46, 0x6d, 0x68, 0x61, 0x12, 0x4f, 0x0a, + 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x64, + 0x6e, 0x6e, 0x5f, 0x72, 0x6e, 0x67, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x75, 0x73, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x52, 0x6e, 0x67, 0x12, 0x44, + 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x72, + 0x6d, 0x18, 0x86, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x4c, 0x61, 0x79, 0x65, 0x72, + 0x4e, 0x6f, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, + 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x99, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, + 0x70, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x37, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x68, 0x6c, 0x6f, + 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x18, 0x9a, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, 0x48, 0x6c, 0x6f, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x76, + 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x65, + 0x72, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, + 0x74, 0x68, 0x6d, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x87, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x20, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x72, 0x65, + 0x18, 0x88, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x12, 0x4b, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x73, + 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x46, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, + 0x6c, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xa3, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, + 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x18, 0xa5, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, + 0x12, 0x36, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x62, 0x6c, 0x61, 0x73, 0x6c, 0x74, 0x18, 0xa6, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x75, 0x62, 0x6c, 0x61, 0x73, 0x6c, 0x74, 0x12, 0x69, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x82, 0x02, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x43, 0x6d, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x47, 0x72, 0x61, 0x70, 0x68, 0x4d, 0x69, 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0xd7, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x72, 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x63, 0x72, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x67, 0x61, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, + 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x53, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x78, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x64, 0x7a, 0x6f, 0x6e, 0x65, + 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, + 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x63, 0x6c, 0x18, + 0xae, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x55, 0x73, + 0x65, 0x41, 0x63, 0x6c, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, + 0x6d, 0x61, 0x74, 0x68, 0x18, 0xaf, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, + 0x43, 0x70, 0x75, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x44, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x76, + 0x4d, 0x61, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x75, 0x73, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x66, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0xb5, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, + 0x75, 0x55, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x47, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6c, 0x61, + 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x68, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0xb6, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, + 0x61, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x69, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x4f, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6c, 0x69, - 0x72, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x69, - 0x6e, 0x67, 0x18, 0xc0, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, 0x70, - 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6c, 0x69, 0x72, 0x46, 0x75, 0x73, 0x69, 0x6f, - 0x6e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x28, 0x78, 0x6c, - 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x78, - 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x68, 0x69, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x18, 0xba, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x69, 0x64, 0x69, 0x6e, 0x67, - 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x2c, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x69, 0x67, 0x68, - 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x73, 0x79, - 0x6e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x26, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x69, - 0x67, 0x68, 0x65, 0x73, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x41, 0x73, 0x79, - 0x6e, 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x5c, 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x65, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x73, 0x74, - 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x6c, 0x68, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0xcc, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x68, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x70, 0x75, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x72, - 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x70, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x24, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x50, 0x67, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x4f, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x70, 0x5f, 0x66, - 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x84, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x78, 0x6c, - 0x61, 0x47, 0x70, 0x75, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x53, - 0x6c, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x24, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x73, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, - 0x65, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x41, - 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x18, - 0xe3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x6c, 0x6c, - 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x52, - 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x1c, - 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x32, 0x70, 0x18, 0xf6, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x32, 0x70, 0x12, 0x5d, 0x0a, - 0x2c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x73, - 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x72, 0x18, 0xb9, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x75, 0x6e, 0x50, - 0x6f, 0x73, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x2f, - 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, - 0xed, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x2a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x75, 0x74, 0x65, 0x44, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x12, 0x66, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, - 0x18, 0xbb, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, - 0x52, 0x18, 0x78, 0x6c, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, - 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x18, 0xbc, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, - 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x12, 0x6b, 0x0a, 0x33, 0x78, 0x6c, 0x61, 0x5f, 0x67, - 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, - 0x69, 0x6e, 0x74, 0x38, 0x78, 0x33, 0x32, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xbd, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x2d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, 0x6e, 0x6e, 0x49, 0x6e, 0x74, 0x38, 0x78, 0x33, 0x32, 0x43, - 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x61, 0x6e, 0x79, 0x18, - 0xbe, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x72, - 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x41, 0x6e, 0x79, 0x12, 0x47, 0x0a, 0x20, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, - 0xdb, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, - 0x68, 0x61, 0x75, 0x73, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x12, 0x43, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, - 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, - 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x18, 0xde, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x75, 0x6d, 0x70, - 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x54, - 0x6f, 0x12, 0x4a, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, - 0x6e, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x43, 0x0a, - 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x85, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x62, 0x0a, 0x2f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, - 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x64, 0x67, - 0x65, 0x74, 0x5f, 0x67, 0x62, 0x18, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x28, 0x78, 0x6c, - 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, - 0x64, 0x67, 0x65, 0x74, 0x47, 0x62, 0x12, 0x68, 0x0a, 0x32, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, - 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0xe1, 0x01, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, 0x6f, 0x53, - 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, - 0x12, 0x72, 0x0a, 0x37, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x72, 0x69, 0x74, - 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe2, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x30, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, - 0x47, 0x65, 0x6d, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, - 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x64, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0xe5, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, - 0x75, 0x6d, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x64, 0x5f, 0x67, 0x65, - 0x6d, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe8, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x75, 0x6d, 0x70, 0x41, 0x75, 0x74, - 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x64, 0x47, 0x65, 0x6d, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, - 0x75, 0x6e, 0x65, 0x72, 0x18, 0xa7, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x47, 0x65, 0x6d, 0x6d, 0x41, - 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, 0xec, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x73, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x21, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x70, - 0x6c, 0x69, 0x74, 0x5f, 0x6b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, - 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4b, 0x41, 0x75, 0x74, 0x6f, 0x74, - 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x65, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, - 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6c, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, - 0x6c, 0x43, 0x6c, 0x69, 0x71, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6d, - 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, - 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4d, - 0x6f, 0x63, 0x6b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x36, - 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x62, 0x6c, 0x61, 0x73, - 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x14, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, 0x62, 0x6c, 0x61, 0x73, 0x46, 0x61, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x59, 0x0a, 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x72, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x66, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x6c, 0x69, 0x72, 0x54, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x41, 0x6e, 0x64, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x23, 0x78, + 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x18, 0xc3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x43, 0x70, + 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x61, 0x74, + 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, + 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x5f, 0x6d, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xc4, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x16, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, + 0x69, 0x6e, 0x67, 0x4d, 0x44, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, + 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, + 0x5f, 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xc5, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x78, + 0x6c, 0x61, 0x43, 0x70, 0x75, 0x4d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, + 0x67, 0x4e, 0x44, 0x69, 0x6d, 0x12, 0x3c, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, + 0x5f, 0x6d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x5f, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6b, + 0x5f, 0x64, 0x69, 0x6d, 0x18, 0xc6, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x78, 0x6c, 0x61, + 0x43, 0x70, 0x75, 0x4d, 0x61, 0x74, 0x6d, 0x75, 0x6c, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4b, + 0x44, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x6c, 0x69, 0x72, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xc0, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x4d, 0x6c, 0x69, 0x72, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, + 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0xbf, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x43, 0x70, 0x75, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, + 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x27, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, + 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x68, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x18, 0xba, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, + 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x61, 0x74, 0x65, + 0x6e, 0x63, 0x79, 0x48, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x2c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x47, 0x70, + 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x12, 0x5c, 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x6c, + 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x4c, + 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x4d, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6c, 0x68, 0x73, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x74, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, + 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x68, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x47, + 0x70, 0x75, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x5a, + 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x70, 0x67, 0x6c, 0x65, 0x5f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0xd2, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x50, 0x67, 0x6c, 0x65, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x72, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x70, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x84, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x53, 0x6c, 0x6f, 0x70, 0x46, 0x61, 0x63, 0x74, + 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, + 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x64, 0x75, 0x63, + 0x65, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x6c, + 0x6c, 0x5f, 0x67, 0x61, 0x74, 0x68, 0x65, 0x72, 0x18, 0xe3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x12, + 0x54, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x64, 0x75, + 0x63, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, + 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x53, 0x63, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x64, 0x5f, 0x70, 0x32, 0x70, 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x64, 0x50, 0x32, 0x70, 0x12, 0x64, 0x0a, 0x2f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x65, 0x72, + 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0xed, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x2a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x75, 0x74, 0x65, 0x44, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x66, 0x0a, 0x1a, + 0x78, 0x6c, 0x61, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0xbb, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x27, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, + 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, + 0x6d, 0x6d, 0x18, 0xbc, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, + 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, + 0x6d, 0x12, 0x6b, 0x0a, 0x33, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x38, 0x78, 0x33, + 0x32, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xbd, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x2d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x64, + 0x6e, 0x6e, 0x49, 0x6e, 0x74, 0x38, 0x78, 0x33, 0x32, 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x35, + 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, + 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xbe, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x13, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, + 0x6d, 0x6d, 0x41, 0x6e, 0x79, 0x12, 0x47, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x65, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0xdb, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x46, + 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x61, + 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, + 0x74, 0x6f, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, + 0x75, 0x44, 0x75, 0x6d, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x54, 0x6f, 0x12, 0x4a, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0xdf, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6f, 0x61, 0x64, 0x41, + 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x46, 0x72, + 0x6f, 0x6d, 0x12, 0x43, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x85, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x78, 0x6c, 0x61, + 0x47, 0x70, 0x75, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x62, 0x0a, 0x2f, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x5f, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x67, 0x62, 0x18, 0xe0, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x28, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, + 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x47, 0x62, 0x12, 0x68, 0x0a, 0x32, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, + 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x18, 0xe1, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x2b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, + 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x72, 0x0a, 0x37, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x64, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x30, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, + 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x66, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0xe5, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x46, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, + 0x65, 0x64, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0xe8, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x75, + 0x6d, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x64, 0x47, 0x65, 0x6d, 0x6d, 0x46, + 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, + 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x72, 0x18, 0xa7, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x47, 0x65, 0x6d, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x72, 0x12, 0x59, 0x0a, + 0x2a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x69, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18, 0xec, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0xf0, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x12, 0x48, 0x0a, 0x21, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6b, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, + 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4b, + 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x64, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x5f, + 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x70, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x46, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6c, 0x69, 0x71, 0x75, 0x65, + 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf4, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x63, 0x63, 0x6c, 0x43, 0x6c, 0x69, 0x71, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x6d, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x4d, 0x6f, 0x63, 0x6b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, + 0x75, 0x62, 0x6c, 0x61, 0x73, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0xf7, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, 0x62, + 0x6c, 0x61, 0x73, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x59, 0x0a, 0x2a, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, + 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x24, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x68, + 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, 0x6c, - 0x6f, 0x6f, 0x70, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, - 0x6f, 0x70, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x12, 0x72, 0x0a, 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x75, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0xa6, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x55, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x55, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x29, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x64, 0x6f, - 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, - 0x6d, 0x73, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x44, 0x6f, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x72, - 0x0a, 0x37, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x5f, 0x73, 0x70, 0x69, 0x6c, 0x6c, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x6e, 0x5f, 0x61, - 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x30, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x53, 0x70, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, - 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xfb, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x44, 0x65, 0x62, 0x75, 0x67, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x4d, - 0x61, 0x78, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6c, 0x6c, - 0x76, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x80, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x78, 0x6c, - 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6c, 0x76, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x62, 0x5f, - 0x72, 0x61, 0x64, 0x69, 0x78, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x83, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, - 0x75, 0x62, 0x52, 0x61, 0x64, 0x69, 0x78, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x57, 0x0a, 0x29, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, 0x69, - 0x6e, 0x73, 0x75, 0x6d, 0x5f, 0x6d, 0x69, 0x62, 0x18, 0x89, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x46, 0x6f, 0x72, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x69, 0x6e, 0x73, 0x75, - 0x6d, 0x4d, 0x69, 0x62, 0x12, 0x3f, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, - 0x70, 0x70, 0x65, 0x72, 0x18, 0x8a, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x48, - 0x6f, 0x70, 0x70, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x8b, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, - 0x63, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, - 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x18, 0x90, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, - 0x53, 0x70, 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x4d, 0x0a, 0x24, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x63, 0x63, 0x6c, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x73, 0x18, 0x94, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, 0x6c, 0x50, 0x65, 0x72, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x62, 0x6e, 0x76, - 0x70, 0x74, 0x78, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x18, 0x8d, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x4c, 0x69, 0x62, 0x6e, 0x76, 0x70, 0x74, 0x78, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, - 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x8e, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x6f, - 0x74, 0x53, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x18, 0x98, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, - 0x45, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, - 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x66, 0x31, 0x36, 0x5f, 0x36, 0x77, - 0x61, 0x79, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, - 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x66, 0x31, 0x36, - 0x36, 0x77, 0x61, 0x79, 0x47, 0x65, 0x6d, 0x6d, 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, - 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x66, 0x31, 0x36, 0x5f, - 0x33, 0x77, 0x61, 0x79, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x18, 0x97, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x66, - 0x31, 0x36, 0x33, 0x77, 0x61, 0x79, 0x47, 0x65, 0x6d, 0x6d, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x73, 0x18, 0x91, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, - 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x1e, - 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x70, 0x32, 0x70, - 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x92, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, - 0x6c, 0x50, 0x32, 0x70, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6d, 0x6c, 0x69, 0x72, - 0x5f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0xaf, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4d, 0x6c, 0x69, - 0x72, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x4c, 0x0a, - 0x23, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x72, 0x65, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x9b, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1e, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x47, 0x65, 0x6d, 0x6d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x5f, 0x0a, 0x2d, 0x78, - 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x6f, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f, - 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x9c, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6f, 0x74, 0x41, 0x75, 0x74, - 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1f, + 0x6f, 0x6f, 0x70, 0x5f, 0x75, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0xa6, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, + 0x70, 0x55, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, + 0x70, 0x55, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x29, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x6f, 0x72, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, + 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x4d, 0x69, 0x6e, 0x6f, + 0x72, 0x44, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x69, 0x6d, 0x73, 0x12, 0x72, 0x0a, 0x37, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x5f, 0x73, 0x70, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x5f, 0x6f, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xfa, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x30, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x53, 0x70, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x4f, 0x6e, 0x41, 0x75, 0x74, + 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x64, + 0x65, 0x62, 0x75, 0x67, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x78, 0x18, + 0xfb, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x44, 0x65, 0x62, 0x75, 0x67, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x78, 0x12, 0x45, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x80, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4c, 0x6c, 0x76, 0x6d, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x40, + 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x63, 0x75, 0x62, 0x5f, 0x72, 0x61, 0x64, 0x69, 0x78, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x18, + 0x83, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x62, 0x52, 0x61, 0x64, 0x69, 0x78, 0x53, 0x6f, 0x72, 0x74, + 0x12, 0x57, 0x0a, 0x29, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x65, 0x64, 0x5f, 0x65, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x5f, 0x6d, 0x69, 0x62, 0x18, 0x89, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x54, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, + 0x45, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x4d, 0x69, 0x62, 0x12, 0x3f, 0x0a, 0x1c, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, + 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8a, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, + 0x69, 0x74, 0x6f, 0x6e, 0x48, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x20, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x63, 0x63, + 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x8b, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x5f, 0x73, + 0x70, 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x90, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1d, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, + 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x4d, + 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x73, 0x18, 0x94, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, + 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x63, 0x63, 0x6c, 0x50, + 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x73, 0x12, 0x46, 0x0a, + 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6c, 0x69, 0x62, 0x6e, 0x76, 0x70, 0x74, 0x78, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, + 0x18, 0x8d, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x62, 0x6e, 0x76, 0x70, 0x74, 0x78, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x8e, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x44, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, + 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, + 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, 0x69, 0x6e, 0x73, 0x75, + 0x6d, 0x18, 0x98, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x12, 0x53, 0x0a, 0x26, 0x78, + 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xd6, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x62, 0x66, 0x31, 0x36, 0x5f, 0x36, 0x77, 0x61, 0x79, 0x5f, 0x67, 0x65, 0x6d, + 0x6d, 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x66, 0x31, 0x36, 0x36, 0x77, 0x61, 0x79, 0x47, 0x65, + 0x6d, 0x6d, 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x66, 0x31, 0x36, 0x5f, 0x33, 0x77, 0x61, 0x79, 0x5f, 0x67, + 0x65, 0x6d, 0x6d, 0x18, 0x97, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x66, 0x31, 0x36, 0x33, 0x77, 0x61, 0x79, + 0x47, 0x65, 0x6d, 0x6d, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x91, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x4e, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6e, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x92, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, 0x50, 0x32, 0x70, 0x4d, 0x61, + 0x78, 0x4e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x4c, 0x0a, 0x23, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x18, 0x9b, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x47, 0x65, 0x6d, 0x6d, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x54, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x5f, 0x0a, 0x2d, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x61, 0x6f, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, + 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x9c, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6f, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, + 0x6e, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, + 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x9d, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, 0x64, 0x6e, 0x6e, + 0x47, 0x65, 0x6d, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x6d, + 0x65, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x32, 0x70, 0x18, + 0x9f, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x55, 0x73, + 0x65, 0x4d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x32, 0x70, 0x12, + 0x43, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, + 0x75, 0x6e, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0xa0, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, 0x75, 0x6d, 0x70, + 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, + 0x18, 0xa2, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x44, 0x75, 0x6d, 0x70, + 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x50, + 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x73, 0x18, 0xa3, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, + 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x54, 0x72, 0x69, 0x74, + 0x6f, 0x6e, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x73, + 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, + 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x74, + 0x6f, 0x18, 0xa4, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x44, 0x75, 0x6d, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4c, 0x6f, 0x67, 0x73, + 0x54, 0x6f, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, + 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0xa5, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0xa8, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4f, 0x66, 0x66, 0x6c, + 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4f, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, 0xa9, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, + 0x73, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xad, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x38, 0x0a, + 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x61, + 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xb0, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x53, 0x68, 0x61, 0x72, 0x64, 0x41, 0x75, 0x74, + 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, + 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x78, 0x6c, 0x61, 0x47, + 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x43, 0x6f, + 0x73, 0x74, 0x6c, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, + 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6b, 0x65, 0x72, 0x6e, 0x65, + 0x6c, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0xb2, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4b, 0x65, 0x72, 0x6e, 0x65, + 0x6c, 0x43, 0x61, 0x63, 0x68, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x54, 0x0a, 0x27, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x6f, 0x72, 0x18, 0xb5, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x78, 0x6c, + 0x61, 0x47, 0x70, 0x75, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x64, 0x4c, 0x6f, 0x6f, 0x70, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x4f, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18, 0xb6, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x50, 0x65, 0x72, 0x46, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, + 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x6d, 0x64, 0x5f, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0xb7, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x78, 0x6c, 0x61, + 0x43, 0x6d, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x51, 0x0a, 0x26, 0x78, 0x6c, 0x61, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x75, + 0x73, 0x65, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x54, 0x65, 0x6d, 0x70, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x55, 0x73, 0x65, 0x53, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x58, 0x0a, 0x29, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x24, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x73, 0x79, 0x6e, 0x74, + 0x61, 0x78, 0x5f, 0x73, 0x75, 0x67, 0x61, 0x72, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6f, + 0x70, 0x73, 0x18, 0xbb, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x53, 0x79, + 0x6e, 0x74, 0x61, 0x78, 0x53, 0x75, 0x67, 0x61, 0x72, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x4f, 0x70, + 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, 0x74, + 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x72, 0x74, 0x6f, 0x6c, 0x18, + 0xbc, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x75, + 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x47, 0x65, 0x6d, 0x6d, 0x52, 0x74, 0x6f, 0x6c, 0x12, 0x5c, + 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x5f, 0x64, 0x75, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0xbd, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x44, 0x75, 0x72, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, 0x5f, 0x67, 0x65, - 0x6d, 0x6d, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x9d, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, - 0x64, 0x6e, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, - 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, - 0x32, 0x70, 0x18, 0x9f, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x55, 0x73, 0x65, 0x4d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, - 0x32, 0x70, 0x12, 0x43, 0x0a, 0x1e, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x75, - 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xa0, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4d, 0x61, 0x78, 0x53, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x64, - 0x75, 0x6d, 0x70, 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x73, 0x18, 0xa2, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x44, - 0x75, 0x6d, 0x70, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x73, 0x18, 0xa3, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x54, - 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x46, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x1d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, - 0x75, 0x6d, 0x70, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x6c, 0x6f, 0x67, - 0x73, 0x5f, 0x74, 0x6f, 0x18, 0xa4, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x44, 0x75, 0x6d, 0x70, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x4c, - 0x6f, 0x67, 0x73, 0x54, 0x6f, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x72, 0x65, 0x64, - 0x75, 0x63, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0xa5, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, - 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0xa8, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4f, - 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x4f, 0x0a, 0x24, 0x78, 0x6c, 0x61, - 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, - 0x73, 0x18, 0xa9, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, - 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6e, 0x63, 0x63, 0x6c, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xad, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4e, 0x63, 0x63, 0x6c, - 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x38, 0x0a, 0x18, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0xb0, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x28, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x78, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x78, - 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x78, 0x43, 0x6f, 0x73, 0x74, 0x6c, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, - 0xb2, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x4b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x43, 0x61, 0x63, 0x68, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x54, 0x0a, - 0x27, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x5f, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x72, 0x18, 0xb5, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x22, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x55, 0x6e, 0x73, 0x61, 0x66, 0x65, 0x50, 0x69, 0x70, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x4c, 0x6f, 0x6f, 0x70, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x25, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, - 0x6e, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18, 0xb6, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x50, 0x65, 0x72, 0x46, 0x75, - 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x44, 0x69, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x63, 0x6d, 0x64, 0x5f, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0xb7, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, - 0x78, 0x6c, 0x61, 0x43, 0x6d, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x54, 0x72, 0x61, 0x63, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x51, 0x0a, 0x26, 0x78, 0x6c, - 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x54, 0x65, 0x6d, 0x70, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x55, 0x73, 0x65, - 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x58, 0x0a, - 0x29, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, - 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x24, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x61, 0x6c, 0x6c, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x73, - 0x79, 0x6e, 0x74, 0x61, 0x78, 0x5f, 0x73, 0x75, 0x67, 0x61, 0x72, 0x5f, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x6f, 0x70, 0x73, 0x18, 0xbb, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x78, 0x6c, - 0x61, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x53, 0x75, 0x67, 0x61, 0x72, 0x41, 0x73, 0x79, 0x6e, - 0x63, 0x4f, 0x70, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, - 0x61, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x72, 0x74, - 0x6f, 0x6c, 0x18, 0xbc, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x47, 0x65, 0x6d, 0x6d, 0x52, 0x74, 0x6f, - 0x6c, 0x12, 0x5c, 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x5f, - 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, - 0x18, 0xbd, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, - 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x12, - 0x3e, 0x0a, 0x1c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x75, 0x64, 0x6e, 0x6e, - 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, - 0xbe, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, - 0x64, 0x6e, 0x6e, 0x47, 0x65, 0x6d, 0x6d, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x12, - 0x3e, 0x0a, 0x1b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x6c, 0x69, 0x62, 0x6e, 0x76, 0x6a, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0xbf, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x62, 0x6e, 0x76, 0x6a, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x12, - 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x5f, 0x67, 0x65, 0x6d, 0x6d, 0x5f, 0x69, 0x6e, - 0x74, 0x34, 0x18, 0xc0, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x69, 0x74, 0x6f, 0x6e, 0x47, 0x65, 0x6d, - 0x6d, 0x49, 0x6e, 0x74, 0x34, 0x12, 0x2a, 0x0a, 0x11, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, 0x6f, 0x74, 0x18, 0xc1, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x6f, - 0x74, 0x12, 0x4e, 0x0a, 0x24, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, - 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x18, 0xc6, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1f, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x67, - 0x6c, 0x65, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, - 0x72, 0x12, 0x5f, 0x0a, 0x2d, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x73, 0x74, 0x75, - 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0xc7, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x53, - 0x74, 0x75, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x12, 0x5e, 0x0a, 0x2c, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0xc8, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x22, 0x78, 0x6c, 0x61, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0xca, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x1e, 0x78, 0x6c, 0x61, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, - 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, - 0x6d, 0x62, 0x18, 0xcb, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, - 0x75, 0x44, 0x6f, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x4d, 0x62, 0x12, 0x5c, 0x0a, 0x2b, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, - 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, 0x65, 0x75, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xcc, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, - 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x65, 0x75, 0x72, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6d, 0x6d, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0xbe, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x17, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x43, 0x75, 0x64, 0x6e, 0x6e, + 0x47, 0x65, 0x6d, 0x6d, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x1b, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, + 0x69, 0x62, 0x6e, 0x76, 0x6a, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0xbf, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x18, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x4c, 0x69, 0x62, 0x6e, 0x76, 0x6a, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2a, 0x0a, 0x11, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, 0x6f, + 0x74, 0x18, 0xc1, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x41, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x6f, 0x74, 0x12, 0x5f, 0x0a, 0x2d, 0x78, 0x6c, 0x61, 0x5f, + 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x77, + 0x61, 0x72, 0x6e, 0x5f, 0x73, 0x74, 0x75, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xc7, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x53, 0x74, 0x75, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x5e, 0x0a, 0x2c, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0xc8, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x27, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x4b, 0x0a, 0x22, 0x78, 0x6c, 0x61, + 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0xca, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x78, 0x6c, 0x61, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x1f, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x64, 0x6f, 0x74, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x6d, 0x62, 0x18, 0xcb, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x1a, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x44, 0x6f, 0x74, 0x4d, 0x65, 0x72, 0x67, 0x65, + 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x4d, 0x62, 0x12, 0x5c, 0x0a, 0x2b, + 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x68, + 0x65, 0x75, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xcc, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x26, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x48, 0x65, 0x75, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x36, 0x78, 0x6c, + 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0xd0, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x30, 0x78, 0x6c, 0x61, + 0x47, 0x70, 0x75, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x50, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x6a, 0x0a, + 0x33, 0x78, 0x6c, 0x61, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, 0x69, + 0x6e, 0x73, 0x75, 0x6d, 0x18, 0xd3, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x2c, 0x78, 0x6c, 0x61, + 0x47, 0x70, 0x75, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x54, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x65, 0x64, 0x45, 0x69, 0x6e, 0x73, 0x75, 0x6d, 0x12, 0x68, 0x0a, 0x1d, 0x78, 0x6c, 0x61, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x70, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, + 0x63, 0x79, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x18, 0xd5, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x25, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x47, 0x4c, 0x45, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x19, 0x78, 0x6c, 0x61, 0x47, 0x70, 0x75, + 0x50, 0x67, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x19, 0x78, 0x6c, 0x61, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf4, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x58, 0x6c, 0x61, 0x42, 0x61, @@ -4638,7 +4812,7 @@ var file_xla_xla_proto_rawDesc = []byte{ 0x43, 0x54, 0x49, 0x56, 0x45, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x4c, 0x4c, 0x54, 0x4f, 0x41, 0x4c, 0x4c, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x49, 0x56, 0x45, 0x50, 0x45, 0x52, 0x4d, - 0x55, 0x54, 0x45, 0x10, 0x06, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x55, 0x54, 0x45, 0x10, 0x06, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x43, 0x6d, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55, 0x42, 0x4c, 0x41, @@ -4647,195 +4821,221 @@ var file_xla_xla_proto_rawDesc = []byte{ 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x53, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x42, 0x4c, 0x41, 0x53, 0x4c, 0x54, 0x10, 0x07, - 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x41, - 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, - 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x50, - 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x4c, 0x47, 0x4f, - 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x30, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, - 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x4c, 0x47, - 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x31, 0x10, 0x02, 0x12, 0x1f, 0x0a, + 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x53, 0x4c, 0x49, 0x43, + 0x45, 0x10, 0x08, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x4c, - 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x32, 0x10, 0x03, 0x22, 0xac, - 0x01, 0x0a, 0x12, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x55, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x48, 0x49, 0x4c, 0x45, 0x5f, 0x4c, - 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, - 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x57, 0x48, 0x49, - 0x4c, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x10, - 0x01, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x48, 0x49, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, - 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x55, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x48, 0x49, 0x4c, 0x45, - 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, - 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x03, 0x22, 0x76, 0x0a, - 0x11, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x55, 0x54, 0x4f, 0x54, 0x55, 0x4e, 0x45, 0x5f, 0x43, - 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x4f, 0x54, - 0x55, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x55, 0x54, 0x4f, 0x54, - 0x55, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x45, 0x41, 0x44, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x3f, 0x10, 0x40, 0x4a, 0x06, 0x08, 0x86, 0x01, - 0x10, 0x87, 0x01, 0x4a, 0x04, 0x08, 0x50, 0x10, 0x51, 0x4a, 0x04, 0x08, 0x5d, 0x10, 0x5e, 0x4a, - 0x04, 0x08, 0x5e, 0x10, 0x5f, 0x4a, 0x06, 0x08, 0xb1, 0x01, 0x10, 0xb2, 0x01, 0x4a, 0x04, 0x08, - 0x62, 0x10, 0x63, 0x4a, 0x06, 0x08, 0xcf, 0x01, 0x10, 0xd0, 0x01, 0x4a, 0x06, 0x08, 0xab, 0x01, - 0x10, 0xac, 0x01, 0x4a, 0x06, 0x08, 0xad, 0x01, 0x10, 0xae, 0x01, 0x4a, 0x06, 0x08, 0xb3, 0x01, - 0x10, 0xb4, 0x01, 0x4a, 0x06, 0x08, 0x82, 0x01, 0x10, 0x83, 0x01, 0x4a, 0x06, 0x08, 0x8f, 0x01, - 0x10, 0x90, 0x01, 0x4a, 0x06, 0x08, 0x98, 0x01, 0x10, 0x99, 0x01, 0x4a, 0x06, 0x08, 0x96, 0x02, - 0x10, 0x97, 0x02, 0x4a, 0x06, 0x08, 0xb7, 0x01, 0x10, 0xb8, 0x01, 0x4a, 0x06, 0x08, 0xc7, 0x01, - 0x10, 0xc8, 0x01, 0x4a, 0x06, 0x08, 0xc8, 0x01, 0x10, 0xc9, 0x01, 0x4a, 0x06, 0x08, 0xc9, 0x01, - 0x10, 0xca, 0x01, 0x4a, 0x06, 0x08, 0xee, 0x01, 0x10, 0xef, 0x01, 0x4a, 0x06, 0x08, 0x9e, 0x01, - 0x10, 0x9f, 0x01, 0x4a, 0x06, 0x08, 0xab, 0x02, 0x10, 0xac, 0x02, 0x4a, 0x06, 0x08, 0xa1, 0x01, - 0x10, 0xa2, 0x01, 0x4a, 0x06, 0x08, 0xa2, 0x01, 0x10, 0xa3, 0x01, 0x4a, 0x06, 0x08, 0xa9, 0x01, - 0x10, 0xaa, 0x01, 0x4a, 0x06, 0x08, 0xe9, 0x01, 0x10, 0xea, 0x01, 0x4a, 0x06, 0x08, 0xea, 0x01, - 0x10, 0xeb, 0x01, 0x4a, 0x06, 0x08, 0xca, 0x01, 0x10, 0xcb, 0x01, 0x4a, 0x06, 0x08, 0xe6, 0x01, - 0x10, 0xe7, 0x01, 0x4a, 0x06, 0x08, 0xa8, 0x01, 0x10, 0xa9, 0x01, 0x4a, 0x06, 0x08, 0xac, 0x01, - 0x10, 0xad, 0x01, 0x4a, 0x06, 0x08, 0xd3, 0x01, 0x10, 0xd4, 0x01, 0x4a, 0x06, 0x08, 0xdc, 0x01, - 0x10, 0xdd, 0x01, 0x4a, 0x06, 0x08, 0x9e, 0x02, 0x10, 0x9f, 0x02, 0x4a, 0x06, 0x08, 0x93, 0x02, - 0x10, 0x94, 0x02, 0x4a, 0x06, 0x08, 0x99, 0x02, 0x10, 0x9a, 0x02, 0x4a, 0x06, 0x08, 0x9a, 0x02, - 0x10, 0x9b, 0x02, 0x4a, 0x06, 0x08, 0xae, 0x02, 0x10, 0xaf, 0x02, 0x4a, 0x04, 0x08, 0x05, 0x10, - 0x06, 0x4a, 0x04, 0x08, 0x75, 0x10, 0x76, 0x4a, 0x06, 0x08, 0x85, 0x01, 0x10, 0x86, 0x01, 0x4a, - 0x06, 0x08, 0x8b, 0x01, 0x10, 0x8c, 0x01, 0x4a, 0x06, 0x08, 0xb0, 0x01, 0x10, 0xb1, 0x01, 0x4a, - 0x06, 0x08, 0xb2, 0x01, 0x10, 0xb3, 0x01, 0x4a, 0x06, 0x08, 0xb4, 0x01, 0x10, 0xb5, 0x01, 0x4a, - 0x06, 0x08, 0xc1, 0x01, 0x10, 0xc2, 0x01, 0x4a, 0x06, 0x08, 0xd6, 0x01, 0x10, 0xd7, 0x01, 0x4a, - 0x06, 0x08, 0xc2, 0x01, 0x10, 0xc3, 0x01, 0x4a, 0x06, 0x08, 0xf2, 0x01, 0x10, 0xf3, 0x01, 0x4a, - 0x06, 0x08, 0xce, 0x01, 0x10, 0xcf, 0x01, 0x22, 0x3a, 0x0a, 0x19, 0x47, 0x70, 0x75, 0x43, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x5f, 0x66, 0x6c, - 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x46, - 0x6c, 0x61, 0x67, 0x22, 0xb7, 0x01, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x69, 0x72, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xc1, 0x0a, - 0x0a, 0x10, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x18, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x15, 0x73, 0x68, 0x61, 0x70, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, - 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x62, 0x75, - 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x38, - 0x0a, 0x18, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, - 0x75, 0x73, 0x65, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, 0x73, 0x65, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x1f, + 0x0a, 0x1b, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x30, 0x10, 0x01, 0x12, + 0x1f, 0x0a, 0x1b, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x5f, + 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x31, 0x10, 0x02, + 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, + 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x58, 0x50, 0x32, 0x10, + 0x03, 0x22, 0xac, 0x01, 0x0a, 0x12, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x55, + 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x48, 0x49, 0x4c, + 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, + 0x5f, 0x4e, 0x4f, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, + 0x57, 0x48, 0x49, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x5f, 0x42, 0x55, 0x46, 0x46, + 0x45, 0x52, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x48, 0x49, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, + 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x55, 0x4c, + 0x4c, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x48, + 0x49, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x49, + 0x4e, 0x47, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x55, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x10, 0x03, + 0x22, 0x76, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x6f, 0x74, 0x75, 0x6e, 0x65, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x55, 0x54, 0x4f, 0x54, 0x55, 0x4e, + 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x55, + 0x54, 0x4f, 0x54, 0x55, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x55, + 0x54, 0x4f, 0x54, 0x55, 0x4e, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x02, 0x22, 0x75, 0x0a, 0x13, 0x50, 0x47, 0x4c, 0x45, + 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x1d, 0x0a, 0x19, 0x50, 0x47, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x4e, 0x45, + 0x53, 0x53, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x1e, + 0x0a, 0x1a, 0x50, 0x47, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x4e, 0x45, 0x53, + 0x53, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x1f, + 0x0a, 0x1b, 0x50, 0x47, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x4e, 0x45, 0x53, + 0x53, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x4a, + 0x04, 0x08, 0x3f, 0x10, 0x40, 0x4a, 0x06, 0x08, 0x86, 0x01, 0x10, 0x87, 0x01, 0x4a, 0x04, 0x08, + 0x50, 0x10, 0x51, 0x4a, 0x04, 0x08, 0x5d, 0x10, 0x5e, 0x4a, 0x04, 0x08, 0x5e, 0x10, 0x5f, 0x4a, + 0x06, 0x08, 0xb1, 0x01, 0x10, 0xb2, 0x01, 0x4a, 0x04, 0x08, 0x62, 0x10, 0x63, 0x4a, 0x06, 0x08, + 0xcf, 0x01, 0x10, 0xd0, 0x01, 0x4a, 0x06, 0x08, 0xab, 0x01, 0x10, 0xac, 0x01, 0x4a, 0x06, 0x08, + 0xad, 0x01, 0x10, 0xae, 0x01, 0x4a, 0x06, 0x08, 0xb3, 0x01, 0x10, 0xb4, 0x01, 0x4a, 0x06, 0x08, + 0x82, 0x01, 0x10, 0x83, 0x01, 0x4a, 0x06, 0x08, 0x8f, 0x01, 0x10, 0x90, 0x01, 0x4a, 0x06, 0x08, + 0x98, 0x01, 0x10, 0x99, 0x01, 0x4a, 0x06, 0x08, 0x96, 0x02, 0x10, 0x97, 0x02, 0x4a, 0x06, 0x08, + 0xb7, 0x01, 0x10, 0xb8, 0x01, 0x4a, 0x06, 0x08, 0xc7, 0x01, 0x10, 0xc8, 0x01, 0x4a, 0x06, 0x08, + 0xc8, 0x01, 0x10, 0xc9, 0x01, 0x4a, 0x06, 0x08, 0xc9, 0x01, 0x10, 0xca, 0x01, 0x4a, 0x06, 0x08, + 0xee, 0x01, 0x10, 0xef, 0x01, 0x4a, 0x06, 0x08, 0x9e, 0x01, 0x10, 0x9f, 0x01, 0x4a, 0x06, 0x08, + 0xab, 0x02, 0x10, 0xac, 0x02, 0x4a, 0x06, 0x08, 0xa1, 0x01, 0x10, 0xa2, 0x01, 0x4a, 0x06, 0x08, + 0xa2, 0x01, 0x10, 0xa3, 0x01, 0x4a, 0x06, 0x08, 0xa9, 0x01, 0x10, 0xaa, 0x01, 0x4a, 0x06, 0x08, + 0xe9, 0x01, 0x10, 0xea, 0x01, 0x4a, 0x06, 0x08, 0xea, 0x01, 0x10, 0xeb, 0x01, 0x4a, 0x06, 0x08, + 0xca, 0x01, 0x10, 0xcb, 0x01, 0x4a, 0x06, 0x08, 0xe6, 0x01, 0x10, 0xe7, 0x01, 0x4a, 0x06, 0x08, + 0xa8, 0x01, 0x10, 0xa9, 0x01, 0x4a, 0x06, 0x08, 0xac, 0x01, 0x10, 0xad, 0x01, 0x4a, 0x06, 0x08, + 0xb9, 0x02, 0x10, 0xba, 0x02, 0x4a, 0x06, 0x08, 0xd3, 0x01, 0x10, 0xd4, 0x01, 0x4a, 0x06, 0x08, + 0xdc, 0x01, 0x10, 0xdd, 0x01, 0x4a, 0x06, 0x08, 0x9e, 0x02, 0x10, 0x9f, 0x02, 0x4a, 0x06, 0x08, + 0x93, 0x02, 0x10, 0x94, 0x02, 0x4a, 0x06, 0x08, 0x99, 0x02, 0x10, 0x9a, 0x02, 0x4a, 0x06, 0x08, + 0x9a, 0x02, 0x10, 0x9b, 0x02, 0x4a, 0x06, 0x08, 0xaf, 0x02, 0x10, 0xb0, 0x02, 0x4a, 0x06, 0x08, + 0xae, 0x02, 0x10, 0xaf, 0x02, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x75, 0x10, + 0x76, 0x4a, 0x06, 0x08, 0x85, 0x01, 0x10, 0x86, 0x01, 0x4a, 0x06, 0x08, 0x8b, 0x01, 0x10, 0x8c, + 0x01, 0x4a, 0x06, 0x08, 0xb0, 0x01, 0x10, 0xb1, 0x01, 0x4a, 0x06, 0x08, 0xb2, 0x01, 0x10, 0xb3, + 0x01, 0x4a, 0x06, 0x08, 0xb4, 0x01, 0x10, 0xb5, 0x01, 0x4a, 0x06, 0x08, 0xc1, 0x01, 0x10, 0xc2, + 0x01, 0x4a, 0x06, 0x08, 0xd6, 0x01, 0x10, 0xd7, 0x01, 0x4a, 0x06, 0x08, 0xc2, 0x01, 0x10, 0xc3, + 0x01, 0x4a, 0x06, 0x08, 0xdd, 0x01, 0x10, 0xde, 0x01, 0x4a, 0x06, 0x08, 0xf2, 0x01, 0x10, 0xf3, + 0x01, 0x4a, 0x06, 0x08, 0xce, 0x01, 0x10, 0xcf, 0x01, 0x4a, 0x06, 0x08, 0xc0, 0x02, 0x10, 0xc1, + 0x02, 0x4a, 0x06, 0x08, 0xc6, 0x02, 0x10, 0xc7, 0x02, 0x22, 0x3a, 0x0a, 0x19, 0x47, 0x70, 0x75, + 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x5f, + 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x75, 0x6d, 0x6d, + 0x79, 0x46, 0x6c, 0x61, 0x67, 0x22, 0xb7, 0x01, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x61, + 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x69, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, + 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, + 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, + 0xb8, 0x0b, 0x0a, 0x10, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x18, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, + 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x15, 0x73, 0x68, 0x61, 0x70, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x65, + 0x65, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x64, 0x65, + 0x62, 0x75, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0e, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x47, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x10, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, + 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x16, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, + 0x6f, 0x75, 0x67, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, + 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x12, 0x32, + 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, + 0x73, 0x65, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, + 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, + 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x53, + 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, + 0x48, 0x0a, 0x21, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x73, + 0x68, 0x61, 0x70, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, - 0x12, 0x3b, 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, - 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, - 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x48, 0x0a, - 0x21, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, - 0x70, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, - 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x6f, 0x5f, - 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x1b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x12, 0x5f, 0x0a, 0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x08, 0x52, 0x28, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x29, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x08, 0x52, 0x24, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x56, 0x0a, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x73, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x69, 0x61, - 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x08, 0x52, 0x24, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x56, 0x69, 0x61, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x63, 0x0a, 0x1c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x69, 0x72, - 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x69, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x19, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x64, 0x6f, 0x5f, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x66, 0x64, 0x6f, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, - 0x72, 0x64, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, - 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x75, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x79, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x0d, 0x10, - 0x0e, 0x22, 0x84, 0x15, 0x0a, 0x14, 0x48, 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x50, 0x0a, 0x18, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x16, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x28, 0x70, 0x61, 0x72, + 0x4d, 0x65, 0x73, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x1f, 0x61, 0x75, 0x74, + 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x1b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x64, 0x73, 0x12, + 0x41, 0x0a, 0x1d, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1a, 0x65, 0x78, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x66, 0x66, 0x6f, + 0x72, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x66, 0x69, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x45, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x12, + 0x5f, 0x0a, 0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x08, 0x52, 0x28, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x6d, + 0x64, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x57, 0x0a, 0x29, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x73, + 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x08, 0x52, 0x24, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x70, 0x6d, 0x64, 0x53, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x56, 0x0a, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x08, 0x52, 0x24, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x08, 0x52, 0x24, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x56, 0x69, 0x61, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x73, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x13, 0x75, 0x73, 0x65, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x75, 0x74, - 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, - 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, - 0x6e, 0x67, 0x12, 0x48, 0x0a, 0x21, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, - 0x68, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1d, 0x61, - 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x1f, - 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x0a, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x49, - 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x73, 0x12, 0x47, 0x0a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x53, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x63, 0x0a, 0x1c, 0x73, 0x68, + 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x69, 0x72, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x19, 0x73, 0x68, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, + 0x1f, 0x0a, 0x0b, 0x66, 0x64, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x66, 0x64, 0x6f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x79, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, + 0x75, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x79, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x22, 0xfb, 0x15, 0x0a, 0x14, 0x48, + 0x6c, 0x6f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x50, 0x0a, 0x18, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x16, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6e, + 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x28, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x73, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x76, + 0x69, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x08, 0x52, 0x24, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x73, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x56, 0x69, 0x61, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x73, + 0x65, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, 0x73, 0x65, 0x53, 0x70, + 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x3b, + 0x0a, 0x1a, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x75, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x48, 0x0a, 0x21, 0x61, + 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, + 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x70, + 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, + 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1b, + 0x61, 0x75, 0x74, 0x6f, 0x53, 0x70, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x64, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x65, + 0x78, 0x65, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x18, 0x24, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x1a, 0x65, 0x78, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x12, 0x32, + 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x66, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x66, 0x66, 0x6f, + 0x72, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6c, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x48, 0x6c, 0x6f, 0x12, 0x3f, 0x0a, 0x1c, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x6f, 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, @@ -5014,7 +5214,7 @@ func file_xla_xla_proto_rawDescGZIP() []byte { return file_xla_xla_proto_rawDescData } -var file_xla_xla_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_xla_xla_proto_enumTypes = make([]protoimpl.EnumInfo, 9) var file_xla_xla_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_xla_xla_proto_goTypes = []any{ (DebugOptions_ShapeChecks)(0), // 0: xla.DebugOptions.ShapeChecks @@ -5024,32 +5224,33 @@ var file_xla_xla_proto_goTypes = []any{ (DebugOptions_PartitioningAlgorithm)(0), // 4: xla.DebugOptions.PartitioningAlgorithm (DebugOptions_WhileLoopUnrolling)(0), // 5: xla.DebugOptions.WhileLoopUnrolling (DebugOptions_AutotuneCacheMode)(0), // 6: xla.DebugOptions.AutotuneCacheMode - (HloModuleConfigProto_FusionConfigCollection)(0), // 7: xla.HloModuleConfigProto.FusionConfigCollection - (*CompilationEnvironmentsProto)(nil), // 8: xla.CompilationEnvironmentsProto - (*DebugOptions)(nil), // 9: xla.DebugOptions - (*GpuCompilationEnvironment)(nil), // 10: xla.GpuCompilationEnvironment - (*ShardableValueUpdatePairProto)(nil), // 11: xla.ShardableValueUpdatePairProto - (*ExecutionOptions)(nil), // 12: xla.ExecutionOptions - (*HloModuleConfigProto)(nil), // 13: xla.HloModuleConfigProto - (*HloModuleProtoWithConfig)(nil), // 14: xla.HloModuleProtoWithConfig - (*ScheduleProto)(nil), // 15: xla.ScheduleProto - nil, // 16: xla.DebugOptions.XlaBackendExtraOptionsEntry - (*HloModuleConfigProto_BoolList)(nil), // 17: xla.HloModuleConfigProto.BoolList - (*HloModuleConfigProto_Int64List)(nil), // 18: xla.HloModuleConfigProto.Int64List - (*HloModuleConfigProto_Int64ListList)(nil), // 19: xla.HloModuleConfigProto.Int64ListList - nil, // 20: xla.HloModuleConfigProto.DotConfigEntry - nil, // 21: xla.HloModuleConfigProto.AnalysisAllowanceMapEntry - (*ScheduleProto_Instruction)(nil), // 22: xla.ScheduleProto.Instruction - (*anypb.Any)(nil), // 23: google.protobuf.Any - (*xla_data.ShapeProto)(nil), // 24: xla.ShapeProto - (*xla_data.DeviceHandle)(nil), // 25: xla.DeviceHandle - (*xla_data.DeviceAssignmentProto)(nil), // 26: xla.DeviceAssignmentProto - (*xla_data.ProgramShapeProto)(nil), // 27: xla.ProgramShapeProto - (xla_data.PrecisionConfig_Precision)(0), // 28: xla.PrecisionConfig.Precision - (*hlo.HloModuleProto)(nil), // 29: xla.HloModuleProto + (DebugOptions_PGLEStrictnessLevel)(0), // 7: xla.DebugOptions.PGLEStrictnessLevel + (HloModuleConfigProto_FusionConfigCollection)(0), // 8: xla.HloModuleConfigProto.FusionConfigCollection + (*CompilationEnvironmentsProto)(nil), // 9: xla.CompilationEnvironmentsProto + (*DebugOptions)(nil), // 10: xla.DebugOptions + (*GpuCompilationEnvironment)(nil), // 11: xla.GpuCompilationEnvironment + (*ShardableValueUpdatePairProto)(nil), // 12: xla.ShardableValueUpdatePairProto + (*ExecutionOptions)(nil), // 13: xla.ExecutionOptions + (*HloModuleConfigProto)(nil), // 14: xla.HloModuleConfigProto + (*HloModuleProtoWithConfig)(nil), // 15: xla.HloModuleProtoWithConfig + (*ScheduleProto)(nil), // 16: xla.ScheduleProto + nil, // 17: xla.DebugOptions.XlaBackendExtraOptionsEntry + (*HloModuleConfigProto_BoolList)(nil), // 18: xla.HloModuleConfigProto.BoolList + (*HloModuleConfigProto_Int64List)(nil), // 19: xla.HloModuleConfigProto.Int64List + (*HloModuleConfigProto_Int64ListList)(nil), // 20: xla.HloModuleConfigProto.Int64ListList + nil, // 21: xla.HloModuleConfigProto.DotConfigEntry + nil, // 22: xla.HloModuleConfigProto.AnalysisAllowanceMapEntry + (*ScheduleProto_Instruction)(nil), // 23: xla.ScheduleProto.Instruction + (*anypb.Any)(nil), // 24: google.protobuf.Any + (*xla_data.ShapeProto)(nil), // 25: xla.ShapeProto + (*xla_data.DeviceHandle)(nil), // 26: xla.DeviceHandle + (*xla_data.DeviceAssignmentProto)(nil), // 27: xla.DeviceAssignmentProto + (*xla_data.ProgramShapeProto)(nil), // 28: xla.ProgramShapeProto + (xla_data.PrecisionConfig_Precision)(0), // 29: xla.PrecisionConfig.Precision + (*hlo.HloModuleProto)(nil), // 30: xla.HloModuleProto } var file_xla_xla_proto_depIdxs = []int32{ - 23, // 0: xla.CompilationEnvironmentsProto.environments:type_name -> google.protobuf.Any + 24, // 0: xla.CompilationEnvironmentsProto.environments:type_name -> google.protobuf.Any 6, // 1: xla.DebugOptions.xla_gpu_experimental_autotune_cache_mode:type_name -> xla.DebugOptions.AutotuneCacheMode 0, // 2: xla.DebugOptions.xla_gpu_shape_checks:type_name -> xla.DebugOptions.ShapeChecks 1, // 3: xla.DebugOptions.xla_step_marker_location:type_name -> xla.DebugOptions.StepMarkerLocation @@ -5057,35 +5258,36 @@ var file_xla_xla_proto_depIdxs = []int32{ 3, // 5: xla.DebugOptions.xla_gpu_enable_command_buffer:type_name -> xla.DebugOptions.CommandBufferCmdType 4, // 6: xla.DebugOptions.xla_partitioning_algorithm:type_name -> xla.DebugOptions.PartitioningAlgorithm 5, // 7: xla.DebugOptions.xla_gpu_enable_while_loop_unrolling:type_name -> xla.DebugOptions.WhileLoopUnrolling - 16, // 8: xla.DebugOptions.xla_backend_extra_options:type_name -> xla.DebugOptions.XlaBackendExtraOptionsEntry - 24, // 9: xla.ExecutionOptions.shape_with_output_layout:type_name -> xla.ShapeProto - 9, // 10: xla.ExecutionOptions.debug_options:type_name -> xla.DebugOptions - 25, // 11: xla.ExecutionOptions.device_handles:type_name -> xla.DeviceHandle - 26, // 12: xla.ExecutionOptions.device_assignment:type_name -> xla.DeviceAssignmentProto - 11, // 13: xla.ExecutionOptions.shardable_value_update_pairs:type_name -> xla.ShardableValueUpdatePairProto - 27, // 14: xla.HloModuleConfigProto.entry_computation_layout:type_name -> xla.ProgramShapeProto - 9, // 15: xla.HloModuleConfigProto.debug_options:type_name -> xla.DebugOptions - 26, // 16: xla.HloModuleConfigProto.static_device_assignment:type_name -> xla.DeviceAssignmentProto - 26, // 17: xla.HloModuleConfigProto.pre_simulation_device_assignment:type_name -> xla.DeviceAssignmentProto - 11, // 18: xla.HloModuleConfigProto.shardable_value_update_pairs:type_name -> xla.ShardableValueUpdatePairProto - 7, // 19: xla.HloModuleConfigProto.fusion_config_collection:type_name -> xla.HloModuleConfigProto.FusionConfigCollection - 17, // 20: xla.HloModuleConfigProto.fusion_config:type_name -> xla.HloModuleConfigProto.BoolList - 20, // 21: xla.HloModuleConfigProto.dot_config:type_name -> xla.HloModuleConfigProto.DotConfigEntry - 19, // 22: xla.HloModuleConfigProto.layout_config:type_name -> xla.HloModuleConfigProto.Int64ListList - 17, // 23: xla.HloModuleConfigProto.phase_ordering_config:type_name -> xla.HloModuleConfigProto.BoolList - 21, // 24: xla.HloModuleConfigProto.analysis_allowance_map:type_name -> xla.HloModuleConfigProto.AnalysisAllowanceMapEntry - 28, // 25: xla.HloModuleConfigProto.matrix_unit_operand_precision:type_name -> xla.PrecisionConfig.Precision - 29, // 26: xla.HloModuleProtoWithConfig.hlo_module:type_name -> xla.HloModuleProto - 13, // 27: xla.HloModuleProtoWithConfig.config:type_name -> xla.HloModuleConfigProto - 22, // 28: xla.ScheduleProto.instructions:type_name -> xla.ScheduleProto.Instruction - 29, // 29: xla.ScheduleProto.hlo_module:type_name -> xla.HloModuleProto - 18, // 30: xla.HloModuleConfigProto.Int64ListList.lists:type_name -> xla.HloModuleConfigProto.Int64List - 18, // 31: xla.HloModuleConfigProto.DotConfigEntry.value:type_name -> xla.HloModuleConfigProto.Int64List - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 7, // 8: xla.DebugOptions.xla_gpu_pgle_accuracy_checker:type_name -> xla.DebugOptions.PGLEStrictnessLevel + 17, // 9: xla.DebugOptions.xla_backend_extra_options:type_name -> xla.DebugOptions.XlaBackendExtraOptionsEntry + 25, // 10: xla.ExecutionOptions.shape_with_output_layout:type_name -> xla.ShapeProto + 10, // 11: xla.ExecutionOptions.debug_options:type_name -> xla.DebugOptions + 26, // 12: xla.ExecutionOptions.device_handles:type_name -> xla.DeviceHandle + 27, // 13: xla.ExecutionOptions.device_assignment:type_name -> xla.DeviceAssignmentProto + 12, // 14: xla.ExecutionOptions.shardable_value_update_pairs:type_name -> xla.ShardableValueUpdatePairProto + 28, // 15: xla.HloModuleConfigProto.entry_computation_layout:type_name -> xla.ProgramShapeProto + 10, // 16: xla.HloModuleConfigProto.debug_options:type_name -> xla.DebugOptions + 27, // 17: xla.HloModuleConfigProto.static_device_assignment:type_name -> xla.DeviceAssignmentProto + 27, // 18: xla.HloModuleConfigProto.pre_simulation_device_assignment:type_name -> xla.DeviceAssignmentProto + 12, // 19: xla.HloModuleConfigProto.shardable_value_update_pairs:type_name -> xla.ShardableValueUpdatePairProto + 8, // 20: xla.HloModuleConfigProto.fusion_config_collection:type_name -> xla.HloModuleConfigProto.FusionConfigCollection + 18, // 21: xla.HloModuleConfigProto.fusion_config:type_name -> xla.HloModuleConfigProto.BoolList + 21, // 22: xla.HloModuleConfigProto.dot_config:type_name -> xla.HloModuleConfigProto.DotConfigEntry + 20, // 23: xla.HloModuleConfigProto.layout_config:type_name -> xla.HloModuleConfigProto.Int64ListList + 18, // 24: xla.HloModuleConfigProto.phase_ordering_config:type_name -> xla.HloModuleConfigProto.BoolList + 22, // 25: xla.HloModuleConfigProto.analysis_allowance_map:type_name -> xla.HloModuleConfigProto.AnalysisAllowanceMapEntry + 29, // 26: xla.HloModuleConfigProto.matrix_unit_operand_precision:type_name -> xla.PrecisionConfig.Precision + 30, // 27: xla.HloModuleProtoWithConfig.hlo_module:type_name -> xla.HloModuleProto + 14, // 28: xla.HloModuleProtoWithConfig.config:type_name -> xla.HloModuleConfigProto + 23, // 29: xla.ScheduleProto.instructions:type_name -> xla.ScheduleProto.Instruction + 30, // 30: xla.ScheduleProto.hlo_module:type_name -> xla.HloModuleProto + 19, // 31: xla.HloModuleConfigProto.Int64ListList.lists:type_name -> xla.HloModuleConfigProto.Int64List + 19, // 32: xla.HloModuleConfigProto.DotConfigEntry.value:type_name -> xla.HloModuleConfigProto.Int64List + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_xla_xla_proto_init() } @@ -5093,158 +5295,12 @@ func file_xla_xla_proto_init() { if File_xla_xla_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_xla_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*CompilationEnvironmentsProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*DebugOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GpuCompilationEnvironment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ShardableValueUpdatePairProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ExecutionOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleConfigProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleProtoWithConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*ScheduleProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleConfigProto_BoolList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleConfigProto_Int64List); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*HloModuleConfigProto_Int64ListList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*ScheduleProto_Instruction); 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_xla_xla_proto_rawDesc, - NumEnums: 8, + NumEnums: 9, NumMessages: 15, NumExtensions: 0, NumServices: 0, diff --git a/protos/xla_data.proto b/protos/xla_data.proto new file mode 100644 index 0000000..7d9563b --- /dev/null +++ b/protos/xla_data.proto @@ -0,0 +1,1153 @@ +/* Copyright 2017 The OpenXLA Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +package xla; + +option cc_enable_arenas = true; + +// Primitive types are the individual values that can be held in rectangular +// multidimensional arrays. A description of the rectangular multidimensional +// array dimensions / primitive type is given by Shape, below. +// +// LINT.IfChange +enum PrimitiveType { + // Invalid primitive type to serve as default. + PRIMITIVE_TYPE_INVALID = 0; + + // Predicates are two-state booleans. + PRED = 1; + + // Signed integral values of fixed width. + S2 = 26; + S4 = 21; + S8 = 2; + S16 = 3; + S32 = 4; + S64 = 5; + + // Unsigned integral values of fixed width. + U2 = 27; + U4 = 22; + U8 = 6; + U16 = 7; + U32 = 8; + U64 = 9; + + // Floating-point values of fixed width. + // + // Note: if f16s are not natively supported on the device, they will be + // converted to f16 from f32 at arbirary points in the computation. + F16 = 10; + F32 = 11; + + // Truncated 16 bit floating-point format. This is similar to IEEE's 16 bit + // floating-point format, but uses 1 bit for the sign, 8 bits for the exponent + // and 7 bits for the mantissa. + BF16 = 16; + + F64 = 12; + + // FP8 dtypes, as described in this paper: https://arxiv.org/abs/2209.05433 + // + // F8E5M2 has 5 exponent bits and 2 mantissa bits, and is similar to the + // existing IEEE types. + // + // F8E4M3 has 4 exponent bits and 3 mantissa bits, and is similar to the + // existing IEEE types. + // + // F8E4M3FN has 4 exponent bits and 3 mantissa bits. The "FN" means only + // Finite and NaN values are supported. Unlike IEEE types, infinities are not + // supported. NaN is represented when the exponent and mantissa bits are all + // 1s. All other values are finite. + // + // F8E4M3B11FNUZ has 4 exponent bits and 3 mantissa bits and a bias of 11. The + // "FNUZ" means only Finite and NaN values are supported; zero is unsigned. + // Unlike IEEE types, infinities are not supported. NaN is represented when + // the exponent and mantissa bits are all 0s with a sign bit of 1. All other + // values are finite. + // + // F8E3M4 has 3 exponent bits and 4 mantissa bits, and is similar to the + // existing IEEE types. + // + // Support for these dtypes is under development. They do not yet work + // properly in most cases. + // TODO(b/259609697): Fully support FP8. + F8E5M2 = 19; + F8E4M3 = 28; + F8E4M3FN = 20; + F8E4M3B11FNUZ = 23; + F8E3M4 = 29; + + // FP8 dtypes, as described in this paper: https://arxiv.org/abs/2206.02915 + // + // F8E5M2FNUZ has 5 exponent bits and 2 mantissa bits. + // F8E4M3FNUZ has 4 exponent bits and 3 mantissa bits. + // + // The "FNUZ" means only Finite and NaN values are supported; zero is + // unsigned. Unlike IEEE types, infinities are not supported. NaN is + // represented when the exponent and mantissa bits are all 0s with a sign bit + // of 1. All other values are finite. + // + // These differences mean there's an additional exponent value available. To + // keep the same dynamic range as an IEEE-like FP8 type, the exponent is + // biased one more than would be expected given the number of exponent bits + // (8 for Float8E4M3FNUZ and 16 for Float8E5M2FNUZ). + F8E5M2FNUZ = 24; + F8E4M3FNUZ = 25; + + // Complex values of fixed width. + C64 = 15; // Paired F32 (real, imag), as in std::complex. + C128 = 18; // Paired F64 (real, imag), as in std::complex. + + // A tuple is a polymorphic sequence; e.g. a shape that holds different + // sub-shapes. They are used for things like returning multiple values from a + // computation; e.g. a computation that returns weights and biases may have a + // signature that results in a tuple like (f32[784x2000], f32[2000]) + // + // If a shape proto has the tuple element type, it may not have any entries + // in the dimensions field. + TUPLE = 13; + + // An opaque type used for passing context-specific data to a custom + // operation. Shapes of this primitive type will have empty dimensions and + // tuple_shapes fields. + // + // (OPAQUE would be a better name for this identifier, but that conflicts with + // a macro defined in windows.h.) + OPAQUE_TYPE = 14; + + // A token type threaded between side-effecting operations. Shapes of this + // primitive type will have empty dimensions and tuple_shapes fields. + TOKEN = 17; + + // Next = 30 +} +// LINT.ThenChange( +// https://www.tensorflow.org/code/tensorflow/compiler/xla/tools/driver.cc +// ) + +// Describes the padding configuration for Pad operation. The padding amount on +// both edges as well as between the elements are specified for each dimension. +message PaddingConfig { + // Describes the padding configuration for a dimension. + message PaddingConfigDimension { + // Padding amount on the low-end (next to the index 0). May be negative. + int64 edge_padding_low = 1; + + // Padding amount on the high-end (next to the highest index). May be + // negative. + int64 edge_padding_high = 2; + + // Padding amount between the elements. May not be negative. + int64 interior_padding = 3; + } + + // The padding configuration for all dimensions. + repeated PaddingConfigDimension dimensions = 1; +} + +// A DimLevelType indicates the encoding method for a dimension in an array. +// The semantics of this field are identical to those of the MLIR SparseTensor +// dialect. +// This should be kept in sync with the SparseTensor DimLevelType enum: +// https://github.com/llvm/llvm-project/blob/5674a3c88088e668b684326c2194a6282e8270ff/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorAttrDefs.td#L86 +enum DimLevelType { + // The corresponding dimension is Dense, every entry is stored. + DIM_DENSE = 0; + // The corresponding dimension is Compressed, only nonzeros are stored. + DIM_COMPRESSED = 1; + // The corresponding dimension contains a single coordinate, no sibling + // elements for each parent. + DIM_SINGLETON = 2; + // The corresponding dimension is Compressed, but with potential trailing + // zeros, thus an extra upper bound (high) is used to exclude those zeros. + // E.g., indices = [1, 2, 0, 0, 3, 4, 0, 0], position = [(0, 2), (4, 6)]. + DIM_LOOSE_COMPRESSED = 3; +} + +// Describes a tile used in tiling-based layout. Refer to +// g3doc/third_party/xla/docs/tiled_layout.md for details about tiling-based +// layout. +message TileProto { + // Number of elements in each dimension of the tile. It's ordered from the + // most major dimension of the tile to the most minor dimension of the tile. + // The dimensions correspond to a suffix of the dimensions of the shape being + // tiled. + repeated int64 dimensions = 1; +} + +// Describes how data should be split between different memories. +message SplitConfigProto { + // The dimension that is split. + int64 dimension = 1; + // The indices where each split point occurs. For example, if the dimension + // size is 1024, a split_indices value of {512} indicates a two-way split of + // data through the middle. + repeated int64 split_indices = 2; +} + +// A layout describes how the array is placed in (1D) memory space. This +// includes the minor-to-major ordering of dimensions within a shape. +// +// Clients must specify the layouts of input Literals to the +// computation. Layouts specified in interior operations which take Shapes (for +// example, Convert) are ignored. +// +// See the XLA documentation for more information on shapes and layouts. +// +// LINT.IfChange +message LayoutProto { + // The dimension level type list for this array, specifying the way in which + // each array dimension is represented in memory. If this list is empty, the + // array is assumed to be dense. + repeated DimLevelType dim_level_types = 9; + + // Whether each dimension is unique or ordered. Each of the following lists + // must be empty, or have one entry for each entry of dim_level_types. If + // either list is empty, all dimensions are assumed to be unique and ordered, + // respectively. Entries in this list may not be false for some DimLevelType + // values (such as DIM_DENSE in particular). + repeated bool dim_unique = 13; + repeated bool dim_ordered = 14; + + // Sequence of dimension numbers, from minor (fastest varying index) to major + // (slowest varying index). This field is required. + repeated int64 minor_to_major = 1; + + // A sequence of tiles, starting from the tile that's applied first to the + // Shape. + // + // TODO(b/119839262): implement tiling in each backend or add Unimplemented + // error. + repeated TileProto tiles = 6; + + // The shape is padded at the end to multiple of, in terms of number of + // elements. This is useful when tiling does not bring the shape to certain + // desired granules. Tiling effectively pads/reshapes/transposes the shape + // to another shape. This field pads the total number of elements of that + // new shape to a multiple of certain number of elements. This is useful such + // as we want a layout which does not tile the data but still requires it to + // be padded to certain number of elements. + int64 tail_padding_alignment_in_elements = 16; + + // (Optional) Bit size of each element. When unspecified or being 0, default + // to ShapeUtil::ByteSizeOfPrimitiveType. + int64 element_size_in_bits = 7; + + // Memory space where this array resides. The integer field is interpreted in + // a backend-specific manner. + int64 memory_space = 8; + + // The integer types to be used for indices and pointers. These fields must + // not be used unless the layout represents a sparse array. The PrimitiveType + // must correspond to an unsigned integer (U8, U16, U32, or U64). + // If not provided, the compiler will use the largest unsigned integer + // that is naturally supported by the target device (U32 or U64 in currently + // supported devices). + PrimitiveType index_primitive_type = 11; + PrimitiveType pointer_primitive_type = 12; + + // The physical, on-device shape used to represent the shape this layout + // belongs to. Only used for sparse arrays. + // The layout(s) contained within the physical shape should not also contain + // a physical shape. + ShapeProto physical_shape = 10; + + // The dynamic shape metadata size in bytes in front of the shape data. The + // field may be non-zero for a static shape whose associated buffer is for a + // dynamic shape, e.g. a result of SliceToDynamic. + int64 dynamic_shape_metadata_prefix_bytes = 15; + + // The split configurations which describe if/how the data is split between + // different memories. + repeated SplitConfigProto split_configs = 17; + + // Important: if any field is added, be sure to modify ShapeUtil::Equal() and + // LayoutUtil::Hash appropriately to account for the new field. + + reserved 2; + reserved "padded_dimensions"; + reserved 3; + reserved "padding_value"; + reserved 4; + reserved "format"; + reserved 5; + reserved "max_sparse_elements"; +} +// LINT.ThenChange( \ +// https://www.tensorflow.org/code/tensorflow/compiler/xla/shape_util.cc, \ +// https://www.tensorflow.org/code/tensorflow/compiler/xla/layout_util.cc) + +// A shape describes the number of dimensions in the array, the size of each +// dimension, and the primitive component type. +// +// Tuples are a special case in that they have rank zero and have tuple_shapes +// defined. +// +// See the XLA documentation for more information on shapes and layouts. +// +// LINT.IfChange +message ShapeProto { + reserved 1; + reserved "rank"; + + // The element type for this shape. + PrimitiveType element_type = 2; + + // The size (number of elements) for each dimension, or an upper bound on the + // size if the dimension is dynamic. In XLA, dimensions are numbered from 0 + // to N-1 for an N-dimensional array. The first element of 'dimensions' is the + // size of dimension 0, the second element is the size of dimension 1, and so + // forth. Empty list indicates a scalar. + // + // If the respective element in 'is_dimension_dynamic' is true then the value + // in this field represents an upper bound on the size of the dimension. + repeated int64 dimensions = 3; + + // For tuples only, the shapes of constituent shapes in the tuple sequence. + repeated ShapeProto tuple_shapes = 4; + + // The layout used to back this shape. + LayoutProto layout = 5; + + // For arrays, this indicates whether or not each dimension is + // dynamically-sized. The number of elements in this repeated field should be + // zero (indicating that no dimensions are dynamic) or equal to the number of + // elements in the 'dimensions' field. + repeated bool is_dynamic_dimension = 6; + + // Important: if any field is added, be sure to modify ShapeUtil::Equal(), + // ShapeUtil::Compatible() and ShapeUtil::Hash() appropriately to account for + // the new field. +} +// LINT.ThenChange( \ +// https://www.tensorflow.org/code/tensorflow/compiler/xla/shape_util.cc) + +// Shape of the parameters and output of a computation (like a traditional +// function signature). +message ProgramShapeProto { + repeated ShapeProto parameters = 1; + ShapeProto result = 2; + repeated string parameter_names = 3; +} + +// Statistics of a computation. +message ComputationStats { + // The number of floating point operations in the computation. + double flop_count = 1; + + // The number of transcendental operations (e.g., exp) in the computation. + double transcendental_count = 2; +} + +// The type optimization profiles in use for Op-level optimizations. +enum ProfileType { + INVALID = 0; + WINDOW = 1; + FLAG = 2; + INTEGER = 3; +} + +// The source of the optimization profile. +enum ProfileSource { + PROFILE_SOURCE_UNKNOWN_SOURCE = 0; + PROFILE_SOURCE_EMBEDDED = 1; + PROFILE_SOURCE_REMOTE = 2; +} + +// The compilation event that triggered the use of the profile. +enum CompilationEvent { + COMPILATION_EVENT_UNKNOWN_EVENT = 0; + COMPILATION_EVENT_FIRST_COMPILATION = 1; + COMPILATION_EVENT_RECOMPILATION = 2; +} + +// Symbolization metadata for HLO Instructions. +// +// This metadata is used for debugging XLA code generation, as well as +// performance profiling of XLA-generated executables. +message OpMetadata { + // The framework op name that generated this XLA op. + // + // Frameworks that build on top of XLA should mirror the names of their ops + // back to users by specifying the op_type. In this way, even if the + // framework's "ops" are implemented as multiple XLA HLO Ops, they can be + // grouped appropriately. (e.g. if a SoftMax layer is emitted into XLA as + // multiple ops, then each op should have the op_type be "SoftMax".) + string op_type = 1; + // The user-specified name of the op. + // + // This name is often unique within a computation. Note: some frameworks + // add auto-generated names if the user does not provide one. + string op_name = 2; + // Indicate a file and line that this op is associated to in a user's program. + // + // e.g. it could be the file and line of user code that generated the op. + string source_file = 3; + int32 source_line = 4; + + // Deprecated, use [ProfileInfo][profile_type] instead. + repeated ProfileType profile_type = 5 [deprecated = true]; + + reserved 6; + reserved "creation_pass_id"; + + reserved 7; + reserved "logical_creation_pass_id"; + + // The footprint of the generated code for the instruction. + int64 size_of_generated_code_in_bytes = 8; + // The size of the working set, i.e., the amount of memory, used by the + // instruction in a compiler-managed fast device memory. + int64 size_of_memory_working_set_in_bytes = 9; + + // Information about the optimization profile that this operation contains. + message ProfileInfo { + // The type of optimization profiles that this operation contains. + repeated ProfileType profile_type = 1; + // Speedup of tuned config compared to default config. + // TODO(b/203817882) Set the relative_speedup. + double relative_speedup = 2; + // The source of the optimization profiles that this operation contains. + ProfileSource profile_source = 3; + // The compilation event that triggered the use of the profiles. + CompilationEvent compilation_event = 4; + } + + // Profile information for the Op. + ProfileInfo profile_info = 10; + + // Deduplicated HLO name for this op. In some cases, we can have multiple + // instructions (e.g. fusions) that are considered duplicates. We want to + // group them together under the same name so that we can group them together + // during analysis (e.g. HLO Op Profile tool in Xprof). + // E.g. If we have fusion.1, fusion.2, and fusion.3 marked as duplicates, + // fusion.2 and fusion.3 will have deduplicated_name = fusion.1 + string deduplicated_name = 12; + + // Whether to preserve the layout of the HLO op. + bool preserve_layout = 13; + + // 1-based position of the frame in frames flat array. + // Ids are 1-based to keep 0 value as representation of non-set property. + int32 stack_frame_id = 15; + + // Instruction name available upon scheduling. + string scheduling_name = 16; + + reserved 14; +} + +// Profile data from the execution of a computation. +message ExecutionProfile { + // Whether the executable was read from the compilation cache. + bool compilation_cache_hit = 1; + + // The time in milliseconds spent to compile the computation. This only set if + // the executable was not read from the compilation cache + // (compilation_cache_hit == false). + int64 compile_time_ms = 2; + + // The number of cycles spent for the computation. This does not include the + // time taken for the data transfers between the host and the device. This is + // a target-dependent field and only used for debugging purposes. + int64 compute_cycle_count = 3; + + // The time in nanoseconds spent for the computation, without data transfer. + int64 compute_time_ns = 4; + + // The time in nanoseconds spent for the entire computation, including the + // result data transfer time. Current implementation does not spend any cycles + // for the input data transfer since the memory is initialized with the proper + // values before the execution. + int64 compute_and_transfer_time_ns = 5; + + // The size of the binary code in the executable. + int64 executable_size_in_bytes = 6; + + // Whether this profile was drawn from a cache of profiles instead of from + // execution on the hardware. + bool profile_cache_hit = 7; + + // Whether a warm-up run of the computation was executed before the + // measured execution. + bool warmup_run_executed = 8; +} + +// Handle given to a user that represents an execution that the user launched +// asynchronously on the device. +message ExecutionHandle { + int64 handle = 1; +} + +// Handle given to a user that represents a globally accessible allocation. +// Contrast this against a ComputationDataHandle, which is not globally +// accessible, since it only exists within a specific computation. +message GlobalDataHandle { + int64 handle = 1; +} + +// Handle given to a user that represents a replicated virtual device. Each +// replicated device represents N physical devices for execution where N is the +// number of replicas. +message DeviceHandle { + int64 handle = 1; + + // The number of model-parallel virtual devices that communicate via XLA + // Send/Recv instructions. + int64 device_count = 2; +} + +// Handle given to a user to represent a channel between two computations +// via a Send and Recv instruction pair. Channels are unbuffered, so Send +// Send instructions will be blocked until the data is transferred. +message ChannelHandle { + int64 handle = 1; + enum ChannelType { + // Invalid primitive type to serve as default. + CHANNEL_TYPE_INVALID = 0; + + // A channel for sending data between devices. + DEVICE_TO_DEVICE = 1; + + // A channel for sending data from the device to the host. Can only be used + // with a Send operation. + DEVICE_TO_HOST = 2; + + // A channel for sending data from the host to the device. Can only be used + // with a Recv operation. + HOST_TO_DEVICE = 3; + } + ChannelType type = 2; +} + +// DeviceAssignmentProto is a serialized form of DeviceAssignment class, which +// represents the device ids assigned to a set of replicated computations. +// See xla::DeviceAssignment class comment for more details. +message DeviceAssignmentProto { + int32 replica_count = 1; + int32 computation_count = 2; + + // Each logical computation runs on replica_count physical devices. + // ComputationDevice represents the device ids assinged to the replicas. + message ComputationDevice { + repeated int64 replica_device_ids = 1; + } + repeated ComputationDevice computation_devices = 3; +} + +// Literals are used when the server and client need to exchange materialized +// data / results. Literals are also used to describe constants used in +// computations. +// +// Transfers to/from the client are encoded in literal form, and the structure +// of the repeated fields is implied by the shape. +message LiteralProto { + ShapeProto shape = 1; + repeated bool preds = 2; + bytes s2s = 26; + bytes s4s = 21; + bytes s8s = 15; + bytes u2s = 27; + bytes u4s = 22; + bytes u8s = 3; + repeated int32 s32s = 4; + repeated int64 s64s = 5; + repeated uint32 u32s = 6; + repeated uint64 u64s = 7; + repeated float f32s = 8; + repeated double f64s = 9; + repeated float c64s = 12; // Stored as interleaved real, imag floats. + repeated double c128s = 18; // Stored as interleaved real, imag doubles. + repeated LiteralProto tuple_literals = 10; + // The F16s, BF16s, U16s and S16s are encoded in little endian byte order + bytes f16s = 11; + bytes bf16s = 13; + bytes u16s = 16; + bytes s16s = 17; + bytes f8e5m2s = 19; + bytes f8e4m3s = 28; + bytes f8e4m3fns = 20; + bytes f8e4m3b11fnuzs = 23; + bytes f8e5m2fnuzs = 24; + bytes f8e4m3fnuzs = 25; + bytes f8e3m4s = 29; + repeated int64 sparse_indices = 14; + // Next = 30 +} + +message WindowDimension { + // The size of the window in this dimension. For a rectangle, this would be + // the width or height. + int64 size = 1; + + // The stride at which the window moves across the base area in this + // dimension. In other words, this is the spacing between different + // positions of the window in this dimension. + int64 stride = 2; + + // If positive, means the amount of padding to add to the base area at the low + // end of this dimension; if negative, its negative means the number of + // elements removed from the low end of this dimension. For example, in the + // horizontal dimension of a rectangle, this would be the number of padding + // values to pad on the left, given that indices increase when going right. + // The actual padding value depends upon the context. Convolution pads with + // zeros. ReduceWindow and SelectAndScatter pads with the reduce function's + // init value. + int64 padding_low = 3; + + // As padding_low, but on the high end of this dimension. For example, in the + // horizontal dimension of a rectangle, this would be the number of values to + // pad on the right, given that indices increase when going right. + int64 padding_high = 4; + + // Dilation factor of the sliding window in this dimension. A dilation factor + // of 1 means no dilation. window_dilation - 1 no-op entries ("holes") are + // implicitly placed between each kernel element. This value may not be less + // than 1. See documentation for convolution. + int64 window_dilation = 5; + + // Dilation factor of the base area in this dimension. A dilation factor of 1 + // means no dilation. base_dilation - 1 no-op entries ("holes") are implicitly + // placed between each base area element. This value may not be less than 1. + // See documentation for convolution. + int64 base_dilation = 6; + + // Window reversal means that this dimension was logically reversed before the + // operation. + bool window_reversal = 7; +} + +// Describes the windowing in an operation such as convolution. +// +// The window is moved across a base area and for each position of the +// window a computation is performed. The field below describes the +// window and the movement of the window across a base area. +message Window { + repeated WindowDimension dimensions = 1; +} + +// Describes the dimension numbers for a gather operation. +// +// See https://www.tensorflow.org/performance/xla/operation_semantics#gather for +// more details. +message GatherDimensionNumbers { + // "Window indices" is a term for a set of indices that index into the + // interior of a dynamic-slice from the input tensor, the starting indices for + // which were computed from output_gather_dims (see the operation semantic for + // how this is defined) and the start_indices tensor. + // + // The window indices for a specific output index Out is computed as: + // + // i = 0 + // for (k : [0, input_tensor_shape.rank)) + // window_indices[k] = + // if k in collapsed_slice_dims + // then 0 + // else Out[offset_dims[i++]] + repeated int64 offset_dims = 1; + repeated int64 collapsed_slice_dims = 2; + + // This is interpreted as a map from i to start_index_map[i]. It + // transforms the gather index looked up from the start_indices tensor into + // the starting index in the input space. + repeated int64 start_index_map = 3; + + // The dimension in the start_indices input that contains the starting + // indices. + int64 index_vector_dim = 4; + + // This is the batch dimensions in the operand. + repeated int64 operand_batching_dims = 5; + + // This is the batch dimensions in the index, and it should be the same size + // as operand_batching_dims. + repeated int64 start_indices_batching_dims = 6; +} + +// Describes the dimension numbers for a scatter operation. +// +// All the fields are similar to the corresponding fields in +// GatherDimensionNumbers. Differences are noted below. +message ScatterDimensionNumbers { + // The set of dimensions in the updates shape that are window dimensions. + repeated int64 update_window_dims = 1; + // The set of window dimensions that must be inserted into the updates shape. + repeated int64 inserted_window_dims = 2; + + repeated int64 scatter_dims_to_operand_dims = 3; + int64 index_vector_dim = 4; + + // This is the batch dimension in the input. + repeated int64 input_batching_dims = 5; + + // This is the batch dimension in the index. + repeated int64 scatter_indices_batching_dims = 6; +} + +message ConvolutionDimensionNumbers { + // The number of the dimension that represents batch in the input. + int64 input_batch_dimension = 7; + + // The number of the dimension that represents features in the input. + int64 input_feature_dimension = 8; + + // The dimension numbers for the spatial dimensions that the window + // moves through in the input. + repeated int64 input_spatial_dimensions = 11; + + // The number of the dimension that represents input features in the + // convolutional kernel (rhs). + int64 kernel_input_feature_dimension = 3; + + // The number of the dimension that represents output features in + // the convolutional kernel (rhs). + int64 kernel_output_feature_dimension = 4; + + // The dimension numbers for the spatial dimensions that the window + // moves through in the kernel (rhs). window.strides(0) is the + // stride in the kernel_spatial_dimensions(0) dimension. + repeated int64 kernel_spatial_dimensions = 6; + + // The number of the dimension that represents batch in the output. + int64 output_batch_dimension = 9; + + // The number of the dimension that represents features in the output. + int64 output_feature_dimension = 10; + + // The dimension numbers for the spatial dimensions that the window + // moves through in the output. + repeated int64 output_spatial_dimensions = 12; + + // Next = 13 +} + +enum PaddingType { + PADDING_INVALID = 0; + PADDING_VALID = 1; // Only valid portion of the base are covered. + PADDING_SAME = 2; // Extra is added to produce same output size as the input. +} + +enum FftType { + FFT = 0; // Forward FFT; complex in, complex out. + IFFT = 1; // Inverse FFT; complex in, complex out. + RFFT = 2; // Forward real FFT; real in, fft_length / 2 + 1 complex out + IRFFT = 3; // Inverse real FFT; fft_length / 2 + 1 complex in, + // fft_length real out +} + +message DotDimensionNumbers { + // The dimension numbers that represent the 'lhs' contracting dimensions. + repeated int64 lhs_contracting_dimensions = 1; + // The dimension numbers that represent the 'rhs' contracting dimensions. + repeated int64 rhs_contracting_dimensions = 2; + // The dimension numbers that represent the 'lhs' batch dimensions. + repeated int64 lhs_batch_dimensions = 3; + // The dimension numbers that represent the 'rhs' batch dimensions. + repeated int64 rhs_batch_dimensions = 4; +} + +message RaggedDotDimensionNumbers { + // The contracting and batch dimensions of the 'lhs' and 'rhs'. + DotDimensionNumbers dot_dimension_numbers = 1; + // The dimension numbers that represent the 'lhs' ragged dimensions. + repeated int64 lhs_ragged_dimensions = 2; + // The dimension numbers that represent the 'rhs' group dimensions. + repeated int64 rhs_group_dimensions = 3; +} + +enum SparsityType { + SPARSITY_INVALID = 0; + + // Structured N:M sparsity. + SPARSITY_STRUCTURED_N_M = 1; + + // Next: 2 +} + +// Contains sparsity metadata for a sparse dot operation. +// The only supported type atm is structured 2:4 sparsity, which is natively +// supported on NVidia GPUs. +// Restrictions: +// - only one operand of the dot operation may be sparse; +// - only the contracting dimension may be sparse. +message SparsityDescriptor { + SparsityType type = 1; + + // Sparse operand index (0 or 1). + int32 index = 2; + // Sparse dimension number. + int32 dimension = 3; + + // Structured N:M sparsity (N < M). + int32 n = 4; + int32 m = 5; + + // Next: 6 +} + +enum RandomDistribution { + RNG_INVALID = 0; + + // Creates a uniform-distribution-generated random number on the semi-open + // interval [parameter[0], parameter[1]). + RNG_UNIFORM = 1; + + // Creates a normal-distribution-generated random number with mean + // parameter[0] and standard deviation parameter[1]. + RNG_NORMAL = 2; + + // Next: 4 +} + +enum RandomAlgorithm { + RNG_DEFAULT = 0; // Backend dependent default algorithm. + RNG_THREE_FRY = 1; + RNG_PHILOX = 2; + // Next: 2 +} + +message TriangularSolveOptions { + // If true, solves ax = b. If false, solves xa = b. + bool left_side = 1; + + // If true, 'a' is lower triangular. If false, 'a' is upper triangular. + bool lower = 2; + + // If true, the diagonal elements of 'a' are assumed to be 1 and not accessed. + bool unit_diagonal = 3; + + // Should we transpose or use the adjoint of 'a'? + enum Transpose { + TRANSPOSE_INVALID = 0; + NO_TRANSPOSE = 1; // Don't transpose 'a'. + TRANSPOSE = 2; // Transpose 'a'. + ADJOINT = 3; // Complex conjugate and transpose 'a'. + } + Transpose transpose_a = 4; +} + +message CholeskyOptions { + // If true, uses the lower triangle of `a`. If false, uses the upper triangle + // of `a`. + bool lower = 1; +} + +// Attributes of the sort custom call (cub::DeviceRadixSort). +message SortOptions { + bool descending = 1; +} + +// Generic map of attributes used to pass hints / configuration options from +// the Python frontend to the XLA backend. +message FrontendAttributes { + map map = 1; +} + +// Represents a single statistic to track. +message Statistic { + // Must be a single word consisting of any alphanumeric characters + string stat_name = 1; + // Must be within a range of [0, 100], in order for the graph dumper to + // properly render the statistic onto the graph. + double stat_val = 2; +} + +// Represents the information needed to visualize propagation statistics when +// rendering an HLO graph. This includes an array of statistics as well as the +// index of the statistic to render. +message StatisticsViz { + int64 stat_index_to_visualize = 1; + repeated Statistic statistics = 2; +} + +// LINT.IfChange +message OpSharding { + enum Type { + // This sharding is replicated across all devices (implies maximal, + // all other fields are unused). + REPLICATED = 0; + // This sharding is maximal - one device runs the entire operation. + MAXIMAL = 1; + // This sharding is a tuple - only the tuple_shardings field is valid. + TUPLE = 2; + // None of the above; tile_shape and tile_assignment are both used. + OTHER = 3; + // This op is manually sharded: the shapes are already partitioned and the + // partitioner should not change this op. + MANUAL = 4; + // This sharding is a placeholder sharding with lowest precedence, it can be + // overwriten by any other shardings. + UNKNOWN = 5; + } + Type type = 1; + // The shape of the sharded tile. + ShapeProto tile_shape = 2; + // The shape of the tile assignment tensor - this must be the same rank as + // tile_shape and the product of its dimensions must equal + // tile_assignment_devices.size(). + repeated int64 tile_assignment_dimensions = 3; + // Flattened list of device IDs. The order of flattening is the same as used + // by IndexUtil::MultiToLinearIndex(tile_assignment_shape). + // Only one of tile_assignment_devices and iota_dimensions shall be non-empty. + repeated int64 tile_assignment_devices = 4; + // If type == TUPLE, the sub-shardings, one per leaf node in the tuple shape, + // in pre-order. The tuple shape could be nested; here we store just a + // flattened list of all leaves in the tuple shape. Note that the tuple shape + // is not stored here; shardings do not store the shapes to which they are + // applied, this is inferred from the instruction this sharding gets attached + // to. + repeated OpSharding tuple_shardings = 5; + + // Only used for OTHER type. If true, data is sharded according to other + // dimensions of tile_assignment(), but replicated across devices along the + // last dimension. (Experimental) + bool replicate_on_last_tile_dim = 6; + // This field is used to track the source of this sharding, usually derived + // from instructions. Multple metadata may be populated if sharding is + // combined with other shardings. Metadata are to not be populated when + // type == TUPLE and instead metadata should be set on individual tuple + // elements. + repeated OpMetadata metadata = 7; + + // This field is used to represented the sharding type of each subgroup. + // For example, sharding={devices=[2,2,2,2]0,1,2,...,15 last_tile_dims={ + // replicate, manual, unreduced}} means that each of the last 3 dimensions + // in [2,2,2,2] represents a subgrouping in replicate, manual, + // unreduced sharding type respectively. + repeated Type last_tile_dims = 8; + + // Dimensions used to reshape the 1D iota array of device IDs. + // Only one of tile_assignment_devices and iota_reshape_dims shall be + // non-empty. + repeated int64 iota_reshape_dims = 9; + + // Dimension permutations to transposed the iota array reshaped to + // iota_reshape_dims. This must have the same size as iota_reshape_dims. + repeated int32 iota_transpose_perm = 10; + + // This field decides whether this op is in a shard group. + bool is_shard_group = 11; + + // This field is used to store the unique id of the shard group. + int64 shard_group_id = 12; + + // Used to decide whether this op is to be sharded like some other ops, or to + // which other ops will be sharded like. + enum ShardGroupType { + // This op will be sharded exactly the same as the other op. (hard + // restriction) + AS = 0; + // This op will try to allow sharding propagation within the same group even + // there is no data dependencies among them, but there is no guarantee that + // the final shardings within the same group will be exactly the same. (soft + // restriction) + LIKE = 1; + } + + ShardGroupType shard_group_type = 13; +} +// LINT.ThenChange() + +// Describes the replica groups in a cross replica op (e.g., all-reduce and +// all-to-all). +message ReplicaGroup { + // The ids of the replicas that belongs to the same group. The ordering of the + // ids matters in some ops (e.g., all-to-all). + repeated int64 replica_ids = 1; +} + +// Represents a list of replica groups (a list of list of devices) with +// reshaping and transposing an iota array (iota tile assignment). Can be used +// to represent certain common patterns of device lists in a compact, scalable +// format. +message IotaReplicaGroupListProto { + // Number of replica groups. + int64 num_replica_groups = 1; + + // Number of devices per group. + int64 num_devices_per_group = 2; + + // The dimensions used to reshape the 1D iota array of device IDs. + repeated int64 iota_reshape_dims = 3; + + // The dimension permutations to transposed the iota array reshaped to + // iota_reshape_dims. This must have the same size as iota_reshape_dims. + repeated int32 iota_transpose_perm = 4; +} + +// Represents a series of devices participating in a collective operation (e.g., +// all-reduce and all-to-all). While this directly translates to a list of +// replica groups, it may be used to represent these lists in a compact form. +message CollectiveDeviceListProto { + // ReplicaGroupV1: List of replica groups. Legacy way of representing device + // lists. + repeated ReplicaGroup replica_groups = 1; + + // ReplicaGroupV2: Represents a list of replica groups with reshaping and + // transposing an iota array. + IotaReplicaGroupListProto iota_replica_group_list = 2; +} + +// Describes the source target pair in the collective permute op. +message SourceTarget { + int64 source = 1; + int64 target = 2; +} + +// Describes the types of accuracy the user can request for unary ops with +// multiple implementations. +message ResultAccuracy { + enum Mode { + DEFAULT = 0; + HIGHEST = 1; + } + message Tolerance { + // Absolute error tolerance for unary instructions. + double atol = 1; + // Relative error tolerance for unary instructions. + double rtol = 2; + // The error in ulps (units in the last place) is relative to machine + // precision. + int64 ulps = 3; + } + oneof specs { + // Choose either DEFAULT or HIGHEST precision implementation. + Mode mode = 1; + Tolerance tolerance = 2; + } +} + +// Used to indicate the precision configuration. It has backend specific +// meaning. +message PrecisionConfig { + enum Precision { + DEFAULT = 0; + HIGH = 1; + HIGHEST = 2; + // Each U8/S8 value in a tensor actually represents 2 nibble values. + PACKED_NIBBLE = 3; + + // Next: 4 + } + + // The algorithm used to evaluate the instruction. + // + // The naming convention for the dot instruction is + // ALG_DOT_{A_TYPE}_{B_TYPE}_{ACCUM_TYPE}[_X{NUM_OPS}] where A_TYPE, B_TYPE + // and ACCUM_TYPE correspond to the types in the "primitive dot operations" + // (such as TensorCore operations) and NUM_OPS is the number of such + // operations used per "primitive tile". When the NUM_OPS + // field is skipped, it is assumed to be 1. The types mentioned in the name + // are independent of the storage types. + // + // In general ATYPE and BTYPE are the precisions that the LHS and RHS of the + // operation are rounded to and ACCUMTYPE is the accumulation type. If a + // backend does not support the given algorithm, an error is raised. The + // Algorithm enum is intended to eventually replace the Precision enum. + // + enum Algorithm { + // If the algorithm is `ALG_UNSET`, we will decide the algorithm based on + // the operand_precision values (for now). + ALG_UNSET = 0; + // The storage type can be any 8-bit floating point type. + ALG_DOT_ANY_F8_ANY_F8_F32 = 1; + // The storage type can be any 8-bit floating point type. Intermediate + // results will not periodically be promoted to a higher precision. This + // corresponds to CUBLASLT_MATMUL_DESC_FAST_ACCUM. Triton's + // maxNumImpreciseAcc=32 setting may be similar. + ALG_DOT_ANY_F8_ANY_F8_F32_FAST_ACCUM = 2; + ALG_DOT_F16_F16_F16 = 3; + ALG_DOT_F16_F16_F32 = 4; + ALG_DOT_BF16_BF16_BF16 = 5; + ALG_DOT_BF16_BF16_F32 = 6; + // An algorithm which uses 3 BF16_BF16_F32 matmuls to achieve better + // precision. + ALG_DOT_BF16_BF16_F32_X3 = 7; + // An algorithm which uses 6 BF16_BF16_F32 matmuls to achieve better + // precision (similar to F32). + ALG_DOT_BF16_BF16_F32_X6 = 8; + ALG_DOT_TF32_TF32_F32 = 9; + // An algorithm which uses 3 TF32_TF32_F32 matmuls to achieve better + // precision (similar to F32). + ALG_DOT_TF32_TF32_F32_X3 = 10; + ALG_DOT_F32_F32_F32 = 11; + ALG_DOT_F64_F64_F64 = 12; + + // Next: 13 + } + + repeated Precision operand_precision = 1; + + // Currently doesn't do anything, but we plan to support it for dot and + // possibly more instructions. + // + // TODO(b/316147294): Support this on GPU and add this to StableHLO as well. + // + // If this is set, then `operand_precision` should be set to DEFAULT and it + // will be ignored. + Algorithm algorithm = 2; + + // Next: 8 +} + +// Describes whether all data-parallelism replicas will receive the same +// parameter data at each buffer. +message ParameterReplication { + // A list of boolean values for the flattened leaf buffers. Each value + // indicates whether the corresponding leaf buffer is replicated. + // + // If this field is empty, it means no buffer is replicated. Otherwise, the + // number of elements in this field must match the number of leaf buffers in + // the HLO instruction's shape. + repeated bool replicated_at_leaf_buffers = 1; +} + +// A backend-config for kWhile loops that stores the loop's trip count, if it is +// known. +// +// This is useful for backends that can implement a `for i in 0..N` loop more +// efficiently than a `while` loop. For example, on GPUs, we can implement a +// `for i in 0..N` loop by enqueueing the kernels for the loop body N times, +// whereas implementing a `while` loop requires a host-device sync on each +// iteration. +message WhileLoopBackendConfig { + message KnownTripCount { + int64 n = 1; + } + // This indirection lets us distinguish between known-trip-count == 0 and + // unknown-trip-count. + KnownTripCount known_trip_count = 1; +} + +// Specifies a pair of output/operand buffers that alias each other for +// kCustomCall and kFusion +message OutputOperandAliasing { + repeated int64 output_shape_index = 1; + int64 operand_index = 2; + repeated int64 operand_shape_index = 3; +} + +message OriginalArrayProto { + repeated int64 leaf_shape_index = 1; + string instruction_name = 2; + repeated int64 shape_index = 3; +} + +message OriginalValueProto { + repeated OriginalArrayProto leaves = 1; +} diff --git a/protos/xla_data/xla_data.pb.go b/protos/xla_data/xla_data.pb.go index 829c635..a48d3c3 100644 --- a/protos/xla_data/xla_data.pb.go +++ b/protos/xla_data/xla_data.pb.go @@ -15,8 +15,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.27.2 +// protoc-gen-go v1.35.1 +// protoc v3.21.12 // source: xla/xla_data.proto package xla_data @@ -77,6 +77,9 @@ const ( // F8E5M2 has 5 exponent bits and 2 mantissa bits, and is similar to the // existing IEEE types. // + // F8E4M3 has 4 exponent bits and 3 mantissa bits, and is similar to the + // existing IEEE types. + // // F8E4M3FN has 4 exponent bits and 3 mantissa bits. The "FN" means only // Finite and NaN values are supported. Unlike IEEE types, infinities are not // supported. NaN is represented when the exponent and mantissa bits are all @@ -88,12 +91,17 @@ const ( // the exponent and mantissa bits are all 0s with a sign bit of 1. All other // values are finite. // + // F8E3M4 has 3 exponent bits and 4 mantissa bits, and is similar to the + // existing IEEE types. + // // Support for these dtypes is under development. They do not yet work // properly in most cases. // TODO(b/259609697): Fully support FP8. PrimitiveType_F8E5M2 PrimitiveType = 19 + PrimitiveType_F8E4M3 PrimitiveType = 28 PrimitiveType_F8E4M3FN PrimitiveType = 20 PrimitiveType_F8E4M3B11FNUZ PrimitiveType = 23 + PrimitiveType_F8E3M4 PrimitiveType = 29 // FP8 dtypes, as described in this paper: https://arxiv.org/abs/2206.02915 // // F8E5M2FNUZ has 5 exponent bits and 2 mantissa bits. @@ -155,8 +163,10 @@ var ( 16: "BF16", 12: "F64", 19: "F8E5M2", + 28: "F8E4M3", 20: "F8E4M3FN", 23: "F8E4M3B11FNUZ", + 29: "F8E3M4", 24: "F8E5M2FNUZ", 25: "F8E4M3FNUZ", 15: "C64", @@ -185,8 +195,10 @@ var ( "BF16": 16, "F64": 12, "F8E5M2": 19, + "F8E4M3": 28, "F8E4M3FN": 20, "F8E4M3B11FNUZ": 23, + "F8E3M4": 29, "F8E5M2FNUZ": 24, "F8E4M3FNUZ": 25, "C64": 15, @@ -799,7 +811,7 @@ func (x TriangularSolveOptions_Transpose) Number() protoreflect.EnumNumber { // Deprecated: Use TriangularSolveOptions_Transpose.Descriptor instead. func (TriangularSolveOptions_Transpose) EnumDescriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{22, 0} + return file_xla_xla_data_proto_rawDescGZIP(), []int{23, 0} } type OpSharding_Type int32 @@ -866,7 +878,7 @@ func (x OpSharding_Type) Number() protoreflect.EnumNumber { // Deprecated: Use OpSharding_Type.Descriptor instead. func (OpSharding_Type) EnumDescriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{28, 0} + return file_xla_xla_data_proto_rawDescGZIP(), []int{29, 0} } // Used to decide whether this op is to be sharded like some other ops, or to @@ -920,7 +932,53 @@ func (x OpSharding_ShardGroupType) Number() protoreflect.EnumNumber { // Deprecated: Use OpSharding_ShardGroupType.Descriptor instead. func (OpSharding_ShardGroupType) EnumDescriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{28, 1} + return file_xla_xla_data_proto_rawDescGZIP(), []int{29, 1} +} + +type ResultAccuracy_Mode int32 + +const ( + ResultAccuracy_DEFAULT ResultAccuracy_Mode = 0 + ResultAccuracy_HIGHEST ResultAccuracy_Mode = 1 +) + +// Enum value maps for ResultAccuracy_Mode. +var ( + ResultAccuracy_Mode_name = map[int32]string{ + 0: "DEFAULT", + 1: "HIGHEST", + } + ResultAccuracy_Mode_value = map[string]int32{ + "DEFAULT": 0, + "HIGHEST": 1, + } +) + +func (x ResultAccuracy_Mode) Enum() *ResultAccuracy_Mode { + p := new(ResultAccuracy_Mode) + *p = x + return p +} + +func (x ResultAccuracy_Mode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ResultAccuracy_Mode) Descriptor() protoreflect.EnumDescriptor { + return file_xla_xla_data_proto_enumTypes[14].Descriptor() +} + +func (ResultAccuracy_Mode) Type() protoreflect.EnumType { + return &file_xla_xla_data_proto_enumTypes[14] +} + +func (x ResultAccuracy_Mode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ResultAccuracy_Mode.Descriptor instead. +func (ResultAccuracy_Mode) EnumDescriptor() ([]byte, []int) { + return file_xla_xla_data_proto_rawDescGZIP(), []int{34, 0} } type PrecisionConfig_Precision int32 @@ -960,11 +1018,11 @@ func (x PrecisionConfig_Precision) String() string { } func (PrecisionConfig_Precision) Descriptor() protoreflect.EnumDescriptor { - return file_xla_xla_data_proto_enumTypes[14].Descriptor() + return file_xla_xla_data_proto_enumTypes[15].Descriptor() } func (PrecisionConfig_Precision) Type() protoreflect.EnumType { - return &file_xla_xla_data_proto_enumTypes[14] + return &file_xla_xla_data_proto_enumTypes[15] } func (x PrecisionConfig_Precision) Number() protoreflect.EnumNumber { @@ -973,7 +1031,7 @@ func (x PrecisionConfig_Precision) Number() protoreflect.EnumNumber { // Deprecated: Use PrecisionConfig_Precision.Descriptor instead. func (PrecisionConfig_Precision) EnumDescriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{33, 0} + return file_xla_xla_data_proto_rawDescGZIP(), []int{35, 0} } // The algorithm used to evaluate the instruction. @@ -1066,11 +1124,11 @@ func (x PrecisionConfig_Algorithm) String() string { } func (PrecisionConfig_Algorithm) Descriptor() protoreflect.EnumDescriptor { - return file_xla_xla_data_proto_enumTypes[15].Descriptor() + return file_xla_xla_data_proto_enumTypes[16].Descriptor() } func (PrecisionConfig_Algorithm) Type() protoreflect.EnumType { - return &file_xla_xla_data_proto_enumTypes[15] + return &file_xla_xla_data_proto_enumTypes[16] } func (x PrecisionConfig_Algorithm) Number() protoreflect.EnumNumber { @@ -1079,7 +1137,7 @@ func (x PrecisionConfig_Algorithm) Number() protoreflect.EnumNumber { // Deprecated: Use PrecisionConfig_Algorithm.Descriptor instead. func (PrecisionConfig_Algorithm) EnumDescriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{33, 1} + return file_xla_xla_data_proto_rawDescGZIP(), []int{35, 1} } // Describes the padding configuration for Pad operation. The padding amount on @@ -1095,11 +1153,9 @@ type PaddingConfig struct { func (x *PaddingConfig) Reset() { *x = PaddingConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PaddingConfig) String() string { @@ -1110,7 +1166,7 @@ func (*PaddingConfig) ProtoMessage() {} func (x *PaddingConfig) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1149,11 +1205,9 @@ type TileProto struct { func (x *TileProto) Reset() { *x = TileProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TileProto) String() string { @@ -1164,7 +1218,7 @@ func (*TileProto) ProtoMessage() {} func (x *TileProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1202,11 +1256,9 @@ type SplitConfigProto struct { func (x *SplitConfigProto) Reset() { *x = SplitConfigProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SplitConfigProto) String() string { @@ -1217,7 +1269,7 @@ func (*SplitConfigProto) ProtoMessage() {} func (x *SplitConfigProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1319,11 +1371,9 @@ type LayoutProto struct { func (x *LayoutProto) Reset() { *x = LayoutProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LayoutProto) String() string { @@ -1334,7 +1384,7 @@ func (*LayoutProto) ProtoMessage() {} func (x *LayoutProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1478,11 +1528,9 @@ type ShapeProto struct { func (x *ShapeProto) Reset() { *x = ShapeProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ShapeProto) String() string { @@ -1493,7 +1541,7 @@ func (*ShapeProto) ProtoMessage() {} func (x *ShapeProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1557,11 +1605,9 @@ type ProgramShapeProto struct { func (x *ProgramShapeProto) Reset() { *x = ProgramShapeProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProgramShapeProto) String() string { @@ -1572,7 +1618,7 @@ func (*ProgramShapeProto) ProtoMessage() {} func (x *ProgramShapeProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1622,11 +1668,9 @@ type ComputationStats struct { func (x *ComputationStats) Reset() { *x = ComputationStats{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ComputationStats) String() string { @@ -1637,7 +1681,7 @@ func (*ComputationStats) ProtoMessage() {} func (x *ComputationStats) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1722,11 +1766,9 @@ type OpMetadata struct { func (x *OpMetadata) Reset() { *x = OpMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OpMetadata) String() string { @@ -1737,7 +1779,7 @@ func (*OpMetadata) ProtoMessage() {} func (x *OpMetadata) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1872,11 +1914,9 @@ type ExecutionProfile struct { func (x *ExecutionProfile) Reset() { *x = ExecutionProfile{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecutionProfile) String() string { @@ -1887,7 +1927,7 @@ func (*ExecutionProfile) ProtoMessage() {} func (x *ExecutionProfile) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1970,11 +2010,9 @@ type ExecutionHandle struct { func (x *ExecutionHandle) Reset() { *x = ExecutionHandle{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExecutionHandle) String() string { @@ -1985,7 +2023,7 @@ func (*ExecutionHandle) ProtoMessage() {} func (x *ExecutionHandle) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2020,11 +2058,9 @@ type GlobalDataHandle struct { func (x *GlobalDataHandle) Reset() { *x = GlobalDataHandle{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GlobalDataHandle) String() string { @@ -2035,7 +2071,7 @@ func (*GlobalDataHandle) ProtoMessage() {} func (x *GlobalDataHandle) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2073,11 +2109,9 @@ type DeviceHandle struct { func (x *DeviceHandle) Reset() { *x = DeviceHandle{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeviceHandle) String() string { @@ -2088,7 +2122,7 @@ func (*DeviceHandle) ProtoMessage() {} func (x *DeviceHandle) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2131,11 +2165,9 @@ type ChannelHandle struct { func (x *ChannelHandle) Reset() { *x = ChannelHandle{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ChannelHandle) String() string { @@ -2146,7 +2178,7 @@ func (*ChannelHandle) ProtoMessage() {} func (x *ChannelHandle) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2190,11 +2222,9 @@ type DeviceAssignmentProto struct { func (x *DeviceAssignmentProto) Reset() { *x = DeviceAssignmentProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeviceAssignmentProto) String() string { @@ -2205,7 +2235,7 @@ func (*DeviceAssignmentProto) ProtoMessage() {} func (x *DeviceAssignmentProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2275,20 +2305,20 @@ type LiteralProto struct { U16S []byte `protobuf:"bytes,16,opt,name=u16s,proto3" json:"u16s,omitempty"` S16S []byte `protobuf:"bytes,17,opt,name=s16s,proto3" json:"s16s,omitempty"` F8E5M2S []byte `protobuf:"bytes,19,opt,name=f8e5m2s,proto3" json:"f8e5m2s,omitempty"` + F8E4M3S []byte `protobuf:"bytes,28,opt,name=f8e4m3s,proto3" json:"f8e4m3s,omitempty"` F8E4M3Fns []byte `protobuf:"bytes,20,opt,name=f8e4m3fns,proto3" json:"f8e4m3fns,omitempty"` F8E4M3B11Fnuzs []byte `protobuf:"bytes,23,opt,name=f8e4m3b11fnuzs,proto3" json:"f8e4m3b11fnuzs,omitempty"` F8E5M2Fnuzs []byte `protobuf:"bytes,24,opt,name=f8e5m2fnuzs,proto3" json:"f8e5m2fnuzs,omitempty"` F8E4M3Fnuzs []byte `protobuf:"bytes,25,opt,name=f8e4m3fnuzs,proto3" json:"f8e4m3fnuzs,omitempty"` - SparseIndices []int64 `protobuf:"varint,14,rep,packed,name=sparse_indices,json=sparseIndices,proto3" json:"sparse_indices,omitempty"` // Next = 28 + F8E3M4S []byte `protobuf:"bytes,29,opt,name=f8e3m4s,proto3" json:"f8e3m4s,omitempty"` + SparseIndices []int64 `protobuf:"varint,14,rep,packed,name=sparse_indices,json=sparseIndices,proto3" json:"sparse_indices,omitempty"` // Next = 30 } func (x *LiteralProto) Reset() { *x = LiteralProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LiteralProto) String() string { @@ -2299,7 +2329,7 @@ func (*LiteralProto) ProtoMessage() {} func (x *LiteralProto) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2468,6 +2498,13 @@ func (x *LiteralProto) GetF8E5M2S() []byte { return nil } +func (x *LiteralProto) GetF8E4M3S() []byte { + if x != nil { + return x.F8E4M3S + } + return nil +} + func (x *LiteralProto) GetF8E4M3Fns() []byte { if x != nil { return x.F8E4M3Fns @@ -2496,6 +2533,13 @@ func (x *LiteralProto) GetF8E4M3Fnuzs() []byte { return nil } +func (x *LiteralProto) GetF8E3M4S() []byte { + if x != nil { + return x.F8E3M4S + } + return nil +} + func (x *LiteralProto) GetSparseIndices() []int64 { if x != nil { return x.SparseIndices @@ -2545,11 +2589,9 @@ type WindowDimension struct { func (x *WindowDimension) Reset() { *x = WindowDimension{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WindowDimension) String() string { @@ -2560,7 +2602,7 @@ func (*WindowDimension) ProtoMessage() {} func (x *WindowDimension) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2639,11 +2681,9 @@ type Window struct { func (x *Window) Reset() { *x = Window{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Window) String() string { @@ -2654,7 +2694,7 @@ func (*Window) ProtoMessage() {} func (x *Window) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2716,11 +2756,9 @@ type GatherDimensionNumbers struct { func (x *GatherDimensionNumbers) Reset() { *x = GatherDimensionNumbers{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GatherDimensionNumbers) String() string { @@ -2731,7 +2769,7 @@ func (*GatherDimensionNumbers) ProtoMessage() {} func (x *GatherDimensionNumbers) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2811,11 +2849,9 @@ type ScatterDimensionNumbers struct { func (x *ScatterDimensionNumbers) Reset() { *x = ScatterDimensionNumbers{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ScatterDimensionNumbers) String() string { @@ -2826,7 +2862,7 @@ func (*ScatterDimensionNumbers) ProtoMessage() {} func (x *ScatterDimensionNumbers) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2916,11 +2952,9 @@ type ConvolutionDimensionNumbers struct { func (x *ConvolutionDimensionNumbers) Reset() { *x = ConvolutionDimensionNumbers{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConvolutionDimensionNumbers) String() string { @@ -2931,7 +2965,7 @@ func (*ConvolutionDimensionNumbers) ProtoMessage() {} func (x *ConvolutionDimensionNumbers) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3026,11 +3060,9 @@ type DotDimensionNumbers struct { func (x *DotDimensionNumbers) Reset() { *x = DotDimensionNumbers{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DotDimensionNumbers) String() string { @@ -3041,7 +3073,7 @@ func (*DotDimensionNumbers) ProtoMessage() {} func (x *DotDimensionNumbers) ProtoReflect() protoreflect.Message { mi := &file_xla_xla_data_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3084,6 +3116,70 @@ func (x *DotDimensionNumbers) GetRhsBatchDimensions() []int64 { return nil } +type RaggedDotDimensionNumbers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The contracting and batch dimensions of the 'lhs' and 'rhs'. + DotDimensionNumbers *DotDimensionNumbers `protobuf:"bytes,1,opt,name=dot_dimension_numbers,json=dotDimensionNumbers,proto3" json:"dot_dimension_numbers,omitempty"` + // The dimension numbers that represent the 'lhs' ragged dimensions. + LhsRaggedDimensions []int64 `protobuf:"varint,2,rep,packed,name=lhs_ragged_dimensions,json=lhsRaggedDimensions,proto3" json:"lhs_ragged_dimensions,omitempty"` + // The dimension numbers that represent the 'rhs' group dimensions. + RhsGroupDimensions []int64 `protobuf:"varint,3,rep,packed,name=rhs_group_dimensions,json=rhsGroupDimensions,proto3" json:"rhs_group_dimensions,omitempty"` +} + +func (x *RaggedDotDimensionNumbers) Reset() { + *x = RaggedDotDimensionNumbers{} + mi := &file_xla_xla_data_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RaggedDotDimensionNumbers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RaggedDotDimensionNumbers) ProtoMessage() {} + +func (x *RaggedDotDimensionNumbers) ProtoReflect() protoreflect.Message { + mi := &file_xla_xla_data_proto_msgTypes[21] + 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 RaggedDotDimensionNumbers.ProtoReflect.Descriptor instead. +func (*RaggedDotDimensionNumbers) Descriptor() ([]byte, []int) { + return file_xla_xla_data_proto_rawDescGZIP(), []int{21} +} + +func (x *RaggedDotDimensionNumbers) GetDotDimensionNumbers() *DotDimensionNumbers { + if x != nil { + return x.DotDimensionNumbers + } + return nil +} + +func (x *RaggedDotDimensionNumbers) GetLhsRaggedDimensions() []int64 { + if x != nil { + return x.LhsRaggedDimensions + } + return nil +} + +func (x *RaggedDotDimensionNumbers) GetRhsGroupDimensions() []int64 { + if x != nil { + return x.RhsGroupDimensions + } + return nil +} + // Contains sparsity metadata for a sparse dot operation. // The only supported type atm is structured 2:4 sparsity, which is natively // supported on NVidia GPUs. @@ -3107,11 +3203,9 @@ type SparsityDescriptor struct { func (x *SparsityDescriptor) Reset() { *x = SparsityDescriptor{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SparsityDescriptor) String() string { @@ -3121,8 +3215,8 @@ func (x *SparsityDescriptor) String() string { func (*SparsityDescriptor) ProtoMessage() {} func (x *SparsityDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3134,7 +3228,7 @@ func (x *SparsityDescriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use SparsityDescriptor.ProtoReflect.Descriptor instead. func (*SparsityDescriptor) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{21} + return file_xla_xla_data_proto_rawDescGZIP(), []int{22} } func (x *SparsityDescriptor) GetType() SparsityType { @@ -3188,11 +3282,9 @@ type TriangularSolveOptions struct { func (x *TriangularSolveOptions) Reset() { *x = TriangularSolveOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TriangularSolveOptions) String() string { @@ -3202,8 +3294,8 @@ func (x *TriangularSolveOptions) String() string { func (*TriangularSolveOptions) ProtoMessage() {} func (x *TriangularSolveOptions) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3215,7 +3307,7 @@ func (x *TriangularSolveOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use TriangularSolveOptions.ProtoReflect.Descriptor instead. func (*TriangularSolveOptions) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{22} + return file_xla_xla_data_proto_rawDescGZIP(), []int{23} } func (x *TriangularSolveOptions) GetLeftSide() bool { @@ -3258,11 +3350,9 @@ type CholeskyOptions struct { func (x *CholeskyOptions) Reset() { *x = CholeskyOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CholeskyOptions) String() string { @@ -3272,8 +3362,8 @@ func (x *CholeskyOptions) String() string { func (*CholeskyOptions) ProtoMessage() {} func (x *CholeskyOptions) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3285,7 +3375,7 @@ func (x *CholeskyOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use CholeskyOptions.ProtoReflect.Descriptor instead. func (*CholeskyOptions) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{23} + return file_xla_xla_data_proto_rawDescGZIP(), []int{24} } func (x *CholeskyOptions) GetLower() bool { @@ -3306,11 +3396,9 @@ type SortOptions struct { func (x *SortOptions) Reset() { *x = SortOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SortOptions) String() string { @@ -3320,8 +3408,8 @@ func (x *SortOptions) String() string { func (*SortOptions) ProtoMessage() {} func (x *SortOptions) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[25] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3333,7 +3421,7 @@ func (x *SortOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use SortOptions.ProtoReflect.Descriptor instead. func (*SortOptions) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{24} + return file_xla_xla_data_proto_rawDescGZIP(), []int{25} } func (x *SortOptions) GetDescending() bool { @@ -3355,11 +3443,9 @@ type FrontendAttributes struct { func (x *FrontendAttributes) Reset() { *x = FrontendAttributes{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FrontendAttributes) String() string { @@ -3369,8 +3455,8 @@ func (x *FrontendAttributes) String() string { func (*FrontendAttributes) ProtoMessage() {} func (x *FrontendAttributes) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[26] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3382,7 +3468,7 @@ func (x *FrontendAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use FrontendAttributes.ProtoReflect.Descriptor instead. func (*FrontendAttributes) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{25} + return file_xla_xla_data_proto_rawDescGZIP(), []int{26} } func (x *FrontendAttributes) GetMap() map[string]string { @@ -3407,11 +3493,9 @@ type Statistic struct { func (x *Statistic) Reset() { *x = Statistic{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Statistic) String() string { @@ -3421,8 +3505,8 @@ func (x *Statistic) String() string { func (*Statistic) ProtoMessage() {} func (x *Statistic) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[27] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3434,7 +3518,7 @@ func (x *Statistic) ProtoReflect() protoreflect.Message { // Deprecated: Use Statistic.ProtoReflect.Descriptor instead. func (*Statistic) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{26} + return file_xla_xla_data_proto_rawDescGZIP(), []int{27} } func (x *Statistic) GetStatName() string { @@ -3465,11 +3549,9 @@ type StatisticsViz struct { func (x *StatisticsViz) Reset() { *x = StatisticsViz{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatisticsViz) String() string { @@ -3479,8 +3561,8 @@ func (x *StatisticsViz) String() string { func (*StatisticsViz) ProtoMessage() {} func (x *StatisticsViz) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[28] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3492,7 +3574,7 @@ func (x *StatisticsViz) ProtoReflect() protoreflect.Message { // Deprecated: Use StatisticsViz.ProtoReflect.Descriptor instead. func (*StatisticsViz) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{27} + return file_xla_xla_data_proto_rawDescGZIP(), []int{28} } func (x *StatisticsViz) GetStatIndexToVisualize() int64 { @@ -3565,11 +3647,9 @@ type OpSharding struct { func (x *OpSharding) Reset() { *x = OpSharding{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OpSharding) String() string { @@ -3579,8 +3659,8 @@ func (x *OpSharding) String() string { func (*OpSharding) ProtoMessage() {} func (x *OpSharding) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[29] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3592,7 +3672,7 @@ func (x *OpSharding) ProtoReflect() protoreflect.Message { // Deprecated: Use OpSharding.ProtoReflect.Descriptor instead. func (*OpSharding) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{28} + return file_xla_xla_data_proto_rawDescGZIP(), []int{29} } func (x *OpSharding) GetType() OpSharding_Type { @@ -3700,11 +3780,9 @@ type ReplicaGroup struct { func (x *ReplicaGroup) Reset() { *x = ReplicaGroup{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReplicaGroup) String() string { @@ -3714,8 +3792,8 @@ func (x *ReplicaGroup) String() string { func (*ReplicaGroup) ProtoMessage() {} func (x *ReplicaGroup) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[30] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3727,7 +3805,7 @@ func (x *ReplicaGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplicaGroup.ProtoReflect.Descriptor instead. func (*ReplicaGroup) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{29} + return file_xla_xla_data_proto_rawDescGZIP(), []int{30} } func (x *ReplicaGroup) GetReplicaIds() []int64 { @@ -3759,11 +3837,9 @@ type IotaReplicaGroupListProto struct { func (x *IotaReplicaGroupListProto) Reset() { *x = IotaReplicaGroupListProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *IotaReplicaGroupListProto) String() string { @@ -3773,8 +3849,8 @@ func (x *IotaReplicaGroupListProto) String() string { func (*IotaReplicaGroupListProto) ProtoMessage() {} func (x *IotaReplicaGroupListProto) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[31] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3786,7 +3862,7 @@ func (x *IotaReplicaGroupListProto) ProtoReflect() protoreflect.Message { // Deprecated: Use IotaReplicaGroupListProto.ProtoReflect.Descriptor instead. func (*IotaReplicaGroupListProto) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{30} + return file_xla_xla_data_proto_rawDescGZIP(), []int{31} } func (x *IotaReplicaGroupListProto) GetNumReplicaGroups() int64 { @@ -3835,11 +3911,9 @@ type CollectiveDeviceListProto struct { func (x *CollectiveDeviceListProto) Reset() { *x = CollectiveDeviceListProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CollectiveDeviceListProto) String() string { @@ -3849,8 +3923,8 @@ func (x *CollectiveDeviceListProto) String() string { func (*CollectiveDeviceListProto) ProtoMessage() {} func (x *CollectiveDeviceListProto) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[32] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3862,7 +3936,7 @@ func (x *CollectiveDeviceListProto) ProtoReflect() protoreflect.Message { // Deprecated: Use CollectiveDeviceListProto.ProtoReflect.Descriptor instead. func (*CollectiveDeviceListProto) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{31} + return file_xla_xla_data_proto_rawDescGZIP(), []int{32} } func (x *CollectiveDeviceListProto) GetReplicaGroups() []*ReplicaGroup { @@ -3891,11 +3965,9 @@ type SourceTarget struct { func (x *SourceTarget) Reset() { *x = SourceTarget{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SourceTarget) String() string { @@ -3905,8 +3977,8 @@ func (x *SourceTarget) String() string { func (*SourceTarget) ProtoMessage() {} func (x *SourceTarget) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[33] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3918,7 +3990,7 @@ func (x *SourceTarget) ProtoReflect() protoreflect.Message { // Deprecated: Use SourceTarget.ProtoReflect.Descriptor instead. func (*SourceTarget) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{32} + return file_xla_xla_data_proto_rawDescGZIP(), []int{33} } func (x *SourceTarget) GetSource() int64 { @@ -3935,6 +4007,88 @@ func (x *SourceTarget) GetTarget() int64 { return 0 } +// Describes the types of accuracy the user can request for unary ops with +// multiple implementations. +type ResultAccuracy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Specs: + // + // *ResultAccuracy_Mode_ + // *ResultAccuracy_Tolerance_ + Specs isResultAccuracy_Specs `protobuf_oneof:"specs"` +} + +func (x *ResultAccuracy) Reset() { + *x = ResultAccuracy{} + mi := &file_xla_xla_data_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResultAccuracy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResultAccuracy) ProtoMessage() {} + +func (x *ResultAccuracy) ProtoReflect() protoreflect.Message { + mi := &file_xla_xla_data_proto_msgTypes[34] + 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 ResultAccuracy.ProtoReflect.Descriptor instead. +func (*ResultAccuracy) Descriptor() ([]byte, []int) { + return file_xla_xla_data_proto_rawDescGZIP(), []int{34} +} + +func (m *ResultAccuracy) GetSpecs() isResultAccuracy_Specs { + if m != nil { + return m.Specs + } + return nil +} + +func (x *ResultAccuracy) GetMode() ResultAccuracy_Mode { + if x, ok := x.GetSpecs().(*ResultAccuracy_Mode_); ok { + return x.Mode + } + return ResultAccuracy_DEFAULT +} + +func (x *ResultAccuracy) GetTolerance() *ResultAccuracy_Tolerance { + if x, ok := x.GetSpecs().(*ResultAccuracy_Tolerance_); ok { + return x.Tolerance + } + return nil +} + +type isResultAccuracy_Specs interface { + isResultAccuracy_Specs() +} + +type ResultAccuracy_Mode_ struct { + // Choose either DEFAULT or HIGHEST precision implementation. + Mode ResultAccuracy_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=xla.ResultAccuracy_Mode,oneof"` +} + +type ResultAccuracy_Tolerance_ struct { + Tolerance *ResultAccuracy_Tolerance `protobuf:"bytes,2,opt,name=tolerance,proto3,oneof"` +} + +func (*ResultAccuracy_Mode_) isResultAccuracy_Specs() {} + +func (*ResultAccuracy_Tolerance_) isResultAccuracy_Specs() {} + // Used to indicate the precision configuration. It has backend specific // meaning. type PrecisionConfig struct { @@ -3955,11 +4109,9 @@ type PrecisionConfig struct { func (x *PrecisionConfig) Reset() { *x = PrecisionConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PrecisionConfig) String() string { @@ -3969,8 +4121,8 @@ func (x *PrecisionConfig) String() string { func (*PrecisionConfig) ProtoMessage() {} func (x *PrecisionConfig) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[35] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3982,7 +4134,7 @@ func (x *PrecisionConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PrecisionConfig.ProtoReflect.Descriptor instead. func (*PrecisionConfig) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{33} + return file_xla_xla_data_proto_rawDescGZIP(), []int{35} } func (x *PrecisionConfig) GetOperandPrecision() []PrecisionConfig_Precision { @@ -4017,11 +4169,9 @@ type ParameterReplication struct { func (x *ParameterReplication) Reset() { *x = ParameterReplication{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ParameterReplication) String() string { @@ -4031,8 +4181,8 @@ func (x *ParameterReplication) String() string { func (*ParameterReplication) ProtoMessage() {} func (x *ParameterReplication) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[36] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4044,7 +4194,7 @@ func (x *ParameterReplication) ProtoReflect() protoreflect.Message { // Deprecated: Use ParameterReplication.ProtoReflect.Descriptor instead. func (*ParameterReplication) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{34} + return file_xla_xla_data_proto_rawDescGZIP(), []int{36} } func (x *ParameterReplication) GetReplicatedAtLeafBuffers() []bool { @@ -4074,11 +4224,9 @@ type WhileLoopBackendConfig struct { func (x *WhileLoopBackendConfig) Reset() { *x = WhileLoopBackendConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WhileLoopBackendConfig) String() string { @@ -4088,8 +4236,8 @@ func (x *WhileLoopBackendConfig) String() string { func (*WhileLoopBackendConfig) ProtoMessage() {} func (x *WhileLoopBackendConfig) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[37] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4101,7 +4249,7 @@ func (x *WhileLoopBackendConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use WhileLoopBackendConfig.ProtoReflect.Descriptor instead. func (*WhileLoopBackendConfig) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{35} + return file_xla_xla_data_proto_rawDescGZIP(), []int{37} } func (x *WhileLoopBackendConfig) GetKnownTripCount() *WhileLoopBackendConfig_KnownTripCount { @@ -4125,11 +4273,9 @@ type OutputOperandAliasing struct { func (x *OutputOperandAliasing) Reset() { *x = OutputOperandAliasing{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OutputOperandAliasing) String() string { @@ -4139,8 +4285,8 @@ func (x *OutputOperandAliasing) String() string { func (*OutputOperandAliasing) ProtoMessage() {} func (x *OutputOperandAliasing) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[38] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4152,7 +4298,7 @@ func (x *OutputOperandAliasing) ProtoReflect() protoreflect.Message { // Deprecated: Use OutputOperandAliasing.ProtoReflect.Descriptor instead. func (*OutputOperandAliasing) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{36} + return file_xla_xla_data_proto_rawDescGZIP(), []int{38} } func (x *OutputOperandAliasing) GetOutputShapeIndex() []int64 { @@ -4188,11 +4334,9 @@ type OriginalArrayProto struct { func (x *OriginalArrayProto) Reset() { *x = OriginalArrayProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OriginalArrayProto) String() string { @@ -4202,8 +4346,8 @@ func (x *OriginalArrayProto) String() string { func (*OriginalArrayProto) ProtoMessage() {} func (x *OriginalArrayProto) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[39] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4215,7 +4359,7 @@ func (x *OriginalArrayProto) ProtoReflect() protoreflect.Message { // Deprecated: Use OriginalArrayProto.ProtoReflect.Descriptor instead. func (*OriginalArrayProto) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{37} + return file_xla_xla_data_proto_rawDescGZIP(), []int{39} } func (x *OriginalArrayProto) GetLeafShapeIndex() []int64 { @@ -4249,11 +4393,9 @@ type OriginalValueProto struct { func (x *OriginalValueProto) Reset() { *x = OriginalValueProto{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OriginalValueProto) String() string { @@ -4263,8 +4405,8 @@ func (x *OriginalValueProto) String() string { func (*OriginalValueProto) ProtoMessage() {} func (x *OriginalValueProto) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[40] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4276,7 +4418,7 @@ func (x *OriginalValueProto) ProtoReflect() protoreflect.Message { // Deprecated: Use OriginalValueProto.ProtoReflect.Descriptor instead. func (*OriginalValueProto) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{38} + return file_xla_xla_data_proto_rawDescGZIP(), []int{40} } func (x *OriginalValueProto) GetLeaves() []*OriginalArrayProto { @@ -4303,11 +4445,9 @@ type PaddingConfig_PaddingConfigDimension struct { func (x *PaddingConfig_PaddingConfigDimension) Reset() { *x = PaddingConfig_PaddingConfigDimension{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PaddingConfig_PaddingConfigDimension) String() string { @@ -4317,8 +4457,8 @@ func (x *PaddingConfig_PaddingConfigDimension) String() string { func (*PaddingConfig_PaddingConfigDimension) ProtoMessage() {} func (x *PaddingConfig_PaddingConfigDimension) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[41] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4373,11 +4513,9 @@ type OpMetadata_ProfileInfo struct { func (x *OpMetadata_ProfileInfo) Reset() { *x = OpMetadata_ProfileInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OpMetadata_ProfileInfo) String() string { @@ -4387,8 +4525,8 @@ func (x *OpMetadata_ProfileInfo) String() string { func (*OpMetadata_ProfileInfo) ProtoMessage() {} func (x *OpMetadata_ProfileInfo) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[42] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4443,11 +4581,9 @@ type DeviceAssignmentProto_ComputationDevice struct { func (x *DeviceAssignmentProto_ComputationDevice) Reset() { *x = DeviceAssignmentProto_ComputationDevice{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeviceAssignmentProto_ComputationDevice) String() string { @@ -4457,8 +4593,8 @@ func (x *DeviceAssignmentProto_ComputationDevice) String() string { func (*DeviceAssignmentProto_ComputationDevice) ProtoMessage() {} func (x *DeviceAssignmentProto_ComputationDevice) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[43] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4480,6 +4616,71 @@ func (x *DeviceAssignmentProto_ComputationDevice) GetReplicaDeviceIds() []int64 return nil } +type ResultAccuracy_Tolerance struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Absolute error tolerance for unary instructions. + Atol float64 `protobuf:"fixed64,1,opt,name=atol,proto3" json:"atol,omitempty"` + // Relative error tolerance for unary instructions. + Rtol float64 `protobuf:"fixed64,2,opt,name=rtol,proto3" json:"rtol,omitempty"` + // The error in ulps (units in the last place) is relative to machine + // precision. + Ulps int64 `protobuf:"varint,3,opt,name=ulps,proto3" json:"ulps,omitempty"` +} + +func (x *ResultAccuracy_Tolerance) Reset() { + *x = ResultAccuracy_Tolerance{} + mi := &file_xla_xla_data_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResultAccuracy_Tolerance) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResultAccuracy_Tolerance) ProtoMessage() {} + +func (x *ResultAccuracy_Tolerance) ProtoReflect() protoreflect.Message { + mi := &file_xla_xla_data_proto_msgTypes[45] + 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 ResultAccuracy_Tolerance.ProtoReflect.Descriptor instead. +func (*ResultAccuracy_Tolerance) Descriptor() ([]byte, []int) { + return file_xla_xla_data_proto_rawDescGZIP(), []int{34, 0} +} + +func (x *ResultAccuracy_Tolerance) GetAtol() float64 { + if x != nil { + return x.Atol + } + return 0 +} + +func (x *ResultAccuracy_Tolerance) GetRtol() float64 { + if x != nil { + return x.Rtol + } + return 0 +} + +func (x *ResultAccuracy_Tolerance) GetUlps() int64 { + if x != nil { + return x.Ulps + } + return 0 +} + type WhileLoopBackendConfig_KnownTripCount struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4490,11 +4691,9 @@ type WhileLoopBackendConfig_KnownTripCount struct { func (x *WhileLoopBackendConfig_KnownTripCount) Reset() { *x = WhileLoopBackendConfig_KnownTripCount{} - if protoimpl.UnsafeEnabled { - mi := &file_xla_xla_data_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_xla_xla_data_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WhileLoopBackendConfig_KnownTripCount) String() string { @@ -4504,8 +4703,8 @@ func (x *WhileLoopBackendConfig_KnownTripCount) String() string { func (*WhileLoopBackendConfig_KnownTripCount) ProtoMessage() {} func (x *WhileLoopBackendConfig_KnownTripCount) ProtoReflect() protoreflect.Message { - mi := &file_xla_xla_data_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_xla_xla_data_proto_msgTypes[46] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4517,7 +4716,7 @@ func (x *WhileLoopBackendConfig_KnownTripCount) ProtoReflect() protoreflect.Mess // Deprecated: Use WhileLoopBackendConfig_KnownTripCount.ProtoReflect.Descriptor instead. func (*WhileLoopBackendConfig_KnownTripCount) Descriptor() ([]byte, []int) { - return file_xla_xla_data_proto_rawDescGZIP(), []int{35, 0} + return file_xla_xla_data_proto_rawDescGZIP(), []int{37, 0} } func (x *WhileLoopBackendConfig_KnownTripCount) GetN() int64 { @@ -4756,7 +4955,7 @@ var file_xla_xla_data_proto_rawDesc = []byte{ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0xb0, 0x05, 0x0a, 0x0c, 0x4c, 0x69, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0xe4, 0x05, 0x0a, 0x0c, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, @@ -4788,406 +4987,439 @@ var file_xla_xla_data_proto_rawDesc = []byte{ 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x31, 0x36, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x31, 0x36, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x31, 0x36, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x73, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x66, - 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x38, 0x65, - 0x34, 0x6d, 0x33, 0x62, 0x31, 0x31, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0e, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x62, 0x31, 0x31, 0x66, 0x6e, 0x75, 0x7a, - 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x66, 0x6e, 0x75, 0x7a, 0x73, - 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x66, 0x6e, - 0x75, 0x7a, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, 0x6e, 0x75, - 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, - 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, - 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x73, - 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0xf8, 0x01, 0x0a, - 0x0f, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x77, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x67, 0x68, - 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x44, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, - 0x65, 0x5f, 0x64, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x44, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, - 0x0a, 0x0f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, - 0x65, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x12, 0x34, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x16, 0x47, 0x61, 0x74, 0x68, - 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x44, - 0x69, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, - 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x53, 0x6c, 0x69, 0x63, - 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x61, 0x70, 0x12, 0x28, 0x0a, - 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x69, - 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x18, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, 0x22, 0xd6, 0x02, 0x0a, 0x17, 0x53, - 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x44, 0x69, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x57, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, - 0x64, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x73, 0x63, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x73, 0x54, 0x6f, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, - 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x11, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, - 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1a, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, - 0x69, 0x6d, 0x73, 0x22, 0xb7, 0x04, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x13, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x16, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x44, - 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x6b, 0x65, 0x72, - 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x1b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x45, - 0x0a, 0x1f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1c, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x4f, + 0x28, 0x0c, 0x52, 0x07, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x66, + 0x38, 0x65, 0x34, 0x6d, 0x33, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x38, + 0x65, 0x34, 0x6d, 0x33, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, + 0x6e, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, + 0x66, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x62, 0x31, 0x31, + 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x66, 0x38, 0x65, + 0x34, 0x6d, 0x33, 0x62, 0x31, 0x31, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x66, + 0x38, 0x65, 0x35, 0x6d, 0x32, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x66, 0x38, 0x65, 0x35, 0x6d, 0x32, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x38, 0x65, 0x34, 0x6d, 0x33, 0x66, 0x6e, 0x75, 0x7a, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x66, 0x38, 0x65, 0x33, 0x6d, 0x34, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x66, 0x38, 0x65, 0x33, 0x6d, 0x34, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x70, 0x61, + 0x72, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x0d, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x22, 0xf8, 0x01, 0x0a, 0x0f, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x6f, 0x77, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x6f, + 0x77, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x69, 0x67, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x48, 0x69, 0x67, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, + 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, + 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x64, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x44, 0x69, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x06, 0x57, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x34, 0x0a, 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb0, 0x02, 0x0a, 0x16, + 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x6c, 0x6c, 0x61, + 0x70, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, + 0x53, 0x6c, 0x69, 0x63, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x61, + 0x70, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x69, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, + 0x64, 0x69, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, 0x12, + 0x3d, 0x0a, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, 0x22, 0xd6, + 0x02, 0x0a, 0x17, 0x53, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x64, 0x69, 0x6d, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x3e, 0x0a, 0x1c, 0x73, 0x63, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x18, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x44, 0x69, 0x6d, 0x73, 0x54, 0x6f, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x44, 0x69, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, + 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x11, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x44, 0x69, 0x6d, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x63, 0x61, 0x74, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x1a, 0x73, 0x63, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x73, 0x22, 0xb7, 0x04, 0x0a, 0x1b, 0x43, 0x6f, 0x6e, 0x76, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x70, 0x61, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x70, 0x61, 0x74, + 0x69, 0x61, 0x6c, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, + 0x1e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x1f, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1c, 0x6b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x6b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x5f, 0x73, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x6d, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x17, 0x6b, 0x65, + 0x72, 0x6e, 0x65, 0x6c, 0x53, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x18, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, + 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x17, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, + 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x03, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x14, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x18, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x74, - 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x17, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x70, 0x61, 0x74, - 0x69, 0x61, 0x6c, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf5, 0x01, - 0x0a, 0x13, 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x6c, 0x68, 0x73, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x6c, 0x68, 0x73, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x72, 0x68, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x72, 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x68, 0x73, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, - 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x12, 0x6c, 0x68, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x68, 0x73, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x12, 0x72, 0x68, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x6d, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x12, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, - 0x74, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, - 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x01, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x01, 0x6d, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x54, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, - 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x69, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x77, 0x65, - 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x64, 0x69, 0x61, 0x67, 0x6f, 0x6e, - 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x6e, 0x69, 0x74, 0x44, 0x69, - 0x61, 0x67, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x73, 0x65, 0x5f, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x78, 0x6c, - 0x61, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x73, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x22, 0x50, - 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, - 0x53, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, - 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x44, 0x4a, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x03, - 0x22, 0x27, 0x0a, 0x0f, 0x43, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x2d, 0x0a, 0x0b, 0x53, 0x6f, 0x72, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x73, 0x63, - 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, - 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x80, 0x01, 0x0a, 0x12, 0x46, 0x72, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, - 0x32, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, - 0x6d, 0x61, 0x70, 0x1a, 0x36, 0x0a, 0x08, 0x4d, 0x61, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x43, 0x0a, 0x09, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, 0x74, 0x61, 0x74, 0x56, 0x61, 0x6c, - 0x22, 0x76, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x56, 0x69, - 0x7a, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, - 0x74, 0x6f, 0x5f, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x14, 0x73, 0x74, 0x61, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x6f, 0x56, - 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, - 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xa5, 0x06, 0x0a, 0x0a, 0x4f, 0x70, 0x53, - 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x2e, 0x0a, 0x0a, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x74, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x70, - 0x65, 0x12, 0x3c, 0x0a, 0x1a, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x74, 0x69, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x36, 0x0a, 0x17, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x15, 0x74, 0x69, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x0e, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x6f, - 0x6e, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x4f, 0x6e, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x6d, 0x12, 0x2b, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x69, - 0x6c, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x72, - 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x13, 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x6c, 0x68, 0x73, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x6c, + 0x68, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x72, 0x68, 0x73, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x72, 0x68, 0x73, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x68, 0x73, 0x5f, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x68, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x68, 0x73, 0x5f, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x12, 0x72, 0x68, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x19, 0x52, 0x61, + 0x67, 0x67, 0x65, 0x64, 0x44, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x64, 0x6f, 0x74, 0x5f, 0x64, + 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x44, 0x6f, 0x74, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x13, 0x64, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6c, 0x68, 0x73, 0x5f, 0x72, 0x61, 0x67, + 0x67, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x13, 0x6c, 0x68, 0x73, 0x52, 0x61, 0x67, 0x67, 0x65, 0x64, 0x44, + 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x68, 0x73, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x12, 0x72, 0x68, 0x73, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x12, + 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, + 0x01, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x6e, 0x12, 0x0c, 0x0a, 0x01, 0x6d, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x6d, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x54, 0x72, + 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x73, 0x69, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, 0x53, 0x69, 0x64, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x74, 0x5f, + 0x64, 0x69, 0x61, 0x67, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x75, 0x6e, 0x69, 0x74, 0x44, 0x69, 0x61, 0x67, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x46, 0x0a, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x25, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6e, 0x67, 0x75, 0x6c, + 0x61, 0x72, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x73, 0x65, 0x41, 0x22, 0x50, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, + 0x65, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, 0x45, 0x5f, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x5f, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x50, 0x4f, 0x53, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x44, 0x4a, + 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x03, 0x22, 0x27, 0x0a, 0x0f, 0x43, 0x68, 0x6f, 0x6c, 0x65, 0x73, + 0x6b, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x77, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x22, + 0x2d, 0x0a, 0x0b, 0x53, 0x6f, 0x72, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x80, + 0x01, 0x0a, 0x12, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x1a, 0x36, 0x0a, 0x08, 0x4d, 0x61, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x43, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x74, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, + 0x74, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x76, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x56, 0x69, 0x7a, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x74, 0x6f, 0x5f, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x73, 0x74, 0x61, 0x74, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x54, 0x6f, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x2e, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xa5, + 0x06, 0x0a, 0x0a, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x0a, 0x74, 0x69, 0x6c, 0x65, 0x5f, + 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x53, 0x68, 0x61, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x74, 0x69, + 0x6c, 0x65, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x1a, 0x74, 0x69, 0x6c, 0x65, 0x5f, + 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x18, 0x74, 0x69, 0x6c, + 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x15, 0x74, 0x69, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x38, 0x0a, + 0x0f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, + 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6c, + 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x69, 0x6c, 0x65, + 0x44, 0x69, 0x6d, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x3a, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x69, + 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, + 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, + 0x6c, 0x61, 0x73, 0x74, 0x54, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x11, + 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x64, 0x69, 0x6d, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x68, 0x61, 0x70, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6f, 0x74, 0x61, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x73, + 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, + 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x10, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, + 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, + 0x73, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x52, + 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x41, 0x58, 0x49, 0x4d, 0x41, + 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x09, + 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, + 0x55, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x05, 0x22, 0x22, 0x0a, 0x0e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x41, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x4c, 0x49, 0x4b, 0x45, 0x10, 0x01, 0x22, 0x2f, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x19, 0x49, 0x6f, 0x74, 0x61, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x6e, 0x75, 0x6d, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x12, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x72, + 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x65, - 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x68, - 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, - 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x48, - 0x0a, 0x10, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, - 0x70, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x64, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x52, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x41, 0x58, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, - 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, - 0x52, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, 0x04, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x22, 0x22, 0x0a, 0x0e, - 0x53, 0x68, 0x61, 0x72, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x06, - 0x0a, 0x02, 0x41, 0x53, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4b, 0x45, 0x10, 0x01, - 0x22, 0x2f, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x49, 0x64, - 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x19, 0x49, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x2c, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x75, 0x6d, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x31, 0x0a, - 0x15, 0x6e, 0x75, 0x6d, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6e, 0x75, - 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, - 0x5f, 0x64, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x6f, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x44, 0x69, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x13, - 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x70, - 0x65, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x22, 0xac, 0x01, 0x0a, - 0x19, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x38, 0x0a, 0x0e, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x12, 0x55, 0x0a, 0x17, 0x69, 0x6f, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x49, 0x6f, 0x74, 0x61, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x14, 0x69, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x0c, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xd6, 0x04, 0x0a, 0x0f, - 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x4b, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x6e, 0x64, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, - 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x22, 0x42, 0x0a, 0x09, 0x50, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x01, 0x12, 0x0b, - 0x0a, 0x07, 0x48, 0x49, 0x47, 0x48, 0x45, 0x53, 0x54, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x4e, 0x49, 0x42, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x22, 0xf3, - 0x02, 0x0a, 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x0d, 0x0a, 0x09, - 0x41, 0x4c, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x41, - 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, 0x5f, 0x41, 0x4e, - 0x59, 0x5f, 0x46, 0x38, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x4c, - 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, 0x5f, 0x41, 0x4e, 0x59, - 0x5f, 0x46, 0x38, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x41, 0x43, 0x43, - 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, - 0x46, 0x31, 0x36, 0x5f, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x31, 0x36, 0x10, 0x03, 0x12, 0x17, 0x0a, - 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x31, 0x36, - 0x5f, 0x46, 0x33, 0x32, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, - 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, - 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, - 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x06, 0x12, 0x1c, 0x0a, - 0x18, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, - 0x31, 0x36, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x58, 0x33, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x41, - 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, - 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x58, 0x36, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, - 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x46, - 0x33, 0x32, 0x10, 0x09, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, - 0x54, 0x46, 0x33, 0x32, 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x58, 0x33, - 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x33, - 0x32, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x0b, 0x12, 0x17, 0x0a, 0x13, 0x41, - 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x36, 0x34, 0x5f, 0x46, 0x36, 0x34, 0x5f, 0x46, - 0x36, 0x34, 0x10, 0x0c, 0x22, 0x53, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x1a, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6c, 0x65, - 0x61, 0x66, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4c, 0x65, - 0x61, 0x66, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x16, 0x57, 0x68, - 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x54, 0x0a, 0x10, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x72, - 0x69, 0x70, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x42, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, - 0x6e, 0x54, 0x72, 0x69, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x54, 0x72, 0x69, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x1e, 0x0a, 0x0e, 0x4b, 0x6e, - 0x6f, 0x77, 0x6e, 0x54, 0x72, 0x69, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x01, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, - 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x6e, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x61, - 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x8a, 0x01, 0x0a, 0x12, 0x4f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, - 0x0a, 0x10, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x22, 0x45, 0x0a, 0x12, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x65, - 0x61, 0x76, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, - 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x2a, 0xc7, 0x02, 0x0a, 0x0d, - 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x16, 0x50, 0x52, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x52, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x32, 0x10, 0x1a, 0x12, 0x06, 0x0a, 0x02, 0x53, - 0x34, 0x10, 0x15, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x38, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, - 0x31, 0x36, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x33, 0x32, 0x10, 0x04, 0x12, 0x07, 0x0a, - 0x03, 0x53, 0x36, 0x34, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x32, 0x10, 0x1b, 0x12, 0x06, - 0x0a, 0x02, 0x55, 0x34, 0x10, 0x16, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x38, 0x10, 0x06, 0x12, 0x07, - 0x0a, 0x03, 0x55, 0x31, 0x36, 0x10, 0x07, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x33, 0x32, 0x10, 0x08, - 0x12, 0x07, 0x0a, 0x03, 0x55, 0x36, 0x34, 0x10, 0x09, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x31, 0x36, - 0x10, 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x33, 0x32, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x42, - 0x46, 0x31, 0x36, 0x10, 0x10, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x36, 0x34, 0x10, 0x0c, 0x12, 0x0a, - 0x0a, 0x06, 0x46, 0x38, 0x45, 0x35, 0x4d, 0x32, 0x10, 0x13, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x38, - 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x10, 0x14, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x38, 0x45, 0x34, - 0x4d, 0x33, 0x42, 0x31, 0x31, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x17, 0x12, 0x0e, 0x0a, 0x0a, 0x46, - 0x38, 0x45, 0x35, 0x4d, 0x32, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x18, 0x12, 0x0e, 0x0a, 0x0a, 0x46, - 0x38, 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x19, 0x12, 0x07, 0x0a, 0x03, 0x43, - 0x36, 0x34, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x31, 0x32, 0x38, 0x10, 0x12, 0x12, 0x09, - 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x41, - 0x51, 0x55, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x4f, - 0x4b, 0x45, 0x4e, 0x10, 0x11, 0x2a, 0x5e, 0x0a, 0x0c, 0x44, 0x69, 0x6d, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x49, 0x4d, 0x5f, 0x44, 0x45, 0x4e, - 0x53, 0x45, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, - 0x52, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x49, 0x4d, 0x5f, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x54, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x44, - 0x49, 0x4d, 0x5f, 0x4c, 0x4f, 0x4f, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, - 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x3d, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x45, 0x52, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x4d, 0x42, 0x45, 0x44, - 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, - 0x2a, 0x85, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, - 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, - 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x47, 0x0a, 0x0b, 0x50, 0x61, 0x64, 0x64, - 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x44, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, - 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, - 0x10, 0x0a, 0x0c, 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x10, - 0x02, 0x2a, 0x31, 0x0a, 0x07, 0x46, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, - 0x46, 0x46, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x46, 0x46, 0x54, 0x10, 0x01, 0x12, - 0x08, 0x0a, 0x04, 0x52, 0x46, 0x46, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x52, 0x46, - 0x46, 0x54, 0x10, 0x03, 0x2a, 0x41, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x50, 0x41, 0x52, 0x53, 0x49, 0x54, 0x59, - 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x50, - 0x41, 0x52, 0x53, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, - 0x44, 0x5f, 0x4e, 0x5f, 0x4d, 0x10, 0x01, 0x2a, 0x46, 0x0a, 0x12, 0x52, 0x61, 0x6e, 0x64, 0x6f, - 0x6d, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, - 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0f, - 0x0a, 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x01, 0x12, - 0x0e, 0x0a, 0x0a, 0x52, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x02, 0x2a, - 0x45, 0x0a, 0x0f, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, - 0x68, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, - 0x54, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x4e, 0x47, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x45, - 0x5f, 0x46, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x4e, 0x47, 0x5f, 0x50, 0x48, - 0x49, 0x4c, 0x4f, 0x58, 0x10, 0x02, 0x42, 0x03, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x72, 0x6d, 0x22, 0xac, 0x01, 0x0a, 0x19, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x38, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x55, 0x0a, 0x17, 0x69, 0x6f, + 0x74, 0x61, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x49, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x14, 0x69, 0x6f, 0x74, + 0x61, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x3e, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x63, 0x75, + 0x72, 0x61, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x41, + 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x04, + 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x2e, 0x54, 0x6f, 0x6c, + 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, + 0x6e, 0x63, 0x65, 0x1a, 0x47, 0x0a, 0x09, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, + 0x61, 0x74, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x74, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x04, 0x72, 0x74, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6c, 0x70, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x6c, 0x70, 0x73, 0x22, 0x20, 0x0a, 0x04, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x49, 0x47, 0x48, 0x45, 0x53, 0x54, 0x10, 0x01, 0x42, 0x07, + 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x22, 0xd6, 0x04, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x11, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x50, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x50, + 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, + 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x78, 0x6c, + 0x61, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x09, 0x61, 0x6c, 0x67, + 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x22, 0x42, 0x0a, 0x09, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x49, + 0x47, 0x48, 0x45, 0x53, 0x54, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x44, 0x5f, 0x4e, 0x49, 0x42, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x22, 0xf3, 0x02, 0x0a, 0x09, 0x41, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x47, 0x5f, + 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x4c, 0x47, 0x5f, 0x44, + 0x4f, 0x54, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, + 0x5f, 0x46, 0x33, 0x32, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, + 0x54, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x38, 0x5f, + 0x46, 0x33, 0x32, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x55, 0x4d, 0x10, 0x02, + 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x31, 0x36, 0x5f, + 0x46, 0x31, 0x36, 0x5f, 0x46, 0x31, 0x36, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x47, + 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x33, 0x32, + 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, + 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x10, 0x05, 0x12, 0x19, + 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, + 0x46, 0x31, 0x36, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x06, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, + 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x46, + 0x33, 0x32, 0x5f, 0x58, 0x33, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, 0x5f, 0x44, + 0x4f, 0x54, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x42, 0x46, 0x31, 0x36, 0x5f, 0x46, 0x33, 0x32, + 0x5f, 0x58, 0x36, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, + 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x09, + 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x54, 0x46, 0x33, 0x32, + 0x5f, 0x54, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x58, 0x33, 0x10, 0x0a, 0x12, 0x17, + 0x0a, 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, 0x4f, 0x54, 0x5f, 0x46, 0x33, 0x32, 0x5f, 0x46, 0x33, + 0x32, 0x5f, 0x46, 0x33, 0x32, 0x10, 0x0b, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4c, 0x47, 0x5f, 0x44, + 0x4f, 0x54, 0x5f, 0x46, 0x36, 0x34, 0x5f, 0x46, 0x36, 0x34, 0x5f, 0x46, 0x36, 0x34, 0x10, 0x0c, + 0x22, 0x53, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52, 0x17, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4c, 0x65, 0x61, 0x66, 0x42, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x16, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, + 0x6f, 0x6f, 0x70, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x54, 0x0a, 0x10, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x6c, 0x61, + 0x2e, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x6f, 0x70, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x72, 0x69, + 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x72, 0x69, + 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x1e, 0x0a, 0x0e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, + 0x72, 0x69, 0x70, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x01, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x15, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x69, 0x6e, 0x67, + 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x10, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, + 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x5f, 0x73, + 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x11, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x22, 0x8a, 0x01, 0x0a, 0x12, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x65, + 0x61, 0x66, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x65, 0x61, 0x66, 0x53, 0x68, 0x61, 0x70, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x22, 0x45, 0x0a, 0x12, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x6c, 0x61, 0x2e, 0x4f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, + 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x2a, 0xdf, 0x02, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x49, + 0x4d, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x06, 0x0a, 0x02, 0x53, 0x32, 0x10, 0x1a, 0x12, 0x06, 0x0a, 0x02, 0x53, 0x34, 0x10, 0x15, 0x12, + 0x06, 0x0a, 0x02, 0x53, 0x38, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x31, 0x36, 0x10, 0x03, + 0x12, 0x07, 0x0a, 0x03, 0x53, 0x33, 0x32, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x36, 0x34, + 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x32, 0x10, 0x1b, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x34, + 0x10, 0x16, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x38, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x31, + 0x36, 0x10, 0x07, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x33, 0x32, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, + 0x55, 0x36, 0x34, 0x10, 0x09, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x31, 0x36, 0x10, 0x0a, 0x12, 0x07, + 0x0a, 0x03, 0x46, 0x33, 0x32, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x46, 0x31, 0x36, 0x10, + 0x10, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x36, 0x34, 0x10, 0x0c, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x38, + 0x45, 0x35, 0x4d, 0x32, 0x10, 0x13, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, + 0x10, 0x1c, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x10, 0x14, + 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x42, 0x31, 0x31, 0x46, 0x4e, 0x55, + 0x5a, 0x10, 0x17, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x38, 0x45, 0x33, 0x4d, 0x34, 0x10, 0x1d, 0x12, + 0x0e, 0x0a, 0x0a, 0x46, 0x38, 0x45, 0x35, 0x4d, 0x32, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x18, 0x12, + 0x0e, 0x0a, 0x0a, 0x46, 0x38, 0x45, 0x34, 0x4d, 0x33, 0x46, 0x4e, 0x55, 0x5a, 0x10, 0x19, 0x12, + 0x07, 0x0a, 0x03, 0x43, 0x36, 0x34, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x31, 0x32, 0x38, + 0x10, 0x12, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x0d, 0x12, 0x0f, 0x0a, + 0x0b, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x0e, 0x12, 0x09, + 0x0a, 0x05, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x11, 0x2a, 0x5e, 0x0a, 0x0c, 0x44, 0x69, 0x6d, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x49, 0x4d, + 0x5f, 0x44, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x4d, 0x5f, + 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, + 0x44, 0x49, 0x4d, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x54, 0x4f, 0x4e, 0x10, 0x02, 0x12, + 0x18, 0x0a, 0x14, 0x44, 0x49, 0x4d, 0x5f, 0x4c, 0x4f, 0x4f, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x52, 0x45, 0x53, 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x3d, 0x0a, 0x0b, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, + 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, + 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, + 0x4d, 0x42, 0x45, 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x4f, + 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, + 0x54, 0x45, 0x10, 0x02, 0x2a, 0x85, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4d, + 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x27, + 0x0a, 0x23, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4d, 0x50, 0x49, + 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, + 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x47, 0x0a, 0x0b, + 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x50, + 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x41, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, + 0x41, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0x31, 0x0a, 0x07, 0x46, 0x66, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x07, 0x0a, 0x03, 0x46, 0x46, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x46, 0x46, + 0x54, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x46, 0x46, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, + 0x05, 0x49, 0x52, 0x46, 0x46, 0x54, 0x10, 0x03, 0x2a, 0x41, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x72, + 0x73, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x50, 0x41, 0x52, + 0x53, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x1b, + 0x0a, 0x17, 0x53, 0x50, 0x41, 0x52, 0x53, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, + 0x54, 0x55, 0x52, 0x45, 0x44, 0x5f, 0x4e, 0x5f, 0x4d, 0x10, 0x01, 0x2a, 0x46, 0x0a, 0x12, 0x52, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, + 0x4d, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, + 0x4c, 0x10, 0x02, 0x2a, 0x45, 0x0a, 0x0f, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x41, 0x6c, 0x67, + 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4e, 0x47, 0x5f, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x4e, 0x47, 0x5f, 0x54, + 0x48, 0x52, 0x45, 0x45, 0x5f, 0x46, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x4e, + 0x47, 0x5f, 0x50, 0x48, 0x49, 0x4c, 0x4f, 0x58, 0x10, 0x02, 0x42, 0x03, 0xf8, 0x01, 0x01, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5202,8 +5434,8 @@ func file_xla_xla_data_proto_rawDescGZIP() []byte { return file_xla_xla_data_proto_rawDescData } -var file_xla_xla_data_proto_enumTypes = make([]protoimpl.EnumInfo, 16) -var file_xla_xla_data_proto_msgTypes = make([]protoimpl.MessageInfo, 44) +var file_xla_xla_data_proto_enumTypes = make([]protoimpl.EnumInfo, 17) +var file_xla_xla_data_proto_msgTypes = make([]protoimpl.MessageInfo, 47) var file_xla_xla_data_proto_goTypes = []any{ (PrimitiveType)(0), // 0: xla.PrimitiveType (DimLevelType)(0), // 1: xla.DimLevelType @@ -5219,97 +5451,104 @@ var file_xla_xla_data_proto_goTypes = []any{ (TriangularSolveOptions_Transpose)(0), // 11: xla.TriangularSolveOptions.Transpose (OpSharding_Type)(0), // 12: xla.OpSharding.Type (OpSharding_ShardGroupType)(0), // 13: xla.OpSharding.ShardGroupType - (PrecisionConfig_Precision)(0), // 14: xla.PrecisionConfig.Precision - (PrecisionConfig_Algorithm)(0), // 15: xla.PrecisionConfig.Algorithm - (*PaddingConfig)(nil), // 16: xla.PaddingConfig - (*TileProto)(nil), // 17: xla.TileProto - (*SplitConfigProto)(nil), // 18: xla.SplitConfigProto - (*LayoutProto)(nil), // 19: xla.LayoutProto - (*ShapeProto)(nil), // 20: xla.ShapeProto - (*ProgramShapeProto)(nil), // 21: xla.ProgramShapeProto - (*ComputationStats)(nil), // 22: xla.ComputationStats - (*OpMetadata)(nil), // 23: xla.OpMetadata - (*ExecutionProfile)(nil), // 24: xla.ExecutionProfile - (*ExecutionHandle)(nil), // 25: xla.ExecutionHandle - (*GlobalDataHandle)(nil), // 26: xla.GlobalDataHandle - (*DeviceHandle)(nil), // 27: xla.DeviceHandle - (*ChannelHandle)(nil), // 28: xla.ChannelHandle - (*DeviceAssignmentProto)(nil), // 29: xla.DeviceAssignmentProto - (*LiteralProto)(nil), // 30: xla.LiteralProto - (*WindowDimension)(nil), // 31: xla.WindowDimension - (*Window)(nil), // 32: xla.Window - (*GatherDimensionNumbers)(nil), // 33: xla.GatherDimensionNumbers - (*ScatterDimensionNumbers)(nil), // 34: xla.ScatterDimensionNumbers - (*ConvolutionDimensionNumbers)(nil), // 35: xla.ConvolutionDimensionNumbers - (*DotDimensionNumbers)(nil), // 36: xla.DotDimensionNumbers - (*SparsityDescriptor)(nil), // 37: xla.SparsityDescriptor - (*TriangularSolveOptions)(nil), // 38: xla.TriangularSolveOptions - (*CholeskyOptions)(nil), // 39: xla.CholeskyOptions - (*SortOptions)(nil), // 40: xla.SortOptions - (*FrontendAttributes)(nil), // 41: xla.FrontendAttributes - (*Statistic)(nil), // 42: xla.Statistic - (*StatisticsViz)(nil), // 43: xla.StatisticsViz - (*OpSharding)(nil), // 44: xla.OpSharding - (*ReplicaGroup)(nil), // 45: xla.ReplicaGroup - (*IotaReplicaGroupListProto)(nil), // 46: xla.IotaReplicaGroupListProto - (*CollectiveDeviceListProto)(nil), // 47: xla.CollectiveDeviceListProto - (*SourceTarget)(nil), // 48: xla.SourceTarget - (*PrecisionConfig)(nil), // 49: xla.PrecisionConfig - (*ParameterReplication)(nil), // 50: xla.ParameterReplication - (*WhileLoopBackendConfig)(nil), // 51: xla.WhileLoopBackendConfig - (*OutputOperandAliasing)(nil), // 52: xla.OutputOperandAliasing - (*OriginalArrayProto)(nil), // 53: xla.OriginalArrayProto - (*OriginalValueProto)(nil), // 54: xla.OriginalValueProto - (*PaddingConfig_PaddingConfigDimension)(nil), // 55: xla.PaddingConfig.PaddingConfigDimension - (*OpMetadata_ProfileInfo)(nil), // 56: xla.OpMetadata.ProfileInfo - (*DeviceAssignmentProto_ComputationDevice)(nil), // 57: xla.DeviceAssignmentProto.ComputationDevice - nil, // 58: xla.FrontendAttributes.MapEntry - (*WhileLoopBackendConfig_KnownTripCount)(nil), // 59: xla.WhileLoopBackendConfig.KnownTripCount + (ResultAccuracy_Mode)(0), // 14: xla.ResultAccuracy.Mode + (PrecisionConfig_Precision)(0), // 15: xla.PrecisionConfig.Precision + (PrecisionConfig_Algorithm)(0), // 16: xla.PrecisionConfig.Algorithm + (*PaddingConfig)(nil), // 17: xla.PaddingConfig + (*TileProto)(nil), // 18: xla.TileProto + (*SplitConfigProto)(nil), // 19: xla.SplitConfigProto + (*LayoutProto)(nil), // 20: xla.LayoutProto + (*ShapeProto)(nil), // 21: xla.ShapeProto + (*ProgramShapeProto)(nil), // 22: xla.ProgramShapeProto + (*ComputationStats)(nil), // 23: xla.ComputationStats + (*OpMetadata)(nil), // 24: xla.OpMetadata + (*ExecutionProfile)(nil), // 25: xla.ExecutionProfile + (*ExecutionHandle)(nil), // 26: xla.ExecutionHandle + (*GlobalDataHandle)(nil), // 27: xla.GlobalDataHandle + (*DeviceHandle)(nil), // 28: xla.DeviceHandle + (*ChannelHandle)(nil), // 29: xla.ChannelHandle + (*DeviceAssignmentProto)(nil), // 30: xla.DeviceAssignmentProto + (*LiteralProto)(nil), // 31: xla.LiteralProto + (*WindowDimension)(nil), // 32: xla.WindowDimension + (*Window)(nil), // 33: xla.Window + (*GatherDimensionNumbers)(nil), // 34: xla.GatherDimensionNumbers + (*ScatterDimensionNumbers)(nil), // 35: xla.ScatterDimensionNumbers + (*ConvolutionDimensionNumbers)(nil), // 36: xla.ConvolutionDimensionNumbers + (*DotDimensionNumbers)(nil), // 37: xla.DotDimensionNumbers + (*RaggedDotDimensionNumbers)(nil), // 38: xla.RaggedDotDimensionNumbers + (*SparsityDescriptor)(nil), // 39: xla.SparsityDescriptor + (*TriangularSolveOptions)(nil), // 40: xla.TriangularSolveOptions + (*CholeskyOptions)(nil), // 41: xla.CholeskyOptions + (*SortOptions)(nil), // 42: xla.SortOptions + (*FrontendAttributes)(nil), // 43: xla.FrontendAttributes + (*Statistic)(nil), // 44: xla.Statistic + (*StatisticsViz)(nil), // 45: xla.StatisticsViz + (*OpSharding)(nil), // 46: xla.OpSharding + (*ReplicaGroup)(nil), // 47: xla.ReplicaGroup + (*IotaReplicaGroupListProto)(nil), // 48: xla.IotaReplicaGroupListProto + (*CollectiveDeviceListProto)(nil), // 49: xla.CollectiveDeviceListProto + (*SourceTarget)(nil), // 50: xla.SourceTarget + (*ResultAccuracy)(nil), // 51: xla.ResultAccuracy + (*PrecisionConfig)(nil), // 52: xla.PrecisionConfig + (*ParameterReplication)(nil), // 53: xla.ParameterReplication + (*WhileLoopBackendConfig)(nil), // 54: xla.WhileLoopBackendConfig + (*OutputOperandAliasing)(nil), // 55: xla.OutputOperandAliasing + (*OriginalArrayProto)(nil), // 56: xla.OriginalArrayProto + (*OriginalValueProto)(nil), // 57: xla.OriginalValueProto + (*PaddingConfig_PaddingConfigDimension)(nil), // 58: xla.PaddingConfig.PaddingConfigDimension + (*OpMetadata_ProfileInfo)(nil), // 59: xla.OpMetadata.ProfileInfo + (*DeviceAssignmentProto_ComputationDevice)(nil), // 60: xla.DeviceAssignmentProto.ComputationDevice + nil, // 61: xla.FrontendAttributes.MapEntry + (*ResultAccuracy_Tolerance)(nil), // 62: xla.ResultAccuracy.Tolerance + (*WhileLoopBackendConfig_KnownTripCount)(nil), // 63: xla.WhileLoopBackendConfig.KnownTripCount } var file_xla_xla_data_proto_depIdxs = []int32{ - 55, // 0: xla.PaddingConfig.dimensions:type_name -> xla.PaddingConfig.PaddingConfigDimension + 58, // 0: xla.PaddingConfig.dimensions:type_name -> xla.PaddingConfig.PaddingConfigDimension 1, // 1: xla.LayoutProto.dim_level_types:type_name -> xla.DimLevelType - 17, // 2: xla.LayoutProto.tiles:type_name -> xla.TileProto + 18, // 2: xla.LayoutProto.tiles:type_name -> xla.TileProto 0, // 3: xla.LayoutProto.index_primitive_type:type_name -> xla.PrimitiveType 0, // 4: xla.LayoutProto.pointer_primitive_type:type_name -> xla.PrimitiveType - 20, // 5: xla.LayoutProto.physical_shape:type_name -> xla.ShapeProto - 18, // 6: xla.LayoutProto.split_configs:type_name -> xla.SplitConfigProto + 21, // 5: xla.LayoutProto.physical_shape:type_name -> xla.ShapeProto + 19, // 6: xla.LayoutProto.split_configs:type_name -> xla.SplitConfigProto 0, // 7: xla.ShapeProto.element_type:type_name -> xla.PrimitiveType - 20, // 8: xla.ShapeProto.tuple_shapes:type_name -> xla.ShapeProto - 19, // 9: xla.ShapeProto.layout:type_name -> xla.LayoutProto - 20, // 10: xla.ProgramShapeProto.parameters:type_name -> xla.ShapeProto - 20, // 11: xla.ProgramShapeProto.result:type_name -> xla.ShapeProto + 21, // 8: xla.ShapeProto.tuple_shapes:type_name -> xla.ShapeProto + 20, // 9: xla.ShapeProto.layout:type_name -> xla.LayoutProto + 21, // 10: xla.ProgramShapeProto.parameters:type_name -> xla.ShapeProto + 21, // 11: xla.ProgramShapeProto.result:type_name -> xla.ShapeProto 2, // 12: xla.OpMetadata.profile_type:type_name -> xla.ProfileType - 56, // 13: xla.OpMetadata.profile_info:type_name -> xla.OpMetadata.ProfileInfo + 59, // 13: xla.OpMetadata.profile_info:type_name -> xla.OpMetadata.ProfileInfo 10, // 14: xla.ChannelHandle.type:type_name -> xla.ChannelHandle.ChannelType - 57, // 15: xla.DeviceAssignmentProto.computation_devices:type_name -> xla.DeviceAssignmentProto.ComputationDevice - 20, // 16: xla.LiteralProto.shape:type_name -> xla.ShapeProto - 30, // 17: xla.LiteralProto.tuple_literals:type_name -> xla.LiteralProto - 31, // 18: xla.Window.dimensions:type_name -> xla.WindowDimension - 7, // 19: xla.SparsityDescriptor.type:type_name -> xla.SparsityType - 11, // 20: xla.TriangularSolveOptions.transpose_a:type_name -> xla.TriangularSolveOptions.Transpose - 58, // 21: xla.FrontendAttributes.map:type_name -> xla.FrontendAttributes.MapEntry - 42, // 22: xla.StatisticsViz.statistics:type_name -> xla.Statistic - 12, // 23: xla.OpSharding.type:type_name -> xla.OpSharding.Type - 20, // 24: xla.OpSharding.tile_shape:type_name -> xla.ShapeProto - 44, // 25: xla.OpSharding.tuple_shardings:type_name -> xla.OpSharding - 23, // 26: xla.OpSharding.metadata:type_name -> xla.OpMetadata - 12, // 27: xla.OpSharding.last_tile_dims:type_name -> xla.OpSharding.Type - 13, // 28: xla.OpSharding.shard_group_type:type_name -> xla.OpSharding.ShardGroupType - 45, // 29: xla.CollectiveDeviceListProto.replica_groups:type_name -> xla.ReplicaGroup - 46, // 30: xla.CollectiveDeviceListProto.iota_replica_group_list:type_name -> xla.IotaReplicaGroupListProto - 14, // 31: xla.PrecisionConfig.operand_precision:type_name -> xla.PrecisionConfig.Precision - 15, // 32: xla.PrecisionConfig.algorithm:type_name -> xla.PrecisionConfig.Algorithm - 59, // 33: xla.WhileLoopBackendConfig.known_trip_count:type_name -> xla.WhileLoopBackendConfig.KnownTripCount - 53, // 34: xla.OriginalValueProto.leaves:type_name -> xla.OriginalArrayProto - 2, // 35: xla.OpMetadata.ProfileInfo.profile_type:type_name -> xla.ProfileType - 3, // 36: xla.OpMetadata.ProfileInfo.profile_source:type_name -> xla.ProfileSource - 4, // 37: xla.OpMetadata.ProfileInfo.compilation_event:type_name -> xla.CompilationEvent - 38, // [38:38] is the sub-list for method output_type - 38, // [38:38] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name + 60, // 15: xla.DeviceAssignmentProto.computation_devices:type_name -> xla.DeviceAssignmentProto.ComputationDevice + 21, // 16: xla.LiteralProto.shape:type_name -> xla.ShapeProto + 31, // 17: xla.LiteralProto.tuple_literals:type_name -> xla.LiteralProto + 32, // 18: xla.Window.dimensions:type_name -> xla.WindowDimension + 37, // 19: xla.RaggedDotDimensionNumbers.dot_dimension_numbers:type_name -> xla.DotDimensionNumbers + 7, // 20: xla.SparsityDescriptor.type:type_name -> xla.SparsityType + 11, // 21: xla.TriangularSolveOptions.transpose_a:type_name -> xla.TriangularSolveOptions.Transpose + 61, // 22: xla.FrontendAttributes.map:type_name -> xla.FrontendAttributes.MapEntry + 44, // 23: xla.StatisticsViz.statistics:type_name -> xla.Statistic + 12, // 24: xla.OpSharding.type:type_name -> xla.OpSharding.Type + 21, // 25: xla.OpSharding.tile_shape:type_name -> xla.ShapeProto + 46, // 26: xla.OpSharding.tuple_shardings:type_name -> xla.OpSharding + 24, // 27: xla.OpSharding.metadata:type_name -> xla.OpMetadata + 12, // 28: xla.OpSharding.last_tile_dims:type_name -> xla.OpSharding.Type + 13, // 29: xla.OpSharding.shard_group_type:type_name -> xla.OpSharding.ShardGroupType + 47, // 30: xla.CollectiveDeviceListProto.replica_groups:type_name -> xla.ReplicaGroup + 48, // 31: xla.CollectiveDeviceListProto.iota_replica_group_list:type_name -> xla.IotaReplicaGroupListProto + 14, // 32: xla.ResultAccuracy.mode:type_name -> xla.ResultAccuracy.Mode + 62, // 33: xla.ResultAccuracy.tolerance:type_name -> xla.ResultAccuracy.Tolerance + 15, // 34: xla.PrecisionConfig.operand_precision:type_name -> xla.PrecisionConfig.Precision + 16, // 35: xla.PrecisionConfig.algorithm:type_name -> xla.PrecisionConfig.Algorithm + 63, // 36: xla.WhileLoopBackendConfig.known_trip_count:type_name -> xla.WhileLoopBackendConfig.KnownTripCount + 56, // 37: xla.OriginalValueProto.leaves:type_name -> xla.OriginalArrayProto + 2, // 38: xla.OpMetadata.ProfileInfo.profile_type:type_name -> xla.ProfileType + 3, // 39: xla.OpMetadata.ProfileInfo.profile_source:type_name -> xla.ProfileSource + 4, // 40: xla.OpMetadata.ProfileInfo.compilation_event:type_name -> xla.CompilationEvent + 41, // [41:41] is the sub-list for method output_type + 41, // [41:41] is the sub-list for method input_type + 41, // [41:41] is the sub-list for extension type_name + 41, // [41:41] is the sub-list for extension extendee + 0, // [0:41] is the sub-list for field type_name } func init() { file_xla_xla_data_proto_init() } @@ -5317,531 +5556,17 @@ func file_xla_xla_data_proto_init() { if File_xla_xla_data_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_xla_xla_data_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*PaddingConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*TileProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*SplitConfigProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*LayoutProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ShapeProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*ProgramShapeProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*ComputationStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*OpMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ExecutionProfile); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*ExecutionHandle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*GlobalDataHandle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DeviceHandle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ChannelHandle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*DeviceAssignmentProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*LiteralProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*WindowDimension); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*Window); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*GatherDimensionNumbers); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*ScatterDimensionNumbers); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*ConvolutionDimensionNumbers); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*DotDimensionNumbers); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*SparsityDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*TriangularSolveOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*CholeskyOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*SortOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*FrontendAttributes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*Statistic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*StatisticsViz); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*OpSharding); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*ReplicaGroup); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*IotaReplicaGroupListProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*CollectiveDeviceListProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*SourceTarget); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*PrecisionConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*ParameterReplication); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*WhileLoopBackendConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*OutputOperandAliasing); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*OriginalArrayProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*OriginalValueProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*PaddingConfig_PaddingConfigDimension); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*OpMetadata_ProfileInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*DeviceAssignmentProto_ComputationDevice); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xla_xla_data_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*WhileLoopBackendConfig_KnownTripCount); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } + file_xla_xla_data_proto_msgTypes[34].OneofWrappers = []any{ + (*ResultAccuracy_Mode_)(nil), + (*ResultAccuracy_Tolerance_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xla_xla_data_proto_rawDesc, - NumEnums: 16, - NumMessages: 44, + NumEnums: 17, + NumMessages: 47, NumExtensions: 0, NumServices: 0, },