From 17e942a46243789b26ef24be7cbf40582681c75f Mon Sep 17 00:00:00 2001 From: Anda Zhou <83614683+azhou-determined@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:48:08 -0700 Subject: [PATCH] chore: refactor searcher operations out of master side searchers (#10024) Refactors searchers in master to no longer issue operation workloads to trials. This only functionally affects ASHA search algorithms, which are now preemption-based instead of promotion-based. - Removes all `SearcherOperation` APIs. - Removes the non-stopping variant of adaptive ASHA, deprecating the `stop_once` config option. - Removes and deprecates the `max_length` requirement for all experiments. - Introduces `time_metric` and `max_time` as new resource configuration options for ASHA searchers. - Reporting validation metrics now reports to the searcher (only affects ASHA searchers). - Preview HP Search was refactored to estimate training lengths based on ASHA rungs. --- .circleci/real_config.yml | 1 + .../reference/experiment-config-reference.rst | 78 +- harness/determined/cli/cli.py | 86 +- harness/determined/common/api/bindings.py | 431 +- harness/tests/cli/test_cli.py | 115 + harness/tests/cli/util.py | 18 + .../integrations/test_deepspeed_trial.py | 13 +- .../internal/api_config_policies_intg_test.go | 3 + master/internal/api_experiment.go | 47 +- master/internal/api_experiment_intg_test.go | 1 - master/internal/api_runs.go | 9 - master/internal/api_trials.go | 96 +- master/internal/api_trials_intg_test.go | 18 +- master/internal/core.go | 3 - master/internal/core_searcher.go | 49 - master/internal/db/postgres_experiments.go | 38 +- .../db/postgres_experiments_intg_test.go | 11 +- master/internal/db/postgres_test_utils.go | 9 +- master/internal/db/postgres_trial.go | 31 +- master/internal/experiment.go | 252 +- .../internal/experiment/experiment_iface.go | 27 +- master/internal/restore.go | 153 +- master/internal/restore_test.go | 73 +- master/internal/telemetry/telemetry_test.go | 7 +- .../internal/templates/service_intg_test.go | 9 +- master/internal/trial.go | 35 +- master/internal/trial_intg_test.go | 51 +- master/internal/trials/postgres_trials.go | 21 +- master/pkg/model/searcher.go | 18 - master/pkg/model/test_utils.go | 7 +- .../pkg/schemas/expconf/experiment_config.go | 10 - master/pkg/schemas/expconf/searcher_config.go | 154 +- .../expconf/zgen_adaptive_asha_config_v0.go | 46 +- .../expconf/zgen_adaptive_config_v0.go | 11 +- .../expconf/zgen_adaptive_simple_config_v0.go | 11 +- .../expconf/zgen_async_halving_config_v0.go | 46 +- .../schemas/expconf/zgen_grid_config_v0.go | 11 +- .../schemas/expconf/zgen_random_config_v0.go | 11 +- .../schemas/expconf/zgen_single_config_v0.go | 11 +- .../expconf/zgen_sync_halving_config_v0.go | 11 +- master/pkg/schemas/zgen_schemas.go | 42 +- master/pkg/searcher/actions.go | 73 + master/pkg/searcher/adaptive_asha.go | 62 +- master/pkg/searcher/adaptive_asha_test.go | 227 +- master/pkg/searcher/asha.go | 327 - master/pkg/searcher/asha_stopping.go | 291 +- master/pkg/searcher/asha_stopping_test.go | 618 +- master/pkg/searcher/asha_test.go | 231 - master/pkg/searcher/grid.go | 63 +- master/pkg/searcher/grid_test.go | 83 +- master/pkg/searcher/operations.go | 280 - master/pkg/searcher/random.go | 49 +- master/pkg/searcher/random_test.go | 130 +- master/pkg/searcher/search_method.go | 51 +- master/pkg/searcher/searcher.go | 99 +- master/pkg/searcher/simulate.go | 285 +- master/pkg/searcher/simulate_test.go | 83 + master/pkg/searcher/tournament.go | 72 +- master/pkg/searcher/tournament_test.go | 152 +- master/pkg/searcher/util_test.go | 374 +- proto/patches/api.json | 7 - proto/pkg/apiv1/api.pb.go | 5272 ++++++++--------- proto/pkg/apiv1/api.pb.gw.go | 212 - proto/pkg/apiv1/experiment.pb.go | 1109 ++-- proto/pkg/apiv1/trial.pb.go | 1229 ++-- proto/pkg/experimentv1/searcher.pb.go | 577 +- proto/src/determined/api/v1/api.proto | 22 - proto/src/determined/api/v1/experiment.proto | 4 +- proto/src/determined/api/v1/trial.proto | 31 - .../determined/experiment/v1/searcher.proto | 73 +- .../expconf/v0/searcher-adaptive-asha.json | 16 +- .../expconf/v0/searcher-async-halving.json | 16 +- schemas/expconf/v0/searcher.json | 2 + webui/react/src/services/api-ts-sdk/api.ts | 385 +- 74 files changed, 6205 insertions(+), 8374 deletions(-) create mode 100644 master/pkg/searcher/actions.go delete mode 100644 master/pkg/searcher/asha.go delete mode 100644 master/pkg/searcher/asha_test.go delete mode 100644 master/pkg/searcher/operations.go create mode 100644 master/pkg/searcher/simulate_test.go diff --git a/.circleci/real_config.yml b/.circleci/real_config.yml index 0f7bbd7ca72..e12abdbe772 100644 --- a/.circleci/real_config.yml +++ b/.circleci/real_config.yml @@ -2603,6 +2603,7 @@ jobs: - run: pip install mypy pytest coverage - install-codecov - setup-paths + - run: make -C harness install - run: COVERAGE_FILE=$PWD/test-unit-harness-tf2-pycov make -C harness test-tf2 - run: coverage xml -i --data-file=./test-unit-harness-tf2-pycov - run: codecov -v -t $CODECOV_TOKEN -F harness diff --git a/docs/reference/experiment-config-reference.rst b/docs/reference/experiment-config-reference.rst index fbafc3e9dbc..65896f57cb4 100644 --- a/docs/reference/experiment-config-reference.rst +++ b/docs/reference/experiment-config-reference.rst @@ -956,6 +956,76 @@ the model architecture of this experiment. Optional. Like ``source_trial_id``, but specifies an arbitrary checkpoint from which to initialize weights. At most one of ``source_trial_id`` or ``source_checkpoint_uuid`` should be set. +.. _experiment-configuration-searcher-asha: + +Asynchronous Halving (ASHA) +=========================== + +The ``async_halving`` search performs a version of the asynchronous successive halving algorithm +(`ASHA `_) that stops trials early if there is enough evidence +to terminate training. Once trials are stopped, they will not be resumed. + +``metric`` +---------- + +Required. The name of the validation metric used to evaluate the performance of a hyperparameter +configuration. + +``time_metric`` +--------------- + +Required. The name of the validation metric used to evaluate the progress of a given trial. + +``max_time`` +------------ + +Required. The maximum value that ``time_metric`` should take when a trial finishes training. Early +stopping is decided based on how far the ``time_metric`` has progressed towards this ``max_time`` +value. + +``max_trials`` +-------------- + +Required. The number of trials, i.e., hyperparameter configurations, to evaluate. + +``num_rungs`` +------------- + +Required. The number of rounds of successive halving to perform. + +``smaller_is_better`` +--------------------- + +Optional. Whether to minimize or maximize the metric defined above. The default value is ``true`` +(minimize). + +``divisor`` +----------- + +Optional. The fraction of trials to keep at each rung, and also determines the training length for +each rung. The default setting is ``4``; only advanced users should consider changing this value. + +``max_concurrent_trials`` +------------------------- + +Optional. The maximum number of trials that can be worked on simultaneously. The default value is +``16``, and we set reasonable values depending on ``max_trials`` and the number of rungs in the +brackets. This is akin to controlling the degree of parallelism of the experiment. If this value is +less than the number of brackets produced by the adaptive algorithm, it will be rounded up. + +``source_trial_id`` +------------------- + +Optional. If specified, the weights of *every* trial in the search will be initialized to the most +recent checkpoint of the given trial ID. This will fail if the source trial's model architecture is +inconsistent with the model architecture of any of the trials in this experiment. + +``source_checkpoint_uuid`` +-------------------------- + +Optional. Like ``source_trial_id``, but specifies an arbitrary checkpoint from which to initialize +weights. At most one of ``source_trial_id`` or ``source_checkpoint_uuid`` should be set. + .. _experiment-configuration-searcher-adaptive: Adaptive ASHA @@ -1007,14 +1077,6 @@ end of the spectrum, ``conservative`` mode performs significantly less downsampl consequence does not explore as many configurations given the same budget. We recommend using either ``aggressive`` or ``standard`` mode. -``stop_once`` -------------- - -Optional. If ``stop_once`` is set to ``true``, we will use a variant of ASHA that will not resume -trials once stopped. This variant defaults to continuing training and will only stop trials if there -is enough evidence to terminate training. We recommend using this version of ASHA when training a -trial for the max length as fast as possible is important or when fault tolerance is too expensive. - ``divisor`` ----------- diff --git a/harness/determined/cli/cli.py b/harness/determined/cli/cli.py index 50044554d3b..17b63a997f6 100644 --- a/harness/determined/cli/cli.py +++ b/harness/determined/cli/cli.py @@ -47,66 +47,52 @@ version, workspace, ) -from determined.common import api, util, yaml +from determined.common import api, util from determined.common.api import bindings, certs +def _render_search_summary(resp: bindings.v1PreviewHPSearchResponse) -> str: + output = [ + termcolor.colored("Using search configuration:", "green"), + ] + + # For mypy + assert resp.summary and resp.summary.config and resp.summary.trials + # Exclude empty configs from rendering. + searcher_config = {k: v for k, v in resp.summary.config.items() if v is not None} + + config_str = render.format_object_as_yaml(searcher_config) + output.append(config_str) + headers = ["Trials", "Training Time"] + trial_summaries = [] + for trial_summary in resp.summary.trials: + num_trials = trial_summary.count + trial_unit = trial_summary.unit + if trial_unit.maxLength: + summary = "train to completion" + else: + summary = f"train for {trial_unit.value} {trial_unit.name}" + trial_summaries.append([num_trials, summary]) + + output.append(tabulate.tabulate(trial_summaries, headers, tablefmt="presto")) + return "\n".join(output) + + def preview_search(args: argparse.Namespace) -> None: sess = cli.setup_session(args) experiment_config = util.safe_load_yaml_with_exceptions(args.config_file) args.config_file.close() if "searcher" not in experiment_config: - print("Experiment configuration must have 'searcher' section") - sys.exit(1) - r = sess.post("searcher/preview", json=experiment_config) - j = r.json() + raise errors.CliError("Missing 'searcher' config section in experiment config.") - def to_full_name(kind: str) -> str: - try: - # The unitless searcher case, for masters newer than 0.17.6. - length = int(kind) - return f"train for {length}" - except ValueError: - pass - if kind[-1] == "R": - return "train {} records".format(kind[:-1]) - if kind[-1] == "B": - return "train {} batch(es)".format(kind[:-1]) - if kind[-1] == "E": - return "train {} epoch(s)".format(kind[:-1]) - if kind == "V": - return "validation" - raise ValueError("unexpected kind: {}".format(kind)) - - def render_sequence(sequence: List[str]) -> str: - if not sequence: - return "N/A" - instructions = [] - current = sequence[0] - count = 0 - for k in sequence: - if k != current: - instructions.append("{} x {}".format(count, to_full_name(current))) - current = k - count = 1 - else: - count += 1 - instructions.append("{} x {}".format(count, to_full_name(current))) - return ", ".join(instructions) - - headers = ["Trials", "Breakdown"] - values = [ - (count, render_sequence(operations.split())) for operations, count in j["results"].items() - ] - - print(termcolor.colored("Using search configuration:", "green")) - yml = yaml.YAML() - yml.indent(mapping=2, sequence=4, offset=2) - yml.dump(experiment_config["searcher"], sys.stdout) - print() - print("This search will create a total of {} trial(s).".format(sum(j["results"].values()))) - print(tabulate.tabulate(values, headers, tablefmt="presto"), flush=False) + resp = bindings.post_PreviewHPSearch( + session=sess, + body=bindings.v1PreviewHPSearchRequest( + config=experiment_config, + ), + ) + print(_render_search_summary(resp=resp)) args_description = [ diff --git a/harness/determined/common/api/bindings.py b/harness/determined/common/api/bindings.py index 09a74a595aa..b6384d66a20 100644 --- a/harness/determined/common/api/bindings.py +++ b/harness/determined/common/api/bindings.py @@ -2654,41 +2654,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } return out -class v1CompleteValidateAfterOperation(Printable): - """Used to complete a ValidateAfterOperation.""" - op: "typing.Optional[v1ValidateAfterOperation]" = None - searcherMetric: "typing.Optional[typing.Any]" = None - - def __init__( - self, - *, - op: "typing.Union[v1ValidateAfterOperation, None, Unset]" = _unset, - searcherMetric: "typing.Union[typing.Any, None, Unset]" = _unset, - ): - if not isinstance(op, Unset): - self.op = op - if not isinstance(searcherMetric, Unset): - self.searcherMetric = searcherMetric - - @classmethod - def from_json(cls, obj: Json) -> "v1CompleteValidateAfterOperation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "op" in obj: - kwargs["op"] = v1ValidateAfterOperation.from_json(obj["op"]) if obj["op"] is not None else None - if "searcherMetric" in obj: - kwargs["searcherMetric"] = obj["searcherMetric"] - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "op" in vars(self): - out["op"] = None if self.op is None else self.op.to_json(omit_unset) - if not omit_unset or "searcherMetric" in vars(self): - out["searcherMetric"] = self.searcherMetric - return out - class v1Config(Printable): """The config to be patched into Master Config.""" log: "typing.Optional[v1LogConfig]" = None @@ -4278,51 +4243,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } return out -class v1ExperimentSimulation(Printable): - """ExperimentSimulation holds the configuration and results of simulated run of - a searcher. - """ - config: "typing.Optional[typing.Dict[str, typing.Any]]" = None - seed: "typing.Optional[int]" = None - trials: "typing.Optional[typing.Sequence[v1TrialSimulation]]" = None - - def __init__( - self, - *, - config: "typing.Union[typing.Dict[str, typing.Any], None, Unset]" = _unset, - seed: "typing.Union[int, None, Unset]" = _unset, - trials: "typing.Union[typing.Sequence[v1TrialSimulation], None, Unset]" = _unset, - ): - if not isinstance(config, Unset): - self.config = config - if not isinstance(seed, Unset): - self.seed = seed - if not isinstance(trials, Unset): - self.trials = trials - - @classmethod - def from_json(cls, obj: Json) -> "v1ExperimentSimulation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "config" in obj: - kwargs["config"] = obj["config"] - if "seed" in obj: - kwargs["seed"] = obj["seed"] - if "trials" in obj: - kwargs["trials"] = [v1TrialSimulation.from_json(x) for x in obj["trials"]] if obj["trials"] is not None else None - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "config" in vars(self): - out["config"] = self.config - if not omit_unset or "seed" in vars(self): - out["seed"] = self.seed - if not omit_unset or "trials" in vars(self): - out["trials"] = None if self.trials is None else [x.to_json(omit_unset) for x in self.trials] - return out - class v1FailureType(DetEnum): """The failure type of a resource. - FAILURE_TYPE_UNSPECIFIED: UNSPECIFIED denotes an error that is not defined below. @@ -5075,40 +4995,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: out["pagination"] = None if self.pagination is None else self.pagination.to_json(omit_unset) return out -class v1GetCurrentTrialSearcherOperationResponse(Printable): - completed: "typing.Optional[bool]" = None - op: "typing.Optional[v1TrialOperation]" = None - - def __init__( - self, - *, - completed: "typing.Union[bool, None, Unset]" = _unset, - op: "typing.Union[v1TrialOperation, None, Unset]" = _unset, - ): - if not isinstance(completed, Unset): - self.completed = completed - if not isinstance(op, Unset): - self.op = op - - @classmethod - def from_json(cls, obj: Json) -> "v1GetCurrentTrialSearcherOperationResponse": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "completed" in obj: - kwargs["completed"] = obj["completed"] - if "op" in obj: - kwargs["op"] = v1TrialOperation.from_json(obj["op"]) if obj["op"] is not None else None - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "completed" in vars(self): - out["completed"] = self.completed - if not omit_unset or "op" in vars(self): - out["op"] = None if self.op is None else self.op.to_json(omit_unset) - return out - class v1GetExperimentCheckpointsResponse(Printable): """Response to GetExperimentCheckpointsRequest.""" @@ -12395,29 +12281,29 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: class v1PreviewHPSearchResponse(Printable): """Response to PreviewSearchRequest.""" - simulation: "typing.Optional[v1ExperimentSimulation]" = None + summary: "typing.Optional[v1SearchSummary]" = None def __init__( self, *, - simulation: "typing.Union[v1ExperimentSimulation, None, Unset]" = _unset, + summary: "typing.Union[v1SearchSummary, None, Unset]" = _unset, ): - if not isinstance(simulation, Unset): - self.simulation = simulation + if not isinstance(summary, Unset): + self.summary = summary @classmethod def from_json(cls, obj: Json) -> "v1PreviewHPSearchResponse": kwargs: "typing.Dict[str, typing.Any]" = { } - if "simulation" in obj: - kwargs["simulation"] = v1ExperimentSimulation.from_json(obj["simulation"]) if obj["simulation"] is not None else None + if "summary" in obj: + kwargs["summary"] = v1SearchSummary.from_json(obj["summary"]) if obj["summary"] is not None else None return cls(**kwargs) def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: out: "typing.Dict[str, typing.Any]" = { } - if not omit_unset or "simulation" in vars(self): - out["simulation"] = None if self.simulation is None else self.simulation.to_json(omit_unset) + if not omit_unset or "summary" in vars(self): + out["summary"] = None if self.summary is None else self.summary.to_json(omit_unset) return out class v1Project(Printable): @@ -14612,54 +14498,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: out["storageId"] = self.storageId return out -class v1RunnableOperation(Printable): - """RunnableOperation represents a single runnable operation emitted by a - searcher. - """ - length: "typing.Optional[str]" = None - type: "typing.Optional[v1RunnableType]" = None - - def __init__( - self, - *, - length: "typing.Union[str, None, Unset]" = _unset, - type: "typing.Union[v1RunnableType, None, Unset]" = _unset, - ): - if not isinstance(length, Unset): - self.length = length - if not isinstance(type, Unset): - self.type = type - - @classmethod - def from_json(cls, obj: Json) -> "v1RunnableOperation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "length" in obj: - kwargs["length"] = obj["length"] - if "type" in obj: - kwargs["type"] = v1RunnableType(obj["type"]) if obj["type"] is not None else None - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "length" in vars(self): - out["length"] = self.length - if not omit_unset or "type" in vars(self): - out["type"] = None if self.type is None else self.type.value - return out - -class v1RunnableType(DetEnum): - """RunnableType defines the type of operation that should be executed by trial - runners. - - RUNNABLE_TYPE_UNSPECIFIED: Denotes an unknown runnable type. - - RUNNABLE_TYPE_TRAIN: Signals to a trial runner that it should run a train. - - RUNNABLE_TYPE_VALIDATE: Signals to a trial runner it should compute validation metrics. - """ - UNSPECIFIED = "RUNNABLE_TYPE_UNSPECIFIED" - TRAIN = "RUNNABLE_TYPE_TRAIN" - VALIDATE = "RUNNABLE_TYPE_VALIDATE" - class v1SSOProvider(Printable): """Describe one SSO provider.""" alwaysRedirect: "typing.Optional[bool]" = None @@ -15053,6 +14891,78 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } return out +class v1SearchSummary(Printable): + """SearchSummary contains the estimated trials and training lengths that a + search plans to execute. + """ + trials: "typing.Optional[typing.Sequence[v1TrialSummary]]" = None + + def __init__( + self, + *, + config: "typing.Dict[str, typing.Any]", + trials: "typing.Union[typing.Sequence[v1TrialSummary], None, Unset]" = _unset, + ): + self.config = config + if not isinstance(trials, Unset): + self.trials = trials + + @classmethod + def from_json(cls, obj: Json) -> "v1SearchSummary": + kwargs: "typing.Dict[str, typing.Any]" = { + "config": obj["config"], + } + if "trials" in obj: + kwargs["trials"] = [v1TrialSummary.from_json(x) for x in obj["trials"]] if obj["trials"] is not None else None + return cls(**kwargs) + + def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: + out: "typing.Dict[str, typing.Any]" = { + "config": self.config, + } + if not omit_unset or "trials" in vars(self): + out["trials"] = None if self.trials is None else [x.to_json(omit_unset) for x in self.trials] + return out + +class v1SearchUnit(Printable): + """SearchUnit describes a length unit used by some searchers to manage training.""" + name: "typing.Optional[str]" = None + value: "typing.Optional[int]" = None + + def __init__( + self, + *, + maxLength: bool, + name: "typing.Union[str, None, Unset]" = _unset, + value: "typing.Union[int, None, Unset]" = _unset, + ): + self.maxLength = maxLength + if not isinstance(name, Unset): + self.name = name + if not isinstance(value, Unset): + self.value = value + + @classmethod + def from_json(cls, obj: Json) -> "v1SearchUnit": + kwargs: "typing.Dict[str, typing.Any]" = { + "maxLength": obj["maxLength"], + } + if "name" in obj: + kwargs["name"] = obj["name"] + if "value" in obj: + kwargs["value"] = obj["value"] + return cls(**kwargs) + + def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: + out: "typing.Dict[str, typing.Any]" = { + "maxLength": self.maxLength, + } + if not omit_unset or "name" in vars(self): + out["name"] = self.name + if not omit_unset or "value" in vars(self): + out["value"] = self.value + return out + class v1SetClusterMessageRequest(Printable): """Set the cluster-wide message.""" duration: "typing.Optional[str]" = None @@ -16610,33 +16520,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: out["stepsCompleted"] = self.stepsCompleted return out -class v1TrialOperation(Printable): - """TrialOperation is any operation that a trial can perform while it is active.""" - validateAfter: "typing.Optional[v1ValidateAfterOperation]" = None - - def __init__( - self, - *, - validateAfter: "typing.Union[v1ValidateAfterOperation, None, Unset]" = _unset, - ): - if not isinstance(validateAfter, Unset): - self.validateAfter = validateAfter - - @classmethod - def from_json(cls, obj: Json) -> "v1TrialOperation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "validateAfter" in obj: - kwargs["validateAfter"] = v1ValidateAfterOperation.from_json(obj["validateAfter"]) if obj["validateAfter"] is not None else None - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "validateAfter" in vars(self): - out["validateAfter"] = None if self.validateAfter is None else self.validateAfter.to_json(omit_unset) - return out - class v1TrialProfilerMetricLabels(Printable): agentId: "typing.Optional[str]" = None gpuUuid: "typing.Optional[str]" = None @@ -16749,43 +16632,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } return out -class v1TrialSimulation(Printable): - """TrialSimulation is a specific sequence of workloads that were run before the - trial was completed. - """ - occurrences: "typing.Optional[int]" = None - operations: "typing.Optional[typing.Sequence[v1RunnableOperation]]" = None - - def __init__( - self, - *, - occurrences: "typing.Union[int, None, Unset]" = _unset, - operations: "typing.Union[typing.Sequence[v1RunnableOperation], None, Unset]" = _unset, - ): - if not isinstance(occurrences, Unset): - self.occurrences = occurrences - if not isinstance(operations, Unset): - self.operations = operations - - @classmethod - def from_json(cls, obj: Json) -> "v1TrialSimulation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "occurrences" in obj: - kwargs["occurrences"] = obj["occurrences"] - if "operations" in obj: - kwargs["operations"] = [v1RunnableOperation.from_json(x) for x in obj["operations"]] if obj["operations"] is not None else None - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "occurrences" in vars(self): - out["occurrences"] = self.occurrences - if not omit_unset or "operations" in vars(self): - out["operations"] = None if self.operations is None else [x.to_json(omit_unset) for x in self.operations] - return out - class v1TrialSourceInfo(Printable): modelId: "typing.Optional[int]" = None modelVersion: "typing.Optional[int]" = None @@ -16843,6 +16689,35 @@ class v1TrialSourceInfoType(DetEnum): INFERENCE = "TRIAL_SOURCE_INFO_TYPE_INFERENCE" FINE_TUNING = "TRIAL_SOURCE_INFO_TYPE_FINE_TUNING" +class v1TrialSummary(Printable): + """TrialSummary describes the runs that are estimated to train for a certain + length. + """ + + def __init__( + self, + *, + count: int, + unit: "v1SearchUnit", + ): + self.count = count + self.unit = unit + + @classmethod + def from_json(cls, obj: Json) -> "v1TrialSummary": + kwargs: "typing.Dict[str, typing.Any]" = { + "count": obj["count"], + "unit": v1SearchUnit.from_json(obj["unit"]), + } + return cls(**kwargs) + + def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: + out: "typing.Dict[str, typing.Any]" = { + "count": self.count, + "unit": self.unit.to_json(omit_unset), + } + return out + class v1TrialsSampleResponse(Printable): def __init__( @@ -17550,43 +17425,6 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: out["value"] = self.value return out -class v1ValidateAfterOperation(Printable): - """ValidateAfterOperation means the trial should train and validate after - training the given length. - """ - length: "typing.Optional[str]" = None - requestId: "typing.Optional[str]" = None - - def __init__( - self, - *, - length: "typing.Union[str, None, Unset]" = _unset, - requestId: "typing.Union[str, None, Unset]" = _unset, - ): - if not isinstance(length, Unset): - self.length = length - if not isinstance(requestId, Unset): - self.requestId = requestId - - @classmethod - def from_json(cls, obj: Json) -> "v1ValidateAfterOperation": - kwargs: "typing.Dict[str, typing.Any]" = { - } - if "length" in obj: - kwargs["length"] = obj["length"] - if "requestId" in obj: - kwargs["requestId"] = obj["requestId"] - return cls(**kwargs) - - def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: - out: "typing.Dict[str, typing.Any]" = { - } - if not omit_unset or "length" in vars(self): - out["length"] = self.length - if not omit_unset or "requestId" in vars(self): - out["requestId"] = self.requestId - return out - class v1ValidationHistoryEntry(Printable): """ValidationHistoryEntry is a single entry for a validation history for an experiment. @@ -18726,33 +18564,6 @@ def get_CompareTrials( return v1CompareTrialsResponse.from_json(_resp.json()) raise APIHttpError("get_CompareTrials", _resp) -def post_CompleteTrialSearcherValidation( - session: "api.BaseSession", - *, - body: "v1CompleteValidateAfterOperation", - trialId: int, -) -> None: - """Reports to the searcher that the trial has completed the given searcher - operation. - - - body: The completed operation. - - trialId: The id of the trial. - """ - _params = None - _resp = session._do_request( - method="POST", - path=f"/api/v1/trials/{trialId}/searcher/completed_operation", - params=_params, - json=body.to_json(True), - data=None, - headers=None, - timeout=None, - stream=False, - ) - if _resp.status_code == 200: - return - raise APIHttpError("post_CompleteTrialSearcherValidation", _resp) - def post_ContinueExperiment( session: "api.BaseSession", *, @@ -19805,30 +19616,6 @@ def get_GetCommands( return v1GetCommandsResponse.from_json(_resp.json()) raise APIHttpError("get_GetCommands", _resp) -def get_GetCurrentTrialSearcherOperation( - session: "api.BaseSession", - *, - trialId: int, -) -> "v1GetCurrentTrialSearcherOperationResponse": - """Get the current searcher operation. - - - trialId: The id of the trial. - """ - _params = None - _resp = session._do_request( - method="GET", - path=f"/api/v1/trials/{trialId}/searcher/operation", - params=_params, - json=None, - data=None, - headers=None, - timeout=None, - stream=False, - ) - if _resp.status_code == 200: - return v1GetCurrentTrialSearcherOperationResponse.from_json(_resp.json()) - raise APIHttpError("get_GetCurrentTrialSearcherOperation", _resp) - def get_GetExperiment( session: "api.BaseSession", *, diff --git a/harness/tests/cli/test_cli.py b/harness/tests/cli/test_cli.py index 9a5b0bf9b40..00ddfaccc59 100644 --- a/harness/tests/cli/test_cli.py +++ b/harness/tests/cli/test_cli.py @@ -1,6 +1,7 @@ import collections import inspect import io +import json import os import pathlib import sys @@ -12,13 +13,16 @@ import pytest import requests import requests_mock +from responses import matchers from determined.cli import cli, ntsc, render from determined.common import constants, context from determined.common.api import bindings from tests import filetree +from tests.cli import util MINIMAL_CONFIG = '{"description": "test"}' +MASTER_HOST = "http://localhost:8080" def test_parse_config() -> None: @@ -566,3 +570,114 @@ def test_dev_bindings_call_arg_unmarshal(case: Tuple[List[str], Dict[str, Any]]) _, params = dev.bindings_sig(bindings.get_ExpMetricNames) kwargs = dev.parse_args_to_kwargs(args, params) assert kwargs == expected, kwargs + + +def test_preview_search(tmp_path: pathlib.Path) -> None: + # Random + max_trials = 10 + searcher_config = { + "hyperparameters": { + "x": 12, + }, + "name": "test preview search (random)", + "searcher": { + "name": "random", + "metric": "loss", + "max_trials": max_trials, + }, + } + conf_path = tmp_path / "config.yaml" + with conf_path.open("w") as tmp_file: + tmp_file.write(json.dumps(searcher_config)) + + mock_resp = bindings.v1PreviewHPSearchResponse( + summary=bindings.v1SearchSummary( + config=searcher_config, + trials=[ + bindings.v1TrialSummary( + count=max_trials, + unit=bindings.v1SearchUnit(maxLength=True), + ) + ], + ) + ) + with util.standard_cli_rsps() as rsps: + rsps.post( + f"{MASTER_HOST}/api/v1/preview-hp-search", + status=200, + match=[ + matchers.json_params_matcher( + params={ + "config": searcher_config, + } + ) + ], + json=mock_resp.to_json(), + ) + expected_output = f"""Using search configuration: +{render.format_object_as_yaml(searcher_config)} + Trials | Training Time +----------+--------------------- + 10 | train to completion +""" + util.check_cli_output(["preview-search", str(conf_path)], expected_output) + + # ASHA + searcher_config = { + "hyperparameters": { + "x": 12, + }, + "name": "test preview search (asha)", + "searcher": { + "bracket_rungs": [], + "divisor": 5, + "max_concurrent_trials": 5, + "max_rungs": 5, + "max_time": 1000, + "max_trials": 10, + "metric": "loss", + "mode": "standard", + "name": "adaptive_asha", + "time_metric": "batch", + }, + } + conf_path = tmp_path / "config.yaml" + with conf_path.open("w") as tmp_file: + tmp_file.write(json.dumps(searcher_config)) + + mock_resp = bindings.v1PreviewHPSearchResponse( + summary=bindings.v1SearchSummary( + config=searcher_config, + trials=[ + bindings.v1TrialSummary( + count=7, + unit=bindings.v1SearchUnit(name="batch", value=200, maxLength=False), + ), + bindings.v1TrialSummary( + count=3, + unit=bindings.v1SearchUnit(name="batch", value=1000, maxLength=False), + ), + ], + ) + ) + with util.standard_cli_rsps() as rsps: + rsps.post( + f"{MASTER_HOST}/api/v1/preview-hp-search", + status=200, + match=[ + matchers.json_params_matcher( + params={ + "config": searcher_config, + } + ) + ], + json=mock_resp.to_json(), + ) + expected_output = f"""Using search configuration: +{render.format_object_as_yaml(searcher_config)} + Trials | Training Time +----------+---------------------- + 7 | train for 200 batch + 3 | train for 1000 batch +""" + util.check_cli_output(["preview-search", str(conf_path)], expected_output) diff --git a/harness/tests/cli/util.py b/harness/tests/cli/util.py index cbe674c68fe..b1d414558cb 100644 --- a/harness/tests/cli/util.py +++ b/harness/tests/cli/util.py @@ -1,4 +1,6 @@ import contextlib +import difflib +import io import os from typing import Any, Iterator, List, Optional, cast @@ -6,6 +8,7 @@ from responses import registries import determined as det +from determined.cli import cli from determined.common.api import authentication @@ -151,3 +154,18 @@ def expect_get_info( rsps.get(f"{master_url}/info", status=200, json={"version": det.__version__}) else: responses.get(f"{master_url}/info", status=200, json={"version": det.__version__}) + + +def check_cli_output(args: List[str], expected: str) -> None: + """ + Helper method to test CLI methods that checks redirected STDOUT from the executed command + matches expected output. + """ + with contextlib.redirect_stdout(io.StringIO()) as f: + cli.main(args=args) + actual = f.getvalue() + exp_lines = expected.splitlines(keepends=True) + act_lines = actual.splitlines(keepends=True) + diff_lines = difflib.ndiff(act_lines, exp_lines) + diff = "".join(diff_lines) + assert actual == expected, f"CLI output for {args} actual(-) != expected(+):\n {diff}" diff --git a/harness/tests/experiment/integrations/test_deepspeed_trial.py b/harness/tests/experiment/integrations/test_deepspeed_trial.py index 980196b265f..06a2e4d6f57 100644 --- a/harness/tests/experiment/integrations/test_deepspeed_trial.py +++ b/harness/tests/experiment/integrations/test_deepspeed_trial.py @@ -36,6 +36,12 @@ def manual_init_distributed() -> Iterator[None]: del os.environ["DET_MANUAL_INIT_DISTRIBUTED"] +# Checks shm size and skips certain tests if it can't be determined or isn't enough. +# TODO: Remove these skips after CI is updated (INFENG-659) +def check_shm_size() -> bool: + return pathlib.Path("/dev/shm").exists() and shutil.disk_usage("/dev/shm")[0] < 10**8 + + @pytest.mark.skipif(not torch.cuda.is_available(), reason="no gpu available") @pytest.mark.deepspeed @pytest.mark.gpu @@ -459,7 +465,7 @@ def make_workloads() -> workload.Stream: ) controller.run() - @pytest.mark.skipif(shutil.disk_usage("/dev/shm")[0] < 10**8, reason="insufficient shm size") + @pytest.mark.skipif(not check_shm_size(), reason="insufficient shm size") def test_checkpointing_and_restoring(self, tmp_path: pathlib.Path) -> None: def make_trial_controller_fn( workloads: workload.Stream, @@ -531,8 +537,7 @@ def make_workloads_2() -> workload.Stream: ) controller2.run() - # TODO: Remove these skips after CI is updated (INFENG-659) - @pytest.mark.skipif(shutil.disk_usage("/dev/shm")[0] < 10**8, reason="insufficient shm size") + @pytest.mark.skipif(not check_shm_size(), reason="insufficient shm size") def test_reproducibility(self) -> None: def controller_fn(workloads: workload.Stream) -> determined.TrialController: return utils.make_trial_controller_from_trial_implementation( @@ -545,7 +550,7 @@ def controller_fn(workloads: workload.Stream) -> determined.TrialController: utils.reproducibility_test(controller_fn, steps=1000, validation_freq=100) - @pytest.mark.skipif(shutil.disk_usage("/dev/shm")[0] < 10**8, reason="insufficient shm size") + @pytest.mark.skipif(not check_shm_size(), reason="insufficient shm size") def test_callbacks(self, tmp_path: pathlib.Path) -> None: checkpoint_dir = tmp_path.joinpath("checkpoint") latest_checkpoint = None diff --git a/master/internal/api_config_policies_intg_test.go b/master/internal/api_config_policies_intg_test.go index d2503bac37a..3c3c15a8f59 100644 --- a/master/internal/api_config_policies_intg_test.go +++ b/master/internal/api_config_policies_intg_test.go @@ -1,3 +1,6 @@ +//go:build integration +// +build integration + package internal import ( diff --git a/master/internal/api_experiment.go b/master/internal/api_experiment.go index 0dd4852532c..5fa1914f172 100644 --- a/master/internal/api_experiment.go +++ b/master/internal/api_experiment.go @@ -834,44 +834,14 @@ func (a *apiServer) PreviewHPSearch( return nil, errors.Wrap(err, "invalid experiment configuration") } - sm := searcher.NewSearchMethod(sc) - s := searcher.NewSearcher(req.Seed, sm, hc) - sim, err := searcher.Simulate(s, nil, searcher.RandomValidation, true, sc.Metric()) - if err != nil { - return nil, err - } - protoSim := &experimentv1.ExperimentSimulation{Seed: req.Seed} - indexes := make(map[string]int, len(sim.Results)) - toProto := func(op searcher.ValidateAfter) ([]*experimentv1.RunnableOperation, error) { - return []*experimentv1.RunnableOperation{ - { - Type: experimentv1.RunnableType_RUNNABLE_TYPE_TRAIN, - Length: op.Length, - }, - { - Type: experimentv1.RunnableType_RUNNABLE_TYPE_VALIDATE, - }, - }, nil - } - for _, result := range sim.Results { - var operations []*experimentv1.RunnableOperation - for _, msg := range result { - ops, err := toProto(msg) - if err != nil { - return nil, errors.Wrapf(err, "error converting msg in simultion result %s", msg) - } - operations = append(operations, ops...) - } - hash := fmt.Sprint(operations) - if i, ok := indexes[hash]; ok { - protoSim.Trials[i].Occurrences++ - } else { - protoSim.Trials = append(protoSim.Trials, - &experimentv1.TrialSimulation{Operations: operations, Occurrences: 1}) - indexes[hash] = len(protoSim.Trials) - 1 - } + sim, err := searcher.Simulate(sc, hc) + if err != nil { + return nil, err } - return &apiv1.PreviewHPSearchResponse{Simulation: protoSim}, nil + + return &apiv1.PreviewHPSearchResponse{ + Summary: sim.Proto(), + }, nil } func (a *apiServer) ActivateExperiment( @@ -2106,7 +2076,6 @@ func (a *apiServer) fetchTrialSample(trialID int32, metricName string, metricGro var err error var trial apiv1.TrialsSampleResponse_Trial var metricMeasurements []db.MetricMeasurements - xAxisLabelMetrics := []string{"epoch"} trial.TrialId = trialID @@ -2125,7 +2094,7 @@ func (a *apiServer) fetchTrialSample(trialID int32, metricName string, metricGro } metricMeasurements, err = trials.MetricsTimeSeries(trialID, startTime, []string{metricName}, - startBatches, endBatches, xAxisLabelMetrics, maxDatapoints, + startBatches, endBatches, maxDatapoints, "batches", nil, metricGroup) if err != nil { return nil, errors.Wrapf(err, "error fetching time series of metrics") diff --git a/master/internal/api_experiment_intg_test.go b/master/internal/api_experiment_intg_test.go index 939683edea8..38c79146854 100644 --- a/master/internal/api_experiment_intg_test.go +++ b/master/internal/api_experiment_intg_test.go @@ -1421,7 +1421,6 @@ func createTestExpWithActiveConfig( Config: activeConfig.AsLegacy(), } require.NoError(t, api.m.db.AddExperiment(exp, []byte{10, 11, 12}, activeConfig)) - // Get experiment as our API mostly will to make it easier to mock. exp, err := db.ExperimentByID(context.TODO(), exp.ID) require.NoError(t, err) diff --git a/master/internal/api_runs.go b/master/internal/api_runs.go index 807540947fc..69059b51a29 100644 --- a/master/internal/api_runs.go +++ b/master/internal/api_runs.go @@ -548,7 +548,6 @@ func (a *apiServer) KillRuns(ctx context.Context, req *apiv1.KillRunsRequest, type killRunOKResult struct { ID int32 - RequestID *string IsTerminal bool } @@ -557,7 +556,6 @@ func (a *apiServer) KillRuns(ctx context.Context, req *apiv1.KillRunsRequest, Model(&killCandidatees). Join("LEFT JOIN trials_v2 t ON r.id=t.run_id"). Column("r.id"). - ColumnExpr("t.request_id"). ColumnExpr("r.state IN (?) AS is_terminal", bun.In(model.StatesToStrings(model.TerminalStates))). Where("r.project_id = ?", req.ProjectId) @@ -592,13 +590,6 @@ func (a *apiServer) KillRuns(ctx context.Context, req *apiv1.KillRunsRequest, Error: "", Id: cand.ID, }) - // This should be impossible in the current system but we will leave this check here - // to cover a possible error in integration tests - case cand.RequestID == nil: - results = append(results, &apiv1.RunActionResult{ - Error: "Run has no associated request id.", - Id: cand.ID, - }) default: validIDs = append(validIDs, cand.ID) } diff --git a/master/internal/api_trials.go b/master/internal/api_trials.go index 3be8b83b295..ad1ca9ca10d 100644 --- a/master/internal/api_trials.go +++ b/master/internal/api_trials.go @@ -36,7 +36,6 @@ import ( "github.com/determined-ai/determined/proto/pkg/apiv1" "github.com/determined-ai/determined/proto/pkg/checkpointv1" "github.com/determined-ai/determined/proto/pkg/commonv1" - "github.com/determined-ai/determined/proto/pkg/experimentv1" "github.com/determined-ai/determined/proto/pkg/trialv1" ) @@ -847,10 +846,6 @@ func (a *apiServer) multiTrialSample(trialID int32, metricNames []string, ) ([]*apiv1.DownsampledMetrics, error) { var startTime time.Time var metrics []*apiv1.DownsampledMetrics - // For now "epoch" is the only custom xAxis metric label supported so we - // build the `MetricSeriesEpoch` array. In the future this logic should - // be updated to support any number of xAxis metric options - xAxisLabelMetrics := []string{"epoch"} if err := db.ValidatePolymorphicFilter(timeSeriesFilter); err != nil { return nil, err @@ -902,7 +897,6 @@ func (a *apiServer) multiTrialSample(trialID int32, metricNames []string, var metric apiv1.DownsampledMetrics metricMeasurements, err := trials.MetricsTimeSeries( trialID, startTime, aMetricNames, startBatches, endBatches, - xAxisLabelMetrics, maxDatapoints, *timeSeriesColumn, timeSeriesFilter, aMetricGroup) if err != nil { return nil, errors.Wrapf(err, fmt.Sprintf("error fetching time series of %s metrics", @@ -1378,73 +1372,6 @@ func (a *apiServer) MarkAllocationResourcesDaemon( return &apiv1.MarkAllocationResourcesDaemonResponse{}, nil } -func (a *apiServer) GetCurrentTrialSearcherOperation( - ctx context.Context, req *apiv1.GetCurrentTrialSearcherOperationRequest, -) (*apiv1.GetCurrentTrialSearcherOperationResponse, error) { - curUser, _, err := grpcutil.GetUser(ctx) - if err != nil { - return nil, err - } - if err := trials.CanGetTrialsExperimentAndCheckCanDoAction(ctx, int(req.TrialId), curUser, - experiment.AuthZProvider.Get().CanGetExperimentArtifacts); err != nil { - return nil, err - } - eID, rID, err := a.m.db.TrialExperimentAndRequestID(int(req.TrialId)) - if err != nil { - return nil, err - } - - e, ok := experiment.ExperimentRegistry.Load(eID) - if !ok { - return nil, api.NotFoundErrs("experiment", strconv.Itoa(eID), true) - } - resp, err := e.TrialGetSearcherState(rID) - if err != nil { - return nil, err - } - - return &apiv1.GetCurrentTrialSearcherOperationResponse{ - Op: &experimentv1.TrialOperation{ - Union: &experimentv1.TrialOperation_ValidateAfter{ - ValidateAfter: resp.Op.ToProto(), - }, - }, - Completed: resp.Complete, - }, nil -} - -func (a *apiServer) CompleteTrialSearcherValidation( - ctx context.Context, req *apiv1.CompleteTrialSearcherValidationRequest, -) (*apiv1.CompleteTrialSearcherValidationResponse, error) { - curUser, _, err := grpcutil.GetUser(ctx) - if err != nil { - return nil, err - } - if err := trials.CanGetTrialsExperimentAndCheckCanDoAction(ctx, int(req.TrialId), curUser, - experiment.AuthZProvider.Get().CanEditExperiment); err != nil { - return nil, err - } - eID, rID, err := a.m.db.TrialExperimentAndRequestID(int(req.TrialId)) - if err != nil { - return nil, err - } - - e, ok := experiment.ExperimentRegistry.Load(eID) - if !ok { - return nil, api.NotFoundErrs("experiment", strconv.Itoa(eID), true) - } - - msg := experiment.TrialCompleteOperation{ - RequestID: rID, - Metric: req.CompletedOperation.SearcherMetric.AsInterface(), - Op: searcher.NewValidateAfter(rID, req.CompletedOperation.Op.Length), - } - if err := e.TrialCompleteOperation(msg); err != nil { - return nil, err - } - return &apiv1.CompleteTrialSearcherValidationResponse{}, nil -} - func (a *apiServer) ReportTrialSearcherEarlyExit( ctx context.Context, req *apiv1.ReportTrialSearcherEarlyExitRequest, ) (*apiv1.ReportTrialSearcherEarlyExitResponse, error) { @@ -1503,11 +1430,10 @@ func (a *apiServer) ReportTrialProgress( } msg := experiment.TrialReportProgress{ - RequestID: rID, - Progress: searcher.PartialUnits(req.Progress), - IsRaw: req.IsRaw, + Progress: searcher.PartialUnits(req.Progress), + IsRaw: req.IsRaw, } - if err := e.TrialReportProgress(msg); err != nil { + if err := e.TrialReportProgress(rID, msg); err != nil { return nil, err } return &apiv1.ReportTrialProgressResponse{}, nil @@ -1528,6 +1454,22 @@ func (a *apiServer) ReportTrialMetrics( experiment.AuthZProvider.Get().CanEditExperiment); err != nil { return nil, err } + if metricGroup == model.ValidationMetricGroup { + // Notify searcher of validation metrics. + eID, rID, err := a.m.db.TrialExperimentAndRequestID(int(req.Metrics.TrialId)) + if err != nil { + return nil, errors.Errorf("Failed to get experiment ID from trial ID (%d)", req.Metrics.TrialId) + } + e, ok := experiment.ExperimentRegistry.Load(eID) + if ok { + // Report validation metrics to the searcher. Skip for experiments (such as detached mode) + // that are not already loaded in the master ExperimentRegistry. + err = e.TrialReportValidation(rID, req.Metrics.Metrics.AvgMetrics.AsMap()) + if err != nil { + return nil, err + } + } + } if err := a.m.db.AddTrialMetrics(ctx, req.Metrics, metricGroup); err != nil { return nil, err } diff --git a/master/internal/api_trials_intg_test.go b/master/internal/api_trials_intg_test.go index 66883903279..3ec3d731414 100644 --- a/master/internal/api_trials_intg_test.go +++ b/master/internal/api_trials_intg_test.go @@ -45,16 +45,18 @@ func createTestTrial( ) (*model.Trial, *model.Task) { exp := createTestExpWithProjectID(t, api, curUser, 1) + requestID := model.NewRequestID(rand.Reader) task := &model.Task{ TaskType: model.TaskTypeTrial, LogVersion: model.TaskLogVersion1, StartTime: time.Now(), - TaskID: trialTaskID(exp.ID, model.NewRequestID(rand.Reader)), + TaskID: trialTaskID(exp.ID, requestID), } require.NoError(t, db.AddTask(context.TODO(), task)) trial := &model.Trial{ StartTime: time.Now(), + RequestID: &requestID, State: model.PausedState, ExperimentID: exp.ID, } @@ -746,20 +748,6 @@ func TestTrialAuthZ(t *testing.T) { }) return err }, false}, - {"CanGetExperimentArtifacts", func(id int) error { - _, err := api.GetCurrentTrialSearcherOperation(ctx, - &apiv1.GetCurrentTrialSearcherOperationRequest{ - TrialId: int32(id), - }) - return err - }, false}, - {"CanEditExperiment", func(id int) error { - _, err := api.CompleteTrialSearcherValidation(ctx, - &apiv1.CompleteTrialSearcherValidationRequest{ - TrialId: int32(id), - }) - return err - }, false}, {"CanEditExperiment", func(id int) error { _, err := api.ReportTrialSearcherEarlyExit(ctx, &apiv1.ReportTrialSearcherEarlyExitRequest{ diff --git a/master/internal/core.go b/master/internal/core.go index 12df26b972c..a42dca3534c 100644 --- a/master/internal/core.go +++ b/master/internal/core.go @@ -1512,9 +1512,6 @@ func (m *Master) Run(ctx context.Context, gRPCLogInitDone chan struct{}) error { checkpointsGroup := m.echo.Group("/checkpoints") checkpointsGroup.GET("/:checkpoint_uuid", m.getCheckpoint) - searcherGroup := m.echo.Group("/searcher") - searcherGroup.POST("/preview", api.Route(m.getSearcherPreview)) - resourcesGroup := m.echo.Group("/resources", cluster.CanGetUsageDetails()) resourcesGroup.GET("/allocation/raw", m.getRawResourceAllocation) resourcesGroup.GET("/allocation/allocations-csv", m.getResourceAllocations) diff --git a/master/internal/core_searcher.go b/master/internal/core_searcher.go index f543b1ccc72..f80c1a13b94 100644 --- a/master/internal/core_searcher.go +++ b/master/internal/core_searcher.go @@ -1,58 +1,9 @@ package internal import ( - "io" - - "github.com/labstack/echo/v4" - "github.com/pkg/errors" log "github.com/sirupsen/logrus" - - "github.com/determined-ai/determined/master/pkg/schemas" - "github.com/determined-ai/determined/master/pkg/schemas/expconf" - "github.com/determined-ai/determined/master/pkg/searcher" ) -func (m *Master) getSearcherPreview(c echo.Context) (interface{}, error) { - bytes, err := io.ReadAll(c.Request().Body) - if err != nil { - return nil, err - } - - // Parse the provided experiment config. - config, err := expconf.ParseAnyExperimentConfigYAML(bytes) - if err != nil { - return nil, errors.Wrapf(err, "invalid experiment configuration") - } - - // Get the useful subconfigs for preview search. - if config.RawSearcher == nil { - return nil, errors.New("invalid experiment configuration; missing searcher") - } - sc := *config.RawSearcher - hc := config.RawHyperparameters - - // Apply any json-schema-defined defaults. - sc = schemas.WithDefaults(sc) - hc = schemas.WithDefaults(hc) - - // Make sure the searcher config has all eventuallyRequired fields. - if err = schemas.IsComplete(sc); err != nil { - return nil, errors.Wrapf(err, "invalid searcher configuration") - } - if err = schemas.IsComplete(hc); err != nil { - return nil, errors.Wrapf(err, "invalid hyperparameters configuration") - } - - // Disallow EOL searchers. - if err = sc.AssertCurrent(); err != nil { - return nil, errors.Wrap(err, "invalid experiment configuration") - } - - sm := searcher.NewSearchMethod(sc) - s := searcher.NewSearcher(0, sm, hc) - return searcher.Simulate(s, nil, searcher.RandomValidation, true, config.Searcher().Metric()) -} - // cleanUpExperimentSnapshots deletes all snapshots for terminal state experiments from // the database. func (m *Master) cleanUpExperimentSnapshots() { diff --git a/master/internal/db/postgres_experiments.go b/master/internal/db/postgres_experiments.go index 6346aa60117..1bd04090ad5 100644 --- a/master/internal/db/postgres_experiments.go +++ b/master/internal/db/postgres_experiments.go @@ -387,25 +387,6 @@ LIMIT 1`, metricOrdering), exp.Config.Searcher.Metric, id).Scan(ctx, &metric); e return metric, nil } -// TrialExperimentAndRequestID returns the trial's experiment and request ID. -func (db *PgDB) TrialExperimentAndRequestID(id int) (int, model.RequestID, error) { - var eID int - var rID model.RequestID - err := db.sql.QueryRow(` -SELECT e.id, t.request_id -FROM trials t, experiments e -WHERE t.experiment_id = e.id - AND t.id = $1`, id).Scan(&eID, &rID) - switch { - case err == sql.ErrNoRows: - return eID, rID, errors.WithStack(ErrNotFound) - case err != nil: - return eID, rID, errors.Wrap(err, "failed to get trial exp and req id") - default: - return eID, rID, nil - } -} - // ExperimentConfigRaw returns the full config object for an experiment as a JSON string. func (db *PgDB) ExperimentConfigRaw(id int) ([]byte, error) { return db.rawQuery(` @@ -610,6 +591,25 @@ SELECT experiment_id FROM trials where id = $1 return experimentID, nil } +// TrialExperimentAndRequestID returns the trial's experiment and request ID. +func (db *PgDB) TrialExperimentAndRequestID(id int) (int, model.RequestID, error) { + var eID int + var rID model.RequestID + err := db.sql.QueryRow(` +SELECT e.id, t.request_id +FROM trials t, experiments e +WHERE t.experiment_id = e.id + AND t.id = $1`, id).Scan(&eID, &rID) + switch { + case err == sql.ErrNoRows: + return eID, rID, errors.WithStack(ErrNotFound) + case err != nil: + return eID, rID, errors.Wrap(err, "failed to get trial exp and req id") + default: + return eID, rID, nil + } +} + // NonTerminalExperiments finds all experiments in the database whose states are not terminal. func (db *PgDB) NonTerminalExperiments() ([]*model.Experiment, error) { rows, err := db.sql.Queryx(` diff --git a/master/internal/db/postgres_experiments_intg_test.go b/master/internal/db/postgres_experiments_intg_test.go index e47e52b8cc9..df20f439f64 100644 --- a/master/internal/db/postgres_experiments_intg_test.go +++ b/master/internal/db/postgres_experiments_intg_test.go @@ -771,17 +771,12 @@ func TestDeleteExperiments(t *testing.T) { // Create experiment snapshot //nolint:exhaustruct config := expconf.SearcherConfig{ - RawSingleConfig: &expconf.SingleConfigV0{ - RawMaxLength: &expconf.LengthV0{ - Unit: expconf.Batches, - Units: 10, - }, - }, + RawSingleConfig: &expconf.SingleConfigV0{}, } searcher1 := searcher.NewSearcher(3, searcher.NewSearchMethod(config), nil) - _, err := searcher1.InitialOperations() + _, err := searcher1.InitialTrials() require.NoError(t, err) - _, err = searcher1.TrialExitedEarly(model.RequestID(uuid.New()), model.Errored) + _, err = searcher1.TrialExitedEarly(model.RequestID{}, model.Errored) require.NoError(t, err) snapshot, err := searcher1.Snapshot() diff --git a/master/internal/db/postgres_test_utils.go b/master/internal/db/postgres_test_utils.go index 33d0f52ef1f..e086bf8933d 100644 --- a/master/internal/db/postgres_test_utils.go +++ b/master/internal/db/postgres_test_utils.go @@ -361,13 +361,8 @@ func RequireMockExperimentParams( }, }, RawSearcher: &expconf.SearcherConfigV0{ - RawSingleConfig: &expconf.SingleConfigV0{ - RawMaxLength: &expconf.LengthV0{ - Unit: expconf.Batches, - Units: 1, - }, - }, - RawMetric: ptrs.Ptr(defaultSearcherMetric), + RawSingleConfig: &expconf.SingleConfigV0{}, + RawMetric: ptrs.Ptr(defaultSearcherMetric), }, } if p.HParamNames != nil { diff --git a/master/internal/db/postgres_trial.go b/master/internal/db/postgres_trial.go index d1f03667962..4fd4fe2a8a6 100644 --- a/master/internal/db/postgres_trial.go +++ b/master/internal/db/postgres_trial.go @@ -276,19 +276,6 @@ func TrialTaskIDsByTrialID(ctx context.Context, trialID int) ([]*model.RunTaskID return ids, nil } -// TrialByExperimentAndRequestID looks up a trial, returning an error if none exists. -func TrialByExperimentAndRequestID( - ctx context.Context, experimentID int, requestID model.RequestID, -) (*model.Trial, error) { - t := &model.Trial{} - if err := Bun().NewSelect().Model(t). - Where("experiment_id = ?", experimentID). - Where("request_id = ?", requestID).Scan(ctx); err != nil { - return nil, fmt.Errorf("error querying for trial %s: %w", requestID, err) - } - return t, nil -} - // TrialByTaskID looks up a trial by taskID, returning an error if none exists. // This errors if you called it with a non trial taskID. func TrialByTaskID(ctx context.Context, taskID model.TaskID) (*model.Trial, error) { @@ -666,6 +653,11 @@ func (db *PgDB) addTrialMetrics( default: return 0, fmt.Errorf("cannot add metric with non numeric 'epoch' value got %v", v) } + switch v := m.Metrics.AvgMetrics.Fields["epochs"].AsInterface().(type) { + case float64, nil: + default: + return 0, fmt.Errorf("cannot add metric with non numeric 'epochs' value got %v", v) + } return rollbacks, db.withTransaction(fmt.Sprintf("add trial metrics %s", mGroup), func(tx *sqlx.Tx) error { switch { @@ -1078,3 +1070,16 @@ RETURNING true`, bun.In(uniqueExpIDs)).Scan(ctx, &res) return nil } + +// TrialByExperimentAndRequestID looks up a trial, returning an error if none exists. +func TrialByExperimentAndRequestID( + ctx context.Context, experimentID int, requestID model.RequestID, +) (*model.Trial, error) { + var t model.Trial + if err := Bun().NewSelect().Model(&t). + Where("experiment_id = ?", experimentID). + Where("request_id = ?", requestID).Scan(ctx); err != nil { + return nil, fmt.Errorf("error querying for trial %s: %w", requestID, err) + } + return &t, nil +} diff --git a/master/internal/experiment.go b/master/internal/experiment.go index afef09254e8..2cee92b62fc 100644 --- a/master/internal/experiment.go +++ b/master/internal/experiment.go @@ -301,7 +301,7 @@ func (e *internalExperiment) start() error { return nil } - ops, err := e.searcher.InitialOperations() + creates, err := e.searcher.InitialTrials() if err != nil { err = errors.Wrap(err, "failed to generate initial operations") e.updateState(model.StateWithReason{ @@ -310,72 +310,30 @@ func (e *internalExperiment) start() error { }) return err } - e.processOperations(ops, nil) + e.handleSearcherActions(creates, nil) return nil } -func (e *internalExperiment) TrialCompleteOperation(msg experiment.TrialCompleteOperation) error { - e.mu.Lock() - defer e.mu.Unlock() - - state, ok := e.TrialSearcherState[msg.Op.RequestID] - switch { - case !ok: - return api.AsValidationError("no such trial") - case msg.Op != state.Op: - return api.AsValidationError("expected op %v but received op %v", state.Op, msg.Op) - case state.Complete: - return api.AsValidationError("received op %v which was previously completed", msg.Op) - } - - defer func() { - ops, err := e.searcher.ValidationCompleted(msg.RequestID, msg.Metric, msg.Op) - e.processOperations(ops, err) - }() - - state.Complete = true - e.TrialSearcherState[msg.Op.RequestID] = state - - t, ok := e.trials[msg.Op.RequestID] - if !ok { - return api.AsErrNotFound("trial not found") - } - - err := t.PatchSearcherState(state) - if err != nil { - e.syslog.WithError(err).Error("patching trial search state") - return err - } - - return nil -} - -func (e *internalExperiment) TrialReportProgress(msg experiment.TrialReportProgress) error { +func (e *internalExperiment) TrialReportProgress(requestID model.RequestID, msg experiment.TrialReportProgress) error { e.mu.Lock() defer e.mu.Unlock() progress := float64(msg.Progress) - if !msg.IsRaw { - e.searcher.SetTrialProgress(msg.RequestID, msg.Progress) - progress = e.searcher.Progress() - } - - if err := e.db.SaveExperimentProgress(e.ID, &progress); err != nil { + e.searcher.SetTrialProgress(requestID, progress) + experimentProgress := e.searcher.Progress() + if err := e.db.SaveExperimentProgress(e.ID, &experimentProgress); err != nil { e.syslog.WithError(err).Error("failed to save experiment progress") } return nil } -func (e *internalExperiment) TrialGetSearcherState(requestID model.RequestID) (experiment.TrialSearcherState, error) { +func (e *internalExperiment) TrialReportValidation(requestID model.RequestID, metrics map[string]interface{}) error { e.mu.Lock() defer e.mu.Unlock() - - state, ok := e.TrialSearcherState[requestID] - if !ok { - return state, api.AsErrNotFound("trial has no state") - } - return state, nil + ops, err := e.searcher.ValidationCompleted(requestID, metrics) + e.handleSearcherActions(ops, err) + return nil } func (e *internalExperiment) UserInitiatedEarlyTrialExit(msg experiment.UserInitiatedEarlyTrialExit) error { @@ -588,21 +546,21 @@ func (e *internalExperiment) KillExperiment() error { return nil } -func (e *internalExperiment) TrialClosed(requestID model.RequestID, reason *model.ExitedReason) { +func (e *internalExperiment) TrialExited(requestID model.RequestID, reason *model.ExitedReason) { e.mu.Lock() defer e.mu.Unlock() - e.trialClosed(requestID, reason) + e.trialExited(requestID, reason) } -func (e *internalExperiment) trialClosed(requestID model.RequestID, reason *model.ExitedReason) { +func (e *internalExperiment) trialExited(requestID model.RequestID, reason *model.ExitedReason) { if reason != nil { e.trialReportEarlyExit(requestID, *reason) } delete(e.trials, requestID) - ops, err := e.searcher.TrialClosed(requestID) - e.processOperations(ops, err) + ops, err := e.searcher.TrialExited(requestID) + e.handleSearcherActions(ops, err) if e.canTerminate() { if err := e.stop(); err != nil { e.syslog.WithError(err).Error("failed to stop experiment on trial closed") @@ -611,25 +569,24 @@ func (e *internalExperiment) trialClosed(requestID model.RequestID, reason *mode } func (e *internalExperiment) trialReportEarlyExit(requestID model.RequestID, reason model.ExitedReason) { - e.syslog.WithField("requestId", requestID).Info("experiment received trial early exit") + e.syslog.WithField("request-id", requestID).Info("experiment received trial early exit") state, ok := e.TrialSearcherState[requestID] if !ok { - e.syslog.WithField("requestID", requestID).Error("trial has no searcher state on early exit") + e.syslog.WithField("request-id", requestID).Error("trial has no searcher state on early exit") return } defer func() { ops, err := e.searcher.TrialExitedEarly(requestID, reason) - e.processOperations(ops, err) + e.handleSearcherActions(ops, err) }() - state.Complete = true - state.Closed = true + state.EarlyExitedByUserCode = true e.TrialSearcherState[requestID] = state t, ok := e.trials[requestID] if !ok { - e.syslog.WithField("requestID", requestID).Warnf("missing trial to patch on early exit") + e.syslog.WithField("trial-id", requestID).Warnf("missing trial to patch on early exit") return } @@ -642,8 +599,8 @@ func (e *internalExperiment) trialReportEarlyExit(requestID model.RequestID, rea func (e *internalExperiment) trialCreated(t *trial) { requestID := t.searcher.Create.RequestID if !e.searcher.TrialIsCreated(requestID) { - ops, err := e.searcher.TrialCreated(requestID) - e.processOperations(ops, err) + actions, err := e.searcher.TrialCreated(requestID) + e.handleSearcherActions(actions, err) } e.trials[requestID] = t } @@ -652,51 +609,16 @@ func (e *internalExperiment) trialCreated(t *trial) { // last experiment checkpoint. func (e *internalExperiment) restoreTrials() { for _, state := range e.TrialSearcherState { - checkpoint, err := e.checkpointForCreate(state.Create) - if err != nil { - e.updateState(model.StateWithReason{ - State: model.StoppingErrorState, - InformationalReason: fmt.Sprintf("failed getting checkpoint to restore with error %v", err), - }) - e.syslog.Error(err) - return - } - e.restoreTrial(checkpoint, state) + e.restoreTrial(e.warmStartCheckpoint, state) } } -func (e *internalExperiment) handleContinueExperiment(reqID model.RequestID) (*int, bool) { - var continueFromTrialID *int - if e.continueTrials { - switch trial, err := internaldb.TrialByExperimentAndRequestID(context.TODO(), e.ID, reqID); { - case errors.Is(err, sql.ErrNoRows): - // Trial doesn't exist, don't do anything - case err != nil: - e.updateState(model.StateWithReason{ - State: model.StoppingErrorState, - InformationalReason: fmt.Sprintf( - "hp search unable to get trial for the Request ID %v with error %v", reqID, err), - }) - e.syslog.Error(err) - return nil, true - case err == nil: - if trial.State != model.CompletedState { - continueFromTrialID = &trial.ID - } else { - e.trialClosed(reqID, nil) - return nil, true - } - } - } - return continueFromTrialID, false -} - -func (e *internalExperiment) processOperations( - ops []searcher.Operation, err error, +func (e *internalExperiment) handleSearcherActions( + actions []searcher.Action, err error, ) { // Only continue for experiments in stopping states if the searcher operations are all // type Shutdown failures. - if _, ok := model.StoppingStates[e.State]; ok && !allSearcherShutdowns(ops) { + if _, ok := model.StoppingStates[e.State]; ok && !allSearcherShutdowns(actions) { return } @@ -712,73 +634,57 @@ func (e *internalExperiment) processOperations( defer e.snapshotAndSave() updatedTrials := make(map[model.RequestID]bool) - for _, operation := range ops { - e.syslog.Debugf("handling searcher op: %v", operation) - switch op := operation.(type) { + for _, action := range actions { + e.syslog.Debugf("handling searcher action: %v", action) + switch action := action.(type) { case searcher.Create: - _, ok := e.trials[op.RequestID] + _, ok := e.trials[action.RequestID] if ok { - e.syslog.Errorf("trial %s already exists", op.RequestID) + e.syslog.Errorf("trial %s already exists", action.RequestID) continue } - continueFromTrialID, closed := e.handleContinueExperiment(op.RequestID) + continueFromTrialID, closed := e.handleContinueExperiment(action.RequestID) if closed { continue } + state := experiment.TrialSearcherState{Create: action} + e.TrialSearcherState[action.RequestID] = state - checkpoint, err := e.checkpointForCreate(op) - if err != nil { - e.updateState(model.StateWithReason{ - State: model.StoppingErrorState, - InformationalReason: fmt.Sprintf( - "hp search unable to get checkpoint for new trial with error %v", err), - }) - e.syslog.Error(err) - continue - } config := schemas.Copy(e.activeConfig) - state := experiment.TrialSearcherState{Create: op, Complete: true} - e.TrialSearcherState[op.RequestID] = state clonedSpec, err := e.taskSpec.Clone() if err != nil { e.syslog.WithError(err).Error("failed to create trial") - e.trialClosed(op.RequestID, ptrs.Ptr(model.Errored)) + e.trialExited(action.RequestID, ptrs.Ptr(model.Errored)) continue } t, err := newTrial( - e.logCtx, trialTaskID(e.ID, op.RequestID), e.JobID, e.StartTime, e.ID, e.State, - state, e.rm, e.db, config, checkpoint, clonedSpec, e.generatedKeys, false, - nil, continueFromTrialID, e.TrialClosed, + e.logCtx, trialTaskID(e.ID, action.RequestID), e.JobID, e.StartTime, e.ID, e.State, + state, e.rm, e.db, config, e.warmStartCheckpoint, clonedSpec, e.generatedKeys, false, + nil, continueFromTrialID, e.TrialExited, ) if err != nil { e.syslog.WithError(err).Error("failed to create trial") - e.trialClosed(op.RequestID, ptrs.Ptr(model.Errored)) + e.trialExited(action.RequestID, ptrs.Ptr(model.Errored)) continue } e.trialCreated(t) - case searcher.ValidateAfter: - state := e.TrialSearcherState[op.RequestID] - state.Op = op - state.Complete = false - e.TrialSearcherState[op.RequestID] = state - updatedTrials[op.RequestID] = true - case searcher.Close: - state := e.TrialSearcherState[op.RequestID] - state.Closed = true - e.TrialSearcherState[op.RequestID] = state - updatedTrials[op.RequestID] = true + case searcher.Stop: + state := e.TrialSearcherState[action.RequestID] + state.EarlyStoppedBySearcher = true + e.TrialSearcherState[action.RequestID] = state + updatedTrials[action.RequestID] = true case searcher.Shutdown: - e.syslog.WithField("op", operation).Info("searcher shutdown") + e.syslog.WithField("action", action).Info("searcher shutdown") switch { - case op.Failure: + case action.Failure: e.updateState(model.StateWithReason{ State: model.StoppingErrorState, InformationalReason: "hp search failed", }) - case op.Cancel: + case action.Cancel: e.updateState(model.StateWithReason{ State: model.StoppingCanceledState, InformationalReason: "hp search canceled", @@ -790,23 +696,23 @@ func (e *internalExperiment) processOperations( }) } default: - panic(fmt.Sprintf("unexpected operation: %v", op)) + panic(fmt.Sprintf("unexpected action: %v", action)) } } var g errgroup.Group g.SetLimit(maxConcurrentTrialOps) - for requestID := range updatedTrials { - syslog := e.syslog.WithField("requestID", requestID) - t, ok := e.trials[requestID] + for rID := range updatedTrials { + syslog := e.syslog.WithField("trial-id", rID) + t, ok := e.trials[rID] if !ok { - syslog.Errorf("processOperations invalid requestID") + syslog.Errorf("handleSearcherActions invalid trialID") continue } g.Go(func() error { - err := t.PatchSearcherState(e.TrialSearcherState[requestID]) + err := t.PatchSearcherState(e.TrialSearcherState[rID]) if err != nil { - syslog.WithError(err).Error("processOperations updating trial search state") + syslog.WithError(err).Error("handleSearcherActions updating trial search state") } return nil }) @@ -814,6 +720,32 @@ func (e *internalExperiment) processOperations( _ = g.Wait() // Errors are handled in g.Go. } +func (e *internalExperiment) handleContinueExperiment(reqID model.RequestID) (*int, bool) { + var continueFromTrialID *int + if e.continueTrials { + switch trial, err := internaldb.TrialByExperimentAndRequestID(context.TODO(), e.ID, reqID); { + case errors.Is(err, sql.ErrNoRows): + // Trial doesn't exist, don't do anything + case err != nil: + e.updateState(model.StateWithReason{ + State: model.StoppingErrorState, + InformationalReason: fmt.Sprintf( + "hp search unable to get trial for the Request ID %v with error %v", reqID, err), + }) + e.syslog.Error(err) + return nil, true + case err == nil: + if trial.State != model.CompletedState { + continueFromTrialID = &trial.ID + } else { + e.trialExited(reqID, nil) + return nil, true + } + } + } + return continueFromTrialID, false +} + func trialTaskID(eID int, rID model.RequestID) model.TaskID { return model.TaskID(fmt.Sprintf("%d.%s", eID, rID)) } @@ -837,24 +769,6 @@ func experimentIDFromTrialTaskID(taskID model.TaskID) (int, error) { return experimentID, nil } -func (e *internalExperiment) checkpointForCreate(op searcher.Create) (*model.Checkpoint, error) { - checkpoint := e.warmStartCheckpoint - // If the Create specifies a checkpoint, ignore the experiment-wide one. - if op.Checkpoint != nil { - trial, err := internaldb.TrialByExperimentAndRequestID(context.TODO(), e.ID, op.Checkpoint.RequestID) - if err != nil { - return nil, errors.Wrapf(err, - "invalid request ID in Create operation: %d", op.Checkpoint.RequestID) - } - checkpointModel, err := checkpointFromTrialIDOrUUID(e.db, &trial.ID, nil) - if err != nil { - return nil, errors.Wrap(err, "checkpoint not found") - } - checkpoint = checkpointModel - } - return checkpoint, nil -} - func (e *internalExperiment) updateState(state model.StateWithReason) bool { if wasPatched, err := e.Transition(state.State); err != nil { e.syslog.Errorf("error transitioning experiment state: %s", err) @@ -1106,9 +1020,9 @@ func (e *internalExperiment) setRP(resourcePool string) error { return nil } -func allSearcherShutdowns(ops []searcher.Operation) bool { - for _, operation := range ops { - if _, ok := operation.(searcher.Shutdown); !ok { +func allSearcherShutdowns(actions []searcher.Action) bool { + for _, action := range actions { + if _, ok := action.(searcher.Shutdown); !ok { return false } } diff --git a/master/internal/experiment/experiment_iface.go b/master/internal/experiment/experiment_iface.go index f54635d2c76..5320b4ab3e0 100644 --- a/master/internal/experiment/experiment_iface.go +++ b/master/internal/experiment/experiment_iface.go @@ -14,20 +14,11 @@ var ExperimentRegistry = tasklist.NewRegistry[int, Experiment]() // Experiment-specific interface types. type ( - // TrialCompleteOperation is a message sent to an experiment to indicate that a trial has - // completed an operation. - TrialCompleteOperation struct { - RequestID model.RequestID - Op searcher.ValidateAfter - Metric interface{} - } - // TrialReportProgress is a message sent to an experiment to indicate that a trial has // reported progress. TrialReportProgress struct { - RequestID model.RequestID - Progress searcher.PartialUnits - IsRaw bool + Progress searcher.PartialUnits + IsRaw bool } // UserInitiatedEarlyTrialExit is a user-injected message, provided through the early exit API. It @@ -44,21 +35,19 @@ type ( State model.StateWithReason } - // TrialSearcherState is a message sent to an experiment to indicate that a trial has + // TrialSearcherState is a message sent to an search to indicate that a run has // changed searcher state. TrialSearcherState struct { - Create searcher.Create - Op searcher.ValidateAfter - Complete bool - Closed bool + Create searcher.Create + EarlyStoppedBySearcher bool + EarlyExitedByUserCode bool } ) // Experiment is an interface that represents an experiment. type Experiment interface { - TrialCompleteOperation(msg TrialCompleteOperation) error - TrialReportProgress(msg TrialReportProgress) error - TrialGetSearcherState(requestID model.RequestID) (TrialSearcherState, error) + TrialReportProgress(requestID model.RequestID, msg TrialReportProgress) error + TrialReportValidation(requestID model.RequestID, metrics map[string]interface{}) error UserInitiatedEarlyTrialExit(msg UserInitiatedEarlyTrialExit) error PatchTrialState(msg PatchTrialState) error SetGroupMaxSlots(msg sproto.SetGroupMaxSlots) diff --git a/master/internal/restore.go b/master/internal/restore.go index eeb2be41507..cfafe976421 100644 --- a/master/internal/restore.go +++ b/master/internal/restore.go @@ -6,25 +6,25 @@ import ( "encoding/json" "fmt" - "github.com/determined-ai/determined/master/internal/experiment" - "github.com/determined-ai/determined/master/internal/rm" - "github.com/determined-ai/determined/master/internal/sproto" - "github.com/determined-ai/determined/master/internal/workspace" + "github.com/determined-ai/determined/master/pkg/ptrs" + "github.com/determined-ai/determined/master/pkg/schemas" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "github.com/determined-ai/determined/master/internal/db" + "github.com/determined-ai/determined/master/internal/experiment" + "github.com/determined-ai/determined/master/internal/rm" + "github.com/determined-ai/determined/master/internal/sproto" "github.com/determined-ai/determined/master/internal/user" + "github.com/determined-ai/determined/master/internal/workspace" "github.com/determined-ai/determined/master/pkg/model" - "github.com/determined-ai/determined/master/pkg/ptrs" - "github.com/determined-ai/determined/master/pkg/schemas" - "github.com/determined-ai/determined/master/pkg/searcher" + "github.com/determined-ai/determined/master/pkg/nprand" ) // The current experiment snapshot version. Once this is incremented, older versions should be // shimmed. Experiment and trial snapshots share a version currently. -const experimentSnapshotVersion = 5 +const experimentSnapshotVersion = 6 // Restore works by restoring from distributed consistent snapshots taken through the course // of an experiment. Snapshots within the system flow from the bottom up, starting with the @@ -134,14 +134,11 @@ func (m *Master) restoreExperiment(expModel *model.Experiment) error { return nil } -// restoreTrial takes the a searcher.Create and attempts to restore the trial that would be -// associated with it. On failure, the trial is just reset to the start and errors are logged. func (e *internalExperiment) restoreTrial( ckpt *model.Checkpoint, searcher experiment.TrialSearcherState, ) { l := e.syslog.WithField("request-id", searcher.Create.RequestID) l.Debug("restoring trial") - var trialID *int var terminal bool switch trial, err := db.TrialByExperimentAndRequestID(context.TODO(), @@ -162,7 +159,6 @@ func (e *internalExperiment) restoreTrial( terminal = true } } - taskID := trialTaskID(e.ID, searcher.Create.RequestID) if !terminal && trialID != nil { trialTaskIDs, err := db.TrialTaskIDsByTrialID(context.TODO(), *trialID) @@ -177,11 +173,9 @@ func (e *internalExperiment) restoreTrial( taskID = trialTaskIDs[len(trialTaskIDs)-1].TaskID } } - - // In the event a trial is terminal and is not recorded in the searcher, replay the close. if terminal { if !e.searcher.TrialIsClosed(searcher.Create.RequestID) { - e.trialClosed(searcher.Create.RequestID, nil) + e.trialExited(searcher.Create.RequestID, nil) } return } @@ -190,17 +184,16 @@ func (e *internalExperiment) restoreTrial( l.Errorf("trial %s was already restored", searcher.Create.RequestID) return } - config := schemas.Copy(e.activeConfig) t, err := newTrial( e.logCtx, taskID, e.JobID, e.StartTime, e.ID, e.State, searcher, e.rm, e.db, config, ckpt, e.taskSpec, e.generatedKeys, true, trialID, - nil, e.TrialClosed, + nil, e.TrialExited, ) if err != nil { l.WithError(err).Error("failed restoring trial, aborting restore") if !e.searcher.TrialIsClosed(searcher.Create.RequestID) { - e.trialClosed(searcher.Create.RequestID, ptrs.Ptr(model.Errored)) + e.trialExited(searcher.Create.RequestID, ptrs.Ptr(model.Errored)) } return } @@ -246,24 +239,21 @@ var experimentSnapshotShims = map[int]snapshotShimFunc{ 1: shimExperimentSnapshotV1, 2: shimExperimentSnapshotV2, 4: shimExperimentSnapshotV4, + 5: shimExperimentSnapshotV5, } // shimExperimentSnapshot shims an experiment snapshot to the version required by the master, // returning an error in the event the shim fails or the snapshot version is greater // than the current version (which could happen in a downgrade). func shimExperimentSnapshot(snapshot []byte, version int) ([]byte, error) { - return shimSnapshot(experimentSnapshotShims, snapshot, version) -} - -func shimSnapshot(shims map[int]snapshotShimFunc, snapshot []byte, version int) ([]byte, error) { if version > experimentSnapshotVersion { return nil, fmt.Errorf("cannot shim from %d to %d", version, experimentSnapshotVersion) } var err error for version < experimentSnapshotVersion { - shim, ok := shims[version] + shim, ok := experimentSnapshotShims[version] if !ok { - return nil, fmt.Errorf("missing shim from %d to %d", version, experimentSnapshotVersion) + return nil, fmt.Errorf("missing shim from %d to %d", version, version+1) } if snapshot, err = shim(snapshot); err != nil { return nil, errors.Wrapf(err, "failed to shim snapshot") @@ -274,7 +264,7 @@ func shimSnapshot(shims map[int]snapshotShimFunc, snapshot []byte, version int) } // snapshotShimFunc is a shimming function. -type snapshotShimFunc func([]byte) ([]byte, error) +type snapshotShimFunc func(snapshot []byte) ([]byte, error) // Version 0 => 1 shims @@ -344,6 +334,18 @@ func shimExperimentSnapshotV1(snapshot []byte) ([]byte, error) { // Version 2 => 3 shims +// Legacy types which no longer exist in the searcher package, but needed to serialize old snapshots. +const ( + CreateOperation OperationType = 0 + TrainOperation OperationType = 1 + ValidateOperation OperationType = 2 + CloseOperation OperationType = 4 + ValidateAfterOperation OperationType = 5 +) + +// OperationType is a legacy searcher operation type. +type OperationType int + // shimExperimentSnapshotV2 shims a v2 snapshot to a v3 snapshot. From v2 to v3, // Train and Validate operations were merged into a single ValidateAfter operation // that indicates to the trial the total units to train before reporting a validation @@ -361,15 +363,15 @@ func shimExperimentSnapshotV2(snapshot []byte) ([]byte, error) { var newOperationsList []map[string]interface{} for _, iOp := range operationsList { op := iOp.(map[string]interface{}) - switch searcher.OperationType(op["OperationType"].(float64)) { - case searcher.TrainOperation: + switch OperationType(op["OperationType"].(float64)) { + case TrainOperation: op := op["Operation"].(map[string]interface{}) requestID := op["RequestID"].(string) length := op["Length"].(map[string]interface{}) for unit, units := range length { totalUnitsForTrial[requestID] += units.(float64) newOperationsList = append(newOperationsList, map[string]interface{}{ - "OperationType": searcher.ValidateAfterOperation, + "OperationType": ValidateAfterOperation, "Operation": map[string]interface{}{ "RequestID": requestID, "Length": map[string]interface{}{ @@ -378,7 +380,7 @@ func shimExperimentSnapshotV2(snapshot []byte) ([]byte, error) { }, }) } - case searcher.ValidateOperation: + case ValidateOperation: continue default: newOperationsList = append(newOperationsList, op) @@ -444,3 +446,96 @@ func shimExperimentSnapshotV4(snapshot []byte) ([]byte, error) { return json.Marshal(experimentSnapshotV4) } + +type v4SearcherState struct { + TrialsRequested int `json:"trials_requested"` + TrialsCreated map[model.RequestID]bool `json:"trials_created"` + TrialsClosed map[model.RequestID]bool `json:"trials_closed"` + Exits map[model.RequestID]bool `json:"exits"` + Cancels map[model.RequestID]bool `json:"cancels"` + Failures map[model.RequestID]bool `json:"failures"` + TrialProgress map[model.RequestID]float64 `json:"trial_progress"` + Rand *nprand.State `json:"rand"` + SearchMethodState json.RawMessage `json:"search_method_state"` +} +type v4CreateOp struct { + HParams map[string]interface{} `json:"hparams"` + RequestID model.RequestID `json:"request_id"` + TrialSeed uint32 `json:"trial_seed"` +} + +type v4TrialSearcherState struct { + Create v4CreateOp + Stop bool + Closed bool + Complete bool +} +type experimentSnapshotV4 struct { + SearcherState v4SearcherState `json:"searcher_state"` + TrialSearcherState map[model.RequestID]v4TrialSearcherState `json:"trial_searcher_state"` +} + +// shimExperimentSnapshotV5 shims a v5 snapshot to a v6 snapshot. From v5 to v6: +// - `searcher_state.CompletedOperations` -> dropped +// - `searcher_state.Shutdown` -> dropped +// +// - `trial_searcher_state.Create (searcher.Operation)` -> `trial_searcher_state.Create (searcher.Action)` +// - `trial_searcher_state.Complete` -> dropped +// - `trial_searcher_state.Op (searcher.ValidateAfter)` -> dropped +// - `trial_searcher_state.Stop` -> dropped. +func shimExperimentSnapshotV5(snapshot []byte) ([]byte, error) { + v4ExperimentSnapshot := experimentSnapshotV4{} + + if err := json.Unmarshal(snapshot, &v4ExperimentSnapshot); err != nil { + return nil, err + } + + searchMethodStateV4 := map[string]interface{}{} + err := json.Unmarshal(v4ExperimentSnapshot.SearcherState.SearchMethodState, &searchMethodStateV4) + if err != nil { + return nil, ExperimentSnapshotShimError{Message: err.Error()} + } + searchMethodType, ok := searchMethodStateV4["search_method_type"] + if !ok { + return nil, ExperimentSnapshotShimError{Message: "unable to parse search_method_type"} + } + + switch searchMethodType { + case "single": + case "random": + case "grid": + default: + return nil, ExperimentSnapshotShimError{Message: "unsupported search_method_type"} + } + + trialSearcherState := make(map[model.RequestID]interface{}) + + for rID, searcherState := range v4ExperimentSnapshot.TrialSearcherState { + trialSearcherState[rID] = map[string]interface{}{ + "Create": map[string]interface{}{ + "hparams": searcherState.Create.HParams, + "trial_seed": searcherState.Create.TrialSeed, + "request_id": searcherState.Create.RequestID, + }, + "EarlyStoppedBySearcher": searcherState.Stop || searcherState.Complete, + "EarlyExitedByUserCode": searcherState.Closed && searcherState.Complete, + } + } + + experimentSnapshotV5 := map[string]interface{}{ + "searcher_state": map[string]interface{}{ + "trials_requested": v4ExperimentSnapshot.SearcherState.TrialsRequested, + "trials_created": v4ExperimentSnapshot.SearcherState.TrialsCreated, + "trials_closed": v4ExperimentSnapshot.SearcherState.TrialsClosed, + "exits": v4ExperimentSnapshot.SearcherState.Exits, + "cancels": v4ExperimentSnapshot.SearcherState.Cancels, + "failures": v4ExperimentSnapshot.SearcherState.Failures, + "trial_progress": v4ExperimentSnapshot.SearcherState.TrialProgress, + "rand": v4ExperimentSnapshot.SearcherState.Rand, + "search_method_state": searchMethodStateV4, + }, + "trial_searcher_state": trialSearcherState, + } + + return json.Marshal(experimentSnapshotV5) +} diff --git a/master/internal/restore_test.go b/master/internal/restore_test.go index af14e869288..4023a83536b 100644 --- a/master/internal/restore_test.go +++ b/master/internal/restore_test.go @@ -20,8 +20,56 @@ func TestShimExperimentSnapshotV4(t *testing.T) { require.JSONEq(t, string(newSnapshot), string(actual)) } +func TestShimExperimentSnapshotV5(t *testing.T) { + cases := []struct { + name searcher.SearchMethodType + v4Snapshot []byte + v5Snapshot []byte + err string + }{ + { + name: searcher.SingleSearch, + //nolint:lll + v4Snapshot: []byte(`{"searcher_state": {"rand": {"key": [3922433409, 243371046, 1078118500, 751359450, 1341787537, 4110007575, 3830714619, 215586197, 202234178, 695788744, 568122858, 801842164, 915101998, 2089585430, 560765197, 132023793, 3625985341, 1033888033, 4275540481, 4081480301, 3803198840, 2062925182, 3815214353, 2217168443, 284556261, 4216276606, 3143802969, 4077949604, 1360661190, 1579111912, 3397581176, 2605001170, 1444943786, 1103161266, 2475001171, 586405187, 440758113, 69964893, 2302367679, 2318485289, 2699422072, 949642636, 992261637, 3418960830, 2747796370, 1988242324, 1336558633, 4144877284, 1447227155, 2130144917, 249701494, 845842848, 3562805067, 461807133, 316172300, 1019162321, 2042173338, 2357208493, 984738996, 2977486791, 4204759905, 3765157938, 1416537904, 673684512, 1014036428, 3291531021, 2149014833, 211182184, 1899637415, 2967746221, 1721885906, 226438235, 2148590681, 1789583513, 1586306530, 1162436037, 2949013157, 869268556, 2754664383, 190339737, 2683355822, 1858335276, 752629074, 3123663892, 3566745314, 2416019451, 2343621935, 4064029673, 2375292477, 4237178213, 733006903, 3966381652, 1902496609, 1636160960, 1441547075, 837638138, 885960515, 1113758007, 2646826291, 1038503594, 3726531118, 1965291352, 4027030242, 3233398909, 2964755703, 966551311, 1083992523, 1124285624, 3192801484, 2731176820, 2400133886, 2523660457, 1033111323, 2914428172, 1163901245, 1320025743, 2177720309, 1677889669, 2345935772, 2794475418, 9574722, 1397363731, 3692199984, 452561608, 112544138, 2256573095, 2829353338, 1987429988, 555809442, 1666429314, 215970428, 3154343711, 2051241582, 3877008887, 1816890945, 4013344821, 2102130895, 4186655536, 2673431404, 4026559573, 2176376772, 1221630340, 2467768183, 84713789, 3270911636, 1571685966, 1581830524, 4143291311, 2923146623, 3610913076, 2622548353, 464460930, 1486913384, 3667888493, 4266300151, 3341431843, 1965213295, 2565733412, 761474095, 761709082, 3177157908, 3043376221, 396311914, 3167326505, 1734174898, 1402058836, 2225699320, 1370103810, 1206643084, 3622576190, 109652665, 1635918058, 3535739916, 2701481795, 1919438907, 1981477202, 1360788607, 777792032, 4044337196, 2681268168, 2118070045, 1276795554, 3146333618, 746239793, 2520869193, 1894154101, 1005996243, 1898277441, 3296603528, 3591769481, 3145574469, 1323130515, 1238470035, 1076131551, 2785215479, 2287060195, 1378079485, 102967153, 2942614756, 1776625394, 938257756, 2470323776, 2927673692, 129462980, 221619173, 3277410069, 581765105, 1744873192, 1725783416, 2487492363, 3776340706, 848370815, 3284445102, 1648634245, 68108052, 3595739205, 2779510023, 2872989184, 1845125748, 121458802, 786888262, 3047839649, 2036720406, 1066086686, 3620519326, 2825286213, 1043364134, 745183959, 2008388075, 3781903549, 4088204083, 2422084247, 2245918792, 163997977, 4072121451, 377438777, 3434214799, 47957125, 901584641, 1663967634, 2224354240, 2140121772, 2239607504, 1296158592, 1144490013, 363777504, 352049636, 3537828370, 2018830719, 4106625267, 791310915, 1141549081, 383680238, 2211229427, 2955313933, 1786602475, 861117031, 1657038393, 49008346, 2757187031, 2415960764, 2063869385, 4250446539, 4072556442, 3080810042, 3746048829, 1207880898, 743812379, 1015188201, 1250574590, 2697317474, 1490831142, 3975889652, 3507228768, 3917477006, 922984658, 1548413943, 3607819493, 642573978, 2802934424, 1071690339, 2487490598, 353709112, 3041703309, 3991444003, 3766125511, 4022423108, 2255595963, 4244631415, 1858811130, 1272720251, 4254073557, 3076459717, 1790136700, 3582509861, 2769798461, 3229452726, 2752397444, 701766670, 1437507306, 1004148691, 578333132, 82009872, 3366243481, 1209720848, 1659428252, 789199905, 2021015352, 3384069524, 658409068, 1580305341, 4213315272, 4208459453, 2059532450, 893773418, 653840510, 1457966480, 393232134, 3136440598, 1431618763, 1172519077, 2575368795, 939388973, 1509101907, 988758589, 565340075, 2869588947, 1972475685, 4273757903, 204012057, 1101337211, 1533180088, 2801615526, 2440934744, 338200579, 3477442758, 2757306425, 2685737460, 3224302362, 1663459583, 696652877, 4112318289, 2675890357, 745289117, 2365755424, 2933967187, 4022266172, 1505363667, 2297045170, 570110611, 3346324247, 2491642679, 3975465941, 1581427559, 3057064987, 3791566228, 1635441872, 1271004942, 1877908946, 2574434132, 1044045440, 3454314545, 1253401130, 103952148, 3575409376, 490573770, 2501813399, 1298020930, 382668967, 2514416127, 3341542436, 1092494529, 195927818, 924628104, 3732801821, 1514695853, 1522275894, 219321854, 1556133239, 504225130, 1473692730, 406339414, 424484390, 4274713028, 2913973779, 4130369073, 1360365870, 628908339, 4154982639, 757598615, 2791015278, 2080857461, 4149657548, 3529030811, 2769339058, 429034912, 996084582, 1734359068, 1375161721, 156143303, 3037969436, 1190257791, 1676065026, 73997760, 2249183962, 3601724488, 4122290591, 2965613742, 1557037497, 4185416125, 3400325053, 3974330977, 380844763, 2773129515, 152044993, 1429397077, 4224338628, 1029309310, 1646236907, 3601261456, 148996457, 3350178033, 2474815495, 1410658357, 2550027794, 1767790115, 270701719, 3018598882, 4024035625, 887012213, 2098623801, 3632846028, 2921764843, 3962072584, 641857031, 2017495901, 263120295, 2019130833, 1014261205, 4186856768, 2015365872, 279028754, 72415546, 924570728, 3902648166, 1678286441, 2292588029, 2311635131, 2102542545, 2971228400, 1591614386, 434847124, 3404271484, 3154798571, 113413735, 2491451743, 876206292, 1926984841, 3365539483, 4251125583, 793584453, 301069822, 3419075736, 724765157, 3208860939, 374696415, 1335525536, 1919740580, 3663859906, 2324775696, 3864157940, 1565672574, 3802032297, 171709183, 1234689881, 3634865316, 2015586222, 3369223628, 2978260002, 279245834, 70045384, 214564933, 2965926443, 2361247591, 4165854731, 2521208355, 2800346995, 4049169329, 23045802, 1970506914, 3641829100, 1666315902, 2241077078, 271426571, 4088283675, 2162546067, 3127287949, 2587241655, 159689334, 3031939099, 86965855, 685758755, 1240649695, 3226456551, 2957980176, 3555426742, 428862619, 839793577, 773054281, 76694871, 1000736152, 1723860376, 2645296715, 1765515124, 2397562436, 3840534762, 3419177686, 2056708761, 2320819600, 722357493, 1951132286, 2697176849, 3418517148, 603726513, 2078863096, 2316090329, 2970470049, 462414015, 791905947, 1253829863, 78371665, 4043788288, 2830761235, 2395343283, 2760690656, 1435313866, 1069903560, 1768883836, 3478580525, 904619222, 279413896, 2319870694, 4228173768, 3232061024, 1484346351, 4004145551, 3963210362, 1575762141, 1425228619, 4101712633, 483124459, 1978185260, 2962076605, 340777240, 3916617987, 2077585685, 1670667332, 2219902641, 1768998827, 47882544, 38398050, 3045070584, 950674091, 2821356397, 2104948616, 1566315737, 865585600, 1541267679, 3879180856, 2839407679, 1159648826, 1505709233, 3176134596, 3648874638, 415873698, 3782961634, 1010479344, 3886069287, 2148727539, 3631608995, 377214383, 4046490475, 1123005720, 1622745139, 3490975330, 2511527452, 1283291646, 2881450334, 4188742159, 2510804289, 879103178, 2003656783, 2968076365, 4153230545, 1779731768, 2697187974, 938150976, 3424390191, 2962715395, 101985175, 2518895690, 2455009572, 3071599415, 1061702964, 2015878382, 2790438718, 3098661352, 105466182, 2218696853, 2782132502, 1059279116, 1168368222, 377291999, 548884237, 1330528867, 1028242923, 594901465, 2151845525, 1345962394, 829096669, 3769617076, 859176729, 1416740787, 2528276857], "pos": 5}, "exits": {}, "cancels": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": 0.75}, "trials_created": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": true}, "trials_requested": 1, "search_method_state": {"created_trials": 1, "pending_trials": 1, "search_method_type": "single"}, "completed_operations": {}}, "trial_searcher_state": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": {"Op": {"Length": 1000, "RequestID": "c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "checkpoint": null, "request_id": "c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae", "trial_seed": 530298166, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + //nolint:lll + v5Snapshot: []byte(`{"searcher_state": {"rand": {"key": [3922433409, 243371046, 1078118500, 751359450, 1341787537, 4110007575, 3830714619, 215586197, 202234178, 695788744, 568122858, 801842164, 915101998, 2089585430, 560765197, 132023793, 3625985341, 1033888033, 4275540481, 4081480301, 3803198840, 2062925182, 3815214353, 2217168443, 284556261, 4216276606, 3143802969, 4077949604, 1360661190, 1579111912, 3397581176, 2605001170, 1444943786, 1103161266, 2475001171, 586405187, 440758113, 69964893, 2302367679, 2318485289, 2699422072, 949642636, 992261637, 3418960830, 2747796370, 1988242324, 1336558633, 4144877284, 1447227155, 2130144917, 249701494, 845842848, 3562805067, 461807133, 316172300, 1019162321, 2042173338, 2357208493, 984738996, 2977486791, 4204759905, 3765157938, 1416537904, 673684512, 1014036428, 3291531021, 2149014833, 211182184, 1899637415, 2967746221, 1721885906, 226438235, 2148590681, 1789583513, 1586306530, 1162436037, 2949013157, 869268556, 2754664383, 190339737, 2683355822, 1858335276, 752629074, 3123663892, 3566745314, 2416019451, 2343621935, 4064029673, 2375292477, 4237178213, 733006903, 3966381652, 1902496609, 1636160960, 1441547075, 837638138, 885960515, 1113758007, 2646826291, 1038503594, 3726531118, 1965291352, 4027030242, 3233398909, 2964755703, 966551311, 1083992523, 1124285624, 3192801484, 2731176820, 2400133886, 2523660457, 1033111323, 2914428172, 1163901245, 1320025743, 2177720309, 1677889669, 2345935772, 2794475418, 9574722, 1397363731, 3692199984, 452561608, 112544138, 2256573095, 2829353338, 1987429988, 555809442, 1666429314, 215970428, 3154343711, 2051241582, 3877008887, 1816890945, 4013344821, 2102130895, 4186655536, 2673431404, 4026559573, 2176376772, 1221630340, 2467768183, 84713789, 3270911636, 1571685966, 1581830524, 4143291311, 2923146623, 3610913076, 2622548353, 464460930, 1486913384, 3667888493, 4266300151, 3341431843, 1965213295, 2565733412, 761474095, 761709082, 3177157908, 3043376221, 396311914, 3167326505, 1734174898, 1402058836, 2225699320, 1370103810, 1206643084, 3622576190, 109652665, 1635918058, 3535739916, 2701481795, 1919438907, 1981477202, 1360788607, 777792032, 4044337196, 2681268168, 2118070045, 1276795554, 3146333618, 746239793, 2520869193, 1894154101, 1005996243, 1898277441, 3296603528, 3591769481, 3145574469, 1323130515, 1238470035, 1076131551, 2785215479, 2287060195, 1378079485, 102967153, 2942614756, 1776625394, 938257756, 2470323776, 2927673692, 129462980, 221619173, 3277410069, 581765105, 1744873192, 1725783416, 2487492363, 3776340706, 848370815, 3284445102, 1648634245, 68108052, 3595739205, 2779510023, 2872989184, 1845125748, 121458802, 786888262, 3047839649, 2036720406, 1066086686, 3620519326, 2825286213, 1043364134, 745183959, 2008388075, 3781903549, 4088204083, 2422084247, 2245918792, 163997977, 4072121451, 377438777, 3434214799, 47957125, 901584641, 1663967634, 2224354240, 2140121772, 2239607504, 1296158592, 1144490013, 363777504, 352049636, 3537828370, 2018830719, 4106625267, 791310915, 1141549081, 383680238, 2211229427, 2955313933, 1786602475, 861117031, 1657038393, 49008346, 2757187031, 2415960764, 2063869385, 4250446539, 4072556442, 3080810042, 3746048829, 1207880898, 743812379, 1015188201, 1250574590, 2697317474, 1490831142, 3975889652, 3507228768, 3917477006, 922984658, 1548413943, 3607819493, 642573978, 2802934424, 1071690339, 2487490598, 353709112, 3041703309, 3991444003, 3766125511, 4022423108, 2255595963, 4244631415, 1858811130, 1272720251, 4254073557, 3076459717, 1790136700, 3582509861, 2769798461, 3229452726, 2752397444, 701766670, 1437507306, 1004148691, 578333132, 82009872, 3366243481, 1209720848, 1659428252, 789199905, 2021015352, 3384069524, 658409068, 1580305341, 4213315272, 4208459453, 2059532450, 893773418, 653840510, 1457966480, 393232134, 3136440598, 1431618763, 1172519077, 2575368795, 939388973, 1509101907, 988758589, 565340075, 2869588947, 1972475685, 4273757903, 204012057, 1101337211, 1533180088, 2801615526, 2440934744, 338200579, 3477442758, 2757306425, 2685737460, 3224302362, 1663459583, 696652877, 4112318289, 2675890357, 745289117, 2365755424, 2933967187, 4022266172, 1505363667, 2297045170, 570110611, 3346324247, 2491642679, 3975465941, 1581427559, 3057064987, 3791566228, 1635441872, 1271004942, 1877908946, 2574434132, 1044045440, 3454314545, 1253401130, 103952148, 3575409376, 490573770, 2501813399, 1298020930, 382668967, 2514416127, 3341542436, 1092494529, 195927818, 924628104, 3732801821, 1514695853, 1522275894, 219321854, 1556133239, 504225130, 1473692730, 406339414, 424484390, 4274713028, 2913973779, 4130369073, 1360365870, 628908339, 4154982639, 757598615, 2791015278, 2080857461, 4149657548, 3529030811, 2769339058, 429034912, 996084582, 1734359068, 1375161721, 156143303, 3037969436, 1190257791, 1676065026, 73997760, 2249183962, 3601724488, 4122290591, 2965613742, 1557037497, 4185416125, 3400325053, 3974330977, 380844763, 2773129515, 152044993, 1429397077, 4224338628, 1029309310, 1646236907, 3601261456, 148996457, 3350178033, 2474815495, 1410658357, 2550027794, 1767790115, 270701719, 3018598882, 4024035625, 887012213, 2098623801, 3632846028, 2921764843, 3962072584, 641857031, 2017495901, 263120295, 2019130833, 1014261205, 4186856768, 2015365872, 279028754, 72415546, 924570728, 3902648166, 1678286441, 2292588029, 2311635131, 2102542545, 2971228400, 1591614386, 434847124, 3404271484, 3154798571, 113413735, 2491451743, 876206292, 1926984841, 3365539483, 4251125583, 793584453, 301069822, 3419075736, 724765157, 3208860939, 374696415, 1335525536, 1919740580, 3663859906, 2324775696, 3864157940, 1565672574, 3802032297, 171709183, 1234689881, 3634865316, 2015586222, 3369223628, 2978260002, 279245834, 70045384, 214564933, 2965926443, 2361247591, 4165854731, 2521208355, 2800346995, 4049169329, 23045802, 1970506914, 3641829100, 1666315902, 2241077078, 271426571, 4088283675, 2162546067, 3127287949, 2587241655, 159689334, 3031939099, 86965855, 685758755, 1240649695, 3226456551, 2957980176, 3555426742, 428862619, 839793577, 773054281, 76694871, 1000736152, 1723860376, 2645296715, 1765515124, 2397562436, 3840534762, 3419177686, 2056708761, 2320819600, 722357493, 1951132286, 2697176849, 3418517148, 603726513, 2078863096, 2316090329, 2970470049, 462414015, 791905947, 1253829863, 78371665, 4043788288, 2830761235, 2395343283, 2760690656, 1435313866, 1069903560, 1768883836, 3478580525, 904619222, 279413896, 2319870694, 4228173768, 3232061024, 1484346351, 4004145551, 3963210362, 1575762141, 1425228619, 4101712633, 483124459, 1978185260, 2962076605, 340777240, 3916617987, 2077585685, 1670667332, 2219902641, 1768998827, 47882544, 38398050, 3045070584, 950674091, 2821356397, 2104948616, 1566315737, 865585600, 1541267679, 3879180856, 2839407679, 1159648826, 1505709233, 3176134596, 3648874638, 415873698, 3782961634, 1010479344, 3886069287, 2148727539, 3631608995, 377214383, 4046490475, 1123005720, 1622745139, 3490975330, 2511527452, 1283291646, 2881450334, 4188742159, 2510804289, 879103178, 2003656783, 2968076365, 4153230545, 1779731768, 2697187974, 938150976, 3424390191, 2962715395, 101985175, 2518895690, 2455009572, 3071599415, 1061702964, 2015878382, 2790438718, 3098661352, 105466182, 2218696853, 2782132502, 1059279116, 1168368222, 377291999, 548884237, 1330528867, 1028242923, 594901465, 2151845525, 1345962394, 829096669, 3769617076, 859176729, 1416740787, 2528276857], "pos": 5}, "exits": {}, "cancels": {}, "failures": {}, "trials_closed": {}, "trial_progress": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": 0.75}, "trials_created": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": true}, "trials_requested": 1, "search_method_state": {"created_trials": 1, "pending_trials": 1, "search_method_type": "single"}}, "trial_searcher_state": {"c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae": {"EarlyExitedByUserCode": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "request_id": "c7ffd20e-ec56-4e21-b6dd-2c2e6a27a9ae", "trial_seed": 530298166}, "EarlyStoppedBySearcher": false}}}`), + }, + { + name: searcher.AdaptiveASHASearch, + //nolint:lll + v4Snapshot: []byte(`{"searcher_state": {"rand": {"key": [1452545913, 2216706256, 2931285415, 1424553963, 2771469721, 1182268625, 2241039347, 812859712, 3441585930, 1306182607, 3485054815, 608308123, 112483053, 682642478, 1312525610, 4135551174, 1567793875, 708291338, 3829781031, 1127597650, 1379589895, 4278788276, 970175326, 4153583291, 3982059578, 1493128882, 1875069103, 3704826304, 2299697046, 3676722567, 3041672913, 3928015435, 3590950234, 1340137182, 1319309903, 945669253, 1297992086, 255387058, 3738978610, 1747520993, 1267854203, 1275083903, 1988788172, 181920895, 1106027729, 1025177369, 2440854937, 188734714, 2791495762, 379644148, 1364486454, 1214940208, 3655512912, 3005587086, 3108187149, 781287699, 4159116078, 4043987339, 1632188677, 1250292127, 3753687125, 1026997361, 3415512821, 3782772083, 1358650193, 2164683139, 564316438, 941046993, 3129882612, 2182601888, 1975366329, 3311855628, 1644174752, 2793779553, 2753842799, 3571302630, 887923171, 3588840141, 193784717, 2471237536, 1421225039, 341938740, 1192996113, 2218409675, 3991457045, 3826598018, 2275285112, 4011863454, 1177877850, 2698633618, 1138152393, 2202893314, 347707955, 2436375966, 1020461438, 792229146, 113320512, 2036693887, 1215276260, 1018416563, 1195865614, 3136674021, 4150724058, 1177584340, 3870966002, 2945594975, 3859621414, 1717325326, 2051142765, 1936740951, 3062042453, 1688513379, 910042307, 1750537331, 304051019, 2636291192, 2013521520, 4227041032, 102628453, 1359940869, 4245248134, 1993619173, 3500025022, 3924853543, 3578800279, 2421667083, 4060793652, 1094276667, 928577324, 3215001437, 2737811296, 3805282341, 408114954, 2248459851, 1476902951, 73200291, 3600387404, 422649030, 2174730155, 3307173078, 1507629695, 113607599, 4116987602, 3510362588, 1500789310, 2511817938, 3576571324, 1756177812, 2413290146, 3140611884, 1850078157, 2095279096, 635232750, 3799246263, 1381854103, 57954085, 69958379, 55700730, 2727860158, 646634153, 646716365, 3060248147, 2645894961, 521556301, 2332134955, 3223404494, 1278684995, 2435087898, 401816126, 1094921611, 563333291, 2556415388, 1739710028, 133744693, 3919682174, 4087793525, 768502435, 4228008790, 210686178, 4150681864, 4091917901, 1835561309, 2232363723, 3031311488, 1776937342, 1233396034, 3476217536, 3799316084, 864878498, 377881092, 3188094097, 2750744302, 3199804590, 1231139403, 2429436965, 2130823117, 757668219, 2740840838, 1377165079, 2589078863, 2810863562, 1162879957, 831096657, 3396087259, 3098412156, 4061324184, 3203871242, 1931886212, 2937742743, 907488495, 3996978148, 2997218253, 2004185458, 2516650587, 593077235, 3489768626, 2150154954, 2049860379, 2472886567, 1430759218, 2957836638, 435817594, 1082252350, 3951520482, 2400586842, 3456205344, 3356182591, 618991329, 2992469709, 1973188425, 450379261, 2798568635, 4037568720, 2839400952, 255422271, 1854524310, 4006718197, 3420074895, 2722893251, 3468530746, 1593574294, 3521350966, 3024147312, 1169215387, 3910087826, 443646771, 2925353376, 2069261626, 2548372079, 2863860503, 4132686053, 3433804206, 950538056, 3552376483, 1870093729, 3384688973, 1158025919, 493730904, 1789038843, 1829026938, 3596529436, 3639269430, 1817201820, 848183402, 537785361, 2081164395, 2475598070, 1575953173, 3376512332, 4036578374, 581826236, 3513291559, 2113632026, 2616353057, 3729275555, 1680494578, 1363619591, 692325427, 97273826, 2579406491, 1531446639, 2390954510, 1317588761, 536858982, 988517096, 2244293128, 2804565134, 3877515395, 839842752, 3405616275, 1039673240, 3962514502, 896670502, 1093259020, 2043255868, 3991535172, 296660859, 4163623869, 4045669283, 3512517932, 1859259214, 79788873, 217768790, 2455520809, 386000238, 3566902734, 2247723896, 674246520, 226356020, 1961300106, 3848127451, 353356745, 52039995, 2770049955, 3021363660, 1624062882, 2986876091, 448633518, 1629505280, 21883362, 1848415473, 756079215, 4190124084, 4131714971, 2392212283, 1308326958, 3371194070, 1147387144, 1285992797, 3405963410, 1892827156, 1967237941, 2398927758, 238263952, 2432436094, 1498668510, 858532034, 3668090456, 1838702366, 426802744, 1194191127, 2885124677, 1279814428, 2856963439, 2166294156, 2653671113, 26555231, 4188511414, 2257856313, 3262711136, 395413330, 2789270448, 4264752234, 1117258307, 2896009146, 1226138881, 3802856348, 2523573944, 4159838139, 1445150309, 264468203, 4150566522, 2240997763, 1509631376, 435995998, 4165403839, 3610262680, 1168629505, 4035006883, 2695323969, 1292644795, 2745853320, 225794602, 1356178611, 955998327, 2238901481, 1106469405, 826123461, 4155393474, 2635289592, 1224474211, 1824797825, 1233049504, 760946898, 1148631409, 3096376358, 4205086568, 2291321688, 537823608, 490724183, 966548030, 213314081, 3997861198, 3555542635, 3937802140, 3037829047, 3057237581, 149746191, 4198823951, 3419012586, 3058993263, 3099857571, 738118719, 2559925817, 429746199, 999300291, 3324548747, 599849818, 51382161, 1656669044, 1614461261, 3437196859, 2914200168, 2522112723, 1406081509, 1013688116, 2269547301, 1493949008, 352929430, 3057939739, 3841398959, 2865277247, 274596832, 3889831750, 4063920528, 322224127, 369484237, 1096644289, 2969910741, 355324547, 3017842962, 652957044, 2288093025, 1319424438, 3597823923, 3187158261, 2300967604, 2444733360, 3346034650, 3052890513, 3412771067, 1644673169, 2004833514, 4176603510, 812339001, 2377375086, 3657608513, 789432047, 1232357156, 311642210, 1135746832, 4278279012, 4187675947, 1484381964, 518250323, 1804044839, 749985106, 1247034074, 1322933383, 2558753984, 2148724241, 3355638721, 1239704585, 458131162, 1469044936, 1816687844, 3310401614, 711732101, 2570107777, 2195543406, 1685156591, 806200714, 485890833, 2324324855, 1361241033, 231249103, 3925784640, 2812874552, 105551818, 3360389267, 236876949, 3837288942, 2773521044, 3397769505, 396727058, 1340986334, 842480288, 3693769194, 1304819435, 3927626290, 1233405874, 2400596270, 3722895074, 4024237244, 1308945353, 2379151461, 1653639100, 2837868071, 3143239362, 3347100096, 505670669, 1220922352, 1683276312, 1409357641, 2864400686, 2154723844, 2865848502, 3711211457, 4174404079, 3760415152, 2635418164, 3817078233, 3797497846, 1843555871, 3097746780, 1631738968, 1273189302, 3422812667, 1884737974, 3996941605, 567541988, 2835894599, 2678807189, 2862594697, 259382272, 4246982418, 2015432239, 1584697754, 950481942, 2676080319, 3060794403, 3206445087, 1623919009, 3227302040, 3207120844, 2227286302, 1395885538, 786668072, 1111364168, 831375560, 2351912451, 1750459989, 1249540546, 1954378595, 377821224, 1223652079, 660872685, 3148523876, 636798872, 3792321202, 1157296821, 2728165650, 2125606106, 286143865, 1929354736, 3282533922, 2910169564, 3416956740, 3467743336, 3115919084, 1499088458, 2537111141, 2756648794, 1989501022, 1972571169, 1594350983, 1687019006, 2282666905, 2791303809, 816687306, 3206038097, 3432004981, 1128341472, 2489750111, 4212962683, 4150103461, 3277624383, 1740516965, 3298397586, 1066119190, 973732348, 1142153902, 2593584651, 1347071644, 476190584, 255904713, 2487444411, 4277502188, 503790438, 3701506354, 4080177843, 1973766567, 2765496076, 2445282555, 3253894374, 69025061, 1973540476, 3707131235, 2463125033, 3650253067, 1261214630, 1834547302, 1646383947, 1135075426, 4138467070, 1543536840, 2107446004, 379532649, 2859826137, 2562206910, 962843355, 1514927822, 1971937745, 693327781, 3542160189, 327935861, 853015903, 3483398805, 3644300960, 1581562223, 719777381, 2642808027, 4103170367, 1148912942], "pos": 32}, "exits": {}, "cancels": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"35cf42b8-36cf-49e3-b104-f3cce289d072": 0, "7ad68246-0a8a-4251-916d-db94cf525270": 0}, "trials_created": {"35cf42b8-36cf-49e3-b104-f3cce289d072": true, "7ad68246-0a8a-4251-916d-db94cf525270": true}, "trials_requested": 2, "search_method_state": {"trial_table": {"35cf42b8-36cf-49e3-b104-f3cce289d072": 1, "7ad68246-0a8a-4251-916d-db94cf525270": 0}, "sub_search_states": [{"rungs": [{"metrics": null, "start_trials": 0, "units_needed": 58, "promote_trials": 0, "outstanding_trials": 1}, {"metrics": null, "start_trials": 0, "units_needed": 292, "promote_trials": 0, "outstanding_trials": 0}, {"metrics": null, "start_trials": 0, "units_needed": 1229, "promote_trials": 0, "outstanding_trials": 0}], "trial_rungs": {"7ad68246-0a8a-4251-916d-db94cf525270": 0}, "closed_trials": {}, "invalid_trials": 0, "pending_trials": 0, "trials_completed": 0, "early_exit_trials": {}, "search_method_type": "asha"}, {"rungs": [{"metrics": null, "start_trials": 0, "units_needed": 234, "promote_trials": 0, "outstanding_trials": 1}, {"metrics": null, "start_trials": 0, "units_needed": 1171, "promote_trials": 0, "outstanding_trials": 0}], "trial_rungs": {"35cf42b8-36cf-49e3-b104-f3cce289d072": 0}, "closed_trials": {}, "invalid_trials": 0, "pending_trials": 0, "trials_completed": 0, "early_exit_trials": {}, "search_method_type": "asha"}], "search_method_type": "adaptive_asha", "sub_search_units_completed": [0, 0]}, "completed_operations": {}}, "trial_searcher_state": {"35cf42b8-36cf-49e3-b104-f3cce289d072": {"Op": {"Length": 234, "RequestID": "35cf42b8-36cf-49e3-b104-f3cce289d072"}, "Closed": false, "Create": {"hparams": {"dropout1": 0.4402283511805293, "dropout2": 0.44011555407446223, "n_filters1": 15, "n_filters2": 47, "learning_rate": 0.020523695929929888}, "checkpoint": null, "request_id": "35cf42b8-36cf-49e3-b104-f3cce289d072", "trial_seed": 897420172, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "7ad68246-0a8a-4251-916d-db94cf525270": {"Op": {"Length": 58, "RequestID": "7ad68246-0a8a-4251-916d-db94cf525270"}, "Closed": false, "Create": {"hparams": {"dropout1": 0.24506761071384414, "dropout2": 0.6338879717356689, "n_filters1": 25, "n_filters2": 32, "learning_rate": 0.9864141286469745}, "checkpoint": null, "request_id": "7ad68246-0a8a-4251-916d-db94cf525270", "trial_seed": 1221021447, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + err: "unsupported search_method_type", + }, + { + name: searcher.GridSearch, + //nolint:lll + v4Snapshot: []byte(`{"searcher_state": {"rand": {"key": [2076300081, 1180757701, 61390626, 2075653657, 3983276912, 2219280310, 1951783750, 3432627106, 1678661725, 3042313994, 2202725749, 2202588336, 4190101782, 1110057276, 3191526579, 4171973736, 4254763240, 2766827202, 1156928074, 1597039613, 3598380759, 1437190771, 1076126477, 2658152872, 3825090400, 3114761804, 915898666, 291106241, 3036411027, 2744580765, 820531638, 1883042039, 2922514564, 188829505, 1874867577, 640982739, 1714839269, 3901091477, 2804767841, 3254494107, 2484761704, 476134574, 990456848, 3870586239, 620062224, 1995301304, 2389729019, 2462435556, 2472017888, 2504467222, 2188233046, 2306262543, 3560836860, 1978513357, 606650471, 3854035095, 4245776466, 3871782493, 597013963, 2913535589, 1756877383, 1623386184, 496866040, 588131525, 4177340522, 2935519398, 850546169, 109126006, 858579993, 795071074, 3590755528, 1638945842, 1254896771, 2307161967, 3477967610, 692808483, 1899600971, 2769494850, 2779999007, 510215608, 4111810801, 4280921106, 1518864863, 834898192, 1306840028, 835688979, 459513373, 609148069, 3545906245, 1194162898, 258441420, 4179429231, 4022175812, 2648608732, 717531457, 306247172, 2976743141, 237988140, 592196390, 704362957, 7450542, 311689767, 3067438641, 808588439, 1235198799, 742758417, 2780949935, 3446973894, 3873685895, 2153250996, 4065466909, 1497342942, 3724631752, 4275880421, 272199235, 2252962393, 2056155089, 1877112438, 2110296751, 2590941302, 2013827341, 842823052, 1894032322, 1393960121, 3588305616, 2529793378, 3205436904, 596814183, 1254786875, 2966225931, 2121907724, 475901771, 555053869, 1400569825, 3688890119, 1353122628, 1459205986, 2300737010, 1481729865, 756275962, 599878589, 2046378230, 2769239562, 3613422680, 4252206344, 947287240, 2417250410, 1305902854, 2671572052, 1899272897, 3230713963, 2224033552, 1732656815, 1936213189, 443599218, 2770284889, 3459882565, 1332607404, 3278697474, 2224591365, 2257839008, 317213768, 2348128734, 1874716743, 456696413, 1116761881, 3309591553, 2862216319, 102982924, 2150630897, 3549437867, 2842597334, 4045646707, 302008588, 1654281218, 1727189467, 738749640, 3764450573, 3959398424, 3317500773, 3535585186, 3819002453, 3662808846, 1770928073, 3787632432, 2477652163, 1746899438, 3750614957, 761234677, 3689896539, 3520772878, 275147232, 337553768, 2986250282, 3506693941, 591880001, 1455806111, 3804664561, 2479592303, 4013399092, 726617980, 255395900, 178605610, 1293625725, 2646174944, 2376136796, 1142332741, 266983497, 999135041, 1646761432, 3287859002, 2993926759, 3462763364, 4227465400, 3355948815, 1238930500, 2174357849, 379232244, 2722994601, 2303499529, 974370129, 2577648277, 808892366, 3061424190, 4078456653, 1309753062, 2244949359, 371260896, 1136719967, 1708548536, 1658845169, 2768668945, 1531754301, 3191375913, 3511054906, 1062351502, 1744842885, 581610003, 1556303968, 867409273, 1667798951, 209299262, 437489551, 3229818234, 4190510574, 714265718, 2019898663, 564912797, 3376897769, 3559969466, 3938497845, 471145731, 349982265, 1552795612, 1447370340, 3534819495, 3702903169, 2270765654, 3192681951, 204048124, 3420549534, 3712568979, 3780914699, 2771260334, 2314887317, 745613193, 3577922416, 3094639701, 89439972, 1944758030, 1119237373, 586389801, 2520447175, 3625732341, 1427555151, 2087065690, 409476010, 187430597, 3753592208, 2951247134, 885626627, 844754868, 2092667268, 748208300, 3708044571, 3080007883, 3448755645, 3861156834, 1842920493, 818793362, 595126995, 2776784591, 62641362, 840212211, 3985028931, 387936511, 473253991, 1857032791, 4000006968, 4243356941, 1229644438, 153835145, 1283983784, 3918669237, 2721262354, 4294888081, 3113635576, 3580583332, 3521345732, 3528129211, 2061930144, 1634595536, 650979608, 2017813394, 1823871219, 3733362889, 3318357463, 2742200384, 763055433, 358005169, 768692017, 1050455834, 3453938424, 49062937, 3352742911, 3630652047, 2437806883, 1597018682, 2518758128, 1213648650, 4073021622, 4259149854, 3212854626, 79448901, 771981874, 3297404440, 3186097826, 319093164, 3890862606, 2245955576, 1497647520, 828363054, 3988483235, 3157718635, 562359205, 1350548803, 3372491415, 86446595, 1114830016, 2762338015, 1180274773, 2871068129, 2507166170, 2627076257, 1096162219, 2200646305, 3664591154, 3892273969, 476888795, 832867753, 4151853558, 2982123525, 182781907, 241410694, 1341125666, 4028887234, 3884607589, 2732864456, 1605421707, 2038450818, 3362242279, 4122980381, 2985487124, 110300201, 509696857, 4017443718, 1838466952, 2327354958, 2137521982, 138621377, 2133785874, 1413747039, 1739282333, 1675927427, 3185180235, 2373730108, 495353069, 1293977021, 1368037164, 2798684905, 81516419, 3857598893, 3495427721, 1760877692, 1152788660, 970145190, 3017785210, 1990290980, 67842654, 3925233768, 4002022873, 256245794, 1696909255, 738711838, 1446248938, 3868148475, 1939621088, 3658634988, 1784094744, 296610735, 1744996095, 2451305905, 2987883429, 2443943189, 1185159281, 4111976294, 2182983103, 3071467556, 1314957723, 152464689, 655243290, 1120785722, 1363764666, 3687005133, 4166824409, 4000596589, 2610383491, 3239976693, 4016033738, 1658070453, 1873771320, 1404781153, 3039196925, 3067316017, 2982654406, 373430827, 1067861532, 3675311637, 267701726, 3638688126, 2135521145, 1500865973, 1349464109, 3403519167, 2763769271, 4264496249, 1770838146, 1391852856, 2245935765, 2137032072, 1856750853, 688147071, 99608919, 3339156540, 2192512157, 2820609381, 2913853119, 2634309658, 1135799296, 1004115372, 2154400231, 248807841, 1855000157, 1129896866, 715899117, 923401956, 440983241, 3109426185, 477965580, 84854570, 1400593057, 1286402819, 3439792802, 318102008, 1067872774, 4240269308, 2549429311, 3855914333, 3795474048, 319956485, 4133374879, 1467447321, 78080933, 251366958, 3496186988, 3070794250, 2726275807, 2325947483, 53232900, 819143840, 2594863810, 55769358, 391403252, 866292794, 714727242, 2581427793, 698101228, 872117109, 997416829, 3565045060, 1611274371, 1562302439, 3417876422, 1392788396, 3206592320, 2207230324, 721665840, 2883852313, 1919434161, 395546903, 1837162976, 3429796583, 1522595013, 3348506059, 1175004850, 2074412352, 3758985171, 2415299591, 1703486181, 2304170834, 549422017, 2902550119, 2187986969, 3362538344, 768387705, 2456129962, 3429271129, 3706106775, 204072664, 806512945, 3311330988, 1474760185, 1814261184, 1577346575, 2078317992, 3122306338, 3467081158, 1225264382, 1847488518, 599526500, 2488492818, 1688305017, 438612976, 1607069832, 2927329539, 503082697, 1150118168, 1865053291, 2428734033, 4135113359, 821829536, 868562558, 413775071, 1334204977, 673408382, 1882374958, 4291776686, 4039700264, 911935763, 1482546356, 3253895898, 2457857766, 278986188, 1981961411, 1618768772, 658526763, 3374586925, 729845344, 1603013850, 1740519279, 2732939556, 821729772, 4152108407, 2159443430, 2359657320, 3741458889, 2625148830, 2740386969, 508381854, 4017968509, 3047356953, 3577840409, 4191139539, 592911320, 1632820963, 2552033020, 1212957884, 1014120341, 3310543727, 3779267868, 3583152261, 3680986715, 2995658876, 3137928161, 587029290, 2798799836, 4187466127, 594529572, 406159454, 4285083401, 2812893547, 841074247, 2953120157, 466989304, 2691320671, 3368132983, 3549982940, 3530994849, 3593311564, 2291771526, 3269554905, 4281627661, 1457258966, 3464984667, 1432592878, 1387812831, 154474021, 343300151, 1018325484, 2085104744, 4236418319, 2375494721, 1088217159, 389539389], "pos": 10}, "exits": {}, "cancels": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": 0, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": 0}, "trials_created": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": true, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": true}, "trials_requested": 2, "search_method_state": {"pending_trials": 2, "remaining_trials": [{"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 32, "learning_rate": 1}, {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 64, "learning_rate": 1}], "search_method_type": "grid"}, "completed_operations": {}}, "trial_searcher_state": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": {"Op": {"Length": 1, "RequestID": "b20fd10b-c039-45fa-b450-86e9ad91ec28"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 32, "learning_rate": 1}, "checkpoint": null, "request_id": "b20fd10b-c039-45fa-b450-86e9ad91ec28", "trial_seed": 1367408042, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": {"Op": {"Length": 1, "RequestID": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "checkpoint": null, "request_id": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e", "trial_seed": 1545095049, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + //nolint:lll + v5Snapshot: []byte(`{"searcher_state": {"rand": {"key": [2076300081, 1180757701, 61390626, 2075653657, 3983276912, 2219280310, 1951783750, 3432627106, 1678661725, 3042313994, 2202725749, 2202588336, 4190101782, 1110057276, 3191526579, 4171973736, 4254763240, 2766827202, 1156928074, 1597039613, 3598380759, 1437190771, 1076126477, 2658152872, 3825090400, 3114761804, 915898666, 291106241, 3036411027, 2744580765, 820531638, 1883042039, 2922514564, 188829505, 1874867577, 640982739, 1714839269, 3901091477, 2804767841, 3254494107, 2484761704, 476134574, 990456848, 3870586239, 620062224, 1995301304, 2389729019, 2462435556, 2472017888, 2504467222, 2188233046, 2306262543, 3560836860, 1978513357, 606650471, 3854035095, 4245776466, 3871782493, 597013963, 2913535589, 1756877383, 1623386184, 496866040, 588131525, 4177340522, 2935519398, 850546169, 109126006, 858579993, 795071074, 3590755528, 1638945842, 1254896771, 2307161967, 3477967610, 692808483, 1899600971, 2769494850, 2779999007, 510215608, 4111810801, 4280921106, 1518864863, 834898192, 1306840028, 835688979, 459513373, 609148069, 3545906245, 1194162898, 258441420, 4179429231, 4022175812, 2648608732, 717531457, 306247172, 2976743141, 237988140, 592196390, 704362957, 7450542, 311689767, 3067438641, 808588439, 1235198799, 742758417, 2780949935, 3446973894, 3873685895, 2153250996, 4065466909, 1497342942, 3724631752, 4275880421, 272199235, 2252962393, 2056155089, 1877112438, 2110296751, 2590941302, 2013827341, 842823052, 1894032322, 1393960121, 3588305616, 2529793378, 3205436904, 596814183, 1254786875, 2966225931, 2121907724, 475901771, 555053869, 1400569825, 3688890119, 1353122628, 1459205986, 2300737010, 1481729865, 756275962, 599878589, 2046378230, 2769239562, 3613422680, 4252206344, 947287240, 2417250410, 1305902854, 2671572052, 1899272897, 3230713963, 2224033552, 1732656815, 1936213189, 443599218, 2770284889, 3459882565, 1332607404, 3278697474, 2224591365, 2257839008, 317213768, 2348128734, 1874716743, 456696413, 1116761881, 3309591553, 2862216319, 102982924, 2150630897, 3549437867, 2842597334, 4045646707, 302008588, 1654281218, 1727189467, 738749640, 3764450573, 3959398424, 3317500773, 3535585186, 3819002453, 3662808846, 1770928073, 3787632432, 2477652163, 1746899438, 3750614957, 761234677, 3689896539, 3520772878, 275147232, 337553768, 2986250282, 3506693941, 591880001, 1455806111, 3804664561, 2479592303, 4013399092, 726617980, 255395900, 178605610, 1293625725, 2646174944, 2376136796, 1142332741, 266983497, 999135041, 1646761432, 3287859002, 2993926759, 3462763364, 4227465400, 3355948815, 1238930500, 2174357849, 379232244, 2722994601, 2303499529, 974370129, 2577648277, 808892366, 3061424190, 4078456653, 1309753062, 2244949359, 371260896, 1136719967, 1708548536, 1658845169, 2768668945, 1531754301, 3191375913, 3511054906, 1062351502, 1744842885, 581610003, 1556303968, 867409273, 1667798951, 209299262, 437489551, 3229818234, 4190510574, 714265718, 2019898663, 564912797, 3376897769, 3559969466, 3938497845, 471145731, 349982265, 1552795612, 1447370340, 3534819495, 3702903169, 2270765654, 3192681951, 204048124, 3420549534, 3712568979, 3780914699, 2771260334, 2314887317, 745613193, 3577922416, 3094639701, 89439972, 1944758030, 1119237373, 586389801, 2520447175, 3625732341, 1427555151, 2087065690, 409476010, 187430597, 3753592208, 2951247134, 885626627, 844754868, 2092667268, 748208300, 3708044571, 3080007883, 3448755645, 3861156834, 1842920493, 818793362, 595126995, 2776784591, 62641362, 840212211, 3985028931, 387936511, 473253991, 1857032791, 4000006968, 4243356941, 1229644438, 153835145, 1283983784, 3918669237, 2721262354, 4294888081, 3113635576, 3580583332, 3521345732, 3528129211, 2061930144, 1634595536, 650979608, 2017813394, 1823871219, 3733362889, 3318357463, 2742200384, 763055433, 358005169, 768692017, 1050455834, 3453938424, 49062937, 3352742911, 3630652047, 2437806883, 1597018682, 2518758128, 1213648650, 4073021622, 4259149854, 3212854626, 79448901, 771981874, 3297404440, 3186097826, 319093164, 3890862606, 2245955576, 1497647520, 828363054, 3988483235, 3157718635, 562359205, 1350548803, 3372491415, 86446595, 1114830016, 2762338015, 1180274773, 2871068129, 2507166170, 2627076257, 1096162219, 2200646305, 3664591154, 3892273969, 476888795, 832867753, 4151853558, 2982123525, 182781907, 241410694, 1341125666, 4028887234, 3884607589, 2732864456, 1605421707, 2038450818, 3362242279, 4122980381, 2985487124, 110300201, 509696857, 4017443718, 1838466952, 2327354958, 2137521982, 138621377, 2133785874, 1413747039, 1739282333, 1675927427, 3185180235, 2373730108, 495353069, 1293977021, 1368037164, 2798684905, 81516419, 3857598893, 3495427721, 1760877692, 1152788660, 970145190, 3017785210, 1990290980, 67842654, 3925233768, 4002022873, 256245794, 1696909255, 738711838, 1446248938, 3868148475, 1939621088, 3658634988, 1784094744, 296610735, 1744996095, 2451305905, 2987883429, 2443943189, 1185159281, 4111976294, 2182983103, 3071467556, 1314957723, 152464689, 655243290, 1120785722, 1363764666, 3687005133, 4166824409, 4000596589, 2610383491, 3239976693, 4016033738, 1658070453, 1873771320, 1404781153, 3039196925, 3067316017, 2982654406, 373430827, 1067861532, 3675311637, 267701726, 3638688126, 2135521145, 1500865973, 1349464109, 3403519167, 2763769271, 4264496249, 1770838146, 1391852856, 2245935765, 2137032072, 1856750853, 688147071, 99608919, 3339156540, 2192512157, 2820609381, 2913853119, 2634309658, 1135799296, 1004115372, 2154400231, 248807841, 1855000157, 1129896866, 715899117, 923401956, 440983241, 3109426185, 477965580, 84854570, 1400593057, 1286402819, 3439792802, 318102008, 1067872774, 4240269308, 2549429311, 3855914333, 3795474048, 319956485, 4133374879, 1467447321, 78080933, 251366958, 3496186988, 3070794250, 2726275807, 2325947483, 53232900, 819143840, 2594863810, 55769358, 391403252, 866292794, 714727242, 2581427793, 698101228, 872117109, 997416829, 3565045060, 1611274371, 1562302439, 3417876422, 1392788396, 3206592320, 2207230324, 721665840, 2883852313, 1919434161, 395546903, 1837162976, 3429796583, 1522595013, 3348506059, 1175004850, 2074412352, 3758985171, 2415299591, 1703486181, 2304170834, 549422017, 2902550119, 2187986969, 3362538344, 768387705, 2456129962, 3429271129, 3706106775, 204072664, 806512945, 3311330988, 1474760185, 1814261184, 1577346575, 2078317992, 3122306338, 3467081158, 1225264382, 1847488518, 599526500, 2488492818, 1688305017, 438612976, 1607069832, 2927329539, 503082697, 1150118168, 1865053291, 2428734033, 4135113359, 821829536, 868562558, 413775071, 1334204977, 673408382, 1882374958, 4291776686, 4039700264, 911935763, 1482546356, 3253895898, 2457857766, 278986188, 1981961411, 1618768772, 658526763, 3374586925, 729845344, 1603013850, 1740519279, 2732939556, 821729772, 4152108407, 2159443430, 2359657320, 3741458889, 2625148830, 2740386969, 508381854, 4017968509, 3047356953, 3577840409, 4191139539, 592911320, 1632820963, 2552033020, 1212957884, 1014120341, 3310543727, 3779267868, 3583152261, 3680986715, 2995658876, 3137928161, 587029290, 2798799836, 4187466127, 594529572, 406159454, 4285083401, 2812893547, 841074247, 2953120157, 466989304, 2691320671, 3368132983, 3549982940, 3530994849, 3593311564, 2291771526, 3269554905, 4281627661, 1457258966, 3464984667, 1432592878, 1387812831, 154474021, 343300151, 1018325484, 2085104744, 4236418319, 2375494721, 1088217159, 389539389], "pos": 10}, "exits": {}, "cancels": {}, "failures": {}, "trials_closed": {}, "trial_progress": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": 0, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": 0}, "trials_created": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": true, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": true}, "trials_requested": 2, "search_method_state": {"pending_trials": 2, "remaining_trials": [{"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 32, "learning_rate": 1}, {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 64, "learning_rate": 1}], "search_method_type": "grid"}}, "trial_searcher_state": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": {"EarlyExitedByUserCode": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 32, "learning_rate": 1}, "request_id": "b20fd10b-c039-45fa-b450-86e9ad91ec28", "trial_seed": 1367408042}, "EarlyStoppedBySearcher": false}, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": {"EarlyExitedByUserCode": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "request_id": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e", "trial_seed": 1545095049}, "EarlyStoppedBySearcher": false}}}`), + }, + { + name: searcher.RandomSearch, + //nolint:lll + v4Snapshot: []byte(`{"searcher_state": {"rand": {"key": [2076300081, 1180757701, 61390626, 2075653657, 3983276912, 2219280310, 1951783750, 3432627106, 1678661725, 3042313994, 2202725749, 2202588336, 4190101782, 1110057276, 3191526579, 4171973736, 4254763240, 2766827202, 1156928074, 1597039613, 3598380759, 1437190771, 1076126477, 2658152872, 3825090400, 3114761804, 915898666, 291106241, 3036411027, 2744580765, 820531638, 1883042039, 2922514564, 188829505, 1874867577, 640982739, 1714839269, 3901091477, 2804767841, 3254494107, 2484761704, 476134574, 990456848, 3870586239, 620062224, 1995301304, 2389729019, 2462435556, 2472017888, 2504467222, 2188233046, 2306262543, 3560836860, 1978513357, 606650471, 3854035095, 4245776466, 3871782493, 597013963, 2913535589, 1756877383, 1623386184, 496866040, 588131525, 4177340522, 2935519398, 850546169, 109126006, 858579993, 795071074, 3590755528, 1638945842, 1254896771, 2307161967, 3477967610, 692808483, 1899600971, 2769494850, 2779999007, 510215608, 4111810801, 4280921106, 1518864863, 834898192, 1306840028, 835688979, 459513373, 609148069, 3545906245, 1194162898, 258441420, 4179429231, 4022175812, 2648608732, 717531457, 306247172, 2976743141, 237988140, 592196390, 704362957, 7450542, 311689767, 3067438641, 808588439, 1235198799, 742758417, 2780949935, 3446973894, 3873685895, 2153250996, 4065466909, 1497342942, 3724631752, 4275880421, 272199235, 2252962393, 2056155089, 1877112438, 2110296751, 2590941302, 2013827341, 842823052, 1894032322, 1393960121, 3588305616, 2529793378, 3205436904, 596814183, 1254786875, 2966225931, 2121907724, 475901771, 555053869, 1400569825, 3688890119, 1353122628, 1459205986, 2300737010, 1481729865, 756275962, 599878589, 2046378230, 2769239562, 3613422680, 4252206344, 947287240, 2417250410, 1305902854, 2671572052, 1899272897, 3230713963, 2224033552, 1732656815, 1936213189, 443599218, 2770284889, 3459882565, 1332607404, 3278697474, 2224591365, 2257839008, 317213768, 2348128734, 1874716743, 456696413, 1116761881, 3309591553, 2862216319, 102982924, 2150630897, 3549437867, 2842597334, 4045646707, 302008588, 1654281218, 1727189467, 738749640, 3764450573, 3959398424, 3317500773, 3535585186, 3819002453, 3662808846, 1770928073, 3787632432, 2477652163, 1746899438, 3750614957, 761234677, 3689896539, 3520772878, 275147232, 337553768, 2986250282, 3506693941, 591880001, 1455806111, 3804664561, 2479592303, 4013399092, 726617980, 255395900, 178605610, 1293625725, 2646174944, 2376136796, 1142332741, 266983497, 999135041, 1646761432, 3287859002, 2993926759, 3462763364, 4227465400, 3355948815, 1238930500, 2174357849, 379232244, 2722994601, 2303499529, 974370129, 2577648277, 808892366, 3061424190, 4078456653, 1309753062, 2244949359, 371260896, 1136719967, 1708548536, 1658845169, 2768668945, 1531754301, 3191375913, 3511054906, 1062351502, 1744842885, 581610003, 1556303968, 867409273, 1667798951, 209299262, 437489551, 3229818234, 4190510574, 714265718, 2019898663, 564912797, 3376897769, 3559969466, 3938497845, 471145731, 349982265, 1552795612, 1447370340, 3534819495, 3702903169, 2270765654, 3192681951, 204048124, 3420549534, 3712568979, 3780914699, 2771260334, 2314887317, 745613193, 3577922416, 3094639701, 89439972, 1944758030, 1119237373, 586389801, 2520447175, 3625732341, 1427555151, 2087065690, 409476010, 187430597, 3753592208, 2951247134, 885626627, 844754868, 2092667268, 748208300, 3708044571, 3080007883, 3448755645, 3861156834, 1842920493, 818793362, 595126995, 2776784591, 62641362, 840212211, 3985028931, 387936511, 473253991, 1857032791, 4000006968, 4243356941, 1229644438, 153835145, 1283983784, 3918669237, 2721262354, 4294888081, 3113635576, 3580583332, 3521345732, 3528129211, 2061930144, 1634595536, 650979608, 2017813394, 1823871219, 3733362889, 3318357463, 2742200384, 763055433, 358005169, 768692017, 1050455834, 3453938424, 49062937, 3352742911, 3630652047, 2437806883, 1597018682, 2518758128, 1213648650, 4073021622, 4259149854, 3212854626, 79448901, 771981874, 3297404440, 3186097826, 319093164, 3890862606, 2245955576, 1497647520, 828363054, 3988483235, 3157718635, 562359205, 1350548803, 3372491415, 86446595, 1114830016, 2762338015, 1180274773, 2871068129, 2507166170, 2627076257, 1096162219, 2200646305, 3664591154, 3892273969, 476888795, 832867753, 4151853558, 2982123525, 182781907, 241410694, 1341125666, 4028887234, 3884607589, 2732864456, 1605421707, 2038450818, 3362242279, 4122980381, 2985487124, 110300201, 509696857, 4017443718, 1838466952, 2327354958, 2137521982, 138621377, 2133785874, 1413747039, 1739282333, 1675927427, 3185180235, 2373730108, 495353069, 1293977021, 1368037164, 2798684905, 81516419, 3857598893, 3495427721, 1760877692, 1152788660, 970145190, 3017785210, 1990290980, 67842654, 3925233768, 4002022873, 256245794, 1696909255, 738711838, 1446248938, 3868148475, 1939621088, 3658634988, 1784094744, 296610735, 1744996095, 2451305905, 2987883429, 2443943189, 1185159281, 4111976294, 2182983103, 3071467556, 1314957723, 152464689, 655243290, 1120785722, 1363764666, 3687005133, 4166824409, 4000596589, 2610383491, 3239976693, 4016033738, 1658070453, 1873771320, 1404781153, 3039196925, 3067316017, 2982654406, 373430827, 1067861532, 3675311637, 267701726, 3638688126, 2135521145, 1500865973, 1349464109, 3403519167, 2763769271, 4264496249, 1770838146, 1391852856, 2245935765, 2137032072, 1856750853, 688147071, 99608919, 3339156540, 2192512157, 2820609381, 2913853119, 2634309658, 1135799296, 1004115372, 2154400231, 248807841, 1855000157, 1129896866, 715899117, 923401956, 440983241, 3109426185, 477965580, 84854570, 1400593057, 1286402819, 3439792802, 318102008, 1067872774, 4240269308, 2549429311, 3855914333, 3795474048, 319956485, 4133374879, 1467447321, 78080933, 251366958, 3496186988, 3070794250, 2726275807, 2325947483, 53232900, 819143840, 2594863810, 55769358, 391403252, 866292794, 714727242, 2581427793, 698101228, 872117109, 997416829, 3565045060, 1611274371, 1562302439, 3417876422, 1392788396, 3206592320, 2207230324, 721665840, 2883852313, 1919434161, 395546903, 1837162976, 3429796583, 1522595013, 3348506059, 1175004850, 2074412352, 3758985171, 2415299591, 1703486181, 2304170834, 549422017, 2902550119, 2187986969, 3362538344, 768387705, 2456129962, 3429271129, 3706106775, 204072664, 806512945, 3311330988, 1474760185, 1814261184, 1577346575, 2078317992, 3122306338, 3467081158, 1225264382, 1847488518, 599526500, 2488492818, 1688305017, 438612976, 1607069832, 2927329539, 503082697, 1150118168, 1865053291, 2428734033, 4135113359, 821829536, 868562558, 413775071, 1334204977, 673408382, 1882374958, 4291776686, 4039700264, 911935763, 1482546356, 3253895898, 2457857766, 278986188, 1981961411, 1618768772, 658526763, 3374586925, 729845344, 1603013850, 1740519279, 2732939556, 821729772, 4152108407, 2159443430, 2359657320, 3741458889, 2625148830, 2740386969, 508381854, 4017968509, 3047356953, 3577840409, 4191139539, 592911320, 1632820963, 2552033020, 1212957884, 1014120341, 3310543727, 3779267868, 3583152261, 3680986715, 2995658876, 3137928161, 587029290, 2798799836, 4187466127, 594529572, 406159454, 4285083401, 2812893547, 841074247, 2953120157, 466989304, 2691320671, 3368132983, 3549982940, 3530994849, 3593311564, 2291771526, 3269554905, 4281627661, 1457258966, 3464984667, 1432592878, 1387812831, 154474021, 343300151, 1018325484, 2085104744, 4236418319, 2375494721, 1088217159, 389539389], "pos": 10}, "exits": {}, "cancels": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": 0, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": 0}, "trials_created": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": true, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": true}, "trials_requested": 2, "search_method_state": {"pending_trials": 2, "remaining_trials": [{"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 32, "learning_rate": 1}, {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 64, "learning_rate": 1}], "search_method_type": "grid"}, "completed_operations": {}}, "trial_searcher_state": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": {"Op": {"Length": 1, "RequestID": "b20fd10b-c039-45fa-b450-86e9ad91ec28"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 32, "learning_rate": 1}, "checkpoint": null, "request_id": "b20fd10b-c039-45fa-b450-86e9ad91ec28", "trial_seed": 1367408042, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": {"Op": {"Length": 1, "RequestID": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "checkpoint": null, "request_id": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e", "trial_seed": 1545095049, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + //nolint:lll + v5Snapshot: []byte(`{"searcher_state": {"rand": {"key": [2076300081, 1180757701, 61390626, 2075653657, 3983276912, 2219280310, 1951783750, 3432627106, 1678661725, 3042313994, 2202725749, 2202588336, 4190101782, 1110057276, 3191526579, 4171973736, 4254763240, 2766827202, 1156928074, 1597039613, 3598380759, 1437190771, 1076126477, 2658152872, 3825090400, 3114761804, 915898666, 291106241, 3036411027, 2744580765, 820531638, 1883042039, 2922514564, 188829505, 1874867577, 640982739, 1714839269, 3901091477, 2804767841, 3254494107, 2484761704, 476134574, 990456848, 3870586239, 620062224, 1995301304, 2389729019, 2462435556, 2472017888, 2504467222, 2188233046, 2306262543, 3560836860, 1978513357, 606650471, 3854035095, 4245776466, 3871782493, 597013963, 2913535589, 1756877383, 1623386184, 496866040, 588131525, 4177340522, 2935519398, 850546169, 109126006, 858579993, 795071074, 3590755528, 1638945842, 1254896771, 2307161967, 3477967610, 692808483, 1899600971, 2769494850, 2779999007, 510215608, 4111810801, 4280921106, 1518864863, 834898192, 1306840028, 835688979, 459513373, 609148069, 3545906245, 1194162898, 258441420, 4179429231, 4022175812, 2648608732, 717531457, 306247172, 2976743141, 237988140, 592196390, 704362957, 7450542, 311689767, 3067438641, 808588439, 1235198799, 742758417, 2780949935, 3446973894, 3873685895, 2153250996, 4065466909, 1497342942, 3724631752, 4275880421, 272199235, 2252962393, 2056155089, 1877112438, 2110296751, 2590941302, 2013827341, 842823052, 1894032322, 1393960121, 3588305616, 2529793378, 3205436904, 596814183, 1254786875, 2966225931, 2121907724, 475901771, 555053869, 1400569825, 3688890119, 1353122628, 1459205986, 2300737010, 1481729865, 756275962, 599878589, 2046378230, 2769239562, 3613422680, 4252206344, 947287240, 2417250410, 1305902854, 2671572052, 1899272897, 3230713963, 2224033552, 1732656815, 1936213189, 443599218, 2770284889, 3459882565, 1332607404, 3278697474, 2224591365, 2257839008, 317213768, 2348128734, 1874716743, 456696413, 1116761881, 3309591553, 2862216319, 102982924, 2150630897, 3549437867, 2842597334, 4045646707, 302008588, 1654281218, 1727189467, 738749640, 3764450573, 3959398424, 3317500773, 3535585186, 3819002453, 3662808846, 1770928073, 3787632432, 2477652163, 1746899438, 3750614957, 761234677, 3689896539, 3520772878, 275147232, 337553768, 2986250282, 3506693941, 591880001, 1455806111, 3804664561, 2479592303, 4013399092, 726617980, 255395900, 178605610, 1293625725, 2646174944, 2376136796, 1142332741, 266983497, 999135041, 1646761432, 3287859002, 2993926759, 3462763364, 4227465400, 3355948815, 1238930500, 2174357849, 379232244, 2722994601, 2303499529, 974370129, 2577648277, 808892366, 3061424190, 4078456653, 1309753062, 2244949359, 371260896, 1136719967, 1708548536, 1658845169, 2768668945, 1531754301, 3191375913, 3511054906, 1062351502, 1744842885, 581610003, 1556303968, 867409273, 1667798951, 209299262, 437489551, 3229818234, 4190510574, 714265718, 2019898663, 564912797, 3376897769, 3559969466, 3938497845, 471145731, 349982265, 1552795612, 1447370340, 3534819495, 3702903169, 2270765654, 3192681951, 204048124, 3420549534, 3712568979, 3780914699, 2771260334, 2314887317, 745613193, 3577922416, 3094639701, 89439972, 1944758030, 1119237373, 586389801, 2520447175, 3625732341, 1427555151, 2087065690, 409476010, 187430597, 3753592208, 2951247134, 885626627, 844754868, 2092667268, 748208300, 3708044571, 3080007883, 3448755645, 3861156834, 1842920493, 818793362, 595126995, 2776784591, 62641362, 840212211, 3985028931, 387936511, 473253991, 1857032791, 4000006968, 4243356941, 1229644438, 153835145, 1283983784, 3918669237, 2721262354, 4294888081, 3113635576, 3580583332, 3521345732, 3528129211, 2061930144, 1634595536, 650979608, 2017813394, 1823871219, 3733362889, 3318357463, 2742200384, 763055433, 358005169, 768692017, 1050455834, 3453938424, 49062937, 3352742911, 3630652047, 2437806883, 1597018682, 2518758128, 1213648650, 4073021622, 4259149854, 3212854626, 79448901, 771981874, 3297404440, 3186097826, 319093164, 3890862606, 2245955576, 1497647520, 828363054, 3988483235, 3157718635, 562359205, 1350548803, 3372491415, 86446595, 1114830016, 2762338015, 1180274773, 2871068129, 2507166170, 2627076257, 1096162219, 2200646305, 3664591154, 3892273969, 476888795, 832867753, 4151853558, 2982123525, 182781907, 241410694, 1341125666, 4028887234, 3884607589, 2732864456, 1605421707, 2038450818, 3362242279, 4122980381, 2985487124, 110300201, 509696857, 4017443718, 1838466952, 2327354958, 2137521982, 138621377, 2133785874, 1413747039, 1739282333, 1675927427, 3185180235, 2373730108, 495353069, 1293977021, 1368037164, 2798684905, 81516419, 3857598893, 3495427721, 1760877692, 1152788660, 970145190, 3017785210, 1990290980, 67842654, 3925233768, 4002022873, 256245794, 1696909255, 738711838, 1446248938, 3868148475, 1939621088, 3658634988, 1784094744, 296610735, 1744996095, 2451305905, 2987883429, 2443943189, 1185159281, 4111976294, 2182983103, 3071467556, 1314957723, 152464689, 655243290, 1120785722, 1363764666, 3687005133, 4166824409, 4000596589, 2610383491, 3239976693, 4016033738, 1658070453, 1873771320, 1404781153, 3039196925, 3067316017, 2982654406, 373430827, 1067861532, 3675311637, 267701726, 3638688126, 2135521145, 1500865973, 1349464109, 3403519167, 2763769271, 4264496249, 1770838146, 1391852856, 2245935765, 2137032072, 1856750853, 688147071, 99608919, 3339156540, 2192512157, 2820609381, 2913853119, 2634309658, 1135799296, 1004115372, 2154400231, 248807841, 1855000157, 1129896866, 715899117, 923401956, 440983241, 3109426185, 477965580, 84854570, 1400593057, 1286402819, 3439792802, 318102008, 1067872774, 4240269308, 2549429311, 3855914333, 3795474048, 319956485, 4133374879, 1467447321, 78080933, 251366958, 3496186988, 3070794250, 2726275807, 2325947483, 53232900, 819143840, 2594863810, 55769358, 391403252, 866292794, 714727242, 2581427793, 698101228, 872117109, 997416829, 3565045060, 1611274371, 1562302439, 3417876422, 1392788396, 3206592320, 2207230324, 721665840, 2883852313, 1919434161, 395546903, 1837162976, 3429796583, 1522595013, 3348506059, 1175004850, 2074412352, 3758985171, 2415299591, 1703486181, 2304170834, 549422017, 2902550119, 2187986969, 3362538344, 768387705, 2456129962, 3429271129, 3706106775, 204072664, 806512945, 3311330988, 1474760185, 1814261184, 1577346575, 2078317992, 3122306338, 3467081158, 1225264382, 1847488518, 599526500, 2488492818, 1688305017, 438612976, 1607069832, 2927329539, 503082697, 1150118168, 1865053291, 2428734033, 4135113359, 821829536, 868562558, 413775071, 1334204977, 673408382, 1882374958, 4291776686, 4039700264, 911935763, 1482546356, 3253895898, 2457857766, 278986188, 1981961411, 1618768772, 658526763, 3374586925, 729845344, 1603013850, 1740519279, 2732939556, 821729772, 4152108407, 2159443430, 2359657320, 3741458889, 2625148830, 2740386969, 508381854, 4017968509, 3047356953, 3577840409, 4191139539, 592911320, 1632820963, 2552033020, 1212957884, 1014120341, 3310543727, 3779267868, 3583152261, 3680986715, 2995658876, 3137928161, 587029290, 2798799836, 4187466127, 594529572, 406159454, 4285083401, 2812893547, 841074247, 2953120157, 466989304, 2691320671, 3368132983, 3549982940, 3530994849, 3593311564, 2291771526, 3269554905, 4281627661, 1457258966, 3464984667, 1432592878, 1387812831, 154474021, 343300151, 1018325484, 2085104744, 4236418319, 2375494721, 1088217159, 389539389], "pos": 10}, "exits": {}, "cancels": {}, "failures": {}, "trials_closed": {}, "trial_progress": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": 0, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": 0}, "trials_created": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": true, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": true}, "trials_requested": 2, "search_method_state": {"pending_trials": 2, "remaining_trials": [{"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 32, "learning_rate": 1}, {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 16, "n_filters2": 64, "learning_rate": 1}], "search_method_type": "grid"}}, "trial_searcher_state": {"b20fd10b-c039-45fa-b450-86e9ad91ec28": {"EarlyExitedByUserCode": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 32, "learning_rate": 1}, "request_id": "b20fd10b-c039-45fa-b450-86e9ad91ec28", "trial_seed": 1367408042}, "EarlyStoppedBySearcher": false}, "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e": {"EarlyExitedByUserCode": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "request_id": "c8810eb9-937a-4c71-86e6-cefbc9f1ba8e", "trial_seed": 1545095049}, "EarlyStoppedBySearcher": false}}}`), + }, + } + for _, c := range cases { + t.Run(string(c.name), func(t *testing.T) { + snapshot, err := shimExperimentSnapshotV5(c.v4Snapshot) + if c.err != "" { + require.ErrorContains(t, err, c.err) + } else { + require.NoError(t, err) + require.JSONEq(t, string(c.v5Snapshot), string(snapshot)) + } + }) + } +} + func TestDeserExperimentSnapshotIntoCurrent(t *testing.T) { - // This test tries to deserialize a copy of a the current experiment snapshot. + // This test tries to deserialize a copy of the current experiment snapshot. // If this test fails, it means there was a breaking change to snapshots which may've not // received a shim. Please ensure there is a shim and fix this test for the next time. tests := []struct { @@ -36,19 +84,14 @@ func TestDeserExperimentSnapshotIntoCurrent(t *testing.T) { //nolint:exhaustruct single := expconf.SearcherConfig{ //nolint:exhaustruct - RawSingleConfig: &expconf.SingleConfig{ - RawMaxLength: &expconf.Length{ - Unit: expconf.Batches, - Units: 937, - }, - }, + RawSingleConfig: &expconf.SingleConfig{}, } sm := searcher.NewSearchMethod(single) e.searcher = searcher.NewSearcher(0, sm, expconf.Hyperparameters{}) return e }, //nolint:lll - snapshot: []byte(`{"searcher_state": {"rand": {"key": [2970094109, 656686882, 618108684, 3428065983, 3347811667, 2888225350, 3059306387, 3429410465, 120474970, 2272301777, 985108865, 991558874, 3272543769, 1573748485, 942809215, 3888215743, 2210951765, 1718115507, 3963921664, 3557444060, 1499923783, 1829703377, 750493200, 3411092685, 589595500, 2596144409, 1879328096, 1280550458, 2715466210, 2544141428, 1543312021, 2997818084, 765128503, 536629897, 1001278031, 956821445, 2736363088, 947342293, 3898485884, 3425929255, 356849665, 3772908806, 3623557158, 2612581302, 3580922597, 217692149, 2059015628, 2096894728, 1031554394, 2656443257, 856730792, 2596152358, 3710976744, 3544672276, 1734608805, 481137749, 969621572, 754645566, 4116998116, 79516852, 3779707014, 84449565, 2299776967, 3049981717, 209980308, 730595889, 475796649, 176283770, 945344397, 3533051341, 1815446302, 3773966474, 2608085762, 3988702430, 1364580973, 954047394, 3612132653, 772541827, 644272441, 189803165, 931375382, 345347493, 1070927534, 1233280688, 2977342360, 964860546, 311939975, 4227569059, 1111154497, 2670796852, 2936307495, 1340846895, 2187526044, 4049656992, 2523649560, 3366534695, 4129435744, 2210183795, 1260247727, 3172172609, 845427714, 2412303263, 4029524955, 496281340, 1521525374, 1068147028, 715985502, 4093783277, 2159512480, 133552717, 436985375, 3034348399, 1875037974, 4060219881, 2429216519, 1706838315, 3704003030, 1782549491, 3768045061, 3989593374, 93865362, 1767865857, 1137597591, 252302268, 3084248212, 619916972, 4054361685, 2046158286, 1812194877, 3286982519, 3624326839, 2208625006, 3161233673, 3006516503, 2024883981, 1656495788, 587227161, 3021529118, 3172394998, 3398906615, 615744671, 3472224112, 212954520, 1118562041, 1921307781, 1197366600, 1484195533, 1200554730, 729716373, 1652264122, 1007315030, 2434524607, 585522965, 1141433277, 278327678, 3497727325, 356102370, 1394639384, 1857470125, 735035053, 2157227949, 2119739569, 171894210, 839804861, 1047866560, 420010537, 1667233883, 352520083, 1757099499, 2384088069, 251603325, 4218299275, 3730818711, 1003235663, 299940149, 2645812204, 2480727500, 1622974487, 1629312940, 3982198086, 2956489407, 2625953102, 1319536795, 42594099, 1983096735, 973960638, 3621842015, 3277003271, 2353057652, 181048897, 971058611, 596055263, 916085615, 181371615, 1523808158, 1627674241, 1944135612, 1287953114, 427398813, 3657156653, 2038254583, 1728892774, 2979810975, 1203810426, 870115982, 2342890482, 239526972, 161374077, 1298609642, 3361627384, 1120507760, 2857852335, 1817591908, 2278524994, 2381282828, 390752450, 2583666345, 2894166573, 1090621184, 1216468230, 2471775878, 4007164892, 4120390730, 2245347208, 1747432849, 2659194233, 3123421709, 1394627981, 3642599365, 447037831, 2948358439, 2071590290, 620060883, 1189294322, 865221550, 1072574172, 4239383229, 3932654708, 977824870, 4090083517, 996564545, 2215368799, 1639088756, 1063294874, 2589869379, 2931882145, 1119478531, 2913543435, 2863960600, 2220278034, 1514566588, 2171894117, 1040890154, 613591648, 4213726618, 3733950164, 3557521554, 451572785, 1963683489, 2910238750, 1724590625, 2276900333, 2786477774, 194531157, 2427295372, 2668452276, 3024832162, 4118825874, 2048453723, 602839057, 1287626269, 391207769, 1490752784, 631791025, 3012581026, 2165558496, 711793093, 394391602, 3030359078, 753489044, 1912791312, 805796394, 3405161241, 2387156388, 3012369288, 785079410, 1579291678, 2186594177, 1466653116, 2597054161, 2032480878, 2608593331, 245623596, 4030340391, 4102274438, 1820069747, 861878589, 1987396926, 1234162528, 4203068184, 4247911765, 675763300, 776602741, 2725860139, 1101969549, 2417348663, 3640520171, 4117232477, 1498968755, 1465742592, 978609897, 207663660, 3872867123, 2345883885, 3859129626, 2085742042, 2849699660, 766128209, 1220321488, 4036832842, 2625520262, 1672441713, 68307500, 1664835655, 4277760737, 2834495524, 1659112114, 4058377674, 3503936154, 3460939589, 1534417391, 546891454, 2119405354, 1342659996, 4063240713, 2470735676, 4263599371, 1004146457, 4110714736, 161171862, 3755105332, 2045654769, 3373580076, 3804959282, 172165195, 1513507373, 756508282, 2395802730, 1042880862, 424954450, 3528754016, 705074650, 1657675167, 3512260741, 1502017722, 3914739402, 2193244645, 2422500613, 99094108, 2136256596, 2765564582, 1469408647, 422762387, 4256532504, 2587902689, 322034733, 869598360, 1591826706, 3537194108, 432319981, 3238387140, 3998122956, 1638675667, 2820632381, 2704736212, 1001829652, 3842914244, 2163956861, 1247332102, 4161816793, 1047179830, 3332934466, 3373357404, 1755466786, 2066857771, 3041960543, 1984594045, 2873866111, 625922821, 2084260334, 647387503, 1795267011, 2734649093, 1429118207, 1763491842, 2499417212, 1322753865, 2546278618, 3069808828, 2758040961, 2095345089, 1117531393, 1079149953, 199028389, 5727143, 2626507809, 1394644924, 2371859674, 3378009021, 663183580, 1964126253, 4253076758, 1951862122, 3318205484, 246506769, 2065283265, 4062893977, 1357669276, 1910189941, 1768248614, 2642642591, 3082965658, 2821926795, 3387815148, 3811042618, 47443245, 1219528119, 2554982004, 3265451419, 2888244446, 4219157977, 970880074, 1607338684, 3191412771, 2649941819, 3075671217, 1402753481, 4075173340, 1295557797, 911791588, 847594689, 2359505701, 3661496760, 733404895, 249867897, 1640333750, 582965187, 1381547711, 2657453162, 1011026771, 2180307770, 52701968, 2169192963, 3746362727, 509530176, 4097693696, 406641367, 2522117714, 2016171603, 2069773173, 3084060900, 1332397153, 1412022588, 1875059352, 3676296777, 3375212542, 1306176142, 133024327, 2608708004, 139194617, 519502757, 1353538952, 3608390217, 3046145872, 1399364698, 4125351745, 572217286, 2142672378, 2889903141, 3434412210, 2393320012, 3956475466, 562179437, 3542566562, 3807446953, 1580557399, 3614175239, 3960865405, 3703717660, 2310530500, 1372501162, 3987983520, 2273295537, 3041676882, 1184238826, 1347025024, 1978741180, 1085872423, 3721856454, 4017856803, 3452381717, 2476724512, 3844971453, 3783643616, 1806640004, 945069700, 146817685, 3591154906, 3316795159, 3055211927, 3538095801, 2794589177, 2749831736, 3448467389, 2625023521, 183144251, 1181880302, 2668701387, 1211953638, 2740205019, 1424192308, 3005227360, 3518579311, 2030094765, 2163439322, 528876425, 713989960, 49680970, 3843683734, 2284197334, 754118913, 3660862775, 2811591585, 1900142815, 909665247, 3587945731, 1738555018, 4017103008, 363980482, 3596395463, 4036688775, 562009149, 652191781, 3255386890, 742878000, 9948449, 1293599923, 3198724758, 1824688996, 971993200, 545911088, 3111974979, 548678661, 3540201872, 347949716, 3899497825, 3919059349, 4023520489, 3906867502, 2926287461, 1975024135, 1961216548, 4241655703, 882861834, 447828602, 1073917811, 3204969134, 3637120523, 2561353660, 3087651888, 2625085299, 3045978593, 3296945077, 3353240266, 264317791, 3618427144, 3041663648, 3129441565, 1614617882, 742204376, 107307162, 4015043056, 164246162, 2971078786, 3420066832, 1704293461, 459244372, 744914593, 710366705, 2599447851, 3652089701, 712803605, 2980013293, 476563708, 1665840194, 1037190002, 3225477896, 1430942116, 2632665368, 3730881422, 1625879865, 363179597, 3829523707, 14110766, 1150504976, 2891936857, 256611346, 774302498, 184441060, 803067320, 3354307461, 2067530913, 466995748, 1177075098, 4068208859, 1923629384, 3949860772, 3830641659, 1017128665, 2972991357, 4238922926, 575232160, 101928834, 2405116568], "pos": 5}, "exits": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"bb239c3a-c6b5-4ef3-ba7b-118038bd0d06": 0}, "trials_created": {"bb239c3a-c6b5-4ef3-ba7b-118038bd0d06": true}, "trials_requested": 1, "search_method_state": {"created_trials": 1, "pending_trials": 1, "search_method_type": "single"}, "completed_operations": {}}, "trial_searcher_state": {"bb239c3a-c6b5-4ef3-ba7b-118038bd0d06": {"Op": {"Length": 937, "RequestID": "bb239c3a-c6b5-4ef3-ba7b-118038bd0d06"}, "Closed": true, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1, "global_batch_size": 64}, "checkpoint": null, "request_id": "bb239c3a-c6b5-4ef3-ba7b-118038bd0d06", "trial_seed": 1757369869, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + snapshot: []byte(`{"searcher_state": {"rand": {"key": [2458791418, 3116467974, 2738037530, 1223607127, 3286445278, 625897174, 1172106481, 2572993093, 2198533759, 3837319279, 89569234, 2840266316, 3281728377, 2462842803, 223147636, 1426784029, 117006397, 2636154877, 1449436706, 2927825553, 669826405, 4158003124, 3051998482, 3863884161, 4115545788, 3969262691, 1993859905, 526793478, 2862121258, 2585948009, 363338570, 2434066506, 2697236630, 3741159605, 4276159879, 2540043166, 1254547227, 281417924, 3524428006, 1717738180, 2788608558, 3067505898, 1428442263, 2529107117, 2141185930, 2917242155, 2718794995, 1103873205, 2335184097, 1489619463, 1859666767, 643801413, 3529330080, 1352766355, 2547570226, 2073329677, 2610277209, 435342246, 2505497031, 798656570, 3382074658, 4189489635, 28016400, 3296078941, 1945638788, 2826985424, 4265599268, 304154357, 932685664, 2758841683, 2455326991, 3980298044, 2314318323, 595095528, 4177520052, 3112160276, 1257280438, 1207886472, 2677553884, 3265570879, 2457548809, 2111634072, 3972389638, 665045651, 3994591990, 2042170295, 3594420958, 1611936557, 819891391, 3473558321, 426840388, 1314012383, 2561237332, 2272262342, 3134027931, 4294175632, 3732369287, 4128031240, 4147187676, 3149809049, 4144063892, 2345560497, 3738737588, 3840299650, 280313741, 101675464, 1393579054, 1505545589, 3277145020, 2188655472, 1421937881, 854289081, 2431554199, 1539816964, 83937993, 3224697403, 1610045703, 2816848158, 792619755, 934271931, 2710423316, 3868916984, 3853694682, 580166127, 3034428351, 1242892688, 859119565, 3802529696, 1000657147, 1905689709, 2988202998, 4019138435, 3698964560, 781687417, 2634708534, 1790387080, 3083588514, 2067517328, 3813894530, 1697102895, 1736661565, 1635070572, 2451931176, 2607824278, 2710884525, 3333385014, 2122182769, 2392051351, 2906588340, 4103192869, 1168352864, 1983143924, 710890467, 2699295676, 3119053614, 1518994382, 2466039509, 572476338, 4181949791, 3735635392, 742157348, 1157573401, 1972168146, 272316361, 1510876922, 1556419901, 941326744, 2682202561, 3173709824, 1829453176, 2251191850, 3456122487, 3173338821, 330462762, 1754886765, 250991513, 1585255942, 253192177, 3012909793, 3530990056, 2004128557, 514254595, 2445947804, 2613994303, 1602501425, 2012372011, 3584430451, 2144992891, 453151729, 418148689, 3200328899, 1320919208, 3350564767, 1251183192, 3290155726, 3287744578, 1064686988, 3961170913, 1980153684, 1339419052, 3783807526, 2183864424, 2594654516, 1832017181, 3373700328, 248263337, 4269409531, 3608097081, 2124157490, 3498209804, 3263200819, 3127724750, 1312779256, 1734613689, 3719011732, 3243076830, 335603414, 1448836682, 2863567879, 3171222479, 953744612, 1854108551, 396912697, 1471435093, 2536166045, 2432755996, 50855133, 1127984088, 2445499632, 682533110, 692746935, 1651664519, 2705150811, 4151653551, 1934542959, 3007387232, 2198726288, 3698559570, 3010880745, 3239971816, 168338881, 2794239687, 2901311416, 1552192572, 1131246424, 2788592201, 805537073, 2327010547, 1261208610, 3515399927, 3639687688, 151099323, 1666670090, 3955849057, 484700107, 3470434774, 2223492086, 90444150, 1572468487, 697895815, 2621785173, 4028029284, 1631608044, 1794520030, 1369705039, 4286067898, 1548006208, 1859332416, 3062951908, 343535845, 1027995635, 847936898, 1002776644, 1787482428, 1761964089, 1010518086, 2242475935, 3301831376, 3685964202, 2354379073, 3765363997, 3338328111, 2354888011, 3883114207, 936858297, 1841452303, 2180987975, 3833453400, 4253783174, 187816314, 1065449290, 828211291, 1227118119, 3312227455, 857392088, 3989703709, 2722876258, 2826056677, 2487224771, 1620253778, 4235150726, 1357697909, 2030894361, 3540876365, 2001105143, 203686501, 3114867920, 2041712100, 2614268670, 3094356533, 3358484761, 4080319699, 3980200285, 1516323641, 1169578821, 2585305656, 1638623928, 2071984054, 1179146259, 3142029384, 2910525849, 430984842, 1809790632, 1593515823, 2878348267, 4018175470, 1966255236, 1939592619, 2197525510, 4123890540, 4027942930, 2056710998, 1057194760, 3276845032, 618524839, 912386042, 1369305871, 4213981309, 4157357229, 1998049094, 4068346859, 283997778, 433297801, 2185564962, 2668307743, 3547263851, 2971812172, 145864931, 38002940, 2929551979, 2152716980, 2278120571, 1172785191, 1888308402, 930353176, 3711016582, 2308015795, 2305204206, 4068791645, 2473454079, 2501692185, 3674392733, 2375917712, 2557427355, 1990988406, 2226078296, 600963582, 347505141, 705969876, 3222111902, 237273550, 472225245, 1376144940, 3812100488, 4130033222, 1834636053, 2200817839, 3623132254, 2048566977, 872938564, 157673410, 2667298410, 1593933448, 2550146443, 3424352086, 3520633431, 3318249052, 1535053463, 1320135181, 1072090846, 3748951794, 3105511402, 2155614440, 3343066249, 1664809838, 2354003702, 577588884, 2764537545, 4260035710, 160815645, 3551374291, 2754442860, 1118743534, 1286742203, 3375424472, 1193358286, 1523416396, 2286745682, 3818424205, 3229692865, 1250603769, 3376938675, 1934656537, 3002173085, 1421535763, 2329166244, 1539829771, 3071809424, 3722361831, 1807071764, 2928747228, 3466233204, 1681608616, 1707233748, 532399055, 1655975870, 2192615935, 1181907517, 502315677, 195435504, 1068351185, 4253522108, 401515526, 2322634116, 3817476766, 2545684199, 367003362, 939004561, 1720493014, 3282529078, 916836710, 3271777100, 1051347323, 903520982, 1843390427, 903860254, 3163311743, 1498324049, 1602796155, 3993830274, 2222947632, 1594870809, 2262149984, 706505490, 1878448793, 297783572, 1922520975, 1809817994, 3378836142, 4283471362, 724529390, 3871255903, 2675377541, 625442236, 1396594762, 584050984, 3160502847, 3713812500, 3070779976, 2415860718, 2087253424, 2150659256, 2846376499, 642246206, 954003700, 790693801, 2852862948, 2069560311, 2716657131, 1777996881, 23021516, 394280992, 151827274, 554425914, 3093163480, 500362788, 4063471109, 1518232184, 3051194338, 1564237119, 1784240953, 1728907606, 2423906971, 3245861425, 1403272208, 705601793, 809561192, 2967681376, 1107800719, 3654973939, 3529963233, 1141430012, 171161121, 1222606508, 3325794587, 2933848069, 3319288855, 4076047601, 1422688234, 750895463, 723415161, 4110917996, 172378373, 614310717, 464190258, 2719742080, 2882190533, 260241577, 872187166, 51392255, 690678529, 1032247122, 177848862, 2631860912, 3876348701, 3971628423, 1411241180, 1525225113, 3429234786, 2902950094, 3480849833, 1067421076, 4184135694, 2905699039, 3922251469, 556665325, 1008854626, 1749376673, 1706526652, 1670818738, 1459937672, 1236710049, 2044381071, 28380869, 1088464802, 2500621248, 3319166637, 303350363, 4233871691, 462899686, 1864082083, 1633855571, 3234480516, 2411053733, 3986263103, 1992510755, 1986246923, 1418621100, 3772785621, 3118288321, 3069082678, 3575509950, 2661593874, 189268839, 1690530432, 1411957573, 4198485847, 1214217760, 4032838120, 647907711, 4245255521, 1940716058, 242619953, 2097141622, 1218025765, 1007790786, 3748834757, 8175890, 2456318442, 219038421, 4142868721, 2303296422, 465336410, 237135465, 2525403966, 2972194247, 672480967, 2623034704, 1120730289, 1018451191, 1318162784, 2171567834, 1931677349, 1300941830, 1091032044, 344455379, 3648398142, 1660289918, 1476172654, 1382274791, 376429449, 3753352837, 884844415, 3994051274, 3011131147, 3092988955, 1358346546, 3519843272, 3978487789, 3830946161, 1625675712, 3511881408, 2031293928, 2203163940, 3362955715, 4279271535, 4220311393, 2051555050, 996884877, 1530801618, 3353569995, 1741998127, 728272117, 724195433], "pos": 5}, "exits": {}, "cancels": {}, "failures": {}, "trials_closed": {}, "trial_progress": {"4244f6bb-a0b0-4876-9e75-819b7cbdcd95": 0}, "trials_created": {"4244f6bb-a0b0-4876-9e75-819b7cbdcd95": true}, "trials_requested": 1, "search_method_state": {"created_trials": 1, "pending_trials": 1, "search_method_type": "single"}}, "trial_searcher_state": {"4244f6bb-a0b0-4876-9e75-819b7cbdcd95": {"Closed": false, "Create": {"hparams": {"dropout1": 0.25, "dropout2": 0.5, "n_filters1": 32, "n_filters2": 64, "learning_rate": 1}, "request_id": "4244f6bb-a0b0-4876-9e75-819b7cbdcd95", "trial_seed": 1557607182}, "EarlyStoppedBySearcher": false}}}`), }, { name: "asha", @@ -58,22 +101,20 @@ func TestDeserExperimentSnapshotIntoCurrent(t *testing.T) { asha := expconf.SearcherConfig{ //nolint:exhaustruct RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(4), - RawStopOnce: ptrs.Ptr(false), - RawMaxLength: &expconf.Length{ - Unit: expconf.Batches, - Units: 937, - }, - RawDivisor: ptrs.Ptr[float64](4), + RawNumRungs: ptrs.Ptr(4), + RawMaxTime: ptrs.Ptr(937), + RawTimeMetric: ptrs.Ptr("batches"), + RawDivisor: ptrs.Ptr[float64](4), }, RawSmallerIsBetter: ptrs.Ptr(true), + RawMetric: ptrs.Ptr("loss"), } sm := searcher.NewSearchMethod(asha) e.searcher = searcher.NewSearcher(0, sm, expconf.Hyperparameters{}) return e }, //nolint:lll - snapshot: []byte(`{"searcher_state": {"rand": {"key": [1858898874, 3136713915, 1245759550, 1290970761, 517441830, 3965724506, 3061357240, 170072766, 1693351111, 4075410292, 78151388, 3493175442, 451004311, 1812236155, 355118118, 2341554586, 3606578038, 1939667144, 2365456278, 4240753950, 3356447601, 2335017104, 2040721097, 3800998272, 2728642800, 2131115629, 492734985, 2819783747, 3003215375, 4204037864, 4126695697, 549891058, 734125689, 31409235, 985387360, 3038862999, 954240667, 2621873052, 1848091170, 133174459, 3856584872, 124845556, 460434664, 46791082, 4152381650, 4173967752, 1247237436, 174835189, 1742324874, 2007241764, 1640712598, 2310183041, 3511885426, 578000042, 706952488, 3805905197, 1542555822, 1232482704, 113479587, 2075606872, 1810250676, 4154209381, 4104047634, 2798916177, 1973933529, 2923443846, 448405122, 3166808065, 2849599398, 468126651, 2661086816, 1991933754, 682920740, 2267700733, 4109317397, 1130169565, 3047640000, 3252889878, 3054398763, 2806904880, 2855243624, 3038966390, 1241065902, 2729169001, 815645434, 1162355224, 704271692, 536316416, 2670268274, 4163301069, 4085384831, 291065618, 1546534018, 1328639211, 2136729346, 1649093914, 1950870460, 3051014222, 4026077910, 2922618107, 2381221227, 1814305839, 2087985637, 4161848789, 128854472, 2943029177, 728532032, 3490598714, 669817953, 2440038690, 3555401139, 2712280152, 384719815, 2442045992, 613477876, 1377552755, 2711705298, 3724688321, 4067433634, 1545601253, 646274014, 1377898108, 240985165, 371546231, 3046184253, 2117921649, 2247989848, 2061520991, 956268219, 97033364, 175144327, 1353593441, 1476979375, 454979253, 762796608, 2575191972, 107577675, 1028450605, 1873422748, 2542366410, 1866320548, 3589705747, 345592247, 2892036283, 3170978743, 3572903695, 3028956090, 2207819198, 1950852740, 1313260327, 3971819579, 1504837033, 4070108073, 359514223, 1902603031, 3271335576, 3157069217, 2191931698, 1256929557, 421027589, 4212835066, 4062519531, 296513181, 2106428114, 549774238, 393306693, 1174412267, 3955316363, 2441986612, 1523312170, 982121345, 1785954095, 4080295649, 299131628, 393188011, 3374589678, 4024606822, 1686014117, 1197296932, 2797619434, 3649470375, 2716003058, 86300908, 3697562572, 3237922847, 1160822791, 3374522836, 3979525117, 2212718065, 1148293750, 1919573177, 3469185829, 1712413795, 380808588, 471126594, 948789273, 3532936578, 296952917, 2753628341, 2057043750, 920211988, 600572981, 2774709890, 1819324959, 2259319642, 574572799, 3073898101, 3230354882, 2678617999, 3641549837, 2132486047, 2765479196, 1727422873, 3997112925, 471821958, 92070175, 619429912, 1550462124, 2347682773, 1567881080, 1842852436, 3821419603, 3591165196, 2535124603, 3618924873, 2628843537, 1170033179, 348211080, 3822572799, 749527186, 1398111115, 727305496, 3543922887, 1648448468, 917342585, 3626786227, 795087139, 3407120437, 3355836138, 1410515106, 2720308312, 3240564741, 3959711847, 1124409684, 552560209, 3461944805, 678032564, 1103992569, 2470254354, 1641770510, 1556963167, 2379222670, 442642977, 2742252027, 1950349383, 2063177700, 2732950260, 4185258652, 2168049423, 1082372904, 1362620822, 1741310903, 901367838, 3508554445, 1348790639, 2317903621, 3373951142, 1337343925, 3840044638, 1485094307, 4248249804, 4093032023, 2136011, 1334492457, 2503063800, 2538115118, 2466171479, 1639514097, 464469616, 1764593097, 4213907472, 3313535300, 1076926430, 1725535044, 1011006056, 3988586498, 2745469741, 2906100946, 3576331813, 82093349, 429491095, 2114758070, 933184772, 3917920972, 1890858429, 531920684, 2456575097, 420691463, 748296319, 1079814478, 4024156541, 813238500, 1077678765, 2465759496, 3962103589, 2065972465, 3456128976, 2094509478, 2645396852, 2925520141, 1161978458, 2035040231, 4099469514, 1972456981, 3786725514, 3058419285, 3818057337, 2430215031, 1937931725, 2515478709, 1847103536, 4155632999, 1328666540, 4158737985, 2754971121, 2211399759, 2853435464, 3261493685, 4150017738, 3342340355, 775224247, 2961220606, 614027509, 3160064455, 3414222376, 2091154502, 280950518, 925950753, 566408845, 2596638294, 3135099147, 2706786311, 1388405449, 2816679388, 1623101484, 3178371694, 3291179795, 4116991785, 67859698, 845643000, 760347068, 1455100406, 2912358999, 2105127, 702301878, 1202736257, 1342813496, 575012872, 1865672624, 2657430022, 644622144, 2333997711, 1488359185, 4066857739, 3973656318, 2828413897, 3450795915, 1884785401, 1930824357, 1051770001, 3572092020, 1862280154, 3461196456, 3800146563, 1633638066, 1452346239, 534900790, 3121061430, 2916315663, 4255721426, 2887119093, 1871569903, 1332276432, 654698363, 3249099829, 863175434, 136189354, 3475430455, 2548971290, 2855268040, 3442424632, 804140083, 3514822970, 3941128355, 1313049612, 2892025674, 704113086, 2375636355, 3010471523, 1804040519, 682699732, 3588164492, 2899686231, 1835583680, 1773430431, 1098795657, 593519929, 125730791, 3274894119, 3824589328, 378493220, 1626526963, 3831253813, 3392887684, 1584863613, 3559778327, 2663823706, 3923032836, 3600949771, 1780734363, 3234463836, 3308378262, 1986979169, 2249473811, 2903716227, 3677580360, 1437072767, 3381143691, 3635683729, 3252548987, 1423467992, 1159796525, 126415660, 1073122400, 4213681404, 1155308855, 2805178822, 2953363327, 2150137973, 3240821181, 1698262113, 3278041312, 1513835831, 594252990, 2719832498, 2171241681, 3185876351, 1036634921, 1136285885, 4293927994, 2470722457, 4240063557, 2637317952, 161087848, 4147589514, 3912003562, 3965637509, 2793578416, 2291662622, 3749525828, 4282881950, 3280195163, 484269631, 2746175909, 3446976909, 2867607820, 395936285, 3321864120, 4273485048, 1086468822, 2838328381, 1644558158, 1834777629, 483686628, 1256155081, 2330382284, 2755082552, 4194834958, 391405988, 3209673909, 1870065414, 3052141802, 775165415, 4149272392, 194931648, 2367265709, 3891336490, 1229306547, 3012235584, 3643629589, 832189420, 469287166, 1525326108, 267712853, 410832606, 3637702001, 1293947797, 2676100704, 3127780282, 1522722013, 2987243003, 4223119695, 2471565775, 3741486091, 2517288835, 1421919913, 2170944291, 3677925623, 2433847083, 2055300628, 1274730272, 4194354236, 3445728648, 1457079160, 530533758, 2650792665, 3386458153, 2521874364, 1903579212, 761566114, 1632275601, 3215030020, 14846682, 3063448941, 726016154, 2228712970, 4195077512, 4196716184, 2434034522, 1909349859, 3301955567, 2777200877, 4292042460, 1199269432, 685902762, 2499240636, 1122335115, 439154079, 4168729086, 496834902, 2182051026, 4131884045, 1839561063, 39520120, 866177038, 827878713, 1764316880, 206451689, 2373512346, 2172390722, 3933252186, 3127637834, 2071541478, 3960855872, 1444619351, 1938511308, 3721638501, 1259236365, 4226881135, 610757816, 838627681, 1588715647, 1972104498, 2054289333, 419545885, 2474876715, 1254095866, 634279673, 3761069612, 1633198557, 2273078632, 3566317607, 1787529366, 1415431672, 3275737983, 2504574445, 430721643, 2335224241, 4010159314, 3152956030, 3456999186, 3382584293, 2802928282, 1378465088, 4251009334, 2588165208, 243375617, 3821815786, 4098223378, 4161610756, 1935733261, 2023780182, 3371959456, 2139155484, 2612371408, 338927672, 147433055, 1797581704, 3653488639, 2425792923, 888477626, 3057409903, 1694686933, 4004894142, 1992613109, 370443325, 227467078, 3544764567, 491152413, 2983604173, 2939234591, 157854636, 464880009, 2362768353, 2772766616, 932280116, 1106584051, 2213427382, 2869551831, 1522462666, 2481374380, 2796644796, 753754775, 1586605155], "pos": 112}, "exits": {}, "failures": {}, "shutdown": false, "trials_closed": {}, "trial_progress": {"3a77d780-1fb2-4af0-ae41-180c346cfcf8": 0}, "trials_created": {"3a77d780-1fb2-4af0-ae41-180c346cfcf8": true}, "trials_requested": 16, "search_method_state": {"trial_table": {"1648b3b2-74e9-439f-8e94-bfae278ea93d": 1, "19e57eb7-eb24-46fa-b740-21caab57a9d1": 1, "2bd1e7ff-5103-41df-9fa3-1ff4fc7acc14": 0, "306cd910-0605-4c85-84f3-5e6757ea1d01": 1, "3a77d780-1fb2-4af0-ae41-180c346cfcf8": 1, "45e6cca0-42a6-44be-8b58-88b20b00357e": 0, "65b30b87-e141-41fe-8816-7e1ee1a0ff36": 0, "69129b1e-843a-4879-8d8a-d0d02b696649": 0, "b383f52f-10be-4c55-adb7-2d0f75d6686d": 0, "beda8c08-e5b9-4861-b39c-c4e866297709": 0, "bf2b30d7-301f-48bb-8b35-a20b341291cb": 1, "cea43969-c629-4d82-830f-dcb47319e025": 1, "d8342b8c-3925-4ae8-b142-0b552b98223d": 1, "eee2da18-1bd9-449e-b247-906917d06878": 0, "fad2b882-e6cd-4f57-b285-613e3e699933": 0, "fafa3fd7-6bf5-447f-8ef8-f5001060b767": 1}, "sub_search_states": [{"rungs": [{"metrics": null, "start_trials": 0, "units_needed": 40, "promote_trials": 0, "outstanding_trials": 0}, {"metrics": null, "start_trials": 0, "units_needed": 200, "promote_trials": 0, "outstanding_trials": 0}, {"metrics": null, "start_trials": 0, "units_needed": 840, "promote_trials": 0, "outstanding_trials": 0}], "trial_rungs": {"2bd1e7ff-5103-41df-9fa3-1ff4fc7acc14": 0, "45e6cca0-42a6-44be-8b58-88b20b00357e": 0, "65b30b87-e141-41fe-8816-7e1ee1a0ff36": 0, "69129b1e-843a-4879-8d8a-d0d02b696649": 0, "b383f52f-10be-4c55-adb7-2d0f75d6686d": 0, "beda8c08-e5b9-4861-b39c-c4e866297709": 0, "eee2da18-1bd9-449e-b247-906917d06878": 0, "fad2b882-e6cd-4f57-b285-613e3e699933": 0}, "closed_trials": {}, "invalid_trials": 0, "pending_trials": 8, "trials_completed": 0, "early_exit_trials": {}, "search_method_type": "asha"}, {"rungs": [{"metrics": null, "start_trials": 0, "units_needed": 160, "promote_trials": 0, "outstanding_trials": 1}, {"metrics": null, "start_trials": 0, "units_needed": 800, "promote_trials": 0, "outstanding_trials": 0}], "trial_rungs": {"1648b3b2-74e9-439f-8e94-bfae278ea93d": 0, "19e57eb7-eb24-46fa-b740-21caab57a9d1": 0, "306cd910-0605-4c85-84f3-5e6757ea1d01": 0, "3a77d780-1fb2-4af0-ae41-180c346cfcf8": 0, "bf2b30d7-301f-48bb-8b35-a20b341291cb": 0, "cea43969-c629-4d82-830f-dcb47319e025": 0, "d8342b8c-3925-4ae8-b142-0b552b98223d": 0, "fafa3fd7-6bf5-447f-8ef8-f5001060b767": 0}, "closed_trials": {}, "invalid_trials": 0, "pending_trials": 8, "trials_completed": 0, "early_exit_trials": {}, "search_method_type": "asha"}], "search_method_type": "adaptive_asha", "sub_search_units_completed": [0, 0]}, "completed_operations": {}}, "trial_searcher_state": {"1648b3b2-74e9-439f-8e94-bfae278ea93d": {"Op": {"Length": 160, "RequestID": "1648b3b2-74e9-439f-8e94-bfae278ea93d"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.5750164976379073, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "1648b3b2-74e9-439f-8e94-bfae278ea93d", "trial_seed": 2143610236, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "19e57eb7-eb24-46fa-b740-21caab57a9d1": {"Op": {"Length": 160, "RequestID": "19e57eb7-eb24-46fa-b740-21caab57a9d1"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.5816375181302468, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "19e57eb7-eb24-46fa-b740-21caab57a9d1", "trial_seed": 421951454, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "2bd1e7ff-5103-41df-9fa3-1ff4fc7acc14": {"Op": {"Length": 40, "RequestID": "2bd1e7ff-5103-41df-9fa3-1ff4fc7acc14"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.7684118342109852, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "2bd1e7ff-5103-41df-9fa3-1ff4fc7acc14", "trial_seed": 212852662, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "306cd910-0605-4c85-84f3-5e6757ea1d01": {"Op": {"Length": 160, "RequestID": "306cd910-0605-4c85-84f3-5e6757ea1d01"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.8331292167743722, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "306cd910-0605-4c85-84f3-5e6757ea1d01", "trial_seed": 1609725763, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "3a77d780-1fb2-4af0-ae41-180c346cfcf8": {"Op": {"Length": 160, "RequestID": "3a77d780-1fb2-4af0-ae41-180c346cfcf8"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.8471874828144244, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "3a77d780-1fb2-4af0-ae41-180c346cfcf8", "trial_seed": 2105514700, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "45e6cca0-42a6-44be-8b58-88b20b00357e": {"Op": {"Length": 40, "RequestID": "45e6cca0-42a6-44be-8b58-88b20b00357e"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.7217543249722611, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "45e6cca0-42a6-44be-8b58-88b20b00357e", "trial_seed": 1245324437, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "65b30b87-e141-41fe-8816-7e1ee1a0ff36": {"Op": {"Length": 40, "RequestID": "65b30b87-e141-41fe-8816-7e1ee1a0ff36"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.8213712160318751, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "65b30b87-e141-41fe-8816-7e1ee1a0ff36", "trial_seed": 599927259, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "69129b1e-843a-4879-8d8a-d0d02b696649": {"Op": {"Length": 40, "RequestID": "69129b1e-843a-4879-8d8a-d0d02b696649"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.8661962084783181, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "69129b1e-843a-4879-8d8a-d0d02b696649", "trial_seed": 1023174740, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "b383f52f-10be-4c55-adb7-2d0f75d6686d": {"Op": {"Length": 40, "RequestID": "b383f52f-10be-4c55-adb7-2d0f75d6686d"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.5359870317307868, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "b383f52f-10be-4c55-adb7-2d0f75d6686d", "trial_seed": 1099784968, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "beda8c08-e5b9-4861-b39c-c4e866297709": {"Op": {"Length": 40, "RequestID": "beda8c08-e5b9-4861-b39c-c4e866297709"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.7829296920408424, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "beda8c08-e5b9-4861-b39c-c4e866297709", "trial_seed": 1740151796, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "bf2b30d7-301f-48bb-8b35-a20b341291cb": {"Op": {"Length": 160, "RequestID": "bf2b30d7-301f-48bb-8b35-a20b341291cb"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.6767256393511032, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "bf2b30d7-301f-48bb-8b35-a20b341291cb", "trial_seed": 981345028, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "cea43969-c629-4d82-830f-dcb47319e025": {"Op": {"Length": 160, "RequestID": "cea43969-c629-4d82-830f-dcb47319e025"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.854520819444287, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "cea43969-c629-4d82-830f-dcb47319e025", "trial_seed": 575167432, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "d8342b8c-3925-4ae8-b142-0b552b98223d": {"Op": {"Length": 160, "RequestID": "d8342b8c-3925-4ae8-b142-0b552b98223d"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.7231724660254734, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "d8342b8c-3925-4ae8-b142-0b552b98223d", "trial_seed": 2032674049, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "eee2da18-1bd9-449e-b247-906917d06878": {"Op": {"Length": 40, "RequestID": "eee2da18-1bd9-449e-b247-906917d06878"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.8005169955058526, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "eee2da18-1bd9-449e-b247-906917d06878", "trial_seed": 1209630132, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "fad2b882-e6cd-4f57-b285-613e3e699933": {"Op": {"Length": 40, "RequestID": "fad2b882-e6cd-4f57-b285-613e3e699933"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.6903862897512029, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "fad2b882-e6cd-4f57-b285-613e3e699933", "trial_seed": 86866247, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}, "fafa3fd7-6bf5-447f-8ef8-f5001060b767": {"Op": {"Length": 160, "RequestID": "fafa3fd7-6bf5-447f-8ef8-f5001060b767"}, "Closed": false, "Create": {"hparams": {"metrics_base": 0.5785735939157665, "metrics_sigma": 0, "global_batch_size": 32, "metrics_progression": "decreasing"}, "checkpoint": null, "request_id": "fafa3fd7-6bf5-447f-8ef8-f5001060b767", "trial_seed": 1213847999, "workload_sequencer_type": "TRIAL_WORKLOAD_SEQUENCER"}, "Complete": false}}}`), + snapshot: []byte(`{"searcher_state": {"rand": {"key": [3912824393, 130359580, 1945038949, 683827302, 3610818264, 2838364317, 4181320722, 221936505, 3819130084, 2131487376, 3365651765, 920499941, 1270817540, 2246276083, 1885603276, 573420793, 583261746, 1955039589, 1811914457, 2837955835, 2508148103, 3642464710, 3458020788, 2195814166, 1386387121, 1852638509, 3909111177, 1735517492, 3892314499, 3707856689, 879481158, 1802646466, 116991403, 298788384, 1221574842, 3804792269, 2328567293, 3014632505, 2320044096, 1413171799, 1368251971, 4083772998, 2986640645, 1030832729, 2241679027, 2849293624, 1296881709, 2785559672, 1135156955, 2796434558, 1925391449, 1829990763, 3217631629, 3067008047, 3612907438, 1326801960, 2558425453, 4068998963, 3070803605, 2403866132, 3753353239, 3296906854, 464488764, 785445029, 141537657, 2465881066, 3135233249, 4043279941, 1278274609, 2486847651, 3954374223, 129103232, 1720962446, 3816310415, 1806398817, 1250007987, 969936705, 2336561042, 2031384508, 1285947737, 39769194, 1138144666, 993968588, 101542063, 3128650165, 2003415882, 140441857, 3432886469, 3489699300, 575264191, 3842163036, 2887600812, 2487983973, 1955108072, 1173170507, 4219701607, 1171912093, 2695607515, 1710258012, 2435659755, 2071371892, 3067907555, 544251540, 2010934296, 3117136901, 4036472942, 3059696740, 3788372660, 566955155, 358758290, 2882442037, 4169179923, 1160213813, 387790744, 594608752, 3632049166, 3841361487, 1667303281, 1460402258, 2438875135, 4278318681, 2281109706, 221829418, 3933060752, 4221766281, 3185559353, 70745549, 224504629, 2249432201, 156645497, 1758678503, 3375329816, 4241049874, 3873245768, 19688418, 1201216527, 3912743911, 216273652, 1882335310, 2852029249, 3415491706, 913228854, 2437734945, 3245489646, 1027437138, 1302726420, 1927993221, 118233091, 2085121918, 3536455915, 1939892139, 4010137323, 2303981927, 3716018075, 2265312706, 2949632039, 2447406304, 624960780, 4071396684, 3488406087, 3938075266, 757291956, 582212968, 3048403818, 2464054892, 4190155310, 292733183, 3094168255, 3626519501, 1066765321, 2996573857, 1225379640, 3774880867, 758941699, 116163606, 3942208179, 1042100701, 461769728, 3164917034, 1857854599, 2167218317, 4253533681, 3818830317, 3399752715, 2419846770, 4069369592, 2150336629, 1810772325, 3026418855, 4177626623, 4092551316, 3523400346, 4234812158, 713640060, 2681330789, 1467890933, 2993052514, 3162989269, 113784382, 3852222819, 4292344413, 1633710857, 3912716682, 6098202, 2978849649, 4160324727, 2926842096, 1514591911, 1081000496, 372322291, 3857309830, 4178509955, 669675724, 1711300651, 3716229730, 143240009, 4059287817, 3731622530, 496463408, 4088097703, 1794430305, 3973039871, 2939992759, 2712680772, 3534376933, 2786410924, 278436436, 3437770869, 2024532266, 2579067234, 4007664809, 664954588, 1789677620, 1276521848, 3683816415, 1548063198, 4095783552, 1459425342, 1799248342, 1609271699, 1512067210, 3465440954, 4269839847, 4233980673, 375224779, 3138146110, 3370149200, 579857917, 760314921, 3775887833, 4176789722, 2301024383, 1686052811, 2967171371, 4180069250, 1516946627, 705831480, 1611848722, 2806858519, 3504667135, 764796204, 4065414292, 2092577162, 1913641905, 2109472504, 1540233965, 1722162277, 3692095086, 2929243742, 3283756641, 1377766218, 699611861, 1212571847, 78849955, 698623272, 2796609094, 241440821, 426090509, 1958846217, 2444318395, 3236802781, 133530479, 1092024126, 4072615628, 2198341714, 282741196, 1398198553, 242935369, 2651474853, 677947580, 1708783244, 1906140963, 3673969094, 2279101198, 3916495828, 1917458424, 2415715383, 2959221265, 2938458868, 1115625347, 2902621834, 1038437194, 3503923682, 2953499342, 3582273746, 325962114, 707955326, 3027365402, 4165229536, 1899485827, 3813891089, 2681883220, 1184425310, 2323719917, 2457851599, 2520494097, 3105387047, 1535476439, 1564705883, 3867748520, 1195731676, 2921591976, 333612810, 1635420993, 4259291997, 1241352669, 3675691581, 352453891, 2248815017, 3137177282, 729048856, 3439156494, 4008821214, 4014395416, 440152211, 768552979, 3657002944, 2120438653, 4230634748, 1758565824, 782079134, 3695862927, 394672225, 1006358179, 183399528, 2883538266, 1469129531, 320543524, 892791693, 870595213, 3437448149, 808212320, 3050276488, 492820811, 4000264990, 3105300607, 133021706, 1603329269, 4075016600, 1820213035, 2998065090, 1632804974, 675976454, 1681042893, 1653548377, 3253586235, 1201835952, 2918720057, 1931586371, 3328503644, 403841940, 2742827784, 586210709, 3159629495, 246459628, 1721247097, 1312377931, 3239372286, 1679600923, 794123331, 1817944193, 3905102033, 3378552747, 2071157036, 2394010092, 2765024891, 966846871, 2805363146, 2459053889, 618201661, 1749046098, 568312106, 484146509, 541311246, 3718232983, 326564023, 284954267, 538365293, 1950605761, 943434222, 1820312121, 121100221, 2064278572, 2697100734, 102308777, 3114797650, 2729269456, 537270132, 1206836708, 2583134729, 4017452671, 1912421380, 1901938780, 2087021833, 3135764995, 1186775394, 26323543, 2703782091, 30908834, 901812067, 2118851464, 3029690482, 375825601, 2213919290, 2396825578, 3057698947, 2058071747, 1632052001, 544954234, 2757964379, 4281338914, 2452188298, 2530548058, 2140337096, 8135661, 1073358913, 1887116366, 1039964896, 3596599560, 3114419318, 1914007107, 3160591144, 554429067, 857043881, 3862692398, 2322654082, 4293541172, 703438619, 1995234082, 1658759338, 3008231258, 2598610424, 1965795485, 3566144875, 2921648686, 3345004424, 2078323309, 3324845404, 1698658304, 455090979, 361487935, 3873466677, 1296591922, 3439118724, 2030854673, 4221505583, 529693036, 1194187791, 2108178438, 3512528157, 3889045825, 1912433754, 3786020945, 3365110760, 4106573256, 3223175585, 1666849351, 1260427075, 2012436050, 1441286049, 3811351537, 3360856433, 260097501, 632249840, 3297189399, 4276078413, 200516346, 3427560446, 1180083550, 570419283, 3289677820, 557135629, 3537527213, 3760168670, 3350252912, 2643371920, 3193156919, 4182398732, 3395828475, 495148909, 3660199181, 3822738986, 2696324761, 1126852263, 2413756996, 2224145812, 763779427, 4236225820, 1512096030, 936890385, 3871755505, 3056164931, 1971858895, 2437295547, 1083615465, 2711940487, 1939973176, 611444976, 2577021608, 2690806091, 4001225725, 1295618973, 2739332287, 1543112445, 3309369740, 1403192430, 2634062471, 472690292, 2308009112, 2156438823, 568667603, 1171167051, 551717849, 2679282693, 1893880801, 1266209741, 2206656951, 3095140942, 3825923, 3559702505, 3008679460, 554453022, 395553371, 1655473374, 828559601, 4044140613, 1728590401, 3047261812, 1003908978, 2447662187, 1442086653, 1489454960, 2524559089, 2050535748, 3390209316, 1931858035, 720671506, 3793532296, 2486505886, 3776873526, 1029777346, 3472059923, 2093494001, 4001189252, 1295318492, 256747214, 2561538344, 820561233, 1492703895, 4281534291, 2679759074, 1296226481, 2068854739, 4204858459, 3826654958, 814564580, 2703682783, 511237125, 1886845754, 4054856321, 2444144699, 95504058, 685255946, 4196035992, 4009208239, 2844476321, 3882335574, 1524669498, 3071049109, 3939141547, 53659124, 2986167924, 4062365550, 3944273163, 858877051, 3811779921, 2800310021, 3471182814, 3978499914, 184095907, 3143372954, 978190594, 428108114, 3979094339, 504541629, 3012747542, 1929522274, 641465681, 389762475, 3863437281, 131374935, 695264856, 934006733, 4014903973, 2845408941, 2293374102, 3231336512, 516967894, 51360470, 3991740459, 2740043234, 2010491456, 3737653932, 4251501920], "pos": 142}, "exits": {}, "cancels": {}, "failures": {}, "trials_closed": {"1241288f-ef58-4d42-9287-31cfa20244c5": true, "5d32d462-b831-4437-84d5-9bf8b820e09e": true, "5d804239-7e15-49e3-b710-fd7c24509d44": true, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": true, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": true, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": true, "a3e23956-04ee-489d-9135-7186a7941d28": true, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": true, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": true, "d882fdea-d2be-453d-bb93-831af2dc317b": true}, "trial_progress": {"1241288f-ef58-4d42-9287-31cfa20244c5": 1, "5d32d462-b831-4437-84d5-9bf8b820e09e": 0.3333333333333333, "5d804239-7e15-49e3-b710-fd7c24509d44": 1, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": 1, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": 0.3333333333333333, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": 1, "a3e23956-04ee-489d-9135-7186a7941d28": 0.3333333333333333, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": 1, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": 0.3333333333333333, "d882fdea-d2be-453d-bb93-831af2dc317b": 1}, "trials_created": {"1241288f-ef58-4d42-9287-31cfa20244c5": true, "5d32d462-b831-4437-84d5-9bf8b820e09e": true, "5d804239-7e15-49e3-b710-fd7c24509d44": true, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": true, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": true, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": true, "a3e23956-04ee-489d-9135-7186a7941d28": true, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": true, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": true, "d882fdea-d2be-453d-bb93-831af2dc317b": true}, "trials_requested": 10, "search_method_state": {"trial_table": {"1241288f-ef58-4d42-9287-31cfa20244c5": 1, "5d32d462-b831-4437-84d5-9bf8b820e09e": 0, "5d804239-7e15-49e3-b710-fd7c24509d44": 1, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": 1, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": 0, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": 0, "a3e23956-04ee-489d-9135-7186a7941d28": 0, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": 0, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": 0, "d882fdea-d2be-453d-bb93-831af2dc317b": 0}, "sub_search_states": [{"rungs": [{"metrics": [{"metric": 0.09292137346198563, "request_id": "d882fdea-d2be-453d-bb93-831af2dc317b"}, {"metric": 0.14394278251002454, "request_id": "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec"}, {"metric": 0.169617546004522, "request_id": "98a8c8cd-2aaf-4fbe-a358-7735337e11cd"}, {"metric": 0.17236693170526698, "request_id": "a3e23956-04ee-489d-9135-7186a7941d28"}, {"metric": 0.1814434532918463, "request_id": "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8"}, {"metric": 0.19748935120026018, "request_id": "5d32d462-b831-4437-84d5-9bf8b820e09e"}, {"metric": 0.21989905646153887, "request_id": "872fb3e1-39b9-40f8-b5ce-12ca53c225ed"}], "units_needed": 225}, {"metrics": [{"metric": 0.05633601378523418, "request_id": "d882fdea-d2be-453d-bb93-831af2dc317b"}, {"metric": 0.09834996045635314, "request_id": "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8"}, {"metric": 0.10896268058612729, "request_id": "98a8c8cd-2aaf-4fbe-a358-7735337e11cd"}], "units_needed": 900}], "trial_rungs": {"5d32d462-b831-4437-84d5-9bf8b820e09e": 0, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": 0, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": 1, "a3e23956-04ee-489d-9135-7186a7941d28": 0, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": 1, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": 0, "d882fdea-d2be-453d-bb93-831af2dc317b": 1}, "invalid_trials": 0, "trials_completed": 7, "early_exit_trials": {}, "search_method_type": "asha"}, {"rungs": [{"metrics": [{"metric": 0.05686319968148741, "request_id": "763e2853-d3ec-4ea1-a325-050f5aef5b1a"}, {"metric": 0.09348985412422045, "request_id": "1241288f-ef58-4d42-9287-31cfa20244c5"}, {"metric": 0.21061281618442695, "request_id": "5d804239-7e15-49e3-b710-fd7c24509d44"}], "units_needed": 900}], "trial_rungs": {"1241288f-ef58-4d42-9287-31cfa20244c5": 0, "5d804239-7e15-49e3-b710-fd7c24509d44": 0, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": 0}, "invalid_trials": 0, "trials_completed": 3, "early_exit_trials": {}, "search_method_type": "asha"}], "search_method_type": "adaptive_asha"}}, "trial_searcher_state": {"1241288f-ef58-4d42-9287-31cfa20244c5": {"Closed": false, "Create": {"hparams": {"dropout1": 0.7856465654579918, "dropout2": 0.33680938844866426, "n_filters1": 28, "n_filters2": 40, "learning_rate": 0.33873975920890426}, "request_id": "1241288f-ef58-4d42-9287-31cfa20244c5", "trial_seed": 1053878338}, "EarlyStoppedBySearcher": true}, "5d32d462-b831-4437-84d5-9bf8b820e09e": {"Closed": false, "Create": {"hparams": {"dropout1": 0.3005242490944792, "dropout2": 0.39344632915675276, "n_filters1": 44, "n_filters2": 9, "learning_rate": 0.22728733457505207}, "request_id": "5d32d462-b831-4437-84d5-9bf8b820e09e", "trial_seed": 40569440}, "EarlyStoppedBySearcher": true}, "5d804239-7e15-49e3-b710-fd7c24509d44": {"Closed": false, "Create": {"hparams": {"dropout1": 0.7197975421763473, "dropout2": 0.718622666277326, "n_filters1": 62, "n_filters2": 9, "learning_rate": 0.3138344243067023}, "request_id": "5d804239-7e15-49e3-b710-fd7c24509d44", "trial_seed": 821874082}, "EarlyStoppedBySearcher": true}, "763e2853-d3ec-4ea1-a325-050f5aef5b1a": {"Closed": false, "Create": {"hparams": {"dropout1": 0.3797289112689676, "dropout2": 0.4162215587922132, "n_filters1": 12, "n_filters2": 42, "learning_rate": 0.8267899122382265}, "request_id": "763e2853-d3ec-4ea1-a325-050f5aef5b1a", "trial_seed": 905057022}, "EarlyStoppedBySearcher": true}, "872fb3e1-39b9-40f8-b5ce-12ca53c225ed": {"Closed": false, "Create": {"hparams": {"dropout1": 0.5123726165661315, "dropout2": 0.6988116676979639, "n_filters1": 57, "n_filters2": 41, "learning_rate": 0.14624646818760453}, "request_id": "872fb3e1-39b9-40f8-b5ce-12ca53c225ed", "trial_seed": 1848480811}, "EarlyStoppedBySearcher": true}, "98a8c8cd-2aaf-4fbe-a358-7735337e11cd": {"Closed": false, "Create": {"hparams": {"dropout1": 0.7577371982482018, "dropout2": 0.757670158564443, "n_filters1": 35, "n_filters2": 50, "learning_rate": 0.5384580326825059}, "request_id": "98a8c8cd-2aaf-4fbe-a358-7735337e11cd", "trial_seed": 1457684159}, "EarlyStoppedBySearcher": true}, "a3e23956-04ee-489d-9135-7186a7941d28": {"Closed": false, "Create": {"hparams": {"dropout1": 0.6717156035663113, "dropout2": 0.6826566058616935, "n_filters1": 34, "n_filters2": 38, "learning_rate": 0.36435611193497525}, "request_id": "a3e23956-04ee-489d-9135-7186a7941d28", "trial_seed": 283271754}, "EarlyStoppedBySearcher": true}, "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8": {"Closed": false, "Create": {"hparams": {"dropout1": 0.5394040074405178, "dropout2": 0.5360441307525875, "n_filters1": 22, "n_filters2": 20, "learning_rate": 0.30396393450440096}, "request_id": "b6f8eca1-9c4a-4f9d-9730-ded009bf51d8", "trial_seed": 1659377654}, "EarlyStoppedBySearcher": true}, "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec": {"Closed": false, "Create": {"hparams": {"dropout1": 0.2799191061847552, "dropout2": 0.394202279713878, "n_filters1": 40, "n_filters2": 65, "learning_rate": 0.14238235074491137}, "request_id": "cea8e3d2-d430-4c69-a8c8-e7d2c35dc5ec", "trial_seed": 229268612}, "EarlyStoppedBySearcher": true}, "d882fdea-d2be-453d-bb93-831af2dc317b": {"Closed": false, "Create": {"hparams": {"dropout1": 0.39100440701610784, "dropout2": 0.49850349318825615, "n_filters1": 59, "n_filters2": 71, "learning_rate": 0.33813778901495695}, "request_id": "d882fdea-d2be-453d-bb93-831af2dc317b", "trial_seed": 491875076}, "EarlyStoppedBySearcher": true}}}`), }, } for _, tt := range tests { diff --git a/master/internal/telemetry/telemetry_test.go b/master/internal/telemetry/telemetry_test.go index 3351b178717..552ed2a2f1b 100644 --- a/master/internal/telemetry/telemetry_test.go +++ b/master/internal/telemetry/telemetry_test.go @@ -138,14 +138,11 @@ func initMockedTelemetry(t *testing.T) (*mockClient, *mocks.ResourceManager) { // Helper function for ReportExperimentCreated. func createExpConfig() expconf.ExperimentConfig { - maxLength := expconf.NewLengthInBatches(100) //nolint:exhaustruct activeConfig := expconf.ExperimentConfig{ RawSearcher: &expconf.SearcherConfig{ - RawMetric: ptrs.Ptr("loss"), - RawSingleConfig: &expconf.SingleConfig{ - RawMaxLength: &maxLength, - }, + RawMetric: ptrs.Ptr("loss"), + RawSingleConfig: &expconf.SingleConfig{}, }, RawEntrypoint: &expconf.Entrypoint{RawEntrypoint: "model_def:SomeTrialClass"}, RawHyperparameters: expconf.Hyperparameters{}, diff --git a/master/internal/templates/service_intg_test.go b/master/internal/templates/service_intg_test.go index 137bd03736f..499f2e8728c 100644 --- a/master/internal/templates/service_intg_test.go +++ b/master/internal/templates/service_intg_test.go @@ -70,13 +70,8 @@ func TestUnmarshalTemplateConfig(t *testing.T) { }, }, RawSearcher: &expconf.SearcherConfigV0{ - RawSingleConfig: &expconf.SingleConfigV0{ - RawMaxLength: &expconf.LengthV0{ - Unit: expconf.Batches, - Units: 1, - }, - }, - RawMetric: ptrs.Ptr("loss_of_something"), + RawSingleConfig: &expconf.SingleConfigV0{}, + RawMetric: ptrs.Ptr("loss_of_something"), }, }) err = UnmarshalTemplateConfig(ctx, input.Name, u, &fakeConfig, false) diff --git a/master/internal/trial.go b/master/internal/trial.go index 90711bd73d5..ec29205bef8 100644 --- a/master/internal/trial.go +++ b/master/internal/trial.go @@ -88,7 +88,7 @@ type trial struct { // restarts is a failure count, it increments when the trial fails and we retry it. restarts int // runID is a count of how many times the task container(s) have stopped and restarted, which - // could be due to a failure or due to normal pausing and continuing. When RunID increments, + // could be due to a failure or due to normal pausing and continuing. When TrialID increments, // it effectively invalidates many outstanding messages associated with the previous run. runID int @@ -230,15 +230,21 @@ func (t *trial) PatchSearcherState(req experiment.TrialSearcherState) error { t.searcher = req switch { - case !t.searcher.Complete: - return t.maybeAllocateTask() - case t.searcher.Complete && t.searcher.Closed: + case t.searcher.EarlyStoppedBySearcher: + return t.patchState( + model.StateWithReason{ + State: model.StoppingCompletedState, + InformationalReason: "searcher decided to early stop trial", + }, + ) + case t.searcher.EarlyExitedByUserCode: return t.patchState(model.StateWithReason{ - State: model.StoppingCompletedState, - InformationalReason: "hp search is finished", + State: model.StoppingCanceledState, + InformationalReason: "trial received early exit signal", }) + default: + return t.maybeAllocateTask() } - return nil } func (t *trial) PatchRP(rp string) { @@ -366,19 +372,20 @@ func (t *trial) maybeAllocateTask() error { // Only allocate for active trials, or trials that have been restored and are stopping. // We need to allocate for stopping because we need to reattach the allocation. shouldAllocateState := t.state == model.ActiveState || (t.restored && model.StoppingStates[t.state]) - if t.allocationID != nil || t.searcher.Complete || !shouldAllocateState { + searcherStop := t.searcher.EarlyExitedByUserCode || t.searcher.EarlyStoppedBySearcher + if t.allocationID != nil || searcherStop || !shouldAllocateState { t.syslog.WithFields(logrus.Fields{ - "allocation-id": t.allocationID, - "sercher-complete": t.searcher.Complete, - "trial-state": t.state, - "restored": t.restored, + "allocation-id": t.allocationID, + "trial-early-exited": t.searcher.EarlyExitedByUserCode, + "searcher-early-stopped": t.searcher.EarlyStoppedBySearcher, + "trial-state": t.state, + "restored": t.restored, }).Trace("decided not to allocate trial") return nil } name := fmt.Sprintf("Trial %d (Experiment %d)", t.id, t.experimentID) t.syslog.Info("decided to allocate trial") - blockedNodes, err := logpattern.GetBlockedNodes(context.TODO(), t.taskID) if err != nil { return err @@ -581,7 +588,7 @@ func (t *trial) handleAllocationExit(exit *task.AllocationExited) error { State: model.StoppingToTerminalStates[t.state], InformationalReason: "trial stopped", }) - case t.searcher.Complete && t.searcher.Closed: + case t.searcher.EarlyStoppedBySearcher: if exit.Err != nil { return t.transition(model.StateWithReason{ State: model.ErrorState, diff --git a/master/internal/trial_intg_test.go b/master/internal/trial_intg_test.go index 5681a1065ab..5a7fa0792d5 100644 --- a/master/internal/trial_intg_test.go +++ b/master/internal/trial_intg_test.go @@ -6,7 +6,6 @@ package internal import ( "context" - "crypto/rand" "fmt" "testing" "time" @@ -32,30 +31,22 @@ import ( ) func TestTrial(t *testing.T) { - _, rID, tr, alloc, done := setup(t) - + _, tr, alloc, done := setup(t) + // xxx: fix this test // Pre-scheduled stage. require.NoError(t, tr.PatchState( model.StateWithReason{State: model.ActiveState})) require.NoError(t, tr.PatchSearcherState(experiment.TrialSearcherState{ - Create: searcher.Create{RequestID: rID}, - Op: searcher.ValidateAfter{ - RequestID: rID, - Length: 10, - }, - Complete: false, - Closed: true, + Create: searcher.Create{}, + EarlyStoppedBySearcher: false, + EarlyExitedByUserCode: false, })) // Running stage. require.NoError(t, tr.PatchSearcherState(experiment.TrialSearcherState{ - Create: searcher.Create{RequestID: rID}, - Op: searcher.ValidateAfter{ - RequestID: rID, - Length: 10, - }, - Complete: true, - Closed: true, + Create: searcher.Create{}, + EarlyStoppedBySearcher: true, + EarlyExitedByUserCode: false, })) require.True(t, alloc.AssertExpectations(t)) require.NotNil(t, tr.allocationID) @@ -79,18 +70,14 @@ func TestTrial(t *testing.T) { } func TestTrialRestarts(t *testing.T) { - pgDB, rID, tr, _, done := setup(t) + pgDB, tr, _, done := setup(t) // Pre-scheduled stage. require.NoError(t, tr.PatchState( model.StateWithReason{State: model.ActiveState})) require.NoError(t, tr.PatchSearcherState(experiment.TrialSearcherState{ - Create: searcher.Create{RequestID: rID}, - Op: searcher.ValidateAfter{ - RequestID: rID, - Length: 10, - }, - Complete: false, - Closed: true, + Create: searcher.Create{}, + EarlyStoppedBySearcher: false, + EarlyExitedByUserCode: false, })) for i := 0; i <= tr.config.MaxRestarts(); i++ { @@ -120,7 +107,6 @@ func TestTrialRestarts(t *testing.T) { func setup(t *testing.T) ( *internaldb.PgDB, - model.RequestID, *trial, *allocationmocks.AllocationService, chan bool, @@ -143,9 +129,9 @@ func setup(t *testing.T) ( j := &model.Job{JobID: model.NewJobID(), JobType: model.JobTypeExperiment} require.NoError(t, internaldb.AddJob(j)) + eID := 1 // instantiate the trial - rID := model.NewRequestID(rand.Reader) - taskID := model.TaskID(fmt.Sprintf("%s-%s", model.TaskTypeTrial, rID)) + taskID := model.TaskID(fmt.Sprintf("%d.%s", eID, model.NewTaskID())) done := make(chan bool) // create expconf merged with task container defaults @@ -163,9 +149,9 @@ func setup(t *testing.T) ( taskID, j.JobID, time.Now(), - 1, + eID, model.PausedState, - experiment.TrialSearcherState{Create: searcher.Create{RequestID: rID}, Complete: true}, + experiment.TrialSearcherState{Create: searcher.Create{}, EarlyExitedByUserCode: true}, rmImpl, a.m.db, expConf, @@ -176,12 +162,11 @@ func setup(t *testing.T) ( }, ssh.PrivateAndPublicKeys{}, false, - nil, nil, func(ri model.RequestID, reason *model.ExitedReason) { - require.Equal(t, rID, ri) + nil, nil, func(rID model.RequestID, reason *model.ExitedReason) { done <- true close(done) }, ) require.NoError(t, err) - return a.m.db, rID, tr, &as, done + return a.m.db, tr, &as, done } diff --git a/master/internal/trials/postgres_trials.go b/master/internal/trials/postgres_trials.go index 985879f5080..147bdee57d5 100644 --- a/master/internal/trials/postgres_trials.go +++ b/master/internal/trials/postgres_trials.go @@ -73,7 +73,7 @@ func generateMetricToColumn(metric string) string { // trial. func MetricsTimeSeries(trialID int32, startTime time.Time, metricNames []string, - startBatches int, endBatches int, xAxisMetricLabels []string, + startBatches int, endBatches int, maxDatapoints int, timeSeriesColumn string, timeSeriesFilter *commonv1.PolymorphicFilter, metricGroup model.MetricGroup) ( metricMeasurements []db.MetricMeasurements, err error, @@ -106,7 +106,7 @@ func MetricsTimeSeries(trialID int32, startTime time.Time, return nil, fmt.Errorf("getting summary metrics for trial %d: %w", trialID, err) } - for _, metricName := range append(metricNames, "epoch") { + for _, metricName := range append(metricNames, "epoch", "epochs") { metricType := db.MetricTypeString if curSummary, ok := summaryMetrics.Metrics[metricName].(map[string]any); ok { if m, ok := curSummary["type"].(string); ok { @@ -163,14 +163,23 @@ func MetricsTimeSeries(trialID int32, startTime time.Time, valuesMap[selectMetrics[mName]] = mVal } } - var epoch *float64 - if results[i]["epoch"] != nil { + var epochs *float64 + // "epoch" is the legacy metric name for epoch x-axis metric, it was renamed to "epochs" + // but we fallback to "epoch" for backwards compatibility. + if results[i]["epochs"] != nil { + e, ok := results[i]["epochs"].(float64) + if !ok { + return nil, fmt.Errorf( + "metric 'epochs' has nonnumeric value reported value='%v'", results[i]["epochs"]) + } + epochs = &e + } else if results[i]["epoch"] != nil { e, ok := results[i]["epoch"].(float64) if !ok { return nil, fmt.Errorf( "metric 'epoch' has nonnumeric value reported value='%v'", results[i]["epoch"]) } - epoch = &e + epochs = &e } var endTime time.Time if results[i]["time"] == nil { @@ -181,7 +190,7 @@ func MetricsTimeSeries(trialID int32, startTime time.Time, metricM := db.MetricMeasurements{ Batches: uint(results[i]["batches"].(int64)), Time: endTime, - Epoch: epoch, + Epoch: epochs, TrialID: int32(results[i]["trial_id"].(int64)), Values: valuesMap, } diff --git a/master/pkg/model/searcher.go b/master/pkg/model/searcher.go index 6538942118c..106cb4bcf25 100644 --- a/master/pkg/model/searcher.go +++ b/master/pkg/model/searcher.go @@ -62,24 +62,6 @@ func (r RequestID) String() string { return uuid.UUID(r).String() } -// ParseRequestID decodes s into a request id or returns an error. -func ParseRequestID(s string) (RequestID, error) { - parsed, err := uuid.Parse(s) - if err != nil { - return RequestID{}, err - } - return RequestID(parsed), nil -} - -// MustParseRequestID decodes s into a request id or panics. -func MustParseRequestID(s string) RequestID { - parsed, err := ParseRequestID(s) - if err != nil { - panic(err) - } - return parsed -} - // Value implements the sql.Driver interface. func (r RequestID) Value() (driver.Value, error) { return r.String(), nil diff --git a/master/pkg/model/test_utils.go b/master/pkg/model/test_utils.go index d73d05cde18..7ab17de3c2a 100644 --- a/master/pkg/model/test_utils.go +++ b/master/pkg/model/test_utils.go @@ -28,13 +28,10 @@ func (f ExperimentModelOptionFunc) apply(experiment *Experiment) { // ExperimentModel returns a new experiment with the specified options. // nolint: exhaustruct func ExperimentModel(opts ...ExperimentModelOption) (*Experiment, expconf.ExperimentConfig) { - maxLength := expconf.NewLengthInBatches(100) activeConfig := expconf.ExperimentConfig{ RawSearcher: &expconf.SearcherConfig{ - RawMetric: ptrs.Ptr("loss"), - RawSingleConfig: &expconf.SingleConfig{ - RawMaxLength: &maxLength, - }, + RawMetric: ptrs.Ptr("loss"), + RawSingleConfig: &expconf.SingleConfig{}, }, RawEntrypoint: &expconf.Entrypoint{RawEntrypoint: "model_def:SomeTrialClass"}, RawHyperparameters: expconf.Hyperparameters{}, diff --git a/master/pkg/schemas/expconf/experiment_config.go b/master/pkg/schemas/expconf/experiment_config.go index b2701d846e4..52133a0c9d6 100644 --- a/master/pkg/schemas/expconf/experiment_config.go +++ b/master/pkg/schemas/expconf/experiment_config.go @@ -52,11 +52,6 @@ type ExperimentConfigV0 struct { RawPreemptionTimeout *int `json:"preemption_timeout"` } -// Unit implements the model.InUnits interface. -func (e *ExperimentConfigV0) Unit() Unit { - return e.RawSearcher.Unit() -} - // Value implements the driver.Valuer interface. func (e ExperimentConfigV0) Value() (driver.Value, error) { // Validate the object before passing it to the database. @@ -146,11 +141,6 @@ func (d *Name) UnmarshalJSON(bytes []byte) error { return json.Unmarshal(bytes, &d.RawString) } -// InUnits is describes a type that is in terms of a specific unit. -type InUnits interface { - Unit() Unit -} - // LabelsV0 holds the set of labels on the experiment. type LabelsV0 map[string]bool diff --git a/master/pkg/schemas/expconf/searcher_config.go b/master/pkg/schemas/expconf/searcher_config.go index 6d7aaef9092..bdf7fefba64 100644 --- a/master/pkg/schemas/expconf/searcher_config.go +++ b/master/pkg/schemas/expconf/searcher_config.go @@ -3,6 +3,8 @@ package expconf import ( "encoding/json" + log "github.com/sirupsen/logrus" + "github.com/pkg/errors" "github.com/determined-ai/determined/master/pkg/schemas" @@ -52,32 +54,6 @@ func (s *SearcherConfigV0) UnmarshalJSON(data []byte) error { return errors.Wrap(json.Unmarshal(data, DefaultParser(s)), "failed to parse searcher config") } -// Unit implements the model.InUnits interface. -func (s SearcherConfigV0) Unit() Unit { - switch { - case s.RawSingleConfig != nil: - return s.RawSingleConfig.Unit() - case s.RawRandomConfig != nil: - return s.RawRandomConfig.Unit() - case s.RawGridConfig != nil: - return s.RawGridConfig.Unit() - case s.RawAsyncHalvingConfig != nil: - return s.RawAsyncHalvingConfig.Unit() - case s.RawAdaptiveASHAConfig != nil: - return s.RawAdaptiveASHAConfig.Unit() - case s.RawCustomConfig != nil: - panic("cannot get unit of EOL searcher class") - case s.RawSyncHalvingConfig != nil: - panic("cannot get unit of EOL searcher class") - case s.RawAdaptiveConfig != nil: - panic("cannot get unit of EOL searcher class") - case s.RawAdaptiveSimpleConfig != nil: - panic("cannot get unit of EOL searcher class") - default: - panic("no searcher type specified") - } -} - // AsLegacy converts a current ExperimentConfig to a (limited capacity) LegacySearcher. func (s SearcherConfigV0) AsLegacy() LegacySearcher { var name string @@ -114,56 +90,49 @@ func (s SearcherConfigV0) AsLegacy() LegacySearcher { // //go:generate ../gen.sh type SingleConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` -} - -// Unit implements the model.InUnits interface. -func (s SingleConfigV0) Unit() Unit { - return s.RawMaxLength.Unit + RawMaxLength *LengthV0 `json:"max_length,omitempty"` } // RandomConfigV0 configures a random search. // //go:generate ../gen.sh type RandomConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` + RawMaxLength *LengthV0 `json:"max_length,omitempty"` RawMaxTrials *int `json:"max_trials"` RawMaxConcurrentTrials *int `json:"max_concurrent_trials"` } -// Unit implements the model.InUnits interface. -func (r RandomConfigV0) Unit() Unit { - return r.RawMaxLength.Unit -} - // GridConfigV0 configures a grid search. // //go:generate ../gen.sh type GridConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` + RawMaxLength *LengthV0 `json:"max_length,omitempty"` RawMaxConcurrentTrials *int `json:"max_concurrent_trials"` } -// Unit implements the model.InUnits interface. -func (g GridConfigV0) Unit() Unit { - return g.RawMaxLength.Unit -} - // AsyncHalvingConfigV0 configures asynchronous successive halving. // //go:generate ../gen.sh type AsyncHalvingConfigV0 struct { - RawNumRungs *int `json:"num_rungs"` - RawMaxLength *LengthV0 `json:"max_length"` - RawMaxTrials *int `json:"max_trials"` - RawDivisor *float64 `json:"divisor"` - RawMaxConcurrentTrials *int `json:"max_concurrent_trials"` - RawStopOnce *bool `json:"stop_once"` + RawNumRungs *int `json:"num_rungs"` + RawMaxTrials *int `json:"max_trials"` + RawDivisor *float64 `json:"divisor"` + RawMaxConcurrentTrials *int `json:"max_concurrent_trials"` + RawMaxTime *int `json:"max_time"` + RawTimeMetric *string `json:"time_metric"` + // These config options are deprecated and should not be used. + // They exist to help parse legacy exp configs. + RawMaxLength *LengthV0 `json:"max_length,omitempty"` + RawStopOnce *bool `json:"stop_once,omitempty"` } -// Unit implements the model.InUnits interface. -func (a AsyncHalvingConfigV0) Unit() Unit { - return a.RawMaxLength.Unit +// Length returns the maximum training length. +func (a AsyncHalvingConfigV0) Length() Length { + if a.RawMaxTime != nil && a.RawTimeMetric != nil { + return Length{Unit: Unit(*a.RawTimeMetric), Units: uint64(*a.RawMaxTime)} + } + // Parse legacy expconfs for backwards compat. + return *a.RawMaxLength } // AdaptiveMode specifies how aggressively to perform early stopping. @@ -172,37 +141,39 @@ type AdaptiveMode string const ( // AggressiveMode quickly stops underperforming trials, which enables the searcher to explore // more hyperparameter configurations. - AggressiveMode = "aggressive" + AggressiveMode AdaptiveMode = "aggressive" // StandardMode provides a balance between downsampling and hyperparameter exploration. - StandardMode = "standard" + StandardMode AdaptiveMode = "standard" // ConservativeMode performs minimal downsampling at the cost of not exploring as many // configurations. - ConservativeMode = "conservative" + ConservativeMode AdaptiveMode = "conservative" ) -// AdaptiveModePtr is like &AdaptiveMode("standard"), except it works. -func AdaptiveModePtr(mode string) *AdaptiveMode { - tmp := AdaptiveMode(mode) - return &tmp -} - // AdaptiveASHAConfigV0 configures an adaptive searcher for use with ASHA. // //go:generate ../gen.sh type AdaptiveASHAConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` RawMaxTrials *int `json:"max_trials"` RawBracketRungs []int `json:"bracket_rungs"` RawDivisor *float64 `json:"divisor"` RawMode *AdaptiveMode `json:"mode"` RawMaxRungs *int `json:"max_rungs"` RawMaxConcurrentTrials *int `json:"max_concurrent_trials"` - RawStopOnce *bool `json:"stop_once"` + RawMaxTime *int `json:"max_time"` + RawTimeMetric *string `json:"time_metric"` + // These config options are deprecated and should not be used. + // They exist to help parse legacy exp configs. + RawMaxLength *LengthV0 `json:"max_length,omitempty"` + RawStopOnce *bool `json:"stop_once,omitempty"` } -// Unit implements the model.InUnits interface. -func (a AdaptiveASHAConfigV0) Unit() Unit { - return a.RawMaxLength.Unit +// Length returns the maximum training length. +func (a AdaptiveASHAConfigV0) Length() Length { + if a.RawMaxTime != nil && a.RawTimeMetric != nil { + return Length{Unit: Unit(*a.RawTimeMetric), Units: uint64(*a.RawMaxTime)} + } + // Parse legacy expconfs for backwards compat. + return *a.RawMaxLength } // SyncHalvingConfigV0 is a legacy config. @@ -210,7 +181,7 @@ func (a AdaptiveASHAConfigV0) Unit() Unit { //go:generate ../gen.sh type SyncHalvingConfigV0 struct { RawNumRungs *int `json:"num_rungs"` - RawMaxLength *LengthV0 `json:"max_length"` + RawMaxLength *LengthV0 `json:"max_length,omitempty"` RawBudget *LengthV0 `json:"budget"` RawDivisor *float64 `json:"divisor"` RawTrainStragglers *bool `json:"train_stragglers"` @@ -220,7 +191,7 @@ type SyncHalvingConfigV0 struct { // //go:generate ../gen.sh type AdaptiveConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` + RawMaxLength *LengthV0 `json:"max_length,omitempty"` RawBudget *LengthV0 `json:"budget"` RawBracketRungs []int `json:"bracket_rungs"` RawDivisor *float64 `json:"divisor"` @@ -233,7 +204,7 @@ type AdaptiveConfigV0 struct { // //go:generate ../gen.sh type AdaptiveSimpleConfigV0 struct { - RawMaxLength *LengthV0 `json:"max_length"` + RawMaxLength *LengthV0 `json:"max_length,omitempty"` RawMaxTrials *int `json:"max_trials"` RawDivisor *float64 `json:"divisor"` RawMode *AdaptiveMode `json:"mode"` @@ -247,9 +218,50 @@ type CustomConfigV0 struct { RawUnit *Unit `json:"unit"` } -// AssertCurrent distinguishes configs which are only parsable from those that are runnable. +// AssertCurrent distinguishes configs which are only parsable from those that are runnable and logs deprecation +// warnings for legacy fields. func (s SearcherConfig) AssertCurrent() error { switch { + case s.RawAdaptiveASHAConfig != nil: + if s.RawAdaptiveASHAConfig.RawMaxLength != nil { + log.Warn( + "the `max_length` field of the searcher config has been deprecated and will be removed in a " + + "future release.") + } + if s.RawAdaptiveASHAConfig.RawStopOnce != nil { + log.Warn("the `stop_once` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } + if s.RawAdaptiveASHAConfig.RawMaxTime == nil || s.RawAdaptiveASHAConfig.RawTimeMetric == nil { + return errors.New("the `adaptive_asha` searcher requires `max_time` and `time_metric` to be set") + } + case s.RawAsyncHalvingConfig != nil: + if s.RawAsyncHalvingConfig.RawMaxLength != nil { + log.Warn("the `max_length` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } + if s.RawAsyncHalvingConfig.RawStopOnce != nil { + log.Warn("the `stop_once` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } + if s.RawAsyncHalvingConfig.RawMaxTime == nil || s.RawAsyncHalvingConfig.RawTimeMetric == nil { + return errors.New("the `async_halving` searcher requires `max_time` and `time_metric` to be set") + } + case s.RawGridConfig != nil: + if s.RawGridConfig.RawMaxLength != nil { + log.Warn("the `max_length` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } + case s.RawSingleConfig != nil: + if s.RawSingleConfig.RawMaxLength != nil { + log.Warn("the `max_length` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } + case s.RawRandomConfig != nil: + if s.RawRandomConfig.RawMaxLength != nil { + log.Warn("the `max_length` field of the searcher config has been deprecated and will be removed in " + + "a future release.") + } case s.RawSyncHalvingConfig != nil: return errors.New( "the 'sync_halving' searcher has been removed and is not valid for new experiments", diff --git a/master/pkg/schemas/expconf/zgen_adaptive_asha_config_v0.go b/master/pkg/schemas/expconf/zgen_adaptive_asha_config_v0.go index 779f7b8b9f0..f6fc57fd7e5 100644 --- a/master/pkg/schemas/expconf/zgen_adaptive_asha_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_adaptive_asha_config_v0.go @@ -8,17 +8,6 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (a AdaptiveASHAConfigV0) MaxLength() LengthV0 { - if a.RawMaxLength == nil { - panic("You must call WithDefaults on AdaptiveASHAConfigV0 before .MaxLength") - } - return *a.RawMaxLength -} - -func (a *AdaptiveASHAConfigV0) SetMaxLength(val LengthV0) { - a.RawMaxLength = &val -} - func (a AdaptiveASHAConfigV0) MaxTrials() int { if a.RawMaxTrials == nil { panic("You must call WithDefaults on AdaptiveASHAConfigV0 before .MaxTrials") @@ -82,15 +71,36 @@ func (a *AdaptiveASHAConfigV0) SetMaxConcurrentTrials(val int) { a.RawMaxConcurrentTrials = &val } -func (a AdaptiveASHAConfigV0) StopOnce() bool { - if a.RawStopOnce == nil { - panic("You must call WithDefaults on AdaptiveASHAConfigV0 before .StopOnce") - } - return *a.RawStopOnce +func (a AdaptiveASHAConfigV0) MaxTime() *int { + return a.RawMaxTime +} + +func (a *AdaptiveASHAConfigV0) SetMaxTime(val *int) { + a.RawMaxTime = val +} + +func (a AdaptiveASHAConfigV0) TimeMetric() *string { + return a.RawTimeMetric +} + +func (a *AdaptiveASHAConfigV0) SetTimeMetric(val *string) { + a.RawTimeMetric = val +} + +func (a AdaptiveASHAConfigV0) MaxLength() *LengthV0 { + return a.RawMaxLength +} + +func (a *AdaptiveASHAConfigV0) SetMaxLength(val *LengthV0) { + a.RawMaxLength = val +} + +func (a AdaptiveASHAConfigV0) StopOnce() *bool { + return a.RawStopOnce } -func (a *AdaptiveASHAConfigV0) SetStopOnce(val bool) { - a.RawStopOnce = &val +func (a *AdaptiveASHAConfigV0) SetStopOnce(val *bool) { + a.RawStopOnce = val } func (a AdaptiveASHAConfigV0) ParsedSchema() interface{} { diff --git a/master/pkg/schemas/expconf/zgen_adaptive_config_v0.go b/master/pkg/schemas/expconf/zgen_adaptive_config_v0.go index cf3c484b815..6816c834aed 100644 --- a/master/pkg/schemas/expconf/zgen_adaptive_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_adaptive_config_v0.go @@ -8,15 +8,12 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (a AdaptiveConfigV0) MaxLength() LengthV0 { - if a.RawMaxLength == nil { - panic("You must call WithDefaults on AdaptiveConfigV0 before .MaxLength") - } - return *a.RawMaxLength +func (a AdaptiveConfigV0) MaxLength() *LengthV0 { + return a.RawMaxLength } -func (a *AdaptiveConfigV0) SetMaxLength(val LengthV0) { - a.RawMaxLength = &val +func (a *AdaptiveConfigV0) SetMaxLength(val *LengthV0) { + a.RawMaxLength = val } func (a AdaptiveConfigV0) Budget() LengthV0 { diff --git a/master/pkg/schemas/expconf/zgen_adaptive_simple_config_v0.go b/master/pkg/schemas/expconf/zgen_adaptive_simple_config_v0.go index ad4613973e6..63fff4c4780 100644 --- a/master/pkg/schemas/expconf/zgen_adaptive_simple_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_adaptive_simple_config_v0.go @@ -8,15 +8,12 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (a AdaptiveSimpleConfigV0) MaxLength() LengthV0 { - if a.RawMaxLength == nil { - panic("You must call WithDefaults on AdaptiveSimpleConfigV0 before .MaxLength") - } - return *a.RawMaxLength +func (a AdaptiveSimpleConfigV0) MaxLength() *LengthV0 { + return a.RawMaxLength } -func (a *AdaptiveSimpleConfigV0) SetMaxLength(val LengthV0) { - a.RawMaxLength = &val +func (a *AdaptiveSimpleConfigV0) SetMaxLength(val *LengthV0) { + a.RawMaxLength = val } func (a AdaptiveSimpleConfigV0) MaxTrials() int { diff --git a/master/pkg/schemas/expconf/zgen_async_halving_config_v0.go b/master/pkg/schemas/expconf/zgen_async_halving_config_v0.go index 9bf52ee3afc..03ad968feb9 100644 --- a/master/pkg/schemas/expconf/zgen_async_halving_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_async_halving_config_v0.go @@ -19,17 +19,6 @@ func (a *AsyncHalvingConfigV0) SetNumRungs(val int) { a.RawNumRungs = &val } -func (a AsyncHalvingConfigV0) MaxLength() LengthV0 { - if a.RawMaxLength == nil { - panic("You must call WithDefaults on AsyncHalvingConfigV0 before .MaxLength") - } - return *a.RawMaxLength -} - -func (a *AsyncHalvingConfigV0) SetMaxLength(val LengthV0) { - a.RawMaxLength = &val -} - func (a AsyncHalvingConfigV0) MaxTrials() int { if a.RawMaxTrials == nil { panic("You must call WithDefaults on AsyncHalvingConfigV0 before .MaxTrials") @@ -63,15 +52,36 @@ func (a *AsyncHalvingConfigV0) SetMaxConcurrentTrials(val int) { a.RawMaxConcurrentTrials = &val } -func (a AsyncHalvingConfigV0) StopOnce() bool { - if a.RawStopOnce == nil { - panic("You must call WithDefaults on AsyncHalvingConfigV0 before .StopOnce") - } - return *a.RawStopOnce +func (a AsyncHalvingConfigV0) MaxTime() *int { + return a.RawMaxTime +} + +func (a *AsyncHalvingConfigV0) SetMaxTime(val *int) { + a.RawMaxTime = val +} + +func (a AsyncHalvingConfigV0) TimeMetric() *string { + return a.RawTimeMetric +} + +func (a *AsyncHalvingConfigV0) SetTimeMetric(val *string) { + a.RawTimeMetric = val +} + +func (a AsyncHalvingConfigV0) MaxLength() *LengthV0 { + return a.RawMaxLength +} + +func (a *AsyncHalvingConfigV0) SetMaxLength(val *LengthV0) { + a.RawMaxLength = val +} + +func (a AsyncHalvingConfigV0) StopOnce() *bool { + return a.RawStopOnce } -func (a *AsyncHalvingConfigV0) SetStopOnce(val bool) { - a.RawStopOnce = &val +func (a *AsyncHalvingConfigV0) SetStopOnce(val *bool) { + a.RawStopOnce = val } func (a AsyncHalvingConfigV0) ParsedSchema() interface{} { diff --git a/master/pkg/schemas/expconf/zgen_grid_config_v0.go b/master/pkg/schemas/expconf/zgen_grid_config_v0.go index 45a561ebdb5..a372484fdb8 100644 --- a/master/pkg/schemas/expconf/zgen_grid_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_grid_config_v0.go @@ -8,15 +8,12 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (g GridConfigV0) MaxLength() LengthV0 { - if g.RawMaxLength == nil { - panic("You must call WithDefaults on GridConfigV0 before .MaxLength") - } - return *g.RawMaxLength +func (g GridConfigV0) MaxLength() *LengthV0 { + return g.RawMaxLength } -func (g *GridConfigV0) SetMaxLength(val LengthV0) { - g.RawMaxLength = &val +func (g *GridConfigV0) SetMaxLength(val *LengthV0) { + g.RawMaxLength = val } func (g GridConfigV0) MaxConcurrentTrials() int { diff --git a/master/pkg/schemas/expconf/zgen_random_config_v0.go b/master/pkg/schemas/expconf/zgen_random_config_v0.go index 3cbc34a706b..4d27e3df352 100644 --- a/master/pkg/schemas/expconf/zgen_random_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_random_config_v0.go @@ -8,15 +8,12 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (r RandomConfigV0) MaxLength() LengthV0 { - if r.RawMaxLength == nil { - panic("You must call WithDefaults on RandomConfigV0 before .MaxLength") - } - return *r.RawMaxLength +func (r RandomConfigV0) MaxLength() *LengthV0 { + return r.RawMaxLength } -func (r *RandomConfigV0) SetMaxLength(val LengthV0) { - r.RawMaxLength = &val +func (r *RandomConfigV0) SetMaxLength(val *LengthV0) { + r.RawMaxLength = val } func (r RandomConfigV0) MaxTrials() int { diff --git a/master/pkg/schemas/expconf/zgen_single_config_v0.go b/master/pkg/schemas/expconf/zgen_single_config_v0.go index 09ae94649d2..0b8c01d5312 100644 --- a/master/pkg/schemas/expconf/zgen_single_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_single_config_v0.go @@ -8,15 +8,12 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas" ) -func (s SingleConfigV0) MaxLength() LengthV0 { - if s.RawMaxLength == nil { - panic("You must call WithDefaults on SingleConfigV0 before .MaxLength") - } - return *s.RawMaxLength +func (s SingleConfigV0) MaxLength() *LengthV0 { + return s.RawMaxLength } -func (s *SingleConfigV0) SetMaxLength(val LengthV0) { - s.RawMaxLength = &val +func (s *SingleConfigV0) SetMaxLength(val *LengthV0) { + s.RawMaxLength = val } func (s SingleConfigV0) ParsedSchema() interface{} { diff --git a/master/pkg/schemas/expconf/zgen_sync_halving_config_v0.go b/master/pkg/schemas/expconf/zgen_sync_halving_config_v0.go index 6526bc4abf5..a145c24a5e5 100644 --- a/master/pkg/schemas/expconf/zgen_sync_halving_config_v0.go +++ b/master/pkg/schemas/expconf/zgen_sync_halving_config_v0.go @@ -19,15 +19,12 @@ func (s *SyncHalvingConfigV0) SetNumRungs(val int) { s.RawNumRungs = &val } -func (s SyncHalvingConfigV0) MaxLength() LengthV0 { - if s.RawMaxLength == nil { - panic("You must call WithDefaults on SyncHalvingConfigV0 before .MaxLength") - } - return *s.RawMaxLength +func (s SyncHalvingConfigV0) MaxLength() *LengthV0 { + return s.RawMaxLength } -func (s *SyncHalvingConfigV0) SetMaxLength(val LengthV0) { - s.RawMaxLength = &val +func (s *SyncHalvingConfigV0) SetMaxLength(val *LengthV0) { + s.RawMaxLength = val } func (s SyncHalvingConfigV0) Budget() LengthV0 { diff --git a/master/pkg/schemas/zgen_schemas.go b/master/pkg/schemas/zgen_schemas.go index da53a35d741..075f645f6fa 100644 --- a/master/pkg/schemas/zgen_schemas.go +++ b/master/pkg/schemas/zgen_schemas.go @@ -2242,7 +2242,6 @@ var ( "name" ], "eventuallyRequired": [ - "max_length", "max_trials", "metric" ], @@ -2268,6 +2267,20 @@ var ( "default": null, "minimum": 1 }, + "time_metric": { + "type": [ + "string", + "null" + ], + "default": null + }, + "max_time": { + "type": [ + "integer", + "null" + ], + "default": null + }, "mode": { "enum": [ null, @@ -2315,7 +2328,7 @@ var ( "boolean", "null" ], - "default": false + "default": null }, "metric": { "type": [ @@ -2360,7 +2373,6 @@ var ( ], "eventuallyRequired": [ "max_trials", - "max_length", "metric" ], "properties": { @@ -2452,7 +2464,6 @@ var ( ], "eventuallyRequired": [ "budget", - "max_length", "metric" ], "properties": { @@ -2559,7 +2570,6 @@ var ( ], "eventuallyRequired": [ "num_rungs", - "max_length", "max_trials", "metric" ], @@ -2612,7 +2622,7 @@ var ( "boolean", "null" ], - "default": false + "default": null }, "metric": { "type": [ @@ -2621,6 +2631,20 @@ var ( ], "default": null }, + "time_metric": { + "type": [ + "string", + "null" + ], + "default": null + }, + "max_time": { + "type": [ + "integer", + "null" + ], + "default": null + }, "smaller_is_better": { "type": [ "boolean", @@ -2698,7 +2722,6 @@ var ( "name" ], "eventuallyRequired": [ - "max_length", "metric" ], "properties": { @@ -2784,7 +2807,6 @@ var ( ], "eventuallyRequired": [ "max_trials", - "max_length", "metric" ], "properties": { @@ -2857,7 +2879,6 @@ var ( "name" ], "eventuallyRequired": [ - "max_length", "metric" ], "properties": { @@ -2916,7 +2937,6 @@ var ( ], "eventuallyRequired": [ "num_rungs", - "max_length", "budget", "metric" ], @@ -3062,6 +3082,8 @@ var ( "max_concurrent_trials": true, "max_length": true, "max_rungs": true, + "max_time": true, + "time_metric": true, "max_trials": true, "mode": true, "name": true, diff --git a/master/pkg/searcher/actions.go b/master/pkg/searcher/actions.go new file mode 100644 index 00000000000..d2aa7c9f857 --- /dev/null +++ b/master/pkg/searcher/actions.go @@ -0,0 +1,73 @@ +package searcher + +import ( + "fmt" + + "github.com/determined-ai/determined/master/pkg/model" + + "github.com/determined-ai/determined/master/pkg/nprand" +) + +// Action is an action that a searcher would like to perform. +type Action interface { + searcherAction() +} + +// Create is a directive from the searcher to create a new run. +type Create struct { + RequestID model.RequestID `json:"request_id"` + // TrialSeed must be a value between 0 and 2**31 - 1. + TrialSeed uint32 `json:"trial_seed"` + Hparams HParamSample `json:"hparams"` +} + +// searcherAction (Create) implements SearcherAction. +func (Create) searcherAction() {} + +func (action Create) String() string { + return fmt.Sprintf( + "Create{TrialSeed: %d, Hparams: %v, RequestID: %d}", + action.TrialSeed, action.Hparams, action.RequestID, + ) +} + +// NewCreate initializes a new Create operation with a new request ID and the given hyperparameters. +func NewCreate( + rand *nprand.State, s HParamSample, +) Create { + return Create{ + RequestID: model.NewRequestID(rand), + TrialSeed: uint32(rand.Int64n(1 << 31)), + Hparams: s, + } +} + +// Stop is a directive from the searcher to stop a run. +type Stop struct { + RequestID model.RequestID `json:"request_id"` +} + +// SearcherAction (Stop) implements SearcherAction. +func (Stop) searcherAction() {} + +// NewStop initializes a new Stop action with the given Run ID. +func NewStop(requestID model.RequestID) Stop { + return Stop{RequestID: requestID} +} + +func (action Stop) String() string { + return fmt.Sprintf("Stop{RequestID: %d}", action.RequestID) +} + +// Shutdown marks the searcher as completed. +type Shutdown struct { + Cancel bool + Failure bool +} + +// SearcherAction (Shutdown) implements SearcherAction. +func (Shutdown) searcherAction() {} + +func (shutdown Shutdown) String() string { + return fmt.Sprintf("{Shutdown Cancel: %v Failure: %v}", shutdown.Cancel, shutdown.Failure) +} diff --git a/master/pkg/searcher/adaptive_asha.go b/master/pkg/searcher/adaptive_asha.go index 5c7e288a7c5..8df3e4873f4 100644 --- a/master/pkg/searcher/adaptive_asha.go +++ b/master/pkg/searcher/adaptive_asha.go @@ -10,6 +10,19 @@ import ( "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) +type bracket struct { + numRungs int + maxTrials int + maxConcurrentTrials int +} + +func (b *bracket) String() string { + return fmt.Sprintf( + "Bracket{numRungs: %d, maxTrials: %d, maxConcurrentTrials: %d}", + b.numRungs, b.maxTrials, b.maxConcurrentTrials, + ) +} + func getBracketMaxTrials( maxTrials int, divisor float64, brackets []int, ) []int { @@ -52,7 +65,7 @@ func getBracketMaxConcurrentTrials( if maxConcurrentTrials == 0 { minTrials = mathx.Max(maxTrials[numBrackets-1], int(divisor)) } else { - // Without this, the remainder will be less than numBrackets and later brackets willgit pu + // Without this, the remainder will be less than numBrackets and later brackets will // not receive a constraint on bracketMaxConcurrentTrials. maxConcurrentTrials = mathx.Max(maxConcurrentTrials, numBrackets) minTrials = maxConcurrentTrials / numBrackets @@ -68,40 +81,51 @@ func getBracketMaxConcurrentTrials( return bracketMaxConcurrentTrials } -func newAdaptiveASHASearch(config expconf.AdaptiveASHAConfig, smallerIsBetter bool) SearchMethod { +func makeBrackets(config expconf.AdaptiveASHAConfig) []bracket { modeFunc := parseAdaptiveMode(config.Mode()) - brackets := config.BracketRungs() - if len(brackets) == 0 { + bracketRungs := config.BracketRungs() + if len(bracketRungs) == 0 { maxRungs := config.MaxRungs() + // Ensure that the top rung will contain at least one run. maxRungs = mathx.Min( maxRungs, - int(math.Log(float64(config.MaxLength().Units))/math.Log(config.Divisor()))+1, + int(math.Log(float64(config.Length().Units))/math.Log(config.Divisor()))+1, int(math.Log(float64(config.MaxTrials()))/math.Log(config.Divisor()))+1) - brackets = modeFunc(maxRungs) + bracketRungs = modeFunc(maxRungs) } // We prioritize brackets that perform more early stopping to try to max speedups early on. - sort.Sort(sort.Reverse(sort.IntSlice(brackets))) + sort.Sort(sort.Reverse(sort.IntSlice(bracketRungs))) bracketMaxTrials := getBracketMaxTrials( - config.MaxTrials(), config.Divisor(), brackets) + config.MaxTrials(), config.Divisor(), bracketRungs) bracketMaxConcurrentTrials := getBracketMaxConcurrentTrials( config.MaxConcurrentTrials(), config.Divisor(), bracketMaxTrials) + brackets := make([]bracket, len(bracketRungs)) + for i, bracketRung := range bracketRungs { + brackets[i] = bracket{ + numRungs: bracketRung, + maxTrials: bracketMaxTrials[i], + maxConcurrentTrials: bracketMaxConcurrentTrials[i], + } + } + return brackets +} + +func newAdaptiveASHASearch(config expconf.AdaptiveASHAConfig, smallerIsBetter bool, metric string) SearchMethod { + brackets := makeBrackets(config) methods := make([]SearchMethod, 0, len(brackets)) - for i, numRungs := range brackets { + for _, bracket := range brackets { c := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(numRungs), - RawMaxLength: ptrs.Ptr(config.MaxLength()), - RawMaxTrials: &bracketMaxTrials[i], + RawNumRungs: ptrs.Ptr(bracket.numRungs), + RawMaxLength: config.RawMaxLength, + RawMaxTrials: &bracket.maxTrials, RawDivisor: ptrs.Ptr(config.Divisor()), - RawMaxConcurrentTrials: ptrs.Ptr(bracketMaxConcurrentTrials[i]), - RawStopOnce: ptrs.Ptr(config.StopOnce()), - } - if config.StopOnce() { - methods = append(methods, newAsyncHalvingStoppingSearch(c, smallerIsBetter)) - } else { - methods = append(methods, newAsyncHalvingSearch(c, smallerIsBetter)) + RawMaxConcurrentTrials: ptrs.Ptr(bracket.maxConcurrentTrials), + RawTimeMetric: config.RawTimeMetric, + RawMaxTime: config.RawMaxTime, } + methods = append(methods, newAsyncHalvingStoppingSearch(c, smallerIsBetter, metric)) } return newTournamentSearch(AdaptiveASHASearch, methods...) diff --git a/master/pkg/searcher/adaptive_asha_test.go b/master/pkg/searcher/adaptive_asha_test.go index 901668bd083..e91e3966284 100644 --- a/master/pkg/searcher/adaptive_asha_test.go +++ b/master/pkg/searcher/adaptive_asha_test.go @@ -4,6 +4,8 @@ package searcher import ( "testing" + "github.com/stretchr/testify/require" + "gotest.tools/assert" "github.com/determined-ai/determined/master/pkg/ptrs" @@ -25,194 +27,63 @@ func TestBracketMaxConcurrentTrials(t *testing.T) { assert.DeepEqual(t, getBracketMaxConcurrentTrials(0, 4., []int{40, 10}), []int{10, 10}) } -func modePtr(x expconf.AdaptiveMode) *expconf.AdaptiveMode { - return &x -} - -func TestAdaptiveASHASearcherReproducibility(t *testing.T) { - conf := expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(6400)), - RawMaxTrials: ptrs.Ptr(128), - } - conf = schemas.WithDefaults(conf) - gen := func() SearchMethod { return newAdaptiveASHASearch(conf, true) } - checkReproducibility(t, gen, nil, defaultMetric) -} - -func TestAdaptiveASHASearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ +func TestMakeBrackets(t *testing.T) { + cases := []struct { + conf expconf.AdaptiveASHAConfig + expBrackets []bracket + }{ { - name: "smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.2), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), + conf: expconf.AdaptiveASHAConfig{ + RawMode: ptrs.Ptr(expconf.StandardMode), + RawMaxTime: ptrs.Ptr(100), + RawTimeMetric: ptrs.Ptr("batches"), + RawMaxConcurrentTrials: ptrs.Ptr(2), + RawMaxTrials: ptrs.Ptr(10), + }, + expBrackets: []bracket{ + { + numRungs: 2, + maxTrials: 7, + maxConcurrentTrials: 1, }, - }, - }, - { - name: "early exit -- smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newEarlyExitPredefinedTrial(toOps("300B"), 0.2), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), + { + numRungs: 1, + maxTrials: 3, + maxConcurrentTrials: 1, }, }, }, { - name: "smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.5), - newConstantPredefinedTrial(toOps("300B"), 0.4), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.2), - newConstantPredefinedTrial(toOps("900B"), 0.1), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), + conf: expconf.AdaptiveASHAConfig{ + RawMode: ptrs.Ptr(expconf.ConservativeMode), + RawMaxTime: ptrs.Ptr(1000), + RawTimeMetric: ptrs.Ptr("batches"), + RawDivisor: ptrs.Ptr(3.0), + RawMaxConcurrentTrials: ptrs.Ptr(5), + RawMaxTrials: ptrs.Ptr(10), + }, + expBrackets: []bracket{ + { + numRungs: 3, + maxTrials: 7, + maxConcurrentTrials: 2, }, - }, - }, - { - name: "early exit -- smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.5), - newEarlyExitPredefinedTrial(toOps("300B"), 0.4), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.2), - newConstantPredefinedTrial(toOps("900B"), 0.1), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), + { + numRungs: 2, + maxTrials: 2, + maxConcurrentTrials: 2, }, - }, - }, - } - - runValueSimulationTestCases(t, testCases) -} - -func TestAdaptiveASHAStoppingSearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ - { - name: "smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.2), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), - }, - }, - }, - { - name: "early exit -- smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newEarlyExitPredefinedTrial(toOps("300B"), 0.2), - newConstantPredefinedTrial(toOps("300B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), - }, - }, - }, - { - name: "smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newConstantPredefinedTrial(toOps("300B 900B"), 0.2), - newConstantPredefinedTrial(toOps("300B 900B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), - }, - }, - }, - { - name: "early exit -- smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B 900B"), 0.1), - newEarlyExitPredefinedTrial(toOps("300B"), 0.2), - newConstantPredefinedTrial(toOps("300B 900B"), 0.3), - newConstantPredefinedTrial(toOps("900B"), 0.4), - newConstantPredefinedTrial(toOps("900B"), 0.5), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(900)), - RawMaxTrials: ptrs.Ptr(5), - RawMode: modePtr(expconf.StandardMode), - RawMaxRungs: ptrs.Ptr(2), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + { + numRungs: 1, + maxTrials: 1, + maxConcurrentTrials: 1, }, }, }, } - - runValueSimulationTestCases(t, testCases) + for _, c := range cases { + brackets := makeBrackets(schemas.WithDefaults(c.conf)) + require.Equal(t, len(c.expBrackets), len(brackets)) + require.Equal(t, c.expBrackets, brackets) + } } diff --git a/master/pkg/searcher/asha.go b/master/pkg/searcher/asha.go deleted file mode 100644 index 5f70f62f5c5..00000000000 --- a/master/pkg/searcher/asha.go +++ /dev/null @@ -1,327 +0,0 @@ -package searcher - -import ( - "encoding/json" - "fmt" - "math" - "sort" - - "github.com/determined-ai/determined/master/pkg/mathx" - "github.com/determined-ai/determined/master/pkg/model" - "github.com/determined-ai/determined/master/pkg/schemas/expconf" -) - -// AsyncHalvingSearch implements a search using the asynchronous successive halving algorithm -// (ASHA). The experiment will run until the target number of trials have been completed -// in the bottom rung and no further promotions can be made to higher rungs. -type ( - asyncHalvingSearchState struct { - Rungs []*rung `json:"rungs"` - TrialRungs map[model.RequestID]int `json:"trial_rungs"` - // EarlyExitTrials contains trials that exited early that are still considered in the search. - EarlyExitTrials map[model.RequestID]bool `json:"early_exit_trials"` - ClosedTrials map[model.RequestID]bool `json:"closed_trials"` - TrialsCompleted int `json:"trials_completed"` - InvalidTrials int `json:"invalid_trials"` - PendingTrials int `json:"pending_trials"` - SearchMethodType SearchMethodType `json:"search_method_type"` - } - - asyncHalvingSearch struct { - expconf.AsyncHalvingConfig - SmallerIsBetter bool - asyncHalvingSearchState - } - - trialMetric struct { - RequestID model.RequestID `json:"request_id"` - Metric model.ExtendedFloat64 `json:"metric"` - // fields below used by asha.go. - Promoted bool `json:"promoted"` - } - - // rung describes a set of trials that are to be trained for the same number of units. - rung struct { - UnitsNeeded uint64 `json:"units_needed"` - Metrics []trialMetric `json:"metrics"` - StartTrials int `json:"start_trials"` - PromoteTrials int `json:"promote_trials"` - // field below used by asha.go. - OutstandingTrials int `json:"outstanding_trials"` - } -) - -const ashaExitedMetricValue = math.MaxFloat64 - -func newAsyncHalvingSearch(config expconf.AsyncHalvingConfig, smallerIsBetter bool) SearchMethod { - rungs := make([]*rung, 0, config.NumRungs()) - var unitsNeeded uint64 - for id := 0; id < config.NumRungs(); id++ { - // We divide the MaxLength by downsampling rate to get the target units - // for a rung. - downsamplingRate := math.Pow(config.Divisor(), float64(config.NumRungs()-id-1)) - unitsNeeded += mathx.Max(uint64(float64(config.MaxLength().Units)/downsamplingRate), 1) - rungs = append(rungs, &rung{UnitsNeeded: unitsNeeded}) - } - - return &asyncHalvingSearch{ - AsyncHalvingConfig: config, - SmallerIsBetter: smallerIsBetter, - asyncHalvingSearchState: asyncHalvingSearchState{ - Rungs: rungs, - TrialRungs: make(map[model.RequestID]int), - EarlyExitTrials: make(map[model.RequestID]bool), - ClosedTrials: make(map[model.RequestID]bool), - SearchMethodType: ASHASearch, - }, - } -} - -func (s *asyncHalvingSearch) Snapshot() (json.RawMessage, error) { - return json.Marshal(s.asyncHalvingSearchState) -} - -func (s *asyncHalvingSearch) Restore(state json.RawMessage) error { - return json.Unmarshal(state, &s.asyncHalvingSearchState) -} - -// promotions handles bookkeeping of validation metrics and returns a RequestID to promote if -// appropriate. -func (r *rung) promotionsAsync( - requestID model.RequestID, metric float64, divisor float64, -) []model.RequestID { - // See if there is a trial to promote. We are increasing the total number of trials seen by 1; the - // number of best trials that definitely should have been promoted so far (numPromote) can only - // stay the same or increase by 1. - oldNumPromote := int(float64(len(r.Metrics)) / divisor) - numPromote := int(float64(len(r.Metrics)+1) / divisor) - - // Insert the new trial result in the appropriate place in the sorted list. - insertIndex := sort.Search( - len(r.Metrics), - func(i int) bool { return float64(r.Metrics[i].Metric) > metric }, - ) - promoteNow := insertIndex < numPromote - - r.Metrics = append(r.Metrics, trialMetric{}) - copy(r.Metrics[insertIndex+1:], r.Metrics[insertIndex:]) - r.Metrics[insertIndex] = trialMetric{ - RequestID: requestID, - Metric: model.ExtendedFloat64(metric), - Promoted: promoteNow, - } - - // If the new trial is good enough, it should be promoted immediately (whether or not numPromote - // changes). Otherwise, if numPromote changes, there is some other trial that should be promoted, - // unless it has been promoted already. - switch { - case promoteNow: - return []model.RequestID{requestID} - case numPromote != oldNumPromote && !r.Metrics[oldNumPromote].Promoted: - t := &r.Metrics[oldNumPromote] - t.Promoted = true - return []model.RequestID{t.RequestID} - default: - return nil - } -} - -func (s *asyncHalvingSearch) initialOperations(ctx context) ([]Operation, error) { - // The number of initialOperations will control the degree of parallelism - // of the search experiment since we guarantee that each validationComplete - // call will return a new train workload until we reach MaxTrials. - - // We will use searcher config field if available. - // Otherwise we will default to a number of trials that will - // guarantee at least one trial at the top rung. - var ops []Operation - var maxConcurrentTrials int - - if s.MaxConcurrentTrials() > 0 { - maxConcurrentTrials = mathx.Min(s.MaxConcurrentTrials(), s.MaxTrials()) - } else { - maxConcurrentTrials = mathx.Clamp( - 1, - int(math.Pow(s.Divisor(), float64(s.NumRungs()-1))), - s.MaxTrials(), - ) - } - - for trial := 0; trial < maxConcurrentTrials; trial++ { - create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) - s.PendingTrials++ - } - return ops, nil -} - -func (s *asyncHalvingSearch) trialCreated( - ctx context, requestID model.RequestID, -) ([]Operation, error) { - s.Rungs[0].OutstandingTrials++ - s.TrialRungs[requestID] = 0 - return nil, nil -} - -func (s *asyncHalvingSearch) trialClosed( - ctx context, requestID model.RequestID, -) ([]Operation, error) { - s.TrialsCompleted++ - s.ClosedTrials[requestID] = true - return nil, nil -} - -func (s *asyncHalvingSearch) validationCompleted( - ctx context, requestID model.RequestID, metric interface{}, op ValidateAfter, -) ([]Operation, error) { - s.PendingTrials-- - value, ok := metric.(float64) - if !ok { - return nil, fmt.Errorf("unexpected metric type for ASHA built-in search method %v", value) - } - if !s.SmallerIsBetter { - value *= -1 - } - return s.promoteAsync(ctx, requestID, value), nil -} - -func (s *asyncHalvingSearch) promoteAsync( - ctx context, requestID model.RequestID, metric float64, -) []Operation { - // Upon a validation complete, we should return at least one more train&val workload - // unless the bracket of successive halving is finished. - rungIndex := s.TrialRungs[requestID] - rung := s.Rungs[rungIndex] - rung.OutstandingTrials-- - addedTrainWorkload := false - - var ops []Operation - // If the trial has completed the top rung's validation, close the trial. - if rungIndex == s.NumRungs()-1 { - rung.Metrics = append(rung.Metrics, - trialMetric{ - RequestID: requestID, - Metric: model.ExtendedFloat64(metric), - }, - ) - - if !s.EarlyExitTrials[requestID] { - ops = append(ops, NewClose(requestID)) - s.ClosedTrials[requestID] = true - } - } else { - // This is not the top rung, so do promotions to the next rung. - nextRung := s.Rungs[rungIndex+1] - for _, promotionID := range rung.promotionsAsync( - requestID, - metric, - s.Divisor(), - ) { - s.TrialRungs[promotionID] = rungIndex + 1 - nextRung.OutstandingTrials++ - if s.EarlyExitTrials[promotionID] { - // We make a recursive call that will behave the same - // as if we'd actually run the promoted job and received - // the worse possible result in return. - return s.promoteAsync(ctx, promotionID, ashaExitedMetricValue) - } - unitsNeeded := mathx.Max(nextRung.UnitsNeeded-rung.UnitsNeeded, 1) - ops = append(ops, NewValidateAfter(promotionID, unitsNeeded)) - addedTrainWorkload = true - s.PendingTrials++ - } - } - - allTrials := len(s.TrialRungs) - s.InvalidTrials - if !addedTrainWorkload && allTrials < s.MaxTrials() { - s.PendingTrials++ - create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) - } - - // Only close out trials once we have reached the MaxTrials for the searcher. - if len(s.Rungs[0].Metrics) == s.MaxTrials() { - ops = append(ops, s.closeOutRungs()...) - } - return ops -} - -// closeOutRungs closes all remaining unpromoted trials in any rungs that have no more outstanding -// trials. -func (s *asyncHalvingSearch) closeOutRungs() []Operation { - var ops []Operation - for _, rung := range s.Rungs { - if rung.OutstandingTrials > 0 { - break - } - for _, trialMetric := range rung.Metrics { - if !trialMetric.Promoted && !s.ClosedTrials[trialMetric.RequestID] { - if !s.EarlyExitTrials[trialMetric.RequestID] { - ops = append(ops, NewClose(trialMetric.RequestID)) - s.ClosedTrials[trialMetric.RequestID] = true - } - } - } - } - return ops -} - -func (s *asyncHalvingSearch) progress( - map[model.RequestID]PartialUnits, map[model.RequestID]bool, -) float64 { - if s.MaxConcurrentTrials() > 0 && s.PendingTrials > s.MaxConcurrentTrials() { - panic("pending trials is greater than max_concurrent_trials") - } - allTrials := len(s.Rungs[0].Metrics) - // Give ourselves an overhead of 20% of MaxTrials when calculating progress. - progress := float64(allTrials) / (1.2 * float64(s.MaxTrials())) - if allTrials == s.MaxTrials() { - numValidTrials := float64(s.TrialsCompleted) - float64(s.InvalidTrials) - progressNoOverhead := numValidTrials / float64(s.MaxTrials()) - progress = math.Max(progressNoOverhead, progress) - } - return progress -} - -func (s *asyncHalvingSearch) trialExitedEarly( - ctx context, requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { - s.PendingTrials-- - if exitedReason == model.InvalidHP || exitedReason == model.InitInvalidHP { - var ops []Operation - s.EarlyExitTrials[requestID] = true - ops = append(ops, NewClose(requestID)) - s.ClosedTrials[requestID] = true - s.InvalidTrials++ - // Remove metrics associated with InvalidHP trial across all rungs - highestRungIndex := s.TrialRungs[requestID] - rung := s.Rungs[highestRungIndex] - rung.OutstandingTrials-- - for rungIndex := 0; rungIndex <= highestRungIndex; rungIndex++ { - rung := s.Rungs[rungIndex] - for i, trialMetric := range rung.Metrics { - if trialMetric.RequestID == requestID { - rung.Metrics = append(rung.Metrics[:i], rung.Metrics[i+1:]...) - break - } - } - } - // Add new trial to searcher queue - create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) - s.PendingTrials++ - return ops, nil - } - s.EarlyExitTrials[requestID] = true - s.ClosedTrials[requestID] = true - return s.promoteAsync(ctx, requestID, ashaExitedMetricValue), nil -} diff --git a/master/pkg/searcher/asha_stopping.go b/master/pkg/searcher/asha_stopping.go index 87f9f645f2b..6c3e103182e 100644 --- a/master/pkg/searcher/asha_stopping.go +++ b/master/pkg/searcher/asha_stopping.go @@ -6,50 +6,79 @@ import ( "math" "sort" + "github.com/determined-ai/determined/master/pkg/ptrs" + "github.com/determined-ai/determined/master/pkg/mathx" "github.com/determined-ai/determined/master/pkg/model" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -// AsyncHalvingStoppingSearch implements a modified version of the asynchronous successive -// halving algorithm (ASHA) that does not require fault tolerance to perform early-stopping. -// For each trial, after a train and validation workload, the algorithm will decide whether -// to stop or continue training the trial based on the ranking of the validation metric -// compared to other trials in a particular rung. Once a trial has been stopped, it will not -// be resumed later; this is why the algorithm does not require fault tolerance. -// The searcher state and config match that of AsyncHalvingSearch but we will only run -// the stopping based version if StopOnce is true. +// AsyncHalvingStoppingSearch implements a version of the asynchronous successive halving +// algorithm (ASHA) that early-stops worse performing trials rather than actively promoting better +// performing trials. When a new validation metric is reported, the searcher decides if the run +// should be stopped based on the ranking of the metric compared to other trials' metrics in the +// same rung. type asyncHalvingStoppingSearch struct { expconf.AsyncHalvingConfig SmallerIsBetter bool + Metric string asyncHalvingSearchState } +type ( + asyncHalvingSearchState struct { + Rungs []*rung `json:"rungs"` + TrialRungs map[model.RequestID]int `json:"trial_rungs"` + // EarlyExitTrials contains trials that exited early that are still considered in the search. + EarlyExitTrials map[model.RequestID]bool `json:"early_exit_trials"` + TrialsCompleted int `json:"trials_completed"` + InvalidTrials int `json:"invalid_trials"` + SearchMethodType SearchMethodType `json:"search_method_type"` + } -func newAsyncHalvingStoppingSearch( - config expconf.AsyncHalvingConfig, smallerIsBetter bool, -) SearchMethod { - rungs := make([]*rung, 0, config.NumRungs()) - var unitsNeeded uint64 - for id := 0; id < config.NumRungs(); id++ { + runMetric struct { + RequestID model.RequestID `json:"request_id"` + Metric model.ExtendedFloat64 `json:"metric"` + } + rung struct { + UnitsNeeded uint64 `json:"units_needed"` + Metrics []runMetric `json:"metrics"` + } +) + +func (r *rung) String() string { + return fmt.Sprintf("Rung{UnitsNeeded: %d, Metrics: %v}", r.UnitsNeeded, r.Metrics) +} + +const ashaExitedMetricValue = math.MaxFloat64 + +func makeRungs(numRungs int, divisor float64, maxLength uint64) []*rung { + rungs := make([]*rung, 0, numRungs) + for i := 0; i < numRungs; i++ { // We divide the MaxLength by downsampling rate to get the target units - // for a rung. - downsamplingRate := math.Pow(config.Divisor(), float64(config.NumRungs()-id-1)) - unitsNeeded += mathx.Max(uint64(float64(config.MaxLength().Units)/downsamplingRate), 1) + // for a bracketRung. + downsamplingRate := math.Pow(divisor, float64(numRungs-i-1)) + unitsNeeded := mathx.Max(uint64(float64(maxLength)/downsamplingRate), 1) rungs = append(rungs, &rung{ - UnitsNeeded: unitsNeeded, - OutstandingTrials: 0, + UnitsNeeded: unitsNeeded, }) } + return rungs +} + +func newAsyncHalvingStoppingSearch( + config expconf.AsyncHalvingConfig, smallerIsBetter bool, metric string, +) SearchMethod { + rungs := makeRungs(config.NumRungs(), config.Divisor(), config.Length().Units) return &asyncHalvingStoppingSearch{ AsyncHalvingConfig: config, SmallerIsBetter: smallerIsBetter, + Metric: metric, asyncHalvingSearchState: asyncHalvingSearchState{ Rungs: rungs, TrialRungs: make(map[model.RequestID]int), EarlyExitTrials: make(map[model.RequestID]bool), - ClosedTrials: make(map[model.RequestID]bool), SearchMethodType: ASHASearch, }, } @@ -63,43 +92,34 @@ func (s *asyncHalvingStoppingSearch) Restore(state json.RawMessage) error { return json.Unmarshal(state, &s.asyncHalvingSearchState) } -// promotions handles bookkeeping of validation metrics and decides whether to continue -// training the current trial. -func (r *rung) continueTraining(requestID model.RequestID, metric float64, divisor float64) bool { - // Compute cutoff for promotion to next rung to continue training. - numPromote := mathx.Max(int(float64(len(r.Metrics)+1)/divisor), 1) - - // Insert the new trial result in the appropriate place in the sorted list. +// insertMetric adds a completed validation metric to the rung in the appropriate order of all +// the metrics in the rung thus far and returns the insert index. +func (r *rung) insertMetric(requestID model.RequestID, metric float64) int { insertIndex := sort.Search( len(r.Metrics), func(i int) bool { return float64(r.Metrics[i].Metric) >= metric }, ) - // We will continue training if trial ranked in top 1/divisor for the rung or - // if there are fewere than divisor trials in the rung. - promoteNow := insertIndex < numPromote - r.Metrics = append(r.Metrics, trialMetric{}) + // Add metrics to state. + r.Metrics = append(r.Metrics, runMetric{}) copy(r.Metrics[insertIndex+1:], r.Metrics[insertIndex:]) - r.Metrics[insertIndex] = trialMetric{ + r.Metrics[insertIndex] = runMetric{ RequestID: requestID, Metric: model.ExtendedFloat64(metric), - Promoted: promoteNow, } - - return promoteNow + return insertIndex } -func (s *asyncHalvingStoppingSearch) initialOperations(ctx context) ([]Operation, error) { - // The number of initialOperations will control the degree of parallelism - // of the search experiment since we guarantee that each validationComplete - // call will return a new train workload until we reach MaxTrials. - - // We will use searcher config field if available. - // Otherwise we will default to a number of trials that will - // guarantee at least one trial at the top rung. - var ops []Operation +// initialTrials specifies the initial trials that the search will create. +// Since each run can only stop and create a new run, this effectively controls the degree of +// parallelism of the search. +func (s *asyncHalvingStoppingSearch) initialTrials(ctx context) ([]Action, error) { + var actions []Action var maxConcurrentTrials int + // Use searcher config fields to determine number of trials if set. + // Otherwise, default to a number of trials that guarantees at least one run will continue + // to the top rung. if s.MaxConcurrentTrials() > 0 { maxConcurrentTrials = mathx.Min(s.MaxConcurrentTrials(), s.MaxTrials()) } else { @@ -112,111 +132,113 @@ func (s *asyncHalvingStoppingSearch) initialOperations(ctx context) ([]Operation for trial := 0; trial < maxConcurrentTrials; trial++ { create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) + ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + actions = append(actions, create) } - return ops, nil + return actions, nil } func (s *asyncHalvingStoppingSearch) trialCreated( ctx context, requestID model.RequestID, -) ([]Operation, error) { - s.Rungs[0].OutstandingTrials++ +) ([]Action, error) { s.TrialRungs[requestID] = 0 return nil, nil } -func (s *asyncHalvingStoppingSearch) trialClosed( +func (s *asyncHalvingStoppingSearch) trialExited( ctx context, requestID model.RequestID, -) ([]Operation, error) { +) ([]Action, error) { s.TrialsCompleted++ - s.ClosedTrials[requestID] = true return nil, nil } +// validationCompleted handles every validation metric reported by a run and returns any resulting +// actions the searcher would like to take. func (s *asyncHalvingStoppingSearch) validationCompleted( - ctx context, requestID model.RequestID, metric interface{}, op ValidateAfter, -) ([]Operation, error) { - value, ok := metric.(float64) + ctx context, requestID model.RequestID, metrics map[string]interface{}, +) ([]Action, error) { + timeStep, value, err := s.getMetric(metrics) + if err != nil { + return nil, err + } + + ops := s.doEarlyStopping(requestID, *timeStep, *value) + allTrials := len(s.TrialRungs) - s.InvalidTrials + if len(ops) > 0 && allTrials < s.MaxTrials() { + create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + ops = append(ops, create) + } + return ops, nil +} + +// getMetric reads the searcher metric and time step value from the reported validation metrics. +func (s *asyncHalvingStoppingSearch) getMetric(metrics map[string]interface{}) (*uint64, *float64, error) { + searcherMetric, ok := metrics[s.Metric].(float64) + if !ok { - return nil, fmt.Errorf("unexpected metric type for ASHA built-in search method %v", value) + return nil, nil, fmt.Errorf("error parsing searcher metric (%s) from validation metrics: %v", s.Metric, metrics) } if !s.SmallerIsBetter { - value *= -1 + searcherMetric *= -1 + } + + unit := string(s.Length().Unit) + stepNum, ok := metrics[unit].(float64) + if !ok { + return nil, nil, fmt.Errorf("error parsing searcher time metric (%s) in validation metrics: %v", unit, metrics) } - return s.promoteAsync(ctx, requestID, value), nil + + return ptrs.Ptr(uint64(stepNum)), &searcherMetric, nil } -func (s *asyncHalvingStoppingSearch) promoteAsync( - ctx context, requestID model.RequestID, metric float64, -) []Operation { - // Upon a validation complete, we should return at least one more train&val workload - // unless the bracket of successive halving is finished. +// doEarlyStopping handles early-stopping and record-keeping logic for a validation metric reported to the +// searcher. +// If the metric qualifies the run for a rung but is not in the top 1/divisor trials for that rung, +// doEarlyStopping will return a single `searcher.Stop` action. Otherwise, no actions will be returned. +func (s *asyncHalvingStoppingSearch) doEarlyStopping( + requestID model.RequestID, timeStep uint64, metric float64, +) []Action { rungIndex := s.TrialRungs[requestID] - rung := s.Rungs[rungIndex] - rung.OutstandingTrials-- - addedTrainWorkload := false - - var ops []Operation - // If the trial has completed the top rung's validation, close the trial. - if rungIndex == s.NumRungs()-1 { - rung.Metrics = append(rung.Metrics, - trialMetric{ - RequestID: requestID, - Metric: model.ExtendedFloat64(metric), - }, - ) + var actions []Action + + // Starting at current rung, check if run should continue to next rung or early-stop. + // Since validations aren't controlled by searcher, they could complete > 1 rungs at a time. + for r := rungIndex; r < s.NumRungs(); r++ { + rung := s.Rungs[r] + s.TrialRungs[requestID] = r - if !s.EarlyExitTrials[requestID] { - ops = append(ops, NewClose(requestID)) - s.ClosedTrials[requestID] = true + // If run has not completed enough steps to qualify for this rung, exit. + if timeStep < rung.UnitsNeeded { + return actions } - } else { - // This is not the top rung, so do promotions to the next rung. - nextRung := s.Rungs[rungIndex+1] - // We need to run continueTraining even if the trial was terminated early so that we - // can add the metric to the rung. - promoteTrial := rung.continueTraining( - requestID, - metric, - s.Divisor(), - ) - // In contrast to promotion-based ASHA, we will not let early-exited trials add - // -/+inf metrics to higher rungs even if portion of terminated trials in bottom rung - // is greater than 1 - 1 / divisor. - if !s.EarlyExitTrials[requestID] { - if promoteTrial { - s.TrialRungs[requestID] = rungIndex + 1 - nextRung.OutstandingTrials++ - unitsNeeded := mathx.Max(nextRung.UnitsNeeded-rung.UnitsNeeded, 1) - ops = append(ops, NewValidateAfter(requestID, unitsNeeded)) - addedTrainWorkload = true - } else { - ops = append(ops, NewClose(requestID)) - s.ClosedTrials[requestID] = true - } + + insertIndex := rung.insertMetric(requestID, metric) + + // If this is the top rung, close the run and exit. + if r == s.NumRungs()-1 { + actions = append(actions, NewStop(requestID)) + return actions } - } - allTrials := len(s.TrialRungs) - s.InvalidTrials - if !addedTrainWorkload && allTrials < s.MaxTrials() { - create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) - } + // Top 1/divisor trials should continue, 1 - 1/divisor trials should be stopped. + // If trials < divisor, continue only if this is the best performing run so far. + numContinue := mathx.Max(int(float64(len(rung.Metrics))/s.Divisor()), 1) + + if insertIndex >= numContinue { + actions = append(actions, NewStop(requestID)) + return actions + } - return ops + // Continue to next rung. + } + return actions } func (s *asyncHalvingStoppingSearch) progress( - map[model.RequestID]PartialUnits, map[model.RequestID]bool, + map[model.RequestID]float64, map[model.RequestID]bool, ) float64 { allTrials := len(s.Rungs[0].Metrics) - // Give ourselves an overhead of 20% of maxTrials when calculating progress. + // Give ourselves an overhead of 20% of max trials when calculating progress. progress := float64(allTrials) / (1.2 * float64(s.MaxTrials())) if allTrials == s.MaxTrials() { numValidTrials := float64(s.TrialsCompleted) - float64(s.InvalidTrials) @@ -228,12 +250,11 @@ func (s *asyncHalvingStoppingSearch) progress( func (s *asyncHalvingStoppingSearch) trialExitedEarly( ctx context, requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { +) ([]Action, error) { if exitedReason == model.InvalidHP || exitedReason == model.InitInvalidHP { - var ops []Operation + var actions []Action s.EarlyExitTrials[requestID] = true - ops = append(ops, NewClose(requestID)) - s.ClosedTrials[requestID] = true + actions = append(actions, NewStop(requestID)) s.InvalidTrials++ // Remove metrics associated with InvalidHP trial across all rungs highestRungIndex := s.TrialRungs[requestID] @@ -247,14 +268,26 @@ func (s *asyncHalvingStoppingSearch) trialExitedEarly( } } // Add new trial to searcher queue - create := NewCreate( - ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - s.TrialRungs[create.RequestID] = 0 - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.Rungs[0].UnitsNeeded)) - return ops, nil + create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + actions = append(actions, create) + return actions, nil } s.EarlyExitTrials[requestID] = true - s.ClosedTrials[requestID] = true - return s.promoteAsync(ctx, requestID, ashaExitedMetricValue), nil + + var actions []Action + rungIndex := s.TrialRungs[requestID] + rung := s.Rungs[rungIndex] + + rung.insertMetric(requestID, ashaExitedMetricValue) + + allTrials := len(s.TrialRungs) - s.InvalidTrials + if allTrials < s.MaxTrials() { + create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + actions = append(actions, create) + } + return actions, nil +} + +func (s *asyncHalvingStoppingSearch) Type() SearchMethodType { + return s.SearchMethodType } diff --git a/master/pkg/searcher/asha_stopping_test.go b/master/pkg/searcher/asha_stopping_test.go index 0228351d9bb..87cd2a1ecd7 100644 --- a/master/pkg/searcher/asha_stopping_test.go +++ b/master/pkg/searcher/asha_stopping_test.go @@ -4,262 +4,448 @@ package searcher import ( "testing" + "github.com/stretchr/testify/require" + + "github.com/determined-ai/determined/master/pkg/model" "github.com/determined-ai/determined/master/pkg/ptrs" "github.com/determined-ai/determined/master/pkg/schemas" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -func TestASHAStoppingSearcherRecords(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(576000)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - RawStopOnce: ptrs.Ptr(true), - RawMaxConcurrentTrials: ptrs.Ptr(2), +func TestMakeRungs(t *testing.T) { + cases := []struct { + numRungs int + maxTime uint64 + divisor float64 + expectedRungs []*rung + }{ + { + numRungs: 3, + maxTime: 9, + divisor: float64(3), + expectedRungs: []*rung{ + { + UnitsNeeded: 1, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, + }, + }, + }, + { + numRungs: 4, + maxTime: 10, + divisor: float64(2), + expectedRungs: []*rung{ + { + UnitsNeeded: 1, + }, + { + UnitsNeeded: 2, + }, + { + UnitsNeeded: 5, + }, + { + UnitsNeeded: 10, + }, + }, + }, + { + numRungs: 1, + maxTime: 9, + divisor: float64(3), + expectedRungs: []*rung{ + { + UnitsNeeded: 9, + }, + }, + }, + { + numRungs: 3, + maxTime: 900, + divisor: float64(3), + expectedRungs: []*rung{ + { + UnitsNeeded: 100, + }, + { + UnitsNeeded: 300, + }, + { + UnitsNeeded: 900, + }, + }, + }, } - actual = schemas.WithDefaults(actual) - // Stopping-based ASHA will only promote if a trial is in top 1/3 of trials in the rung or if - // there have been no promotions so far. Since trials cannot be restarted and metrics increase - // for later trials, only the first trial will be promoted and all others will be stopped on - // the first rung. See continueTraining method in asha_stopping.go for the logic. - expected := [][]ValidateAfter{ - toOps("64000R 192000R 576000R"), - toOps("64000R"), toOps("64000R"), toOps("64000R"), - toOps("64000R"), toOps("64000R"), toOps("64000R"), - toOps("64000R"), toOps("64000R"), toOps("64000R"), - toOps("64000R"), toOps("64000R"), + for _, c := range cases { + rungs := makeRungs(c.numRungs, c.divisor, c.maxTime) + require.Equal(t, c.expectedRungs, rungs) } - checkSimulation(t, newAsyncHalvingStoppingSearch(actual, true), nil, TrialIDMetric, expected) } -func TestASHAStoppingSearcherBatches(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - RawStopOnce: ptrs.Ptr(true), - RawMaxConcurrentTrials: ptrs.Ptr(2), +func TestInsertCompletedMetric(t *testing.T) { + cases := []struct { + newMetric float64 + existingMetrics []float64 + expectedInsertIndex int + expectedMetrics []float64 + }{ + { + newMetric: 1.2, + existingMetrics: []float64{0.0, 1.5, 2.1}, + expectedInsertIndex: 1, + expectedMetrics: []float64{0.0, 1.2, 1.5, 2.1}, + }, + { + newMetric: 3.0, + existingMetrics: []float64{0.0, 1.5, 2.0}, + expectedInsertIndex: 3, + expectedMetrics: []float64{0.0, 1.5, 2.0, 3.0}, + }, + { + newMetric: -3.4, + existingMetrics: []float64{-3.0, -2.0, -1.0}, + expectedInsertIndex: 0, + expectedMetrics: []float64{-3.4, -3.0, -2.0, -1.0}, + }, + { + newMetric: 1.2, + existingMetrics: []float64{}, + expectedInsertIndex: 0, + expectedMetrics: []float64{1.2}, + }, + } + rung := rung{ + UnitsNeeded: 0, + Metrics: []runMetric{}, } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("1000B 3000B 9000B"), - toOps("1000B"), toOps("1000B"), toOps("1000B"), - toOps("1000B"), toOps("1000B"), toOps("1000B"), - toOps("1000B"), toOps("1000B"), toOps("1000B"), - toOps("1000B"), toOps("1000B"), + for _, c := range cases { + var currentMetrics []runMetric + for _, m := range c.existingMetrics { + currentMetrics = append(currentMetrics, runMetric{ + Metric: model.ExtendedFloat64(m), + }) + } + rung.Metrics = currentMetrics + insertIndex := rung.insertMetric(model.RequestID{}, c.newMetric) + var addedMetrics []float64 + for _, m := range rung.Metrics { + addedMetrics = append(addedMetrics, float64(m.Metric)) + } + require.Equal(t, c.expectedInsertIndex, insertIndex) + require.Equal(t, c.expectedMetrics, addedMetrics) } - checkSimulation(t, newAsyncHalvingStoppingSearch(actual, true), nil, TrialIDMetric, expected) } -func TestASHAStoppingSearcherEpochs(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInEpochs(12)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - RawStopOnce: ptrs.Ptr(true), - RawMaxConcurrentTrials: ptrs.Ptr(2), +func TestGetMetric(t *testing.T) { + cases := []struct { + metrics map[string]interface{} + metricName string + timeMetricName string + timeMetric int + smallerIsBetter bool + expectedTimeStep int + expectedMetric float64 + expectedError string + }{ + { + metrics: map[string]interface{}{"loss": 0.25, "batches": 2.0}, + metricName: "loss", + timeMetricName: "batches", + smallerIsBetter: true, + expectedTimeStep: 2, + expectedMetric: 0.25, + }, + { + metrics: map[string]interface{}{"loss": 0.2, "batches": 3.0}, + metricName: "loss", + timeMetricName: "batches", + smallerIsBetter: false, + expectedTimeStep: 3, + expectedMetric: -0.2, + }, + { + metrics: map[string]interface{}{"loss": 1.2, "custom_time_step": 5.0}, + metricName: "loss", + timeMetricName: "custom_time_step", + smallerIsBetter: true, + expectedTimeStep: 5, + expectedMetric: 1.2, + }, + { + metrics: model.JSONObj{"batches": 2.0}, + metricName: "loss", + timeMetricName: "batches", + smallerIsBetter: true, + expectedError: "error parsing searcher metric", + }, } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("1E 4E 12E"), - toOps("1E"), toOps("1E"), toOps("1E"), - toOps("1E"), toOps("1E"), toOps("1E"), - toOps("1E"), toOps("1E"), toOps("1E"), - toOps("1E"), toOps("1E"), + + searcher := &asyncHalvingStoppingSearch{} + for _, c := range cases { + searcher.Metric = c.metricName + searcher.RawTimeMetric = &c.timeMetricName + searcher.SmallerIsBetter = c.smallerIsBetter + searcher.RawMaxTime = ptrs.Ptr(10) + stepNum, searcherMetric, err := searcher.getMetric(c.metrics) + if c.expectedError != "" { + require.ErrorContains(t, err, c.expectedError) + } else { + require.NoError(t, err, "got unexpected error %v: %v", err, c) + require.Equal(t, uint64(c.expectedTimeStep), *stepNum, "time step does not match") + require.InEpsilon(t, c.expectedMetric, *searcherMetric, 0.001, "searcher metric value doesn't match") + } } - checkSimulation(t, newAsyncHalvingStoppingSearch(actual, true), nil, TrialIDMetric, expected) } -func TestASHAStoppingSearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ +func TestStopTrials(t *testing.T) { + type testMetric struct { + rID model.RequestID + timeStep uint64 + metric float64 + } + + cases := []struct { + name string + rungs []*rung + runRungs map[model.RequestID]int + divisor float64 + metric testMetric + expectedOps []Action + expectedRunRungs map[model.RequestID]int + expectedRungs []*rung + }{ { - name: "smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B"), 0.11), - newConstantPredefinedTrial(toOps("1000B"), 0.12), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + name: "first validation", + rungs: []*rung{ + { + UnitsNeeded: 1, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, }, }, - }, - { - name: "smaller is better (round robin)", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), + runRungs: map[model.RequestID]int{ + mockRequestID(1): 0, }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), - }, + divisor: 3.0, + metric: testMetric{ + rID: mockRequestID(1), + timeStep: 1, + metric: 0.5, }, - }, - { - name: "smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.11), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.12), + expectedRunRungs: map[model.RequestID]int{ + mockRequestID(1): 1, }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + expectedRungs: []*rung{ + { + UnitsNeeded: 1, + Metrics: []runMetric{ + { + RequestID: mockRequestID(1), + Metric: model.ExtendedFloat64(0.5), + }, + }, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, }, }, + expectedOps: []Action(nil), }, { - name: "smaller is not better (round robin)", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + name: "second validation better than first", + rungs: []*rung{ + { + UnitsNeeded: 1, + Metrics: []runMetric{ + { + RequestID: mockRequestID(1), + Metric: model.ExtendedFloat64(0.5), + }, + }, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, }, }, - }, - { - name: "early exit -- smaller is better (round robin)", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newEarlyExitPredefinedTrial(toOps("1000B 3000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.04), + runRungs: map[model.RequestID]int{ + mockRequestID(1): 1, + mockRequestID(2): 0, }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), - }, + divisor: 3.0, + metric: testMetric{ + rID: mockRequestID(2), + timeStep: 1, + metric: 0.4, }, - }, - { - name: "early exit -- smaller is not better (round robin)", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.03), - newEarlyExitPredefinedTrial(toOps("1000B 3000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.04), + expectedRunRungs: map[model.RequestID]int{ + mockRequestID(1): 1, + mockRequestID(2): 1, }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + expectedRungs: []*rung{ + { + UnitsNeeded: 1, + Metrics: []runMetric{ + { + RequestID: mockRequestID(2), + Metric: model.ExtendedFloat64(0.4), + }, + { + RequestID: mockRequestID(1), + Metric: model.ExtendedFloat64(0.5), + }, + }, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, }, }, + expectedOps: []Action(nil), }, { - name: "single rung bracket", - expectedTrials: []predefinedTrial{ - // The first trial is promoted due to asynchronous - // promotions despite being below top 1/3 of trials in - // base rung. - newConstantPredefinedTrial(toOps("9000B"), 0.05), - newConstantPredefinedTrial(toOps("9000B"), 0.06), - newConstantPredefinedTrial(toOps("9000B"), 0.07), - newConstantPredefinedTrial(toOps("9000B"), 0.08), + name: "second validation worse than first", + rungs: []*rung{ + { + UnitsNeeded: 1, + Metrics: []runMetric{ + { + RequestID: mockRequestID(1), + Metric: model.ExtendedFloat64(0.5), + }, + }, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, + }, + }, + runRungs: map[model.RequestID]int{ + mockRequestID(1): 1, + mockRequestID(2): 0, }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(1), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(4), - RawDivisor: ptrs.Ptr[float64](3), - RawStopOnce: ptrs.Ptr(true), + divisor: 3.0, + metric: testMetric{ + rID: mockRequestID(2), + timeStep: 1, + metric: 0.6, + }, + expectedRunRungs: map[model.RequestID]int{ + mockRequestID(1): 1, + mockRequestID(2): 0, + }, + expectedRungs: []*rung{ + { + UnitsNeeded: 1, + Metrics: []runMetric{ + { + RequestID: mockRequestID(1), + Metric: model.ExtendedFloat64(0.5), + }, + { + RequestID: mockRequestID(2), + Metric: model.ExtendedFloat64(0.6), + }, + }, + }, + { + UnitsNeeded: 3, + }, + { + UnitsNeeded: 9, }, }, + expectedOps: []Action{Stop{RequestID: mockRequestID(2)}}, }, } - runValueSimulationTestCases(t, testCases) + searcher := &asyncHalvingStoppingSearch{} + for _, c := range cases { + searcher.TrialRungs = c.runRungs + searcher.Rungs = c.rungs + searcher.AsyncHalvingConfig.RawDivisor = &c.divisor + numRungs := len(c.rungs) + searcher.AsyncHalvingConfig.RawNumRungs = &numRungs + ops := searcher.doEarlyStopping(c.metric.rID, c.metric.timeStep, c.metric.metric) + require.Equal(t, c.expectedOps, ops) + require.Equal(t, c.expectedRungs, searcher.Rungs) + require.Equal(t, c.expectedRunRungs, searcher.TrialRungs) + } +} + +func TestASHAStoppingSearchMethod(t *testing.T) { + maxConcurrentTrials := 3 + maxTrials := 10 + divisor := 3.0 + maxTime := 900 + metric := "val_loss" + config := expconf.AsyncHalvingConfig{ + RawMaxTime: &maxTime, + RawDivisor: &divisor, + RawNumRungs: ptrs.Ptr(3), + RawMaxConcurrentTrials: &maxConcurrentTrials, + RawMaxTrials: &maxTrials, + RawTimeMetric: ptrs.Ptr("batches"), + } + searcherConfig := expconf.SearcherConfig{ + RawAsyncHalvingConfig: &config, + RawSmallerIsBetter: ptrs.Ptr(true), + RawMetric: ptrs.Ptr(metric), + } + config = schemas.WithDefaults(config) + searcherConfig = schemas.WithDefaults(searcherConfig) + + intHparam := &expconf.IntHyperparameter{RawMaxval: 10, RawCount: ptrs.Ptr(3)} + hparams := expconf.Hyperparameters{ + "x": expconf.Hyperparameter{RawIntHyperparameter: intHparam}, + } + + // Create a new test searcher and verify brackets/rungs. + testSearchRunner := NewTestSearchRunner(t, searcherConfig, hparams) + search := testSearchRunner.method.(*asyncHalvingStoppingSearch) + + expectedRungs := []*rung{ + {UnitsNeeded: uint64(100)}, + {UnitsNeeded: uint64(300)}, + {UnitsNeeded: uint64(900)}, + } + + require.Equal(t, expectedRungs, search.Rungs) + + // Simulate the search. + testSearchRunner.run(900, 100, true) + + // Expect 10 total trials. + // Since we reported progressively worse metrics, only one trial should continue. + require.Len(t, testSearchRunner.trials, maxTrials) + stoppedAt900 := 0 + stoppedAt100 := 0 + for _, tr := range testSearchRunner.trials { + if tr.stoppedAt == 900 { + stoppedAt900++ + } + if tr.stoppedAt == 100 { + stoppedAt100++ + } + } + require.Equal(t, 1, stoppedAt900) + require.Equal(t, 9, stoppedAt100) } diff --git a/master/pkg/searcher/asha_test.go b/master/pkg/searcher/asha_test.go deleted file mode 100644 index 393dc214a2a..00000000000 --- a/master/pkg/searcher/asha_test.go +++ /dev/null @@ -1,231 +0,0 @@ -//nolint:exhaustruct -package searcher - -import ( - "testing" - - "github.com/determined-ai/determined/master/pkg/ptrs" - "github.com/determined-ai/determined/master/pkg/schemas" - "github.com/determined-ai/determined/master/pkg/schemas/expconf" -) - -func TestASHASearcherRecords(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(576000)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("64000R"), toOps("64000R"), toOps("64000R"), - toOps("64000R"), toOps("64000R"), toOps("64000R"), - toOps("64000R"), toOps("64000R"), - toOps("64000R 192000R"), - toOps("64000R 192000R"), - toOps("64000R 192000R"), - toOps("64000R 192000R 576000R"), - } - checkSimulation(t, newAsyncHalvingSearch(actual, true), nil, ConstantValidation, expected) -} - -func TestASHASearcherBatches(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("1000B"), toOps("1000B"), toOps("1000B"), - toOps("1000B"), toOps("1000B"), toOps("1000B"), - toOps("1000B"), toOps("1000B"), - toOps("1000B 3000B"), - toOps("1000B 3000B"), - toOps("1000B 3000B"), - toOps("1000B 3000B 9000B"), - } - checkSimulation(t, newAsyncHalvingSearch(actual, true), nil, ConstantValidation, expected) -} - -func TestASHASearcherEpochs(t *testing.T) { - actual := expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInEpochs(12)), - RawDivisor: ptrs.Ptr[float64](3), - RawMaxTrials: ptrs.Ptr(12), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("1E"), toOps("1E"), toOps("1E"), - toOps("1E"), toOps("1E"), toOps("1E"), - toOps("1E"), toOps("1E"), - toOps("1E 4E"), - toOps("1E 4E"), - toOps("1E 4E"), - toOps("1E 4E 12E"), - } - checkSimulation(t, newAsyncHalvingSearch(actual, true), nil, ConstantValidation, expected) -} - -func TestASHASearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ - { - name: "smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B"), 0.11), - newConstantPredefinedTrial(toOps("1000B"), 0.12), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - { - name: "early exit -- smaller is better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.02), - newEarlyExitPredefinedTrial(toOps("1000B 3000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B"), 0.11), - newConstantPredefinedTrial(toOps("1000B"), 0.12), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - { - name: "smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.12), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.11), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - { - name: "early exit -- smaller is not better", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.12), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.11), - newEarlyExitPredefinedTrial(toOps("1000B 3000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.09), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B"), 0.01), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(false), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - { - name: "async promotions", - expectedTrials: []predefinedTrial{ - // The first trial is promoted due to asynchronous - // promotions despite being below top 1/3 of trials in - // base rung. - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.10), - newConstantPredefinedTrial(toOps("1000B"), 0.11), - newEarlyExitPredefinedTrial(toOps("1000B"), 0.12), - newConstantPredefinedTrial(toOps("1000B 3000B 9000B"), 0.01), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.02), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.03), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.04), - newConstantPredefinedTrial(toOps("1000B"), 0.05), - newConstantPredefinedTrial(toOps("1000B"), 0.06), - newConstantPredefinedTrial(toOps("1000B"), 0.07), - newConstantPredefinedTrial(toOps("1000B"), 0.08), - newConstantPredefinedTrial(toOps("1000B"), 0.09), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(12), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - { - name: "single rung bracket", - expectedTrials: []predefinedTrial{ - // The first trial is promoted due to asynchronous - // promotions despite being below top 1/3 of trials in - // base rung. - newConstantPredefinedTrial(toOps("9000B"), 0.05), - newConstantPredefinedTrial(toOps("9000B"), 0.06), - newConstantPredefinedTrial(toOps("9000B"), 0.07), - newConstantPredefinedTrial(toOps("9000B"), 0.08), - }, - config: expconf.SearcherConfig{ - RawSmallerIsBetter: ptrs.Ptr(true), - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(1), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(4), - RawDivisor: ptrs.Ptr[float64](3), - }, - }, - }, - } - - runValueSimulationTestCases(t, testCases) -} diff --git a/master/pkg/searcher/grid.go b/master/pkg/searcher/grid.go index 2b2592b8994..e6f9c2a469a 100644 --- a/master/pkg/searcher/grid.go +++ b/master/pkg/searcher/grid.go @@ -12,8 +12,9 @@ import ( type ( // gridSearchState stores the state for grid. The state will track the remaining hp settings - // that have yet to be created for evaluation. PendingTrials tracks how many trials have - // active workloads and is used to check max_concurrent_trials for the searcher is respected. + // that have yet to be created for evaluation. RemainingTrials tracks how many trials are + // currently in progress and is used to check max_concurrent_trials for the searcher is + // respected. // Tracking searcher type on restart gives us the ability to differentiate grid searches // in a shim if needed. gridSearchState struct { @@ -27,7 +28,6 @@ type ( defaultSearchMethod expconf.GridConfig gridSearchState - trials int } ) @@ -41,77 +41,68 @@ func newGridSearch(config expconf.GridConfig) SearchMethod { } } -func (s *gridSearch) initialOperations(ctx context) ([]Operation, error) { +func (s *gridSearch) initialTrials(ctx context) ([]Action, error) { grid := newHyperparameterGrid(ctx.hparams) - s.trials = len(grid) s.RemainingTrials = append(s.RemainingTrials, grid...) - initialTrials := s.trials + initialTrials := len(grid) if s.MaxConcurrentTrials() > 0 { - initialTrials = mathx.Min(s.trials, s.MaxConcurrentTrials()) + initialTrials = mathx.Min(initialTrials, s.MaxConcurrentTrials()) } - var ops []Operation + var actions []Action for trial := 0; trial < initialTrials; trial++ { params := s.RemainingTrials[len(s.RemainingTrials)-1] s.RemainingTrials = s.RemainingTrials[:len(s.RemainingTrials)-1] - create := NewCreate(ctx.rand, params, model.TrialWorkloadSequencerType) - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.MaxLength().Units)) - ops = append(ops, NewClose(create.RequestID)) + create := NewCreate(ctx.rand, params) + actions = append(actions, create) s.PendingTrials++ } - return ops, nil + return actions, nil } func (s *gridSearch) progress( - trialProgress map[model.RequestID]PartialUnits, + trialProgress map[model.RequestID]float64, trialsClosed map[model.RequestID]bool, ) float64 { if s.MaxConcurrentTrials() > 0 && s.PendingTrials > s.MaxConcurrentTrials() { panic("pending trials is greater than max_concurrent_trials") } - // XXX // Progress is calculated as follows: // - InvalidHP trials contribute max_length units since they represent one config within the grid // and are not replaced with a new config as with random search // - Other early-exit trials contribute max_length units // - In progress trials contribute units trained - unitsCompleted := 0. - // trialsClosed includes InvalidHP trials and other exited trials - for range trialsClosed { - unitsCompleted += float64(s.MaxLength().Units) - } - // trialProgress records units trained for all trials except for InvalidHP trials. - // This can overlap with trialsClosed so we need to be sure to not double count. + trialProgresses := 0. + for k, v := range trialProgress { - if !trialsClosed[k] { - unitsCompleted += float64(v) + if trialsClosed[k] { + trialProgresses += 1.0 + } else { + trialProgresses += v } } - unitsExpected := s.MaxLength().Units * uint64(s.trials) - return unitsCompleted / float64(unitsExpected) + + return trialProgresses / float64(len(trialProgress)) } // trialExitedEarly does nothing since grid does not take actions based on // search status or progress. func (s *gridSearch) trialExitedEarly( ctx context, requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { +) ([]Action, error) { return nil, nil } -func (s *gridSearch) trialClosed(ctx context, _ model.RequestID) ([]Operation, error) { +func (s *gridSearch) trialExited(ctx context, _ model.RequestID) ([]Action, error) { s.PendingTrials-- - var ops []Operation + var actions []Action if len(s.RemainingTrials) > 0 { params := s.RemainingTrials[len(s.RemainingTrials)-1] s.RemainingTrials = s.RemainingTrials[:len(s.RemainingTrials)-1] - create := NewCreate(ctx.rand, params, model.TrialWorkloadSequencerType) - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.MaxLength().Units)) - ops = append(ops, NewClose(create.RequestID)) + create := NewCreate(ctx.rand, params) + actions = append(actions, create) s.PendingTrials++ } - return ops, nil + return actions, nil } func newHyperparameterGrid(params expconf.Hyperparameters) []HParamSample { @@ -292,3 +283,7 @@ func (s *gridSearch) Restore(state json.RawMessage) error { } return json.Unmarshal(state, &s.gridSearchState) } + +func (s *gridSearch) Type() SearchMethodType { + return s.SearchMethodType +} diff --git a/master/pkg/searcher/grid_test.go b/master/pkg/searcher/grid_test.go index cffb52f314d..705124660fc 100644 --- a/master/pkg/searcher/grid_test.go +++ b/master/pkg/searcher/grid_test.go @@ -3,14 +3,16 @@ package searcher import ( "encoding/json" + "slices" "strconv" "testing" + "github.com/stretchr/testify/require" + "github.com/pkg/errors" "gotest.tools/assert" "github.com/determined-ai/determined/master/pkg/ptrs" - "github.com/determined-ai/determined/master/pkg/schemas" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) @@ -256,63 +258,36 @@ func TestGridIntCountNegative(t *testing.T) { assert.DeepEqual(t, actual, expected) } -func TestGridSearcherRecords(t *testing.T) { - actual := expconf.GridConfig{RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(19200))} - actual = schemas.WithDefaults(actual) - params := generateHyperparameters([]int{2, 1, 3}) - expected := [][]ValidateAfter{ - toOps("19200R"), toOps("19200R"), toOps("19200R"), - toOps("19200R"), toOps("19200R"), toOps("19200R"), +func TestGridSearchMethod(t *testing.T) { + maxConcurrentTrials := 2 + gridConfig := expconf.GridConfig{ + RawMaxConcurrentTrials: ptrs.Ptr(maxConcurrentTrials), } - searchMethod := newGridSearch(actual) - checkSimulation(t, searchMethod, params, ConstantValidation, expected) -} - -func TestGridSearcherBatches(t *testing.T) { - actual := expconf.GridConfig{RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(300))} - actual = schemas.WithDefaults(actual) - params := generateHyperparameters([]int{2, 1, 3}) - expected := [][]ValidateAfter{ - toOps("300B"), toOps("300B"), toOps("300B"), - toOps("300B"), toOps("300B"), toOps("300B"), + searcherConfig := expconf.SearcherConfig{ + RawGridConfig: &gridConfig, + RawMetric: ptrs.Ptr("loss"), } - searchMethod := newGridSearch(actual) - checkSimulation(t, searchMethod, params, ConstantValidation, expected) -} - -func TestGridSearcherEpochs(t *testing.T) { - actual := expconf.GridConfig{RawMaxLength: ptrs.Ptr(expconf.NewLengthInEpochs(3))} - actual = schemas.WithDefaults(actual) - params := generateHyperparameters([]int{2, 1, 3}) - expected := [][]ValidateAfter{ - toOps("3E"), toOps("3E"), toOps("3E"), - toOps("3E"), toOps("3E"), toOps("3E"), - } - searchMethod := newGridSearch(actual) - checkSimulation(t, searchMethod, params, ConstantValidation, expected) -} - -func TestGridSearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ - { - name: "test grid search method", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("300B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.1), - newConstantPredefinedTrial(toOps("300B"), 0.1), - newEarlyExitPredefinedTrial(toOps("300B"), .1), - }, - config: expconf.SearcherConfig{ - RawGridConfig: &expconf.GridConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(300)), - RawMaxConcurrentTrials: ptrs.Ptr(2), - }, + hparams := expconf.Hyperparameters{ + "a": expconf.Hyperparameter{ + RawIntHyperparameter: &expconf.IntHyperparameter{ + RawMinval: 0, RawMaxval: 3, RawCount: ptrs.Ptr(4), }, - hparams: generateHyperparameters([]int{2, 1, 3}), }, } + allHparams := []int{0, 1, 2, 3} + + testSearchRunner := NewTestSearchRunner(t, searcherConfig, hparams) - runValueSimulationTestCases(t, testCases) + // Simulate the search and check resulting trials. + testSearchRunner.run(100, 10, false) + + // 4 total trials for each hparam in space, all should run to completion. + var runHparams []int + require.Len(t, testSearchRunner.trials, len(allHparams)) + for _, tr := range testSearchRunner.trials { + require.False(t, tr.stopped) + runHparams = append(runHparams, tr.hparams["a"].(int)) + } + slices.Sort(runHparams) + require.Equal(t, allHparams, runHparams) } diff --git a/master/pkg/searcher/operations.go b/master/pkg/searcher/operations.go deleted file mode 100644 index 1f3fae3b952..00000000000 --- a/master/pkg/searcher/operations.go +++ /dev/null @@ -1,280 +0,0 @@ -package searcher - -import ( - "encoding/json" - "fmt" - - "github.com/google/uuid" - - "github.com/determined-ai/determined/proto/pkg/experimentv1" - - "github.com/determined-ai/determined/master/pkg/model" - "github.com/determined-ai/determined/master/pkg/nprand" -) - -// Operation represents the base interface for possible operations that a search method can return. -type Operation interface{} - -type ( - // OperationType encodes the underlying type of an Operation for serialization. - OperationType int - - // OperationWithType is an operation with a serializable repr of its underlying type. - OperationWithType struct { - OperationType - Operation - } - - // OperationList is []Operation that handles marshaling and unmarshaling heterogeneous - // operations to and from their correct underlying types. - OperationList []Operation -) - -// All the operation types that support serialization. -const ( - CreateOperation OperationType = 0 - TrainOperation OperationType = 1 - ValidateOperation OperationType = 2 - CloseOperation OperationType = 4 - ValidateAfterOperation OperationType = 5 -) - -// MarshalJSON implements json.Marshaler. -func (l OperationList) MarshalJSON() ([]byte, error) { - var typedOps []OperationWithType - for _, op := range l { - typedOp := OperationWithType{Operation: op} - switch op.(type) { - case Create: - typedOp.OperationType = CreateOperation - case ValidateAfter: - typedOp.OperationType = ValidateAfterOperation - case Close: - typedOp.OperationType = CloseOperation - default: - return nil, fmt.Errorf("unable to serialize %T as operation", op) - } - typedOps = append(typedOps, typedOp) - } - return json.Marshal(typedOps) -} - -// UnmarshalJSON implements json.Unmarshaler. -func (l *OperationList) UnmarshalJSON(b []byte) error { - var typedOps []OperationWithType - if err := json.Unmarshal(b, &typedOps); err != nil { - return err - } - var ops OperationList - for _, typedOp := range typedOps { - b, err := json.Marshal(typedOp.Operation) - if err != nil { - return err - } - switch typedOp.OperationType { - case CreateOperation: - var op Create - if err := json.Unmarshal(b, &op); err != nil { - return err - } - ops = append(ops, op) - case ValidateAfterOperation: - var op ValidateAfter - if err := json.Unmarshal(b, &op); err != nil { - return err - } - ops = append(ops, op) - case CloseOperation: - var op Close - if err := json.Unmarshal(b, &op); err != nil { - return err - } - ops = append(ops, op) - default: - return fmt.Errorf("unable to deserialize %d as operation", typedOp.OperationType) - } - } - *l = ops - return nil -} - -// Requested is a convenience interface for operations that were requested by a searcher method -// for a specific trial. -type Requested interface { - GetRequestID() model.RequestID -} - -// Create a new trial for the search method. -type Create struct { - RequestID model.RequestID `json:"request_id"` - // TrialSeed must be a value between 0 and 2**31 - 1. - TrialSeed uint32 `json:"trial_seed"` - Hparams HParamSample `json:"hparams"` - Checkpoint *Checkpoint `json:"checkpoint"` - WorkloadSequencerType model.WorkloadSequencerType `json:"workload_sequencer_type"` -} - -// NewCreate initializes a new Create operation with a new request ID and the given hyperparameters. -func NewCreate( - rand *nprand.State, s HParamSample, sequencerType model.WorkloadSequencerType, -) Create { - return Create{ - RequestID: model.NewRequestID(rand), - TrialSeed: uint32(rand.Int64n(1 << 31)), - Hparams: s, - WorkloadSequencerType: sequencerType, - } -} - -// NewCreateFromCheckpoint initializes a new Create operation with a new request ID and the given -// hyperparameters and checkpoint to initially load from. -func NewCreateFromCheckpoint( - rand *nprand.State, s HParamSample, parentID model.RequestID, - sequencerType model.WorkloadSequencerType, -) Create { - create := NewCreate(rand, s, sequencerType) - create.Checkpoint = &Checkpoint{parentID} - return create -} - -// CreateFromProto initializes a new Create operation from an -// experimentv1.SearcherOperation_CreateTrial. -func CreateFromProto( - protoSearcherOp *experimentv1.SearcherOperation_CreateTrial, - sequencerType model.WorkloadSequencerType, -) (*Create, error) { - requestID, err := uuid.Parse(protoSearcherOp.CreateTrial.RequestId) - if err != nil { - return nil, fmt.Errorf("unparseable trial ID %s", protoSearcherOp.CreateTrial.RequestId) - } - // TODO: Determine whether trial seed is set on client or on master. - trialSeed := uint32(42) - var hparams HParamSample - if err = json.Unmarshal([]byte(protoSearcherOp.CreateTrial.Hyperparams), &hparams); err != nil { - // TODO: Should we return this err instead? - return nil, fmt.Errorf("unparseable hyperparams %s", protoSearcherOp.CreateTrial.Hyperparams) - } - return &Create{ - RequestID: model.RequestID(requestID), - TrialSeed: trialSeed, - Hparams: hparams, - WorkloadSequencerType: sequencerType, - }, nil -} - -func (create Create) String() string { - if create.Checkpoint == nil { - return fmt.Sprintf("{Create %s, seed %d}", create.RequestID, create.TrialSeed) - } - return fmt.Sprintf( - "{Create %s, seed %d, parent %v}", create.RequestID, create.TrialSeed, - create.Checkpoint.RequestID, - ) -} - -// GetRequestID implemented Requested. -func (create Create) GetRequestID() model.RequestID { return create.RequestID } - -// Checkpoint indicates which trial the trial created by a Create should inherit from. -type Checkpoint struct { - RequestID model.RequestID -} - -func (c Checkpoint) String() string { - return fmt.Sprintf("{Checkpoint %s}", c.RequestID) -} - -// ValidateAfter is an operation emitted by search methods to signal the trial train until -// its total batches trained equals the specified length. -type ValidateAfter struct { - RequestID model.RequestID - Length uint64 -} - -// NewValidateAfter returns a new train operation. -func NewValidateAfter(requestID model.RequestID, length uint64) ValidateAfter { - return ValidateAfter{requestID, length} -} - -// ValidateAfterFromProto creates a ValidateAfter operation from its protobuf representation. -func ValidateAfterFromProto( - op *experimentv1.TrialOperation_ValidateAfter, -) (*ValidateAfter, error) { - requestID, err := uuid.Parse(op.ValidateAfter.RequestId) - if err != nil { - return nil, fmt.Errorf("unparseable trial ID %s", op.ValidateAfter.RequestId) - } - return &ValidateAfter{ - RequestID: model.RequestID(requestID), - Length: op.ValidateAfter.Length, - }, nil -} - -func (t ValidateAfter) String() string { - return fmt.Sprintf("{ValidateAfter %s, %v}", t.RequestID, t.Length) -} - -// GetRequestID implemented Requested. -func (t ValidateAfter) GetRequestID() model.RequestID { return t.RequestID } - -// ToProto converts a searcher.ValidateAfter to its protobuf representation. -func (t ValidateAfter) ToProto() *experimentv1.ValidateAfterOperation { - return &experimentv1.ValidateAfterOperation{Length: t.Length} -} - -// Close the trial with the given trial ID. -type Close struct { - RequestID model.RequestID `json:"request_id"` -} - -// NewClose initializes a new Close operation for the request ID. -func NewClose(requestID model.RequestID) Close { - return Close{ - RequestID: requestID, - } -} - -// CloseFromProto returns a Close operation from its protobuf representation. -func CloseFromProto( - op *experimentv1.SearcherOperation_CloseTrial, -) (*Close, error) { - requestID, err := uuid.Parse(op.CloseTrial.RequestId) - if err != nil { - return nil, fmt.Errorf("unparseable trial ID %s", op.CloseTrial.RequestId) - } - return &Close{ - RequestID: model.RequestID(requestID), - }, nil -} - -func (close Close) String() string { - return fmt.Sprintf("{Close %s}", close.RequestID) -} - -// GetRequestID implemented Requested. -func (close Close) GetRequestID() model.RequestID { return close.RequestID } - -// Shutdown marks the searcher as completed. -type Shutdown struct { - Cancel bool - Failure bool -} - -// NewShutdown initializes a Shutdown operation for the searcher. -func NewShutdown() Shutdown { - return Shutdown{} -} - -// ShutdownFromProto creates a Shutdown from its protobuf representation. -func ShutdownFromProto( - op *experimentv1.SearcherOperation_ShutDown, -) (*Shutdown, error) { - return &Shutdown{ - Cancel: op.ShutDown.Cancel, - Failure: op.ShutDown.Failure, - }, nil -} - -func (shutdown Shutdown) String() string { - return fmt.Sprintf("{Shutdown Cancel: %v Failure: %v}", shutdown.Cancel, shutdown.Failure) -} diff --git a/master/pkg/searcher/random.go b/master/pkg/searcher/random.go index 9c875c87330..f626c98e0bb 100644 --- a/master/pkg/searcher/random.go +++ b/master/pkg/searcher/random.go @@ -14,7 +14,7 @@ type ( // randomSearchState stores the state for random. Since not all trials are always created at // initialization, we need to track CreatedTrials so we know whether we need to create more // trials when workloads complete so that we reach MaxTrials. PendingTrials tracks active - // workloads and is used to check max_concurrent_trials for the searcher is respected. + // trials and is used to check max_concurrent_trials for the searcher is respected. // Tracking searcher type on restart gives us the ability to differentiate random searches // in a shim if needed. randomSearchState struct { @@ -44,7 +44,6 @@ func newSingleSearch(config expconf.SingleConfig) SearchMethod { return &randomSearch{ RandomConfig: schemas.WithDefaults(expconf.RandomConfig{ RawMaxTrials: ptrs.Ptr(1), - RawMaxLength: ptrs.Ptr(config.MaxLength()), RawMaxConcurrentTrials: ptrs.Ptr(1), }), randomSearchState: randomSearchState{ @@ -53,54 +52,52 @@ func newSingleSearch(config expconf.SingleConfig) SearchMethod { } } -func (s *randomSearch) initialOperations(ctx context) ([]Operation, error) { - var ops []Operation +func (s *randomSearch) initialTrials(ctx context) ([]Action, error) { + var actions []Action initialTrials := s.MaxTrials() if s.MaxConcurrentTrials() > 0 { initialTrials = mathx.Min(s.MaxTrials(), s.MaxConcurrentTrials()) } for trial := 0; trial < initialTrials; trial++ { - create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.MaxLength().Units)) - ops = append(ops, NewClose(create.RequestID)) + create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + actions = append(actions, create) s.CreatedTrials++ s.PendingTrials++ } - return ops, nil + return actions, nil } func (s *randomSearch) progress( - trialProgress map[model.RequestID]PartialUnits, + trialProgress map[model.RequestID]float64, trialsClosed map[model.RequestID]bool, ) float64 { if s.MaxConcurrentTrials() > 0 && s.PendingTrials > s.MaxConcurrentTrials() { panic("pending trials is greater than max_concurrent_trials") } - // XXX // Progress is calculated as follows: // - InvalidHP trials contribute 0 since we do not count them against max_trials budget and are // replaced with another randomly sampled config // - Other early-exit trials contribute max_length units // - In progress trials contribute units trained - unitsCompleted := 0. - // trialProgress records units trained for all trials except for InvalidHP trials. + // trialsProgress records units trained for all trials except for InvalidHP trials. + trialProgresses := 0. + for k, v := range trialProgress { if trialsClosed[k] { - unitsCompleted += float64(s.MaxLength().Units) + trialProgresses += 1.0 } else { - unitsCompleted += float64(v) + trialProgresses += v } } - unitsExpected := s.MaxLength().Units * uint64(s.MaxTrials()) - return unitsCompleted / float64(unitsExpected) + + return trialProgresses / float64(len(trialProgress)) } // trialExitedEarly creates a new trial upon receiving an InvalidHP workload. // Otherwise, it does nothing since actions are not taken based on search status. func (s *randomSearch) trialExitedEarly( ctx context, requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { +) ([]Action, error) { s.PendingTrials-- if s.SearchMethodType == RandomSearch { if exitedReason == model.InvalidHP || exitedReason == model.InitInvalidHP { @@ -113,18 +110,16 @@ func (s *randomSearch) trialExitedEarly( return nil, nil } -func (s *randomSearch) trialClosed(ctx context, requestID model.RequestID) ([]Operation, error) { +func (s *randomSearch) trialExited(ctx context, requestID model.RequestID) ([]Action, error) { s.PendingTrials-- - var ops []Operation + var actions []Action if s.CreatedTrials < s.MaxTrials() { - create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand), model.TrialWorkloadSequencerType) - ops = append(ops, create) - ops = append(ops, NewValidateAfter(create.RequestID, s.MaxLength().Units)) - ops = append(ops, NewClose(create.RequestID)) + create := NewCreate(ctx.rand, sampleAll(ctx.hparams, ctx.rand)) + actions = append(actions, create) s.CreatedTrials++ s.PendingTrials++ } - return ops, nil + return actions, nil } func (s *randomSearch) Snapshot() (json.RawMessage, error) { @@ -137,3 +132,7 @@ func (s *randomSearch) Restore(state json.RawMessage) error { } return json.Unmarshal(state, &s.randomSearchState) } + +func (s *randomSearch) Type() SearchMethodType { + return s.SearchMethodType +} diff --git a/master/pkg/searcher/random_test.go b/master/pkg/searcher/random_test.go index 2fdf6fb199e..caac50c158a 100644 --- a/master/pkg/searcher/random_test.go +++ b/master/pkg/searcher/random_test.go @@ -4,117 +4,49 @@ package searcher import ( "testing" + "github.com/stretchr/testify/require" + "github.com/determined-ai/determined/master/pkg/ptrs" - "github.com/determined-ai/determined/master/pkg/schemas" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -func TestRandomSearcherRecords(t *testing.T) { - actual := expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(4), RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(19200)), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("19200R"), - toOps("19200R"), - toOps("19200R"), - toOps("19200R"), - } - search := newRandomSearch(actual) - checkSimulation(t, search, nil, ConstantValidation, expected) -} - -func TestRandomSearcherBatches(t *testing.T) { - actual := expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(4), RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(300)), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("300B"), - toOps("300B"), - toOps("300B"), - toOps("300B"), - } - search := newRandomSearch(actual) - checkSimulation(t, search, nil, ConstantValidation, expected) -} - -func TestRandomSearcherReproducibility(t *testing.T) { - conf := expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(4), RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(300)), - } - conf = schemas.WithDefaults(conf) - gen := func() SearchMethod { return newRandomSearch(conf) } - checkReproducibility(t, gen, nil, defaultMetric) -} - func TestRandomSearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ - { - name: "test random search method", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("500B"), .1), - newConstantPredefinedTrial(toOps("500B"), .1), - newConstantPredefinedTrial(toOps("500B"), .1), - newEarlyExitPredefinedTrial(toOps("500B"), .1), - }, - config: expconf.SearcherConfig{ - RawRandomConfig: &expconf.RandomConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(500)), - RawMaxTrials: ptrs.Ptr(4), - RawMaxConcurrentTrials: ptrs.Ptr(2), - }, - }, - }, - { - name: "test random search method with records", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("32017R"), .1), - newConstantPredefinedTrial(toOps("32017R"), .1), - newConstantPredefinedTrial(toOps("32017R"), .1), - newConstantPredefinedTrial(toOps("32017R"), .1), - }, - config: expconf.SearcherConfig{ - RawRandomConfig: &expconf.RandomConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(32017)), - RawMaxTrials: ptrs.Ptr(4), - }, - }, + conf := expconf.SearcherConfig{ + RawMetric: ptrs.Ptr("loss"), + RawRandomConfig: &expconf.RandomConfig{ + RawMaxTrials: ptrs.Ptr(4), + RawMaxConcurrentTrials: ptrs.Ptr(2), }, } + intHparam := &expconf.IntHyperparameter{RawMaxval: 10, RawCount: ptrs.Ptr(4)} + hparams := expconf.Hyperparameters{ + "x": expconf.Hyperparameter{RawIntHyperparameter: intHparam}, + } + testSearchRunner := NewTestSearchRunner(t, conf, hparams) - runValueSimulationTestCases(t, testCases) + // Simulate a search and verify expected run states. + testSearchRunner.run(100, 10, false) + // 4 total trials created, each with hparam in space and run to completion. + require.Len(t, testSearchRunner.trials, 4) + for _, tr := range testSearchRunner.trials { + hparam := tr.hparams["x"].(int) + require.True(t, hparam <= 10 && hparam >= 0) + require.False(t, tr.stopped) + } } func TestSingleSearchMethod(t *testing.T) { - testCases := []valueSimulationTestCase{ - { - name: "test single search method", - expectedTrials: []predefinedTrial{ - newConstantPredefinedTrial(toOps("500B"), .1), - }, - config: expconf.SearcherConfig{ - RawSingleConfig: &expconf.SingleConfig{ - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(500)), - }, - }, - }, + conf := expconf.SearcherConfig{ + RawMetric: ptrs.Ptr("loss"), + RawSingleConfig: &expconf.SingleConfig{}, } - runValueSimulationTestCases(t, testCases) -} + testSearchRunner := NewTestSearchRunner(t, conf, expconf.Hyperparameters{}) -func TestRandomSearcherSingleConcurrent(t *testing.T) { - actual := expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(2), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInRecords(100)), - RawMaxConcurrentTrials: ptrs.Ptr(1), - } - actual = schemas.WithDefaults(actual) - expected := [][]ValidateAfter{ - toOps("100R"), - toOps("100R"), - } - search := newRandomSearch(actual) - checkSimulation(t, search, nil, ConstantValidation, expected) + // Simulate a search and verify expected run states. + testSearchRunner.run(100, 10, false) + + // Single search should create exactly one run. + require.Len(t, testSearchRunner.trials, 1) + require.False(t, testSearchRunner.trials[0].stopped) } diff --git a/master/pkg/searcher/search_method.go b/master/pkg/searcher/search_method.go index fc0404312e2..fd03096e22c 100644 --- a/master/pkg/searcher/search_method.go +++ b/master/pkg/searcher/search_method.go @@ -11,34 +11,32 @@ type context struct { hparams expconf.Hyperparameters } -// SearchMethod is the interface for hyper-parameter tuning methods. Implementations of this +// SearchMethod is the interface for hyperparameter tuning methods. Implementations of this // interface should use pointer receivers to ensure interface equality is calculated through pointer // equality. type SearchMethod interface { - // initialOperations returns a set of initial operations that the searcher would like to take. + // initialTrials returns a set of initial trials the searcher would like to create. // This should be called only once after the searcher has been created. - initialOperations(ctx context) ([]Operation, error) + initialTrials(ctx context) ([]Action, error) // trialCreated informs the searcher that a trial has been created as a result of a Create - // operation. - trialCreated(ctx context, requestID model.RequestID) ([]Operation, error) - // validationCompleted informs the searcher that the validation workload initiated by the same - // searcher has completed. It returns any new operations as a result of this workload - // completing. + // action and returns any additional Actions to perform. + trialCreated(ctx context, requestID model.RequestID) ([]Action, error) + // validationCompleted informs the searcher that a validation metric has been reported + // and returns any resulting actions. validationCompleted(ctx context, requestID model.RequestID, - metric interface{}, op ValidateAfter) ([]Operation, error) - // trialClosed informs the searcher that the trial has been closed as a result of a Close - // operation. - trialClosed(ctx context, requestID model.RequestID) ([]Operation, error) - // progress returns experiment progress as a float between 0.0 and 1.0. - progress(map[model.RequestID]PartialUnits, map[model.RequestID]bool) float64 + metrics map[string]interface{}) ([]Action, error) + // trialExited informs the searcher that the trial has exited. + trialExited(ctx context, requestID model.RequestID) ([]Action, error) + // progress returns search progress as a float between 0.0 and 1.0. + progress(map[model.RequestID]float64, map[model.RequestID]bool) float64 // trialExitedEarly informs the searcher that the trial has exited earlier than expected. trialExitedEarly( ctx context, requestID model.RequestID, exitedReason model.ExitedReason, - ) ([]Operation, error) + ) ([]Action, error) // TODO: refactor as model.Snapshotter interface or something model.Snapshotter - expconf.InUnits + Type() SearchMethodType } // SearchMethodType is the type of a SearchMethod. It is saved in snapshots to be used @@ -52,8 +50,6 @@ const ( RandomSearch SearchMethodType = "random" // GridSearch is the SearchMethodType for a grid searcher. GridSearch SearchMethodType = "grid" - // AdaptiveSearch is the SearchMethodType for an adaptive searcher. - AdaptiveSearch SearchMethodType = "adaptive" // ASHASearch is the SearchMethodType for an ASHA searcher. ASHASearch SearchMethodType = "asha" // AdaptiveASHASearch is the SearchMethodType for an adaptive ASHA searcher. @@ -70,12 +66,9 @@ func NewSearchMethod(c expconf.SearcherConfig) SearchMethod { case c.RawGridConfig != nil: return newGridSearch(*c.RawGridConfig) case c.RawAsyncHalvingConfig != nil: - if c.RawAsyncHalvingConfig.StopOnce() { - return newAsyncHalvingStoppingSearch(*c.RawAsyncHalvingConfig, c.SmallerIsBetter()) - } - return newAsyncHalvingSearch(*c.RawAsyncHalvingConfig, c.SmallerIsBetter()) + return newAsyncHalvingStoppingSearch(*c.RawAsyncHalvingConfig, c.SmallerIsBetter(), c.Metric()) case c.RawAdaptiveASHAConfig != nil: - return newAdaptiveASHASearch(*c.RawAdaptiveASHAConfig, c.SmallerIsBetter()) + return newAdaptiveASHASearch(*c.RawAdaptiveASHAConfig, c.SmallerIsBetter(), c.Metric()) default: panic("no searcher type specified") } @@ -83,24 +76,22 @@ func NewSearchMethod(c expconf.SearcherConfig) SearchMethod { type defaultSearchMethod struct{} -func (defaultSearchMethod) trialCreated(context, model.RequestID) ([]Operation, error) { +func (defaultSearchMethod) trialCreated(context, model.RequestID) ([]Action, error) { return nil, nil } -func (defaultSearchMethod) validationCompleted( - context, model.RequestID, interface{}, ValidateAfter, -) ([]Operation, error) { +func (defaultSearchMethod) validationCompleted(context, model.RequestID, map[string]interface{}) ([]Action, error) { return nil, nil } // nolint:unused -func (defaultSearchMethod) trialClosed(context, model.RequestID) ([]Operation, error) { +func (defaultSearchMethod) trialExited(context, model.RequestID) ([]Action, error) { return nil, nil } // nolint:unused func (defaultSearchMethod) trialExitedEarly( context, model.RequestID, model.ExitedReason, -) ([]Operation, error) { - return []Operation{Shutdown{Failure: true}}, nil +) ([]Action, error) { + return []Action{Shutdown{Failure: true}}, nil } diff --git a/master/pkg/searcher/searcher.go b/master/pkg/searcher/searcher.go index 36ed00830d5..8b282b369f7 100644 --- a/master/pkg/searcher/searcher.go +++ b/master/pkg/searcher/searcher.go @@ -2,7 +2,6 @@ package searcher import ( "encoding/json" - "fmt" "math" "sync" @@ -19,15 +18,13 @@ type PartialUnits float64 type ( // SearcherState encapsulates all persisted searcher state. SearcherState struct { - TrialsRequested int `json:"trials_requested"` - TrialsCreated map[model.RequestID]bool `json:"trials_created"` - TrialsClosed map[model.RequestID]bool `json:"trials_closed"` - Exits map[model.RequestID]bool `json:"exits"` - Cancels map[model.RequestID]bool `json:"cancels"` - Failures map[model.RequestID]bool `json:"failures"` - TrialProgress map[model.RequestID]PartialUnits `json:"trial_progress"` - Shutdown bool `json:"shutdown"` - CompletedOperations map[string]ValidateAfter `json:"completed_operations"` + TrialsRequested int `json:"trials_requested"` + TrialsCreated map[model.RequestID]bool `json:"trials_created"` + TrialsClosed map[model.RequestID]bool `json:"trials_closed"` + Exits map[model.RequestID]bool `json:"exits"` + Cancels map[model.RequestID]bool `json:"cancels"` + Failures map[model.RequestID]bool `json:"failures"` + TrialProgress map[model.RequestID]float64 `json:"trial_progress"` Rand *nprand.State `json:"rand"` @@ -50,14 +47,13 @@ func NewSearcher(seed uint32, method SearchMethod, hparams expconf.Hyperparamete hparams: hparams, method: method, state: SearcherState{ - Rand: nprand.New(seed), - TrialsCreated: map[model.RequestID]bool{}, - TrialsClosed: map[model.RequestID]bool{}, - Exits: map[model.RequestID]bool{}, - Cancels: map[model.RequestID]bool{}, - Failures: map[model.RequestID]bool{}, - TrialProgress: map[model.RequestID]PartialUnits{}, - CompletedOperations: map[string]ValidateAfter{}, + Rand: nprand.New(seed), + TrialsCreated: map[model.RequestID]bool{}, + TrialsClosed: map[model.RequestID]bool{}, + Exits: map[model.RequestID]bool{}, + Cancels: map[model.RequestID]bool{}, + Failures: map[model.RequestID]bool{}, + TrialProgress: map[model.RequestID]float64{}, }, } } @@ -66,23 +62,22 @@ func (s *Searcher) context() context { return context{rand: s.state.Rand, hparams: s.hparams} } -// InitialOperations return a set of initial operations that the searcher would like to take. +// InitialTrials returns the initial trials the searcher intends to create at the start of a search. // This should be called only once after the searcher has been created. -func (s *Searcher) InitialOperations() ([]Operation, error) { +func (s *Searcher) InitialTrials() ([]Action, error) { s.mu.Lock() defer s.mu.Unlock() - operations, err := s.method.initialOperations(s.context()) + creates, err := s.method.initialTrials(s.context()) if err != nil { return nil, errors.Wrap(err, "error while fetching initial operations of search method") } - s.record(operations) - return operations, nil + s.record(creates) + return creates, nil } -// TrialCreated informs the searcher that a trial has been created as a result of a Create -// operation. -func (s *Searcher) TrialCreated(requestID model.RequestID) ([]Operation, error) { +// TrialCreated informs the searcher that a new trial has been created. +func (s *Searcher) TrialCreated(requestID model.RequestID) ([]Action, error) { s.mu.Lock() defer s.mu.Unlock() @@ -91,7 +86,7 @@ func (s *Searcher) TrialCreated(requestID model.RequestID) ([]Operation, error) operations, err := s.method.trialCreated(s.context(), requestID) if err != nil { return nil, errors.Wrapf(err, - "error while handling a trial created event: %s", requestID) + "error while handling a trial created event: %d", requestID) } s.record(operations) return operations, nil @@ -105,10 +100,10 @@ func (s *Searcher) TrialIsCreated(requestID model.RequestID) bool { return s.state.TrialsCreated[requestID] } -// TrialExitedEarly indicates to the searcher that the trial with the given trialID exited early. +// TrialExitedEarly informs the searcher that a trial has exited early. func (s *Searcher) TrialExitedEarly( requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { +) ([]Action, error) { s.mu.Lock() defer s.mu.Unlock() @@ -137,7 +132,7 @@ func (s *Searcher) TrialExitedEarly( if s.state.TrialsRequested == len(s.state.TrialsClosed) { shutdown := Shutdown{Failure: len(s.state.Failures) >= s.state.TrialsRequested} - s.record([]Operation{shutdown}) + s.record([]Action{shutdown}) operations = append(operations, shutdown) } @@ -145,7 +140,7 @@ func (s *Searcher) TrialExitedEarly( } // SetTrialProgress informs the searcher of the progress of a given trial. -func (s *Searcher) SetTrialProgress(requestID model.RequestID, progress PartialUnits) { +func (s *Searcher) SetTrialProgress(requestID model.RequestID, progress float64) { s.mu.Lock() defer s.mu.Unlock() @@ -154,49 +149,44 @@ func (s *Searcher) SetTrialProgress(requestID model.RequestID, progress PartialU // ValidationCompleted informs the searcher that a validation for the trial was completed. func (s *Searcher) ValidationCompleted( - requestID model.RequestID, metric interface{}, op ValidateAfter, -) ([]Operation, error) { + requestID model.RequestID, metrics map[string]interface{}, +) ([]Action, error) { s.mu.Lock() defer s.mu.Unlock() - if _, ok := s.state.CompletedOperations[op.String()]; ok { - return nil, fmt.Errorf("operation %v was already completed", op) - } - - operations, err := s.method.validationCompleted(s.context(), requestID, metric, op) + operations, err := s.method.validationCompleted(s.context(), requestID, metrics) if err != nil { - return nil, errors.Wrapf(err, "error while handling a workload completed event: %s", requestID) + return nil, errors.Wrapf(err, "error while handling a validation completed event: %d", requestID) } - s.state.CompletedOperations[op.String()] = op s.record(operations) return operations, nil } -// TrialClosed informs the searcher that the trial has been closed as a result of a Close operation. -func (s *Searcher) TrialClosed(requestID model.RequestID) ([]Operation, error) { +// TrialExited informs the searcher that a trial has exited. +func (s *Searcher) TrialExited(requestID model.RequestID) ([]Action, error) { s.mu.Lock() defer s.mu.Unlock() s.state.TrialsClosed[requestID] = true - operations, err := s.method.trialClosed(s.context(), requestID) + actions, err := s.method.trialExited(s.context(), requestID) if err != nil { - return nil, errors.Wrapf(err, "error while handling a trial closed event: %s", requestID) + return nil, errors.Wrapf(err, "error while handling a trial closed event: %d", requestID) } - s.record(operations) + s.record(actions) if s.state.TrialsRequested == len(s.state.TrialsClosed) { shutdown := Shutdown{ Cancel: len(s.state.Cancels) >= s.state.TrialsRequested, Failure: len(s.state.Failures) >= s.state.TrialsRequested, } - s.record([]Operation{shutdown}) - operations = append(operations, shutdown) + s.record([]Action{shutdown}) + actions = append(actions, shutdown) } - return operations, nil + return actions, nil } -// TrialIsClosed returns true if the close has been recorded with a TrialClosed call. +// TrialIsClosed returns true if the close has been recorded with a TrialExited call. func (s *Searcher) TrialIsClosed(requestID model.RequestID) bool { s.mu.Lock() defer s.mu.Unlock() @@ -216,21 +206,18 @@ func (s *Searcher) Progress() float64 { return progress } -// Record records operations that were requested by the searcher for a specific trial. -func (s *Searcher) Record(ops []Operation) { +// Record records actions that were requested by the searcher for a specific trial. +func (s *Searcher) Record(ops []Action) { s.mu.Lock() defer s.mu.Unlock() s.record(ops) } -func (s *Searcher) record(ops []Operation) { +func (s *Searcher) record(ops []Action) { for _, op := range ops { - switch op.(type) { - case Create: + if _, ok := op.(Create); ok { s.state.TrialsRequested++ - case Shutdown: - s.state.Shutdown = true } } } diff --git a/master/pkg/searcher/simulate.go b/master/pkg/searcher/simulate.go index 0d89dc110c4..f64d3ba4cb4 100644 --- a/master/pkg/searcher/simulate.go +++ b/master/pkg/searcher/simulate.go @@ -1,222 +1,121 @@ package searcher import ( - "encoding/json" - "math/rand" "sort" - "strconv" - "strings" - "time" + + "github.com/determined-ai/determined/master/pkg/ptrs" "github.com/pkg/errors" - "github.com/determined-ai/determined/master/pkg/model" + "github.com/determined-ai/determined/master/pkg/mathx" + "github.com/determined-ai/determined/master/pkg/protoutils" + "github.com/determined-ai/determined/master/pkg/schemas/expconf" + "github.com/determined-ai/determined/proto/pkg/experimentv1" ) -// ValidationFunction calculates the validation metric for the validation step. -type ValidationFunction func(random *rand.Rand, trialID, idx int) float64 - -// ConstantValidation returns the same validation metric for all validation steps. -func ConstantValidation(_ *rand.Rand, _, _ int) float64 { return 1 } - -// RandomValidation returns a random validation metric for each validation step. -func RandomValidation(rand *rand.Rand, _, _ int) float64 { return rand.Float64() } - -// TrialIDMetric returns the trialID as the metric for all validation steps. -func TrialIDMetric(_ *rand.Rand, trialID, _ int) float64 { - return float64(trialID) +// SearchSummary describes a summary of planned trials and the associated expconf.SearcherConfig. +type SearchSummary struct { + Trials []TrialSummary + Config expconf.SearcherConfig } -// SimulationResults holds all created trials and all executed workloads for each trial. -type SimulationResults map[model.RequestID][]ValidateAfter - -// MarshalJSON implements the json.Marshaler interface. -func (s SimulationResults) MarshalJSON() ([]byte, error) { - summary := make(map[string]int) +// SearchUnit is a length unit. If MaxLength is true, Name and Value will be ignored. +type SearchUnit struct { + Name *string + Value *int32 + MaxLength bool +} - for _, ops := range s { - var keyParts []string - for _, op := range ops { - keyParts = append(keyParts, strconv.FormatUint(op.Length, 10)) - } - summary[strings.Join(keyParts, " ")]++ +// Proto converts the SearchUnit to its protobuf representation. +func (su SearchUnit) Proto() *experimentv1.SearchUnit { + return &experimentv1.SearchUnit{ + Name: su.Name, + Value: su.Value, + MaxLength: su.MaxLength, } - - return json.Marshal(summary) } -// Simulation holds the configuration and results of simulated run of a searcher. -type Simulation struct { - Results SimulationResults `json:"results"` - Seed int64 `json:"seed"` +// TrialSummary is a summary of the number of trials that will train for Unit length. +type TrialSummary struct { + Count int + Unit SearchUnit } -// Simulate simulates the searcher. -func Simulate( - s *Searcher, seed *int64, valFunc ValidationFunction, randomOrder bool, metricName string, -) (Simulation, error) { - simulation := Simulation{ - Results: make(SimulationResults), - Seed: time.Now().Unix(), - } - //nolint:gosec // Weak RNG doesn't matter here. - random := rand.New(rand.NewSource(simulation.Seed)) - if seed != nil { - simulation.Seed = *seed - //nolint:gosec // Weak RNG doesn't matter here. - random = rand.New(rand.NewSource(*seed)) - } - - lengthCompleted := make(map[model.RequestID]PartialUnits) - pending := make(map[model.RequestID][]Operation) - trialIDs := make(map[model.RequestID]int) - var requestIDs []model.RequestID - ops, err := s.InitialOperations() - if err != nil { - return simulation, err - } - - lastProgress := s.Progress() - if lastProgress != 0.0 { - return simulation, errors.Errorf("Initial searcher progress started at %f", lastProgress) - } - - shutdown, err := handleOperations(pending, &requestIDs, ops) - if err != nil { - return simulation, err - } - - nextTrialID := 1 - trialOpIdxs := map[model.RequestID]int{} - for !shutdown { - requestID, err := pickTrial(random, pending, requestIDs, randomOrder) - if err != nil { - return simulation, err - } - operation := pending[requestID][0] - pending[requestID] = pending[requestID][1:] - - switch operation := operation.(type) { - case Create: - simulation.Results[requestID] = []ValidateAfter{} - trialIDs[requestID] = nextTrialID - ops, err := s.TrialCreated(operation.RequestID) - if err != nil { - return simulation, err - } - trialOpIdxs[requestID] = 0 - lengthCompleted[requestID] = 0 - shutdown, err = handleOperations(pending, &requestIDs, ops) - if err != nil { - return simulation, err - } - nextTrialID++ - case ValidateAfter: - simulation.Results[requestID] = append(simulation.Results[requestID], operation) - s.SetTrialProgress(requestID, PartialUnits(operation.Length)) - - metric := valFunc(random, trialIDs[requestID], trialOpIdxs[requestID]) - ops, err := s.ValidationCompleted(requestID, metric, operation) - if err != nil { - return simulation, err - } - trialOpIdxs[requestID]++ - - shutdown, err = handleOperations(pending, &requestIDs, ops) - if err != nil { - return simulation, err - } - case Close: - delete(pending, requestID) - ops, err := s.TrialClosed(requestID) - if err != nil { - return simulation, err - } - shutdown, err = handleOperations(pending, &requestIDs, ops) - if err != nil { - return simulation, err - } - default: - return simulation, errors.Errorf("unexpected searcher operation: %T", operation) - } - if shutdown { - if len(pending) != 0 { - return simulation, errors.New("searcher shutdown prematurely") - } - break - } - - progress := s.Progress() - if progress < lastProgress { - return simulation, errors.Errorf( - "searcher progress dropped from %f%% to %f%%", lastProgress*100, progress*100) - } - lastProgress = progress +// Proto converts the TrialSummary to its protobuf representation. +func (rs TrialSummary) Proto() *experimentv1.TrialSummary { + return &experimentv1.TrialSummary{ + Count: int32(rs.Count), + Unit: rs.Unit.Proto(), } +} - lastProgress = s.Progress() - if lastProgress != 1.0 { - return simulation, errors.Errorf( - "searcher progress was not equal to 100%%: %f%%", lastProgress*100) +// Proto converts the SearchSummary to its protobuf representation. +func (s SearchSummary) Proto() *experimentv1.SearchSummary { + var trialSummaries []*experimentv1.TrialSummary + for _, v := range s.Trials { + trialSummaries = append(trialSummaries, v.Proto()) } - if len(simulation.Results) != len(requestIDs) { - return simulation, errors.New("more trials created than completed") + return &experimentv1.SearchSummary{ + Config: protoutils.ToStruct(s.Config), + Trials: trialSummaries, } - return simulation, nil } -func handleOperations( - pending map[model.RequestID][]Operation, requestIDs *[]model.RequestID, operations []Operation, -) (bool, error) { - for _, operation := range operations { - switch op := operation.(type) { - case Create: - *requestIDs = append(*requestIDs, op.RequestID) - pending[op.RequestID] = []Operation{op} - case Requested: - pending[op.GetRequestID()] = append(pending[op.GetRequestID()], op) - case Shutdown: - return true, nil - default: - return false, errors.Errorf("unexpected operation: %T", operation) - } +// Simulate generates the intended training plan for the searcher. +func Simulate(conf expconf.SearcherConfig, hparams expconf.Hyperparameters) (SearchSummary, error) { + searchSummary := SearchSummary{ + Trials: []TrialSummary{}, + Config: conf, } - return false, nil -} - -func pickTrial( - random *rand.Rand, pending map[model.RequestID][]Operation, requestIDs []model.RequestID, - randomOrder bool, -) (model.RequestID, error) { - // If randomOrder is false, then return the first id from requestIDs that has any operations - // pending. - if !randomOrder { - for _, requestID := range requestIDs { - operations := pending[requestID] - if len(operations) > 0 { - return requestID, nil + switch { + case conf.RawSingleConfig != nil: + searchSummary.Trials = append(searchSummary.Trials, TrialSummary{Count: 1, Unit: SearchUnit{MaxLength: true}}) + return searchSummary, nil + case conf.RawRandomConfig != nil: + maxTrials := conf.RawRandomConfig.MaxTrials() + searchSummary.Trials = append(searchSummary.Trials, TrialSummary{Count: maxTrials, Unit: SearchUnit{MaxLength: true}}) + return searchSummary, nil + case conf.RawGridConfig != nil: + hparamGrid := newHyperparameterGrid(hparams) + searchSummary.Trials = append( + searchSummary.Trials, TrialSummary{Count: len(hparamGrid), Unit: SearchUnit{MaxLength: true}}, + ) + return searchSummary, nil + case conf.RawAdaptiveASHAConfig != nil: + ashaConfig := conf.RawAdaptiveASHAConfig + brackets := makeBrackets(*ashaConfig) + unitsPerTrial := make(map[int32]int) + for _, bracket := range brackets { + rungs := makeRungs(bracket.numRungs, ashaConfig.Divisor(), ashaConfig.Length().Units) + rungTrials := bracket.maxTrials + // For each rung, calculate number of trials that will be stopped before next rung + // to determine the number of trials that will only train to the current rung. + for i, rung := range rungs { + rungUnits := int(rung.UnitsNeeded) + trialsContinued := mathx.Max(int(float64(rungTrials)/ashaConfig.Divisor()), 1) + trialsStopped := rungTrials - trialsContinued + if i == len(rungs)-1 { + trialsStopped = rungTrials + } + unitsPerTrial[int32(rungUnits)] += trialsStopped + rungTrials = trialsContinued } } - return model.RequestID{}, errors.New("tried to pick a trial when no trial had pending operations") - } - - // If randomOrder is true, pseudo-randomly select a trial that has pending operations. - var candidates []model.RequestID - for requestID, operations := range pending { - if len(operations) > 0 { - candidates = append(candidates, requestID) + for units, numTrials := range unitsPerTrial { + searchSummary.Trials = append(searchSummary.Trials, TrialSummary{ + Count: numTrials, + Unit: SearchUnit{ + Name: ptrs.Ptr(string(ashaConfig.Length().Unit)), + Value: &units, + }, + }) } + // Sort by target units for consistency in output. + sort.Slice(searchSummary.Trials, func(i, j int) bool { + return *searchSummary.Trials[i].Unit.Value < *searchSummary.Trials[j].Unit.Value + }) + return searchSummary, nil + default: + return SearchSummary{}, errors.New("invalid searcher configuration") } - if len(candidates) == 0 { - return model.RequestID{}, errors.New("tried to pick a trial when no trial had pending operations") - } - - // Map iteration order is nondeterministic, even for identical maps in the same run, so sort the - // candidates before selecting one. - sort.Slice(candidates, func(i, j int) bool { - return candidates[i].Before(candidates[j]) - }) - - choice := random.Intn(len(candidates)) - return candidates[choice], nil } diff --git a/master/pkg/searcher/simulate_test.go b/master/pkg/searcher/simulate_test.go new file mode 100644 index 00000000000..dacba6b3a1f --- /dev/null +++ b/master/pkg/searcher/simulate_test.go @@ -0,0 +1,83 @@ +package searcher + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/determined-ai/determined/master/pkg/ptrs" + "github.com/determined-ai/determined/master/pkg/schemas/expconf" +) + +func TestSimulateASHA(t *testing.T) { + maxConcurrentTrials := 5 + maxTrials := 10 + divisor := 3.0 + maxTime := 900 + timeMetric := ptrs.Ptr("batches") + config := expconf.SearcherConfig{ + RawAdaptiveASHAConfig: &expconf.AdaptiveASHAConfig{ + RawMaxRungs: ptrs.Ptr(10), + RawMaxTime: &maxTime, + RawDivisor: &divisor, + RawMaxConcurrentTrials: &maxConcurrentTrials, + RawMaxTrials: &maxTrials, + RawTimeMetric: timeMetric, + RawMode: ptrs.Ptr(expconf.StandardMode), + }, + RawMetric: ptrs.Ptr("loss"), + RawSmallerIsBetter: ptrs.Ptr(true), + } + intHparam := &expconf.IntHyperparameter{RawMaxval: 10, RawCount: ptrs.Ptr(3)} + hparams := expconf.Hyperparameters{ + "x": expconf.Hyperparameter{RawIntHyperparameter: intHparam}, + } + + res, err := Simulate(config, hparams) + require.NoError(t, err) + // Bracket #1: 7 total trials + // Rungs: [100, 300, 900] + // - 7 at 100 -> 2 at 300 -> 1 at 900 + // => 5 for 100, 1 for 300, 1 for 900 + // + // Bracket #2: 3 total trials + // Rungs: [300, 900] + // - 3 at 300 -> 1 at 900 + // => 2 for 300, 1 for 900 + require.Equal(t, config, res.Config) + expectedRunSummary := []TrialSummary{ + {Count: 5, Unit: SearchUnit{Name: timeMetric, Value: ptrs.Ptr(int32(100))}}, + {Count: 3, Unit: SearchUnit{Name: timeMetric, Value: ptrs.Ptr(int32(300))}}, + {Count: 2, Unit: SearchUnit{Name: timeMetric, Value: ptrs.Ptr(int32(900))}}, + } + require.Equal(t, expectedRunSummary, res.Trials) +} + +func TestSimulateGrid(t *testing.T) { + maxConcurrentTrials := 2 + numHparams := 4 + gridConfig := expconf.GridConfig{ + RawMaxConcurrentTrials: ptrs.Ptr(maxConcurrentTrials), + } + searcherConfig := expconf.SearcherConfig{ + RawGridConfig: &gridConfig, + RawMetric: ptrs.Ptr("loss"), + } + hparams := expconf.Hyperparameters{ + "a": expconf.Hyperparameter{ + RawIntHyperparameter: &expconf.IntHyperparameter{ + RawMinval: 0, RawMaxval: 10, RawCount: ptrs.Ptr(numHparams), + }, + }, + } + + res, err := Simulate(searcherConfig, hparams) + require.NoError(t, err) + + // Expect all configured hparams in space = 4 trials at max length. + require.Equal(t, searcherConfig, res.Config) + expectedRunSummary := []TrialSummary{ + {Count: numHparams, Unit: SearchUnit{MaxLength: true}}, + } + require.Equal(t, expectedRunSummary, res.Trials) +} diff --git a/master/pkg/searcher/tournament.go b/master/pkg/searcher/tournament.go index 9feee17d60c..e99752207c6 100644 --- a/master/pkg/searcher/tournament.go +++ b/master/pkg/searcher/tournament.go @@ -6,17 +6,15 @@ import ( "github.com/pkg/errors" "github.com/determined-ai/determined/master/pkg/model" - "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -// tournamentSearch runs multiple search methods in tandem. Callbacks for completed operations -// are sent to the originating search method that created the corresponding operation. +// tournamentSearch trial multiple search methods in tandem. Callbacks for completed actions +// are sent to the originating search method that initiated the corresponding action. type ( tournamentSearchState struct { - SubSearchUnitsCompleted []float64 `json:"sub_search_units_completed"` - TrialTable map[model.RequestID]int `json:"trial_table"` - SubSearchStates []json.RawMessage `json:"sub_search_states"` - SearchMethodType SearchMethodType `json:"search_method_type"` + TrialTable map[model.RequestID]int `json:"trial_table"` + SubSearchStates []json.RawMessage `json:"sub_search_states"` + SearchMethodType SearchMethodType `json:"search_method_type"` } tournamentSearch struct { subSearches []SearchMethod @@ -28,10 +26,9 @@ func newTournamentSearch(mt SearchMethodType, subSearches ...SearchMethod) *tour return &tournamentSearch{ subSearches: subSearches, tournamentSearchState: tournamentSearchState{ - SubSearchUnitsCompleted: make([]float64, len(subSearches)), - TrialTable: make(map[model.RequestID]int), - SubSearchStates: make([]json.RawMessage, len(subSearches)), - SearchMethodType: mt, + TrialTable: make(map[model.RequestID]int), + SubSearchStates: make([]json.RawMessage, len(subSearches)), + SearchMethodType: mt, }, } } @@ -60,22 +57,22 @@ func (s *tournamentSearch) Restore(state json.RawMessage) error { return nil } -func (s *tournamentSearch) initialOperations(ctx context) ([]Operation, error) { - var operations []Operation +func (s *tournamentSearch) initialTrials(ctx context) ([]Action, error) { + var actions []Action for i, subSearch := range s.subSearches { - ops, err := subSearch.initialOperations(ctx) + creates, err := subSearch.initialTrials(ctx) if err != nil { return nil, err } - s.markCreates(i, ops) - operations = append(operations, ops...) + s.markCreates(i, creates) + actions = append(actions, creates...) } - return operations, nil + return actions, nil } func (s *tournamentSearch) trialCreated( ctx context, requestID model.RequestID, -) ([]Operation, error) { +) ([]Action, error) { subSearchID := s.TrialTable[requestID] subSearch := s.subSearches[subSearchID] ops, err := subSearch.trialCreated(ctx, requestID) @@ -83,27 +80,27 @@ func (s *tournamentSearch) trialCreated( } func (s *tournamentSearch) validationCompleted( - ctx context, requestID model.RequestID, metric interface{}, op ValidateAfter, -) ([]Operation, error) { + ctx context, requestID model.RequestID, metrics map[string]interface{}, +) ([]Action, error) { subSearchID := s.TrialTable[requestID] subSearch := s.subSearches[subSearchID] - ops, err := subSearch.validationCompleted(ctx, requestID, metric, op) + ops, err := subSearch.validationCompleted(ctx, requestID, metrics) return s.markCreates(subSearchID, ops), err } -// trialClosed informs the searcher that the trial has been closed as a result of a Close operation. -func (s *tournamentSearch) trialClosed( +// runExited informs the searcher that the run has exited. +func (s *tournamentSearch) trialExited( ctx context, requestID model.RequestID, -) ([]Operation, error) { +) ([]Action, error) { subSearchID := s.TrialTable[requestID] subSearch := s.subSearches[subSearchID] - ops, err := subSearch.trialClosed(ctx, requestID) + ops, err := subSearch.trialExited(ctx, requestID) return s.markCreates(subSearchID, ops), err } func (s *tournamentSearch) trialExitedEarly( ctx context, requestID model.RequestID, exitedReason model.ExitedReason, -) ([]Operation, error) { +) ([]Action, error) { subSearchID := s.TrialTable[requestID] subSearch := s.subSearches[subSearchID] ops, err := subSearch.trialExitedEarly(ctx, requestID, exitedReason) @@ -112,12 +109,12 @@ func (s *tournamentSearch) trialExitedEarly( // progress returns experiment progress as a float between 0.0 and 1.0. func (s *tournamentSearch) progress( - trialProgress map[model.RequestID]PartialUnits, + trialProgress map[model.RequestID]float64, trialsClosed map[model.RequestID]bool, ) float64 { sum := 0.0 for subSearchID, subSearch := range s.subSearches { - subSearchTrialProgress := map[model.RequestID]PartialUnits{} + subSearchTrialProgress := map[model.RequestID]float64{} for rID, p := range trialProgress { if subSearchID == s.TrialTable[rID] { subSearchTrialProgress[rID] = p @@ -134,15 +131,16 @@ func (s *tournamentSearch) progress( return sum / float64(len(s.subSearches)) } -func (s *tournamentSearch) Unit() expconf.Unit { - return s.subSearches[0].Unit() -} - -func (s *tournamentSearch) markCreates(subSearchID int, operations []Operation) []Operation { - for _, operation := range operations { - if operation, ok := operation.(Create); ok { - s.TrialTable[operation.RequestID] = subSearchID +func (s *tournamentSearch) markCreates(subSearchID int, actions []Action) []Action { + for _, action := range actions { + if _, ok := action.(Create); ok { + create := action.(Create) + s.TrialTable[create.RequestID] = subSearchID } } - return operations + return actions +} + +func (s *tournamentSearch) Type() SearchMethodType { + return s.SearchMethodType } diff --git a/master/pkg/searcher/tournament_test.go b/master/pkg/searcher/tournament_test.go index ae51010aca1..5a4c80c0c6c 100644 --- a/master/pkg/searcher/tournament_test.go +++ b/master/pkg/searcher/tournament_test.go @@ -4,89 +4,103 @@ package searcher import ( "testing" - "gotest.tools/assert" + "github.com/determined-ai/determined/master/pkg/model" + + "github.com/stretchr/testify/require" "github.com/determined-ai/determined/master/pkg/ptrs" - "github.com/determined-ai/determined/master/pkg/schemas" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -const RandomTournamentSearch SearchMethodType = "random_tournament" - -func TestRandomTournamentSearcher(t *testing.T) { - actual := newTournamentSearch( - RandomTournamentSearch, - newRandomSearch(schemas.WithDefaults(expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(2), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(300)), - })), - newRandomSearch(schemas.WithDefaults(expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(200)), - })), - ) - expected := [][]ValidateAfter{ - toOps("300B"), - toOps("300B"), - toOps("200B"), - toOps("200B"), - toOps("200B"), +func TestAdaptiveASHASearchMethod(t *testing.T) { + maxConcurrentTrials := 3 + maxTrials := 9 + maxRungs := 5 + divisor := 3.0 + maxTime := 90 + metric := "loss" + config := expconf.AdaptiveASHAConfig{ + RawMaxTime: &maxTime, + RawDivisor: &divisor, + RawMaxRungs: &maxRungs, + RawMaxConcurrentTrials: &maxConcurrentTrials, + RawMaxTrials: &maxTrials, + RawTimeMetric: ptrs.Ptr("batches"), + RawMode: ptrs.Ptr(expconf.StandardMode), + } + searcherConfig := expconf.SearcherConfig{ + RawAdaptiveASHAConfig: &config, + RawSmallerIsBetter: ptrs.Ptr(true), + RawMetric: ptrs.Ptr(metric), + } + intHparam := &expconf.IntHyperparameter{RawMaxval: 10, RawCount: ptrs.Ptr(3)} + hparams := expconf.Hyperparameters{ + "x": expconf.Hyperparameter{RawIntHyperparameter: intHparam}, } - checkSimulation(t, actual, nil, ConstantValidation, expected) -} -func TestRandomTournamentSearcherReproducibility(t *testing.T) { - conf := expconf.RandomConfig{ - RawMaxTrials: ptrs.Ptr(5), RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(800)), + // Create a new test searcher and verify correct brackets/rungs initialized. + testSearchRunner := NewTestSearchRunner(t, searcherConfig, hparams) + search := testSearchRunner.method.(*tournamentSearch) + expectedRungs := []*rung{ + {UnitsNeeded: uint64(10)}, + {UnitsNeeded: uint64(30)}, + {UnitsNeeded: uint64(90)}, } - conf = schemas.WithDefaults(conf) - gen := func() SearchMethod { - return newTournamentSearch( - RandomTournamentSearch, - newRandomSearch(conf), - newRandomSearch(conf), - ) + for i, s := range search.subSearches { + ashaSearch := s.(*asyncHalvingStoppingSearch) + require.Equal(t, expectedRungs[i:], ashaSearch.Rungs) } - checkReproducibility(t, gen, nil, defaultMetric) -} -func TestTournamentSearchMethod(t *testing.T) { - expectedTrials := []predefinedTrial{ - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.1), - newConstantPredefinedTrial(toOps("1000B"), 0.2), - newConstantPredefinedTrial(toOps("1000B"), 0.3), + // Simulate running the search. + testSearchRunner.run(90, 10, true) - newConstantPredefinedTrial(toOps("1000B"), 0.3), - newConstantPredefinedTrial(toOps("1000B"), 0.2), - newConstantPredefinedTrial(toOps("1000B 3000B"), 0.1), - } + // Expect 2 brackets and 9 total trials. + require.Len(t, search.subSearches, 2) + require.Len(t, search.TrialTable, maxTrials) - adaptiveConfig1 := expconf.SearcherConfig{ - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(3), - RawDivisor: ptrs.Ptr[float64](3), - }, - } - adaptiveConfig1 = schemas.WithDefaults(adaptiveConfig1) - adaptiveMethod1 := NewSearchMethod(adaptiveConfig1) + bracket1 := make(map[model.RequestID]*testTrial) + bracket2 := make(map[model.RequestID]*testTrial) - adaptiveConfig2 := expconf.SearcherConfig{ - RawAsyncHalvingConfig: &expconf.AsyncHalvingConfig{ - RawNumRungs: ptrs.Ptr(3), - RawMaxLength: ptrs.Ptr(expconf.NewLengthInBatches(9000)), - RawMaxTrials: ptrs.Ptr(3), - RawDivisor: ptrs.Ptr[float64](3), - }, + for _, tr := range testSearchRunner.trials { + if search.TrialTable[tr.requestID] == 0 { + bracket1[tr.requestID] = tr + } else { + bracket2[tr.requestID] = tr + } } - adaptiveConfig2 = schemas.WithDefaults(adaptiveConfig2) - adaptiveMethod2 := NewSearchMethod(adaptiveConfig2) - - params := expconf.Hyperparameters{} - method := newTournamentSearch(AdaptiveSearch, adaptiveMethod1, adaptiveMethod2) + // Bracket #1: 6 total trials + // Rungs: [10, 30, 90] + // Since we reported progressively worse metrics, only one run continues to top rung. + // All others are stopped at first rung. + require.Len(t, bracket1, 6) + stoppedAt90 := 0 + stoppedAt10 := 0 + for _, tr := range bracket1 { + if tr.stoppedAt == 90 { + stoppedAt90++ + } + if tr.stoppedAt == 10 { + stoppedAt10++ + } + } + require.Equal(t, 5, stoppedAt10) + require.Equal(t, 1, stoppedAt90) - err := checkValueSimulation(t, method, params, expectedTrials) - assert.NilError(t, err) + // Bracket #2: 3 total trials + // Rungs: [30, 90] + // First run (run #3 from initialTrials) continues to top rung, two will stop at first rung. + require.Len(t, bracket2, 3) + stoppedAt90 = 0 + stoppedAt30 := 0 + for _, tr := range bracket2 { + if tr.stoppedAt == 90 { + stoppedAt90++ + } + if tr.stoppedAt == 30 { + stoppedAt30++ + } + } + require.Equal(t, 1, stoppedAt90) + require.Equal(t, 2, stoppedAt30) } diff --git a/master/pkg/searcher/util_test.go b/master/pkg/searcher/util_test.go index 0a6c1fd23b5..637532d841a 100644 --- a/master/pkg/searcher/util_test.go +++ b/master/pkg/searcher/util_test.go @@ -1,317 +1,143 @@ package searcher import ( - "bytes" "fmt" - "strconv" - "strings" "testing" - "github.com/pkg/errors" + "github.com/determined-ai/determined/master/pkg/model" + "gotest.tools/assert" - "github.com/determined-ai/determined/master/pkg/check" - "github.com/determined-ai/determined/master/pkg/model" - "github.com/determined-ai/determined/master/pkg/nprand" - "github.com/determined-ai/determined/master/pkg/schemas" "github.com/determined-ai/determined/master/pkg/schemas/expconf" ) -const defaultMetric = "metric" - -func isExpected(actual, expected []ValidateAfter) bool { - if len(actual) != len(expected) { - return false - } - for i, act := range actual { - if expected[i].Length != act.Length { - return false - } - } - return true +type TestSearchRunner struct { + config expconf.SearcherConfig + searcher *Searcher + method SearchMethod + trials []*testTrial + t *testing.T } -func checkSimulation( - t *testing.T, - method SearchMethod, - params expconf.Hyperparameters, - validation ValidationFunction, - expected [][]ValidateAfter, -) { - search := NewSearcher(0, method, params) - actual, err := Simulate(search, new(int64), validation, true, defaultMetric) - assert.NilError(t, err) - - assert.Equal(t, len(actual.Results), len(expected)) - for _, actualTrial := range actual.Results { - found := false - for i, expectedTrial := range expected { - if isExpected(actualTrial, expectedTrial) { - expected = append(expected[:i], expected[i+1:]...) - found = true - break - } - } - if !found { - t.Errorf("unexpected trial %+v not in %+v", actualTrial, expected) - } - } +type testTrial struct { + requestID model.RequestID + hparams HParamSample + stopped bool + stoppedAt int + completed bool } -// checkReproducibility creates two searchers with the same seed and the given config, simulates -// them, and checks that they produce the same trials and the same sequence of workloads for each -// trial. -func checkReproducibility( - t assert.TestingT, methodGen func() SearchMethod, hparams expconf.Hyperparameters, metric string, -) { - hparams = schemas.WithDefaults(hparams) - seed := int64(17) - searcher1 := NewSearcher(uint32(seed), methodGen(), hparams) - searcher2 := NewSearcher(uint32(seed), methodGen(), hparams) - - results1, err1 := Simulate(searcher1, &seed, ConstantValidation, true, metric) - assert.NilError(t, err1) - results2, err2 := Simulate(searcher2, &seed, ConstantValidation, true, metric) - assert.NilError(t, err2) - - assert.Equal(t, len(results1.Results), len(results2.Results), - "searchers had different number of trials") - for requestID := range results1.Results { - w1 := results1.Results[requestID] - w2 := results2.Results[requestID] - - assert.Equal(t, len(w1), len(w2), "trial had different numbers of workloads between searchers") - for i := range w1 { - // We want to ignore the start and end time fields, so check the rest individually. - assert.Equal(t, w1[i], w2[i], "workload differed between searchers") - } - } -} - -func toOps(types string) (ops []ValidateAfter) { - for _, unparsed := range strings.Fields(types) { - count, err := strconv.ParseUint(unparsed[:len(unparsed)-1], 10, 64) - if err != nil { - panic(err) - } - switch unit := string(unparsed[len(unparsed)-1]); unit { - case "R": - ops = append(ops, ValidateAfter{Length: count}) - case "B": - ops = append(ops, ValidateAfter{Length: count}) - case "E": - ops = append(ops, ValidateAfter{Length: count}) - } - } - return ops +func (tr testTrial) String() string { + return fmt.Sprintf( + "testTrial{requestID: %v, hparams: %v, stopped: %v, stoppedAt: %v, completed: %v}", + tr.requestID, tr.hparams, tr.stopped, tr.stoppedAt, tr.completed, + ) } -type predefinedTrial struct { - Ops []ValidateAfter - ValMetrics []float64 - EarlyExit *int +func mockRequestID(id int) model.RequestID { + return model.RequestID{byte(id)} } -func newPredefinedTrial(ops []ValidateAfter, earlyExit *int, valMetrics []float64) predefinedTrial { - return predefinedTrial{ - Ops: ops, - EarlyExit: earlyExit, - ValMetrics: valMetrics, +func (sr *TestSearchRunner) run(maxUnits int, valPeriod int, increasing bool) { + metric := 0.0 + sr.initialRuns() + for i := 0; i < len(sr.trials); i++ { + trial := sr.trials[i] + for j := 0; j <= maxUnits; j += valPeriod { + if increasing { + metric++ + } else { + metric-- + } + sr.reportValidationMetric(trial.requestID, j, metric) + if trial.stopped { + trial.stoppedAt = j + break + } + } + sr.closeRun(trial.requestID) } } -func newEarlyExitPredefinedTrial(ops []ValidateAfter, valMetric float64) predefinedTrial { - var valMetrics []float64 - for range ops { - valMetrics = append(valMetrics, valMetric) +func NewTestSearchRunner( + t *testing.T, config expconf.SearcherConfig, hparams expconf.Hyperparameters, +) *TestSearchRunner { + expSeed := uint32(102932948) + method := NewSearchMethod(config) + searcher := NewSearcher(expSeed, method, hparams) + return &TestSearchRunner{ + t: t, + config: config, + searcher: searcher, + method: method, + trials: []*testTrial{}, } - exitEarly := len(ops) - 1 - return newPredefinedTrial(ops, &exitEarly, valMetrics) } -func newConstantPredefinedTrial(ops []ValidateAfter, valMetric float64) predefinedTrial { - var valMetrics []float64 - for range ops { - valMetrics = append(valMetrics, valMetric) - } - return newPredefinedTrial(ops, nil, valMetrics) +func (sr *TestSearchRunner) initialRuns() ([]testTrial, []testTrial) { + creates, err := sr.searcher.InitialTrials() + assert.NilError(sr.t, err, "error getting initial trials") + created, stopped := sr.handleActions(creates) + return created, stopped } -func (t *predefinedTrial) Train(length uint64, opIndex int) error { - if opIndex >= len(t.Ops) { - return errors.Errorf("ran out of expected ops trying to train") - } - op := t.Ops[opIndex] - if op.Length != length { - return errors.Errorf("wanted %v got %v", op.Length, length) +func (sr *TestSearchRunner) reportValidationMetric( + requestID model.RequestID, stepNum int, metricVal float64, +) ([]testTrial, []testTrial) { + metrics := map[string]interface{}{ + sr.config.Metric(): metricVal, } - return nil -} - -func (t *predefinedTrial) CheckComplete(opIndex int) error { - return check.Equal(len(t.Ops), opIndex, "had ops %s left", t.Ops[opIndex:]) -} - -// checkValueSimulation will run a SearchMethod until completion, using predefinedTrials. -func checkValueSimulation( - t *testing.T, - method SearchMethod, - params expconf.Hyperparameters, - expectedTrials []predefinedTrial, -) error { - // Create requests are assigned a predefinedTrial in order. - var nextTrialID int - var pending []Operation - - trialIDs := map[model.RequestID]int{} - trialOpIdx := map[model.RequestID]int{} - trialEarlyExits := map[model.RequestID]bool{} - - ctx := context{ - rand: nprand.New(0), - hparams: params, + if sr.config.RawAdaptiveASHAConfig != nil { + timeMetric := string(sr.config.RawAdaptiveASHAConfig.Length().Unit) + metrics[timeMetric] = float64(stepNum) } - - ops, err := method.initialOperations(ctx) - if err != nil { - return errors.Wrap(err, "initialOperations") + if sr.config.RawAsyncHalvingConfig != nil { + timeMetric := string(sr.config.RawAsyncHalvingConfig.Length().Unit) + metrics[timeMetric] = float64(stepNum) } + actions, err := sr.searcher.ValidationCompleted(requestID, metrics) + assert.NilError(sr.t, err, "error completing validation") - pending = append(pending, ops...) - - for len(pending) > 0 { - var requestID model.RequestID - operation := pending[0] - pending = pending[1:] - - switch operation := operation.(type) { - case Create: - requestID = operation.RequestID - if nextTrialID >= len(expectedTrials) { - return errors.Errorf("search method created too many trials") - } - trialIDs[requestID] = nextTrialID - trialOpIdx[requestID] = 0 - - ops, err = method.trialCreated(ctx, requestID) - if err != nil { - return errors.Wrap(err, "trialCreated") - } - nextTrialID++ + created, stopped := sr.handleActions(actions) - case ValidateAfter: - requestID = operation.GetRequestID() - if trialEarlyExits[requestID] { - continue - } - - trialID := trialIDs[requestID] - trial := expectedTrials[trialID] - if trial.EarlyExit != nil && trialOpIdx[requestID] == *trial.EarlyExit { - trialEarlyExits[requestID] = true - } - ops, err = simulateOperationComplete(ctx, method, trial, operation, trialOpIdx[requestID]) - if err != nil { - return errors.Wrapf(err, "simulateOperationComplete for trial %v", trialID+1) - } - trialOpIdx[requestID]++ - if err = saveAndReload(method); err != nil { - return errors.Wrap(err, "snapshot failed") - } - - case Close: - requestID = operation.RequestID - trialID := trialIDs[requestID] - trial := expectedTrials[trialID] - err = trial.CheckComplete(trialOpIdx[requestID]) - if err != nil { - return errors.Wrapf(err, "trial %v closed before completion", trialID+1) - } - - ops, err = method.trialClosed(ctx, requestID) - if err != nil { - return errors.Wrap(err, "trialClosed") - } - - default: - return errors.Errorf("unexpected searcher operation: %T", operation) - } + return created, stopped +} - pending = append(pending, ops...) - } +// closeRun simulates a run completing its train loop and exiting. +func (sr *TestSearchRunner) closeRun(requestID model.RequestID) ([]testTrial, []testTrial) { + run := sr.getTrialByRequestID(requestID) + run.completed = true + actions, err := sr.searcher.TrialExited(requestID) + assert.NilError(sr.t, err, "error closing run") + return sr.handleActions(actions) +} - for requestID, trialID := range trialIDs { - if err = expectedTrials[trialID].CheckComplete(trialOpIdx[requestID]); err != nil { - return errors.Wrapf(err, "incomplete trial %v", trialID+1) +func (sr *TestSearchRunner) getTrialByRequestID(requestID model.RequestID) *testTrial { + for i, t := range sr.trials { + if t.requestID == requestID { + return sr.trials[i] } } - return nil } -func runValueSimulationTestCases(t *testing.T, testCases []valueSimulationTestCase) { - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - // Apply WithDefaults in one place to make tests easyto write. - config := schemas.WithDefaults(tc.config) - hparams := schemas.WithDefaults(tc.hparams) - method := NewSearchMethod(config) - err := checkValueSimulation(t, method, hparams, tc.expectedTrials) - assert.NilError(t, err) - }) - } -} - -type valueSimulationTestCase struct { - name string - expectedTrials []predefinedTrial - hparams expconf.Hyperparameters - config expconf.SearcherConfig -} - -func simulateOperationComplete( - ctx context, - method SearchMethod, - trial predefinedTrial, - operation ValidateAfter, - opIndex int, -) ([]Operation, error) { - if err := trial.Train(operation.Length, opIndex); err != nil { - return nil, errors.Wrap(err, "error checking ValidateAfter with predefinedTrial") - } +func (sr *TestSearchRunner) handleActions(actions []Action) ([]testTrial, []testTrial) { + var trialsCreated []testTrial + var trialsStopped []testTrial - if trial.EarlyExit != nil && opIndex == *trial.EarlyExit { - ops, err := method.trialExitedEarly(ctx, operation.RequestID, model.UserRequestedStop) - if err != nil { - return nil, errors.Wrap(err, "trainCompleted") + for _, action := range actions { + switch action := action.(type) { + case Create: + run := testTrial{requestID: action.RequestID, hparams: action.Hparams} + _, err := sr.searcher.TrialCreated(action.RequestID) + assert.NilError(sr.t, err, "error creating run") + sr.trials = append(sr.trials, &run) + trialsCreated = append(trialsCreated, run) + case Stop: + trial := sr.getTrialByRequestID(action.RequestID) + trial.stopped = true + trialsStopped = append(trialsStopped, *trial) } - return ops, nil } - - ops, err := method.validationCompleted( - ctx, operation.RequestID, trial.ValMetrics[opIndex], operation, - ) - if err != nil { - return nil, errors.Wrap(err, "validationCompleted") - } - - return ops, nil -} - -func saveAndReload(method SearchMethod) error { - // take the state back and forth through a round of serialization to test. - if state, err := method.Snapshot(); err != nil { - return err - } else if err := method.Restore(state); err != nil { - return err - } else if state2, err := method.Snapshot(); err != nil { // Test restore is correct. - return err - } else if !bytes.Equal(state, state2) { - unmarshaledState := method.Restore(state) - unmarshaledState2 := method.Restore(state2) - fmt.Printf("%+v\n", unmarshaledState) //nolint: forbidigo - fmt.Printf("%+v\n", unmarshaledState2) //nolint: forbidigo - return errors.New("successive snapshots were not identical") - } - return nil + return trialsCreated, trialsStopped } diff --git a/proto/patches/api.json b/proto/patches/api.json index 8fadef754b9..479f9da7fbf 100644 --- a/proto/patches/api.json +++ b/proto/patches/api.json @@ -71,13 +71,6 @@ } }, "description": "https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Any" - }, - "v1CompleteValidateAfterOperation": { - "properties": { - "searcherMetric": { - "type": null - } - } } } } diff --git a/proto/pkg/apiv1/api.pb.go b/proto/pkg/apiv1/api.pb.go index d2635fdaa01..9cfcdbec86a 100644 --- a/proto/pkg/apiv1/api.pb.go +++ b/proto/pkg/apiv1/api.pb.go @@ -84,8 +84,8 @@ var file_determined_api_v1_api_proto_rawDesc = []byte{ 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xbb, - 0xe9, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x7e, + 0x75, 0x72, 0x63, 0x65, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xdd, + 0xe5, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x7e, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, @@ -1216,1830 +1216,1800 @@ var file_determined_api_v1_api_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xde, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xfa, 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x60, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x13, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0xd6, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, 0x72, 0x6c, 0x79, - 0x45, 0x78, 0x69, 0x74, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, 0x72, 0x6c, - 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, - 0x3a, 0x0a, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x12, 0xb0, 0x01, 0x0a, - 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0xca, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, - 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xd6, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, 0x72, + 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, + 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, - 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x3a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xb4, 0x01, 0x0a, - 0x12, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x24, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x65, 0x78, + 0x69, 0x74, 0x3a, 0x0a, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x12, 0xb0, + 0x01, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, + 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x2f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x3a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xb4, + 0x01, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf0, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, + 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x65, 0x88, 0x02, 0x01, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x61, 0x69, 0x6e, + 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xfc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x41, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0xf0, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x88, 0x02, 0x01, 0x92, + 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x55, 0x22, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x3a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x65, 0x88, 0x02, 0x01, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x3a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xfc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x88, 0x02, 0x01, 0x92, 0x41, 0x0a, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, - 0x22, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, - 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x3a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, 0x0a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x07, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x0a, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, - 0x56, 0x32, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, + 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, + 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, + 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, - 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x2d, 0x76, 0x32, 0x12, 0x9a, 0x01, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, - 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, - 0x2d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, - 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4a, 0x6f, + 0x62, 0x73, 0x56, 0x32, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, + 0x62, 0x2d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x2d, 0x76, 0x32, 0x12, 0x9a, 0x01, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa2, 0x01, - 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x75, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0x02, - 0x01, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xb5, 0x01, 0x0a, 0x13, 0x50, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4a, 0x6f, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6a, + 0x6f, 0x62, 0x2d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, + 0x0c, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x32, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0xa0, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x30, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x32, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x0b, 0x0a, - 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, - 0x2a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, - 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, - 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x93, - 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x25, + 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, - 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x49, 0x64, 0x6c, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x4e, 0x6f, - 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0xa2, 0x01, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, + 0x88, 0x02, 0x01, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x08, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x1a, 0x2b, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, - 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, 0x0a, 0x0c, - 0x4b, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x74, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, - 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x26, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, - 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xbb, 0x01, 0x0a, 0x13, 0x53, 0x65, - 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, - 0x6b, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x21, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xb5, 0x01, 0x0a, 0x13, 0x50, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, - 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x45, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x4c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x4e, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3f, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x32, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0xa0, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x30, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x32, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, + 0x0b, 0x0a, 0x09, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, + 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, + 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, + 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, + 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2a, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, - 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x09, 0x47, - 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x65, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, - 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, - 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x2f, - 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x09, 0x4b, - 0x69, 0x6c, 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, - 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x68, - 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x68, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, - 0x01, 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x0b, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x68, 0x65, - 0x6c, 0x6c, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x68, 0x65, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, - 0x75, 0x6e, 0x63, 0x68, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x24, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, - 0x65, 0x6c, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x35, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, + 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x49, 0x64, 0x6c, 0x65, 0x4e, + 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, + 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x1a, 0x2b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, + 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9b, 0x01, + 0x0a, 0x0c, 0x4b, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x8d, 0x01, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x24, 0x2e, 0x64, + 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x4e, + 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3a, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, + 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xbb, 0x01, 0x0a, 0x13, + 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x50, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, + 0x6f, 0x6f, 0x6b, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, + 0x6f, 0x6b, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, + 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x74, + 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, - 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x25, 0x2e, + 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, + 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x65, + 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, + 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, + 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, + 0x09, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, + 0x69, 0x6c, 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, + 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, + 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, - 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x24, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xb5, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2c, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, - 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, - 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, - 0x0a, 0x0d, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, - 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, - 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, + 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, + 0x6c, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x65, 0x6c, 0x6c, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x0b, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, + 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, + 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x65, - 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x24, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, - 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xad, - 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, + 0x8d, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x24, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, + 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x95, 0x01, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, + 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x24, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xb5, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2c, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, + 0x8c, 0x01, 0x0a, 0x0d, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97, + 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0e, 0x0a, 0x0c, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2c, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0xcd, - 0x01, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x28, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3e, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xad, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, + 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0e, + 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, + 0x12, 0xcd, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x50, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, - 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, - 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xa0, - 0x01, 0x0a, 0x11, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x4e, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, + 0x12, 0xa0, 0x01, 0x0a, 0x11, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x30, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0xbd, 0x01, 0x0a, 0x19, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x12, 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x30, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0xbd, 0x01, 0x0a, 0x19, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x54, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x0a, 0x0a, - 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, - 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x73, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0xcc, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, - 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x73, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0xcc, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x4d, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x2a, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2d, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x9b, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7b, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x2a, 0x35, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2d, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x29, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x74, 0x0a, 0x08, 0x47, - 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, + 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x07, 0x0a, 0x05, + 0x54, 0x61, 0x73, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x7b, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x22, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7c, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x74, 0x4d, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x74, 0x0a, + 0x08, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x08, 0x0a, 0x06, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7c, 0x0a, 0x09, 0x50, 0x6f, 0x73, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x24, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x0a, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x35, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x32, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x3a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x41, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x26, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, + 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, + 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, + 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, + 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, + 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, + 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x6e, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x09, 0x4d, 0x6f, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x24, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x0a, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x35, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x24, 0x32, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x3a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x97, 0x01, 0x0a, 0x0c, 0x41, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x08, 0x0a, - 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x23, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x76, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, - 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x08, 0x0a, - 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x25, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x09, 0x4d, 0x6f, 0x76, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, - 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, - 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, - 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6d, 0x6f, - 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x79, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0x41, - 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, - 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, - 0x8e, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0xb5, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x76, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x36, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x79, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, + 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x92, 0x41, 0x08, 0x0a, 0x06, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, + 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x12, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x08, - 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xa7, 0x01, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, - 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, - 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, - 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x11, 0x50, 0x61, - 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x08, 0x0a, - 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x32, 0x38, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x3a, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x08, 0x0a, - 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x2a, 0x38, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x12, 0xe9, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x4d, + 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, - 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3a, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x29, 0x22, 0x24, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x11, + 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, - 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, + 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x32, + 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, + 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x3a, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, + 0x08, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x2a, + 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, + 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x12, 0xe9, 0x01, 0x0a, 0x1d, 0x47, 0x65, + 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, + 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, + 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x0d, 0x0a, + 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x16, 0x50, 0x6f, + 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, - 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, - 0x01, 0x2a, 0x12, 0xb0, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x33, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xb0, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, - 0x72, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x32, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0x9e, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0xd0, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0xad, 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x92, 0x41, - 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2d, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x30, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x30, 0x01, 0x12, 0xc0, 0x01, 0x0a, - 0x0e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x73, 0x2d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x30, 0x01, 0x12, - 0xb8, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x55, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x98, 0x01, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, - 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, - 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, - 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, - 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, - 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x38, 0x73, 0x2d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x12, 0xb3, - 0x01, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x88, 0x02, 0x01, - 0x92, 0x41, 0x09, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x72, 0x61, 0x77, 0x12, 0xcc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x64, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x6c, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x2f, 0x72, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x37, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, - 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, - 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa0, 0x01, 0x0a, 0x0e, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, - 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x32, 0x17, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x3a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x98, - 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x32, 0x13, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x9e, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x13, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0xd0, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x79, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0xad, 0x01, 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, + 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x30, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, + 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x30, 0x01, 0x12, 0xc0, + 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x30, + 0x01, 0x12, 0xb8, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x73, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x98, 0x01, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, 0x6c, + 0x73, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x2a, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2a, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6f, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, + 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4b, + 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x38, 0x73, 0x2d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, + 0x12, 0xb3, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x88, + 0x02, 0x01, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x72, 0x61, 0x77, 0x12, 0xcc, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x64, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, - 0xab, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, - 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x93, 0x01, - 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x57, 0x6f, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x37, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x29, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x0d, 0x50, + 0x6f, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x32, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x70, 0x69, 0x6e, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x69, 0x6e, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0c, + 0x2c, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa0, 0x01, + 0x0a, 0x0e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x74, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x32, 0x17, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x98, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x70, 0x69, - 0x6e, 0x12, 0xe2, 0x01, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x2b, 0x2e, 0x64, + 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, - 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x2d, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2d, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xdd, 0x01, - 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, + 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x0c, 0x0a, 0x0a, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, + 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x12, 0xab, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x8d, 0x02, - 0x0a, 0x29, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x57, - 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x57, 0x69, 0x74, - 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x44, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2d, 0x69, 0x64, 0x73, 0x2d, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xfa, 0x01, - 0x0a, 0x28, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x42, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, + 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x32, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x70, 0x69, 0x6e, 0x12, 0x9b, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, + 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, + 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, + 0x70, 0x69, 0x6e, 0x12, 0xe2, 0x01, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2d, 0x61, 0x75, 0x74, 0x6f, - 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xe8, 0x01, 0x0a, 0x20, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x64, 0x65, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, + 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x2b, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, + 0x6f, 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x92, 0x41, 0x0c, 0x0a, 0x0a, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x2d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x3a, 0x01, 0x2a, 0x12, + 0xdd, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x8d, 0x02, 0x0a, 0x29, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x57, + 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x2a, - 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, - 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, - 0x75, 0x6f, 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, + 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x69, 0x64, 0x73, 0x2d, 0x77, 0x69, 0x74, 0x68, 0x2d, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0xfa, 0x01, 0x0a, 0x28, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x42, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x65, 0x74, 0x2d, 0x6b, 0x38, 0x73, 0x2d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x85, 0x01, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6b, 0x65, 0x79, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, - 0x12, 0xac, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x43, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2d, 0x61, 0x75, + 0x74, 0x6f, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xe8, 0x01, 0x0a, + 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x3a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x0c, 0x0a, + 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x36, 0x2a, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4b, + 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, + 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x65, 0x74, 0x2d, 0x6b, 0x38, 0x73, 0x2d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x85, + 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3c, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, - 0xe2, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, + 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2d, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6b, 0x65, 0x79, 0x2f, 0x7b, 0x6b, 0x65, + 0x79, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2d, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x41, 0x64, + 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, + 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x1a, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0c, 0x50, 0x61, + 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x32, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, - 0xa5, 0x01, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, 0x0a, 0x0a, - 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x1a, - 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, - 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, - 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x32, 0x15, + 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x8e, - 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0x99, 0x01, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0xa1, 0x01, + 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, + 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, + 0x0e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, 0x0a, 0x0f, 0x4d, 0x6f, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, + 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x10, - 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, - 0x98, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x4d, - 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, 0x0a, 0x0f, 0x4d, 0x6f, 0x76, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x25, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, - 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x32, 0x15, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x3a, 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x10, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x3a, 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, 0x0b, 0x54, - 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x1a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x12, 0xa8, 0x01, 0x0a, 0x14, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x09, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, + 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x19, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, - 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x32, 0x15, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8c, 0x01, 0x0a, + 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, - 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xe0, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x3e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x3f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x37, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, - 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x06, - 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x69, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb6, 0x01, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, - 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, - 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, - 0x62, 0x79, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, - 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, - 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x23, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x06, 0x0a, 0x04, - 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, - 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x2d, 0x61, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, - 0x10, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x07, 0x0a, - 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, - 0x73, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0xaf, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x17, 0x0a, 0x0b, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2d, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0xc6, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x6e, 0x64, - 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x2e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, + 0x6b, 0x73, 0x3a, 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8e, 0x01, 0x0a, 0x0d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x22, 0x3e, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, - 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0xd2, 0x01, 0x0a, 0x15, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, - 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, + 0x0b, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, + 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x12, 0xa8, 0x01, 0x0a, + 0x14, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x43, 0x2a, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xe7, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x1a, 0x3e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, - 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, - 0xdd, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x64, 0x65, + 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, + 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x1a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, + 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, + 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa8, 0x01, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x06, 0x0a, + 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xe0, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x3e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, + 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, + 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x3f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, + 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x16, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, - 0xd5, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x12, 0x31, 0x2e, 0x64, 0x65, + 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x12, 0x26, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, + 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x69, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb6, + 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, + 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, + 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, - 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, - 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, - 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6c, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, - 0x69, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x75, 0x73, - 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x2e, 0x64, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, + 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, + 0x79, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, + 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x06, + 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x55, 0x6e, - 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, - 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x70, 0x61, - 0x75, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, - 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, - 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6d, 0x6f, 0x76, - 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x08, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, - 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6b, 0x69, 0x6c, - 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x75, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8a, 0x01, - 0x0a, 0x0b, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x25, 0x2e, + 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, - 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, - 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x55, - 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x64, + 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, + 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x2d, + 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x98, + 0x01, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, + 0x07, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x01, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, - 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, - 0x6e, 0x73, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x82, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x23, 0x2e, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0xaf, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x92, 0x41, 0x17, 0x0a, 0x0b, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2d, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0xc6, 0x01, 0x0a, 0x11, 0x42, 0x69, + 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x22, + 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0xd2, 0x01, 0x0a, 0x15, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, + 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x70, 0x61, 0x75, 0x73, - 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, + 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x43, 0x2a, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xe7, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x1a, 0x3e, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0xdd, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x16, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, + 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x12, 0x31, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x14, 0x47, 0x65, + 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, + 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x29, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x10, 0x50, 0x61, + 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, + 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, + 0x70, 0x61, 0x75, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x75, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x75, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9a, 0x01, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xa0, 0x01, 0x0a, 0x0f, 0x50, - 0x6f, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xb1, 0x01, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x24, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x75, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, + 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, + 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6d, + 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x08, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, + 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, + 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6b, + 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x8a, 0x01, 0x0a, 0x0b, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, + 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x7b, 0x6b, 0x65, 0x79, - 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x1a, 0x50, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, - 0x41, 0x07, 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x1a, - 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xc5, 0x01, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x41, - 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x2e, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xde, 0x01, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x64, + 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, + 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, + 0x0d, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x27, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x82, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, + 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x75, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, + 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x70, 0x61, + 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6d, + 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x9a, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xa0, 0x01, 0x0a, + 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x75, 0x6e, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x01, 0x2a, 0x12, + 0xb1, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x41, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x7b, 0x6b, + 0x65, 0x79, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x1a, 0x50, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x07, 0x0a, 0x05, - 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0xc2, - 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x40, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x67, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x7d, 0x12, 0xe7, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x56, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x46, 0x1a, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xc5, 0x01, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x47, 0x6c, + 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x07, 0x0a, + 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x2e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0xde, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x41, - 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x2a, 0x41, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0xcb, 0x01, - 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x07, 0x0a, 0x05, - 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x2a, 0x2e, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x0c, - 0x4d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x07, + 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, + 0x12, 0xc2, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x96, 0x01, 0x0a, - 0x0e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x63, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x8e, 0x01, 0x0a, 0x0c, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x07, 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0xe7, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x07, 0x0a, + 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x2a, 0x41, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, + 0xcb, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x6b, - 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x96, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x9a, 0x01, 0x0a, 0x0f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x07, + 0x0a, 0x05, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x2a, 0x2e, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x7b, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x12, 0x8e, 0x01, + 0x0a, 0x0c, 0x4d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x92, 0x41, 0x0a, 0x0a, - 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, - 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xa2, 0x01, 0x0a, - 0x11, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x73, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x70, 0x61, - 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x96, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x75, 0x6d, - 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x8e, 0x01, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x96, + 0x01, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x63, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x8e, 0x01, 0x0a, 0x0c, 0x4b, 0x69, 0x6c, 0x6c, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, + 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, + 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x96, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x9a, 0x01, 0x0a, 0x0f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1d, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x65, 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xa2, + 0x01, 0x0a, 0x11, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x92, 0x41, 0x08, 0x0a, - 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0x8b, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0x41, 0x08, - 0x0a, 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x9c, - 0x01, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, - 0x08, 0x0a, 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, - 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x2f, - 0x7b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x42, 0xda, 0x07, - 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x92, 0x41, 0xa1, 0x07, 0x12, 0x95, 0x06, 0x0a, 0x15, 0x44, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x28, 0x42, 0x65, - 0x74, 0x61, 0x29, 0x12, 0xf5, 0x04, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, - 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x71, 0x75, 0x69, - 0x63, 0x6b, 0x6c, 0x79, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x69, 0x6c, 0x79, 0x20, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, - 0x79, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x20, 0x44, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, - 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x65, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x63, 0x75, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, - 0x6f, 0x72, 0x72, 0x79, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x44, 0x65, 0x76, 0x4f, 0x70, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x67, 0x61, 0x70, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, - 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x79, 0x54, 0x6f, 0x72, 0x63, 0x68, - 0x20, 0x2d, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, - 0x2d, 0x2d, 0x2d, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x65, 0x70, - 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x22, 0x40, 0x0a, 0x0d, 0x44, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x49, 0x12, 0x16, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x69, 0x2f, 0x1a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x40, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2a, 0x3d, 0x0a, - 0x0a, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x2f, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, - 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x03, 0x30, 0x2e, - 0x31, 0x2a, 0x02, 0x01, 0x02, 0x5a, 0x4a, 0x0a, 0x48, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x08, 0x02, 0x12, 0x24, 0x42, 0x65, 0x61, 0x72, - 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x02, 0x62, 0x11, 0x0a, 0x0f, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x00, 0x72, 0x24, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x41, 0x49, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, + 0x70, 0x61, 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x96, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x8e, 0x01, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x92, 0x41, + 0x08, 0x0a, 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, + 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x8b, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, + 0x41, 0x08, 0x0a, 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, + 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x12, 0x9c, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, + 0x92, 0x41, 0x08, 0x0a, 0x06, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x32, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x42, + 0xda, 0x07, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x92, 0x41, 0xa1, 0x07, 0x12, 0x95, 0x06, 0x0a, 0x15, + 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x28, + 0x42, 0x65, 0x74, 0x61, 0x29, 0x12, 0xf5, 0x04, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x72, 0x61, + 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x71, + 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x69, 0x6c, 0x79, 0x20, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x2e, + 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x73, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, + 0x20, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, + 0x63, 0x75, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, + 0x20, 0x77, 0x6f, 0x72, 0x72, 0x79, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x44, 0x65, 0x76, + 0x4f, 0x70, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, + 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, + 0x20, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, + 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, + 0x6e, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x61, 0x70, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, + 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x54, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x79, 0x54, 0x6f, 0x72, + 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x72, + 0x6b, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x47, 0x50, + 0x55, 0x20, 0x2d, 0x2d, 0x2d, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x69, + 0x73, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, + 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2c, 0x20, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, + 0x65, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x22, 0x40, 0x0a, + 0x0d, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x49, 0x12, 0x16, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2f, 0x1a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x40, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2a, + 0x3d, 0x0a, 0x0a, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x2f, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, + 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x03, + 0x30, 0x2e, 0x31, 0x2a, 0x02, 0x01, 0x02, 0x5a, 0x4a, 0x0a, 0x48, 0x0a, 0x0b, 0x42, 0x65, 0x61, + 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x08, 0x02, 0x12, 0x24, 0x42, 0x65, + 0x61, 0x72, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x02, 0x62, 0x11, 0x0a, 0x0f, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x00, 0x72, 0x24, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x49, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var file_determined_api_v1_api_proto_goTypes = []interface{}{ @@ -3148,443 +3118,439 @@ var file_determined_api_v1_api_proto_goTypes = []interface{}{ (*PostAllocationAcceleratorDataRequest)(nil), // 102: determined.api.v1.PostAllocationAcceleratorDataRequest (*AllocationAllGatherRequest)(nil), // 103: determined.api.v1.AllocationAllGatherRequest (*NotifyContainerRunningRequest)(nil), // 104: determined.api.v1.NotifyContainerRunningRequest - (*GetCurrentTrialSearcherOperationRequest)(nil), // 105: determined.api.v1.GetCurrentTrialSearcherOperationRequest - (*CompleteTrialSearcherValidationRequest)(nil), // 106: determined.api.v1.CompleteTrialSearcherValidationRequest - (*ReportTrialSearcherEarlyExitRequest)(nil), // 107: determined.api.v1.ReportTrialSearcherEarlyExitRequest - (*ReportTrialProgressRequest)(nil), // 108: determined.api.v1.ReportTrialProgressRequest - (*PostTrialRunnerMetadataRequest)(nil), // 109: determined.api.v1.PostTrialRunnerMetadataRequest - (*ReportTrialMetricsRequest)(nil), // 110: determined.api.v1.ReportTrialMetricsRequest - (*ReportTrialTrainingMetricsRequest)(nil), // 111: determined.api.v1.ReportTrialTrainingMetricsRequest - (*ReportTrialValidationMetricsRequest)(nil), // 112: determined.api.v1.ReportTrialValidationMetricsRequest - (*ReportCheckpointRequest)(nil), // 113: determined.api.v1.ReportCheckpointRequest - (*GetJobsRequest)(nil), // 114: determined.api.v1.GetJobsRequest - (*GetJobsV2Request)(nil), // 115: determined.api.v1.GetJobsV2Request - (*GetJobQueueStatsRequest)(nil), // 116: determined.api.v1.GetJobQueueStatsRequest - (*UpdateJobQueueRequest)(nil), // 117: determined.api.v1.UpdateJobQueueRequest - (*GetTemplatesRequest)(nil), // 118: determined.api.v1.GetTemplatesRequest - (*GetTemplateRequest)(nil), // 119: determined.api.v1.GetTemplateRequest - (*PutTemplateRequest)(nil), // 120: determined.api.v1.PutTemplateRequest - (*PostTemplateRequest)(nil), // 121: determined.api.v1.PostTemplateRequest - (*PatchTemplateConfigRequest)(nil), // 122: determined.api.v1.PatchTemplateConfigRequest - (*PatchTemplateNameRequest)(nil), // 123: determined.api.v1.PatchTemplateNameRequest - (*DeleteTemplateRequest)(nil), // 124: determined.api.v1.DeleteTemplateRequest - (*GetNotebooksRequest)(nil), // 125: determined.api.v1.GetNotebooksRequest - (*GetNotebookRequest)(nil), // 126: determined.api.v1.GetNotebookRequest - (*IdleNotebookRequest)(nil), // 127: determined.api.v1.IdleNotebookRequest - (*KillNotebookRequest)(nil), // 128: determined.api.v1.KillNotebookRequest - (*SetNotebookPriorityRequest)(nil), // 129: determined.api.v1.SetNotebookPriorityRequest - (*LaunchNotebookRequest)(nil), // 130: determined.api.v1.LaunchNotebookRequest - (*GetShellsRequest)(nil), // 131: determined.api.v1.GetShellsRequest - (*GetShellRequest)(nil), // 132: determined.api.v1.GetShellRequest - (*KillShellRequest)(nil), // 133: determined.api.v1.KillShellRequest - (*SetShellPriorityRequest)(nil), // 134: determined.api.v1.SetShellPriorityRequest - (*LaunchShellRequest)(nil), // 135: determined.api.v1.LaunchShellRequest - (*GetCommandsRequest)(nil), // 136: determined.api.v1.GetCommandsRequest - (*GetCommandRequest)(nil), // 137: determined.api.v1.GetCommandRequest - (*KillCommandRequest)(nil), // 138: determined.api.v1.KillCommandRequest - (*SetCommandPriorityRequest)(nil), // 139: determined.api.v1.SetCommandPriorityRequest - (*LaunchCommandRequest)(nil), // 140: determined.api.v1.LaunchCommandRequest - (*GetTensorboardsRequest)(nil), // 141: determined.api.v1.GetTensorboardsRequest - (*GetTensorboardRequest)(nil), // 142: determined.api.v1.GetTensorboardRequest - (*KillTensorboardRequest)(nil), // 143: determined.api.v1.KillTensorboardRequest - (*SetTensorboardPriorityRequest)(nil), // 144: determined.api.v1.SetTensorboardPriorityRequest - (*LaunchTensorboardRequest)(nil), // 145: determined.api.v1.LaunchTensorboardRequest - (*LaunchTensorboardSearchesRequest)(nil), // 146: determined.api.v1.LaunchTensorboardSearchesRequest - (*DeleteTensorboardFilesRequest)(nil), // 147: determined.api.v1.DeleteTensorboardFilesRequest - (*GetActiveTasksCountRequest)(nil), // 148: determined.api.v1.GetActiveTasksCountRequest - (*GetTaskRequest)(nil), // 149: determined.api.v1.GetTaskRequest - (*GetTasksRequest)(nil), // 150: determined.api.v1.GetTasksRequest - (*GetModelRequest)(nil), // 151: determined.api.v1.GetModelRequest - (*PostModelRequest)(nil), // 152: determined.api.v1.PostModelRequest - (*PatchModelRequest)(nil), // 153: determined.api.v1.PatchModelRequest - (*ArchiveModelRequest)(nil), // 154: determined.api.v1.ArchiveModelRequest - (*UnarchiveModelRequest)(nil), // 155: determined.api.v1.UnarchiveModelRequest - (*MoveModelRequest)(nil), // 156: determined.api.v1.MoveModelRequest - (*DeleteModelRequest)(nil), // 157: determined.api.v1.DeleteModelRequest - (*GetModelsRequest)(nil), // 158: determined.api.v1.GetModelsRequest - (*GetModelLabelsRequest)(nil), // 159: determined.api.v1.GetModelLabelsRequest - (*GetModelVersionRequest)(nil), // 160: determined.api.v1.GetModelVersionRequest - (*GetModelVersionsRequest)(nil), // 161: determined.api.v1.GetModelVersionsRequest - (*PostModelVersionRequest)(nil), // 162: determined.api.v1.PostModelVersionRequest - (*PatchModelVersionRequest)(nil), // 163: determined.api.v1.PatchModelVersionRequest - (*DeleteModelVersionRequest)(nil), // 164: determined.api.v1.DeleteModelVersionRequest - (*GetTrialMetricsByModelVersionRequest)(nil), // 165: determined.api.v1.GetTrialMetricsByModelVersionRequest - (*GetCheckpointRequest)(nil), // 166: determined.api.v1.GetCheckpointRequest - (*PostCheckpointMetadataRequest)(nil), // 167: determined.api.v1.PostCheckpointMetadataRequest - (*CheckpointsRemoveFilesRequest)(nil), // 168: determined.api.v1.CheckpointsRemoveFilesRequest - (*PatchCheckpointsRequest)(nil), // 169: determined.api.v1.PatchCheckpointsRequest - (*DeleteCheckpointsRequest)(nil), // 170: determined.api.v1.DeleteCheckpointsRequest - (*GetTrialMetricsByCheckpointRequest)(nil), // 171: determined.api.v1.GetTrialMetricsByCheckpointRequest - (*ExpMetricNamesRequest)(nil), // 172: determined.api.v1.ExpMetricNamesRequest - (*MetricBatchesRequest)(nil), // 173: determined.api.v1.MetricBatchesRequest - (*TrialsSnapshotRequest)(nil), // 174: determined.api.v1.TrialsSnapshotRequest - (*TrialsSampleRequest)(nil), // 175: determined.api.v1.TrialsSampleRequest - (*GetResourcePoolsRequest)(nil), // 176: determined.api.v1.GetResourcePoolsRequest - (*GetKubernetesResourceManagersRequest)(nil), // 177: determined.api.v1.GetKubernetesResourceManagersRequest - (*ResourceAllocationRawRequest)(nil), // 178: determined.api.v1.ResourceAllocationRawRequest - (*ResourceAllocationAggregatedRequest)(nil), // 179: determined.api.v1.ResourceAllocationAggregatedRequest - (*GetWorkspaceRequest)(nil), // 180: determined.api.v1.GetWorkspaceRequest - (*GetWorkspaceProjectsRequest)(nil), // 181: determined.api.v1.GetWorkspaceProjectsRequest - (*GetWorkspacesRequest)(nil), // 182: determined.api.v1.GetWorkspacesRequest - (*PostWorkspaceRequest)(nil), // 183: determined.api.v1.PostWorkspaceRequest - (*PatchWorkspaceRequest)(nil), // 184: determined.api.v1.PatchWorkspaceRequest - (*DeleteWorkspaceRequest)(nil), // 185: determined.api.v1.DeleteWorkspaceRequest - (*ArchiveWorkspaceRequest)(nil), // 186: determined.api.v1.ArchiveWorkspaceRequest - (*UnarchiveWorkspaceRequest)(nil), // 187: determined.api.v1.UnarchiveWorkspaceRequest - (*PinWorkspaceRequest)(nil), // 188: determined.api.v1.PinWorkspaceRequest - (*UnpinWorkspaceRequest)(nil), // 189: determined.api.v1.UnpinWorkspaceRequest - (*SetWorkspaceNamespaceBindingsRequest)(nil), // 190: determined.api.v1.SetWorkspaceNamespaceBindingsRequest - (*SetResourceQuotasRequest)(nil), // 191: determined.api.v1.SetResourceQuotasRequest - (*ListWorkspaceNamespaceBindingsRequest)(nil), // 192: determined.api.v1.ListWorkspaceNamespaceBindingsRequest - (*GetWorkspacesWithDefaultNamespaceBindingsRequest)(nil), // 193: determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsRequest - (*BulkAutoCreateWorkspaceNamespaceBindingsRequest)(nil), // 194: determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsRequest - (*DeleteWorkspaceNamespaceBindingsRequest)(nil), // 195: determined.api.v1.DeleteWorkspaceNamespaceBindingsRequest - (*GetKubernetesResourceQuotasRequest)(nil), // 196: determined.api.v1.GetKubernetesResourceQuotasRequest - (*GetProjectRequest)(nil), // 197: determined.api.v1.GetProjectRequest - (*GetProjectByKeyRequest)(nil), // 198: determined.api.v1.GetProjectByKeyRequest - (*GetProjectColumnsRequest)(nil), // 199: determined.api.v1.GetProjectColumnsRequest - (*GetProjectNumericMetricsRangeRequest)(nil), // 200: determined.api.v1.GetProjectNumericMetricsRangeRequest - (*PostProjectRequest)(nil), // 201: determined.api.v1.PostProjectRequest - (*AddProjectNoteRequest)(nil), // 202: determined.api.v1.AddProjectNoteRequest - (*PutProjectNotesRequest)(nil), // 203: determined.api.v1.PutProjectNotesRequest - (*PatchProjectRequest)(nil), // 204: determined.api.v1.PatchProjectRequest - (*DeleteProjectRequest)(nil), // 205: determined.api.v1.DeleteProjectRequest - (*ArchiveProjectRequest)(nil), // 206: determined.api.v1.ArchiveProjectRequest - (*UnarchiveProjectRequest)(nil), // 207: determined.api.v1.UnarchiveProjectRequest - (*MoveProjectRequest)(nil), // 208: determined.api.v1.MoveProjectRequest - (*MoveExperimentRequest)(nil), // 209: determined.api.v1.MoveExperimentRequest - (*MoveExperimentsRequest)(nil), // 210: determined.api.v1.MoveExperimentsRequest - (*GetWebhooksRequest)(nil), // 211: determined.api.v1.GetWebhooksRequest - (*PatchWebhookRequest)(nil), // 212: determined.api.v1.PatchWebhookRequest - (*PostWebhookRequest)(nil), // 213: determined.api.v1.PostWebhookRequest - (*DeleteWebhookRequest)(nil), // 214: determined.api.v1.DeleteWebhookRequest - (*TestWebhookRequest)(nil), // 215: determined.api.v1.TestWebhookRequest - (*PostWebhookEventDataRequest)(nil), // 216: determined.api.v1.PostWebhookEventDataRequest - (*GetGroupRequest)(nil), // 217: determined.api.v1.GetGroupRequest - (*GetGroupsRequest)(nil), // 218: determined.api.v1.GetGroupsRequest - (*CreateGroupRequest)(nil), // 219: determined.api.v1.CreateGroupRequest - (*UpdateGroupRequest)(nil), // 220: determined.api.v1.UpdateGroupRequest - (*DeleteGroupRequest)(nil), // 221: determined.api.v1.DeleteGroupRequest - (*GetPermissionsSummaryRequest)(nil), // 222: determined.api.v1.GetPermissionsSummaryRequest - (*GetGroupsAndUsersAssignedToWorkspaceRequest)(nil), // 223: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest - (*GetRolesByIDRequest)(nil), // 224: determined.api.v1.GetRolesByIDRequest - (*GetRolesAssignedToUserRequest)(nil), // 225: determined.api.v1.GetRolesAssignedToUserRequest - (*GetRolesAssignedToGroupRequest)(nil), // 226: determined.api.v1.GetRolesAssignedToGroupRequest - (*SearchRolesAssignableToScopeRequest)(nil), // 227: determined.api.v1.SearchRolesAssignableToScopeRequest - (*ListRolesRequest)(nil), // 228: determined.api.v1.ListRolesRequest - (*AssignRolesRequest)(nil), // 229: determined.api.v1.AssignRolesRequest - (*RemoveAssignmentsRequest)(nil), // 230: determined.api.v1.RemoveAssignmentsRequest - (*PostUserActivityRequest)(nil), // 231: determined.api.v1.PostUserActivityRequest - (*GetProjectsByUserActivityRequest)(nil), // 232: determined.api.v1.GetProjectsByUserActivityRequest - (*SearchExperimentsRequest)(nil), // 233: determined.api.v1.SearchExperimentsRequest - (*BindRPToWorkspaceRequest)(nil), // 234: determined.api.v1.BindRPToWorkspaceRequest - (*UnbindRPFromWorkspaceRequest)(nil), // 235: determined.api.v1.UnbindRPFromWorkspaceRequest - (*OverwriteRPWorkspaceBindingsRequest)(nil), // 236: determined.api.v1.OverwriteRPWorkspaceBindingsRequest - (*ListRPsBoundToWorkspaceRequest)(nil), // 237: determined.api.v1.ListRPsBoundToWorkspaceRequest - (*ListWorkspacesBoundToRPRequest)(nil), // 238: determined.api.v1.ListWorkspacesBoundToRPRequest - (*GetGenericTaskConfigRequest)(nil), // 239: determined.api.v1.GetGenericTaskConfigRequest - (*KillGenericTaskRequest)(nil), // 240: determined.api.v1.KillGenericTaskRequest - (*PauseGenericTaskRequest)(nil), // 241: determined.api.v1.PauseGenericTaskRequest - (*UnpauseGenericTaskRequest)(nil), // 242: determined.api.v1.UnpauseGenericTaskRequest - (*SearchRunsRequest)(nil), // 243: determined.api.v1.SearchRunsRequest - (*MoveRunsRequest)(nil), // 244: determined.api.v1.MoveRunsRequest - (*KillRunsRequest)(nil), // 245: determined.api.v1.KillRunsRequest - (*DeleteRunsRequest)(nil), // 246: determined.api.v1.DeleteRunsRequest - (*ArchiveRunsRequest)(nil), // 247: determined.api.v1.ArchiveRunsRequest - (*UnarchiveRunsRequest)(nil), // 248: determined.api.v1.UnarchiveRunsRequest - (*PauseRunsRequest)(nil), // 249: determined.api.v1.PauseRunsRequest - (*ResumeRunsRequest)(nil), // 250: determined.api.v1.ResumeRunsRequest - (*GetRunMetadataRequest)(nil), // 251: determined.api.v1.GetRunMetadataRequest - (*PostRunMetadataRequest)(nil), // 252: determined.api.v1.PostRunMetadataRequest - (*GetMetadataValuesRequest)(nil), // 253: determined.api.v1.GetMetadataValuesRequest - (*PutWorkspaceConfigPoliciesRequest)(nil), // 254: determined.api.v1.PutWorkspaceConfigPoliciesRequest - (*PutGlobalConfigPoliciesRequest)(nil), // 255: determined.api.v1.PutGlobalConfigPoliciesRequest - (*GetWorkspaceConfigPoliciesRequest)(nil), // 256: determined.api.v1.GetWorkspaceConfigPoliciesRequest - (*GetGlobalConfigPoliciesRequest)(nil), // 257: determined.api.v1.GetGlobalConfigPoliciesRequest - (*DeleteWorkspaceConfigPoliciesRequest)(nil), // 258: determined.api.v1.DeleteWorkspaceConfigPoliciesRequest - (*DeleteGlobalConfigPoliciesRequest)(nil), // 259: determined.api.v1.DeleteGlobalConfigPoliciesRequest - (*MoveSearchesRequest)(nil), // 260: determined.api.v1.MoveSearchesRequest - (*CancelSearchesRequest)(nil), // 261: determined.api.v1.CancelSearchesRequest - (*KillSearchesRequest)(nil), // 262: determined.api.v1.KillSearchesRequest - (*DeleteSearchesRequest)(nil), // 263: determined.api.v1.DeleteSearchesRequest - (*ArchiveSearchesRequest)(nil), // 264: determined.api.v1.ArchiveSearchesRequest - (*UnarchiveSearchesRequest)(nil), // 265: determined.api.v1.UnarchiveSearchesRequest - (*PauseSearchesRequest)(nil), // 266: determined.api.v1.PauseSearchesRequest - (*ResumeSearchesRequest)(nil), // 267: determined.api.v1.ResumeSearchesRequest - (*PostAccessTokenRequest)(nil), // 268: determined.api.v1.PostAccessTokenRequest - (*GetAccessTokensRequest)(nil), // 269: determined.api.v1.GetAccessTokensRequest - (*PatchAccessTokenRequest)(nil), // 270: determined.api.v1.PatchAccessTokenRequest - (*LoginResponse)(nil), // 271: determined.api.v1.LoginResponse - (*CurrentUserResponse)(nil), // 272: determined.api.v1.CurrentUserResponse - (*LogoutResponse)(nil), // 273: determined.api.v1.LogoutResponse - (*GetUsersResponse)(nil), // 274: determined.api.v1.GetUsersResponse - (*GetUserSettingResponse)(nil), // 275: determined.api.v1.GetUserSettingResponse - (*ResetUserSettingResponse)(nil), // 276: determined.api.v1.ResetUserSettingResponse - (*PostUserSettingResponse)(nil), // 277: determined.api.v1.PostUserSettingResponse - (*GetUserResponse)(nil), // 278: determined.api.v1.GetUserResponse - (*GetUserByUsernameResponse)(nil), // 279: determined.api.v1.GetUserByUsernameResponse - (*GetMeResponse)(nil), // 280: determined.api.v1.GetMeResponse - (*PostUserResponse)(nil), // 281: determined.api.v1.PostUserResponse - (*SetUserPasswordResponse)(nil), // 282: determined.api.v1.SetUserPasswordResponse - (*AssignMultipleGroupsResponse)(nil), // 283: determined.api.v1.AssignMultipleGroupsResponse - (*PatchUserResponse)(nil), // 284: determined.api.v1.PatchUserResponse - (*PatchUsersResponse)(nil), // 285: determined.api.v1.PatchUsersResponse - (*GetTelemetryResponse)(nil), // 286: determined.api.v1.GetTelemetryResponse - (*GetMasterResponse)(nil), // 287: determined.api.v1.GetMasterResponse - (*GetMasterConfigResponse)(nil), // 288: determined.api.v1.GetMasterConfigResponse - (*PatchMasterConfigResponse)(nil), // 289: determined.api.v1.PatchMasterConfigResponse - (*MasterLogsResponse)(nil), // 290: determined.api.v1.MasterLogsResponse - (*GetClusterMessageResponse)(nil), // 291: determined.api.v1.GetClusterMessageResponse - (*SetClusterMessageResponse)(nil), // 292: determined.api.v1.SetClusterMessageResponse - (*DeleteClusterMessageResponse)(nil), // 293: determined.api.v1.DeleteClusterMessageResponse - (*GetAgentsResponse)(nil), // 294: determined.api.v1.GetAgentsResponse - (*GetAgentResponse)(nil), // 295: determined.api.v1.GetAgentResponse - (*GetSlotsResponse)(nil), // 296: determined.api.v1.GetSlotsResponse - (*GetSlotResponse)(nil), // 297: determined.api.v1.GetSlotResponse - (*EnableAgentResponse)(nil), // 298: determined.api.v1.EnableAgentResponse - (*DisableAgentResponse)(nil), // 299: determined.api.v1.DisableAgentResponse - (*EnableSlotResponse)(nil), // 300: determined.api.v1.EnableSlotResponse - (*DisableSlotResponse)(nil), // 301: determined.api.v1.DisableSlotResponse - (*CreateGenericTaskResponse)(nil), // 302: determined.api.v1.CreateGenericTaskResponse - (*CreateExperimentResponse)(nil), // 303: determined.api.v1.CreateExperimentResponse - (*PutExperimentResponse)(nil), // 304: determined.api.v1.PutExperimentResponse - (*ContinueExperimentResponse)(nil), // 305: determined.api.v1.ContinueExperimentResponse - (*GetExperimentResponse)(nil), // 306: determined.api.v1.GetExperimentResponse - (*GetExperimentsResponse)(nil), // 307: determined.api.v1.GetExperimentsResponse - (*PutExperimentRetainLogsResponse)(nil), // 308: determined.api.v1.PutExperimentRetainLogsResponse - (*PutExperimentsRetainLogsResponse)(nil), // 309: determined.api.v1.PutExperimentsRetainLogsResponse - (*PutTrialRetainLogsResponse)(nil), // 310: determined.api.v1.PutTrialRetainLogsResponse - (*GetModelDefResponse)(nil), // 311: determined.api.v1.GetModelDefResponse - (*GetTaskContextDirectoryResponse)(nil), // 312: determined.api.v1.GetTaskContextDirectoryResponse - (*GetModelDefTreeResponse)(nil), // 313: determined.api.v1.GetModelDefTreeResponse - (*GetModelDefFileResponse)(nil), // 314: determined.api.v1.GetModelDefFileResponse - (*GetExperimentLabelsResponse)(nil), // 315: determined.api.v1.GetExperimentLabelsResponse - (*GetExperimentValidationHistoryResponse)(nil), // 316: determined.api.v1.GetExperimentValidationHistoryResponse - (*ActivateExperimentResponse)(nil), // 317: determined.api.v1.ActivateExperimentResponse - (*ActivateExperimentsResponse)(nil), // 318: determined.api.v1.ActivateExperimentsResponse - (*PauseExperimentResponse)(nil), // 319: determined.api.v1.PauseExperimentResponse - (*PauseExperimentsResponse)(nil), // 320: determined.api.v1.PauseExperimentsResponse - (*CancelExperimentResponse)(nil), // 321: determined.api.v1.CancelExperimentResponse - (*CancelExperimentsResponse)(nil), // 322: determined.api.v1.CancelExperimentsResponse - (*KillExperimentResponse)(nil), // 323: determined.api.v1.KillExperimentResponse - (*KillExperimentsResponse)(nil), // 324: determined.api.v1.KillExperimentsResponse - (*ArchiveExperimentResponse)(nil), // 325: determined.api.v1.ArchiveExperimentResponse - (*ArchiveExperimentsResponse)(nil), // 326: determined.api.v1.ArchiveExperimentsResponse - (*UnarchiveExperimentResponse)(nil), // 327: determined.api.v1.UnarchiveExperimentResponse - (*UnarchiveExperimentsResponse)(nil), // 328: determined.api.v1.UnarchiveExperimentsResponse - (*PatchExperimentResponse)(nil), // 329: determined.api.v1.PatchExperimentResponse - (*DeleteExperimentsResponse)(nil), // 330: determined.api.v1.DeleteExperimentsResponse - (*DeleteExperimentResponse)(nil), // 331: determined.api.v1.DeleteExperimentResponse - (*GetBestSearcherValidationMetricResponse)(nil), // 332: determined.api.v1.GetBestSearcherValidationMetricResponse - (*GetExperimentCheckpointsResponse)(nil), // 333: determined.api.v1.GetExperimentCheckpointsResponse - (*PutExperimentLabelResponse)(nil), // 334: determined.api.v1.PutExperimentLabelResponse - (*DeleteExperimentLabelResponse)(nil), // 335: determined.api.v1.DeleteExperimentLabelResponse - (*PreviewHPSearchResponse)(nil), // 336: determined.api.v1.PreviewHPSearchResponse - (*GetExperimentTrialsResponse)(nil), // 337: determined.api.v1.GetExperimentTrialsResponse - (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 338: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse - (*CompareTrialsResponse)(nil), // 339: determined.api.v1.CompareTrialsResponse - (*ReportTrialSourceInfoResponse)(nil), // 340: determined.api.v1.ReportTrialSourceInfoResponse - (*CreateTrialResponse)(nil), // 341: determined.api.v1.CreateTrialResponse - (*PutTrialResponse)(nil), // 342: determined.api.v1.PutTrialResponse - (*PatchTrialResponse)(nil), // 343: determined.api.v1.PatchTrialResponse - (*StartTrialResponse)(nil), // 344: determined.api.v1.StartTrialResponse - (*RunPrepareForReportingResponse)(nil), // 345: determined.api.v1.RunPrepareForReportingResponse - (*GetTrialResponse)(nil), // 346: determined.api.v1.GetTrialResponse - (*GetTrialByExternalIDResponse)(nil), // 347: determined.api.v1.GetTrialByExternalIDResponse - (*GetTrialWorkloadsResponse)(nil), // 348: determined.api.v1.GetTrialWorkloadsResponse - (*TrialLogsResponse)(nil), // 349: determined.api.v1.TrialLogsResponse - (*TrialLogsFieldsResponse)(nil), // 350: determined.api.v1.TrialLogsFieldsResponse - (*AllocationReadyResponse)(nil), // 351: determined.api.v1.AllocationReadyResponse - (*GetAllocationResponse)(nil), // 352: determined.api.v1.GetAllocationResponse - (*AllocationWaitingResponse)(nil), // 353: determined.api.v1.AllocationWaitingResponse - (*PostTaskLogsResponse)(nil), // 354: determined.api.v1.PostTaskLogsResponse - (*TaskLogsResponse)(nil), // 355: determined.api.v1.TaskLogsResponse - (*TaskLogsFieldsResponse)(nil), // 356: determined.api.v1.TaskLogsFieldsResponse - (*GetTrialProfilerMetricsResponse)(nil), // 357: determined.api.v1.GetTrialProfilerMetricsResponse - (*GetTrialProfilerAvailableSeriesResponse)(nil), // 358: determined.api.v1.GetTrialProfilerAvailableSeriesResponse - (*PostTrialProfilerMetricsBatchResponse)(nil), // 359: determined.api.v1.PostTrialProfilerMetricsBatchResponse - (*GetMetricsResponse)(nil), // 360: determined.api.v1.GetMetricsResponse - (*GetTrainingMetricsResponse)(nil), // 361: determined.api.v1.GetTrainingMetricsResponse - (*GetValidationMetricsResponse)(nil), // 362: determined.api.v1.GetValidationMetricsResponse - (*KillTrialResponse)(nil), // 363: determined.api.v1.KillTrialResponse - (*GetTrialCheckpointsResponse)(nil), // 364: determined.api.v1.GetTrialCheckpointsResponse - (*CleanupLogsResponse)(nil), // 365: determined.api.v1.CleanupLogsResponse - (*AllocationPreemptionSignalResponse)(nil), // 366: determined.api.v1.AllocationPreemptionSignalResponse - (*AllocationPendingPreemptionSignalResponse)(nil), // 367: determined.api.v1.AllocationPendingPreemptionSignalResponse - (*AckAllocationPreemptionSignalResponse)(nil), // 368: determined.api.v1.AckAllocationPreemptionSignalResponse - (*MarkAllocationResourcesDaemonResponse)(nil), // 369: determined.api.v1.MarkAllocationResourcesDaemonResponse - (*AllocationRendezvousInfoResponse)(nil), // 370: determined.api.v1.AllocationRendezvousInfoResponse - (*PostAllocationProxyAddressResponse)(nil), // 371: determined.api.v1.PostAllocationProxyAddressResponse - (*GetTaskAcceleratorDataResponse)(nil), // 372: determined.api.v1.GetTaskAcceleratorDataResponse - (*PostAllocationAcceleratorDataResponse)(nil), // 373: determined.api.v1.PostAllocationAcceleratorDataResponse - (*AllocationAllGatherResponse)(nil), // 374: determined.api.v1.AllocationAllGatherResponse - (*NotifyContainerRunningResponse)(nil), // 375: determined.api.v1.NotifyContainerRunningResponse - (*GetCurrentTrialSearcherOperationResponse)(nil), // 376: determined.api.v1.GetCurrentTrialSearcherOperationResponse - (*CompleteTrialSearcherValidationResponse)(nil), // 377: determined.api.v1.CompleteTrialSearcherValidationResponse - (*ReportTrialSearcherEarlyExitResponse)(nil), // 378: determined.api.v1.ReportTrialSearcherEarlyExitResponse - (*ReportTrialProgressResponse)(nil), // 379: determined.api.v1.ReportTrialProgressResponse - (*PostTrialRunnerMetadataResponse)(nil), // 380: determined.api.v1.PostTrialRunnerMetadataResponse - (*ReportTrialMetricsResponse)(nil), // 381: determined.api.v1.ReportTrialMetricsResponse - (*ReportTrialTrainingMetricsResponse)(nil), // 382: determined.api.v1.ReportTrialTrainingMetricsResponse - (*ReportTrialValidationMetricsResponse)(nil), // 383: determined.api.v1.ReportTrialValidationMetricsResponse - (*ReportCheckpointResponse)(nil), // 384: determined.api.v1.ReportCheckpointResponse - (*GetJobsResponse)(nil), // 385: determined.api.v1.GetJobsResponse - (*GetJobsV2Response)(nil), // 386: determined.api.v1.GetJobsV2Response - (*GetJobQueueStatsResponse)(nil), // 387: determined.api.v1.GetJobQueueStatsResponse - (*UpdateJobQueueResponse)(nil), // 388: determined.api.v1.UpdateJobQueueResponse - (*GetTemplatesResponse)(nil), // 389: determined.api.v1.GetTemplatesResponse - (*GetTemplateResponse)(nil), // 390: determined.api.v1.GetTemplateResponse - (*PutTemplateResponse)(nil), // 391: determined.api.v1.PutTemplateResponse - (*PostTemplateResponse)(nil), // 392: determined.api.v1.PostTemplateResponse - (*PatchTemplateConfigResponse)(nil), // 393: determined.api.v1.PatchTemplateConfigResponse - (*PatchTemplateNameResponse)(nil), // 394: determined.api.v1.PatchTemplateNameResponse - (*DeleteTemplateResponse)(nil), // 395: determined.api.v1.DeleteTemplateResponse - (*GetNotebooksResponse)(nil), // 396: determined.api.v1.GetNotebooksResponse - (*GetNotebookResponse)(nil), // 397: determined.api.v1.GetNotebookResponse - (*IdleNotebookResponse)(nil), // 398: determined.api.v1.IdleNotebookResponse - (*KillNotebookResponse)(nil), // 399: determined.api.v1.KillNotebookResponse - (*SetNotebookPriorityResponse)(nil), // 400: determined.api.v1.SetNotebookPriorityResponse - (*LaunchNotebookResponse)(nil), // 401: determined.api.v1.LaunchNotebookResponse - (*GetShellsResponse)(nil), // 402: determined.api.v1.GetShellsResponse - (*GetShellResponse)(nil), // 403: determined.api.v1.GetShellResponse - (*KillShellResponse)(nil), // 404: determined.api.v1.KillShellResponse - (*SetShellPriorityResponse)(nil), // 405: determined.api.v1.SetShellPriorityResponse - (*LaunchShellResponse)(nil), // 406: determined.api.v1.LaunchShellResponse - (*GetCommandsResponse)(nil), // 407: determined.api.v1.GetCommandsResponse - (*GetCommandResponse)(nil), // 408: determined.api.v1.GetCommandResponse - (*KillCommandResponse)(nil), // 409: determined.api.v1.KillCommandResponse - (*SetCommandPriorityResponse)(nil), // 410: determined.api.v1.SetCommandPriorityResponse - (*LaunchCommandResponse)(nil), // 411: determined.api.v1.LaunchCommandResponse - (*GetTensorboardsResponse)(nil), // 412: determined.api.v1.GetTensorboardsResponse - (*GetTensorboardResponse)(nil), // 413: determined.api.v1.GetTensorboardResponse - (*KillTensorboardResponse)(nil), // 414: determined.api.v1.KillTensorboardResponse - (*SetTensorboardPriorityResponse)(nil), // 415: determined.api.v1.SetTensorboardPriorityResponse - (*LaunchTensorboardResponse)(nil), // 416: determined.api.v1.LaunchTensorboardResponse - (*LaunchTensorboardSearchesResponse)(nil), // 417: determined.api.v1.LaunchTensorboardSearchesResponse - (*DeleteTensorboardFilesResponse)(nil), // 418: determined.api.v1.DeleteTensorboardFilesResponse - (*GetActiveTasksCountResponse)(nil), // 419: determined.api.v1.GetActiveTasksCountResponse - (*GetTaskResponse)(nil), // 420: determined.api.v1.GetTaskResponse - (*GetTasksResponse)(nil), // 421: determined.api.v1.GetTasksResponse - (*GetModelResponse)(nil), // 422: determined.api.v1.GetModelResponse - (*PostModelResponse)(nil), // 423: determined.api.v1.PostModelResponse - (*PatchModelResponse)(nil), // 424: determined.api.v1.PatchModelResponse - (*ArchiveModelResponse)(nil), // 425: determined.api.v1.ArchiveModelResponse - (*UnarchiveModelResponse)(nil), // 426: determined.api.v1.UnarchiveModelResponse - (*MoveModelResponse)(nil), // 427: determined.api.v1.MoveModelResponse - (*DeleteModelResponse)(nil), // 428: determined.api.v1.DeleteModelResponse - (*GetModelsResponse)(nil), // 429: determined.api.v1.GetModelsResponse - (*GetModelLabelsResponse)(nil), // 430: determined.api.v1.GetModelLabelsResponse - (*GetModelVersionResponse)(nil), // 431: determined.api.v1.GetModelVersionResponse - (*GetModelVersionsResponse)(nil), // 432: determined.api.v1.GetModelVersionsResponse - (*PostModelVersionResponse)(nil), // 433: determined.api.v1.PostModelVersionResponse - (*PatchModelVersionResponse)(nil), // 434: determined.api.v1.PatchModelVersionResponse - (*DeleteModelVersionResponse)(nil), // 435: determined.api.v1.DeleteModelVersionResponse - (*GetTrialMetricsByModelVersionResponse)(nil), // 436: determined.api.v1.GetTrialMetricsByModelVersionResponse - (*GetCheckpointResponse)(nil), // 437: determined.api.v1.GetCheckpointResponse - (*PostCheckpointMetadataResponse)(nil), // 438: determined.api.v1.PostCheckpointMetadataResponse - (*CheckpointsRemoveFilesResponse)(nil), // 439: determined.api.v1.CheckpointsRemoveFilesResponse - (*PatchCheckpointsResponse)(nil), // 440: determined.api.v1.PatchCheckpointsResponse - (*DeleteCheckpointsResponse)(nil), // 441: determined.api.v1.DeleteCheckpointsResponse - (*GetTrialMetricsByCheckpointResponse)(nil), // 442: determined.api.v1.GetTrialMetricsByCheckpointResponse - (*ExpMetricNamesResponse)(nil), // 443: determined.api.v1.ExpMetricNamesResponse - (*MetricBatchesResponse)(nil), // 444: determined.api.v1.MetricBatchesResponse - (*TrialsSnapshotResponse)(nil), // 445: determined.api.v1.TrialsSnapshotResponse - (*TrialsSampleResponse)(nil), // 446: determined.api.v1.TrialsSampleResponse - (*GetResourcePoolsResponse)(nil), // 447: determined.api.v1.GetResourcePoolsResponse - (*GetKubernetesResourceManagersResponse)(nil), // 448: determined.api.v1.GetKubernetesResourceManagersResponse - (*ResourceAllocationRawResponse)(nil), // 449: determined.api.v1.ResourceAllocationRawResponse - (*ResourceAllocationAggregatedResponse)(nil), // 450: determined.api.v1.ResourceAllocationAggregatedResponse - (*GetWorkspaceResponse)(nil), // 451: determined.api.v1.GetWorkspaceResponse - (*GetWorkspaceProjectsResponse)(nil), // 452: determined.api.v1.GetWorkspaceProjectsResponse - (*GetWorkspacesResponse)(nil), // 453: determined.api.v1.GetWorkspacesResponse - (*PostWorkspaceResponse)(nil), // 454: determined.api.v1.PostWorkspaceResponse - (*PatchWorkspaceResponse)(nil), // 455: determined.api.v1.PatchWorkspaceResponse - (*DeleteWorkspaceResponse)(nil), // 456: determined.api.v1.DeleteWorkspaceResponse - (*ArchiveWorkspaceResponse)(nil), // 457: determined.api.v1.ArchiveWorkspaceResponse - (*UnarchiveWorkspaceResponse)(nil), // 458: determined.api.v1.UnarchiveWorkspaceResponse - (*PinWorkspaceResponse)(nil), // 459: determined.api.v1.PinWorkspaceResponse - (*UnpinWorkspaceResponse)(nil), // 460: determined.api.v1.UnpinWorkspaceResponse - (*SetWorkspaceNamespaceBindingsResponse)(nil), // 461: determined.api.v1.SetWorkspaceNamespaceBindingsResponse - (*SetResourceQuotasResponse)(nil), // 462: determined.api.v1.SetResourceQuotasResponse - (*ListWorkspaceNamespaceBindingsResponse)(nil), // 463: determined.api.v1.ListWorkspaceNamespaceBindingsResponse - (*GetWorkspacesWithDefaultNamespaceBindingsResponse)(nil), // 464: determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsResponse - (*BulkAutoCreateWorkspaceNamespaceBindingsResponse)(nil), // 465: determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsResponse - (*DeleteWorkspaceNamespaceBindingsResponse)(nil), // 466: determined.api.v1.DeleteWorkspaceNamespaceBindingsResponse - (*GetKubernetesResourceQuotasResponse)(nil), // 467: determined.api.v1.GetKubernetesResourceQuotasResponse - (*GetProjectResponse)(nil), // 468: determined.api.v1.GetProjectResponse - (*GetProjectByKeyResponse)(nil), // 469: determined.api.v1.GetProjectByKeyResponse - (*GetProjectColumnsResponse)(nil), // 470: determined.api.v1.GetProjectColumnsResponse - (*GetProjectNumericMetricsRangeResponse)(nil), // 471: determined.api.v1.GetProjectNumericMetricsRangeResponse - (*PostProjectResponse)(nil), // 472: determined.api.v1.PostProjectResponse - (*AddProjectNoteResponse)(nil), // 473: determined.api.v1.AddProjectNoteResponse - (*PutProjectNotesResponse)(nil), // 474: determined.api.v1.PutProjectNotesResponse - (*PatchProjectResponse)(nil), // 475: determined.api.v1.PatchProjectResponse - (*DeleteProjectResponse)(nil), // 476: determined.api.v1.DeleteProjectResponse - (*ArchiveProjectResponse)(nil), // 477: determined.api.v1.ArchiveProjectResponse - (*UnarchiveProjectResponse)(nil), // 478: determined.api.v1.UnarchiveProjectResponse - (*MoveProjectResponse)(nil), // 479: determined.api.v1.MoveProjectResponse - (*MoveExperimentResponse)(nil), // 480: determined.api.v1.MoveExperimentResponse - (*MoveExperimentsResponse)(nil), // 481: determined.api.v1.MoveExperimentsResponse - (*GetWebhooksResponse)(nil), // 482: determined.api.v1.GetWebhooksResponse - (*PatchWebhookResponse)(nil), // 483: determined.api.v1.PatchWebhookResponse - (*PostWebhookResponse)(nil), // 484: determined.api.v1.PostWebhookResponse - (*DeleteWebhookResponse)(nil), // 485: determined.api.v1.DeleteWebhookResponse - (*TestWebhookResponse)(nil), // 486: determined.api.v1.TestWebhookResponse - (*PostWebhookEventDataResponse)(nil), // 487: determined.api.v1.PostWebhookEventDataResponse - (*GetGroupResponse)(nil), // 488: determined.api.v1.GetGroupResponse - (*GetGroupsResponse)(nil), // 489: determined.api.v1.GetGroupsResponse - (*CreateGroupResponse)(nil), // 490: determined.api.v1.CreateGroupResponse - (*UpdateGroupResponse)(nil), // 491: determined.api.v1.UpdateGroupResponse - (*DeleteGroupResponse)(nil), // 492: determined.api.v1.DeleteGroupResponse - (*GetPermissionsSummaryResponse)(nil), // 493: determined.api.v1.GetPermissionsSummaryResponse - (*GetGroupsAndUsersAssignedToWorkspaceResponse)(nil), // 494: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse - (*GetRolesByIDResponse)(nil), // 495: determined.api.v1.GetRolesByIDResponse - (*GetRolesAssignedToUserResponse)(nil), // 496: determined.api.v1.GetRolesAssignedToUserResponse - (*GetRolesAssignedToGroupResponse)(nil), // 497: determined.api.v1.GetRolesAssignedToGroupResponse - (*SearchRolesAssignableToScopeResponse)(nil), // 498: determined.api.v1.SearchRolesAssignableToScopeResponse - (*ListRolesResponse)(nil), // 499: determined.api.v1.ListRolesResponse - (*AssignRolesResponse)(nil), // 500: determined.api.v1.AssignRolesResponse - (*RemoveAssignmentsResponse)(nil), // 501: determined.api.v1.RemoveAssignmentsResponse - (*PostUserActivityResponse)(nil), // 502: determined.api.v1.PostUserActivityResponse - (*GetProjectsByUserActivityResponse)(nil), // 503: determined.api.v1.GetProjectsByUserActivityResponse - (*SearchExperimentsResponse)(nil), // 504: determined.api.v1.SearchExperimentsResponse - (*BindRPToWorkspaceResponse)(nil), // 505: determined.api.v1.BindRPToWorkspaceResponse - (*UnbindRPFromWorkspaceResponse)(nil), // 506: determined.api.v1.UnbindRPFromWorkspaceResponse - (*OverwriteRPWorkspaceBindingsResponse)(nil), // 507: determined.api.v1.OverwriteRPWorkspaceBindingsResponse - (*ListRPsBoundToWorkspaceResponse)(nil), // 508: determined.api.v1.ListRPsBoundToWorkspaceResponse - (*ListWorkspacesBoundToRPResponse)(nil), // 509: determined.api.v1.ListWorkspacesBoundToRPResponse - (*GetGenericTaskConfigResponse)(nil), // 510: determined.api.v1.GetGenericTaskConfigResponse - (*KillGenericTaskResponse)(nil), // 511: determined.api.v1.KillGenericTaskResponse - (*PauseGenericTaskResponse)(nil), // 512: determined.api.v1.PauseGenericTaskResponse - (*UnpauseGenericTaskResponse)(nil), // 513: determined.api.v1.UnpauseGenericTaskResponse - (*SearchRunsResponse)(nil), // 514: determined.api.v1.SearchRunsResponse - (*MoveRunsResponse)(nil), // 515: determined.api.v1.MoveRunsResponse - (*KillRunsResponse)(nil), // 516: determined.api.v1.KillRunsResponse - (*DeleteRunsResponse)(nil), // 517: determined.api.v1.DeleteRunsResponse - (*ArchiveRunsResponse)(nil), // 518: determined.api.v1.ArchiveRunsResponse - (*UnarchiveRunsResponse)(nil), // 519: determined.api.v1.UnarchiveRunsResponse - (*PauseRunsResponse)(nil), // 520: determined.api.v1.PauseRunsResponse - (*ResumeRunsResponse)(nil), // 521: determined.api.v1.ResumeRunsResponse - (*GetRunMetadataResponse)(nil), // 522: determined.api.v1.GetRunMetadataResponse - (*PostRunMetadataResponse)(nil), // 523: determined.api.v1.PostRunMetadataResponse - (*GetMetadataValuesResponse)(nil), // 524: determined.api.v1.GetMetadataValuesResponse - (*PutWorkspaceConfigPoliciesResponse)(nil), // 525: determined.api.v1.PutWorkspaceConfigPoliciesResponse - (*PutGlobalConfigPoliciesResponse)(nil), // 526: determined.api.v1.PutGlobalConfigPoliciesResponse - (*GetWorkspaceConfigPoliciesResponse)(nil), // 527: determined.api.v1.GetWorkspaceConfigPoliciesResponse - (*GetGlobalConfigPoliciesResponse)(nil), // 528: determined.api.v1.GetGlobalConfigPoliciesResponse - (*DeleteWorkspaceConfigPoliciesResponse)(nil), // 529: determined.api.v1.DeleteWorkspaceConfigPoliciesResponse - (*DeleteGlobalConfigPoliciesResponse)(nil), // 530: determined.api.v1.DeleteGlobalConfigPoliciesResponse - (*MoveSearchesResponse)(nil), // 531: determined.api.v1.MoveSearchesResponse - (*CancelSearchesResponse)(nil), // 532: determined.api.v1.CancelSearchesResponse - (*KillSearchesResponse)(nil), // 533: determined.api.v1.KillSearchesResponse - (*DeleteSearchesResponse)(nil), // 534: determined.api.v1.DeleteSearchesResponse - (*ArchiveSearchesResponse)(nil), // 535: determined.api.v1.ArchiveSearchesResponse - (*UnarchiveSearchesResponse)(nil), // 536: determined.api.v1.UnarchiveSearchesResponse - (*PauseSearchesResponse)(nil), // 537: determined.api.v1.PauseSearchesResponse - (*ResumeSearchesResponse)(nil), // 538: determined.api.v1.ResumeSearchesResponse - (*PostAccessTokenResponse)(nil), // 539: determined.api.v1.PostAccessTokenResponse - (*GetAccessTokensResponse)(nil), // 540: determined.api.v1.GetAccessTokensResponse - (*PatchAccessTokenResponse)(nil), // 541: determined.api.v1.PatchAccessTokenResponse + (*ReportTrialSearcherEarlyExitRequest)(nil), // 105: determined.api.v1.ReportTrialSearcherEarlyExitRequest + (*ReportTrialProgressRequest)(nil), // 106: determined.api.v1.ReportTrialProgressRequest + (*PostTrialRunnerMetadataRequest)(nil), // 107: determined.api.v1.PostTrialRunnerMetadataRequest + (*ReportTrialMetricsRequest)(nil), // 108: determined.api.v1.ReportTrialMetricsRequest + (*ReportTrialTrainingMetricsRequest)(nil), // 109: determined.api.v1.ReportTrialTrainingMetricsRequest + (*ReportTrialValidationMetricsRequest)(nil), // 110: determined.api.v1.ReportTrialValidationMetricsRequest + (*ReportCheckpointRequest)(nil), // 111: determined.api.v1.ReportCheckpointRequest + (*GetJobsRequest)(nil), // 112: determined.api.v1.GetJobsRequest + (*GetJobsV2Request)(nil), // 113: determined.api.v1.GetJobsV2Request + (*GetJobQueueStatsRequest)(nil), // 114: determined.api.v1.GetJobQueueStatsRequest + (*UpdateJobQueueRequest)(nil), // 115: determined.api.v1.UpdateJobQueueRequest + (*GetTemplatesRequest)(nil), // 116: determined.api.v1.GetTemplatesRequest + (*GetTemplateRequest)(nil), // 117: determined.api.v1.GetTemplateRequest + (*PutTemplateRequest)(nil), // 118: determined.api.v1.PutTemplateRequest + (*PostTemplateRequest)(nil), // 119: determined.api.v1.PostTemplateRequest + (*PatchTemplateConfigRequest)(nil), // 120: determined.api.v1.PatchTemplateConfigRequest + (*PatchTemplateNameRequest)(nil), // 121: determined.api.v1.PatchTemplateNameRequest + (*DeleteTemplateRequest)(nil), // 122: determined.api.v1.DeleteTemplateRequest + (*GetNotebooksRequest)(nil), // 123: determined.api.v1.GetNotebooksRequest + (*GetNotebookRequest)(nil), // 124: determined.api.v1.GetNotebookRequest + (*IdleNotebookRequest)(nil), // 125: determined.api.v1.IdleNotebookRequest + (*KillNotebookRequest)(nil), // 126: determined.api.v1.KillNotebookRequest + (*SetNotebookPriorityRequest)(nil), // 127: determined.api.v1.SetNotebookPriorityRequest + (*LaunchNotebookRequest)(nil), // 128: determined.api.v1.LaunchNotebookRequest + (*GetShellsRequest)(nil), // 129: determined.api.v1.GetShellsRequest + (*GetShellRequest)(nil), // 130: determined.api.v1.GetShellRequest + (*KillShellRequest)(nil), // 131: determined.api.v1.KillShellRequest + (*SetShellPriorityRequest)(nil), // 132: determined.api.v1.SetShellPriorityRequest + (*LaunchShellRequest)(nil), // 133: determined.api.v1.LaunchShellRequest + (*GetCommandsRequest)(nil), // 134: determined.api.v1.GetCommandsRequest + (*GetCommandRequest)(nil), // 135: determined.api.v1.GetCommandRequest + (*KillCommandRequest)(nil), // 136: determined.api.v1.KillCommandRequest + (*SetCommandPriorityRequest)(nil), // 137: determined.api.v1.SetCommandPriorityRequest + (*LaunchCommandRequest)(nil), // 138: determined.api.v1.LaunchCommandRequest + (*GetTensorboardsRequest)(nil), // 139: determined.api.v1.GetTensorboardsRequest + (*GetTensorboardRequest)(nil), // 140: determined.api.v1.GetTensorboardRequest + (*KillTensorboardRequest)(nil), // 141: determined.api.v1.KillTensorboardRequest + (*SetTensorboardPriorityRequest)(nil), // 142: determined.api.v1.SetTensorboardPriorityRequest + (*LaunchTensorboardRequest)(nil), // 143: determined.api.v1.LaunchTensorboardRequest + (*LaunchTensorboardSearchesRequest)(nil), // 144: determined.api.v1.LaunchTensorboardSearchesRequest + (*DeleteTensorboardFilesRequest)(nil), // 145: determined.api.v1.DeleteTensorboardFilesRequest + (*GetActiveTasksCountRequest)(nil), // 146: determined.api.v1.GetActiveTasksCountRequest + (*GetTaskRequest)(nil), // 147: determined.api.v1.GetTaskRequest + (*GetTasksRequest)(nil), // 148: determined.api.v1.GetTasksRequest + (*GetModelRequest)(nil), // 149: determined.api.v1.GetModelRequest + (*PostModelRequest)(nil), // 150: determined.api.v1.PostModelRequest + (*PatchModelRequest)(nil), // 151: determined.api.v1.PatchModelRequest + (*ArchiveModelRequest)(nil), // 152: determined.api.v1.ArchiveModelRequest + (*UnarchiveModelRequest)(nil), // 153: determined.api.v1.UnarchiveModelRequest + (*MoveModelRequest)(nil), // 154: determined.api.v1.MoveModelRequest + (*DeleteModelRequest)(nil), // 155: determined.api.v1.DeleteModelRequest + (*GetModelsRequest)(nil), // 156: determined.api.v1.GetModelsRequest + (*GetModelLabelsRequest)(nil), // 157: determined.api.v1.GetModelLabelsRequest + (*GetModelVersionRequest)(nil), // 158: determined.api.v1.GetModelVersionRequest + (*GetModelVersionsRequest)(nil), // 159: determined.api.v1.GetModelVersionsRequest + (*PostModelVersionRequest)(nil), // 160: determined.api.v1.PostModelVersionRequest + (*PatchModelVersionRequest)(nil), // 161: determined.api.v1.PatchModelVersionRequest + (*DeleteModelVersionRequest)(nil), // 162: determined.api.v1.DeleteModelVersionRequest + (*GetTrialMetricsByModelVersionRequest)(nil), // 163: determined.api.v1.GetTrialMetricsByModelVersionRequest + (*GetCheckpointRequest)(nil), // 164: determined.api.v1.GetCheckpointRequest + (*PostCheckpointMetadataRequest)(nil), // 165: determined.api.v1.PostCheckpointMetadataRequest + (*CheckpointsRemoveFilesRequest)(nil), // 166: determined.api.v1.CheckpointsRemoveFilesRequest + (*PatchCheckpointsRequest)(nil), // 167: determined.api.v1.PatchCheckpointsRequest + (*DeleteCheckpointsRequest)(nil), // 168: determined.api.v1.DeleteCheckpointsRequest + (*GetTrialMetricsByCheckpointRequest)(nil), // 169: determined.api.v1.GetTrialMetricsByCheckpointRequest + (*ExpMetricNamesRequest)(nil), // 170: determined.api.v1.ExpMetricNamesRequest + (*MetricBatchesRequest)(nil), // 171: determined.api.v1.MetricBatchesRequest + (*TrialsSnapshotRequest)(nil), // 172: determined.api.v1.TrialsSnapshotRequest + (*TrialsSampleRequest)(nil), // 173: determined.api.v1.TrialsSampleRequest + (*GetResourcePoolsRequest)(nil), // 174: determined.api.v1.GetResourcePoolsRequest + (*GetKubernetesResourceManagersRequest)(nil), // 175: determined.api.v1.GetKubernetesResourceManagersRequest + (*ResourceAllocationRawRequest)(nil), // 176: determined.api.v1.ResourceAllocationRawRequest + (*ResourceAllocationAggregatedRequest)(nil), // 177: determined.api.v1.ResourceAllocationAggregatedRequest + (*GetWorkspaceRequest)(nil), // 178: determined.api.v1.GetWorkspaceRequest + (*GetWorkspaceProjectsRequest)(nil), // 179: determined.api.v1.GetWorkspaceProjectsRequest + (*GetWorkspacesRequest)(nil), // 180: determined.api.v1.GetWorkspacesRequest + (*PostWorkspaceRequest)(nil), // 181: determined.api.v1.PostWorkspaceRequest + (*PatchWorkspaceRequest)(nil), // 182: determined.api.v1.PatchWorkspaceRequest + (*DeleteWorkspaceRequest)(nil), // 183: determined.api.v1.DeleteWorkspaceRequest + (*ArchiveWorkspaceRequest)(nil), // 184: determined.api.v1.ArchiveWorkspaceRequest + (*UnarchiveWorkspaceRequest)(nil), // 185: determined.api.v1.UnarchiveWorkspaceRequest + (*PinWorkspaceRequest)(nil), // 186: determined.api.v1.PinWorkspaceRequest + (*UnpinWorkspaceRequest)(nil), // 187: determined.api.v1.UnpinWorkspaceRequest + (*SetWorkspaceNamespaceBindingsRequest)(nil), // 188: determined.api.v1.SetWorkspaceNamespaceBindingsRequest + (*SetResourceQuotasRequest)(nil), // 189: determined.api.v1.SetResourceQuotasRequest + (*ListWorkspaceNamespaceBindingsRequest)(nil), // 190: determined.api.v1.ListWorkspaceNamespaceBindingsRequest + (*GetWorkspacesWithDefaultNamespaceBindingsRequest)(nil), // 191: determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsRequest + (*BulkAutoCreateWorkspaceNamespaceBindingsRequest)(nil), // 192: determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsRequest + (*DeleteWorkspaceNamespaceBindingsRequest)(nil), // 193: determined.api.v1.DeleteWorkspaceNamespaceBindingsRequest + (*GetKubernetesResourceQuotasRequest)(nil), // 194: determined.api.v1.GetKubernetesResourceQuotasRequest + (*GetProjectRequest)(nil), // 195: determined.api.v1.GetProjectRequest + (*GetProjectByKeyRequest)(nil), // 196: determined.api.v1.GetProjectByKeyRequest + (*GetProjectColumnsRequest)(nil), // 197: determined.api.v1.GetProjectColumnsRequest + (*GetProjectNumericMetricsRangeRequest)(nil), // 198: determined.api.v1.GetProjectNumericMetricsRangeRequest + (*PostProjectRequest)(nil), // 199: determined.api.v1.PostProjectRequest + (*AddProjectNoteRequest)(nil), // 200: determined.api.v1.AddProjectNoteRequest + (*PutProjectNotesRequest)(nil), // 201: determined.api.v1.PutProjectNotesRequest + (*PatchProjectRequest)(nil), // 202: determined.api.v1.PatchProjectRequest + (*DeleteProjectRequest)(nil), // 203: determined.api.v1.DeleteProjectRequest + (*ArchiveProjectRequest)(nil), // 204: determined.api.v1.ArchiveProjectRequest + (*UnarchiveProjectRequest)(nil), // 205: determined.api.v1.UnarchiveProjectRequest + (*MoveProjectRequest)(nil), // 206: determined.api.v1.MoveProjectRequest + (*MoveExperimentRequest)(nil), // 207: determined.api.v1.MoveExperimentRequest + (*MoveExperimentsRequest)(nil), // 208: determined.api.v1.MoveExperimentsRequest + (*GetWebhooksRequest)(nil), // 209: determined.api.v1.GetWebhooksRequest + (*PatchWebhookRequest)(nil), // 210: determined.api.v1.PatchWebhookRequest + (*PostWebhookRequest)(nil), // 211: determined.api.v1.PostWebhookRequest + (*DeleteWebhookRequest)(nil), // 212: determined.api.v1.DeleteWebhookRequest + (*TestWebhookRequest)(nil), // 213: determined.api.v1.TestWebhookRequest + (*PostWebhookEventDataRequest)(nil), // 214: determined.api.v1.PostWebhookEventDataRequest + (*GetGroupRequest)(nil), // 215: determined.api.v1.GetGroupRequest + (*GetGroupsRequest)(nil), // 216: determined.api.v1.GetGroupsRequest + (*CreateGroupRequest)(nil), // 217: determined.api.v1.CreateGroupRequest + (*UpdateGroupRequest)(nil), // 218: determined.api.v1.UpdateGroupRequest + (*DeleteGroupRequest)(nil), // 219: determined.api.v1.DeleteGroupRequest + (*GetPermissionsSummaryRequest)(nil), // 220: determined.api.v1.GetPermissionsSummaryRequest + (*GetGroupsAndUsersAssignedToWorkspaceRequest)(nil), // 221: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest + (*GetRolesByIDRequest)(nil), // 222: determined.api.v1.GetRolesByIDRequest + (*GetRolesAssignedToUserRequest)(nil), // 223: determined.api.v1.GetRolesAssignedToUserRequest + (*GetRolesAssignedToGroupRequest)(nil), // 224: determined.api.v1.GetRolesAssignedToGroupRequest + (*SearchRolesAssignableToScopeRequest)(nil), // 225: determined.api.v1.SearchRolesAssignableToScopeRequest + (*ListRolesRequest)(nil), // 226: determined.api.v1.ListRolesRequest + (*AssignRolesRequest)(nil), // 227: determined.api.v1.AssignRolesRequest + (*RemoveAssignmentsRequest)(nil), // 228: determined.api.v1.RemoveAssignmentsRequest + (*PostUserActivityRequest)(nil), // 229: determined.api.v1.PostUserActivityRequest + (*GetProjectsByUserActivityRequest)(nil), // 230: determined.api.v1.GetProjectsByUserActivityRequest + (*SearchExperimentsRequest)(nil), // 231: determined.api.v1.SearchExperimentsRequest + (*BindRPToWorkspaceRequest)(nil), // 232: determined.api.v1.BindRPToWorkspaceRequest + (*UnbindRPFromWorkspaceRequest)(nil), // 233: determined.api.v1.UnbindRPFromWorkspaceRequest + (*OverwriteRPWorkspaceBindingsRequest)(nil), // 234: determined.api.v1.OverwriteRPWorkspaceBindingsRequest + (*ListRPsBoundToWorkspaceRequest)(nil), // 235: determined.api.v1.ListRPsBoundToWorkspaceRequest + (*ListWorkspacesBoundToRPRequest)(nil), // 236: determined.api.v1.ListWorkspacesBoundToRPRequest + (*GetGenericTaskConfigRequest)(nil), // 237: determined.api.v1.GetGenericTaskConfigRequest + (*KillGenericTaskRequest)(nil), // 238: determined.api.v1.KillGenericTaskRequest + (*PauseGenericTaskRequest)(nil), // 239: determined.api.v1.PauseGenericTaskRequest + (*UnpauseGenericTaskRequest)(nil), // 240: determined.api.v1.UnpauseGenericTaskRequest + (*SearchRunsRequest)(nil), // 241: determined.api.v1.SearchRunsRequest + (*MoveRunsRequest)(nil), // 242: determined.api.v1.MoveRunsRequest + (*KillRunsRequest)(nil), // 243: determined.api.v1.KillRunsRequest + (*DeleteRunsRequest)(nil), // 244: determined.api.v1.DeleteRunsRequest + (*ArchiveRunsRequest)(nil), // 245: determined.api.v1.ArchiveRunsRequest + (*UnarchiveRunsRequest)(nil), // 246: determined.api.v1.UnarchiveRunsRequest + (*PauseRunsRequest)(nil), // 247: determined.api.v1.PauseRunsRequest + (*ResumeRunsRequest)(nil), // 248: determined.api.v1.ResumeRunsRequest + (*GetRunMetadataRequest)(nil), // 249: determined.api.v1.GetRunMetadataRequest + (*PostRunMetadataRequest)(nil), // 250: determined.api.v1.PostRunMetadataRequest + (*GetMetadataValuesRequest)(nil), // 251: determined.api.v1.GetMetadataValuesRequest + (*PutWorkspaceConfigPoliciesRequest)(nil), // 252: determined.api.v1.PutWorkspaceConfigPoliciesRequest + (*PutGlobalConfigPoliciesRequest)(nil), // 253: determined.api.v1.PutGlobalConfigPoliciesRequest + (*GetWorkspaceConfigPoliciesRequest)(nil), // 254: determined.api.v1.GetWorkspaceConfigPoliciesRequest + (*GetGlobalConfigPoliciesRequest)(nil), // 255: determined.api.v1.GetGlobalConfigPoliciesRequest + (*DeleteWorkspaceConfigPoliciesRequest)(nil), // 256: determined.api.v1.DeleteWorkspaceConfigPoliciesRequest + (*DeleteGlobalConfigPoliciesRequest)(nil), // 257: determined.api.v1.DeleteGlobalConfigPoliciesRequest + (*MoveSearchesRequest)(nil), // 258: determined.api.v1.MoveSearchesRequest + (*CancelSearchesRequest)(nil), // 259: determined.api.v1.CancelSearchesRequest + (*KillSearchesRequest)(nil), // 260: determined.api.v1.KillSearchesRequest + (*DeleteSearchesRequest)(nil), // 261: determined.api.v1.DeleteSearchesRequest + (*ArchiveSearchesRequest)(nil), // 262: determined.api.v1.ArchiveSearchesRequest + (*UnarchiveSearchesRequest)(nil), // 263: determined.api.v1.UnarchiveSearchesRequest + (*PauseSearchesRequest)(nil), // 264: determined.api.v1.PauseSearchesRequest + (*ResumeSearchesRequest)(nil), // 265: determined.api.v1.ResumeSearchesRequest + (*PostAccessTokenRequest)(nil), // 266: determined.api.v1.PostAccessTokenRequest + (*GetAccessTokensRequest)(nil), // 267: determined.api.v1.GetAccessTokensRequest + (*PatchAccessTokenRequest)(nil), // 268: determined.api.v1.PatchAccessTokenRequest + (*LoginResponse)(nil), // 269: determined.api.v1.LoginResponse + (*CurrentUserResponse)(nil), // 270: determined.api.v1.CurrentUserResponse + (*LogoutResponse)(nil), // 271: determined.api.v1.LogoutResponse + (*GetUsersResponse)(nil), // 272: determined.api.v1.GetUsersResponse + (*GetUserSettingResponse)(nil), // 273: determined.api.v1.GetUserSettingResponse + (*ResetUserSettingResponse)(nil), // 274: determined.api.v1.ResetUserSettingResponse + (*PostUserSettingResponse)(nil), // 275: determined.api.v1.PostUserSettingResponse + (*GetUserResponse)(nil), // 276: determined.api.v1.GetUserResponse + (*GetUserByUsernameResponse)(nil), // 277: determined.api.v1.GetUserByUsernameResponse + (*GetMeResponse)(nil), // 278: determined.api.v1.GetMeResponse + (*PostUserResponse)(nil), // 279: determined.api.v1.PostUserResponse + (*SetUserPasswordResponse)(nil), // 280: determined.api.v1.SetUserPasswordResponse + (*AssignMultipleGroupsResponse)(nil), // 281: determined.api.v1.AssignMultipleGroupsResponse + (*PatchUserResponse)(nil), // 282: determined.api.v1.PatchUserResponse + (*PatchUsersResponse)(nil), // 283: determined.api.v1.PatchUsersResponse + (*GetTelemetryResponse)(nil), // 284: determined.api.v1.GetTelemetryResponse + (*GetMasterResponse)(nil), // 285: determined.api.v1.GetMasterResponse + (*GetMasterConfigResponse)(nil), // 286: determined.api.v1.GetMasterConfigResponse + (*PatchMasterConfigResponse)(nil), // 287: determined.api.v1.PatchMasterConfigResponse + (*MasterLogsResponse)(nil), // 288: determined.api.v1.MasterLogsResponse + (*GetClusterMessageResponse)(nil), // 289: determined.api.v1.GetClusterMessageResponse + (*SetClusterMessageResponse)(nil), // 290: determined.api.v1.SetClusterMessageResponse + (*DeleteClusterMessageResponse)(nil), // 291: determined.api.v1.DeleteClusterMessageResponse + (*GetAgentsResponse)(nil), // 292: determined.api.v1.GetAgentsResponse + (*GetAgentResponse)(nil), // 293: determined.api.v1.GetAgentResponse + (*GetSlotsResponse)(nil), // 294: determined.api.v1.GetSlotsResponse + (*GetSlotResponse)(nil), // 295: determined.api.v1.GetSlotResponse + (*EnableAgentResponse)(nil), // 296: determined.api.v1.EnableAgentResponse + (*DisableAgentResponse)(nil), // 297: determined.api.v1.DisableAgentResponse + (*EnableSlotResponse)(nil), // 298: determined.api.v1.EnableSlotResponse + (*DisableSlotResponse)(nil), // 299: determined.api.v1.DisableSlotResponse + (*CreateGenericTaskResponse)(nil), // 300: determined.api.v1.CreateGenericTaskResponse + (*CreateExperimentResponse)(nil), // 301: determined.api.v1.CreateExperimentResponse + (*PutExperimentResponse)(nil), // 302: determined.api.v1.PutExperimentResponse + (*ContinueExperimentResponse)(nil), // 303: determined.api.v1.ContinueExperimentResponse + (*GetExperimentResponse)(nil), // 304: determined.api.v1.GetExperimentResponse + (*GetExperimentsResponse)(nil), // 305: determined.api.v1.GetExperimentsResponse + (*PutExperimentRetainLogsResponse)(nil), // 306: determined.api.v1.PutExperimentRetainLogsResponse + (*PutExperimentsRetainLogsResponse)(nil), // 307: determined.api.v1.PutExperimentsRetainLogsResponse + (*PutTrialRetainLogsResponse)(nil), // 308: determined.api.v1.PutTrialRetainLogsResponse + (*GetModelDefResponse)(nil), // 309: determined.api.v1.GetModelDefResponse + (*GetTaskContextDirectoryResponse)(nil), // 310: determined.api.v1.GetTaskContextDirectoryResponse + (*GetModelDefTreeResponse)(nil), // 311: determined.api.v1.GetModelDefTreeResponse + (*GetModelDefFileResponse)(nil), // 312: determined.api.v1.GetModelDefFileResponse + (*GetExperimentLabelsResponse)(nil), // 313: determined.api.v1.GetExperimentLabelsResponse + (*GetExperimentValidationHistoryResponse)(nil), // 314: determined.api.v1.GetExperimentValidationHistoryResponse + (*ActivateExperimentResponse)(nil), // 315: determined.api.v1.ActivateExperimentResponse + (*ActivateExperimentsResponse)(nil), // 316: determined.api.v1.ActivateExperimentsResponse + (*PauseExperimentResponse)(nil), // 317: determined.api.v1.PauseExperimentResponse + (*PauseExperimentsResponse)(nil), // 318: determined.api.v1.PauseExperimentsResponse + (*CancelExperimentResponse)(nil), // 319: determined.api.v1.CancelExperimentResponse + (*CancelExperimentsResponse)(nil), // 320: determined.api.v1.CancelExperimentsResponse + (*KillExperimentResponse)(nil), // 321: determined.api.v1.KillExperimentResponse + (*KillExperimentsResponse)(nil), // 322: determined.api.v1.KillExperimentsResponse + (*ArchiveExperimentResponse)(nil), // 323: determined.api.v1.ArchiveExperimentResponse + (*ArchiveExperimentsResponse)(nil), // 324: determined.api.v1.ArchiveExperimentsResponse + (*UnarchiveExperimentResponse)(nil), // 325: determined.api.v1.UnarchiveExperimentResponse + (*UnarchiveExperimentsResponse)(nil), // 326: determined.api.v1.UnarchiveExperimentsResponse + (*PatchExperimentResponse)(nil), // 327: determined.api.v1.PatchExperimentResponse + (*DeleteExperimentsResponse)(nil), // 328: determined.api.v1.DeleteExperimentsResponse + (*DeleteExperimentResponse)(nil), // 329: determined.api.v1.DeleteExperimentResponse + (*GetBestSearcherValidationMetricResponse)(nil), // 330: determined.api.v1.GetBestSearcherValidationMetricResponse + (*GetExperimentCheckpointsResponse)(nil), // 331: determined.api.v1.GetExperimentCheckpointsResponse + (*PutExperimentLabelResponse)(nil), // 332: determined.api.v1.PutExperimentLabelResponse + (*DeleteExperimentLabelResponse)(nil), // 333: determined.api.v1.DeleteExperimentLabelResponse + (*PreviewHPSearchResponse)(nil), // 334: determined.api.v1.PreviewHPSearchResponse + (*GetExperimentTrialsResponse)(nil), // 335: determined.api.v1.GetExperimentTrialsResponse + (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 336: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse + (*CompareTrialsResponse)(nil), // 337: determined.api.v1.CompareTrialsResponse + (*ReportTrialSourceInfoResponse)(nil), // 338: determined.api.v1.ReportTrialSourceInfoResponse + (*CreateTrialResponse)(nil), // 339: determined.api.v1.CreateTrialResponse + (*PutTrialResponse)(nil), // 340: determined.api.v1.PutTrialResponse + (*PatchTrialResponse)(nil), // 341: determined.api.v1.PatchTrialResponse + (*StartTrialResponse)(nil), // 342: determined.api.v1.StartTrialResponse + (*RunPrepareForReportingResponse)(nil), // 343: determined.api.v1.RunPrepareForReportingResponse + (*GetTrialResponse)(nil), // 344: determined.api.v1.GetTrialResponse + (*GetTrialByExternalIDResponse)(nil), // 345: determined.api.v1.GetTrialByExternalIDResponse + (*GetTrialWorkloadsResponse)(nil), // 346: determined.api.v1.GetTrialWorkloadsResponse + (*TrialLogsResponse)(nil), // 347: determined.api.v1.TrialLogsResponse + (*TrialLogsFieldsResponse)(nil), // 348: determined.api.v1.TrialLogsFieldsResponse + (*AllocationReadyResponse)(nil), // 349: determined.api.v1.AllocationReadyResponse + (*GetAllocationResponse)(nil), // 350: determined.api.v1.GetAllocationResponse + (*AllocationWaitingResponse)(nil), // 351: determined.api.v1.AllocationWaitingResponse + (*PostTaskLogsResponse)(nil), // 352: determined.api.v1.PostTaskLogsResponse + (*TaskLogsResponse)(nil), // 353: determined.api.v1.TaskLogsResponse + (*TaskLogsFieldsResponse)(nil), // 354: determined.api.v1.TaskLogsFieldsResponse + (*GetTrialProfilerMetricsResponse)(nil), // 355: determined.api.v1.GetTrialProfilerMetricsResponse + (*GetTrialProfilerAvailableSeriesResponse)(nil), // 356: determined.api.v1.GetTrialProfilerAvailableSeriesResponse + (*PostTrialProfilerMetricsBatchResponse)(nil), // 357: determined.api.v1.PostTrialProfilerMetricsBatchResponse + (*GetMetricsResponse)(nil), // 358: determined.api.v1.GetMetricsResponse + (*GetTrainingMetricsResponse)(nil), // 359: determined.api.v1.GetTrainingMetricsResponse + (*GetValidationMetricsResponse)(nil), // 360: determined.api.v1.GetValidationMetricsResponse + (*KillTrialResponse)(nil), // 361: determined.api.v1.KillTrialResponse + (*GetTrialCheckpointsResponse)(nil), // 362: determined.api.v1.GetTrialCheckpointsResponse + (*CleanupLogsResponse)(nil), // 363: determined.api.v1.CleanupLogsResponse + (*AllocationPreemptionSignalResponse)(nil), // 364: determined.api.v1.AllocationPreemptionSignalResponse + (*AllocationPendingPreemptionSignalResponse)(nil), // 365: determined.api.v1.AllocationPendingPreemptionSignalResponse + (*AckAllocationPreemptionSignalResponse)(nil), // 366: determined.api.v1.AckAllocationPreemptionSignalResponse + (*MarkAllocationResourcesDaemonResponse)(nil), // 367: determined.api.v1.MarkAllocationResourcesDaemonResponse + (*AllocationRendezvousInfoResponse)(nil), // 368: determined.api.v1.AllocationRendezvousInfoResponse + (*PostAllocationProxyAddressResponse)(nil), // 369: determined.api.v1.PostAllocationProxyAddressResponse + (*GetTaskAcceleratorDataResponse)(nil), // 370: determined.api.v1.GetTaskAcceleratorDataResponse + (*PostAllocationAcceleratorDataResponse)(nil), // 371: determined.api.v1.PostAllocationAcceleratorDataResponse + (*AllocationAllGatherResponse)(nil), // 372: determined.api.v1.AllocationAllGatherResponse + (*NotifyContainerRunningResponse)(nil), // 373: determined.api.v1.NotifyContainerRunningResponse + (*ReportTrialSearcherEarlyExitResponse)(nil), // 374: determined.api.v1.ReportTrialSearcherEarlyExitResponse + (*ReportTrialProgressResponse)(nil), // 375: determined.api.v1.ReportTrialProgressResponse + (*PostTrialRunnerMetadataResponse)(nil), // 376: determined.api.v1.PostTrialRunnerMetadataResponse + (*ReportTrialMetricsResponse)(nil), // 377: determined.api.v1.ReportTrialMetricsResponse + (*ReportTrialTrainingMetricsResponse)(nil), // 378: determined.api.v1.ReportTrialTrainingMetricsResponse + (*ReportTrialValidationMetricsResponse)(nil), // 379: determined.api.v1.ReportTrialValidationMetricsResponse + (*ReportCheckpointResponse)(nil), // 380: determined.api.v1.ReportCheckpointResponse + (*GetJobsResponse)(nil), // 381: determined.api.v1.GetJobsResponse + (*GetJobsV2Response)(nil), // 382: determined.api.v1.GetJobsV2Response + (*GetJobQueueStatsResponse)(nil), // 383: determined.api.v1.GetJobQueueStatsResponse + (*UpdateJobQueueResponse)(nil), // 384: determined.api.v1.UpdateJobQueueResponse + (*GetTemplatesResponse)(nil), // 385: determined.api.v1.GetTemplatesResponse + (*GetTemplateResponse)(nil), // 386: determined.api.v1.GetTemplateResponse + (*PutTemplateResponse)(nil), // 387: determined.api.v1.PutTemplateResponse + (*PostTemplateResponse)(nil), // 388: determined.api.v1.PostTemplateResponse + (*PatchTemplateConfigResponse)(nil), // 389: determined.api.v1.PatchTemplateConfigResponse + (*PatchTemplateNameResponse)(nil), // 390: determined.api.v1.PatchTemplateNameResponse + (*DeleteTemplateResponse)(nil), // 391: determined.api.v1.DeleteTemplateResponse + (*GetNotebooksResponse)(nil), // 392: determined.api.v1.GetNotebooksResponse + (*GetNotebookResponse)(nil), // 393: determined.api.v1.GetNotebookResponse + (*IdleNotebookResponse)(nil), // 394: determined.api.v1.IdleNotebookResponse + (*KillNotebookResponse)(nil), // 395: determined.api.v1.KillNotebookResponse + (*SetNotebookPriorityResponse)(nil), // 396: determined.api.v1.SetNotebookPriorityResponse + (*LaunchNotebookResponse)(nil), // 397: determined.api.v1.LaunchNotebookResponse + (*GetShellsResponse)(nil), // 398: determined.api.v1.GetShellsResponse + (*GetShellResponse)(nil), // 399: determined.api.v1.GetShellResponse + (*KillShellResponse)(nil), // 400: determined.api.v1.KillShellResponse + (*SetShellPriorityResponse)(nil), // 401: determined.api.v1.SetShellPriorityResponse + (*LaunchShellResponse)(nil), // 402: determined.api.v1.LaunchShellResponse + (*GetCommandsResponse)(nil), // 403: determined.api.v1.GetCommandsResponse + (*GetCommandResponse)(nil), // 404: determined.api.v1.GetCommandResponse + (*KillCommandResponse)(nil), // 405: determined.api.v1.KillCommandResponse + (*SetCommandPriorityResponse)(nil), // 406: determined.api.v1.SetCommandPriorityResponse + (*LaunchCommandResponse)(nil), // 407: determined.api.v1.LaunchCommandResponse + (*GetTensorboardsResponse)(nil), // 408: determined.api.v1.GetTensorboardsResponse + (*GetTensorboardResponse)(nil), // 409: determined.api.v1.GetTensorboardResponse + (*KillTensorboardResponse)(nil), // 410: determined.api.v1.KillTensorboardResponse + (*SetTensorboardPriorityResponse)(nil), // 411: determined.api.v1.SetTensorboardPriorityResponse + (*LaunchTensorboardResponse)(nil), // 412: determined.api.v1.LaunchTensorboardResponse + (*LaunchTensorboardSearchesResponse)(nil), // 413: determined.api.v1.LaunchTensorboardSearchesResponse + (*DeleteTensorboardFilesResponse)(nil), // 414: determined.api.v1.DeleteTensorboardFilesResponse + (*GetActiveTasksCountResponse)(nil), // 415: determined.api.v1.GetActiveTasksCountResponse + (*GetTaskResponse)(nil), // 416: determined.api.v1.GetTaskResponse + (*GetTasksResponse)(nil), // 417: determined.api.v1.GetTasksResponse + (*GetModelResponse)(nil), // 418: determined.api.v1.GetModelResponse + (*PostModelResponse)(nil), // 419: determined.api.v1.PostModelResponse + (*PatchModelResponse)(nil), // 420: determined.api.v1.PatchModelResponse + (*ArchiveModelResponse)(nil), // 421: determined.api.v1.ArchiveModelResponse + (*UnarchiveModelResponse)(nil), // 422: determined.api.v1.UnarchiveModelResponse + (*MoveModelResponse)(nil), // 423: determined.api.v1.MoveModelResponse + (*DeleteModelResponse)(nil), // 424: determined.api.v1.DeleteModelResponse + (*GetModelsResponse)(nil), // 425: determined.api.v1.GetModelsResponse + (*GetModelLabelsResponse)(nil), // 426: determined.api.v1.GetModelLabelsResponse + (*GetModelVersionResponse)(nil), // 427: determined.api.v1.GetModelVersionResponse + (*GetModelVersionsResponse)(nil), // 428: determined.api.v1.GetModelVersionsResponse + (*PostModelVersionResponse)(nil), // 429: determined.api.v1.PostModelVersionResponse + (*PatchModelVersionResponse)(nil), // 430: determined.api.v1.PatchModelVersionResponse + (*DeleteModelVersionResponse)(nil), // 431: determined.api.v1.DeleteModelVersionResponse + (*GetTrialMetricsByModelVersionResponse)(nil), // 432: determined.api.v1.GetTrialMetricsByModelVersionResponse + (*GetCheckpointResponse)(nil), // 433: determined.api.v1.GetCheckpointResponse + (*PostCheckpointMetadataResponse)(nil), // 434: determined.api.v1.PostCheckpointMetadataResponse + (*CheckpointsRemoveFilesResponse)(nil), // 435: determined.api.v1.CheckpointsRemoveFilesResponse + (*PatchCheckpointsResponse)(nil), // 436: determined.api.v1.PatchCheckpointsResponse + (*DeleteCheckpointsResponse)(nil), // 437: determined.api.v1.DeleteCheckpointsResponse + (*GetTrialMetricsByCheckpointResponse)(nil), // 438: determined.api.v1.GetTrialMetricsByCheckpointResponse + (*ExpMetricNamesResponse)(nil), // 439: determined.api.v1.ExpMetricNamesResponse + (*MetricBatchesResponse)(nil), // 440: determined.api.v1.MetricBatchesResponse + (*TrialsSnapshotResponse)(nil), // 441: determined.api.v1.TrialsSnapshotResponse + (*TrialsSampleResponse)(nil), // 442: determined.api.v1.TrialsSampleResponse + (*GetResourcePoolsResponse)(nil), // 443: determined.api.v1.GetResourcePoolsResponse + (*GetKubernetesResourceManagersResponse)(nil), // 444: determined.api.v1.GetKubernetesResourceManagersResponse + (*ResourceAllocationRawResponse)(nil), // 445: determined.api.v1.ResourceAllocationRawResponse + (*ResourceAllocationAggregatedResponse)(nil), // 446: determined.api.v1.ResourceAllocationAggregatedResponse + (*GetWorkspaceResponse)(nil), // 447: determined.api.v1.GetWorkspaceResponse + (*GetWorkspaceProjectsResponse)(nil), // 448: determined.api.v1.GetWorkspaceProjectsResponse + (*GetWorkspacesResponse)(nil), // 449: determined.api.v1.GetWorkspacesResponse + (*PostWorkspaceResponse)(nil), // 450: determined.api.v1.PostWorkspaceResponse + (*PatchWorkspaceResponse)(nil), // 451: determined.api.v1.PatchWorkspaceResponse + (*DeleteWorkspaceResponse)(nil), // 452: determined.api.v1.DeleteWorkspaceResponse + (*ArchiveWorkspaceResponse)(nil), // 453: determined.api.v1.ArchiveWorkspaceResponse + (*UnarchiveWorkspaceResponse)(nil), // 454: determined.api.v1.UnarchiveWorkspaceResponse + (*PinWorkspaceResponse)(nil), // 455: determined.api.v1.PinWorkspaceResponse + (*UnpinWorkspaceResponse)(nil), // 456: determined.api.v1.UnpinWorkspaceResponse + (*SetWorkspaceNamespaceBindingsResponse)(nil), // 457: determined.api.v1.SetWorkspaceNamespaceBindingsResponse + (*SetResourceQuotasResponse)(nil), // 458: determined.api.v1.SetResourceQuotasResponse + (*ListWorkspaceNamespaceBindingsResponse)(nil), // 459: determined.api.v1.ListWorkspaceNamespaceBindingsResponse + (*GetWorkspacesWithDefaultNamespaceBindingsResponse)(nil), // 460: determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsResponse + (*BulkAutoCreateWorkspaceNamespaceBindingsResponse)(nil), // 461: determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsResponse + (*DeleteWorkspaceNamespaceBindingsResponse)(nil), // 462: determined.api.v1.DeleteWorkspaceNamespaceBindingsResponse + (*GetKubernetesResourceQuotasResponse)(nil), // 463: determined.api.v1.GetKubernetesResourceQuotasResponse + (*GetProjectResponse)(nil), // 464: determined.api.v1.GetProjectResponse + (*GetProjectByKeyResponse)(nil), // 465: determined.api.v1.GetProjectByKeyResponse + (*GetProjectColumnsResponse)(nil), // 466: determined.api.v1.GetProjectColumnsResponse + (*GetProjectNumericMetricsRangeResponse)(nil), // 467: determined.api.v1.GetProjectNumericMetricsRangeResponse + (*PostProjectResponse)(nil), // 468: determined.api.v1.PostProjectResponse + (*AddProjectNoteResponse)(nil), // 469: determined.api.v1.AddProjectNoteResponse + (*PutProjectNotesResponse)(nil), // 470: determined.api.v1.PutProjectNotesResponse + (*PatchProjectResponse)(nil), // 471: determined.api.v1.PatchProjectResponse + (*DeleteProjectResponse)(nil), // 472: determined.api.v1.DeleteProjectResponse + (*ArchiveProjectResponse)(nil), // 473: determined.api.v1.ArchiveProjectResponse + (*UnarchiveProjectResponse)(nil), // 474: determined.api.v1.UnarchiveProjectResponse + (*MoveProjectResponse)(nil), // 475: determined.api.v1.MoveProjectResponse + (*MoveExperimentResponse)(nil), // 476: determined.api.v1.MoveExperimentResponse + (*MoveExperimentsResponse)(nil), // 477: determined.api.v1.MoveExperimentsResponse + (*GetWebhooksResponse)(nil), // 478: determined.api.v1.GetWebhooksResponse + (*PatchWebhookResponse)(nil), // 479: determined.api.v1.PatchWebhookResponse + (*PostWebhookResponse)(nil), // 480: determined.api.v1.PostWebhookResponse + (*DeleteWebhookResponse)(nil), // 481: determined.api.v1.DeleteWebhookResponse + (*TestWebhookResponse)(nil), // 482: determined.api.v1.TestWebhookResponse + (*PostWebhookEventDataResponse)(nil), // 483: determined.api.v1.PostWebhookEventDataResponse + (*GetGroupResponse)(nil), // 484: determined.api.v1.GetGroupResponse + (*GetGroupsResponse)(nil), // 485: determined.api.v1.GetGroupsResponse + (*CreateGroupResponse)(nil), // 486: determined.api.v1.CreateGroupResponse + (*UpdateGroupResponse)(nil), // 487: determined.api.v1.UpdateGroupResponse + (*DeleteGroupResponse)(nil), // 488: determined.api.v1.DeleteGroupResponse + (*GetPermissionsSummaryResponse)(nil), // 489: determined.api.v1.GetPermissionsSummaryResponse + (*GetGroupsAndUsersAssignedToWorkspaceResponse)(nil), // 490: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse + (*GetRolesByIDResponse)(nil), // 491: determined.api.v1.GetRolesByIDResponse + (*GetRolesAssignedToUserResponse)(nil), // 492: determined.api.v1.GetRolesAssignedToUserResponse + (*GetRolesAssignedToGroupResponse)(nil), // 493: determined.api.v1.GetRolesAssignedToGroupResponse + (*SearchRolesAssignableToScopeResponse)(nil), // 494: determined.api.v1.SearchRolesAssignableToScopeResponse + (*ListRolesResponse)(nil), // 495: determined.api.v1.ListRolesResponse + (*AssignRolesResponse)(nil), // 496: determined.api.v1.AssignRolesResponse + (*RemoveAssignmentsResponse)(nil), // 497: determined.api.v1.RemoveAssignmentsResponse + (*PostUserActivityResponse)(nil), // 498: determined.api.v1.PostUserActivityResponse + (*GetProjectsByUserActivityResponse)(nil), // 499: determined.api.v1.GetProjectsByUserActivityResponse + (*SearchExperimentsResponse)(nil), // 500: determined.api.v1.SearchExperimentsResponse + (*BindRPToWorkspaceResponse)(nil), // 501: determined.api.v1.BindRPToWorkspaceResponse + (*UnbindRPFromWorkspaceResponse)(nil), // 502: determined.api.v1.UnbindRPFromWorkspaceResponse + (*OverwriteRPWorkspaceBindingsResponse)(nil), // 503: determined.api.v1.OverwriteRPWorkspaceBindingsResponse + (*ListRPsBoundToWorkspaceResponse)(nil), // 504: determined.api.v1.ListRPsBoundToWorkspaceResponse + (*ListWorkspacesBoundToRPResponse)(nil), // 505: determined.api.v1.ListWorkspacesBoundToRPResponse + (*GetGenericTaskConfigResponse)(nil), // 506: determined.api.v1.GetGenericTaskConfigResponse + (*KillGenericTaskResponse)(nil), // 507: determined.api.v1.KillGenericTaskResponse + (*PauseGenericTaskResponse)(nil), // 508: determined.api.v1.PauseGenericTaskResponse + (*UnpauseGenericTaskResponse)(nil), // 509: determined.api.v1.UnpauseGenericTaskResponse + (*SearchRunsResponse)(nil), // 510: determined.api.v1.SearchRunsResponse + (*MoveRunsResponse)(nil), // 511: determined.api.v1.MoveRunsResponse + (*KillRunsResponse)(nil), // 512: determined.api.v1.KillRunsResponse + (*DeleteRunsResponse)(nil), // 513: determined.api.v1.DeleteRunsResponse + (*ArchiveRunsResponse)(nil), // 514: determined.api.v1.ArchiveRunsResponse + (*UnarchiveRunsResponse)(nil), // 515: determined.api.v1.UnarchiveRunsResponse + (*PauseRunsResponse)(nil), // 516: determined.api.v1.PauseRunsResponse + (*ResumeRunsResponse)(nil), // 517: determined.api.v1.ResumeRunsResponse + (*GetRunMetadataResponse)(nil), // 518: determined.api.v1.GetRunMetadataResponse + (*PostRunMetadataResponse)(nil), // 519: determined.api.v1.PostRunMetadataResponse + (*GetMetadataValuesResponse)(nil), // 520: determined.api.v1.GetMetadataValuesResponse + (*PutWorkspaceConfigPoliciesResponse)(nil), // 521: determined.api.v1.PutWorkspaceConfigPoliciesResponse + (*PutGlobalConfigPoliciesResponse)(nil), // 522: determined.api.v1.PutGlobalConfigPoliciesResponse + (*GetWorkspaceConfigPoliciesResponse)(nil), // 523: determined.api.v1.GetWorkspaceConfigPoliciesResponse + (*GetGlobalConfigPoliciesResponse)(nil), // 524: determined.api.v1.GetGlobalConfigPoliciesResponse + (*DeleteWorkspaceConfigPoliciesResponse)(nil), // 525: determined.api.v1.DeleteWorkspaceConfigPoliciesResponse + (*DeleteGlobalConfigPoliciesResponse)(nil), // 526: determined.api.v1.DeleteGlobalConfigPoliciesResponse + (*MoveSearchesResponse)(nil), // 527: determined.api.v1.MoveSearchesResponse + (*CancelSearchesResponse)(nil), // 528: determined.api.v1.CancelSearchesResponse + (*KillSearchesResponse)(nil), // 529: determined.api.v1.KillSearchesResponse + (*DeleteSearchesResponse)(nil), // 530: determined.api.v1.DeleteSearchesResponse + (*ArchiveSearchesResponse)(nil), // 531: determined.api.v1.ArchiveSearchesResponse + (*UnarchiveSearchesResponse)(nil), // 532: determined.api.v1.UnarchiveSearchesResponse + (*PauseSearchesResponse)(nil), // 533: determined.api.v1.PauseSearchesResponse + (*ResumeSearchesResponse)(nil), // 534: determined.api.v1.ResumeSearchesResponse + (*PostAccessTokenResponse)(nil), // 535: determined.api.v1.PostAccessTokenResponse + (*GetAccessTokensResponse)(nil), // 536: determined.api.v1.GetAccessTokensResponse + (*PatchAccessTokenResponse)(nil), // 537: determined.api.v1.PatchAccessTokenResponse } var file_determined_api_v1_api_proto_depIdxs = []int32{ 0, // 0: determined.api.v1.Determined.Login:input_type -> determined.api.v1.LoginRequest @@ -3692,445 +3658,441 @@ var file_determined_api_v1_api_proto_depIdxs = []int32{ 102, // 102: determined.api.v1.Determined.PostAllocationAcceleratorData:input_type -> determined.api.v1.PostAllocationAcceleratorDataRequest 103, // 103: determined.api.v1.Determined.AllocationAllGather:input_type -> determined.api.v1.AllocationAllGatherRequest 104, // 104: determined.api.v1.Determined.NotifyContainerRunning:input_type -> determined.api.v1.NotifyContainerRunningRequest - 105, // 105: determined.api.v1.Determined.GetCurrentTrialSearcherOperation:input_type -> determined.api.v1.GetCurrentTrialSearcherOperationRequest - 106, // 106: determined.api.v1.Determined.CompleteTrialSearcherValidation:input_type -> determined.api.v1.CompleteTrialSearcherValidationRequest - 107, // 107: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:input_type -> determined.api.v1.ReportTrialSearcherEarlyExitRequest - 108, // 108: determined.api.v1.Determined.ReportTrialProgress:input_type -> determined.api.v1.ReportTrialProgressRequest - 109, // 109: determined.api.v1.Determined.PostTrialRunnerMetadata:input_type -> determined.api.v1.PostTrialRunnerMetadataRequest - 110, // 110: determined.api.v1.Determined.ReportTrialMetrics:input_type -> determined.api.v1.ReportTrialMetricsRequest - 111, // 111: determined.api.v1.Determined.ReportTrialTrainingMetrics:input_type -> determined.api.v1.ReportTrialTrainingMetricsRequest - 112, // 112: determined.api.v1.Determined.ReportTrialValidationMetrics:input_type -> determined.api.v1.ReportTrialValidationMetricsRequest - 113, // 113: determined.api.v1.Determined.ReportCheckpoint:input_type -> determined.api.v1.ReportCheckpointRequest - 114, // 114: determined.api.v1.Determined.GetJobs:input_type -> determined.api.v1.GetJobsRequest - 115, // 115: determined.api.v1.Determined.GetJobsV2:input_type -> determined.api.v1.GetJobsV2Request - 116, // 116: determined.api.v1.Determined.GetJobQueueStats:input_type -> determined.api.v1.GetJobQueueStatsRequest - 117, // 117: determined.api.v1.Determined.UpdateJobQueue:input_type -> determined.api.v1.UpdateJobQueueRequest - 118, // 118: determined.api.v1.Determined.GetTemplates:input_type -> determined.api.v1.GetTemplatesRequest - 119, // 119: determined.api.v1.Determined.GetTemplate:input_type -> determined.api.v1.GetTemplateRequest - 120, // 120: determined.api.v1.Determined.PutTemplate:input_type -> determined.api.v1.PutTemplateRequest - 121, // 121: determined.api.v1.Determined.PostTemplate:input_type -> determined.api.v1.PostTemplateRequest - 122, // 122: determined.api.v1.Determined.PatchTemplateConfig:input_type -> determined.api.v1.PatchTemplateConfigRequest - 123, // 123: determined.api.v1.Determined.PatchTemplateName:input_type -> determined.api.v1.PatchTemplateNameRequest - 124, // 124: determined.api.v1.Determined.DeleteTemplate:input_type -> determined.api.v1.DeleteTemplateRequest - 125, // 125: determined.api.v1.Determined.GetNotebooks:input_type -> determined.api.v1.GetNotebooksRequest - 126, // 126: determined.api.v1.Determined.GetNotebook:input_type -> determined.api.v1.GetNotebookRequest - 127, // 127: determined.api.v1.Determined.IdleNotebook:input_type -> determined.api.v1.IdleNotebookRequest - 128, // 128: determined.api.v1.Determined.KillNotebook:input_type -> determined.api.v1.KillNotebookRequest - 129, // 129: determined.api.v1.Determined.SetNotebookPriority:input_type -> determined.api.v1.SetNotebookPriorityRequest - 130, // 130: determined.api.v1.Determined.LaunchNotebook:input_type -> determined.api.v1.LaunchNotebookRequest - 131, // 131: determined.api.v1.Determined.GetShells:input_type -> determined.api.v1.GetShellsRequest - 132, // 132: determined.api.v1.Determined.GetShell:input_type -> determined.api.v1.GetShellRequest - 133, // 133: determined.api.v1.Determined.KillShell:input_type -> determined.api.v1.KillShellRequest - 134, // 134: determined.api.v1.Determined.SetShellPriority:input_type -> determined.api.v1.SetShellPriorityRequest - 135, // 135: determined.api.v1.Determined.LaunchShell:input_type -> determined.api.v1.LaunchShellRequest - 136, // 136: determined.api.v1.Determined.GetCommands:input_type -> determined.api.v1.GetCommandsRequest - 137, // 137: determined.api.v1.Determined.GetCommand:input_type -> determined.api.v1.GetCommandRequest - 138, // 138: determined.api.v1.Determined.KillCommand:input_type -> determined.api.v1.KillCommandRequest - 139, // 139: determined.api.v1.Determined.SetCommandPriority:input_type -> determined.api.v1.SetCommandPriorityRequest - 140, // 140: determined.api.v1.Determined.LaunchCommand:input_type -> determined.api.v1.LaunchCommandRequest - 141, // 141: determined.api.v1.Determined.GetTensorboards:input_type -> determined.api.v1.GetTensorboardsRequest - 142, // 142: determined.api.v1.Determined.GetTensorboard:input_type -> determined.api.v1.GetTensorboardRequest - 143, // 143: determined.api.v1.Determined.KillTensorboard:input_type -> determined.api.v1.KillTensorboardRequest - 144, // 144: determined.api.v1.Determined.SetTensorboardPriority:input_type -> determined.api.v1.SetTensorboardPriorityRequest - 145, // 145: determined.api.v1.Determined.LaunchTensorboard:input_type -> determined.api.v1.LaunchTensorboardRequest - 146, // 146: determined.api.v1.Determined.LaunchTensorboardSearches:input_type -> determined.api.v1.LaunchTensorboardSearchesRequest - 147, // 147: determined.api.v1.Determined.DeleteTensorboardFiles:input_type -> determined.api.v1.DeleteTensorboardFilesRequest - 148, // 148: determined.api.v1.Determined.GetActiveTasksCount:input_type -> determined.api.v1.GetActiveTasksCountRequest - 149, // 149: determined.api.v1.Determined.GetTask:input_type -> determined.api.v1.GetTaskRequest - 150, // 150: determined.api.v1.Determined.GetTasks:input_type -> determined.api.v1.GetTasksRequest - 151, // 151: determined.api.v1.Determined.GetModel:input_type -> determined.api.v1.GetModelRequest - 152, // 152: determined.api.v1.Determined.PostModel:input_type -> determined.api.v1.PostModelRequest - 153, // 153: determined.api.v1.Determined.PatchModel:input_type -> determined.api.v1.PatchModelRequest - 154, // 154: determined.api.v1.Determined.ArchiveModel:input_type -> determined.api.v1.ArchiveModelRequest - 155, // 155: determined.api.v1.Determined.UnarchiveModel:input_type -> determined.api.v1.UnarchiveModelRequest - 156, // 156: determined.api.v1.Determined.MoveModel:input_type -> determined.api.v1.MoveModelRequest - 157, // 157: determined.api.v1.Determined.DeleteModel:input_type -> determined.api.v1.DeleteModelRequest - 158, // 158: determined.api.v1.Determined.GetModels:input_type -> determined.api.v1.GetModelsRequest - 159, // 159: determined.api.v1.Determined.GetModelLabels:input_type -> determined.api.v1.GetModelLabelsRequest - 160, // 160: determined.api.v1.Determined.GetModelVersion:input_type -> determined.api.v1.GetModelVersionRequest - 161, // 161: determined.api.v1.Determined.GetModelVersions:input_type -> determined.api.v1.GetModelVersionsRequest - 162, // 162: determined.api.v1.Determined.PostModelVersion:input_type -> determined.api.v1.PostModelVersionRequest - 163, // 163: determined.api.v1.Determined.PatchModelVersion:input_type -> determined.api.v1.PatchModelVersionRequest - 164, // 164: determined.api.v1.Determined.DeleteModelVersion:input_type -> determined.api.v1.DeleteModelVersionRequest - 165, // 165: determined.api.v1.Determined.GetTrialMetricsByModelVersion:input_type -> determined.api.v1.GetTrialMetricsByModelVersionRequest - 166, // 166: determined.api.v1.Determined.GetCheckpoint:input_type -> determined.api.v1.GetCheckpointRequest - 167, // 167: determined.api.v1.Determined.PostCheckpointMetadata:input_type -> determined.api.v1.PostCheckpointMetadataRequest - 168, // 168: determined.api.v1.Determined.CheckpointsRemoveFiles:input_type -> determined.api.v1.CheckpointsRemoveFilesRequest - 169, // 169: determined.api.v1.Determined.PatchCheckpoints:input_type -> determined.api.v1.PatchCheckpointsRequest - 170, // 170: determined.api.v1.Determined.DeleteCheckpoints:input_type -> determined.api.v1.DeleteCheckpointsRequest - 171, // 171: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:input_type -> determined.api.v1.GetTrialMetricsByCheckpointRequest - 172, // 172: determined.api.v1.Determined.ExpMetricNames:input_type -> determined.api.v1.ExpMetricNamesRequest - 173, // 173: determined.api.v1.Determined.MetricBatches:input_type -> determined.api.v1.MetricBatchesRequest - 174, // 174: determined.api.v1.Determined.TrialsSnapshot:input_type -> determined.api.v1.TrialsSnapshotRequest - 175, // 175: determined.api.v1.Determined.TrialsSample:input_type -> determined.api.v1.TrialsSampleRequest - 176, // 176: determined.api.v1.Determined.GetResourcePools:input_type -> determined.api.v1.GetResourcePoolsRequest - 177, // 177: determined.api.v1.Determined.GetKubernetesResourceManagers:input_type -> determined.api.v1.GetKubernetesResourceManagersRequest - 178, // 178: determined.api.v1.Determined.ResourceAllocationRaw:input_type -> determined.api.v1.ResourceAllocationRawRequest - 179, // 179: determined.api.v1.Determined.ResourceAllocationAggregated:input_type -> determined.api.v1.ResourceAllocationAggregatedRequest - 180, // 180: determined.api.v1.Determined.GetWorkspace:input_type -> determined.api.v1.GetWorkspaceRequest - 181, // 181: determined.api.v1.Determined.GetWorkspaceProjects:input_type -> determined.api.v1.GetWorkspaceProjectsRequest - 182, // 182: determined.api.v1.Determined.GetWorkspaces:input_type -> determined.api.v1.GetWorkspacesRequest - 183, // 183: determined.api.v1.Determined.PostWorkspace:input_type -> determined.api.v1.PostWorkspaceRequest - 184, // 184: determined.api.v1.Determined.PatchWorkspace:input_type -> determined.api.v1.PatchWorkspaceRequest - 185, // 185: determined.api.v1.Determined.DeleteWorkspace:input_type -> determined.api.v1.DeleteWorkspaceRequest - 186, // 186: determined.api.v1.Determined.ArchiveWorkspace:input_type -> determined.api.v1.ArchiveWorkspaceRequest - 187, // 187: determined.api.v1.Determined.UnarchiveWorkspace:input_type -> determined.api.v1.UnarchiveWorkspaceRequest - 188, // 188: determined.api.v1.Determined.PinWorkspace:input_type -> determined.api.v1.PinWorkspaceRequest - 189, // 189: determined.api.v1.Determined.UnpinWorkspace:input_type -> determined.api.v1.UnpinWorkspaceRequest - 190, // 190: determined.api.v1.Determined.SetWorkspaceNamespaceBindings:input_type -> determined.api.v1.SetWorkspaceNamespaceBindingsRequest - 191, // 191: determined.api.v1.Determined.SetResourceQuotas:input_type -> determined.api.v1.SetResourceQuotasRequest - 192, // 192: determined.api.v1.Determined.ListWorkspaceNamespaceBindings:input_type -> determined.api.v1.ListWorkspaceNamespaceBindingsRequest - 193, // 193: determined.api.v1.Determined.GetWorkspacesWithDefaultNamespaceBindings:input_type -> determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsRequest - 194, // 194: determined.api.v1.Determined.BulkAutoCreateWorkspaceNamespaceBindings:input_type -> determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsRequest - 195, // 195: determined.api.v1.Determined.DeleteWorkspaceNamespaceBindings:input_type -> determined.api.v1.DeleteWorkspaceNamespaceBindingsRequest - 196, // 196: determined.api.v1.Determined.GetKubernetesResourceQuotas:input_type -> determined.api.v1.GetKubernetesResourceQuotasRequest - 197, // 197: determined.api.v1.Determined.GetProject:input_type -> determined.api.v1.GetProjectRequest - 198, // 198: determined.api.v1.Determined.GetProjectByKey:input_type -> determined.api.v1.GetProjectByKeyRequest - 199, // 199: determined.api.v1.Determined.GetProjectColumns:input_type -> determined.api.v1.GetProjectColumnsRequest - 200, // 200: determined.api.v1.Determined.GetProjectNumericMetricsRange:input_type -> determined.api.v1.GetProjectNumericMetricsRangeRequest - 201, // 201: determined.api.v1.Determined.PostProject:input_type -> determined.api.v1.PostProjectRequest - 202, // 202: determined.api.v1.Determined.AddProjectNote:input_type -> determined.api.v1.AddProjectNoteRequest - 203, // 203: determined.api.v1.Determined.PutProjectNotes:input_type -> determined.api.v1.PutProjectNotesRequest - 204, // 204: determined.api.v1.Determined.PatchProject:input_type -> determined.api.v1.PatchProjectRequest - 205, // 205: determined.api.v1.Determined.DeleteProject:input_type -> determined.api.v1.DeleteProjectRequest - 206, // 206: determined.api.v1.Determined.ArchiveProject:input_type -> determined.api.v1.ArchiveProjectRequest - 207, // 207: determined.api.v1.Determined.UnarchiveProject:input_type -> determined.api.v1.UnarchiveProjectRequest - 208, // 208: determined.api.v1.Determined.MoveProject:input_type -> determined.api.v1.MoveProjectRequest - 209, // 209: determined.api.v1.Determined.MoveExperiment:input_type -> determined.api.v1.MoveExperimentRequest - 210, // 210: determined.api.v1.Determined.MoveExperiments:input_type -> determined.api.v1.MoveExperimentsRequest - 211, // 211: determined.api.v1.Determined.GetWebhooks:input_type -> determined.api.v1.GetWebhooksRequest - 212, // 212: determined.api.v1.Determined.PatchWebhook:input_type -> determined.api.v1.PatchWebhookRequest - 213, // 213: determined.api.v1.Determined.PostWebhook:input_type -> determined.api.v1.PostWebhookRequest - 214, // 214: determined.api.v1.Determined.DeleteWebhook:input_type -> determined.api.v1.DeleteWebhookRequest - 215, // 215: determined.api.v1.Determined.TestWebhook:input_type -> determined.api.v1.TestWebhookRequest - 216, // 216: determined.api.v1.Determined.PostWebhookEventData:input_type -> determined.api.v1.PostWebhookEventDataRequest - 217, // 217: determined.api.v1.Determined.GetGroup:input_type -> determined.api.v1.GetGroupRequest - 218, // 218: determined.api.v1.Determined.GetGroups:input_type -> determined.api.v1.GetGroupsRequest - 219, // 219: determined.api.v1.Determined.CreateGroup:input_type -> determined.api.v1.CreateGroupRequest - 220, // 220: determined.api.v1.Determined.UpdateGroup:input_type -> determined.api.v1.UpdateGroupRequest - 221, // 221: determined.api.v1.Determined.DeleteGroup:input_type -> determined.api.v1.DeleteGroupRequest - 222, // 222: determined.api.v1.Determined.GetPermissionsSummary:input_type -> determined.api.v1.GetPermissionsSummaryRequest - 223, // 223: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:input_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest - 224, // 224: determined.api.v1.Determined.GetRolesByID:input_type -> determined.api.v1.GetRolesByIDRequest - 225, // 225: determined.api.v1.Determined.GetRolesAssignedToUser:input_type -> determined.api.v1.GetRolesAssignedToUserRequest - 226, // 226: determined.api.v1.Determined.GetRolesAssignedToGroup:input_type -> determined.api.v1.GetRolesAssignedToGroupRequest - 227, // 227: determined.api.v1.Determined.SearchRolesAssignableToScope:input_type -> determined.api.v1.SearchRolesAssignableToScopeRequest - 228, // 228: determined.api.v1.Determined.ListRoles:input_type -> determined.api.v1.ListRolesRequest - 229, // 229: determined.api.v1.Determined.AssignRoles:input_type -> determined.api.v1.AssignRolesRequest - 230, // 230: determined.api.v1.Determined.RemoveAssignments:input_type -> determined.api.v1.RemoveAssignmentsRequest - 231, // 231: determined.api.v1.Determined.PostUserActivity:input_type -> determined.api.v1.PostUserActivityRequest - 232, // 232: determined.api.v1.Determined.GetProjectsByUserActivity:input_type -> determined.api.v1.GetProjectsByUserActivityRequest - 233, // 233: determined.api.v1.Determined.SearchExperiments:input_type -> determined.api.v1.SearchExperimentsRequest - 234, // 234: determined.api.v1.Determined.BindRPToWorkspace:input_type -> determined.api.v1.BindRPToWorkspaceRequest - 235, // 235: determined.api.v1.Determined.UnbindRPFromWorkspace:input_type -> determined.api.v1.UnbindRPFromWorkspaceRequest - 236, // 236: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:input_type -> determined.api.v1.OverwriteRPWorkspaceBindingsRequest - 237, // 237: determined.api.v1.Determined.ListRPsBoundToWorkspace:input_type -> determined.api.v1.ListRPsBoundToWorkspaceRequest - 238, // 238: determined.api.v1.Determined.ListWorkspacesBoundToRP:input_type -> determined.api.v1.ListWorkspacesBoundToRPRequest - 239, // 239: determined.api.v1.Determined.GetGenericTaskConfig:input_type -> determined.api.v1.GetGenericTaskConfigRequest - 240, // 240: determined.api.v1.Determined.KillGenericTask:input_type -> determined.api.v1.KillGenericTaskRequest - 241, // 241: determined.api.v1.Determined.PauseGenericTask:input_type -> determined.api.v1.PauseGenericTaskRequest - 242, // 242: determined.api.v1.Determined.UnpauseGenericTask:input_type -> determined.api.v1.UnpauseGenericTaskRequest - 243, // 243: determined.api.v1.Determined.SearchRuns:input_type -> determined.api.v1.SearchRunsRequest - 244, // 244: determined.api.v1.Determined.MoveRuns:input_type -> determined.api.v1.MoveRunsRequest - 245, // 245: determined.api.v1.Determined.KillRuns:input_type -> determined.api.v1.KillRunsRequest - 246, // 246: determined.api.v1.Determined.DeleteRuns:input_type -> determined.api.v1.DeleteRunsRequest - 247, // 247: determined.api.v1.Determined.ArchiveRuns:input_type -> determined.api.v1.ArchiveRunsRequest - 248, // 248: determined.api.v1.Determined.UnarchiveRuns:input_type -> determined.api.v1.UnarchiveRunsRequest - 249, // 249: determined.api.v1.Determined.PauseRuns:input_type -> determined.api.v1.PauseRunsRequest - 250, // 250: determined.api.v1.Determined.ResumeRuns:input_type -> determined.api.v1.ResumeRunsRequest - 251, // 251: determined.api.v1.Determined.GetRunMetadata:input_type -> determined.api.v1.GetRunMetadataRequest - 252, // 252: determined.api.v1.Determined.PostRunMetadata:input_type -> determined.api.v1.PostRunMetadataRequest - 253, // 253: determined.api.v1.Determined.GetMetadataValues:input_type -> determined.api.v1.GetMetadataValuesRequest - 254, // 254: determined.api.v1.Determined.PutWorkspaceConfigPolicies:input_type -> determined.api.v1.PutWorkspaceConfigPoliciesRequest - 255, // 255: determined.api.v1.Determined.PutGlobalConfigPolicies:input_type -> determined.api.v1.PutGlobalConfigPoliciesRequest - 256, // 256: determined.api.v1.Determined.GetWorkspaceConfigPolicies:input_type -> determined.api.v1.GetWorkspaceConfigPoliciesRequest - 257, // 257: determined.api.v1.Determined.GetGlobalConfigPolicies:input_type -> determined.api.v1.GetGlobalConfigPoliciesRequest - 258, // 258: determined.api.v1.Determined.DeleteWorkspaceConfigPolicies:input_type -> determined.api.v1.DeleteWorkspaceConfigPoliciesRequest - 259, // 259: determined.api.v1.Determined.DeleteGlobalConfigPolicies:input_type -> determined.api.v1.DeleteGlobalConfigPoliciesRequest - 260, // 260: determined.api.v1.Determined.MoveSearches:input_type -> determined.api.v1.MoveSearchesRequest - 261, // 261: determined.api.v1.Determined.CancelSearches:input_type -> determined.api.v1.CancelSearchesRequest - 262, // 262: determined.api.v1.Determined.KillSearches:input_type -> determined.api.v1.KillSearchesRequest - 263, // 263: determined.api.v1.Determined.DeleteSearches:input_type -> determined.api.v1.DeleteSearchesRequest - 264, // 264: determined.api.v1.Determined.ArchiveSearches:input_type -> determined.api.v1.ArchiveSearchesRequest - 265, // 265: determined.api.v1.Determined.UnarchiveSearches:input_type -> determined.api.v1.UnarchiveSearchesRequest - 266, // 266: determined.api.v1.Determined.PauseSearches:input_type -> determined.api.v1.PauseSearchesRequest - 267, // 267: determined.api.v1.Determined.ResumeSearches:input_type -> determined.api.v1.ResumeSearchesRequest - 268, // 268: determined.api.v1.Determined.PostAccessToken:input_type -> determined.api.v1.PostAccessTokenRequest - 269, // 269: determined.api.v1.Determined.GetAccessTokens:input_type -> determined.api.v1.GetAccessTokensRequest - 270, // 270: determined.api.v1.Determined.PatchAccessToken:input_type -> determined.api.v1.PatchAccessTokenRequest - 271, // 271: determined.api.v1.Determined.Login:output_type -> determined.api.v1.LoginResponse - 272, // 272: determined.api.v1.Determined.CurrentUser:output_type -> determined.api.v1.CurrentUserResponse - 273, // 273: determined.api.v1.Determined.Logout:output_type -> determined.api.v1.LogoutResponse - 274, // 274: determined.api.v1.Determined.GetUsers:output_type -> determined.api.v1.GetUsersResponse - 275, // 275: determined.api.v1.Determined.GetUserSetting:output_type -> determined.api.v1.GetUserSettingResponse - 276, // 276: determined.api.v1.Determined.ResetUserSetting:output_type -> determined.api.v1.ResetUserSettingResponse - 277, // 277: determined.api.v1.Determined.PostUserSetting:output_type -> determined.api.v1.PostUserSettingResponse - 278, // 278: determined.api.v1.Determined.GetUser:output_type -> determined.api.v1.GetUserResponse - 279, // 279: determined.api.v1.Determined.GetUserByUsername:output_type -> determined.api.v1.GetUserByUsernameResponse - 280, // 280: determined.api.v1.Determined.GetMe:output_type -> determined.api.v1.GetMeResponse - 281, // 281: determined.api.v1.Determined.PostUser:output_type -> determined.api.v1.PostUserResponse - 282, // 282: determined.api.v1.Determined.SetUserPassword:output_type -> determined.api.v1.SetUserPasswordResponse - 283, // 283: determined.api.v1.Determined.AssignMultipleGroups:output_type -> determined.api.v1.AssignMultipleGroupsResponse - 284, // 284: determined.api.v1.Determined.PatchUser:output_type -> determined.api.v1.PatchUserResponse - 285, // 285: determined.api.v1.Determined.PatchUsers:output_type -> determined.api.v1.PatchUsersResponse - 286, // 286: determined.api.v1.Determined.GetTelemetry:output_type -> determined.api.v1.GetTelemetryResponse - 287, // 287: determined.api.v1.Determined.GetMaster:output_type -> determined.api.v1.GetMasterResponse - 288, // 288: determined.api.v1.Determined.GetMasterConfig:output_type -> determined.api.v1.GetMasterConfigResponse - 289, // 289: determined.api.v1.Determined.PatchMasterConfig:output_type -> determined.api.v1.PatchMasterConfigResponse - 290, // 290: determined.api.v1.Determined.MasterLogs:output_type -> determined.api.v1.MasterLogsResponse - 291, // 291: determined.api.v1.Determined.GetClusterMessage:output_type -> determined.api.v1.GetClusterMessageResponse - 292, // 292: determined.api.v1.Determined.SetClusterMessage:output_type -> determined.api.v1.SetClusterMessageResponse - 293, // 293: determined.api.v1.Determined.DeleteClusterMessage:output_type -> determined.api.v1.DeleteClusterMessageResponse - 294, // 294: determined.api.v1.Determined.GetAgents:output_type -> determined.api.v1.GetAgentsResponse - 295, // 295: determined.api.v1.Determined.GetAgent:output_type -> determined.api.v1.GetAgentResponse - 296, // 296: determined.api.v1.Determined.GetSlots:output_type -> determined.api.v1.GetSlotsResponse - 297, // 297: determined.api.v1.Determined.GetSlot:output_type -> determined.api.v1.GetSlotResponse - 298, // 298: determined.api.v1.Determined.EnableAgent:output_type -> determined.api.v1.EnableAgentResponse - 299, // 299: determined.api.v1.Determined.DisableAgent:output_type -> determined.api.v1.DisableAgentResponse - 300, // 300: determined.api.v1.Determined.EnableSlot:output_type -> determined.api.v1.EnableSlotResponse - 301, // 301: determined.api.v1.Determined.DisableSlot:output_type -> determined.api.v1.DisableSlotResponse - 302, // 302: determined.api.v1.Determined.CreateGenericTask:output_type -> determined.api.v1.CreateGenericTaskResponse - 303, // 303: determined.api.v1.Determined.CreateExperiment:output_type -> determined.api.v1.CreateExperimentResponse - 304, // 304: determined.api.v1.Determined.PutExperiment:output_type -> determined.api.v1.PutExperimentResponse - 305, // 305: determined.api.v1.Determined.ContinueExperiment:output_type -> determined.api.v1.ContinueExperimentResponse - 306, // 306: determined.api.v1.Determined.GetExperiment:output_type -> determined.api.v1.GetExperimentResponse - 307, // 307: determined.api.v1.Determined.GetExperiments:output_type -> determined.api.v1.GetExperimentsResponse - 308, // 308: determined.api.v1.Determined.PutExperimentRetainLogs:output_type -> determined.api.v1.PutExperimentRetainLogsResponse - 309, // 309: determined.api.v1.Determined.PutExperimentsRetainLogs:output_type -> determined.api.v1.PutExperimentsRetainLogsResponse - 310, // 310: determined.api.v1.Determined.PutTrialRetainLogs:output_type -> determined.api.v1.PutTrialRetainLogsResponse - 311, // 311: determined.api.v1.Determined.GetModelDef:output_type -> determined.api.v1.GetModelDefResponse - 312, // 312: determined.api.v1.Determined.GetTaskContextDirectory:output_type -> determined.api.v1.GetTaskContextDirectoryResponse - 313, // 313: determined.api.v1.Determined.GetModelDefTree:output_type -> determined.api.v1.GetModelDefTreeResponse - 314, // 314: determined.api.v1.Determined.GetModelDefFile:output_type -> determined.api.v1.GetModelDefFileResponse - 315, // 315: determined.api.v1.Determined.GetExperimentLabels:output_type -> determined.api.v1.GetExperimentLabelsResponse - 316, // 316: determined.api.v1.Determined.GetExperimentValidationHistory:output_type -> determined.api.v1.GetExperimentValidationHistoryResponse - 317, // 317: determined.api.v1.Determined.ActivateExperiment:output_type -> determined.api.v1.ActivateExperimentResponse - 318, // 318: determined.api.v1.Determined.ActivateExperiments:output_type -> determined.api.v1.ActivateExperimentsResponse - 319, // 319: determined.api.v1.Determined.PauseExperiment:output_type -> determined.api.v1.PauseExperimentResponse - 320, // 320: determined.api.v1.Determined.PauseExperiments:output_type -> determined.api.v1.PauseExperimentsResponse - 321, // 321: determined.api.v1.Determined.CancelExperiment:output_type -> determined.api.v1.CancelExperimentResponse - 322, // 322: determined.api.v1.Determined.CancelExperiments:output_type -> determined.api.v1.CancelExperimentsResponse - 323, // 323: determined.api.v1.Determined.KillExperiment:output_type -> determined.api.v1.KillExperimentResponse - 324, // 324: determined.api.v1.Determined.KillExperiments:output_type -> determined.api.v1.KillExperimentsResponse - 325, // 325: determined.api.v1.Determined.ArchiveExperiment:output_type -> determined.api.v1.ArchiveExperimentResponse - 326, // 326: determined.api.v1.Determined.ArchiveExperiments:output_type -> determined.api.v1.ArchiveExperimentsResponse - 327, // 327: determined.api.v1.Determined.UnarchiveExperiment:output_type -> determined.api.v1.UnarchiveExperimentResponse - 328, // 328: determined.api.v1.Determined.UnarchiveExperiments:output_type -> determined.api.v1.UnarchiveExperimentsResponse - 329, // 329: determined.api.v1.Determined.PatchExperiment:output_type -> determined.api.v1.PatchExperimentResponse - 330, // 330: determined.api.v1.Determined.DeleteExperiments:output_type -> determined.api.v1.DeleteExperimentsResponse - 331, // 331: determined.api.v1.Determined.DeleteExperiment:output_type -> determined.api.v1.DeleteExperimentResponse - 332, // 332: determined.api.v1.Determined.GetBestSearcherValidationMetric:output_type -> determined.api.v1.GetBestSearcherValidationMetricResponse - 333, // 333: determined.api.v1.Determined.GetExperimentCheckpoints:output_type -> determined.api.v1.GetExperimentCheckpointsResponse - 334, // 334: determined.api.v1.Determined.PutExperimentLabel:output_type -> determined.api.v1.PutExperimentLabelResponse - 335, // 335: determined.api.v1.Determined.DeleteExperimentLabel:output_type -> determined.api.v1.DeleteExperimentLabelResponse - 336, // 336: determined.api.v1.Determined.PreviewHPSearch:output_type -> determined.api.v1.PreviewHPSearchResponse - 337, // 337: determined.api.v1.Determined.GetExperimentTrials:output_type -> determined.api.v1.GetExperimentTrialsResponse - 338, // 338: determined.api.v1.Determined.GetTrialRemainingLogRetentionDays:output_type -> determined.api.v1.GetTrialRemainingLogRetentionDaysResponse - 339, // 339: determined.api.v1.Determined.CompareTrials:output_type -> determined.api.v1.CompareTrialsResponse - 340, // 340: determined.api.v1.Determined.ReportTrialSourceInfo:output_type -> determined.api.v1.ReportTrialSourceInfoResponse - 341, // 341: determined.api.v1.Determined.CreateTrial:output_type -> determined.api.v1.CreateTrialResponse - 342, // 342: determined.api.v1.Determined.PutTrial:output_type -> determined.api.v1.PutTrialResponse - 343, // 343: determined.api.v1.Determined.PatchTrial:output_type -> determined.api.v1.PatchTrialResponse - 344, // 344: determined.api.v1.Determined.StartTrial:output_type -> determined.api.v1.StartTrialResponse - 345, // 345: determined.api.v1.Determined.RunPrepareForReporting:output_type -> determined.api.v1.RunPrepareForReportingResponse - 346, // 346: determined.api.v1.Determined.GetTrial:output_type -> determined.api.v1.GetTrialResponse - 347, // 347: determined.api.v1.Determined.GetTrialByExternalID:output_type -> determined.api.v1.GetTrialByExternalIDResponse - 348, // 348: determined.api.v1.Determined.GetTrialWorkloads:output_type -> determined.api.v1.GetTrialWorkloadsResponse - 349, // 349: determined.api.v1.Determined.TrialLogs:output_type -> determined.api.v1.TrialLogsResponse - 350, // 350: determined.api.v1.Determined.TrialLogsFields:output_type -> determined.api.v1.TrialLogsFieldsResponse - 351, // 351: determined.api.v1.Determined.AllocationReady:output_type -> determined.api.v1.AllocationReadyResponse - 352, // 352: determined.api.v1.Determined.GetAllocation:output_type -> determined.api.v1.GetAllocationResponse - 353, // 353: determined.api.v1.Determined.AllocationWaiting:output_type -> determined.api.v1.AllocationWaitingResponse - 354, // 354: determined.api.v1.Determined.PostTaskLogs:output_type -> determined.api.v1.PostTaskLogsResponse - 355, // 355: determined.api.v1.Determined.TaskLogs:output_type -> determined.api.v1.TaskLogsResponse - 356, // 356: determined.api.v1.Determined.TaskLogsFields:output_type -> determined.api.v1.TaskLogsFieldsResponse - 357, // 357: determined.api.v1.Determined.GetTrialProfilerMetrics:output_type -> determined.api.v1.GetTrialProfilerMetricsResponse - 358, // 358: determined.api.v1.Determined.GetTrialProfilerAvailableSeries:output_type -> determined.api.v1.GetTrialProfilerAvailableSeriesResponse - 359, // 359: determined.api.v1.Determined.PostTrialProfilerMetricsBatch:output_type -> determined.api.v1.PostTrialProfilerMetricsBatchResponse - 360, // 360: determined.api.v1.Determined.GetMetrics:output_type -> determined.api.v1.GetMetricsResponse - 361, // 361: determined.api.v1.Determined.GetTrainingMetrics:output_type -> determined.api.v1.GetTrainingMetricsResponse - 362, // 362: determined.api.v1.Determined.GetValidationMetrics:output_type -> determined.api.v1.GetValidationMetricsResponse - 363, // 363: determined.api.v1.Determined.KillTrial:output_type -> determined.api.v1.KillTrialResponse - 364, // 364: determined.api.v1.Determined.GetTrialCheckpoints:output_type -> determined.api.v1.GetTrialCheckpointsResponse - 365, // 365: determined.api.v1.Determined.CleanupLogs:output_type -> determined.api.v1.CleanupLogsResponse - 366, // 366: determined.api.v1.Determined.AllocationPreemptionSignal:output_type -> determined.api.v1.AllocationPreemptionSignalResponse - 367, // 367: determined.api.v1.Determined.AllocationPendingPreemptionSignal:output_type -> determined.api.v1.AllocationPendingPreemptionSignalResponse - 368, // 368: determined.api.v1.Determined.AckAllocationPreemptionSignal:output_type -> determined.api.v1.AckAllocationPreemptionSignalResponse - 369, // 369: determined.api.v1.Determined.MarkAllocationResourcesDaemon:output_type -> determined.api.v1.MarkAllocationResourcesDaemonResponse - 370, // 370: determined.api.v1.Determined.AllocationRendezvousInfo:output_type -> determined.api.v1.AllocationRendezvousInfoResponse - 371, // 371: determined.api.v1.Determined.PostAllocationProxyAddress:output_type -> determined.api.v1.PostAllocationProxyAddressResponse - 372, // 372: determined.api.v1.Determined.GetTaskAcceleratorData:output_type -> determined.api.v1.GetTaskAcceleratorDataResponse - 373, // 373: determined.api.v1.Determined.PostAllocationAcceleratorData:output_type -> determined.api.v1.PostAllocationAcceleratorDataResponse - 374, // 374: determined.api.v1.Determined.AllocationAllGather:output_type -> determined.api.v1.AllocationAllGatherResponse - 375, // 375: determined.api.v1.Determined.NotifyContainerRunning:output_type -> determined.api.v1.NotifyContainerRunningResponse - 376, // 376: determined.api.v1.Determined.GetCurrentTrialSearcherOperation:output_type -> determined.api.v1.GetCurrentTrialSearcherOperationResponse - 377, // 377: determined.api.v1.Determined.CompleteTrialSearcherValidation:output_type -> determined.api.v1.CompleteTrialSearcherValidationResponse - 378, // 378: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:output_type -> determined.api.v1.ReportTrialSearcherEarlyExitResponse - 379, // 379: determined.api.v1.Determined.ReportTrialProgress:output_type -> determined.api.v1.ReportTrialProgressResponse - 380, // 380: determined.api.v1.Determined.PostTrialRunnerMetadata:output_type -> determined.api.v1.PostTrialRunnerMetadataResponse - 381, // 381: determined.api.v1.Determined.ReportTrialMetrics:output_type -> determined.api.v1.ReportTrialMetricsResponse - 382, // 382: determined.api.v1.Determined.ReportTrialTrainingMetrics:output_type -> determined.api.v1.ReportTrialTrainingMetricsResponse - 383, // 383: determined.api.v1.Determined.ReportTrialValidationMetrics:output_type -> determined.api.v1.ReportTrialValidationMetricsResponse - 384, // 384: determined.api.v1.Determined.ReportCheckpoint:output_type -> determined.api.v1.ReportCheckpointResponse - 385, // 385: determined.api.v1.Determined.GetJobs:output_type -> determined.api.v1.GetJobsResponse - 386, // 386: determined.api.v1.Determined.GetJobsV2:output_type -> determined.api.v1.GetJobsV2Response - 387, // 387: determined.api.v1.Determined.GetJobQueueStats:output_type -> determined.api.v1.GetJobQueueStatsResponse - 388, // 388: determined.api.v1.Determined.UpdateJobQueue:output_type -> determined.api.v1.UpdateJobQueueResponse - 389, // 389: determined.api.v1.Determined.GetTemplates:output_type -> determined.api.v1.GetTemplatesResponse - 390, // 390: determined.api.v1.Determined.GetTemplate:output_type -> determined.api.v1.GetTemplateResponse - 391, // 391: determined.api.v1.Determined.PutTemplate:output_type -> determined.api.v1.PutTemplateResponse - 392, // 392: determined.api.v1.Determined.PostTemplate:output_type -> determined.api.v1.PostTemplateResponse - 393, // 393: determined.api.v1.Determined.PatchTemplateConfig:output_type -> determined.api.v1.PatchTemplateConfigResponse - 394, // 394: determined.api.v1.Determined.PatchTemplateName:output_type -> determined.api.v1.PatchTemplateNameResponse - 395, // 395: determined.api.v1.Determined.DeleteTemplate:output_type -> determined.api.v1.DeleteTemplateResponse - 396, // 396: determined.api.v1.Determined.GetNotebooks:output_type -> determined.api.v1.GetNotebooksResponse - 397, // 397: determined.api.v1.Determined.GetNotebook:output_type -> determined.api.v1.GetNotebookResponse - 398, // 398: determined.api.v1.Determined.IdleNotebook:output_type -> determined.api.v1.IdleNotebookResponse - 399, // 399: determined.api.v1.Determined.KillNotebook:output_type -> determined.api.v1.KillNotebookResponse - 400, // 400: determined.api.v1.Determined.SetNotebookPriority:output_type -> determined.api.v1.SetNotebookPriorityResponse - 401, // 401: determined.api.v1.Determined.LaunchNotebook:output_type -> determined.api.v1.LaunchNotebookResponse - 402, // 402: determined.api.v1.Determined.GetShells:output_type -> determined.api.v1.GetShellsResponse - 403, // 403: determined.api.v1.Determined.GetShell:output_type -> determined.api.v1.GetShellResponse - 404, // 404: determined.api.v1.Determined.KillShell:output_type -> determined.api.v1.KillShellResponse - 405, // 405: determined.api.v1.Determined.SetShellPriority:output_type -> determined.api.v1.SetShellPriorityResponse - 406, // 406: determined.api.v1.Determined.LaunchShell:output_type -> determined.api.v1.LaunchShellResponse - 407, // 407: determined.api.v1.Determined.GetCommands:output_type -> determined.api.v1.GetCommandsResponse - 408, // 408: determined.api.v1.Determined.GetCommand:output_type -> determined.api.v1.GetCommandResponse - 409, // 409: determined.api.v1.Determined.KillCommand:output_type -> determined.api.v1.KillCommandResponse - 410, // 410: determined.api.v1.Determined.SetCommandPriority:output_type -> determined.api.v1.SetCommandPriorityResponse - 411, // 411: determined.api.v1.Determined.LaunchCommand:output_type -> determined.api.v1.LaunchCommandResponse - 412, // 412: determined.api.v1.Determined.GetTensorboards:output_type -> determined.api.v1.GetTensorboardsResponse - 413, // 413: determined.api.v1.Determined.GetTensorboard:output_type -> determined.api.v1.GetTensorboardResponse - 414, // 414: determined.api.v1.Determined.KillTensorboard:output_type -> determined.api.v1.KillTensorboardResponse - 415, // 415: determined.api.v1.Determined.SetTensorboardPriority:output_type -> determined.api.v1.SetTensorboardPriorityResponse - 416, // 416: determined.api.v1.Determined.LaunchTensorboard:output_type -> determined.api.v1.LaunchTensorboardResponse - 417, // 417: determined.api.v1.Determined.LaunchTensorboardSearches:output_type -> determined.api.v1.LaunchTensorboardSearchesResponse - 418, // 418: determined.api.v1.Determined.DeleteTensorboardFiles:output_type -> determined.api.v1.DeleteTensorboardFilesResponse - 419, // 419: determined.api.v1.Determined.GetActiveTasksCount:output_type -> determined.api.v1.GetActiveTasksCountResponse - 420, // 420: determined.api.v1.Determined.GetTask:output_type -> determined.api.v1.GetTaskResponse - 421, // 421: determined.api.v1.Determined.GetTasks:output_type -> determined.api.v1.GetTasksResponse - 422, // 422: determined.api.v1.Determined.GetModel:output_type -> determined.api.v1.GetModelResponse - 423, // 423: determined.api.v1.Determined.PostModel:output_type -> determined.api.v1.PostModelResponse - 424, // 424: determined.api.v1.Determined.PatchModel:output_type -> determined.api.v1.PatchModelResponse - 425, // 425: determined.api.v1.Determined.ArchiveModel:output_type -> determined.api.v1.ArchiveModelResponse - 426, // 426: determined.api.v1.Determined.UnarchiveModel:output_type -> determined.api.v1.UnarchiveModelResponse - 427, // 427: determined.api.v1.Determined.MoveModel:output_type -> determined.api.v1.MoveModelResponse - 428, // 428: determined.api.v1.Determined.DeleteModel:output_type -> determined.api.v1.DeleteModelResponse - 429, // 429: determined.api.v1.Determined.GetModels:output_type -> determined.api.v1.GetModelsResponse - 430, // 430: determined.api.v1.Determined.GetModelLabels:output_type -> determined.api.v1.GetModelLabelsResponse - 431, // 431: determined.api.v1.Determined.GetModelVersion:output_type -> determined.api.v1.GetModelVersionResponse - 432, // 432: determined.api.v1.Determined.GetModelVersions:output_type -> determined.api.v1.GetModelVersionsResponse - 433, // 433: determined.api.v1.Determined.PostModelVersion:output_type -> determined.api.v1.PostModelVersionResponse - 434, // 434: determined.api.v1.Determined.PatchModelVersion:output_type -> determined.api.v1.PatchModelVersionResponse - 435, // 435: determined.api.v1.Determined.DeleteModelVersion:output_type -> determined.api.v1.DeleteModelVersionResponse - 436, // 436: determined.api.v1.Determined.GetTrialMetricsByModelVersion:output_type -> determined.api.v1.GetTrialMetricsByModelVersionResponse - 437, // 437: determined.api.v1.Determined.GetCheckpoint:output_type -> determined.api.v1.GetCheckpointResponse - 438, // 438: determined.api.v1.Determined.PostCheckpointMetadata:output_type -> determined.api.v1.PostCheckpointMetadataResponse - 439, // 439: determined.api.v1.Determined.CheckpointsRemoveFiles:output_type -> determined.api.v1.CheckpointsRemoveFilesResponse - 440, // 440: determined.api.v1.Determined.PatchCheckpoints:output_type -> determined.api.v1.PatchCheckpointsResponse - 441, // 441: determined.api.v1.Determined.DeleteCheckpoints:output_type -> determined.api.v1.DeleteCheckpointsResponse - 442, // 442: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:output_type -> determined.api.v1.GetTrialMetricsByCheckpointResponse - 443, // 443: determined.api.v1.Determined.ExpMetricNames:output_type -> determined.api.v1.ExpMetricNamesResponse - 444, // 444: determined.api.v1.Determined.MetricBatches:output_type -> determined.api.v1.MetricBatchesResponse - 445, // 445: determined.api.v1.Determined.TrialsSnapshot:output_type -> determined.api.v1.TrialsSnapshotResponse - 446, // 446: determined.api.v1.Determined.TrialsSample:output_type -> determined.api.v1.TrialsSampleResponse - 447, // 447: determined.api.v1.Determined.GetResourcePools:output_type -> determined.api.v1.GetResourcePoolsResponse - 448, // 448: determined.api.v1.Determined.GetKubernetesResourceManagers:output_type -> determined.api.v1.GetKubernetesResourceManagersResponse - 449, // 449: determined.api.v1.Determined.ResourceAllocationRaw:output_type -> determined.api.v1.ResourceAllocationRawResponse - 450, // 450: determined.api.v1.Determined.ResourceAllocationAggregated:output_type -> determined.api.v1.ResourceAllocationAggregatedResponse - 451, // 451: determined.api.v1.Determined.GetWorkspace:output_type -> determined.api.v1.GetWorkspaceResponse - 452, // 452: determined.api.v1.Determined.GetWorkspaceProjects:output_type -> determined.api.v1.GetWorkspaceProjectsResponse - 453, // 453: determined.api.v1.Determined.GetWorkspaces:output_type -> determined.api.v1.GetWorkspacesResponse - 454, // 454: determined.api.v1.Determined.PostWorkspace:output_type -> determined.api.v1.PostWorkspaceResponse - 455, // 455: determined.api.v1.Determined.PatchWorkspace:output_type -> determined.api.v1.PatchWorkspaceResponse - 456, // 456: determined.api.v1.Determined.DeleteWorkspace:output_type -> determined.api.v1.DeleteWorkspaceResponse - 457, // 457: determined.api.v1.Determined.ArchiveWorkspace:output_type -> determined.api.v1.ArchiveWorkspaceResponse - 458, // 458: determined.api.v1.Determined.UnarchiveWorkspace:output_type -> determined.api.v1.UnarchiveWorkspaceResponse - 459, // 459: determined.api.v1.Determined.PinWorkspace:output_type -> determined.api.v1.PinWorkspaceResponse - 460, // 460: determined.api.v1.Determined.UnpinWorkspace:output_type -> determined.api.v1.UnpinWorkspaceResponse - 461, // 461: determined.api.v1.Determined.SetWorkspaceNamespaceBindings:output_type -> determined.api.v1.SetWorkspaceNamespaceBindingsResponse - 462, // 462: determined.api.v1.Determined.SetResourceQuotas:output_type -> determined.api.v1.SetResourceQuotasResponse - 463, // 463: determined.api.v1.Determined.ListWorkspaceNamespaceBindings:output_type -> determined.api.v1.ListWorkspaceNamespaceBindingsResponse - 464, // 464: determined.api.v1.Determined.GetWorkspacesWithDefaultNamespaceBindings:output_type -> determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsResponse - 465, // 465: determined.api.v1.Determined.BulkAutoCreateWorkspaceNamespaceBindings:output_type -> determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsResponse - 466, // 466: determined.api.v1.Determined.DeleteWorkspaceNamespaceBindings:output_type -> determined.api.v1.DeleteWorkspaceNamespaceBindingsResponse - 467, // 467: determined.api.v1.Determined.GetKubernetesResourceQuotas:output_type -> determined.api.v1.GetKubernetesResourceQuotasResponse - 468, // 468: determined.api.v1.Determined.GetProject:output_type -> determined.api.v1.GetProjectResponse - 469, // 469: determined.api.v1.Determined.GetProjectByKey:output_type -> determined.api.v1.GetProjectByKeyResponse - 470, // 470: determined.api.v1.Determined.GetProjectColumns:output_type -> determined.api.v1.GetProjectColumnsResponse - 471, // 471: determined.api.v1.Determined.GetProjectNumericMetricsRange:output_type -> determined.api.v1.GetProjectNumericMetricsRangeResponse - 472, // 472: determined.api.v1.Determined.PostProject:output_type -> determined.api.v1.PostProjectResponse - 473, // 473: determined.api.v1.Determined.AddProjectNote:output_type -> determined.api.v1.AddProjectNoteResponse - 474, // 474: determined.api.v1.Determined.PutProjectNotes:output_type -> determined.api.v1.PutProjectNotesResponse - 475, // 475: determined.api.v1.Determined.PatchProject:output_type -> determined.api.v1.PatchProjectResponse - 476, // 476: determined.api.v1.Determined.DeleteProject:output_type -> determined.api.v1.DeleteProjectResponse - 477, // 477: determined.api.v1.Determined.ArchiveProject:output_type -> determined.api.v1.ArchiveProjectResponse - 478, // 478: determined.api.v1.Determined.UnarchiveProject:output_type -> determined.api.v1.UnarchiveProjectResponse - 479, // 479: determined.api.v1.Determined.MoveProject:output_type -> determined.api.v1.MoveProjectResponse - 480, // 480: determined.api.v1.Determined.MoveExperiment:output_type -> determined.api.v1.MoveExperimentResponse - 481, // 481: determined.api.v1.Determined.MoveExperiments:output_type -> determined.api.v1.MoveExperimentsResponse - 482, // 482: determined.api.v1.Determined.GetWebhooks:output_type -> determined.api.v1.GetWebhooksResponse - 483, // 483: determined.api.v1.Determined.PatchWebhook:output_type -> determined.api.v1.PatchWebhookResponse - 484, // 484: determined.api.v1.Determined.PostWebhook:output_type -> determined.api.v1.PostWebhookResponse - 485, // 485: determined.api.v1.Determined.DeleteWebhook:output_type -> determined.api.v1.DeleteWebhookResponse - 486, // 486: determined.api.v1.Determined.TestWebhook:output_type -> determined.api.v1.TestWebhookResponse - 487, // 487: determined.api.v1.Determined.PostWebhookEventData:output_type -> determined.api.v1.PostWebhookEventDataResponse - 488, // 488: determined.api.v1.Determined.GetGroup:output_type -> determined.api.v1.GetGroupResponse - 489, // 489: determined.api.v1.Determined.GetGroups:output_type -> determined.api.v1.GetGroupsResponse - 490, // 490: determined.api.v1.Determined.CreateGroup:output_type -> determined.api.v1.CreateGroupResponse - 491, // 491: determined.api.v1.Determined.UpdateGroup:output_type -> determined.api.v1.UpdateGroupResponse - 492, // 492: determined.api.v1.Determined.DeleteGroup:output_type -> determined.api.v1.DeleteGroupResponse - 493, // 493: determined.api.v1.Determined.GetPermissionsSummary:output_type -> determined.api.v1.GetPermissionsSummaryResponse - 494, // 494: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:output_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse - 495, // 495: determined.api.v1.Determined.GetRolesByID:output_type -> determined.api.v1.GetRolesByIDResponse - 496, // 496: determined.api.v1.Determined.GetRolesAssignedToUser:output_type -> determined.api.v1.GetRolesAssignedToUserResponse - 497, // 497: determined.api.v1.Determined.GetRolesAssignedToGroup:output_type -> determined.api.v1.GetRolesAssignedToGroupResponse - 498, // 498: determined.api.v1.Determined.SearchRolesAssignableToScope:output_type -> determined.api.v1.SearchRolesAssignableToScopeResponse - 499, // 499: determined.api.v1.Determined.ListRoles:output_type -> determined.api.v1.ListRolesResponse - 500, // 500: determined.api.v1.Determined.AssignRoles:output_type -> determined.api.v1.AssignRolesResponse - 501, // 501: determined.api.v1.Determined.RemoveAssignments:output_type -> determined.api.v1.RemoveAssignmentsResponse - 502, // 502: determined.api.v1.Determined.PostUserActivity:output_type -> determined.api.v1.PostUserActivityResponse - 503, // 503: determined.api.v1.Determined.GetProjectsByUserActivity:output_type -> determined.api.v1.GetProjectsByUserActivityResponse - 504, // 504: determined.api.v1.Determined.SearchExperiments:output_type -> determined.api.v1.SearchExperimentsResponse - 505, // 505: determined.api.v1.Determined.BindRPToWorkspace:output_type -> determined.api.v1.BindRPToWorkspaceResponse - 506, // 506: determined.api.v1.Determined.UnbindRPFromWorkspace:output_type -> determined.api.v1.UnbindRPFromWorkspaceResponse - 507, // 507: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:output_type -> determined.api.v1.OverwriteRPWorkspaceBindingsResponse - 508, // 508: determined.api.v1.Determined.ListRPsBoundToWorkspace:output_type -> determined.api.v1.ListRPsBoundToWorkspaceResponse - 509, // 509: determined.api.v1.Determined.ListWorkspacesBoundToRP:output_type -> determined.api.v1.ListWorkspacesBoundToRPResponse - 510, // 510: determined.api.v1.Determined.GetGenericTaskConfig:output_type -> determined.api.v1.GetGenericTaskConfigResponse - 511, // 511: determined.api.v1.Determined.KillGenericTask:output_type -> determined.api.v1.KillGenericTaskResponse - 512, // 512: determined.api.v1.Determined.PauseGenericTask:output_type -> determined.api.v1.PauseGenericTaskResponse - 513, // 513: determined.api.v1.Determined.UnpauseGenericTask:output_type -> determined.api.v1.UnpauseGenericTaskResponse - 514, // 514: determined.api.v1.Determined.SearchRuns:output_type -> determined.api.v1.SearchRunsResponse - 515, // 515: determined.api.v1.Determined.MoveRuns:output_type -> determined.api.v1.MoveRunsResponse - 516, // 516: determined.api.v1.Determined.KillRuns:output_type -> determined.api.v1.KillRunsResponse - 517, // 517: determined.api.v1.Determined.DeleteRuns:output_type -> determined.api.v1.DeleteRunsResponse - 518, // 518: determined.api.v1.Determined.ArchiveRuns:output_type -> determined.api.v1.ArchiveRunsResponse - 519, // 519: determined.api.v1.Determined.UnarchiveRuns:output_type -> determined.api.v1.UnarchiveRunsResponse - 520, // 520: determined.api.v1.Determined.PauseRuns:output_type -> determined.api.v1.PauseRunsResponse - 521, // 521: determined.api.v1.Determined.ResumeRuns:output_type -> determined.api.v1.ResumeRunsResponse - 522, // 522: determined.api.v1.Determined.GetRunMetadata:output_type -> determined.api.v1.GetRunMetadataResponse - 523, // 523: determined.api.v1.Determined.PostRunMetadata:output_type -> determined.api.v1.PostRunMetadataResponse - 524, // 524: determined.api.v1.Determined.GetMetadataValues:output_type -> determined.api.v1.GetMetadataValuesResponse - 525, // 525: determined.api.v1.Determined.PutWorkspaceConfigPolicies:output_type -> determined.api.v1.PutWorkspaceConfigPoliciesResponse - 526, // 526: determined.api.v1.Determined.PutGlobalConfigPolicies:output_type -> determined.api.v1.PutGlobalConfigPoliciesResponse - 527, // 527: determined.api.v1.Determined.GetWorkspaceConfigPolicies:output_type -> determined.api.v1.GetWorkspaceConfigPoliciesResponse - 528, // 528: determined.api.v1.Determined.GetGlobalConfigPolicies:output_type -> determined.api.v1.GetGlobalConfigPoliciesResponse - 529, // 529: determined.api.v1.Determined.DeleteWorkspaceConfigPolicies:output_type -> determined.api.v1.DeleteWorkspaceConfigPoliciesResponse - 530, // 530: determined.api.v1.Determined.DeleteGlobalConfigPolicies:output_type -> determined.api.v1.DeleteGlobalConfigPoliciesResponse - 531, // 531: determined.api.v1.Determined.MoveSearches:output_type -> determined.api.v1.MoveSearchesResponse - 532, // 532: determined.api.v1.Determined.CancelSearches:output_type -> determined.api.v1.CancelSearchesResponse - 533, // 533: determined.api.v1.Determined.KillSearches:output_type -> determined.api.v1.KillSearchesResponse - 534, // 534: determined.api.v1.Determined.DeleteSearches:output_type -> determined.api.v1.DeleteSearchesResponse - 535, // 535: determined.api.v1.Determined.ArchiveSearches:output_type -> determined.api.v1.ArchiveSearchesResponse - 536, // 536: determined.api.v1.Determined.UnarchiveSearches:output_type -> determined.api.v1.UnarchiveSearchesResponse - 537, // 537: determined.api.v1.Determined.PauseSearches:output_type -> determined.api.v1.PauseSearchesResponse - 538, // 538: determined.api.v1.Determined.ResumeSearches:output_type -> determined.api.v1.ResumeSearchesResponse - 539, // 539: determined.api.v1.Determined.PostAccessToken:output_type -> determined.api.v1.PostAccessTokenResponse - 540, // 540: determined.api.v1.Determined.GetAccessTokens:output_type -> determined.api.v1.GetAccessTokensResponse - 541, // 541: determined.api.v1.Determined.PatchAccessToken:output_type -> determined.api.v1.PatchAccessTokenResponse - 271, // [271:542] is the sub-list for method output_type - 0, // [0:271] is the sub-list for method input_type + 105, // 105: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:input_type -> determined.api.v1.ReportTrialSearcherEarlyExitRequest + 106, // 106: determined.api.v1.Determined.ReportTrialProgress:input_type -> determined.api.v1.ReportTrialProgressRequest + 107, // 107: determined.api.v1.Determined.PostTrialRunnerMetadata:input_type -> determined.api.v1.PostTrialRunnerMetadataRequest + 108, // 108: determined.api.v1.Determined.ReportTrialMetrics:input_type -> determined.api.v1.ReportTrialMetricsRequest + 109, // 109: determined.api.v1.Determined.ReportTrialTrainingMetrics:input_type -> determined.api.v1.ReportTrialTrainingMetricsRequest + 110, // 110: determined.api.v1.Determined.ReportTrialValidationMetrics:input_type -> determined.api.v1.ReportTrialValidationMetricsRequest + 111, // 111: determined.api.v1.Determined.ReportCheckpoint:input_type -> determined.api.v1.ReportCheckpointRequest + 112, // 112: determined.api.v1.Determined.GetJobs:input_type -> determined.api.v1.GetJobsRequest + 113, // 113: determined.api.v1.Determined.GetJobsV2:input_type -> determined.api.v1.GetJobsV2Request + 114, // 114: determined.api.v1.Determined.GetJobQueueStats:input_type -> determined.api.v1.GetJobQueueStatsRequest + 115, // 115: determined.api.v1.Determined.UpdateJobQueue:input_type -> determined.api.v1.UpdateJobQueueRequest + 116, // 116: determined.api.v1.Determined.GetTemplates:input_type -> determined.api.v1.GetTemplatesRequest + 117, // 117: determined.api.v1.Determined.GetTemplate:input_type -> determined.api.v1.GetTemplateRequest + 118, // 118: determined.api.v1.Determined.PutTemplate:input_type -> determined.api.v1.PutTemplateRequest + 119, // 119: determined.api.v1.Determined.PostTemplate:input_type -> determined.api.v1.PostTemplateRequest + 120, // 120: determined.api.v1.Determined.PatchTemplateConfig:input_type -> determined.api.v1.PatchTemplateConfigRequest + 121, // 121: determined.api.v1.Determined.PatchTemplateName:input_type -> determined.api.v1.PatchTemplateNameRequest + 122, // 122: determined.api.v1.Determined.DeleteTemplate:input_type -> determined.api.v1.DeleteTemplateRequest + 123, // 123: determined.api.v1.Determined.GetNotebooks:input_type -> determined.api.v1.GetNotebooksRequest + 124, // 124: determined.api.v1.Determined.GetNotebook:input_type -> determined.api.v1.GetNotebookRequest + 125, // 125: determined.api.v1.Determined.IdleNotebook:input_type -> determined.api.v1.IdleNotebookRequest + 126, // 126: determined.api.v1.Determined.KillNotebook:input_type -> determined.api.v1.KillNotebookRequest + 127, // 127: determined.api.v1.Determined.SetNotebookPriority:input_type -> determined.api.v1.SetNotebookPriorityRequest + 128, // 128: determined.api.v1.Determined.LaunchNotebook:input_type -> determined.api.v1.LaunchNotebookRequest + 129, // 129: determined.api.v1.Determined.GetShells:input_type -> determined.api.v1.GetShellsRequest + 130, // 130: determined.api.v1.Determined.GetShell:input_type -> determined.api.v1.GetShellRequest + 131, // 131: determined.api.v1.Determined.KillShell:input_type -> determined.api.v1.KillShellRequest + 132, // 132: determined.api.v1.Determined.SetShellPriority:input_type -> determined.api.v1.SetShellPriorityRequest + 133, // 133: determined.api.v1.Determined.LaunchShell:input_type -> determined.api.v1.LaunchShellRequest + 134, // 134: determined.api.v1.Determined.GetCommands:input_type -> determined.api.v1.GetCommandsRequest + 135, // 135: determined.api.v1.Determined.GetCommand:input_type -> determined.api.v1.GetCommandRequest + 136, // 136: determined.api.v1.Determined.KillCommand:input_type -> determined.api.v1.KillCommandRequest + 137, // 137: determined.api.v1.Determined.SetCommandPriority:input_type -> determined.api.v1.SetCommandPriorityRequest + 138, // 138: determined.api.v1.Determined.LaunchCommand:input_type -> determined.api.v1.LaunchCommandRequest + 139, // 139: determined.api.v1.Determined.GetTensorboards:input_type -> determined.api.v1.GetTensorboardsRequest + 140, // 140: determined.api.v1.Determined.GetTensorboard:input_type -> determined.api.v1.GetTensorboardRequest + 141, // 141: determined.api.v1.Determined.KillTensorboard:input_type -> determined.api.v1.KillTensorboardRequest + 142, // 142: determined.api.v1.Determined.SetTensorboardPriority:input_type -> determined.api.v1.SetTensorboardPriorityRequest + 143, // 143: determined.api.v1.Determined.LaunchTensorboard:input_type -> determined.api.v1.LaunchTensorboardRequest + 144, // 144: determined.api.v1.Determined.LaunchTensorboardSearches:input_type -> determined.api.v1.LaunchTensorboardSearchesRequest + 145, // 145: determined.api.v1.Determined.DeleteTensorboardFiles:input_type -> determined.api.v1.DeleteTensorboardFilesRequest + 146, // 146: determined.api.v1.Determined.GetActiveTasksCount:input_type -> determined.api.v1.GetActiveTasksCountRequest + 147, // 147: determined.api.v1.Determined.GetTask:input_type -> determined.api.v1.GetTaskRequest + 148, // 148: determined.api.v1.Determined.GetTasks:input_type -> determined.api.v1.GetTasksRequest + 149, // 149: determined.api.v1.Determined.GetModel:input_type -> determined.api.v1.GetModelRequest + 150, // 150: determined.api.v1.Determined.PostModel:input_type -> determined.api.v1.PostModelRequest + 151, // 151: determined.api.v1.Determined.PatchModel:input_type -> determined.api.v1.PatchModelRequest + 152, // 152: determined.api.v1.Determined.ArchiveModel:input_type -> determined.api.v1.ArchiveModelRequest + 153, // 153: determined.api.v1.Determined.UnarchiveModel:input_type -> determined.api.v1.UnarchiveModelRequest + 154, // 154: determined.api.v1.Determined.MoveModel:input_type -> determined.api.v1.MoveModelRequest + 155, // 155: determined.api.v1.Determined.DeleteModel:input_type -> determined.api.v1.DeleteModelRequest + 156, // 156: determined.api.v1.Determined.GetModels:input_type -> determined.api.v1.GetModelsRequest + 157, // 157: determined.api.v1.Determined.GetModelLabels:input_type -> determined.api.v1.GetModelLabelsRequest + 158, // 158: determined.api.v1.Determined.GetModelVersion:input_type -> determined.api.v1.GetModelVersionRequest + 159, // 159: determined.api.v1.Determined.GetModelVersions:input_type -> determined.api.v1.GetModelVersionsRequest + 160, // 160: determined.api.v1.Determined.PostModelVersion:input_type -> determined.api.v1.PostModelVersionRequest + 161, // 161: determined.api.v1.Determined.PatchModelVersion:input_type -> determined.api.v1.PatchModelVersionRequest + 162, // 162: determined.api.v1.Determined.DeleteModelVersion:input_type -> determined.api.v1.DeleteModelVersionRequest + 163, // 163: determined.api.v1.Determined.GetTrialMetricsByModelVersion:input_type -> determined.api.v1.GetTrialMetricsByModelVersionRequest + 164, // 164: determined.api.v1.Determined.GetCheckpoint:input_type -> determined.api.v1.GetCheckpointRequest + 165, // 165: determined.api.v1.Determined.PostCheckpointMetadata:input_type -> determined.api.v1.PostCheckpointMetadataRequest + 166, // 166: determined.api.v1.Determined.CheckpointsRemoveFiles:input_type -> determined.api.v1.CheckpointsRemoveFilesRequest + 167, // 167: determined.api.v1.Determined.PatchCheckpoints:input_type -> determined.api.v1.PatchCheckpointsRequest + 168, // 168: determined.api.v1.Determined.DeleteCheckpoints:input_type -> determined.api.v1.DeleteCheckpointsRequest + 169, // 169: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:input_type -> determined.api.v1.GetTrialMetricsByCheckpointRequest + 170, // 170: determined.api.v1.Determined.ExpMetricNames:input_type -> determined.api.v1.ExpMetricNamesRequest + 171, // 171: determined.api.v1.Determined.MetricBatches:input_type -> determined.api.v1.MetricBatchesRequest + 172, // 172: determined.api.v1.Determined.TrialsSnapshot:input_type -> determined.api.v1.TrialsSnapshotRequest + 173, // 173: determined.api.v1.Determined.TrialsSample:input_type -> determined.api.v1.TrialsSampleRequest + 174, // 174: determined.api.v1.Determined.GetResourcePools:input_type -> determined.api.v1.GetResourcePoolsRequest + 175, // 175: determined.api.v1.Determined.GetKubernetesResourceManagers:input_type -> determined.api.v1.GetKubernetesResourceManagersRequest + 176, // 176: determined.api.v1.Determined.ResourceAllocationRaw:input_type -> determined.api.v1.ResourceAllocationRawRequest + 177, // 177: determined.api.v1.Determined.ResourceAllocationAggregated:input_type -> determined.api.v1.ResourceAllocationAggregatedRequest + 178, // 178: determined.api.v1.Determined.GetWorkspace:input_type -> determined.api.v1.GetWorkspaceRequest + 179, // 179: determined.api.v1.Determined.GetWorkspaceProjects:input_type -> determined.api.v1.GetWorkspaceProjectsRequest + 180, // 180: determined.api.v1.Determined.GetWorkspaces:input_type -> determined.api.v1.GetWorkspacesRequest + 181, // 181: determined.api.v1.Determined.PostWorkspace:input_type -> determined.api.v1.PostWorkspaceRequest + 182, // 182: determined.api.v1.Determined.PatchWorkspace:input_type -> determined.api.v1.PatchWorkspaceRequest + 183, // 183: determined.api.v1.Determined.DeleteWorkspace:input_type -> determined.api.v1.DeleteWorkspaceRequest + 184, // 184: determined.api.v1.Determined.ArchiveWorkspace:input_type -> determined.api.v1.ArchiveWorkspaceRequest + 185, // 185: determined.api.v1.Determined.UnarchiveWorkspace:input_type -> determined.api.v1.UnarchiveWorkspaceRequest + 186, // 186: determined.api.v1.Determined.PinWorkspace:input_type -> determined.api.v1.PinWorkspaceRequest + 187, // 187: determined.api.v1.Determined.UnpinWorkspace:input_type -> determined.api.v1.UnpinWorkspaceRequest + 188, // 188: determined.api.v1.Determined.SetWorkspaceNamespaceBindings:input_type -> determined.api.v1.SetWorkspaceNamespaceBindingsRequest + 189, // 189: determined.api.v1.Determined.SetResourceQuotas:input_type -> determined.api.v1.SetResourceQuotasRequest + 190, // 190: determined.api.v1.Determined.ListWorkspaceNamespaceBindings:input_type -> determined.api.v1.ListWorkspaceNamespaceBindingsRequest + 191, // 191: determined.api.v1.Determined.GetWorkspacesWithDefaultNamespaceBindings:input_type -> determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsRequest + 192, // 192: determined.api.v1.Determined.BulkAutoCreateWorkspaceNamespaceBindings:input_type -> determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsRequest + 193, // 193: determined.api.v1.Determined.DeleteWorkspaceNamespaceBindings:input_type -> determined.api.v1.DeleteWorkspaceNamespaceBindingsRequest + 194, // 194: determined.api.v1.Determined.GetKubernetesResourceQuotas:input_type -> determined.api.v1.GetKubernetesResourceQuotasRequest + 195, // 195: determined.api.v1.Determined.GetProject:input_type -> determined.api.v1.GetProjectRequest + 196, // 196: determined.api.v1.Determined.GetProjectByKey:input_type -> determined.api.v1.GetProjectByKeyRequest + 197, // 197: determined.api.v1.Determined.GetProjectColumns:input_type -> determined.api.v1.GetProjectColumnsRequest + 198, // 198: determined.api.v1.Determined.GetProjectNumericMetricsRange:input_type -> determined.api.v1.GetProjectNumericMetricsRangeRequest + 199, // 199: determined.api.v1.Determined.PostProject:input_type -> determined.api.v1.PostProjectRequest + 200, // 200: determined.api.v1.Determined.AddProjectNote:input_type -> determined.api.v1.AddProjectNoteRequest + 201, // 201: determined.api.v1.Determined.PutProjectNotes:input_type -> determined.api.v1.PutProjectNotesRequest + 202, // 202: determined.api.v1.Determined.PatchProject:input_type -> determined.api.v1.PatchProjectRequest + 203, // 203: determined.api.v1.Determined.DeleteProject:input_type -> determined.api.v1.DeleteProjectRequest + 204, // 204: determined.api.v1.Determined.ArchiveProject:input_type -> determined.api.v1.ArchiveProjectRequest + 205, // 205: determined.api.v1.Determined.UnarchiveProject:input_type -> determined.api.v1.UnarchiveProjectRequest + 206, // 206: determined.api.v1.Determined.MoveProject:input_type -> determined.api.v1.MoveProjectRequest + 207, // 207: determined.api.v1.Determined.MoveExperiment:input_type -> determined.api.v1.MoveExperimentRequest + 208, // 208: determined.api.v1.Determined.MoveExperiments:input_type -> determined.api.v1.MoveExperimentsRequest + 209, // 209: determined.api.v1.Determined.GetWebhooks:input_type -> determined.api.v1.GetWebhooksRequest + 210, // 210: determined.api.v1.Determined.PatchWebhook:input_type -> determined.api.v1.PatchWebhookRequest + 211, // 211: determined.api.v1.Determined.PostWebhook:input_type -> determined.api.v1.PostWebhookRequest + 212, // 212: determined.api.v1.Determined.DeleteWebhook:input_type -> determined.api.v1.DeleteWebhookRequest + 213, // 213: determined.api.v1.Determined.TestWebhook:input_type -> determined.api.v1.TestWebhookRequest + 214, // 214: determined.api.v1.Determined.PostWebhookEventData:input_type -> determined.api.v1.PostWebhookEventDataRequest + 215, // 215: determined.api.v1.Determined.GetGroup:input_type -> determined.api.v1.GetGroupRequest + 216, // 216: determined.api.v1.Determined.GetGroups:input_type -> determined.api.v1.GetGroupsRequest + 217, // 217: determined.api.v1.Determined.CreateGroup:input_type -> determined.api.v1.CreateGroupRequest + 218, // 218: determined.api.v1.Determined.UpdateGroup:input_type -> determined.api.v1.UpdateGroupRequest + 219, // 219: determined.api.v1.Determined.DeleteGroup:input_type -> determined.api.v1.DeleteGroupRequest + 220, // 220: determined.api.v1.Determined.GetPermissionsSummary:input_type -> determined.api.v1.GetPermissionsSummaryRequest + 221, // 221: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:input_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest + 222, // 222: determined.api.v1.Determined.GetRolesByID:input_type -> determined.api.v1.GetRolesByIDRequest + 223, // 223: determined.api.v1.Determined.GetRolesAssignedToUser:input_type -> determined.api.v1.GetRolesAssignedToUserRequest + 224, // 224: determined.api.v1.Determined.GetRolesAssignedToGroup:input_type -> determined.api.v1.GetRolesAssignedToGroupRequest + 225, // 225: determined.api.v1.Determined.SearchRolesAssignableToScope:input_type -> determined.api.v1.SearchRolesAssignableToScopeRequest + 226, // 226: determined.api.v1.Determined.ListRoles:input_type -> determined.api.v1.ListRolesRequest + 227, // 227: determined.api.v1.Determined.AssignRoles:input_type -> determined.api.v1.AssignRolesRequest + 228, // 228: determined.api.v1.Determined.RemoveAssignments:input_type -> determined.api.v1.RemoveAssignmentsRequest + 229, // 229: determined.api.v1.Determined.PostUserActivity:input_type -> determined.api.v1.PostUserActivityRequest + 230, // 230: determined.api.v1.Determined.GetProjectsByUserActivity:input_type -> determined.api.v1.GetProjectsByUserActivityRequest + 231, // 231: determined.api.v1.Determined.SearchExperiments:input_type -> determined.api.v1.SearchExperimentsRequest + 232, // 232: determined.api.v1.Determined.BindRPToWorkspace:input_type -> determined.api.v1.BindRPToWorkspaceRequest + 233, // 233: determined.api.v1.Determined.UnbindRPFromWorkspace:input_type -> determined.api.v1.UnbindRPFromWorkspaceRequest + 234, // 234: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:input_type -> determined.api.v1.OverwriteRPWorkspaceBindingsRequest + 235, // 235: determined.api.v1.Determined.ListRPsBoundToWorkspace:input_type -> determined.api.v1.ListRPsBoundToWorkspaceRequest + 236, // 236: determined.api.v1.Determined.ListWorkspacesBoundToRP:input_type -> determined.api.v1.ListWorkspacesBoundToRPRequest + 237, // 237: determined.api.v1.Determined.GetGenericTaskConfig:input_type -> determined.api.v1.GetGenericTaskConfigRequest + 238, // 238: determined.api.v1.Determined.KillGenericTask:input_type -> determined.api.v1.KillGenericTaskRequest + 239, // 239: determined.api.v1.Determined.PauseGenericTask:input_type -> determined.api.v1.PauseGenericTaskRequest + 240, // 240: determined.api.v1.Determined.UnpauseGenericTask:input_type -> determined.api.v1.UnpauseGenericTaskRequest + 241, // 241: determined.api.v1.Determined.SearchRuns:input_type -> determined.api.v1.SearchRunsRequest + 242, // 242: determined.api.v1.Determined.MoveRuns:input_type -> determined.api.v1.MoveRunsRequest + 243, // 243: determined.api.v1.Determined.KillRuns:input_type -> determined.api.v1.KillRunsRequest + 244, // 244: determined.api.v1.Determined.DeleteRuns:input_type -> determined.api.v1.DeleteRunsRequest + 245, // 245: determined.api.v1.Determined.ArchiveRuns:input_type -> determined.api.v1.ArchiveRunsRequest + 246, // 246: determined.api.v1.Determined.UnarchiveRuns:input_type -> determined.api.v1.UnarchiveRunsRequest + 247, // 247: determined.api.v1.Determined.PauseRuns:input_type -> determined.api.v1.PauseRunsRequest + 248, // 248: determined.api.v1.Determined.ResumeRuns:input_type -> determined.api.v1.ResumeRunsRequest + 249, // 249: determined.api.v1.Determined.GetRunMetadata:input_type -> determined.api.v1.GetRunMetadataRequest + 250, // 250: determined.api.v1.Determined.PostRunMetadata:input_type -> determined.api.v1.PostRunMetadataRequest + 251, // 251: determined.api.v1.Determined.GetMetadataValues:input_type -> determined.api.v1.GetMetadataValuesRequest + 252, // 252: determined.api.v1.Determined.PutWorkspaceConfigPolicies:input_type -> determined.api.v1.PutWorkspaceConfigPoliciesRequest + 253, // 253: determined.api.v1.Determined.PutGlobalConfigPolicies:input_type -> determined.api.v1.PutGlobalConfigPoliciesRequest + 254, // 254: determined.api.v1.Determined.GetWorkspaceConfigPolicies:input_type -> determined.api.v1.GetWorkspaceConfigPoliciesRequest + 255, // 255: determined.api.v1.Determined.GetGlobalConfigPolicies:input_type -> determined.api.v1.GetGlobalConfigPoliciesRequest + 256, // 256: determined.api.v1.Determined.DeleteWorkspaceConfigPolicies:input_type -> determined.api.v1.DeleteWorkspaceConfigPoliciesRequest + 257, // 257: determined.api.v1.Determined.DeleteGlobalConfigPolicies:input_type -> determined.api.v1.DeleteGlobalConfigPoliciesRequest + 258, // 258: determined.api.v1.Determined.MoveSearches:input_type -> determined.api.v1.MoveSearchesRequest + 259, // 259: determined.api.v1.Determined.CancelSearches:input_type -> determined.api.v1.CancelSearchesRequest + 260, // 260: determined.api.v1.Determined.KillSearches:input_type -> determined.api.v1.KillSearchesRequest + 261, // 261: determined.api.v1.Determined.DeleteSearches:input_type -> determined.api.v1.DeleteSearchesRequest + 262, // 262: determined.api.v1.Determined.ArchiveSearches:input_type -> determined.api.v1.ArchiveSearchesRequest + 263, // 263: determined.api.v1.Determined.UnarchiveSearches:input_type -> determined.api.v1.UnarchiveSearchesRequest + 264, // 264: determined.api.v1.Determined.PauseSearches:input_type -> determined.api.v1.PauseSearchesRequest + 265, // 265: determined.api.v1.Determined.ResumeSearches:input_type -> determined.api.v1.ResumeSearchesRequest + 266, // 266: determined.api.v1.Determined.PostAccessToken:input_type -> determined.api.v1.PostAccessTokenRequest + 267, // 267: determined.api.v1.Determined.GetAccessTokens:input_type -> determined.api.v1.GetAccessTokensRequest + 268, // 268: determined.api.v1.Determined.PatchAccessToken:input_type -> determined.api.v1.PatchAccessTokenRequest + 269, // 269: determined.api.v1.Determined.Login:output_type -> determined.api.v1.LoginResponse + 270, // 270: determined.api.v1.Determined.CurrentUser:output_type -> determined.api.v1.CurrentUserResponse + 271, // 271: determined.api.v1.Determined.Logout:output_type -> determined.api.v1.LogoutResponse + 272, // 272: determined.api.v1.Determined.GetUsers:output_type -> determined.api.v1.GetUsersResponse + 273, // 273: determined.api.v1.Determined.GetUserSetting:output_type -> determined.api.v1.GetUserSettingResponse + 274, // 274: determined.api.v1.Determined.ResetUserSetting:output_type -> determined.api.v1.ResetUserSettingResponse + 275, // 275: determined.api.v1.Determined.PostUserSetting:output_type -> determined.api.v1.PostUserSettingResponse + 276, // 276: determined.api.v1.Determined.GetUser:output_type -> determined.api.v1.GetUserResponse + 277, // 277: determined.api.v1.Determined.GetUserByUsername:output_type -> determined.api.v1.GetUserByUsernameResponse + 278, // 278: determined.api.v1.Determined.GetMe:output_type -> determined.api.v1.GetMeResponse + 279, // 279: determined.api.v1.Determined.PostUser:output_type -> determined.api.v1.PostUserResponse + 280, // 280: determined.api.v1.Determined.SetUserPassword:output_type -> determined.api.v1.SetUserPasswordResponse + 281, // 281: determined.api.v1.Determined.AssignMultipleGroups:output_type -> determined.api.v1.AssignMultipleGroupsResponse + 282, // 282: determined.api.v1.Determined.PatchUser:output_type -> determined.api.v1.PatchUserResponse + 283, // 283: determined.api.v1.Determined.PatchUsers:output_type -> determined.api.v1.PatchUsersResponse + 284, // 284: determined.api.v1.Determined.GetTelemetry:output_type -> determined.api.v1.GetTelemetryResponse + 285, // 285: determined.api.v1.Determined.GetMaster:output_type -> determined.api.v1.GetMasterResponse + 286, // 286: determined.api.v1.Determined.GetMasterConfig:output_type -> determined.api.v1.GetMasterConfigResponse + 287, // 287: determined.api.v1.Determined.PatchMasterConfig:output_type -> determined.api.v1.PatchMasterConfigResponse + 288, // 288: determined.api.v1.Determined.MasterLogs:output_type -> determined.api.v1.MasterLogsResponse + 289, // 289: determined.api.v1.Determined.GetClusterMessage:output_type -> determined.api.v1.GetClusterMessageResponse + 290, // 290: determined.api.v1.Determined.SetClusterMessage:output_type -> determined.api.v1.SetClusterMessageResponse + 291, // 291: determined.api.v1.Determined.DeleteClusterMessage:output_type -> determined.api.v1.DeleteClusterMessageResponse + 292, // 292: determined.api.v1.Determined.GetAgents:output_type -> determined.api.v1.GetAgentsResponse + 293, // 293: determined.api.v1.Determined.GetAgent:output_type -> determined.api.v1.GetAgentResponse + 294, // 294: determined.api.v1.Determined.GetSlots:output_type -> determined.api.v1.GetSlotsResponse + 295, // 295: determined.api.v1.Determined.GetSlot:output_type -> determined.api.v1.GetSlotResponse + 296, // 296: determined.api.v1.Determined.EnableAgent:output_type -> determined.api.v1.EnableAgentResponse + 297, // 297: determined.api.v1.Determined.DisableAgent:output_type -> determined.api.v1.DisableAgentResponse + 298, // 298: determined.api.v1.Determined.EnableSlot:output_type -> determined.api.v1.EnableSlotResponse + 299, // 299: determined.api.v1.Determined.DisableSlot:output_type -> determined.api.v1.DisableSlotResponse + 300, // 300: determined.api.v1.Determined.CreateGenericTask:output_type -> determined.api.v1.CreateGenericTaskResponse + 301, // 301: determined.api.v1.Determined.CreateExperiment:output_type -> determined.api.v1.CreateExperimentResponse + 302, // 302: determined.api.v1.Determined.PutExperiment:output_type -> determined.api.v1.PutExperimentResponse + 303, // 303: determined.api.v1.Determined.ContinueExperiment:output_type -> determined.api.v1.ContinueExperimentResponse + 304, // 304: determined.api.v1.Determined.GetExperiment:output_type -> determined.api.v1.GetExperimentResponse + 305, // 305: determined.api.v1.Determined.GetExperiments:output_type -> determined.api.v1.GetExperimentsResponse + 306, // 306: determined.api.v1.Determined.PutExperimentRetainLogs:output_type -> determined.api.v1.PutExperimentRetainLogsResponse + 307, // 307: determined.api.v1.Determined.PutExperimentsRetainLogs:output_type -> determined.api.v1.PutExperimentsRetainLogsResponse + 308, // 308: determined.api.v1.Determined.PutTrialRetainLogs:output_type -> determined.api.v1.PutTrialRetainLogsResponse + 309, // 309: determined.api.v1.Determined.GetModelDef:output_type -> determined.api.v1.GetModelDefResponse + 310, // 310: determined.api.v1.Determined.GetTaskContextDirectory:output_type -> determined.api.v1.GetTaskContextDirectoryResponse + 311, // 311: determined.api.v1.Determined.GetModelDefTree:output_type -> determined.api.v1.GetModelDefTreeResponse + 312, // 312: determined.api.v1.Determined.GetModelDefFile:output_type -> determined.api.v1.GetModelDefFileResponse + 313, // 313: determined.api.v1.Determined.GetExperimentLabels:output_type -> determined.api.v1.GetExperimentLabelsResponse + 314, // 314: determined.api.v1.Determined.GetExperimentValidationHistory:output_type -> determined.api.v1.GetExperimentValidationHistoryResponse + 315, // 315: determined.api.v1.Determined.ActivateExperiment:output_type -> determined.api.v1.ActivateExperimentResponse + 316, // 316: determined.api.v1.Determined.ActivateExperiments:output_type -> determined.api.v1.ActivateExperimentsResponse + 317, // 317: determined.api.v1.Determined.PauseExperiment:output_type -> determined.api.v1.PauseExperimentResponse + 318, // 318: determined.api.v1.Determined.PauseExperiments:output_type -> determined.api.v1.PauseExperimentsResponse + 319, // 319: determined.api.v1.Determined.CancelExperiment:output_type -> determined.api.v1.CancelExperimentResponse + 320, // 320: determined.api.v1.Determined.CancelExperiments:output_type -> determined.api.v1.CancelExperimentsResponse + 321, // 321: determined.api.v1.Determined.KillExperiment:output_type -> determined.api.v1.KillExperimentResponse + 322, // 322: determined.api.v1.Determined.KillExperiments:output_type -> determined.api.v1.KillExperimentsResponse + 323, // 323: determined.api.v1.Determined.ArchiveExperiment:output_type -> determined.api.v1.ArchiveExperimentResponse + 324, // 324: determined.api.v1.Determined.ArchiveExperiments:output_type -> determined.api.v1.ArchiveExperimentsResponse + 325, // 325: determined.api.v1.Determined.UnarchiveExperiment:output_type -> determined.api.v1.UnarchiveExperimentResponse + 326, // 326: determined.api.v1.Determined.UnarchiveExperiments:output_type -> determined.api.v1.UnarchiveExperimentsResponse + 327, // 327: determined.api.v1.Determined.PatchExperiment:output_type -> determined.api.v1.PatchExperimentResponse + 328, // 328: determined.api.v1.Determined.DeleteExperiments:output_type -> determined.api.v1.DeleteExperimentsResponse + 329, // 329: determined.api.v1.Determined.DeleteExperiment:output_type -> determined.api.v1.DeleteExperimentResponse + 330, // 330: determined.api.v1.Determined.GetBestSearcherValidationMetric:output_type -> determined.api.v1.GetBestSearcherValidationMetricResponse + 331, // 331: determined.api.v1.Determined.GetExperimentCheckpoints:output_type -> determined.api.v1.GetExperimentCheckpointsResponse + 332, // 332: determined.api.v1.Determined.PutExperimentLabel:output_type -> determined.api.v1.PutExperimentLabelResponse + 333, // 333: determined.api.v1.Determined.DeleteExperimentLabel:output_type -> determined.api.v1.DeleteExperimentLabelResponse + 334, // 334: determined.api.v1.Determined.PreviewHPSearch:output_type -> determined.api.v1.PreviewHPSearchResponse + 335, // 335: determined.api.v1.Determined.GetExperimentTrials:output_type -> determined.api.v1.GetExperimentTrialsResponse + 336, // 336: determined.api.v1.Determined.GetTrialRemainingLogRetentionDays:output_type -> determined.api.v1.GetTrialRemainingLogRetentionDaysResponse + 337, // 337: determined.api.v1.Determined.CompareTrials:output_type -> determined.api.v1.CompareTrialsResponse + 338, // 338: determined.api.v1.Determined.ReportTrialSourceInfo:output_type -> determined.api.v1.ReportTrialSourceInfoResponse + 339, // 339: determined.api.v1.Determined.CreateTrial:output_type -> determined.api.v1.CreateTrialResponse + 340, // 340: determined.api.v1.Determined.PutTrial:output_type -> determined.api.v1.PutTrialResponse + 341, // 341: determined.api.v1.Determined.PatchTrial:output_type -> determined.api.v1.PatchTrialResponse + 342, // 342: determined.api.v1.Determined.StartTrial:output_type -> determined.api.v1.StartTrialResponse + 343, // 343: determined.api.v1.Determined.RunPrepareForReporting:output_type -> determined.api.v1.RunPrepareForReportingResponse + 344, // 344: determined.api.v1.Determined.GetTrial:output_type -> determined.api.v1.GetTrialResponse + 345, // 345: determined.api.v1.Determined.GetTrialByExternalID:output_type -> determined.api.v1.GetTrialByExternalIDResponse + 346, // 346: determined.api.v1.Determined.GetTrialWorkloads:output_type -> determined.api.v1.GetTrialWorkloadsResponse + 347, // 347: determined.api.v1.Determined.TrialLogs:output_type -> determined.api.v1.TrialLogsResponse + 348, // 348: determined.api.v1.Determined.TrialLogsFields:output_type -> determined.api.v1.TrialLogsFieldsResponse + 349, // 349: determined.api.v1.Determined.AllocationReady:output_type -> determined.api.v1.AllocationReadyResponse + 350, // 350: determined.api.v1.Determined.GetAllocation:output_type -> determined.api.v1.GetAllocationResponse + 351, // 351: determined.api.v1.Determined.AllocationWaiting:output_type -> determined.api.v1.AllocationWaitingResponse + 352, // 352: determined.api.v1.Determined.PostTaskLogs:output_type -> determined.api.v1.PostTaskLogsResponse + 353, // 353: determined.api.v1.Determined.TaskLogs:output_type -> determined.api.v1.TaskLogsResponse + 354, // 354: determined.api.v1.Determined.TaskLogsFields:output_type -> determined.api.v1.TaskLogsFieldsResponse + 355, // 355: determined.api.v1.Determined.GetTrialProfilerMetrics:output_type -> determined.api.v1.GetTrialProfilerMetricsResponse + 356, // 356: determined.api.v1.Determined.GetTrialProfilerAvailableSeries:output_type -> determined.api.v1.GetTrialProfilerAvailableSeriesResponse + 357, // 357: determined.api.v1.Determined.PostTrialProfilerMetricsBatch:output_type -> determined.api.v1.PostTrialProfilerMetricsBatchResponse + 358, // 358: determined.api.v1.Determined.GetMetrics:output_type -> determined.api.v1.GetMetricsResponse + 359, // 359: determined.api.v1.Determined.GetTrainingMetrics:output_type -> determined.api.v1.GetTrainingMetricsResponse + 360, // 360: determined.api.v1.Determined.GetValidationMetrics:output_type -> determined.api.v1.GetValidationMetricsResponse + 361, // 361: determined.api.v1.Determined.KillTrial:output_type -> determined.api.v1.KillTrialResponse + 362, // 362: determined.api.v1.Determined.GetTrialCheckpoints:output_type -> determined.api.v1.GetTrialCheckpointsResponse + 363, // 363: determined.api.v1.Determined.CleanupLogs:output_type -> determined.api.v1.CleanupLogsResponse + 364, // 364: determined.api.v1.Determined.AllocationPreemptionSignal:output_type -> determined.api.v1.AllocationPreemptionSignalResponse + 365, // 365: determined.api.v1.Determined.AllocationPendingPreemptionSignal:output_type -> determined.api.v1.AllocationPendingPreemptionSignalResponse + 366, // 366: determined.api.v1.Determined.AckAllocationPreemptionSignal:output_type -> determined.api.v1.AckAllocationPreemptionSignalResponse + 367, // 367: determined.api.v1.Determined.MarkAllocationResourcesDaemon:output_type -> determined.api.v1.MarkAllocationResourcesDaemonResponse + 368, // 368: determined.api.v1.Determined.AllocationRendezvousInfo:output_type -> determined.api.v1.AllocationRendezvousInfoResponse + 369, // 369: determined.api.v1.Determined.PostAllocationProxyAddress:output_type -> determined.api.v1.PostAllocationProxyAddressResponse + 370, // 370: determined.api.v1.Determined.GetTaskAcceleratorData:output_type -> determined.api.v1.GetTaskAcceleratorDataResponse + 371, // 371: determined.api.v1.Determined.PostAllocationAcceleratorData:output_type -> determined.api.v1.PostAllocationAcceleratorDataResponse + 372, // 372: determined.api.v1.Determined.AllocationAllGather:output_type -> determined.api.v1.AllocationAllGatherResponse + 373, // 373: determined.api.v1.Determined.NotifyContainerRunning:output_type -> determined.api.v1.NotifyContainerRunningResponse + 374, // 374: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:output_type -> determined.api.v1.ReportTrialSearcherEarlyExitResponse + 375, // 375: determined.api.v1.Determined.ReportTrialProgress:output_type -> determined.api.v1.ReportTrialProgressResponse + 376, // 376: determined.api.v1.Determined.PostTrialRunnerMetadata:output_type -> determined.api.v1.PostTrialRunnerMetadataResponse + 377, // 377: determined.api.v1.Determined.ReportTrialMetrics:output_type -> determined.api.v1.ReportTrialMetricsResponse + 378, // 378: determined.api.v1.Determined.ReportTrialTrainingMetrics:output_type -> determined.api.v1.ReportTrialTrainingMetricsResponse + 379, // 379: determined.api.v1.Determined.ReportTrialValidationMetrics:output_type -> determined.api.v1.ReportTrialValidationMetricsResponse + 380, // 380: determined.api.v1.Determined.ReportCheckpoint:output_type -> determined.api.v1.ReportCheckpointResponse + 381, // 381: determined.api.v1.Determined.GetJobs:output_type -> determined.api.v1.GetJobsResponse + 382, // 382: determined.api.v1.Determined.GetJobsV2:output_type -> determined.api.v1.GetJobsV2Response + 383, // 383: determined.api.v1.Determined.GetJobQueueStats:output_type -> determined.api.v1.GetJobQueueStatsResponse + 384, // 384: determined.api.v1.Determined.UpdateJobQueue:output_type -> determined.api.v1.UpdateJobQueueResponse + 385, // 385: determined.api.v1.Determined.GetTemplates:output_type -> determined.api.v1.GetTemplatesResponse + 386, // 386: determined.api.v1.Determined.GetTemplate:output_type -> determined.api.v1.GetTemplateResponse + 387, // 387: determined.api.v1.Determined.PutTemplate:output_type -> determined.api.v1.PutTemplateResponse + 388, // 388: determined.api.v1.Determined.PostTemplate:output_type -> determined.api.v1.PostTemplateResponse + 389, // 389: determined.api.v1.Determined.PatchTemplateConfig:output_type -> determined.api.v1.PatchTemplateConfigResponse + 390, // 390: determined.api.v1.Determined.PatchTemplateName:output_type -> determined.api.v1.PatchTemplateNameResponse + 391, // 391: determined.api.v1.Determined.DeleteTemplate:output_type -> determined.api.v1.DeleteTemplateResponse + 392, // 392: determined.api.v1.Determined.GetNotebooks:output_type -> determined.api.v1.GetNotebooksResponse + 393, // 393: determined.api.v1.Determined.GetNotebook:output_type -> determined.api.v1.GetNotebookResponse + 394, // 394: determined.api.v1.Determined.IdleNotebook:output_type -> determined.api.v1.IdleNotebookResponse + 395, // 395: determined.api.v1.Determined.KillNotebook:output_type -> determined.api.v1.KillNotebookResponse + 396, // 396: determined.api.v1.Determined.SetNotebookPriority:output_type -> determined.api.v1.SetNotebookPriorityResponse + 397, // 397: determined.api.v1.Determined.LaunchNotebook:output_type -> determined.api.v1.LaunchNotebookResponse + 398, // 398: determined.api.v1.Determined.GetShells:output_type -> determined.api.v1.GetShellsResponse + 399, // 399: determined.api.v1.Determined.GetShell:output_type -> determined.api.v1.GetShellResponse + 400, // 400: determined.api.v1.Determined.KillShell:output_type -> determined.api.v1.KillShellResponse + 401, // 401: determined.api.v1.Determined.SetShellPriority:output_type -> determined.api.v1.SetShellPriorityResponse + 402, // 402: determined.api.v1.Determined.LaunchShell:output_type -> determined.api.v1.LaunchShellResponse + 403, // 403: determined.api.v1.Determined.GetCommands:output_type -> determined.api.v1.GetCommandsResponse + 404, // 404: determined.api.v1.Determined.GetCommand:output_type -> determined.api.v1.GetCommandResponse + 405, // 405: determined.api.v1.Determined.KillCommand:output_type -> determined.api.v1.KillCommandResponse + 406, // 406: determined.api.v1.Determined.SetCommandPriority:output_type -> determined.api.v1.SetCommandPriorityResponse + 407, // 407: determined.api.v1.Determined.LaunchCommand:output_type -> determined.api.v1.LaunchCommandResponse + 408, // 408: determined.api.v1.Determined.GetTensorboards:output_type -> determined.api.v1.GetTensorboardsResponse + 409, // 409: determined.api.v1.Determined.GetTensorboard:output_type -> determined.api.v1.GetTensorboardResponse + 410, // 410: determined.api.v1.Determined.KillTensorboard:output_type -> determined.api.v1.KillTensorboardResponse + 411, // 411: determined.api.v1.Determined.SetTensorboardPriority:output_type -> determined.api.v1.SetTensorboardPriorityResponse + 412, // 412: determined.api.v1.Determined.LaunchTensorboard:output_type -> determined.api.v1.LaunchTensorboardResponse + 413, // 413: determined.api.v1.Determined.LaunchTensorboardSearches:output_type -> determined.api.v1.LaunchTensorboardSearchesResponse + 414, // 414: determined.api.v1.Determined.DeleteTensorboardFiles:output_type -> determined.api.v1.DeleteTensorboardFilesResponse + 415, // 415: determined.api.v1.Determined.GetActiveTasksCount:output_type -> determined.api.v1.GetActiveTasksCountResponse + 416, // 416: determined.api.v1.Determined.GetTask:output_type -> determined.api.v1.GetTaskResponse + 417, // 417: determined.api.v1.Determined.GetTasks:output_type -> determined.api.v1.GetTasksResponse + 418, // 418: determined.api.v1.Determined.GetModel:output_type -> determined.api.v1.GetModelResponse + 419, // 419: determined.api.v1.Determined.PostModel:output_type -> determined.api.v1.PostModelResponse + 420, // 420: determined.api.v1.Determined.PatchModel:output_type -> determined.api.v1.PatchModelResponse + 421, // 421: determined.api.v1.Determined.ArchiveModel:output_type -> determined.api.v1.ArchiveModelResponse + 422, // 422: determined.api.v1.Determined.UnarchiveModel:output_type -> determined.api.v1.UnarchiveModelResponse + 423, // 423: determined.api.v1.Determined.MoveModel:output_type -> determined.api.v1.MoveModelResponse + 424, // 424: determined.api.v1.Determined.DeleteModel:output_type -> determined.api.v1.DeleteModelResponse + 425, // 425: determined.api.v1.Determined.GetModels:output_type -> determined.api.v1.GetModelsResponse + 426, // 426: determined.api.v1.Determined.GetModelLabels:output_type -> determined.api.v1.GetModelLabelsResponse + 427, // 427: determined.api.v1.Determined.GetModelVersion:output_type -> determined.api.v1.GetModelVersionResponse + 428, // 428: determined.api.v1.Determined.GetModelVersions:output_type -> determined.api.v1.GetModelVersionsResponse + 429, // 429: determined.api.v1.Determined.PostModelVersion:output_type -> determined.api.v1.PostModelVersionResponse + 430, // 430: determined.api.v1.Determined.PatchModelVersion:output_type -> determined.api.v1.PatchModelVersionResponse + 431, // 431: determined.api.v1.Determined.DeleteModelVersion:output_type -> determined.api.v1.DeleteModelVersionResponse + 432, // 432: determined.api.v1.Determined.GetTrialMetricsByModelVersion:output_type -> determined.api.v1.GetTrialMetricsByModelVersionResponse + 433, // 433: determined.api.v1.Determined.GetCheckpoint:output_type -> determined.api.v1.GetCheckpointResponse + 434, // 434: determined.api.v1.Determined.PostCheckpointMetadata:output_type -> determined.api.v1.PostCheckpointMetadataResponse + 435, // 435: determined.api.v1.Determined.CheckpointsRemoveFiles:output_type -> determined.api.v1.CheckpointsRemoveFilesResponse + 436, // 436: determined.api.v1.Determined.PatchCheckpoints:output_type -> determined.api.v1.PatchCheckpointsResponse + 437, // 437: determined.api.v1.Determined.DeleteCheckpoints:output_type -> determined.api.v1.DeleteCheckpointsResponse + 438, // 438: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:output_type -> determined.api.v1.GetTrialMetricsByCheckpointResponse + 439, // 439: determined.api.v1.Determined.ExpMetricNames:output_type -> determined.api.v1.ExpMetricNamesResponse + 440, // 440: determined.api.v1.Determined.MetricBatches:output_type -> determined.api.v1.MetricBatchesResponse + 441, // 441: determined.api.v1.Determined.TrialsSnapshot:output_type -> determined.api.v1.TrialsSnapshotResponse + 442, // 442: determined.api.v1.Determined.TrialsSample:output_type -> determined.api.v1.TrialsSampleResponse + 443, // 443: determined.api.v1.Determined.GetResourcePools:output_type -> determined.api.v1.GetResourcePoolsResponse + 444, // 444: determined.api.v1.Determined.GetKubernetesResourceManagers:output_type -> determined.api.v1.GetKubernetesResourceManagersResponse + 445, // 445: determined.api.v1.Determined.ResourceAllocationRaw:output_type -> determined.api.v1.ResourceAllocationRawResponse + 446, // 446: determined.api.v1.Determined.ResourceAllocationAggregated:output_type -> determined.api.v1.ResourceAllocationAggregatedResponse + 447, // 447: determined.api.v1.Determined.GetWorkspace:output_type -> determined.api.v1.GetWorkspaceResponse + 448, // 448: determined.api.v1.Determined.GetWorkspaceProjects:output_type -> determined.api.v1.GetWorkspaceProjectsResponse + 449, // 449: determined.api.v1.Determined.GetWorkspaces:output_type -> determined.api.v1.GetWorkspacesResponse + 450, // 450: determined.api.v1.Determined.PostWorkspace:output_type -> determined.api.v1.PostWorkspaceResponse + 451, // 451: determined.api.v1.Determined.PatchWorkspace:output_type -> determined.api.v1.PatchWorkspaceResponse + 452, // 452: determined.api.v1.Determined.DeleteWorkspace:output_type -> determined.api.v1.DeleteWorkspaceResponse + 453, // 453: determined.api.v1.Determined.ArchiveWorkspace:output_type -> determined.api.v1.ArchiveWorkspaceResponse + 454, // 454: determined.api.v1.Determined.UnarchiveWorkspace:output_type -> determined.api.v1.UnarchiveWorkspaceResponse + 455, // 455: determined.api.v1.Determined.PinWorkspace:output_type -> determined.api.v1.PinWorkspaceResponse + 456, // 456: determined.api.v1.Determined.UnpinWorkspace:output_type -> determined.api.v1.UnpinWorkspaceResponse + 457, // 457: determined.api.v1.Determined.SetWorkspaceNamespaceBindings:output_type -> determined.api.v1.SetWorkspaceNamespaceBindingsResponse + 458, // 458: determined.api.v1.Determined.SetResourceQuotas:output_type -> determined.api.v1.SetResourceQuotasResponse + 459, // 459: determined.api.v1.Determined.ListWorkspaceNamespaceBindings:output_type -> determined.api.v1.ListWorkspaceNamespaceBindingsResponse + 460, // 460: determined.api.v1.Determined.GetWorkspacesWithDefaultNamespaceBindings:output_type -> determined.api.v1.GetWorkspacesWithDefaultNamespaceBindingsResponse + 461, // 461: determined.api.v1.Determined.BulkAutoCreateWorkspaceNamespaceBindings:output_type -> determined.api.v1.BulkAutoCreateWorkspaceNamespaceBindingsResponse + 462, // 462: determined.api.v1.Determined.DeleteWorkspaceNamespaceBindings:output_type -> determined.api.v1.DeleteWorkspaceNamespaceBindingsResponse + 463, // 463: determined.api.v1.Determined.GetKubernetesResourceQuotas:output_type -> determined.api.v1.GetKubernetesResourceQuotasResponse + 464, // 464: determined.api.v1.Determined.GetProject:output_type -> determined.api.v1.GetProjectResponse + 465, // 465: determined.api.v1.Determined.GetProjectByKey:output_type -> determined.api.v1.GetProjectByKeyResponse + 466, // 466: determined.api.v1.Determined.GetProjectColumns:output_type -> determined.api.v1.GetProjectColumnsResponse + 467, // 467: determined.api.v1.Determined.GetProjectNumericMetricsRange:output_type -> determined.api.v1.GetProjectNumericMetricsRangeResponse + 468, // 468: determined.api.v1.Determined.PostProject:output_type -> determined.api.v1.PostProjectResponse + 469, // 469: determined.api.v1.Determined.AddProjectNote:output_type -> determined.api.v1.AddProjectNoteResponse + 470, // 470: determined.api.v1.Determined.PutProjectNotes:output_type -> determined.api.v1.PutProjectNotesResponse + 471, // 471: determined.api.v1.Determined.PatchProject:output_type -> determined.api.v1.PatchProjectResponse + 472, // 472: determined.api.v1.Determined.DeleteProject:output_type -> determined.api.v1.DeleteProjectResponse + 473, // 473: determined.api.v1.Determined.ArchiveProject:output_type -> determined.api.v1.ArchiveProjectResponse + 474, // 474: determined.api.v1.Determined.UnarchiveProject:output_type -> determined.api.v1.UnarchiveProjectResponse + 475, // 475: determined.api.v1.Determined.MoveProject:output_type -> determined.api.v1.MoveProjectResponse + 476, // 476: determined.api.v1.Determined.MoveExperiment:output_type -> determined.api.v1.MoveExperimentResponse + 477, // 477: determined.api.v1.Determined.MoveExperiments:output_type -> determined.api.v1.MoveExperimentsResponse + 478, // 478: determined.api.v1.Determined.GetWebhooks:output_type -> determined.api.v1.GetWebhooksResponse + 479, // 479: determined.api.v1.Determined.PatchWebhook:output_type -> determined.api.v1.PatchWebhookResponse + 480, // 480: determined.api.v1.Determined.PostWebhook:output_type -> determined.api.v1.PostWebhookResponse + 481, // 481: determined.api.v1.Determined.DeleteWebhook:output_type -> determined.api.v1.DeleteWebhookResponse + 482, // 482: determined.api.v1.Determined.TestWebhook:output_type -> determined.api.v1.TestWebhookResponse + 483, // 483: determined.api.v1.Determined.PostWebhookEventData:output_type -> determined.api.v1.PostWebhookEventDataResponse + 484, // 484: determined.api.v1.Determined.GetGroup:output_type -> determined.api.v1.GetGroupResponse + 485, // 485: determined.api.v1.Determined.GetGroups:output_type -> determined.api.v1.GetGroupsResponse + 486, // 486: determined.api.v1.Determined.CreateGroup:output_type -> determined.api.v1.CreateGroupResponse + 487, // 487: determined.api.v1.Determined.UpdateGroup:output_type -> determined.api.v1.UpdateGroupResponse + 488, // 488: determined.api.v1.Determined.DeleteGroup:output_type -> determined.api.v1.DeleteGroupResponse + 489, // 489: determined.api.v1.Determined.GetPermissionsSummary:output_type -> determined.api.v1.GetPermissionsSummaryResponse + 490, // 490: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:output_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse + 491, // 491: determined.api.v1.Determined.GetRolesByID:output_type -> determined.api.v1.GetRolesByIDResponse + 492, // 492: determined.api.v1.Determined.GetRolesAssignedToUser:output_type -> determined.api.v1.GetRolesAssignedToUserResponse + 493, // 493: determined.api.v1.Determined.GetRolesAssignedToGroup:output_type -> determined.api.v1.GetRolesAssignedToGroupResponse + 494, // 494: determined.api.v1.Determined.SearchRolesAssignableToScope:output_type -> determined.api.v1.SearchRolesAssignableToScopeResponse + 495, // 495: determined.api.v1.Determined.ListRoles:output_type -> determined.api.v1.ListRolesResponse + 496, // 496: determined.api.v1.Determined.AssignRoles:output_type -> determined.api.v1.AssignRolesResponse + 497, // 497: determined.api.v1.Determined.RemoveAssignments:output_type -> determined.api.v1.RemoveAssignmentsResponse + 498, // 498: determined.api.v1.Determined.PostUserActivity:output_type -> determined.api.v1.PostUserActivityResponse + 499, // 499: determined.api.v1.Determined.GetProjectsByUserActivity:output_type -> determined.api.v1.GetProjectsByUserActivityResponse + 500, // 500: determined.api.v1.Determined.SearchExperiments:output_type -> determined.api.v1.SearchExperimentsResponse + 501, // 501: determined.api.v1.Determined.BindRPToWorkspace:output_type -> determined.api.v1.BindRPToWorkspaceResponse + 502, // 502: determined.api.v1.Determined.UnbindRPFromWorkspace:output_type -> determined.api.v1.UnbindRPFromWorkspaceResponse + 503, // 503: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:output_type -> determined.api.v1.OverwriteRPWorkspaceBindingsResponse + 504, // 504: determined.api.v1.Determined.ListRPsBoundToWorkspace:output_type -> determined.api.v1.ListRPsBoundToWorkspaceResponse + 505, // 505: determined.api.v1.Determined.ListWorkspacesBoundToRP:output_type -> determined.api.v1.ListWorkspacesBoundToRPResponse + 506, // 506: determined.api.v1.Determined.GetGenericTaskConfig:output_type -> determined.api.v1.GetGenericTaskConfigResponse + 507, // 507: determined.api.v1.Determined.KillGenericTask:output_type -> determined.api.v1.KillGenericTaskResponse + 508, // 508: determined.api.v1.Determined.PauseGenericTask:output_type -> determined.api.v1.PauseGenericTaskResponse + 509, // 509: determined.api.v1.Determined.UnpauseGenericTask:output_type -> determined.api.v1.UnpauseGenericTaskResponse + 510, // 510: determined.api.v1.Determined.SearchRuns:output_type -> determined.api.v1.SearchRunsResponse + 511, // 511: determined.api.v1.Determined.MoveRuns:output_type -> determined.api.v1.MoveRunsResponse + 512, // 512: determined.api.v1.Determined.KillRuns:output_type -> determined.api.v1.KillRunsResponse + 513, // 513: determined.api.v1.Determined.DeleteRuns:output_type -> determined.api.v1.DeleteRunsResponse + 514, // 514: determined.api.v1.Determined.ArchiveRuns:output_type -> determined.api.v1.ArchiveRunsResponse + 515, // 515: determined.api.v1.Determined.UnarchiveRuns:output_type -> determined.api.v1.UnarchiveRunsResponse + 516, // 516: determined.api.v1.Determined.PauseRuns:output_type -> determined.api.v1.PauseRunsResponse + 517, // 517: determined.api.v1.Determined.ResumeRuns:output_type -> determined.api.v1.ResumeRunsResponse + 518, // 518: determined.api.v1.Determined.GetRunMetadata:output_type -> determined.api.v1.GetRunMetadataResponse + 519, // 519: determined.api.v1.Determined.PostRunMetadata:output_type -> determined.api.v1.PostRunMetadataResponse + 520, // 520: determined.api.v1.Determined.GetMetadataValues:output_type -> determined.api.v1.GetMetadataValuesResponse + 521, // 521: determined.api.v1.Determined.PutWorkspaceConfigPolicies:output_type -> determined.api.v1.PutWorkspaceConfigPoliciesResponse + 522, // 522: determined.api.v1.Determined.PutGlobalConfigPolicies:output_type -> determined.api.v1.PutGlobalConfigPoliciesResponse + 523, // 523: determined.api.v1.Determined.GetWorkspaceConfigPolicies:output_type -> determined.api.v1.GetWorkspaceConfigPoliciesResponse + 524, // 524: determined.api.v1.Determined.GetGlobalConfigPolicies:output_type -> determined.api.v1.GetGlobalConfigPoliciesResponse + 525, // 525: determined.api.v1.Determined.DeleteWorkspaceConfigPolicies:output_type -> determined.api.v1.DeleteWorkspaceConfigPoliciesResponse + 526, // 526: determined.api.v1.Determined.DeleteGlobalConfigPolicies:output_type -> determined.api.v1.DeleteGlobalConfigPoliciesResponse + 527, // 527: determined.api.v1.Determined.MoveSearches:output_type -> determined.api.v1.MoveSearchesResponse + 528, // 528: determined.api.v1.Determined.CancelSearches:output_type -> determined.api.v1.CancelSearchesResponse + 529, // 529: determined.api.v1.Determined.KillSearches:output_type -> determined.api.v1.KillSearchesResponse + 530, // 530: determined.api.v1.Determined.DeleteSearches:output_type -> determined.api.v1.DeleteSearchesResponse + 531, // 531: determined.api.v1.Determined.ArchiveSearches:output_type -> determined.api.v1.ArchiveSearchesResponse + 532, // 532: determined.api.v1.Determined.UnarchiveSearches:output_type -> determined.api.v1.UnarchiveSearchesResponse + 533, // 533: determined.api.v1.Determined.PauseSearches:output_type -> determined.api.v1.PauseSearchesResponse + 534, // 534: determined.api.v1.Determined.ResumeSearches:output_type -> determined.api.v1.ResumeSearchesResponse + 535, // 535: determined.api.v1.Determined.PostAccessToken:output_type -> determined.api.v1.PostAccessTokenResponse + 536, // 536: determined.api.v1.Determined.GetAccessTokens:output_type -> determined.api.v1.GetAccessTokensResponse + 537, // 537: determined.api.v1.Determined.PatchAccessToken:output_type -> determined.api.v1.PatchAccessTokenResponse + 269, // [269:538] is the sub-list for method output_type + 0, // [0:269] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -4438,11 +4400,6 @@ type DeterminedClient interface { // really considered to be in a "Running" state until all the containers // that are part of the experiment are running and not being pulled. NotifyContainerRunning(ctx context.Context, in *NotifyContainerRunningRequest, opts ...grpc.CallOption) (*NotifyContainerRunningResponse, error) - // Get the current searcher operation. - GetCurrentTrialSearcherOperation(ctx context.Context, in *GetCurrentTrialSearcherOperationRequest, opts ...grpc.CallOption) (*GetCurrentTrialSearcherOperationResponse, error) - // Reports to the searcher that the trial has completed the given searcher - // operation. - CompleteTrialSearcherValidation(ctx context.Context, in *CompleteTrialSearcherValidationRequest, opts ...grpc.CallOption) (*CompleteTrialSearcherValidationResponse, error) // Reports to the searcher that the trial has completed the current // requested amount of training with the given searcher validation // metric. @@ -5973,24 +5930,6 @@ func (c *determinedClient) NotifyContainerRunning(ctx context.Context, in *Notif return out, nil } -func (c *determinedClient) GetCurrentTrialSearcherOperation(ctx context.Context, in *GetCurrentTrialSearcherOperationRequest, opts ...grpc.CallOption) (*GetCurrentTrialSearcherOperationResponse, error) { - out := new(GetCurrentTrialSearcherOperationResponse) - err := c.cc.Invoke(ctx, "/determined.api.v1.Determined/GetCurrentTrialSearcherOperation", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *determinedClient) CompleteTrialSearcherValidation(ctx context.Context, in *CompleteTrialSearcherValidationRequest, opts ...grpc.CallOption) (*CompleteTrialSearcherValidationResponse, error) { - out := new(CompleteTrialSearcherValidationResponse) - err := c.cc.Invoke(ctx, "/determined.api.v1.Determined/CompleteTrialSearcherValidation", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *determinedClient) ReportTrialSearcherEarlyExit(ctx context.Context, in *ReportTrialSearcherEarlyExitRequest, opts ...grpc.CallOption) (*ReportTrialSearcherEarlyExitResponse, error) { out := new(ReportTrialSearcherEarlyExitResponse) err := c.cc.Invoke(ctx, "/determined.api.v1.Determined/ReportTrialSearcherEarlyExit", in, out, opts...) @@ -7806,11 +7745,6 @@ type DeterminedServer interface { // really considered to be in a "Running" state until all the containers // that are part of the experiment are running and not being pulled. NotifyContainerRunning(context.Context, *NotifyContainerRunningRequest) (*NotifyContainerRunningResponse, error) - // Get the current searcher operation. - GetCurrentTrialSearcherOperation(context.Context, *GetCurrentTrialSearcherOperationRequest) (*GetCurrentTrialSearcherOperationResponse, error) - // Reports to the searcher that the trial has completed the given searcher - // operation. - CompleteTrialSearcherValidation(context.Context, *CompleteTrialSearcherValidationRequest) (*CompleteTrialSearcherValidationResponse, error) // Reports to the searcher that the trial has completed the current // requested amount of training with the given searcher validation // metric. @@ -8474,12 +8408,6 @@ func (*UnimplementedDeterminedServer) AllocationAllGather(context.Context, *Allo func (*UnimplementedDeterminedServer) NotifyContainerRunning(context.Context, *NotifyContainerRunningRequest) (*NotifyContainerRunningResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NotifyContainerRunning not implemented") } -func (*UnimplementedDeterminedServer) GetCurrentTrialSearcherOperation(context.Context, *GetCurrentTrialSearcherOperationRequest) (*GetCurrentTrialSearcherOperationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetCurrentTrialSearcherOperation not implemented") -} -func (*UnimplementedDeterminedServer) CompleteTrialSearcherValidation(context.Context, *CompleteTrialSearcherValidationRequest) (*CompleteTrialSearcherValidationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CompleteTrialSearcherValidation not implemented") -} func (*UnimplementedDeterminedServer) ReportTrialSearcherEarlyExit(context.Context, *ReportTrialSearcherEarlyExitRequest) (*ReportTrialSearcherEarlyExitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ReportTrialSearcherEarlyExit not implemented") } @@ -10897,42 +10825,6 @@ func _Determined_NotifyContainerRunning_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _Determined_GetCurrentTrialSearcherOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetCurrentTrialSearcherOperationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeterminedServer).GetCurrentTrialSearcherOperation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/determined.api.v1.Determined/GetCurrentTrialSearcherOperation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeterminedServer).GetCurrentTrialSearcherOperation(ctx, req.(*GetCurrentTrialSearcherOperationRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Determined_CompleteTrialSearcherValidation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CompleteTrialSearcherValidationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DeterminedServer).CompleteTrialSearcherValidation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/determined.api.v1.Determined/CompleteTrialSearcherValidation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DeterminedServer).CompleteTrialSearcherValidation(ctx, req.(*CompleteTrialSearcherValidationRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Determined_ReportTrialSearcherEarlyExit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ReportTrialSearcherEarlyExitRequest) if err := dec(in); err != nil { @@ -14281,14 +14173,6 @@ var _Determined_serviceDesc = grpc.ServiceDesc{ MethodName: "NotifyContainerRunning", Handler: _Determined_NotifyContainerRunning_Handler, }, - { - MethodName: "GetCurrentTrialSearcherOperation", - Handler: _Determined_GetCurrentTrialSearcherOperation_Handler, - }, - { - MethodName: "CompleteTrialSearcherValidation", - Handler: _Determined_CompleteTrialSearcherValidation_Handler, - }, { MethodName: "ReportTrialSearcherEarlyExit", Handler: _Determined_ReportTrialSearcherEarlyExit_Handler, diff --git a/proto/pkg/apiv1/api.pb.gw.go b/proto/pkg/apiv1/api.pb.gw.go index 635cebde0d5..16d93eff5f8 100644 --- a/proto/pkg/apiv1/api.pb.gw.go +++ b/proto/pkg/apiv1/api.pb.gw.go @@ -5437,130 +5437,6 @@ func local_request_Determined_NotifyContainerRunning_0(ctx context.Context, mars } -func request_Determined_GetCurrentTrialSearcherOperation_0(ctx context.Context, marshaler runtime.Marshaler, client DeterminedClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetCurrentTrialSearcherOperationRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["trial_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trial_id") - } - - protoReq.TrialId, err = runtime.Int32(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trial_id", err) - } - - msg, err := client.GetCurrentTrialSearcherOperation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Determined_GetCurrentTrialSearcherOperation_0(ctx context.Context, marshaler runtime.Marshaler, server DeterminedServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetCurrentTrialSearcherOperationRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["trial_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trial_id") - } - - protoReq.TrialId, err = runtime.Int32(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trial_id", err) - } - - msg, err := server.GetCurrentTrialSearcherOperation(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Determined_CompleteTrialSearcherValidation_0(ctx context.Context, marshaler runtime.Marshaler, client DeterminedClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CompleteTrialSearcherValidationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.CompletedOperation); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["trial_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trial_id") - } - - protoReq.TrialId, err = runtime.Int32(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trial_id", err) - } - - msg, err := client.CompleteTrialSearcherValidation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Determined_CompleteTrialSearcherValidation_0(ctx context.Context, marshaler runtime.Marshaler, server DeterminedServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CompleteTrialSearcherValidationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.CompletedOperation); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["trial_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trial_id") - } - - protoReq.TrialId, err = runtime.Int32(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trial_id", err) - } - - msg, err := server.CompleteTrialSearcherValidation(ctx, &protoReq) - return msg, metadata, err - -} - func request_Determined_ReportTrialSearcherEarlyExit_0(ctx context.Context, marshaler runtime.Marshaler, client DeterminedClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ReportTrialSearcherEarlyExitRequest var metadata runtime.ServerMetadata @@ -15960,46 +15836,6 @@ func RegisterDeterminedHandlerServer(ctx context.Context, mux *runtime.ServeMux, }) - mux.Handle("GET", pattern_Determined_GetCurrentTrialSearcherOperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Determined_GetCurrentTrialSearcherOperation_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Determined_GetCurrentTrialSearcherOperation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Determined_CompleteTrialSearcherValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Determined_CompleteTrialSearcherValidation_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Determined_CompleteTrialSearcherValidation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_Determined_ReportTrialSearcherEarlyExit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -21369,46 +21205,6 @@ func RegisterDeterminedHandlerClient(ctx context.Context, mux *runtime.ServeMux, }) - mux.Handle("GET", pattern_Determined_GetCurrentTrialSearcherOperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Determined_GetCurrentTrialSearcherOperation_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Determined_GetCurrentTrialSearcherOperation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Determined_CompleteTrialSearcherValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Determined_CompleteTrialSearcherValidation_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Determined_CompleteTrialSearcherValidation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_Determined_ReportTrialSearcherEarlyExit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -24903,10 +24699,6 @@ var ( pattern_Determined_NotifyContainerRunning_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "allocations", "allocation_id", "notify_container_running"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Determined_GetCurrentTrialSearcherOperation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"api", "v1", "trials", "trial_id", "searcher", "operation"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_Determined_CompleteTrialSearcherValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"api", "v1", "trials", "trial_id", "searcher", "completed_operation"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Determined_ReportTrialSearcherEarlyExit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "trials", "trial_id", "early_exit"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Determined_ReportTrialProgress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "trials", "trial_id", "progress"}, "", runtime.AssumeColonVerbOpt(true))) @@ -25447,10 +25239,6 @@ var ( forward_Determined_NotifyContainerRunning_0 = runtime.ForwardResponseMessage - forward_Determined_GetCurrentTrialSearcherOperation_0 = runtime.ForwardResponseMessage - - forward_Determined_CompleteTrialSearcherValidation_0 = runtime.ForwardResponseMessage - forward_Determined_ReportTrialSearcherEarlyExit_0 = runtime.ForwardResponseMessage forward_Determined_ReportTrialProgress_0 = runtime.ForwardResponseMessage diff --git a/proto/pkg/apiv1/experiment.pb.go b/proto/pkg/apiv1/experiment.pb.go index 9202b9ba6fa..e83c48213da 100644 --- a/proto/pkg/apiv1/experiment.pb.go +++ b/proto/pkg/apiv1/experiment.pb.go @@ -1515,8 +1515,8 @@ type PreviewHPSearchResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The resulting simulation. - Simulation *experimentv1.ExperimentSimulation `protobuf:"bytes,1,opt,name=simulation,proto3" json:"simulation,omitempty"` + // The resulting summary. + Summary *experimentv1.SearchSummary `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"` } func (x *PreviewHPSearchResponse) Reset() { @@ -1551,9 +1551,9 @@ func (*PreviewHPSearchResponse) Descriptor() ([]byte, []int) { return file_determined_api_v1_experiment_proto_rawDescGZIP(), []int{22} } -func (x *PreviewHPSearchResponse) GetSimulation() *experimentv1.ExperimentSimulation { +func (x *PreviewHPSearchResponse) GetSummary() *experimentv1.SearchSummary { if x != nil { - return x.Simulation + return x.Summary } return nil } @@ -5589,295 +5589,268 @@ var file_determined_api_v1_experiment_proto_rawDesc = []byte{ 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x69, 0x0a, 0x17, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x5c, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x48, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0a, 0x73, 0x69, 0x6d, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x73, 0x69, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x0a, 0x19, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x2b, 0x0a, 0x19, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x12, 0x92, 0x41, 0x0f, 0x0a, 0x0d, 0xd2, 0x01, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x1a, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, + 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x73, 0x0a, 0x1b, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, + 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x16, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xc8, 0x02, 0x0a, 0x15, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0e, 0x32, 0x1f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, + 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x15, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xc8, 0x01, 0x0a, + 0x17, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, + 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x18, 0x50, 0x61, 0x75, 0x73, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, + 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x29, 0x0a, 0x17, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xc9, 0x01, 0x0a, 0x18, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, + 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x71, 0x0a, 0x19, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, + 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, + 0x27, 0x0a, 0x15, 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x52, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x69, 0x64, 0x3a, 0x12, 0x92, 0x41, 0x0f, 0x0a, 0x0d, 0xd2, 0x01, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x1a, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, - 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x73, 0x22, 0x73, 0x0a, 0x1b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x73, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x16, 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, + 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6f, 0x0a, 0x17, + 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, + 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x2a, 0x0a, + 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, + 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x22, 0x72, 0x0a, 0x1a, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x2c, 0x0a, 0x1a, 0x55, 0x6e, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x1b, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, + 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x22, 0x74, 0x0a, 0x1c, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, - 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x16, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x63, 0x0a, 0x16, 0x50, 0x61, 0x74, + 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, + 0x0a, 0x17, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0xc8, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc8, - 0x02, 0x0a, 0x15, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x37, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x15, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, - 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x18, 0x50, 0x61, 0x75, 0x73, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x29, 0x0a, 0x17, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc9, 0x01, - 0x0a, 0x18, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x71, 0x0a, 0x19, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, - 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x27, 0x0a, 0x15, - 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xc7, 0x01, 0x0a, 0x16, 0x4b, 0x69, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6f, 0x0a, 0x17, 0x4b, 0x69, 0x6c, - 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, - 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x2a, 0x0a, 0x18, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, - 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, - 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, - 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, - 0x22, 0x72, 0x0a, 0x1a, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, - 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x22, 0x2c, 0x0a, 0x1a, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x1b, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, - 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x23, 0x92, 0x41, 0x20, - 0x0a, 0x1e, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, - 0x01, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, - 0x22, 0x74, 0x0a, 0x1c, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x63, 0x0a, 0x16, 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x49, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, 0x17, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xc8, 0x02, 0x0a, - 0x1f, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x44, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x74, 0x74, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x73, + 0x6f, 0x72, 0x74, 0x42, 0x79, 0x41, 0x74, 0x74, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x6f, 0x72, + 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x12, 0x35, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, + 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x6f, 0x72, 0x74, - 0x42, 0x79, 0x41, 0x74, 0x74, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, - 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x35, - 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x52, 0x07, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, - 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xcb, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x92, 0x41, 0x1d, 0x0a, 0x1b, 0xd2, 0x01, 0x0b, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, - 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x22, - 0xd2, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x10, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x0f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x09, 0x75, 0x6e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x77, 0x61, - 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x0a, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0xd2, 0x01, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x50, 0x75, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x19, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x17, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x15, 0x50, - 0x75, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x42, + 0x09, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x22, 0xcb, 0x01, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x46, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x92, 0x41, 0x1d, 0x0a, 0x1b, 0xd2, 0x01, 0x0b, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5f, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x22, 0xd2, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, + 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, + 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x75, 0x6e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x09, + 0x75, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x75, 0x6e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, @@ -5885,280 +5858,306 @@ var file_determined_api_v1_experiment_proto_rawDesc = []byte{ 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x1b, 0x92, 0x41, 0x18, - 0x0a, 0x16, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0xd2, - 0x01, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x60, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x0a, - 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0xbd, 0x01, 0x0a, 0x1a, 0x43, + 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x08, 0x77, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x52, + 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, + 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0xd2, 0x01, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x50, 0x75, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x66, 0x0a, 0x19, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x17, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xab, 0x01, + 0x0a, 0x15, 0x50, 0x75, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x1b, + 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0xd2, 0x01, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x60, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x3c, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x1b, 0x92, - 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0xd2, 0x01, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5b, 0x0a, 0x15, 0x45, 0x78, - 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, - 0x42, 0x09, 0x92, 0x41, 0x06, 0xd2, 0x01, 0x03, 0x69, 0x64, 0x73, 0x52, 0x03, 0x69, 0x64, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x70, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x5f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, - 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x31, 0x0a, 0x12, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, - 0x49, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0b, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x85, 0x02, 0x0a, 0x14, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, 0x41, 0x10, 0xd2, - 0x01, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x52, - 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, - 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0xf3, 0x02, 0x0a, 0x15, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, 0x41, 0x10, 0xd2, 0x01, 0x0d, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x52, 0x0c, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, - 0x92, 0x41, 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, - 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x44, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x42, 0x17, 0x92, 0x41, 0x14, 0xd2, 0x01, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x52, 0x10, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x4d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xc7, 0x02, 0x0a, 0x16, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x1a, - 0xd3, 0x01, 0x0a, 0x05, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, - 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, - 0x2b, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x3a, 0x37, 0x92, 0x41, - 0x34, 0x0a, 0x32, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, - 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0xd2, 0x01, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0xd2, 0x01, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x3a, 0x0e, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0xd2, 0x01, 0x06, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x13, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, - 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, - 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, 0x41, 0x10, 0xd2, 0x01, 0x0d, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, - 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x52, - 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x54, 0x72, - 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, - 0x78, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x8d, 0x03, 0x0a, 0x14, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x64, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x64, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x05, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, - 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x3a, 0x21, 0x92, 0x41, 0x1e, 0x0a, 0x1c, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0xd2, 0x01, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, 0x2c, 0xd2, 0x01, 0x06, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0xd2, 0x01, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, - 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0xd2, 0x01, 0x0e, 0x64, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x39, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, - 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x36, - 0x34, 0x5f, 0x74, 0x67, 0x7a, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x36, 0x34, - 0x54, 0x67, 0x7a, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x62, 0x36, 0x34, - 0x5f, 0x74, 0x67, 0x7a, 0x22, 0xa2, 0x01, 0x0a, 0x15, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0xbd, 0x01, + 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, + 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0xd2, 0x01, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5b, 0x0a, + 0x15, 0x45, 0x78, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x42, 0x09, 0x92, 0x41, 0x06, 0xd2, 0x01, 0x03, 0x69, 0x64, 0x73, 0x52, 0x03, + 0x69, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x16, 0x45, + 0x78, 0x70, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x12, 0x2d, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0f, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, + 0x31, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x85, 0x02, + 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, + 0x41, 0x10, 0xd2, 0x01, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, + 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0xf3, 0x02, 0x0a, 0x15, 0x54, 0x72, 0x69, + 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, 0x41, 0x10, 0xd2, 0x01, + 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x52, 0x0c, + 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0b, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x42, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x44, 0x0a, 0x11, 0x62, 0x61, + 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x17, 0x92, 0x41, 0x14, 0xd2, 0x01, 0x11, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x52, 0x10, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x72, 0x67, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x4d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xc7, + 0x02, 0x0a, 0x16, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x73, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x73, 0x1a, 0xd3, 0x01, 0x0a, 0x05, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x3a, + 0x37, 0x92, 0x41, 0x34, 0x0a, 0x32, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0xd2, 0x01, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0xd2, 0x01, 0x06, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0xd2, 0x01, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x5f, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x3a, 0x0e, 0x92, 0x41, 0x0b, 0x0a, 0x09, 0xd2, + 0x01, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x13, 0x54, 0x72, 0x69, + 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x38, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x13, 0x92, 0x41, 0x10, 0xd2, 0x01, 0x0d, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x52, 0x0c, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x11, 0x92, 0x41, 0x0e, 0xd2, 0x01, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, + 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, + 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x61, + 0x78, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x6d, 0x61, 0x78, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x8d, 0x03, 0x0a, 0x14, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x64, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x05, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, + 0x12, 0x31, 0x0a, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x68, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x21, 0x92, 0x41, 0x1e, 0x0a, 0x1c, 0xd2, 0x01, 0x08, 0x74, + 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0xd2, 0x01, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, 0x2c, 0xd2, + 0x01, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0xd2, 0x01, 0x0f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0xd2, 0x01, 0x0e, 0x64, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x39, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x44, 0x65, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, + 0x07, 0x62, 0x36, 0x34, 0x5f, 0x74, 0x67, 0x7a, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x36, 0x34, 0x54, 0x67, 0x7a, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, + 0x62, 0x36, 0x34, 0x5f, 0x74, 0x67, 0x7a, 0x22, 0xa2, 0x01, 0x0a, 0x15, 0x4d, 0x6f, 0x76, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x2e, 0x92, 0x41, + 0x2b, 0x0a, 0x29, 0xd2, 0x01, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0d, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, + 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x16, 0x4d, 0x6f, 0x76, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, + 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x3a, 0x3c, 0x92, 0x41, 0x39, 0x0a, 0x37, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, + 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, + 0x6f, 0x0a, 0x17, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, + 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x22, 0x3d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x54, + 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, + 0x53, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x54, 0x72, + 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x22, 0x51, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x44, 0x65, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x2e, 0x92, 0x41, 0x2b, 0x0a, 0x29, - 0xd2, 0x01, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0d, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x4d, 0x6f, 0x76, - 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x16, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x3c, - 0x92, 0x41, 0x39, 0x0a, 0x37, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0xd2, 0x01, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6f, 0x0a, 0x17, - 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3a, 0x0f, 0x92, 0x41, - 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3d, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x54, 0x72, 0x65, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x54, 0x72, 0x65, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x22, 0x51, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, - 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x22, 0x2d, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x44, 0x65, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, - 0x69, 0x6c, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x6f, 0x72, 0x74, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xb1, 0x01, 0x0a, 0x1a, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x52, 0x09, 0x62, 0x65, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x12, 0x92, 0x41, 0x0f, - 0x0a, 0x0d, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0xcd, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, - 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3d, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x92, - 0x41, 0x1d, 0x0a, 0x1b, 0xd2, 0x01, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x5b, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x15, 0x92, 0x41, 0x12, 0x0a, 0x10, 0xd2, 0x01, 0x0d, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x20, 0x0a, 0x1e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x7a, - 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, - 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x54, - 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4e, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, - 0x19, 0x0a, 0x15, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, - 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x2d, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xc5, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, + 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, + 0x6f, 0x72, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xb1, + 0x01, 0x0a, 0x1a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x44, 0x0a, + 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x52, 0x09, 0x62, 0x65, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x12, + 0x92, 0x41, 0x0f, 0x0a, 0x0d, 0xd2, 0x01, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0xcd, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x20, 0x92, 0x41, 0x1d, 0x0a, 0x1b, 0xd2, 0x01, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, + 0x6f, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x15, 0x92, 0x41, 0x12, 0x0a, 0x10, 0xd2, + 0x01, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, + 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0x7a, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1b, 0x0a, 0x17, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, + 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x49, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x42, 0x35, 0x5a, + 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, + 0x70, 0x69, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6273,7 +6272,7 @@ var file_determined_api_v1_experiment_proto_goTypes = []interface{}{ (experimentv1.State)(0), // 94: determined.experiment.v1.State (*commonv1.Int32FieldFilter)(nil), // 95: determined.common.v1.Int32FieldFilter (*Pagination)(nil), // 96: determined.api.v1.Pagination - (*experimentv1.ExperimentSimulation)(nil), // 97: determined.experiment.v1.ExperimentSimulation + (*experimentv1.SearchSummary)(nil), // 97: determined.experiment.v1.SearchSummary (*experimentv1.PatchExperiment)(nil), // 98: determined.experiment.v1.PatchExperiment (checkpointv1.SortBy)(0), // 99: determined.checkpoint.v1.SortBy (checkpointv1.State)(0), // 100: determined.checkpoint.v1.State @@ -6303,7 +6302,7 @@ var file_determined_api_v1_experiment_proto_depIdxs = []int32{ 32, // 14: determined.api.v1.DeleteExperimentsRequest.filters:type_name -> determined.api.v1.BulkExperimentFilters 27, // 15: determined.api.v1.DeleteExperimentsResponse.results:type_name -> determined.api.v1.ExperimentActionResult 88, // 16: determined.api.v1.PreviewHPSearchRequest.config:type_name -> google.protobuf.Struct - 97, // 17: determined.api.v1.PreviewHPSearchResponse.simulation:type_name -> determined.experiment.v1.ExperimentSimulation + 97, // 17: determined.api.v1.PreviewHPSearchResponse.summary:type_name -> determined.experiment.v1.SearchSummary 32, // 18: determined.api.v1.ActivateExperimentsRequest.filters:type_name -> determined.api.v1.BulkExperimentFilters 27, // 19: determined.api.v1.ActivateExperimentsResponse.results:type_name -> determined.api.v1.ExperimentActionResult 93, // 20: determined.api.v1.BulkExperimentFilters.archived:type_name -> google.protobuf.BoolValue diff --git a/proto/pkg/apiv1/trial.pb.go b/proto/pkg/apiv1/trial.pb.go index 9e3a30c408d..28b61a7e3e3 100644 --- a/proto/pkg/apiv1/trial.pb.go +++ b/proto/pkg/apiv1/trial.pb.go @@ -3644,211 +3644,6 @@ func (x *NotifyContainerRunningResponse) GetData() []*_struct.Struct { return nil } -// Retrieves the current searcher operation. -type GetCurrentTrialSearcherOperationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The id of the trial. - TrialId int32 `protobuf:"varint,1,opt,name=trial_id,json=trialId,proto3" json:"trial_id,omitempty"` -} - -func (x *GetCurrentTrialSearcherOperationRequest) Reset() { - *x = GetCurrentTrialSearcherOperationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCurrentTrialSearcherOperationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCurrentTrialSearcherOperationRequest) ProtoMessage() {} - -func (x *GetCurrentTrialSearcherOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCurrentTrialSearcherOperationRequest.ProtoReflect.Descriptor instead. -func (*GetCurrentTrialSearcherOperationRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{53} -} - -func (x *GetCurrentTrialSearcherOperationRequest) GetTrialId() int32 { - if x != nil { - return x.TrialId - } - return 0 -} - -// Response to GetCurrentTrialSearcherOperationRequest -type GetCurrentTrialSearcherOperationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The current searcher operation. - Op *experimentv1.TrialOperation `protobuf:"bytes,1,opt,name=op,proto3" json:"op,omitempty"` - // The status of the searcher operation. - Completed bool `protobuf:"varint,2,opt,name=completed,proto3" json:"completed,omitempty"` -} - -func (x *GetCurrentTrialSearcherOperationResponse) Reset() { - *x = GetCurrentTrialSearcherOperationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCurrentTrialSearcherOperationResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCurrentTrialSearcherOperationResponse) ProtoMessage() {} - -func (x *GetCurrentTrialSearcherOperationResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCurrentTrialSearcherOperationResponse.ProtoReflect.Descriptor instead. -func (*GetCurrentTrialSearcherOperationResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{54} -} - -func (x *GetCurrentTrialSearcherOperationResponse) GetOp() *experimentv1.TrialOperation { - if x != nil { - return x.Op - } - return nil -} - -func (x *GetCurrentTrialSearcherOperationResponse) GetCompleted() bool { - if x != nil { - return x.Completed - } - return false -} - -// Reports to the searcher that the trial has completed the current requested -// amount of training. -type CompleteTrialSearcherValidationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The id of the trial. - TrialId int32 `protobuf:"varint,1,opt,name=trial_id,json=trialId,proto3" json:"trial_id,omitempty"` - // The completed operation. - CompletedOperation *experimentv1.CompleteValidateAfterOperation `protobuf:"bytes,2,opt,name=completed_operation,json=completedOperation,proto3" json:"completed_operation,omitempty"` -} - -func (x *CompleteTrialSearcherValidationRequest) Reset() { - *x = CompleteTrialSearcherValidationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CompleteTrialSearcherValidationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CompleteTrialSearcherValidationRequest) ProtoMessage() {} - -func (x *CompleteTrialSearcherValidationRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CompleteTrialSearcherValidationRequest.ProtoReflect.Descriptor instead. -func (*CompleteTrialSearcherValidationRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{55} -} - -func (x *CompleteTrialSearcherValidationRequest) GetTrialId() int32 { - if x != nil { - return x.TrialId - } - return 0 -} - -func (x *CompleteTrialSearcherValidationRequest) GetCompletedOperation() *experimentv1.CompleteValidateAfterOperation { - if x != nil { - return x.CompletedOperation - } - return nil -} - -// Response to CompleteTrialSearcherValidationRequest -type CompleteTrialSearcherValidationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CompleteTrialSearcherValidationResponse) Reset() { - *x = CompleteTrialSearcherValidationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CompleteTrialSearcherValidationResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CompleteTrialSearcherValidationResponse) ProtoMessage() {} - -func (x *CompleteTrialSearcherValidationResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CompleteTrialSearcherValidationResponse.ProtoReflect.Descriptor instead. -func (*CompleteTrialSearcherValidationResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{56} -} - // Report a voluntary, permanent early exit to the searcher. type ReportTrialSearcherEarlyExitRequest struct { state protoimpl.MessageState @@ -3864,7 +3659,7 @@ type ReportTrialSearcherEarlyExitRequest struct { func (x *ReportTrialSearcherEarlyExitRequest) Reset() { *x = ReportTrialSearcherEarlyExitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[57] + mi := &file_determined_api_v1_trial_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3877,7 +3672,7 @@ func (x *ReportTrialSearcherEarlyExitRequest) String() string { func (*ReportTrialSearcherEarlyExitRequest) ProtoMessage() {} func (x *ReportTrialSearcherEarlyExitRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[57] + mi := &file_determined_api_v1_trial_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3890,7 +3685,7 @@ func (x *ReportTrialSearcherEarlyExitRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use ReportTrialSearcherEarlyExitRequest.ProtoReflect.Descriptor instead. func (*ReportTrialSearcherEarlyExitRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{57} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{53} } func (x *ReportTrialSearcherEarlyExitRequest) GetTrialId() int32 { @@ -3917,7 +3712,7 @@ type ReportTrialSearcherEarlyExitResponse struct { func (x *ReportTrialSearcherEarlyExitResponse) Reset() { *x = ReportTrialSearcherEarlyExitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[58] + mi := &file_determined_api_v1_trial_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3930,7 +3725,7 @@ func (x *ReportTrialSearcherEarlyExitResponse) String() string { func (*ReportTrialSearcherEarlyExitResponse) ProtoMessage() {} func (x *ReportTrialSearcherEarlyExitResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[58] + mi := &file_determined_api_v1_trial_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3943,7 +3738,7 @@ func (x *ReportTrialSearcherEarlyExitResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use ReportTrialSearcherEarlyExitResponse.ProtoReflect.Descriptor instead. func (*ReportTrialSearcherEarlyExitResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{58} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{54} } // For bookkeeping, updates the progress of the trial as a percent torwards @@ -3966,7 +3761,7 @@ type ReportTrialProgressRequest struct { func (x *ReportTrialProgressRequest) Reset() { *x = ReportTrialProgressRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[59] + mi := &file_determined_api_v1_trial_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3979,7 +3774,7 @@ func (x *ReportTrialProgressRequest) String() string { func (*ReportTrialProgressRequest) ProtoMessage() {} func (x *ReportTrialProgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[59] + mi := &file_determined_api_v1_trial_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3992,7 +3787,7 @@ func (x *ReportTrialProgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialProgressRequest.ProtoReflect.Descriptor instead. func (*ReportTrialProgressRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{59} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{55} } func (x *ReportTrialProgressRequest) GetTrialId() int32 { @@ -4026,7 +3821,7 @@ type ReportTrialProgressResponse struct { func (x *ReportTrialProgressResponse) Reset() { *x = ReportTrialProgressResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[60] + mi := &file_determined_api_v1_trial_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4039,7 +3834,7 @@ func (x *ReportTrialProgressResponse) String() string { func (*ReportTrialProgressResponse) ProtoMessage() {} func (x *ReportTrialProgressResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[60] + mi := &file_determined_api_v1_trial_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4052,7 +3847,7 @@ func (x *ReportTrialProgressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialProgressResponse.ProtoReflect.Descriptor instead. func (*ReportTrialProgressResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{60} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{56} } // Persist the given metrics for the trial. @@ -4070,7 +3865,7 @@ type ReportTrialMetricsRequest struct { func (x *ReportTrialMetricsRequest) Reset() { *x = ReportTrialMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[61] + mi := &file_determined_api_v1_trial_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4083,7 +3878,7 @@ func (x *ReportTrialMetricsRequest) String() string { func (*ReportTrialMetricsRequest) ProtoMessage() {} func (x *ReportTrialMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[61] + mi := &file_determined_api_v1_trial_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4096,7 +3891,7 @@ func (x *ReportTrialMetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialMetricsRequest.ProtoReflect.Descriptor instead. func (*ReportTrialMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{61} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{57} } func (x *ReportTrialMetricsRequest) GetMetrics() *trialv1.TrialMetrics { @@ -4123,7 +3918,7 @@ type ReportTrialMetricsResponse struct { func (x *ReportTrialMetricsResponse) Reset() { *x = ReportTrialMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[62] + mi := &file_determined_api_v1_trial_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4136,7 +3931,7 @@ func (x *ReportTrialMetricsResponse) String() string { func (*ReportTrialMetricsResponse) ProtoMessage() {} func (x *ReportTrialMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[62] + mi := &file_determined_api_v1_trial_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4149,7 +3944,7 @@ func (x *ReportTrialMetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialMetricsResponse.ProtoReflect.Descriptor instead. func (*ReportTrialMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{62} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{58} } // Persist the given training metrics for the trial. @@ -4165,7 +3960,7 @@ type ReportTrialTrainingMetricsRequest struct { func (x *ReportTrialTrainingMetricsRequest) Reset() { *x = ReportTrialTrainingMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[63] + mi := &file_determined_api_v1_trial_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4178,7 +3973,7 @@ func (x *ReportTrialTrainingMetricsRequest) String() string { func (*ReportTrialTrainingMetricsRequest) ProtoMessage() {} func (x *ReportTrialTrainingMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[63] + mi := &file_determined_api_v1_trial_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4191,7 +3986,7 @@ func (x *ReportTrialTrainingMetricsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ReportTrialTrainingMetricsRequest.ProtoReflect.Descriptor instead. func (*ReportTrialTrainingMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{63} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{59} } func (x *ReportTrialTrainingMetricsRequest) GetTrainingMetrics() *trialv1.TrialMetrics { @@ -4211,7 +4006,7 @@ type ReportTrialTrainingMetricsResponse struct { func (x *ReportTrialTrainingMetricsResponse) Reset() { *x = ReportTrialTrainingMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[64] + mi := &file_determined_api_v1_trial_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4224,7 +4019,7 @@ func (x *ReportTrialTrainingMetricsResponse) String() string { func (*ReportTrialTrainingMetricsResponse) ProtoMessage() {} func (x *ReportTrialTrainingMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[64] + mi := &file_determined_api_v1_trial_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4237,7 +4032,7 @@ func (x *ReportTrialTrainingMetricsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ReportTrialTrainingMetricsResponse.ProtoReflect.Descriptor instead. func (*ReportTrialTrainingMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{64} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{60} } // Persist the given validation metrics for the trial. @@ -4253,7 +4048,7 @@ type ReportTrialValidationMetricsRequest struct { func (x *ReportTrialValidationMetricsRequest) Reset() { *x = ReportTrialValidationMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[65] + mi := &file_determined_api_v1_trial_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4266,7 +4061,7 @@ func (x *ReportTrialValidationMetricsRequest) String() string { func (*ReportTrialValidationMetricsRequest) ProtoMessage() {} func (x *ReportTrialValidationMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[65] + mi := &file_determined_api_v1_trial_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4279,7 +4074,7 @@ func (x *ReportTrialValidationMetricsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use ReportTrialValidationMetricsRequest.ProtoReflect.Descriptor instead. func (*ReportTrialValidationMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{65} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{61} } func (x *ReportTrialValidationMetricsRequest) GetValidationMetrics() *trialv1.TrialMetrics { @@ -4299,7 +4094,7 @@ type ReportTrialValidationMetricsResponse struct { func (x *ReportTrialValidationMetricsResponse) Reset() { *x = ReportTrialValidationMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[66] + mi := &file_determined_api_v1_trial_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4312,7 +4107,7 @@ func (x *ReportTrialValidationMetricsResponse) String() string { func (*ReportTrialValidationMetricsResponse) ProtoMessage() {} func (x *ReportTrialValidationMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[66] + mi := &file_determined_api_v1_trial_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4325,7 +4120,7 @@ func (x *ReportTrialValidationMetricsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use ReportTrialValidationMetricsResponse.ProtoReflect.Descriptor instead. func (*ReportTrialValidationMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{66} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{62} } // Partially update the trial metadata. @@ -4343,7 +4138,7 @@ type PostTrialRunnerMetadataRequest struct { func (x *PostTrialRunnerMetadataRequest) Reset() { *x = PostTrialRunnerMetadataRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[67] + mi := &file_determined_api_v1_trial_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4356,7 +4151,7 @@ func (x *PostTrialRunnerMetadataRequest) String() string { func (*PostTrialRunnerMetadataRequest) ProtoMessage() {} func (x *PostTrialRunnerMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[67] + mi := &file_determined_api_v1_trial_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4369,7 +4164,7 @@ func (x *PostTrialRunnerMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PostTrialRunnerMetadataRequest.ProtoReflect.Descriptor instead. func (*PostTrialRunnerMetadataRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{67} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{63} } func (x *PostTrialRunnerMetadataRequest) GetTrialId() int32 { @@ -4396,7 +4191,7 @@ type PostTrialRunnerMetadataResponse struct { func (x *PostTrialRunnerMetadataResponse) Reset() { *x = PostTrialRunnerMetadataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[68] + mi := &file_determined_api_v1_trial_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4409,7 +4204,7 @@ func (x *PostTrialRunnerMetadataResponse) String() string { func (*PostTrialRunnerMetadataResponse) ProtoMessage() {} func (x *PostTrialRunnerMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[68] + mi := &file_determined_api_v1_trial_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4422,7 +4217,7 @@ func (x *PostTrialRunnerMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PostTrialRunnerMetadataResponse.ProtoReflect.Descriptor instead. func (*PostTrialRunnerMetadataResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{68} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{64} } // Stream training metrics. @@ -4440,7 +4235,7 @@ type GetMetricsRequest struct { func (x *GetMetricsRequest) Reset() { *x = GetMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[69] + mi := &file_determined_api_v1_trial_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4453,7 +4248,7 @@ func (x *GetMetricsRequest) String() string { func (*GetMetricsRequest) ProtoMessage() {} func (x *GetMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[69] + mi := &file_determined_api_v1_trial_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4466,7 +4261,7 @@ func (x *GetMetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMetricsRequest.ProtoReflect.Descriptor instead. func (*GetMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{69} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{65} } func (x *GetMetricsRequest) GetTrialIds() []int32 { @@ -4496,7 +4291,7 @@ type GetMetricsResponse struct { func (x *GetMetricsResponse) Reset() { *x = GetMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[70] + mi := &file_determined_api_v1_trial_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4509,7 +4304,7 @@ func (x *GetMetricsResponse) String() string { func (*GetMetricsResponse) ProtoMessage() {} func (x *GetMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[70] + mi := &file_determined_api_v1_trial_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4522,7 +4317,7 @@ func (x *GetMetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMetricsResponse.ProtoReflect.Descriptor instead. func (*GetMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{70} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{66} } func (x *GetMetricsResponse) GetMetrics() []*trialv1.MetricsReport { @@ -4545,7 +4340,7 @@ type GetTrainingMetricsRequest struct { func (x *GetTrainingMetricsRequest) Reset() { *x = GetTrainingMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[71] + mi := &file_determined_api_v1_trial_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4558,7 +4353,7 @@ func (x *GetTrainingMetricsRequest) String() string { func (*GetTrainingMetricsRequest) ProtoMessage() {} func (x *GetTrainingMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[71] + mi := &file_determined_api_v1_trial_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4571,7 +4366,7 @@ func (x *GetTrainingMetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTrainingMetricsRequest.ProtoReflect.Descriptor instead. func (*GetTrainingMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{71} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{67} } func (x *GetTrainingMetricsRequest) GetTrialIds() []int32 { @@ -4594,7 +4389,7 @@ type GetTrainingMetricsResponse struct { func (x *GetTrainingMetricsResponse) Reset() { *x = GetTrainingMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[72] + mi := &file_determined_api_v1_trial_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4607,7 +4402,7 @@ func (x *GetTrainingMetricsResponse) String() string { func (*GetTrainingMetricsResponse) ProtoMessage() {} func (x *GetTrainingMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[72] + mi := &file_determined_api_v1_trial_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4620,7 +4415,7 @@ func (x *GetTrainingMetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTrainingMetricsResponse.ProtoReflect.Descriptor instead. func (*GetTrainingMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{72} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{68} } func (x *GetTrainingMetricsResponse) GetMetrics() []*trialv1.MetricsReport { @@ -4643,7 +4438,7 @@ type GetValidationMetricsRequest struct { func (x *GetValidationMetricsRequest) Reset() { *x = GetValidationMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[73] + mi := &file_determined_api_v1_trial_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4656,7 +4451,7 @@ func (x *GetValidationMetricsRequest) String() string { func (*GetValidationMetricsRequest) ProtoMessage() {} func (x *GetValidationMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[73] + mi := &file_determined_api_v1_trial_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4669,7 +4464,7 @@ func (x *GetValidationMetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValidationMetricsRequest.ProtoReflect.Descriptor instead. func (*GetValidationMetricsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{73} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{69} } func (x *GetValidationMetricsRequest) GetTrialIds() []int32 { @@ -4692,7 +4487,7 @@ type GetValidationMetricsResponse struct { func (x *GetValidationMetricsResponse) Reset() { *x = GetValidationMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[74] + mi := &file_determined_api_v1_trial_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4705,7 +4500,7 @@ func (x *GetValidationMetricsResponse) String() string { func (*GetValidationMetricsResponse) ProtoMessage() {} func (x *GetValidationMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[74] + mi := &file_determined_api_v1_trial_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4718,7 +4513,7 @@ func (x *GetValidationMetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValidationMetricsResponse.ProtoReflect.Descriptor instead. func (*GetValidationMetricsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{74} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{70} } func (x *GetValidationMetricsResponse) GetMetrics() []*trialv1.MetricsReport { @@ -4745,7 +4540,7 @@ type CreateTrialRequest struct { func (x *CreateTrialRequest) Reset() { *x = CreateTrialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[75] + mi := &file_determined_api_v1_trial_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4758,7 +4553,7 @@ func (x *CreateTrialRequest) String() string { func (*CreateTrialRequest) ProtoMessage() {} func (x *CreateTrialRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[75] + mi := &file_determined_api_v1_trial_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4771,7 +4566,7 @@ func (x *CreateTrialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTrialRequest.ProtoReflect.Descriptor instead. func (*CreateTrialRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{75} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{71} } func (x *CreateTrialRequest) GetExperimentId() int32 { @@ -4808,7 +4603,7 @@ type CreateTrialResponse struct { func (x *CreateTrialResponse) Reset() { *x = CreateTrialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[76] + mi := &file_determined_api_v1_trial_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4821,7 +4616,7 @@ func (x *CreateTrialResponse) String() string { func (*CreateTrialResponse) ProtoMessage() {} func (x *CreateTrialResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[76] + mi := &file_determined_api_v1_trial_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4834,7 +4629,7 @@ func (x *CreateTrialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTrialResponse.ProtoReflect.Descriptor instead. func (*CreateTrialResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{76} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{72} } func (x *CreateTrialResponse) GetTrial() *trialv1.Trial { @@ -4859,7 +4654,7 @@ type PutTrialRequest struct { func (x *PutTrialRequest) Reset() { *x = PutTrialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[77] + mi := &file_determined_api_v1_trial_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4872,7 +4667,7 @@ func (x *PutTrialRequest) String() string { func (*PutTrialRequest) ProtoMessage() {} func (x *PutTrialRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[77] + mi := &file_determined_api_v1_trial_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4885,7 +4680,7 @@ func (x *PutTrialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PutTrialRequest.ProtoReflect.Descriptor instead. func (*PutTrialRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{77} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{73} } func (x *PutTrialRequest) GetCreateTrialRequest() *CreateTrialRequest { @@ -4915,7 +4710,7 @@ type PutTrialResponse struct { func (x *PutTrialResponse) Reset() { *x = PutTrialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[78] + mi := &file_determined_api_v1_trial_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4928,7 +4723,7 @@ func (x *PutTrialResponse) String() string { func (*PutTrialResponse) ProtoMessage() {} func (x *PutTrialResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[78] + mi := &file_determined_api_v1_trial_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4941,7 +4736,7 @@ func (x *PutTrialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PutTrialResponse.ProtoReflect.Descriptor instead. func (*PutTrialResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{78} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{74} } func (x *PutTrialResponse) GetTrial() *trialv1.Trial { @@ -4966,7 +4761,7 @@ type PatchTrialRequest struct { func (x *PatchTrialRequest) Reset() { *x = PatchTrialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[79] + mi := &file_determined_api_v1_trial_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4979,7 +4774,7 @@ func (x *PatchTrialRequest) String() string { func (*PatchTrialRequest) ProtoMessage() {} func (x *PatchTrialRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[79] + mi := &file_determined_api_v1_trial_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4992,7 +4787,7 @@ func (x *PatchTrialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PatchTrialRequest.ProtoReflect.Descriptor instead. func (*PatchTrialRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{79} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{75} } func (x *PatchTrialRequest) GetTrialId() int32 { @@ -5022,7 +4817,7 @@ type PatchTrialResponse struct { func (x *PatchTrialResponse) Reset() { *x = PatchTrialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[80] + mi := &file_determined_api_v1_trial_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5035,7 +4830,7 @@ func (x *PatchTrialResponse) String() string { func (*PatchTrialResponse) ProtoMessage() {} func (x *PatchTrialResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[80] + mi := &file_determined_api_v1_trial_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5048,7 +4843,7 @@ func (x *PatchTrialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PatchTrialResponse.ProtoReflect.Descriptor instead. func (*PatchTrialResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{80} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{76} } func (x *PatchTrialResponse) GetTrial() *trialv1.Trial { @@ -5073,7 +4868,7 @@ type StartTrialRequest struct { func (x *StartTrialRequest) Reset() { *x = StartTrialRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[81] + mi := &file_determined_api_v1_trial_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5086,7 +4881,7 @@ func (x *StartTrialRequest) String() string { func (*StartTrialRequest) ProtoMessage() {} func (x *StartTrialRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[81] + mi := &file_determined_api_v1_trial_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5099,7 +4894,7 @@ func (x *StartTrialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartTrialRequest.ProtoReflect.Descriptor instead. func (*StartTrialRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{81} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{77} } func (x *StartTrialRequest) GetTrialId() int32 { @@ -5133,7 +4928,7 @@ type StartTrialResponse struct { func (x *StartTrialResponse) Reset() { *x = StartTrialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[82] + mi := &file_determined_api_v1_trial_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5146,7 +4941,7 @@ func (x *StartTrialResponse) String() string { func (*StartTrialResponse) ProtoMessage() {} func (x *StartTrialResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[82] + mi := &file_determined_api_v1_trial_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5159,7 +4954,7 @@ func (x *StartTrialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartTrialResponse.ProtoReflect.Descriptor instead. func (*StartTrialResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{82} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{78} } func (x *StartTrialResponse) GetTrialRunId() int32 { @@ -5196,7 +4991,7 @@ type ReportTrialSourceInfoRequest struct { func (x *ReportTrialSourceInfoRequest) Reset() { *x = ReportTrialSourceInfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[83] + mi := &file_determined_api_v1_trial_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5209,7 +5004,7 @@ func (x *ReportTrialSourceInfoRequest) String() string { func (*ReportTrialSourceInfoRequest) ProtoMessage() {} func (x *ReportTrialSourceInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[83] + mi := &file_determined_api_v1_trial_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5222,7 +5017,7 @@ func (x *ReportTrialSourceInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialSourceInfoRequest.ProtoReflect.Descriptor instead. func (*ReportTrialSourceInfoRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{83} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{79} } func (x *ReportTrialSourceInfoRequest) GetTrialSourceInfo() *trialv1.TrialSourceInfo { @@ -5247,7 +5042,7 @@ type ReportTrialSourceInfoResponse struct { func (x *ReportTrialSourceInfoResponse) Reset() { *x = ReportTrialSourceInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_trial_proto_msgTypes[84] + mi := &file_determined_api_v1_trial_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5260,7 +5055,7 @@ func (x *ReportTrialSourceInfoResponse) String() string { func (*ReportTrialSourceInfoResponse) ProtoMessage() {} func (x *ReportTrialSourceInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_trial_proto_msgTypes[84] + mi := &file_determined_api_v1_trial_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5273,7 +5068,7 @@ func (x *ReportTrialSourceInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTrialSourceInfoResponse.ProtoReflect.Descriptor instead. func (*ReportTrialSourceInfoResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{84} + return file_determined_api_v1_trial_proto_rawDescGZIP(), []int{80} } func (x *ReportTrialSourceInfoResponse) GetTrialId() int32 { @@ -5877,227 +5672,197 @@ var file_determined_api_v1_trial_proto_rawDesc = []byte{ 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x0c, 0x92, 0x41, 0x09, - 0x0a, 0x07, 0xd2, 0x01, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x27, 0x47, 0x65, 0x74, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x3a, - 0x10, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x22, 0x82, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xd2, 0x01, 0x0a, 0x26, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x0a, 0x07, 0xd2, 0x01, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9f, 0x01, 0x0a, 0x23, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x72, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x69, 0x0a, 0x13, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x22, 0x92, 0x41, 0x1f, 0x0a, 0x1d, 0xd2, 0x01, - 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0x29, 0x0a, 0x27, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x23, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, 0x61, - 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x65, 0x61, 0x72, - 0x6c, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, - 0x69, 0x74, 0x52, 0x09, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x3a, 0x19, 0x92, - 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, - 0x01, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x26, 0x0a, 0x24, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x45, - 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x87, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x52, 0x61, 0x77, 0x3a, 0x1b, 0x92, - 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, - 0x01, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x19, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x17, 0x92, 0x41, 0x14, 0x0a, - 0x12, 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0xd2, 0x01, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0a, + 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x45, 0x61, 0x72, 0x6c, + 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x09, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, + 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0xd2, 0x01, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x26, 0x0a, 0x24, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x65, 0x72, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, + 0x72, 0x61, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x52, 0x61, 0x77, + 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0xd2, 0x01, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x1d, 0x0a, + 0x1b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x87, 0x01, 0x0a, + 0x19, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x17, 0x92, + 0x41, 0x14, 0x0a, 0x12, 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0xd2, 0x01, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x21, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x18, 0x92, 0x41, 0x15, 0x0a, 0x13, 0xd2, + 0x01, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x22, 0x24, 0x0a, 0x22, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x18, 0x92, 0x41, 0x15, 0x0a, 0x13, 0xd2, 0x01, 0x10, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, - 0x24, 0x0a, 0x22, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x72, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x23, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, - 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x11, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, - 0x1a, 0x92, 0x41, 0x17, 0x0a, 0x15, 0xd2, 0x01, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x26, 0x0a, 0x24, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x1e, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, - 0x64, 0x12, 0x44, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, - 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, - 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x1f, 0x50, 0x6f, 0x73, 0x74, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, - 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, - 0x0f, 0x92, 0x41, 0x0c, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, - 0x52, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0xd2, 0x01, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x19, 0x92, - 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, - 0xd2, 0x01, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, - 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x0f, 0x92, 0x41, - 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x4b, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, - 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6b, 0x0a, 0x1a, 0x47, 0x65, - 0x74, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x4d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x49, 0x64, 0x73, 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6d, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x23, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x50, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x3a, 0x1a, 0x92, 0x41, 0x17, 0x0a, 0x15, 0xd2, 0x01, 0x12, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x26, + 0x0a, 0x24, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x68, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x64, 0x22, 0x56, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, 0x92, 0x41, 0x0a, - 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x96, 0x01, 0x0a, 0x0f, 0x50, - 0x75, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, - 0x0a, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x29, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x10, 0x50, 0x75, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x1e, 0x50, 0x6f, 0x73, 0x74, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, - 0x61, 0x6c, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0xd2, 0x01, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, - 0x3a, 0x10, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x55, 0x0a, 0x12, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x22, 0x58, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x10, 0x92, 0x41, 0x0d, - 0x0a, 0x0b, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x22, 0xcf, 0x01, - 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x75, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x65, 0x70, - 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x3a, 0x26, 0x92, 0x41, 0x23, 0x0a, 0x21, 0xd2, 0x01, 0x0c, 0x74, 0x72, 0x69, 0x61, 0x6c, - 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, - 0x8b, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x50, 0x0a, 0x11, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, + 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, + 0x16, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x1f, 0x50, 0x6f, 0x73, 0x74, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2c, 0x0a, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x05, 0x42, 0x0f, 0x92, 0x41, 0x0c, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x73, 0x52, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x21, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, + 0x08, 0xd2, 0x01, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x73, 0xd2, 0x01, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x63, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, + 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x22, 0x4b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, + 0x0c, 0xd2, 0x01, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6b, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, + 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x4d, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, 0x09, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x22, 0x6d, 0x0a, 0x1c, 0x47, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, + 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, + 0x68, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x6e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x6e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x11, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x87, 0x01, - 0x0a, 0x1d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x55, - 0x75, 0x69, 0x64, 0x3a, 0x22, 0x92, 0x41, 0x1f, 0x0a, 0x1d, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x96, 0x01, + 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x10, 0x50, 0x75, 0x74, 0x54, 0x72, 0x69, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x81, 0x01, 0x0a, 0x11, + 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x88, 0x01, 0x01, 0x3a, 0x10, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x55, 0x0a, 0x12, 0x50, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x52, 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, + 0x05, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x58, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, + 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, + 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x3a, 0x10, + 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0xd2, 0x01, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x22, 0xcf, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, + 0x72, 0x69, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x11, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x73, + 0x74, 0x65, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x74, 0x65, 0x70, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x3a, 0x26, 0x92, 0x41, 0x23, 0x0a, 0x21, 0xd2, 0x01, 0x0c, 0x74, 0x72, + 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0f, 0x73, 0x74, 0x65, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x14, 0x0a, 0x12, + 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x22, 0x8b, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, + 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x74, 0x72, 0x69, 0x61, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x11, 0x74, + 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x22, 0x87, 0x01, 0x0a, 0x1d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x27, 0x0a, + 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x55, 0x75, 0x69, 0x64, 0x3a, 0x22, 0x92, 0x41, 0x1f, 0x0a, 0x1d, 0xd2, 0x01, 0x08, + 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6113,193 +5878,185 @@ func file_determined_api_v1_trial_proto_rawDescGZIP() []byte { } var file_determined_api_v1_trial_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_determined_api_v1_trial_proto_msgTypes = make([]protoimpl.MessageInfo, 85) +var file_determined_api_v1_trial_proto_msgTypes = make([]protoimpl.MessageInfo, 81) var file_determined_api_v1_trial_proto_goTypes = []interface{}{ - (TrialSorter_Namespace)(0), // 0: determined.api.v1.TrialSorter.Namespace - (GetExperimentTrialsRequest_SortBy)(0), // 1: determined.api.v1.GetExperimentTrialsRequest.SortBy - (GetTrialWorkloadsRequest_FilterOption)(0), // 2: determined.api.v1.GetTrialWorkloadsRequest.FilterOption - (*DownsampledMetrics)(nil), // 3: determined.api.v1.DownsampledMetrics - (*WorkloadContainer)(nil), // 4: determined.api.v1.WorkloadContainer - (*ColumnFilter)(nil), // 5: determined.api.v1.ColumnFilter - (*TrialTag)(nil), // 6: determined.api.v1.TrialTag - (*TrialSorter)(nil), // 7: determined.api.v1.TrialSorter - (*TrialLogsRequest)(nil), // 8: determined.api.v1.TrialLogsRequest - (*TrialLogsResponse)(nil), // 9: determined.api.v1.TrialLogsResponse - (*TrialLogsFieldsRequest)(nil), // 10: determined.api.v1.TrialLogsFieldsRequest - (*TrialLogsFieldsResponse)(nil), // 11: determined.api.v1.TrialLogsFieldsResponse - (*GetTrialCheckpointsRequest)(nil), // 12: determined.api.v1.GetTrialCheckpointsRequest - (*GetTrialCheckpointsResponse)(nil), // 13: determined.api.v1.GetTrialCheckpointsResponse - (*KillTrialRequest)(nil), // 14: determined.api.v1.KillTrialRequest - (*KillTrialResponse)(nil), // 15: determined.api.v1.KillTrialResponse - (*GetExperimentTrialsRequest)(nil), // 16: determined.api.v1.GetExperimentTrialsRequest - (*GetExperimentTrialsResponse)(nil), // 17: determined.api.v1.GetExperimentTrialsResponse - (*GetTrialRemainingLogRetentionDaysRequest)(nil), // 18: determined.api.v1.GetTrialRemainingLogRetentionDaysRequest - (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 19: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse - (*GetTrialRequest)(nil), // 20: determined.api.v1.GetTrialRequest - (*GetTrialResponse)(nil), // 21: determined.api.v1.GetTrialResponse - (*GetTrialByExternalIDRequest)(nil), // 22: determined.api.v1.GetTrialByExternalIDRequest - (*GetTrialByExternalIDResponse)(nil), // 23: determined.api.v1.GetTrialByExternalIDResponse - (*GetTrialWorkloadsRequest)(nil), // 24: determined.api.v1.GetTrialWorkloadsRequest - (*GetTrialWorkloadsResponse)(nil), // 25: determined.api.v1.GetTrialWorkloadsResponse - (*GetTrialProfilerMetricsRequest)(nil), // 26: determined.api.v1.GetTrialProfilerMetricsRequest - (*GetTrialProfilerMetricsResponse)(nil), // 27: determined.api.v1.GetTrialProfilerMetricsResponse - (*GetTrialProfilerAvailableSeriesRequest)(nil), // 28: determined.api.v1.GetTrialProfilerAvailableSeriesRequest - (*GetTrialProfilerAvailableSeriesResponse)(nil), // 29: determined.api.v1.GetTrialProfilerAvailableSeriesResponse - (*PostTrialProfilerMetricsBatchRequest)(nil), // 30: determined.api.v1.PostTrialProfilerMetricsBatchRequest - (*PostTrialProfilerMetricsBatchResponse)(nil), // 31: determined.api.v1.PostTrialProfilerMetricsBatchResponse - (*ComparableTrial)(nil), // 32: determined.api.v1.ComparableTrial - (*CompareTrialsRequest)(nil), // 33: determined.api.v1.CompareTrialsRequest - (*PutTrialRetainLogsRequest)(nil), // 34: determined.api.v1.PutTrialRetainLogsRequest - (*PutTrialRetainLogsResponse)(nil), // 35: determined.api.v1.PutTrialRetainLogsResponse - (*CompareTrialsResponse)(nil), // 36: determined.api.v1.CompareTrialsResponse - (*AllocationPreemptionSignalRequest)(nil), // 37: determined.api.v1.AllocationPreemptionSignalRequest - (*AllocationPreemptionSignalResponse)(nil), // 38: determined.api.v1.AllocationPreemptionSignalResponse - (*AckAllocationPreemptionSignalRequest)(nil), // 39: determined.api.v1.AckAllocationPreemptionSignalRequest - (*AllocationPendingPreemptionSignalRequest)(nil), // 40: determined.api.v1.AllocationPendingPreemptionSignalRequest - (*AllocationPendingPreemptionSignalResponse)(nil), // 41: determined.api.v1.AllocationPendingPreemptionSignalResponse - (*AckAllocationPreemptionSignalResponse)(nil), // 42: determined.api.v1.AckAllocationPreemptionSignalResponse - (*MarkAllocationResourcesDaemonRequest)(nil), // 43: determined.api.v1.MarkAllocationResourcesDaemonRequest - (*MarkAllocationResourcesDaemonResponse)(nil), // 44: determined.api.v1.MarkAllocationResourcesDaemonResponse - (*AllocationRendezvousInfoRequest)(nil), // 45: determined.api.v1.AllocationRendezvousInfoRequest - (*AllocationRendezvousInfoResponse)(nil), // 46: determined.api.v1.AllocationRendezvousInfoResponse - (*PostAllocationProxyAddressRequest)(nil), // 47: determined.api.v1.PostAllocationProxyAddressRequest - (*PostAllocationProxyAddressResponse)(nil), // 48: determined.api.v1.PostAllocationProxyAddressResponse - (*PostAllocationAcceleratorDataRequest)(nil), // 49: determined.api.v1.PostAllocationAcceleratorDataRequest - (*PostAllocationAcceleratorDataResponse)(nil), // 50: determined.api.v1.PostAllocationAcceleratorDataResponse - (*AcceleratorData)(nil), // 51: determined.api.v1.AcceleratorData - (*AllocationAllGatherRequest)(nil), // 52: determined.api.v1.AllocationAllGatherRequest - (*AllocationAllGatherResponse)(nil), // 53: determined.api.v1.AllocationAllGatherResponse - (*NotifyContainerRunningRequest)(nil), // 54: determined.api.v1.NotifyContainerRunningRequest - (*NotifyContainerRunningResponse)(nil), // 55: determined.api.v1.NotifyContainerRunningResponse - (*GetCurrentTrialSearcherOperationRequest)(nil), // 56: determined.api.v1.GetCurrentTrialSearcherOperationRequest - (*GetCurrentTrialSearcherOperationResponse)(nil), // 57: determined.api.v1.GetCurrentTrialSearcherOperationResponse - (*CompleteTrialSearcherValidationRequest)(nil), // 58: determined.api.v1.CompleteTrialSearcherValidationRequest - (*CompleteTrialSearcherValidationResponse)(nil), // 59: determined.api.v1.CompleteTrialSearcherValidationResponse - (*ReportTrialSearcherEarlyExitRequest)(nil), // 60: determined.api.v1.ReportTrialSearcherEarlyExitRequest - (*ReportTrialSearcherEarlyExitResponse)(nil), // 61: determined.api.v1.ReportTrialSearcherEarlyExitResponse - (*ReportTrialProgressRequest)(nil), // 62: determined.api.v1.ReportTrialProgressRequest - (*ReportTrialProgressResponse)(nil), // 63: determined.api.v1.ReportTrialProgressResponse - (*ReportTrialMetricsRequest)(nil), // 64: determined.api.v1.ReportTrialMetricsRequest - (*ReportTrialMetricsResponse)(nil), // 65: determined.api.v1.ReportTrialMetricsResponse - (*ReportTrialTrainingMetricsRequest)(nil), // 66: determined.api.v1.ReportTrialTrainingMetricsRequest - (*ReportTrialTrainingMetricsResponse)(nil), // 67: determined.api.v1.ReportTrialTrainingMetricsResponse - (*ReportTrialValidationMetricsRequest)(nil), // 68: determined.api.v1.ReportTrialValidationMetricsRequest - (*ReportTrialValidationMetricsResponse)(nil), // 69: determined.api.v1.ReportTrialValidationMetricsResponse - (*PostTrialRunnerMetadataRequest)(nil), // 70: determined.api.v1.PostTrialRunnerMetadataRequest - (*PostTrialRunnerMetadataResponse)(nil), // 71: determined.api.v1.PostTrialRunnerMetadataResponse - (*GetMetricsRequest)(nil), // 72: determined.api.v1.GetMetricsRequest - (*GetMetricsResponse)(nil), // 73: determined.api.v1.GetMetricsResponse - (*GetTrainingMetricsRequest)(nil), // 74: determined.api.v1.GetTrainingMetricsRequest - (*GetTrainingMetricsResponse)(nil), // 75: determined.api.v1.GetTrainingMetricsResponse - (*GetValidationMetricsRequest)(nil), // 76: determined.api.v1.GetValidationMetricsRequest - (*GetValidationMetricsResponse)(nil), // 77: determined.api.v1.GetValidationMetricsResponse - (*CreateTrialRequest)(nil), // 78: determined.api.v1.CreateTrialRequest - (*CreateTrialResponse)(nil), // 79: determined.api.v1.CreateTrialResponse - (*PutTrialRequest)(nil), // 80: determined.api.v1.PutTrialRequest - (*PutTrialResponse)(nil), // 81: determined.api.v1.PutTrialResponse - (*PatchTrialRequest)(nil), // 82: determined.api.v1.PatchTrialRequest - (*PatchTrialResponse)(nil), // 83: determined.api.v1.PatchTrialResponse - (*StartTrialRequest)(nil), // 84: determined.api.v1.StartTrialRequest - (*StartTrialResponse)(nil), // 85: determined.api.v1.StartTrialResponse - (*ReportTrialSourceInfoRequest)(nil), // 86: determined.api.v1.ReportTrialSourceInfoRequest - (*ReportTrialSourceInfoResponse)(nil), // 87: determined.api.v1.ReportTrialSourceInfoResponse - (*DataPoint)(nil), // 88: determined.api.v1.DataPoint - (MetricType)(0), // 89: determined.api.v1.MetricType - (*trialv1.MetricsWorkload)(nil), // 90: determined.trial.v1.MetricsWorkload - (*trialv1.CheckpointWorkload)(nil), // 91: determined.trial.v1.CheckpointWorkload - (*commonv1.DoubleFieldFilter)(nil), // 92: determined.common.v1.DoubleFieldFilter - (OrderBy)(0), // 93: determined.api.v1.OrderBy - (logv1.LogLevel)(0), // 94: determined.log.v1.LogLevel - (*timestamp.Timestamp)(nil), // 95: google.protobuf.Timestamp - (checkpointv1.SortBy)(0), // 96: determined.checkpoint.v1.SortBy - (checkpointv1.State)(0), // 97: determined.checkpoint.v1.State - (*checkpointv1.Checkpoint)(nil), // 98: determined.checkpoint.v1.Checkpoint - (*Pagination)(nil), // 99: determined.api.v1.Pagination - (experimentv1.State)(0), // 100: determined.experiment.v1.State - (*trialv1.Trial)(nil), // 101: determined.trial.v1.Trial - (*trialv1.TrialProfilerMetricLabels)(nil), // 102: determined.trial.v1.TrialProfilerMetricLabels - (*trialv1.TrialProfilerMetricsBatch)(nil), // 103: determined.trial.v1.TrialProfilerMetricsBatch - (*commonv1.PolymorphicFilter)(nil), // 104: determined.common.v1.PolymorphicFilter - (*trialv1.RendezvousInfo)(nil), // 105: determined.trial.v1.RendezvousInfo - (*_struct.Struct)(nil), // 106: google.protobuf.Struct - (*experimentv1.TrialOperation)(nil), // 107: determined.experiment.v1.TrialOperation - (*experimentv1.CompleteValidateAfterOperation)(nil), // 108: determined.experiment.v1.CompleteValidateAfterOperation - (*trialv1.TrialEarlyExit)(nil), // 109: determined.trial.v1.TrialEarlyExit - (*trialv1.TrialMetrics)(nil), // 110: determined.trial.v1.TrialMetrics - (*trialv1.TrialRunnerMetadata)(nil), // 111: determined.trial.v1.TrialRunnerMetadata - (*trialv1.MetricsReport)(nil), // 112: determined.trial.v1.MetricsReport - (trialv1.State)(0), // 113: determined.trial.v1.State - (*trialv1.TrialSourceInfo)(nil), // 114: determined.trial.v1.TrialSourceInfo + (TrialSorter_Namespace)(0), // 0: determined.api.v1.TrialSorter.Namespace + (GetExperimentTrialsRequest_SortBy)(0), // 1: determined.api.v1.GetExperimentTrialsRequest.SortBy + (GetTrialWorkloadsRequest_FilterOption)(0), // 2: determined.api.v1.GetTrialWorkloadsRequest.FilterOption + (*DownsampledMetrics)(nil), // 3: determined.api.v1.DownsampledMetrics + (*WorkloadContainer)(nil), // 4: determined.api.v1.WorkloadContainer + (*ColumnFilter)(nil), // 5: determined.api.v1.ColumnFilter + (*TrialTag)(nil), // 6: determined.api.v1.TrialTag + (*TrialSorter)(nil), // 7: determined.api.v1.TrialSorter + (*TrialLogsRequest)(nil), // 8: determined.api.v1.TrialLogsRequest + (*TrialLogsResponse)(nil), // 9: determined.api.v1.TrialLogsResponse + (*TrialLogsFieldsRequest)(nil), // 10: determined.api.v1.TrialLogsFieldsRequest + (*TrialLogsFieldsResponse)(nil), // 11: determined.api.v1.TrialLogsFieldsResponse + (*GetTrialCheckpointsRequest)(nil), // 12: determined.api.v1.GetTrialCheckpointsRequest + (*GetTrialCheckpointsResponse)(nil), // 13: determined.api.v1.GetTrialCheckpointsResponse + (*KillTrialRequest)(nil), // 14: determined.api.v1.KillTrialRequest + (*KillTrialResponse)(nil), // 15: determined.api.v1.KillTrialResponse + (*GetExperimentTrialsRequest)(nil), // 16: determined.api.v1.GetExperimentTrialsRequest + (*GetExperimentTrialsResponse)(nil), // 17: determined.api.v1.GetExperimentTrialsResponse + (*GetTrialRemainingLogRetentionDaysRequest)(nil), // 18: determined.api.v1.GetTrialRemainingLogRetentionDaysRequest + (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 19: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse + (*GetTrialRequest)(nil), // 20: determined.api.v1.GetTrialRequest + (*GetTrialResponse)(nil), // 21: determined.api.v1.GetTrialResponse + (*GetTrialByExternalIDRequest)(nil), // 22: determined.api.v1.GetTrialByExternalIDRequest + (*GetTrialByExternalIDResponse)(nil), // 23: determined.api.v1.GetTrialByExternalIDResponse + (*GetTrialWorkloadsRequest)(nil), // 24: determined.api.v1.GetTrialWorkloadsRequest + (*GetTrialWorkloadsResponse)(nil), // 25: determined.api.v1.GetTrialWorkloadsResponse + (*GetTrialProfilerMetricsRequest)(nil), // 26: determined.api.v1.GetTrialProfilerMetricsRequest + (*GetTrialProfilerMetricsResponse)(nil), // 27: determined.api.v1.GetTrialProfilerMetricsResponse + (*GetTrialProfilerAvailableSeriesRequest)(nil), // 28: determined.api.v1.GetTrialProfilerAvailableSeriesRequest + (*GetTrialProfilerAvailableSeriesResponse)(nil), // 29: determined.api.v1.GetTrialProfilerAvailableSeriesResponse + (*PostTrialProfilerMetricsBatchRequest)(nil), // 30: determined.api.v1.PostTrialProfilerMetricsBatchRequest + (*PostTrialProfilerMetricsBatchResponse)(nil), // 31: determined.api.v1.PostTrialProfilerMetricsBatchResponse + (*ComparableTrial)(nil), // 32: determined.api.v1.ComparableTrial + (*CompareTrialsRequest)(nil), // 33: determined.api.v1.CompareTrialsRequest + (*PutTrialRetainLogsRequest)(nil), // 34: determined.api.v1.PutTrialRetainLogsRequest + (*PutTrialRetainLogsResponse)(nil), // 35: determined.api.v1.PutTrialRetainLogsResponse + (*CompareTrialsResponse)(nil), // 36: determined.api.v1.CompareTrialsResponse + (*AllocationPreemptionSignalRequest)(nil), // 37: determined.api.v1.AllocationPreemptionSignalRequest + (*AllocationPreemptionSignalResponse)(nil), // 38: determined.api.v1.AllocationPreemptionSignalResponse + (*AckAllocationPreemptionSignalRequest)(nil), // 39: determined.api.v1.AckAllocationPreemptionSignalRequest + (*AllocationPendingPreemptionSignalRequest)(nil), // 40: determined.api.v1.AllocationPendingPreemptionSignalRequest + (*AllocationPendingPreemptionSignalResponse)(nil), // 41: determined.api.v1.AllocationPendingPreemptionSignalResponse + (*AckAllocationPreemptionSignalResponse)(nil), // 42: determined.api.v1.AckAllocationPreemptionSignalResponse + (*MarkAllocationResourcesDaemonRequest)(nil), // 43: determined.api.v1.MarkAllocationResourcesDaemonRequest + (*MarkAllocationResourcesDaemonResponse)(nil), // 44: determined.api.v1.MarkAllocationResourcesDaemonResponse + (*AllocationRendezvousInfoRequest)(nil), // 45: determined.api.v1.AllocationRendezvousInfoRequest + (*AllocationRendezvousInfoResponse)(nil), // 46: determined.api.v1.AllocationRendezvousInfoResponse + (*PostAllocationProxyAddressRequest)(nil), // 47: determined.api.v1.PostAllocationProxyAddressRequest + (*PostAllocationProxyAddressResponse)(nil), // 48: determined.api.v1.PostAllocationProxyAddressResponse + (*PostAllocationAcceleratorDataRequest)(nil), // 49: determined.api.v1.PostAllocationAcceleratorDataRequest + (*PostAllocationAcceleratorDataResponse)(nil), // 50: determined.api.v1.PostAllocationAcceleratorDataResponse + (*AcceleratorData)(nil), // 51: determined.api.v1.AcceleratorData + (*AllocationAllGatherRequest)(nil), // 52: determined.api.v1.AllocationAllGatherRequest + (*AllocationAllGatherResponse)(nil), // 53: determined.api.v1.AllocationAllGatherResponse + (*NotifyContainerRunningRequest)(nil), // 54: determined.api.v1.NotifyContainerRunningRequest + (*NotifyContainerRunningResponse)(nil), // 55: determined.api.v1.NotifyContainerRunningResponse + (*ReportTrialSearcherEarlyExitRequest)(nil), // 56: determined.api.v1.ReportTrialSearcherEarlyExitRequest + (*ReportTrialSearcherEarlyExitResponse)(nil), // 57: determined.api.v1.ReportTrialSearcherEarlyExitResponse + (*ReportTrialProgressRequest)(nil), // 58: determined.api.v1.ReportTrialProgressRequest + (*ReportTrialProgressResponse)(nil), // 59: determined.api.v1.ReportTrialProgressResponse + (*ReportTrialMetricsRequest)(nil), // 60: determined.api.v1.ReportTrialMetricsRequest + (*ReportTrialMetricsResponse)(nil), // 61: determined.api.v1.ReportTrialMetricsResponse + (*ReportTrialTrainingMetricsRequest)(nil), // 62: determined.api.v1.ReportTrialTrainingMetricsRequest + (*ReportTrialTrainingMetricsResponse)(nil), // 63: determined.api.v1.ReportTrialTrainingMetricsResponse + (*ReportTrialValidationMetricsRequest)(nil), // 64: determined.api.v1.ReportTrialValidationMetricsRequest + (*ReportTrialValidationMetricsResponse)(nil), // 65: determined.api.v1.ReportTrialValidationMetricsResponse + (*PostTrialRunnerMetadataRequest)(nil), // 66: determined.api.v1.PostTrialRunnerMetadataRequest + (*PostTrialRunnerMetadataResponse)(nil), // 67: determined.api.v1.PostTrialRunnerMetadataResponse + (*GetMetricsRequest)(nil), // 68: determined.api.v1.GetMetricsRequest + (*GetMetricsResponse)(nil), // 69: determined.api.v1.GetMetricsResponse + (*GetTrainingMetricsRequest)(nil), // 70: determined.api.v1.GetTrainingMetricsRequest + (*GetTrainingMetricsResponse)(nil), // 71: determined.api.v1.GetTrainingMetricsResponse + (*GetValidationMetricsRequest)(nil), // 72: determined.api.v1.GetValidationMetricsRequest + (*GetValidationMetricsResponse)(nil), // 73: determined.api.v1.GetValidationMetricsResponse + (*CreateTrialRequest)(nil), // 74: determined.api.v1.CreateTrialRequest + (*CreateTrialResponse)(nil), // 75: determined.api.v1.CreateTrialResponse + (*PutTrialRequest)(nil), // 76: determined.api.v1.PutTrialRequest + (*PutTrialResponse)(nil), // 77: determined.api.v1.PutTrialResponse + (*PatchTrialRequest)(nil), // 78: determined.api.v1.PatchTrialRequest + (*PatchTrialResponse)(nil), // 79: determined.api.v1.PatchTrialResponse + (*StartTrialRequest)(nil), // 80: determined.api.v1.StartTrialRequest + (*StartTrialResponse)(nil), // 81: determined.api.v1.StartTrialResponse + (*ReportTrialSourceInfoRequest)(nil), // 82: determined.api.v1.ReportTrialSourceInfoRequest + (*ReportTrialSourceInfoResponse)(nil), // 83: determined.api.v1.ReportTrialSourceInfoResponse + (*DataPoint)(nil), // 84: determined.api.v1.DataPoint + (MetricType)(0), // 85: determined.api.v1.MetricType + (*trialv1.MetricsWorkload)(nil), // 86: determined.trial.v1.MetricsWorkload + (*trialv1.CheckpointWorkload)(nil), // 87: determined.trial.v1.CheckpointWorkload + (*commonv1.DoubleFieldFilter)(nil), // 88: determined.common.v1.DoubleFieldFilter + (OrderBy)(0), // 89: determined.api.v1.OrderBy + (logv1.LogLevel)(0), // 90: determined.log.v1.LogLevel + (*timestamp.Timestamp)(nil), // 91: google.protobuf.Timestamp + (checkpointv1.SortBy)(0), // 92: determined.checkpoint.v1.SortBy + (checkpointv1.State)(0), // 93: determined.checkpoint.v1.State + (*checkpointv1.Checkpoint)(nil), // 94: determined.checkpoint.v1.Checkpoint + (*Pagination)(nil), // 95: determined.api.v1.Pagination + (experimentv1.State)(0), // 96: determined.experiment.v1.State + (*trialv1.Trial)(nil), // 97: determined.trial.v1.Trial + (*trialv1.TrialProfilerMetricLabels)(nil), // 98: determined.trial.v1.TrialProfilerMetricLabels + (*trialv1.TrialProfilerMetricsBatch)(nil), // 99: determined.trial.v1.TrialProfilerMetricsBatch + (*commonv1.PolymorphicFilter)(nil), // 100: determined.common.v1.PolymorphicFilter + (*trialv1.RendezvousInfo)(nil), // 101: determined.trial.v1.RendezvousInfo + (*_struct.Struct)(nil), // 102: google.protobuf.Struct + (*trialv1.TrialEarlyExit)(nil), // 103: determined.trial.v1.TrialEarlyExit + (*trialv1.TrialMetrics)(nil), // 104: determined.trial.v1.TrialMetrics + (*trialv1.TrialRunnerMetadata)(nil), // 105: determined.trial.v1.TrialRunnerMetadata + (*trialv1.MetricsReport)(nil), // 106: determined.trial.v1.MetricsReport + (trialv1.State)(0), // 107: determined.trial.v1.State + (*trialv1.TrialSourceInfo)(nil), // 108: determined.trial.v1.TrialSourceInfo } var file_determined_api_v1_trial_proto_depIdxs = []int32{ - 88, // 0: determined.api.v1.DownsampledMetrics.data:type_name -> determined.api.v1.DataPoint - 89, // 1: determined.api.v1.DownsampledMetrics.type:type_name -> determined.api.v1.MetricType - 90, // 2: determined.api.v1.WorkloadContainer.training:type_name -> determined.trial.v1.MetricsWorkload - 90, // 3: determined.api.v1.WorkloadContainer.validation:type_name -> determined.trial.v1.MetricsWorkload - 91, // 4: determined.api.v1.WorkloadContainer.checkpoint:type_name -> determined.trial.v1.CheckpointWorkload - 92, // 5: determined.api.v1.ColumnFilter.filter:type_name -> determined.common.v1.DoubleFieldFilter + 84, // 0: determined.api.v1.DownsampledMetrics.data:type_name -> determined.api.v1.DataPoint + 85, // 1: determined.api.v1.DownsampledMetrics.type:type_name -> determined.api.v1.MetricType + 86, // 2: determined.api.v1.WorkloadContainer.training:type_name -> determined.trial.v1.MetricsWorkload + 86, // 3: determined.api.v1.WorkloadContainer.validation:type_name -> determined.trial.v1.MetricsWorkload + 87, // 4: determined.api.v1.WorkloadContainer.checkpoint:type_name -> determined.trial.v1.CheckpointWorkload + 88, // 5: determined.api.v1.ColumnFilter.filter:type_name -> determined.common.v1.DoubleFieldFilter 0, // 6: determined.api.v1.TrialSorter.namespace:type_name -> determined.api.v1.TrialSorter.Namespace - 93, // 7: determined.api.v1.TrialSorter.order_by:type_name -> determined.api.v1.OrderBy - 94, // 8: determined.api.v1.TrialLogsRequest.levels:type_name -> determined.log.v1.LogLevel - 95, // 9: determined.api.v1.TrialLogsRequest.timestamp_before:type_name -> google.protobuf.Timestamp - 95, // 10: determined.api.v1.TrialLogsRequest.timestamp_after:type_name -> google.protobuf.Timestamp - 93, // 11: determined.api.v1.TrialLogsRequest.order_by:type_name -> determined.api.v1.OrderBy - 95, // 12: determined.api.v1.TrialLogsResponse.timestamp:type_name -> google.protobuf.Timestamp - 94, // 13: determined.api.v1.TrialLogsResponse.level:type_name -> determined.log.v1.LogLevel - 96, // 14: determined.api.v1.GetTrialCheckpointsRequest.sort_by_attr:type_name -> determined.checkpoint.v1.SortBy - 93, // 15: determined.api.v1.GetTrialCheckpointsRequest.order_by:type_name -> determined.api.v1.OrderBy - 97, // 16: determined.api.v1.GetTrialCheckpointsRequest.states:type_name -> determined.checkpoint.v1.State - 98, // 17: determined.api.v1.GetTrialCheckpointsResponse.checkpoints:type_name -> determined.checkpoint.v1.Checkpoint - 99, // 18: determined.api.v1.GetTrialCheckpointsResponse.pagination:type_name -> determined.api.v1.Pagination + 89, // 7: determined.api.v1.TrialSorter.order_by:type_name -> determined.api.v1.OrderBy + 90, // 8: determined.api.v1.TrialLogsRequest.levels:type_name -> determined.log.v1.LogLevel + 91, // 9: determined.api.v1.TrialLogsRequest.timestamp_before:type_name -> google.protobuf.Timestamp + 91, // 10: determined.api.v1.TrialLogsRequest.timestamp_after:type_name -> google.protobuf.Timestamp + 89, // 11: determined.api.v1.TrialLogsRequest.order_by:type_name -> determined.api.v1.OrderBy + 91, // 12: determined.api.v1.TrialLogsResponse.timestamp:type_name -> google.protobuf.Timestamp + 90, // 13: determined.api.v1.TrialLogsResponse.level:type_name -> determined.log.v1.LogLevel + 92, // 14: determined.api.v1.GetTrialCheckpointsRequest.sort_by_attr:type_name -> determined.checkpoint.v1.SortBy + 89, // 15: determined.api.v1.GetTrialCheckpointsRequest.order_by:type_name -> determined.api.v1.OrderBy + 93, // 16: determined.api.v1.GetTrialCheckpointsRequest.states:type_name -> determined.checkpoint.v1.State + 94, // 17: determined.api.v1.GetTrialCheckpointsResponse.checkpoints:type_name -> determined.checkpoint.v1.Checkpoint + 95, // 18: determined.api.v1.GetTrialCheckpointsResponse.pagination:type_name -> determined.api.v1.Pagination 1, // 19: determined.api.v1.GetExperimentTrialsRequest.sort_by:type_name -> determined.api.v1.GetExperimentTrialsRequest.SortBy - 93, // 20: determined.api.v1.GetExperimentTrialsRequest.order_by:type_name -> determined.api.v1.OrderBy - 100, // 21: determined.api.v1.GetExperimentTrialsRequest.states:type_name -> determined.experiment.v1.State - 101, // 22: determined.api.v1.GetExperimentTrialsResponse.trials:type_name -> determined.trial.v1.Trial - 99, // 23: determined.api.v1.GetExperimentTrialsResponse.pagination:type_name -> determined.api.v1.Pagination - 101, // 24: determined.api.v1.GetTrialResponse.trial:type_name -> determined.trial.v1.Trial - 101, // 25: determined.api.v1.GetTrialByExternalIDResponse.trial:type_name -> determined.trial.v1.Trial - 93, // 26: determined.api.v1.GetTrialWorkloadsRequest.order_by:type_name -> determined.api.v1.OrderBy + 89, // 20: determined.api.v1.GetExperimentTrialsRequest.order_by:type_name -> determined.api.v1.OrderBy + 96, // 21: determined.api.v1.GetExperimentTrialsRequest.states:type_name -> determined.experiment.v1.State + 97, // 22: determined.api.v1.GetExperimentTrialsResponse.trials:type_name -> determined.trial.v1.Trial + 95, // 23: determined.api.v1.GetExperimentTrialsResponse.pagination:type_name -> determined.api.v1.Pagination + 97, // 24: determined.api.v1.GetTrialResponse.trial:type_name -> determined.trial.v1.Trial + 97, // 25: determined.api.v1.GetTrialByExternalIDResponse.trial:type_name -> determined.trial.v1.Trial + 89, // 26: determined.api.v1.GetTrialWorkloadsRequest.order_by:type_name -> determined.api.v1.OrderBy 2, // 27: determined.api.v1.GetTrialWorkloadsRequest.filter:type_name -> determined.api.v1.GetTrialWorkloadsRequest.FilterOption - 89, // 28: determined.api.v1.GetTrialWorkloadsRequest.metric_type:type_name -> determined.api.v1.MetricType + 85, // 28: determined.api.v1.GetTrialWorkloadsRequest.metric_type:type_name -> determined.api.v1.MetricType 4, // 29: determined.api.v1.GetTrialWorkloadsResponse.workloads:type_name -> determined.api.v1.WorkloadContainer - 99, // 30: determined.api.v1.GetTrialWorkloadsResponse.pagination:type_name -> determined.api.v1.Pagination - 102, // 31: determined.api.v1.GetTrialProfilerMetricsRequest.labels:type_name -> determined.trial.v1.TrialProfilerMetricLabels - 103, // 32: determined.api.v1.GetTrialProfilerMetricsResponse.batch:type_name -> determined.trial.v1.TrialProfilerMetricsBatch - 102, // 33: determined.api.v1.GetTrialProfilerAvailableSeriesResponse.labels:type_name -> determined.trial.v1.TrialProfilerMetricLabels - 103, // 34: determined.api.v1.PostTrialProfilerMetricsBatchRequest.batches:type_name -> determined.trial.v1.TrialProfilerMetricsBatch - 101, // 35: determined.api.v1.ComparableTrial.trial:type_name -> determined.trial.v1.Trial + 95, // 30: determined.api.v1.GetTrialWorkloadsResponse.pagination:type_name -> determined.api.v1.Pagination + 98, // 31: determined.api.v1.GetTrialProfilerMetricsRequest.labels:type_name -> determined.trial.v1.TrialProfilerMetricLabels + 99, // 32: determined.api.v1.GetTrialProfilerMetricsResponse.batch:type_name -> determined.trial.v1.TrialProfilerMetricsBatch + 98, // 33: determined.api.v1.GetTrialProfilerAvailableSeriesResponse.labels:type_name -> determined.trial.v1.TrialProfilerMetricLabels + 99, // 34: determined.api.v1.PostTrialProfilerMetricsBatchRequest.batches:type_name -> determined.trial.v1.TrialProfilerMetricsBatch + 97, // 35: determined.api.v1.ComparableTrial.trial:type_name -> determined.trial.v1.Trial 3, // 36: determined.api.v1.ComparableTrial.metrics:type_name -> determined.api.v1.DownsampledMetrics - 89, // 37: determined.api.v1.CompareTrialsRequest.metric_type:type_name -> determined.api.v1.MetricType - 104, // 38: determined.api.v1.CompareTrialsRequest.time_series_filter:type_name -> determined.common.v1.PolymorphicFilter + 85, // 37: determined.api.v1.CompareTrialsRequest.metric_type:type_name -> determined.api.v1.MetricType + 100, // 38: determined.api.v1.CompareTrialsRequest.time_series_filter:type_name -> determined.common.v1.PolymorphicFilter 32, // 39: determined.api.v1.CompareTrialsResponse.trials:type_name -> determined.api.v1.ComparableTrial - 105, // 40: determined.api.v1.AllocationRendezvousInfoResponse.rendezvous_info:type_name -> determined.trial.v1.RendezvousInfo + 101, // 40: determined.api.v1.AllocationRendezvousInfoResponse.rendezvous_info:type_name -> determined.trial.v1.RendezvousInfo 51, // 41: determined.api.v1.PostAllocationAcceleratorDataRequest.accelerator_data:type_name -> determined.api.v1.AcceleratorData - 106, // 42: determined.api.v1.AllocationAllGatherRequest.data:type_name -> google.protobuf.Struct - 106, // 43: determined.api.v1.AllocationAllGatherResponse.data:type_name -> google.protobuf.Struct - 106, // 44: determined.api.v1.NotifyContainerRunningRequest.data:type_name -> google.protobuf.Struct - 106, // 45: determined.api.v1.NotifyContainerRunningResponse.data:type_name -> google.protobuf.Struct - 107, // 46: determined.api.v1.GetCurrentTrialSearcherOperationResponse.op:type_name -> determined.experiment.v1.TrialOperation - 108, // 47: determined.api.v1.CompleteTrialSearcherValidationRequest.completed_operation:type_name -> determined.experiment.v1.CompleteValidateAfterOperation - 109, // 48: determined.api.v1.ReportTrialSearcherEarlyExitRequest.early_exit:type_name -> determined.trial.v1.TrialEarlyExit - 110, // 49: determined.api.v1.ReportTrialMetricsRequest.metrics:type_name -> determined.trial.v1.TrialMetrics - 110, // 50: determined.api.v1.ReportTrialTrainingMetricsRequest.training_metrics:type_name -> determined.trial.v1.TrialMetrics - 110, // 51: determined.api.v1.ReportTrialValidationMetricsRequest.validation_metrics:type_name -> determined.trial.v1.TrialMetrics - 111, // 52: determined.api.v1.PostTrialRunnerMetadataRequest.metadata:type_name -> determined.trial.v1.TrialRunnerMetadata - 112, // 53: determined.api.v1.GetMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport - 112, // 54: determined.api.v1.GetTrainingMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport - 112, // 55: determined.api.v1.GetValidationMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport - 106, // 56: determined.api.v1.CreateTrialRequest.hparams:type_name -> google.protobuf.Struct - 101, // 57: determined.api.v1.CreateTrialResponse.trial:type_name -> determined.trial.v1.Trial - 78, // 58: determined.api.v1.PutTrialRequest.create_trial_request:type_name -> determined.api.v1.CreateTrialRequest - 101, // 59: determined.api.v1.PutTrialResponse.trial:type_name -> determined.trial.v1.Trial - 113, // 60: determined.api.v1.PatchTrialRequest.state:type_name -> determined.trial.v1.State - 101, // 61: determined.api.v1.PatchTrialResponse.trial:type_name -> determined.trial.v1.Trial - 114, // 62: determined.api.v1.ReportTrialSourceInfoRequest.trial_source_info:type_name -> determined.trial.v1.TrialSourceInfo - 63, // [63:63] is the sub-list for method output_type - 63, // [63:63] is the sub-list for method input_type - 63, // [63:63] is the sub-list for extension type_name - 63, // [63:63] is the sub-list for extension extendee - 0, // [0:63] is the sub-list for field type_name + 102, // 42: determined.api.v1.AllocationAllGatherRequest.data:type_name -> google.protobuf.Struct + 102, // 43: determined.api.v1.AllocationAllGatherResponse.data:type_name -> google.protobuf.Struct + 102, // 44: determined.api.v1.NotifyContainerRunningRequest.data:type_name -> google.protobuf.Struct + 102, // 45: determined.api.v1.NotifyContainerRunningResponse.data:type_name -> google.protobuf.Struct + 103, // 46: determined.api.v1.ReportTrialSearcherEarlyExitRequest.early_exit:type_name -> determined.trial.v1.TrialEarlyExit + 104, // 47: determined.api.v1.ReportTrialMetricsRequest.metrics:type_name -> determined.trial.v1.TrialMetrics + 104, // 48: determined.api.v1.ReportTrialTrainingMetricsRequest.training_metrics:type_name -> determined.trial.v1.TrialMetrics + 104, // 49: determined.api.v1.ReportTrialValidationMetricsRequest.validation_metrics:type_name -> determined.trial.v1.TrialMetrics + 105, // 50: determined.api.v1.PostTrialRunnerMetadataRequest.metadata:type_name -> determined.trial.v1.TrialRunnerMetadata + 106, // 51: determined.api.v1.GetMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport + 106, // 52: determined.api.v1.GetTrainingMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport + 106, // 53: determined.api.v1.GetValidationMetricsResponse.metrics:type_name -> determined.trial.v1.MetricsReport + 102, // 54: determined.api.v1.CreateTrialRequest.hparams:type_name -> google.protobuf.Struct + 97, // 55: determined.api.v1.CreateTrialResponse.trial:type_name -> determined.trial.v1.Trial + 74, // 56: determined.api.v1.PutTrialRequest.create_trial_request:type_name -> determined.api.v1.CreateTrialRequest + 97, // 57: determined.api.v1.PutTrialResponse.trial:type_name -> determined.trial.v1.Trial + 107, // 58: determined.api.v1.PatchTrialRequest.state:type_name -> determined.trial.v1.State + 97, // 59: determined.api.v1.PatchTrialResponse.trial:type_name -> determined.trial.v1.Trial + 108, // 60: determined.api.v1.ReportTrialSourceInfoRequest.trial_source_info:type_name -> determined.trial.v1.TrialSourceInfo + 61, // [61:61] is the sub-list for method output_type + 61, // [61:61] is the sub-list for method input_type + 61, // [61:61] is the sub-list for extension type_name + 61, // [61:61] is the sub-list for extension extendee + 0, // [0:61] is the sub-list for field type_name } func init() { file_determined_api_v1_trial_proto_init() } @@ -6947,54 +6704,6 @@ func file_determined_api_v1_trial_proto_init() { } } file_determined_api_v1_trial_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentTrialSearcherOperationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_determined_api_v1_trial_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentTrialSearcherOperationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_determined_api_v1_trial_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompleteTrialSearcherValidationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_determined_api_v1_trial_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompleteTrialSearcherValidationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_determined_api_v1_trial_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialSearcherEarlyExitRequest); i { case 0: return &v.state @@ -7006,7 +6715,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialSearcherEarlyExitResponse); i { case 0: return &v.state @@ -7018,7 +6727,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialProgressRequest); i { case 0: return &v.state @@ -7030,7 +6739,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialProgressResponse); i { case 0: return &v.state @@ -7042,7 +6751,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialMetricsRequest); i { case 0: return &v.state @@ -7054,7 +6763,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialMetricsResponse); i { case 0: return &v.state @@ -7066,7 +6775,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialTrainingMetricsRequest); i { case 0: return &v.state @@ -7078,7 +6787,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialTrainingMetricsResponse); i { case 0: return &v.state @@ -7090,7 +6799,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialValidationMetricsRequest); i { case 0: return &v.state @@ -7102,7 +6811,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialValidationMetricsResponse); i { case 0: return &v.state @@ -7114,7 +6823,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PostTrialRunnerMetadataRequest); i { case 0: return &v.state @@ -7126,7 +6835,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PostTrialRunnerMetadataResponse); i { case 0: return &v.state @@ -7138,7 +6847,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMetricsRequest); i { case 0: return &v.state @@ -7150,7 +6859,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetMetricsResponse); i { case 0: return &v.state @@ -7162,7 +6871,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTrainingMetricsRequest); i { case 0: return &v.state @@ -7174,7 +6883,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetTrainingMetricsResponse); i { case 0: return &v.state @@ -7186,7 +6895,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidationMetricsRequest); i { case 0: return &v.state @@ -7198,7 +6907,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetValidationMetricsResponse); i { case 0: return &v.state @@ -7210,7 +6919,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTrialRequest); i { case 0: return &v.state @@ -7222,7 +6931,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTrialResponse); i { case 0: return &v.state @@ -7234,7 +6943,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PutTrialRequest); i { case 0: return &v.state @@ -7246,7 +6955,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PutTrialResponse); i { case 0: return &v.state @@ -7258,7 +6967,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PatchTrialRequest); i { case 0: return &v.state @@ -7270,7 +6979,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PatchTrialResponse); i { case 0: return &v.state @@ -7282,7 +6991,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartTrialRequest); i { case 0: return &v.state @@ -7294,7 +7003,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartTrialResponse); i { case 0: return &v.state @@ -7306,7 +7015,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialSourceInfoRequest); i { case 0: return &v.state @@ -7318,7 +7027,7 @@ func file_determined_api_v1_trial_proto_init() { return nil } } - file_determined_api_v1_trial_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_determined_api_v1_trial_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTrialSourceInfoResponse); i { case 0: return &v.state @@ -7342,15 +7051,15 @@ func file_determined_api_v1_trial_proto_init() { (*GetTrialCheckpointsRequest_SortByMetric)(nil), } file_determined_api_v1_trial_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_determined_api_v1_trial_proto_msgTypes[79].OneofWrappers = []interface{}{} - file_determined_api_v1_trial_proto_msgTypes[82].OneofWrappers = []interface{}{} + file_determined_api_v1_trial_proto_msgTypes[75].OneofWrappers = []interface{}{} + file_determined_api_v1_trial_proto_msgTypes[78].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_determined_api_v1_trial_proto_rawDesc, NumEnums: 3, - NumMessages: 85, + NumMessages: 81, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/pkg/experimentv1/searcher.pb.go b/proto/pkg/experimentv1/searcher.pb.go index cc13b62b776..9d5bc7baa24 100644 --- a/proto/pkg/experimentv1/searcher.pb.go +++ b/proto/pkg/experimentv1/searcher.pb.go @@ -20,60 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// RunnableType defines the type of operation that should be executed by trial -// runners. -type RunnableType int32 - -const ( - // Denotes an unknown runnable type. - RunnableType_RUNNABLE_TYPE_UNSPECIFIED RunnableType = 0 - // Signals to a trial runner that it should run a train. - RunnableType_RUNNABLE_TYPE_TRAIN RunnableType = 1 - // Signals to a trial runner it should compute validation metrics. - RunnableType_RUNNABLE_TYPE_VALIDATE RunnableType = 2 -) - -// Enum value maps for RunnableType. -var ( - RunnableType_name = map[int32]string{ - 0: "RUNNABLE_TYPE_UNSPECIFIED", - 1: "RUNNABLE_TYPE_TRAIN", - 2: "RUNNABLE_TYPE_VALIDATE", - } - RunnableType_value = map[string]int32{ - "RUNNABLE_TYPE_UNSPECIFIED": 0, - "RUNNABLE_TYPE_TRAIN": 1, - "RUNNABLE_TYPE_VALIDATE": 2, - } -) - -func (x RunnableType) Enum() *RunnableType { - p := new(RunnableType) - *p = x - return p -} - -func (x RunnableType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RunnableType) Descriptor() protoreflect.EnumDescriptor { - return file_determined_experiment_v1_searcher_proto_enumTypes[0].Descriptor() -} - -func (RunnableType) Type() protoreflect.EnumType { - return &file_determined_experiment_v1_searcher_proto_enumTypes[0] -} - -func (x RunnableType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RunnableType.Descriptor instead. -func (RunnableType) EnumDescriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{0} -} - // The reason for an early exit. type TrialExitedEarly_ExitedReason int32 @@ -116,11 +62,11 @@ func (x TrialExitedEarly_ExitedReason) String() string { } func (TrialExitedEarly_ExitedReason) Descriptor() protoreflect.EnumDescriptor { - return file_determined_experiment_v1_searcher_proto_enumTypes[1].Descriptor() + return file_determined_experiment_v1_searcher_proto_enumTypes[0].Descriptor() } func (TrialExitedEarly_ExitedReason) Type() protoreflect.EnumType { - return &file_determined_experiment_v1_searcher_proto_enumTypes[1] + return &file_determined_experiment_v1_searcher_proto_enumTypes[0] } func (x TrialExitedEarly_ExitedReason) Number() protoreflect.EnumNumber { @@ -577,65 +523,6 @@ func (x *ValidateAfterOperation) GetLength() uint64 { return 0 } -// Used to complete a ValidateAfterOperation. -type CompleteValidateAfterOperation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The ValidateAfterOperation being completed. - Op *ValidateAfterOperation `protobuf:"bytes,1,opt,name=op,proto3" json:"op,omitempty"` - // The value of searcher metric associated with this completed operation. - // The metric provided should be the metric used to guide HP search. - SearcherMetric *_struct.Value `protobuf:"bytes,2,opt,name=searcher_metric,json=searcherMetric,proto3" json:"searcher_metric,omitempty"` -} - -func (x *CompleteValidateAfterOperation) Reset() { - *x = CompleteValidateAfterOperation{} - if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CompleteValidateAfterOperation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CompleteValidateAfterOperation) ProtoMessage() {} - -func (x *CompleteValidateAfterOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CompleteValidateAfterOperation.ProtoReflect.Descriptor instead. -func (*CompleteValidateAfterOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{8} -} - -func (x *CompleteValidateAfterOperation) GetOp() *ValidateAfterOperation { - if x != nil { - return x.Op - } - return nil -} - -func (x *CompleteValidateAfterOperation) GetSearcherMetric() *_struct.Value { - if x != nil { - return x.SearcherMetric - } - return nil -} - // Create a trial with given hyperparameters. type CreateTrialOperation struct { state protoimpl.MessageState @@ -651,7 +538,7 @@ type CreateTrialOperation struct { func (x *CreateTrialOperation) Reset() { *x = CreateTrialOperation{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[9] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -664,7 +551,7 @@ func (x *CreateTrialOperation) String() string { func (*CreateTrialOperation) ProtoMessage() {} func (x *CreateTrialOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[9] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -677,7 +564,7 @@ func (x *CreateTrialOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTrialOperation.ProtoReflect.Descriptor instead. func (*CreateTrialOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{9} + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{8} } func (x *CreateTrialOperation) GetRequestId() string { @@ -707,7 +594,7 @@ type CloseTrialOperation struct { func (x *CloseTrialOperation) Reset() { *x = CloseTrialOperation{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[10] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -720,7 +607,7 @@ func (x *CloseTrialOperation) String() string { func (*CloseTrialOperation) ProtoMessage() {} func (x *CloseTrialOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[10] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -733,7 +620,7 @@ func (x *CloseTrialOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseTrialOperation.ProtoReflect.Descriptor instead. func (*CloseTrialOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{10} + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{9} } func (x *CloseTrialOperation) GetRequestId() string { @@ -758,7 +645,7 @@ type ShutDownOperation struct { func (x *ShutDownOperation) Reset() { *x = ShutDownOperation{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[11] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -771,7 +658,7 @@ func (x *ShutDownOperation) String() string { func (*ShutDownOperation) ProtoMessage() {} func (x *ShutDownOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[11] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -784,7 +671,7 @@ func (x *ShutDownOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use ShutDownOperation.ProtoReflect.Descriptor instead. func (*ShutDownOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{11} + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{10} } func (x *ShutDownOperation) GetCancel() bool { @@ -821,7 +708,7 @@ type SearcherOperation struct { func (x *SearcherOperation) Reset() { *x = SearcherOperation{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[12] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -834,7 +721,7 @@ func (x *SearcherOperation) String() string { func (*SearcherOperation) ProtoMessage() {} func (x *SearcherOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[12] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -847,7 +734,7 @@ func (x *SearcherOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use SearcherOperation.ProtoReflect.Descriptor instead. func (*SearcherOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{12} + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{11} } func (m *SearcherOperation) GetUnion() isSearcherOperation_Union { @@ -934,7 +821,7 @@ type TrialOperation struct { func (x *TrialOperation) Reset() { *x = TrialOperation{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[13] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -947,7 +834,7 @@ func (x *TrialOperation) String() string { func (*TrialOperation) ProtoMessage() {} func (x *TrialOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[13] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -960,7 +847,7 @@ func (x *TrialOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use TrialOperation.ProtoReflect.Descriptor instead. func (*TrialOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{13} + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{12} } func (m *TrialOperation) GetUnion() isTrialOperation_Union { @@ -989,36 +876,37 @@ type TrialOperation_ValidateAfter struct { func (*TrialOperation_ValidateAfter) isTrialOperation_Union() {} -// RunnableOperation represents a single runnable operation emitted by a -// searcher. -type RunnableOperation struct { +// SearchUnit describes a length unit used by some searchers to manage training. +type SearchUnit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // This is the type of the operation. - Type RunnableType `protobuf:"varint,1,opt,name=type,proto3,enum=determined.experiment.v1.RunnableType" json:"type,omitempty"` - // If the type == WORKLOAD_KIND_TRAIN, this is the number of units - Length uint64 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` + // Name of the length unit (if max_length is false). + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + // Value of the length unit (if max_length is false). + Value *int32 `protobuf:"varint,2,opt,name=value,proto3,oneof" json:"value,omitempty"` + // Bool indicating whether the training length is defined in code. + MaxLength bool `protobuf:"varint,3,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` } -func (x *RunnableOperation) Reset() { - *x = RunnableOperation{} +func (x *SearchUnit) Reset() { + *x = SearchUnit{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[14] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RunnableOperation) String() string { +func (x *SearchUnit) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RunnableOperation) ProtoMessage() {} +func (*SearchUnit) ProtoMessage() {} -func (x *RunnableOperation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[14] +func (x *SearchUnit) ProtoReflect() protoreflect.Message { + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1029,56 +917,62 @@ func (x *RunnableOperation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RunnableOperation.ProtoReflect.Descriptor instead. -func (*RunnableOperation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{14} +// Deprecated: Use SearchUnit.ProtoReflect.Descriptor instead. +func (*SearchUnit) Descriptor() ([]byte, []int) { + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{13} } -func (x *RunnableOperation) GetType() RunnableType { - if x != nil { - return x.Type +func (x *SearchUnit) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *SearchUnit) GetValue() int32 { + if x != nil && x.Value != nil { + return *x.Value } - return RunnableType_RUNNABLE_TYPE_UNSPECIFIED + return 0 } -func (x *RunnableOperation) GetLength() uint64 { +func (x *SearchUnit) GetMaxLength() bool { if x != nil { - return x.Length + return x.MaxLength } - return 0 + return false } -// TrialSimulation is a specific sequence of workloads that were run before the -// trial was completed. -type TrialSimulation struct { +// TrialSummary describes the runs that are estimated to train for a certain +// length. +type TrialSummary struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The list of operations that were run before the trial was completed. - Operations []*RunnableOperation `protobuf:"bytes,1,rep,name=operations,proto3" json:"operations,omitempty"` - // The number of times that this trial configuration has occurred during the - // simulation. - Occurrences int32 `protobuf:"varint,2,opt,name=occurrences,proto3" json:"occurrences,omitempty"` + // Number of trials. + Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + // Training length for the trials. + Unit *SearchUnit `protobuf:"bytes,2,opt,name=unit,proto3" json:"unit,omitempty"` } -func (x *TrialSimulation) Reset() { - *x = TrialSimulation{} +func (x *TrialSummary) Reset() { + *x = TrialSummary{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[15] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TrialSimulation) String() string { +func (x *TrialSummary) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TrialSimulation) ProtoMessage() {} +func (*TrialSummary) ProtoMessage() {} -func (x *TrialSimulation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[15] +func (x *TrialSummary) ProtoReflect() protoreflect.Message { + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1089,57 +983,55 @@ func (x *TrialSimulation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TrialSimulation.ProtoReflect.Descriptor instead. -func (*TrialSimulation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{15} +// Deprecated: Use TrialSummary.ProtoReflect.Descriptor instead. +func (*TrialSummary) Descriptor() ([]byte, []int) { + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{14} } -func (x *TrialSimulation) GetOperations() []*RunnableOperation { +func (x *TrialSummary) GetCount() int32 { if x != nil { - return x.Operations + return x.Count } - return nil + return 0 } -func (x *TrialSimulation) GetOccurrences() int32 { +func (x *TrialSummary) GetUnit() *SearchUnit { if x != nil { - return x.Occurrences + return x.Unit } - return 0 + return nil } -// ExperimentSimulation holds the configuration and results of simulated run of -// a searcher. -type ExperimentSimulation struct { +// SearchSummary contains the estimated trials and training lengths that a +// search plans to execute. +type SearchSummary struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The simulated experiment config. + // The searcher config from which the summary is generated. Config *_struct.Struct `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - // The searcher simulation seed. - Seed uint32 `protobuf:"varint,2,opt,name=seed,proto3" json:"seed,omitempty"` - // The list of trials in the simulation. - Trials []*TrialSimulation `protobuf:"bytes,3,rep,name=trials,proto3" json:"trials,omitempty"` + // A list of planned number of trials to their training lengths. + Trials []*TrialSummary `protobuf:"bytes,2,rep,name=trials,proto3" json:"trials,omitempty"` } -func (x *ExperimentSimulation) Reset() { - *x = ExperimentSimulation{} +func (x *SearchSummary) Reset() { + *x = SearchSummary{} if protoimpl.UnsafeEnabled { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[16] + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ExperimentSimulation) String() string { +func (x *SearchSummary) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ExperimentSimulation) ProtoMessage() {} +func (*SearchSummary) ProtoMessage() {} -func (x *ExperimentSimulation) ProtoReflect() protoreflect.Message { - mi := &file_determined_experiment_v1_searcher_proto_msgTypes[16] +func (x *SearchSummary) ProtoReflect() protoreflect.Message { + mi := &file_determined_experiment_v1_searcher_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1150,26 +1042,19 @@ func (x *ExperimentSimulation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ExperimentSimulation.ProtoReflect.Descriptor instead. -func (*ExperimentSimulation) Descriptor() ([]byte, []int) { - return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{16} +// Deprecated: Use SearchSummary.ProtoReflect.Descriptor instead. +func (*SearchSummary) Descriptor() ([]byte, []int) { + return file_determined_experiment_v1_searcher_proto_rawDescGZIP(), []int{15} } -func (x *ExperimentSimulation) GetConfig() *_struct.Struct { +func (x *SearchSummary) GetConfig() *_struct.Struct { if x != nil { return x.Config } return nil } -func (x *ExperimentSimulation) GetSeed() uint32 { - if x != nil { - return x.Seed - } - return 0 -} - -func (x *ExperimentSimulation) GetTrials() []*TrialSimulation { +func (x *SearchSummary) GetTrials() []*TrialSummary { if x != nil { return x.Trials } @@ -1256,96 +1141,80 @@ var file_determined_experiment_v1_searcher_proto_rawDesc = []byte{ 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xa3, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x02, 0x6f, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x3f, 0x0a, - 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0x57, - 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x79, 0x70, 0x65, 0x72, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x79, 0x70, 0x65, - 0x72, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x34, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x45, 0x0a, - 0x11, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x22, 0xe4, 0x02, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0f, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x0e, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x53, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x12, 0x50, 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x74, 0x72, - 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x09, 0x73, 0x68, 0x75, 0x74, 0x5f, 0x64, - 0x6f, 0x77, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, - 0x77, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x74, 0x0a, 0x0e, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, - 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x6f, - 0x6e, 0x22, 0x67, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x75, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x80, 0x01, 0x0a, 0x0f, 0x54, - 0x72, 0x69, 0x61, 0x6c, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4b, - 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, - 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, - 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0b, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x9e, 0x01, - 0x0a, 0x14, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x06, 0x74, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x69, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2a, 0x62, - 0x0a, 0x0c, 0x52, 0x75, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x19, 0x52, 0x55, 0x4e, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, - 0x13, 0x52, 0x55, 0x4e, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, - 0x52, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x55, 0x4e, 0x4e, 0x41, 0x42, - 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x45, - 0x10, 0x02, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x57, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x68, 0x79, 0x70, 0x65, 0x72, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x79, 0x70, 0x65, 0x72, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x22, 0x34, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x11, 0x53, 0x68, 0x75, 0x74, 0x44, + 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0xe4, + 0x02, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x72, 0x69, 0x61, 0x6c, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0c, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x50, + 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6c, + 0x12, 0x4a, 0x0a, 0x09, 0x73, 0x68, 0x75, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x08, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x07, 0x0a, 0x05, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x74, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x86, 0x01, 0x0a, 0x0a, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, 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, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x48, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1d, + 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x12, 0x92, + 0x41, 0x0f, 0x0a, 0x0d, 0xd2, 0x01, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x74, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x75, 0x6e, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x04, + 0x75, 0x6e, 0x69, 0x74, 0x3a, 0x14, 0x92, 0x41, 0x11, 0x0a, 0x0f, 0xd2, 0x01, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0xd2, 0x01, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x0d, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2f, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a, + 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x3a, 0x15, 0x92, + 0x41, 0x12, 0x0a, 0x10, 0xd2, 0x01, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0xd2, 0x01, 0x04, + 0x72, 0x75, 0x6e, 0x73, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, + 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1360,52 +1229,47 @@ func file_determined_experiment_v1_searcher_proto_rawDescGZIP() []byte { return file_determined_experiment_v1_searcher_proto_rawDescData } -var file_determined_experiment_v1_searcher_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_determined_experiment_v1_searcher_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_determined_experiment_v1_searcher_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_determined_experiment_v1_searcher_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_determined_experiment_v1_searcher_proto_goTypes = []interface{}{ - (RunnableType)(0), // 0: determined.experiment.v1.RunnableType - (TrialExitedEarly_ExitedReason)(0), // 1: determined.experiment.v1.TrialExitedEarly.ExitedReason - (*InitialOperations)(nil), // 2: determined.experiment.v1.InitialOperations - (*TrialCreated)(nil), // 3: determined.experiment.v1.TrialCreated - (*TrialProgress)(nil), // 4: determined.experiment.v1.TrialProgress - (*ValidationCompleted)(nil), // 5: determined.experiment.v1.ValidationCompleted - (*TrialClosed)(nil), // 6: determined.experiment.v1.TrialClosed - (*TrialExitedEarly)(nil), // 7: determined.experiment.v1.TrialExitedEarly - (*ExperimentInactive)(nil), // 8: determined.experiment.v1.ExperimentInactive - (*ValidateAfterOperation)(nil), // 9: determined.experiment.v1.ValidateAfterOperation - (*CompleteValidateAfterOperation)(nil), // 10: determined.experiment.v1.CompleteValidateAfterOperation - (*CreateTrialOperation)(nil), // 11: determined.experiment.v1.CreateTrialOperation - (*CloseTrialOperation)(nil), // 12: determined.experiment.v1.CloseTrialOperation - (*ShutDownOperation)(nil), // 13: determined.experiment.v1.ShutDownOperation - (*SearcherOperation)(nil), // 14: determined.experiment.v1.SearcherOperation - (*TrialOperation)(nil), // 15: determined.experiment.v1.TrialOperation - (*RunnableOperation)(nil), // 16: determined.experiment.v1.RunnableOperation - (*TrialSimulation)(nil), // 17: determined.experiment.v1.TrialSimulation - (*ExperimentSimulation)(nil), // 18: determined.experiment.v1.ExperimentSimulation - (*_struct.Value)(nil), // 19: google.protobuf.Value - (State)(0), // 20: determined.experiment.v1.State - (*_struct.Struct)(nil), // 21: google.protobuf.Struct + (TrialExitedEarly_ExitedReason)(0), // 0: determined.experiment.v1.TrialExitedEarly.ExitedReason + (*InitialOperations)(nil), // 1: determined.experiment.v1.InitialOperations + (*TrialCreated)(nil), // 2: determined.experiment.v1.TrialCreated + (*TrialProgress)(nil), // 3: determined.experiment.v1.TrialProgress + (*ValidationCompleted)(nil), // 4: determined.experiment.v1.ValidationCompleted + (*TrialClosed)(nil), // 5: determined.experiment.v1.TrialClosed + (*TrialExitedEarly)(nil), // 6: determined.experiment.v1.TrialExitedEarly + (*ExperimentInactive)(nil), // 7: determined.experiment.v1.ExperimentInactive + (*ValidateAfterOperation)(nil), // 8: determined.experiment.v1.ValidateAfterOperation + (*CreateTrialOperation)(nil), // 9: determined.experiment.v1.CreateTrialOperation + (*CloseTrialOperation)(nil), // 10: determined.experiment.v1.CloseTrialOperation + (*ShutDownOperation)(nil), // 11: determined.experiment.v1.ShutDownOperation + (*SearcherOperation)(nil), // 12: determined.experiment.v1.SearcherOperation + (*TrialOperation)(nil), // 13: determined.experiment.v1.TrialOperation + (*SearchUnit)(nil), // 14: determined.experiment.v1.SearchUnit + (*TrialSummary)(nil), // 15: determined.experiment.v1.TrialSummary + (*SearchSummary)(nil), // 16: determined.experiment.v1.SearchSummary + (*_struct.Value)(nil), // 17: google.protobuf.Value + (State)(0), // 18: determined.experiment.v1.State + (*_struct.Struct)(nil), // 19: google.protobuf.Struct } var file_determined_experiment_v1_searcher_proto_depIdxs = []int32{ - 19, // 0: determined.experiment.v1.ValidationCompleted.metric:type_name -> google.protobuf.Value - 1, // 1: determined.experiment.v1.TrialExitedEarly.exited_reason:type_name -> determined.experiment.v1.TrialExitedEarly.ExitedReason - 20, // 2: determined.experiment.v1.ExperimentInactive.experiment_state:type_name -> determined.experiment.v1.State - 9, // 3: determined.experiment.v1.CompleteValidateAfterOperation.op:type_name -> determined.experiment.v1.ValidateAfterOperation - 19, // 4: determined.experiment.v1.CompleteValidateAfterOperation.searcher_metric:type_name -> google.protobuf.Value - 15, // 5: determined.experiment.v1.SearcherOperation.trial_operation:type_name -> determined.experiment.v1.TrialOperation - 11, // 6: determined.experiment.v1.SearcherOperation.create_trial:type_name -> determined.experiment.v1.CreateTrialOperation - 12, // 7: determined.experiment.v1.SearcherOperation.close_trial:type_name -> determined.experiment.v1.CloseTrialOperation - 13, // 8: determined.experiment.v1.SearcherOperation.shut_down:type_name -> determined.experiment.v1.ShutDownOperation - 9, // 9: determined.experiment.v1.TrialOperation.validate_after:type_name -> determined.experiment.v1.ValidateAfterOperation - 0, // 10: determined.experiment.v1.RunnableOperation.type:type_name -> determined.experiment.v1.RunnableType - 16, // 11: determined.experiment.v1.TrialSimulation.operations:type_name -> determined.experiment.v1.RunnableOperation - 21, // 12: determined.experiment.v1.ExperimentSimulation.config:type_name -> google.protobuf.Struct - 17, // 13: determined.experiment.v1.ExperimentSimulation.trials:type_name -> determined.experiment.v1.TrialSimulation - 14, // [14:14] is the sub-list for method output_type - 14, // [14:14] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 17, // 0: determined.experiment.v1.ValidationCompleted.metric:type_name -> google.protobuf.Value + 0, // 1: determined.experiment.v1.TrialExitedEarly.exited_reason:type_name -> determined.experiment.v1.TrialExitedEarly.ExitedReason + 18, // 2: determined.experiment.v1.ExperimentInactive.experiment_state:type_name -> determined.experiment.v1.State + 13, // 3: determined.experiment.v1.SearcherOperation.trial_operation:type_name -> determined.experiment.v1.TrialOperation + 9, // 4: determined.experiment.v1.SearcherOperation.create_trial:type_name -> determined.experiment.v1.CreateTrialOperation + 10, // 5: determined.experiment.v1.SearcherOperation.close_trial:type_name -> determined.experiment.v1.CloseTrialOperation + 11, // 6: determined.experiment.v1.SearcherOperation.shut_down:type_name -> determined.experiment.v1.ShutDownOperation + 8, // 7: determined.experiment.v1.TrialOperation.validate_after:type_name -> determined.experiment.v1.ValidateAfterOperation + 14, // 8: determined.experiment.v1.TrialSummary.unit:type_name -> determined.experiment.v1.SearchUnit + 19, // 9: determined.experiment.v1.SearchSummary.config:type_name -> google.protobuf.Struct + 15, // 10: determined.experiment.v1.SearchSummary.trials:type_name -> determined.experiment.v1.TrialSummary + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_determined_experiment_v1_searcher_proto_init() } @@ -1512,7 +1376,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CompleteValidateAfterOperation); i { + switch v := v.(*CreateTrialOperation); i { case 0: return &v.state case 1: @@ -1524,7 +1388,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateTrialOperation); i { + switch v := v.(*CloseTrialOperation); i { case 0: return &v.state case 1: @@ -1536,7 +1400,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloseTrialOperation); i { + switch v := v.(*ShutDownOperation); i { case 0: return &v.state case 1: @@ -1548,7 +1412,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutDownOperation); i { + switch v := v.(*SearcherOperation); i { case 0: return &v.state case 1: @@ -1560,7 +1424,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SearcherOperation); i { + switch v := v.(*TrialOperation); i { case 0: return &v.state case 1: @@ -1572,7 +1436,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrialOperation); i { + switch v := v.(*SearchUnit); i { case 0: return &v.state case 1: @@ -1584,7 +1448,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunnableOperation); i { + switch v := v.(*TrialSummary); i { case 0: return &v.state case 1: @@ -1596,19 +1460,7 @@ func file_determined_experiment_v1_searcher_proto_init() { } } file_determined_experiment_v1_searcher_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrialSimulation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_determined_experiment_v1_searcher_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExperimentSimulation); i { + switch v := v.(*SearchSummary); i { case 0: return &v.state case 1: @@ -1620,22 +1472,23 @@ func file_determined_experiment_v1_searcher_proto_init() { } } } - file_determined_experiment_v1_searcher_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_determined_experiment_v1_searcher_proto_msgTypes[11].OneofWrappers = []interface{}{ (*SearcherOperation_TrialOperation)(nil), (*SearcherOperation_CreateTrial)(nil), (*SearcherOperation_CloseTrial)(nil), (*SearcherOperation_ShutDown)(nil), } - file_determined_experiment_v1_searcher_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_determined_experiment_v1_searcher_proto_msgTypes[12].OneofWrappers = []interface{}{ (*TrialOperation_ValidateAfter)(nil), } + file_determined_experiment_v1_searcher_proto_msgTypes[13].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_determined_experiment_v1_searcher_proto_rawDesc, - NumEnums: 2, - NumMessages: 17, + NumEnums: 1, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/src/determined/api/v1/api.proto b/proto/src/determined/api/v1/api.proto index eeb677cd7ec..69e5008ae9c 100644 --- a/proto/src/determined/api/v1/api.proto +++ b/proto/src/determined/api/v1/api.proto @@ -1209,28 +1209,6 @@ service Determined { }; } - // Get the current searcher operation. - rpc GetCurrentTrialSearcherOperation(GetCurrentTrialSearcherOperationRequest) - returns (GetCurrentTrialSearcherOperationResponse) { - option (google.api.http) = { - get: "/api/v1/trials/{trial_id}/searcher/operation" - }; - option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - tags: "Internal" - }; - } - // Reports to the searcher that the trial has completed the given searcher - // operation. - rpc CompleteTrialSearcherValidation(CompleteTrialSearcherValidationRequest) - returns (CompleteTrialSearcherValidationResponse) { - option (google.api.http) = { - post: "/api/v1/trials/{trial_id}/searcher/completed_operation" - body: "completed_operation" - }; - option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - tags: "Internal" - }; - } // Reports to the searcher that the trial has completed the current // requested amount of training with the given searcher validation // metric. diff --git a/proto/src/determined/api/v1/experiment.proto b/proto/src/determined/api/v1/experiment.proto index 3874e80c98c..6c536ec4c4b 100644 --- a/proto/src/determined/api/v1/experiment.proto +++ b/proto/src/determined/api/v1/experiment.proto @@ -285,8 +285,8 @@ message PreviewHPSearchRequest { } // Response to PreviewSearchRequest. message PreviewHPSearchResponse { - // The resulting simulation. - determined.experiment.v1.ExperimentSimulation simulation = 1; + // The resulting summary. + determined.experiment.v1.SearchSummary summary = 1; } // Activate an experiment. diff --git a/proto/src/determined/api/v1/trial.proto b/proto/src/determined/api/v1/trial.proto index 199fcd4679b..84b96588e73 100644 --- a/proto/src/determined/api/v1/trial.proto +++ b/proto/src/determined/api/v1/trial.proto @@ -651,37 +651,6 @@ message NotifyContainerRunningResponse { repeated google.protobuf.Struct data = 1; } -// Retrieves the current searcher operation. -message GetCurrentTrialSearcherOperationRequest { - option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { - json_schema: { required: [ "trial_id" ] } - }; - // The id of the trial. - int32 trial_id = 1; -} -// Response to GetCurrentTrialSearcherOperationRequest -message GetCurrentTrialSearcherOperationResponse { - // The current searcher operation. - determined.experiment.v1.TrialOperation op = 1; - // The status of the searcher operation. - bool completed = 2; -} - -// Reports to the searcher that the trial has completed the current requested -// amount of training. -message CompleteTrialSearcherValidationRequest { - option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { - json_schema: { required: [ "trial_id", "searcher_metric" ] } - }; - // The id of the trial. - int32 trial_id = 1; - // The completed operation. - determined.experiment.v1.CompleteValidateAfterOperation completed_operation = - 2; -} -// Response to CompleteTrialSearcherValidationRequest -message CompleteTrialSearcherValidationResponse {} - // Report a voluntary, permanent early exit to the searcher. message ReportTrialSearcherEarlyExitRequest { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { diff --git a/proto/src/determined/experiment/v1/searcher.proto b/proto/src/determined/experiment/v1/searcher.proto index a345df7aa8e..7fb0b39f03e 100644 --- a/proto/src/determined/experiment/v1/searcher.proto +++ b/proto/src/determined/experiment/v1/searcher.proto @@ -105,15 +105,6 @@ message ValidateAfterOperation { uint64 length = 2; } -// Used to complete a ValidateAfterOperation. -message CompleteValidateAfterOperation { - // The ValidateAfterOperation being completed. - ValidateAfterOperation op = 1; - // The value of searcher metric associated with this completed operation. - // The metric provided should be the metric used to guide HP search. - google.protobuf.Value searcher_metric = 2; -} - // Create a trial with given hyperparameters. message CreateTrialOperation { // The ID of the trial to create. @@ -161,43 +152,39 @@ message TrialOperation { } } -// RunnableType defines the type of operation that should be executed by trial -// runners. -enum RunnableType { - // Denotes an unknown runnable type. - RUNNABLE_TYPE_UNSPECIFIED = 0; - // Signals to a trial runner that it should run a train. - RUNNABLE_TYPE_TRAIN = 1; - // Signals to a trial runner it should compute validation metrics. - RUNNABLE_TYPE_VALIDATE = 2; -} - -// RunnableOperation represents a single runnable operation emitted by a -// searcher. -message RunnableOperation { - // This is the type of the operation. - RunnableType type = 1; - // If the type == WORKLOAD_KIND_TRAIN, this is the number of units - uint64 length = 2; +// SearchUnit describes a length unit used by some searchers to manage training. +message SearchUnit { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { required: [ "max_length" ] } + }; + // Name of the length unit (if max_length is false). + optional string name = 1; + // Value of the length unit (if max_length is false). + optional int32 value = 2; + // Bool indicating whether the training length is defined in code. + bool max_length = 3; } -// TrialSimulation is a specific sequence of workloads that were run before the -// trial was completed. -message TrialSimulation { - // The list of operations that were run before the trial was completed. - repeated RunnableOperation operations = 1; - // The number of times that this trial configuration has occurred during the - // simulation. - int32 occurrences = 2; +// TrialSummary describes the runs that are estimated to train for a certain +// length. +message TrialSummary { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { required: [ "count", "unit" ] } + }; + // Number of trials. + int32 count = 1; + // Training length for the trials. + SearchUnit unit = 2; } -// ExperimentSimulation holds the configuration and results of simulated run of -// a searcher. -message ExperimentSimulation { - // The simulated experiment config. +// SearchSummary contains the estimated trials and training lengths that a +// search plans to execute. +message SearchSummary { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { required: [ "config", "runs" ] } + }; + // The searcher config from which the summary is generated. google.protobuf.Struct config = 1; - // The searcher simulation seed. - uint32 seed = 2; - // The list of trials in the simulation. - repeated TrialSimulation trials = 3; + // A list of planned number of trials to their training lengths. + repeated TrialSummary trials = 2; } diff --git a/schemas/expconf/v0/searcher-adaptive-asha.json b/schemas/expconf/v0/searcher-adaptive-asha.json index fd0ae17bf2e..fe7c020b4d3 100644 --- a/schemas/expconf/v0/searcher-adaptive-asha.json +++ b/schemas/expconf/v0/searcher-adaptive-asha.json @@ -33,6 +33,20 @@ "default": null, "minimum": 1 }, + "time_metric": { + "type": [ + "string", + "null" + ], + "default": null + }, + "max_time": { + "type": [ + "integer", + "null" + ], + "default": null + }, "mode": { "enum": [ null, @@ -80,7 +94,7 @@ "boolean", "null" ], - "default": false + "default": null }, "metric": { "type": [ diff --git a/schemas/expconf/v0/searcher-async-halving.json b/schemas/expconf/v0/searcher-async-halving.json index 6df1fe42625..43bb00ffd58 100644 --- a/schemas/expconf/v0/searcher-async-halving.json +++ b/schemas/expconf/v0/searcher-async-halving.json @@ -61,7 +61,7 @@ "boolean", "null" ], - "default": false + "default": null }, "metric": { "type": [ @@ -70,6 +70,20 @@ ], "default": null }, + "time_metric": { + "type": [ + "string", + "null" + ], + "default": null + }, + "max_time": { + "type": [ + "integer", + "null" + ], + "default": null + }, "smaller_is_better": { "type": [ "boolean", diff --git a/schemas/expconf/v0/searcher.json b/schemas/expconf/v0/searcher.json index e219fa109b5..470038f0c93 100644 --- a/schemas/expconf/v0/searcher.json +++ b/schemas/expconf/v0/searcher.json @@ -66,6 +66,8 @@ "max_concurrent_trials": true, "max_length": true, "max_rungs": true, + "max_time": true, + "time_metric": true, "max_trials": true, "mode": true, "name": true, diff --git a/webui/react/src/services/api-ts-sdk/api.ts b/webui/react/src/services/api-ts-sdk/api.ts index 846445d24fa..f6a2db5e811 100644 --- a/webui/react/src/services/api-ts-sdk/api.ts +++ b/webui/react/src/services/api-ts-sdk/api.ts @@ -2239,32 +2239,6 @@ export interface V1CompareTrialsResponse { */ trials: Array; } -/** - * - * @export - * @interface V1CompleteTrialSearcherValidationResponse - */ -export interface V1CompleteTrialSearcherValidationResponse { -} -/** - * Used to complete a ValidateAfterOperation. - * @export - * @interface V1CompleteValidateAfterOperation - */ -export interface V1CompleteValidateAfterOperation { - /** - * The ValidateAfterOperation being completed. - * @type {V1ValidateAfterOperation} - * @memberof V1CompleteValidateAfterOperation - */ - op?: V1ValidateAfterOperation; - /** - * The value of searcher metric associated with this completed operation. The metric provided should be the metric used to guide HP search. - * @type {any} - * @memberof V1CompleteValidateAfterOperation - */ - searcherMetric?: any; -} /** * The config to be patched into Master Config. * @export @@ -3374,31 +3348,6 @@ export interface V1ExperimentActionResult { */ id: number; } -/** - * ExperimentSimulation holds the configuration and results of simulated run of a searcher. - * @export - * @interface V1ExperimentSimulation - */ -export interface V1ExperimentSimulation { - /** - * The simulated experiment config. - * @type {any} - * @memberof V1ExperimentSimulation - */ - config?: any; - /** - * The searcher simulation seed. - * @type {number} - * @memberof V1ExperimentSimulation - */ - seed?: number; - /** - * The list of trials in the simulation. - * @type {Array} - * @memberof V1ExperimentSimulation - */ - trials?: Array; -} /** * Response to ExpMetricNamesRequest. * @export @@ -4013,25 +3962,6 @@ export interface V1GetCommandsResponse { */ pagination?: V1Pagination; } -/** - * - * @export - * @interface V1GetCurrentTrialSearcherOperationResponse - */ -export interface V1GetCurrentTrialSearcherOperationResponse { - /** - * The current searcher operation. - * @type {V1TrialOperation} - * @memberof V1GetCurrentTrialSearcherOperationResponse - */ - op?: V1TrialOperation; - /** - * The status of the searcher operation. - * @type {boolean} - * @memberof V1GetCurrentTrialSearcherOperationResponse - */ - completed?: boolean; -} /** * Response to GetExperimentCheckpointsRequest. * @export @@ -8947,11 +8877,11 @@ export interface V1PreviewHPSearchRequest { */ export interface V1PreviewHPSearchResponse { /** - * The resulting simulation. - * @type {V1ExperimentSimulation} + * The resulting summary. + * @type {V1SearchSummary} * @memberof V1PreviewHPSearchResponse */ - simulation?: V1ExperimentSimulation; + summary?: V1SearchSummary; } /** * Project is a named collection of experiments. @@ -10639,36 +10569,6 @@ export interface V1RunActionResult { */ id: number; } -/** - * RunnableOperation represents a single runnable operation emitted by a searcher. - * @export - * @interface V1RunnableOperation - */ -export interface V1RunnableOperation { - /** - * This is the type of the operation. - * @type {V1RunnableType} - * @memberof V1RunnableOperation - */ - type?: V1RunnableType; - /** - * If the type == WORKLOAD_KIND_TRAIN, this is the number of units - * @type {string} - * @memberof V1RunnableOperation - */ - length?: string; -} -/** - * RunnableType defines the type of operation that should be executed by trial runners. - RUNNABLE_TYPE_UNSPECIFIED: Denotes an unknown runnable type. - RUNNABLE_TYPE_TRAIN: Signals to a trial runner that it should run a train. - RUNNABLE_TYPE_VALIDATE: Signals to a trial runner it should compute validation metrics. - * @export - * @enum {string} - */ -export const V1RunnableType = { - UNSPECIFIED: 'RUNNABLE_TYPE_UNSPECIFIED', - TRAIN: 'RUNNABLE_TYPE_TRAIN', - VALIDATE: 'RUNNABLE_TYPE_VALIDATE', -} as const -export type V1RunnableType = ValueOf /** * Request to prepare to start reporting to a run. * @export @@ -10929,6 +10829,50 @@ export interface V1SearchRunsResponse { */ pagination: V1Pagination; } +/** + * SearchSummary contains the estimated trials and training lengths that a search plans to execute. + * @export + * @interface V1SearchSummary + */ +export interface V1SearchSummary { + /** + * The searcher config from which the summary is generated. + * @type {any} + * @memberof V1SearchSummary + */ + config: any; + /** + * A list of planned number of trials to their training lengths. + * @type {Array} + * @memberof V1SearchSummary + */ + trials?: Array; +} +/** + * SearchUnit describes a length unit used by some searchers to manage training. + * @export + * @interface V1SearchUnit + */ +export interface V1SearchUnit { + /** + * Name of the length unit (if max_length is false). + * @type {string} + * @memberof V1SearchUnit + */ + name?: string; + /** + * Value of the length unit (if max_length is false). + * @type {number} + * @memberof V1SearchUnit + */ + value?: number; + /** + * Bool indicating whether the training length is defined in code. + * @type {boolean} + * @memberof V1SearchUnit + */ + maxLength: boolean; +} /** * Set the cluster-wide message. * @export @@ -12086,19 +12030,6 @@ export interface V1TrialMetrics { */ metrics: V1Metrics; } -/** - * TrialOperation is any operation that a trial can perform while it is active. - * @export - * @interface V1TrialOperation - */ -export interface V1TrialOperation { - /** - * ValidateAfter means a trial is currently training and will later validate. - * @type {V1ValidateAfterOperation} - * @memberof V1TrialOperation - */ - validateAfter?: V1ValidateAfterOperation; -} /** * * @export @@ -12180,25 +12111,6 @@ export interface V1TrialRunnerMetadata { */ state: string; } -/** - * TrialSimulation is a specific sequence of workloads that were run before the trial was completed. - * @export - * @interface V1TrialSimulation - */ -export interface V1TrialSimulation { - /** - * The list of operations that were run before the trial was completed. - * @type {Array} - * @memberof V1TrialSimulation - */ - operations?: Array; - /** - * The number of times that this trial configuration has occurred during the simulation. - * @type {number} - * @memberof V1TrialSimulation - */ - occurrences?: number; -} /** * * @export @@ -12341,6 +12253,25 @@ export interface V1TrialsSnapshotResponseTrial { */ batchesProcessed: number; } +/** + * TrialSummary describes the runs that are estimated to train for a certain length. + * @export + * @interface V1TrialSummary + */ +export interface V1TrialSummary { + /** + * Number of trials. + * @type {number} + * @memberof V1TrialSummary + */ + count: number; + /** + * Training length for the trials. + * @type {V1SearchUnit} + * @memberof V1TrialSummary + */ + unit: V1SearchUnit; +} /** * * @export @@ -12780,25 +12711,6 @@ export interface V1UserWebSetting { */ value?: string; } -/** - * ValidateAfterOperation means the trial should train and validate after training the given length. - * @export - * @interface V1ValidateAfterOperation - */ -export interface V1ValidateAfterOperation { - /** - * The ID of the trial that should train. - * @type {string} - * @memberof V1ValidateAfterOperation - */ - requestId?: string; - /** - * The length to train before reporting a validation. - * @type {string} - * @memberof V1ValidateAfterOperation - */ - length?: string; -} /** * ValidationHistoryEntry is a single entry for a validation history for an experiment. * @export @@ -20561,50 +20473,6 @@ export const InternalApiFetchParamCreator = function (configuration?: Configurat options: localVarRequestOptions, }; }, - /** - * - * @summary Reports to the searcher that the trial has completed the given searcher operation. - * @param {number} trialId The id of the trial. - * @param {V1CompleteValidateAfterOperation} body The completed operation. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - completeTrialSearcherValidation(trialId: number, body: V1CompleteValidateAfterOperation, options: any = {}): FetchArgs { - // verify required parameter 'trialId' is not null or undefined - if (trialId === null || trialId === undefined) { - throw new RequiredError('trialId','Required parameter trialId was null or undefined when calling completeTrialSearcherValidation.'); - } - // verify required parameter 'body' is not null or undefined - if (body === null || body === undefined) { - throw new RequiredError('body','Required parameter body was null or undefined when calling completeTrialSearcherValidation.'); - } - const localVarPath = `/api/v1/trials/{trialId}/searcher/completed_operation` - .replace(`{${"trialId"}}`, encodeURIComponent(String(trialId))); - const localVarUrlObj = new URL(localVarPath, BASE_PATH); - const localVarRequestOptions = { method: 'POST', ...options }; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication BearerToken required - if (configuration && configuration.apiKey) { - const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("Authorization") - : configuration.apiKey; - localVarHeaderParameter["Authorization"] = localVarApiKeyValue; - } - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - objToSearchParams(localVarQueryParameter, localVarUrlObj.searchParams); - objToSearchParams(options.query || {}, localVarUrlObj.searchParams); - localVarRequestOptions.headers = { ...localVarHeaderParameter, ...options.headers }; - localVarRequestOptions.body = JSON.stringify(body) - - return { - url: `${localVarUrlObj.pathname}${localVarUrlObj.search}`, - options: localVarRequestOptions, - }; - }, /** * * @summary Continues an experiment either to make the existing experiment train longer or to retry it. @@ -21023,42 +20891,6 @@ export const InternalApiFetchParamCreator = function (configuration?: Configurat options: localVarRequestOptions, }; }, - /** - * - * @summary Get the current searcher operation. - * @param {number} trialId The id of the trial. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - getCurrentTrialSearcherOperation(trialId: number, options: any = {}): FetchArgs { - // verify required parameter 'trialId' is not null or undefined - if (trialId === null || trialId === undefined) { - throw new RequiredError('trialId','Required parameter trialId was null or undefined when calling getCurrentTrialSearcherOperation.'); - } - const localVarPath = `/api/v1/trials/{trialId}/searcher/operation` - .replace(`{${"trialId"}}`, encodeURIComponent(String(trialId))); - const localVarUrlObj = new URL(localVarPath, BASE_PATH); - const localVarRequestOptions = { method: 'GET', ...options }; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication BearerToken required - if (configuration && configuration.apiKey) { - const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("Authorization") - : configuration.apiKey; - localVarHeaderParameter["Authorization"] = localVarApiKeyValue; - } - - objToSearchParams(localVarQueryParameter, localVarUrlObj.searchParams); - objToSearchParams(options.query || {}, localVarUrlObj.searchParams); - localVarRequestOptions.headers = { ...localVarHeaderParameter, ...options.headers }; - - return { - url: `${localVarUrlObj.pathname}${localVarUrlObj.search}`, - options: localVarRequestOptions, - }; - }, /** * * @summary Get task config @@ -24178,26 +24010,6 @@ export const InternalApiFp = function (configuration?: Configuration) { }); }; }, - /** - * - * @summary Reports to the searcher that the trial has completed the given searcher operation. - * @param {number} trialId The id of the trial. - * @param {V1CompleteValidateAfterOperation} body The completed operation. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - completeTrialSearcherValidation(trialId: number, body: V1CompleteValidateAfterOperation, options?: any): (fetch?: FetchAPI, basePath?: string) => Promise { - const localVarFetchArgs = InternalApiFetchParamCreator(configuration).completeTrialSearcherValidation(trialId, body, options); - return (fetch: FetchAPI = window.fetch, basePath: string = BASE_PATH) => { - return fetch(basePath + localVarFetchArgs.url, localVarFetchArgs.options).then((response) => { - if (response.status >= 200 && response.status < 300) { - return response.json(); - } else { - throw response; - } - }); - }; - }, /** * * @summary Continues an experiment either to make the existing experiment train longer or to retry it. @@ -24408,25 +24220,6 @@ export const InternalApiFp = function (configuration?: Configuration) { }); }; }, - /** - * - * @summary Get the current searcher operation. - * @param {number} trialId The id of the trial. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - getCurrentTrialSearcherOperation(trialId: number, options?: any): (fetch?: FetchAPI, basePath?: string) => Promise { - const localVarFetchArgs = InternalApiFetchParamCreator(configuration).getCurrentTrialSearcherOperation(trialId, options); - return (fetch: FetchAPI = window.fetch, basePath: string = BASE_PATH) => { - return fetch(basePath + localVarFetchArgs.url, localVarFetchArgs.options).then((response) => { - if (response.status >= 200 && response.status < 300) { - return response.json(); - } else { - throw response; - } - }); - }; - }, /** * * @summary Get task config @@ -25913,17 +25706,6 @@ export const InternalApiFactory = function (configuration?: Configuration, fetch cleanupLogs(options?: any) { return InternalApiFp(configuration).cleanupLogs(options)(fetch, basePath); }, - /** - * - * @summary Reports to the searcher that the trial has completed the given searcher operation. - * @param {number} trialId The id of the trial. - * @param {V1CompleteValidateAfterOperation} body The completed operation. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - completeTrialSearcherValidation(trialId: number, body: V1CompleteValidateAfterOperation, options?: any) { - return InternalApiFp(configuration).completeTrialSearcherValidation(trialId, body, options)(fetch, basePath); - }, /** * * @summary Continues an experiment either to make the existing experiment train longer or to retry it. @@ -26035,16 +25817,6 @@ export const InternalApiFactory = function (configuration?: Configuration, fetch getBestSearcherValidationMetric(experimentId: number, options?: any) { return InternalApiFp(configuration).getBestSearcherValidationMetric(experimentId, options)(fetch, basePath); }, - /** - * - * @summary Get the current searcher operation. - * @param {number} trialId The id of the trial. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - getCurrentTrialSearcherOperation(trialId: number, options?: any) { - return InternalApiFp(configuration).getCurrentTrialSearcherOperation(trialId, options)(fetch, basePath); - }, /** * * @summary Get task config @@ -26955,19 +26727,6 @@ export class InternalApi extends BaseAPI { return InternalApiFp(this.configuration).cleanupLogs(options)(this.fetch, this.basePath) } - /** - * - * @summary Reports to the searcher that the trial has completed the given searcher operation. - * @param {number} trialId The id of the trial. - * @param {V1CompleteValidateAfterOperation} body The completed operation. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof InternalApi - */ - public completeTrialSearcherValidation(trialId: number, body: V1CompleteValidateAfterOperation, options?: any) { - return InternalApiFp(this.configuration).completeTrialSearcherValidation(trialId, body, options)(this.fetch, this.basePath) - } - /** * * @summary Continues an experiment either to make the existing experiment train longer or to retry it. @@ -27101,18 +26860,6 @@ export class InternalApi extends BaseAPI { return InternalApiFp(this.configuration).getBestSearcherValidationMetric(experimentId, options)(this.fetch, this.basePath) } - /** - * - * @summary Get the current searcher operation. - * @param {number} trialId The id of the trial. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof InternalApi - */ - public getCurrentTrialSearcherOperation(trialId: number, options?: any) { - return InternalApiFp(this.configuration).getCurrentTrialSearcherOperation(trialId, options)(this.fetch, this.basePath) - } - /** * * @summary Get task config