From 404aa713318b0048067feaac5dd72a412c0cfebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ctvrtka?= <62988319+JiriCtvrtka@users.noreply.github.com> Date: Tue, 29 Nov 2022 17:18:43 +0100 Subject: [PATCH] PMM-10385 Explain tab. (#1311) * PMM-10385 API. * PMM-10385 Gen. * Revert "Bump github.com/ClickHouse/clickhouse-go/v2 from 2.2.0 to 2.3.0 (#1176)" This reverts commit f2e63af3635a6bbeb5b1b0a916273b46aed882b1. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen and changes. * PMM-10385 Changes. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Changes. * PMM-10385 Changes. * PMM-10385 Gen. * PMM-10385 Changes. * PMM-10385 Changes. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Mod. * PMM-10385 Mod. * PMM-10385 Mod. * PMM-10385 Tidy. * PMM-10385 Changes. * PMM-10385 Gen. * PMM-10385 Gen. * PMM-10385 Add new fields. * PMM-10385 Add license. * PMM-10385 Fix tests. * PMM-10385 Move package. * PMM-10385 Typo. * PMM-10385 Lint. * PMM-10385 Fix another test. * PMM-10385 Fix agent tests. * PMM-10385 Fix test. * PMM-10385 Fix. * PMM-10385 Add debug logging when cannot parse query. * PMM-10385 Merge QAN PR. * PMM-10385 Sync object details test. * PMM-10385 Sync reporter. * PMM-10385 Sync metrics. * PMM-10385 Sync slowlog. * PMM-10385 Sync slowlog. * Revert "PMM-10385 Sync slowlog." This reverts commit 3c9252099a0b4b92d1a5513119592192436cbc43. * PMM-10385 Format. * PMM-10385 Mod. * PMM-10385 Fix. * PMM-10385 Fix. * PMM-10385 Mod. * PMM-10385 Lint. * PMM-10385 Lint. * PMM-10385 Fix. * PMM-10385 Workaround for defect. * PMM-10385 Fix. --- agent/agents/mysql/perfschema/perfschema.go | 27 +- .../mysql/perfschema/perfschema_test.go | 3 + agent/agents/mysql/slowlog/slowlog.go | 41 +- .../mysql/slowlog/slowlog_expected.json | 7 + agent/agents/mysql/slowlog/slowlog_test.go | 10 +- agent/queryparser/parser.go | 40 + api/agentpb/collector.pb.go | 30 +- api/agentpb/collector.proto | 4 + api/managementpb/actions.pb.go | 945 ++++++------ api/managementpb/actions.proto | 45 +- api/managementpb/actions.validator.pb.go | 9 - .../start_my_sql_explain_action_responses.go | 11 +- ...rt_my_sql_explain_json_action_responses.go | 11 +- ...plain_traditional_json_action_responses.go | 11 +- api/managementpb/json/managementpb.json | 57 +- api/qanpb/collector.pb.go | 1272 +++++++++-------- api/qanpb/collector.proto | 4 + ...lain_fingerprint_by_query_id_parameters.go | 147 ++ ...plain_fingerprint_by_query_id_responses.go | 340 +++++ .../get_query_example_responses.go | 9 + .../object_details/object_details_client.go | 39 + api/qanpb/json/qanpb.json | 105 +- api/qanpb/object_details.pb.go | 592 +++++--- api/qanpb/object_details.pb.gw.go | 81 ++ api/qanpb/object_details.proto | 23 + api/qanpb/object_details.validator.pb.go | 8 + api/qanpb/object_details_grpc.pb.go | 39 + api/swagger/swagger-dev-only.json | 105 +- api/swagger/swagger-dev.json | 162 ++- api/swagger/swagger.json | 57 +- go.mod | 10 +- go.sum | 29 +- managed/services/agents/actions.go | 39 +- managed/services/agents/deps.go | 2 + .../management/grpc/actions_server.go | 6 +- managed/services/qan/client.go | 18 + qan-api2/exporters/slow_log.go | 2 + qan-api2/migrations/bindata.go | 46 + .../sql/16_explain_columns.down.sql | 3 + .../migrations/sql/16_explain_columns.up.sql | 3 + qan-api2/models/data_ingestion.go | 4 + qan-api2/models/metrics.go | 57 +- qan-api2/services/analytics/object_details.go | 13 + .../test_data/GetQueryExample_no_group.json | 5 + .../test_data/GetQueryExample_no_limit.json | 1 + 45 files changed, 3097 insertions(+), 1375 deletions(-) create mode 100644 agent/queryparser/parser.go create mode 100644 api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_parameters.go create mode 100644 api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_responses.go create mode 100644 qan-api2/migrations/sql/16_explain_columns.down.sql create mode 100644 qan-api2/migrations/sql/16_explain_columns.up.sql diff --git a/agent/agents/mysql/perfschema/perfschema.go b/agent/agents/mysql/perfschema/perfschema.go index 20ce0e76eb..a41618ee64 100644 --- a/agent/agents/mysql/perfschema/perfschema.go +++ b/agent/agents/mysql/perfschema/perfschema.go @@ -32,6 +32,7 @@ import ( "github.com/percona/pmm/agent/agents" "github.com/percona/pmm/agent/agents/cache" + "github.com/percona/pmm/agent/queryparser" "github.com/percona/pmm/agent/tlshelpers" "github.com/percona/pmm/agent/utils/truncate" "github.com/percona/pmm/agent/utils/version" @@ -333,13 +334,27 @@ func (m *PerfSchema) getNewBuckets(periodStart time.Time, periodLengthSecs uint3 b.Common.Schema = pointer.GetString(esh.CurrentSchema) } - if !m.disableQueryExamples && esh.SQLText != nil { - example, truncated := truncate.Query(*esh.SQLText, m.maxQueryLength) - if truncated { - b.Common.IsTruncated = truncated + if esh.SQLText != nil { + explainFingerprint, placeholdersCount, err := queryparser.MySQL(*esh.SQLText) + if err != nil { + m.l.Debugf("cannot parse query: %s", *esh.SQLText) + } else { + explainFingerprint, truncated := truncate.Query(explainFingerprint, m.maxQueryLength) + if truncated { + b.Common.IsTruncated = truncated + } + b.Common.ExplainFingerprint = explainFingerprint + b.Common.PlaceholdersCount = placeholdersCount + } + + if !m.disableQueryExamples { + example, truncated := truncate.Query(*esh.SQLText, m.maxQueryLength) + if truncated { + b.Common.IsTruncated = truncated + } + b.Common.Example = example + b.Common.ExampleType = agentpb.ExampleType_RANDOM } - b.Common.Example = example - b.Common.ExampleType = agentpb.ExampleType_RANDOM } } diff --git a/agent/agents/mysql/perfschema/perfschema_test.go b/agent/agents/mysql/perfschema/perfschema_test.go index 66af4dbd1b..36ff954907 100644 --- a/agent/agents/mysql/perfschema/perfschema_test.go +++ b/agent/agents/mysql/perfschema/perfschema_test.go @@ -336,6 +336,8 @@ func TestPerfSchema(t *testing.T) { assert.InDelta(t, 0.1, actual.Common.MQueryTimeSum, 0.09) expected := &agentpb.MetricsBucket{ Common: &agentpb.MetricsBucket_Common{ + ExplainFingerprint: "select /* Sleep */ sleep(:1) from dual", + PlaceholdersCount: 1, Fingerprint: "SELECT `sleep` (?)", Schema: "world", AgentId: "agent_id", @@ -380,6 +382,7 @@ func TestPerfSchema(t *testing.T) { assert.InDelta(t, 0, actual.Mysql.MLockTimeSum, 0.09) expected := &agentpb.MetricsBucket{ Common: &agentpb.MetricsBucket_Common{ + ExplainFingerprint: "select /* AllCities */ * from city", Fingerprint: "SELECT * FROM `city`", Schema: "world", AgentId: "agent_id", diff --git a/agent/agents/mysql/slowlog/slowlog.go b/agent/agents/mysql/slowlog/slowlog.go index a8dcfeba73..63d1386d89 100644 --- a/agent/agents/mysql/slowlog/slowlog.go +++ b/agent/agents/mysql/slowlog/slowlog.go @@ -36,6 +36,7 @@ import ( "github.com/percona/pmm/agent/agents" "github.com/percona/pmm/agent/agents/mysql/slowlog/parser" + "github.com/percona/pmm/agent/queryparser" "github.com/percona/pmm/agent/tlshelpers" "github.com/percona/pmm/agent/utils/backoff" "github.com/percona/pmm/agent/utils/truncate" @@ -366,12 +367,12 @@ func (s *SlowLog) processFile(ctx context.Context, file string, outlierTime floa s.l.Tracef("Parsed slowlog event: %+v.", e) fingerprint := query.Fingerprint(e.Query) digest := query.Id(fingerprint) - aggregator.AddEvent(e, digest, e.User, e.Host, e.Db, e.Server, fingerprint) + aggregator.AddEvent(e, digest, e.User, e.Host, e.Db, e.Server, e.Query) case <-t.C: lengthS := uint32(math.Round(wait.Seconds())) // round 59.9s/60.1s to 60s res := aggregator.Finalize() - buckets := makeBuckets(s.params.AgentID, res, start, lengthS, s.params.DisableQueryExamples, s.params.MaxQueryLength) + buckets := makeBuckets(s.params.AgentID, res, start, lengthS, s.params.DisableQueryExamples, s.params.MaxQueryLength, s.l) s.l.Debugf("Made %d buckets out of %d classes in %s+%d interval. Wait time: %s.", len(buckets), len(res.Class), start.Format("15:04:05"), lengthS, time.Since(start)) @@ -387,7 +388,7 @@ func (s *SlowLog) processFile(ctx context.Context, file string, outlierTime floa } // makeBuckets is a pure function for easier testing. -func makeBuckets(agentID string, res event.Result, periodStart time.Time, periodLengthSecs uint32, disableQueryExamples bool, maxQueryLength int32) []*agentpb.MetricsBucket { //nolint:cyclop,lll +func makeBuckets(agentID string, res event.Result, periodStart time.Time, periodLengthSecs uint32, disableQueryExamples bool, maxQueryLength int32, l *logrus.Entry) []*agentpb.MetricsBucket { buckets := make([]*agentpb.MetricsBucket, 0, len(res.Class)) for _, v := range res.Class { @@ -395,6 +396,12 @@ func makeBuckets(agentID string, res event.Result, periodStart time.Time, period continue } + // In fingerprint field there is no fingerprint yet. + // It contains whole query without any changes. + // This in workaround to keep original query until field "Query" will be + // added here: https://github.com/percona/go-mysql/blob/PMM-2.0/event/class.go#L56 + q := v.Fingerprint + v.Fingerprint = query.Fingerprint(v.Fingerprint) fingerprint, isTruncated := truncate.Query(v.Fingerprint, maxQueryLength) mb := &agentpb.MetricsBucket{ Common: &agentpb.MetricsBucket_Common{ @@ -416,13 +423,29 @@ func makeBuckets(agentID string, res event.Result, periodStart time.Time, period Mysql: &agentpb.MetricsBucket_MySQL{}, } - if v.Example != nil && !disableQueryExamples { - example, truncated := truncate.Query(v.Example.Query, maxQueryLength) - if truncated { - mb.Common.IsTruncated = truncated + if q != "" { + explainFingerprint, placeholdersCount, err := queryparser.MySQL(v.Example.Query) + if err != nil { + l.Debugf("cannot parse query: %s", v.Example.Query) + } else { + explainFingerprint, truncated := truncate.Query(explainFingerprint, maxQueryLength) + if truncated { + mb.Common.IsTruncated = truncated + } + mb.Common.ExplainFingerprint = explainFingerprint + mb.Common.PlaceholdersCount = placeholdersCount + } + } + + if v.Example != nil { + if !disableQueryExamples { + example, truncated := truncate.Query(v.Example.Query, maxQueryLength) + if truncated { + mb.Common.IsTruncated = truncated + } + mb.Common.Example = example + mb.Common.ExampleType = agentpb.ExampleType_RANDOM } - mb.Common.Example = example - mb.Common.ExampleType = agentpb.ExampleType_RANDOM } // If key has suffix _time or _wait than field is TimeMetrics. diff --git a/agent/agents/mysql/slowlog/slowlog_expected.json b/agent/agents/mysql/slowlog/slowlog_expected.json index d5261918ce..b7efa1fbbe 100644 --- a/agent/agents/mysql/slowlog/slowlog_expected.json +++ b/agent/agents/mysql/slowlog/slowlog_expected.json @@ -2,6 +2,8 @@ { "common": { "queryid": "C684EA1D78348D23", + "explain_fingerprint": "select `name`, subsystem, type, `comment`, `count` from information_schema.innodb_metrics where `status` = :1", + "placeholders_count": 1, "fingerprint": "select name, subsystem, type, comment, count from information_schema.innodb_metrics where status = ?", "username": "root", "agent_id": "/agent_id/73ee2f92-d5aa-45f0-8b09-6d3df605fd44", @@ -44,6 +46,8 @@ { "common": { "queryid": "FA521F3C42DC5272", + "explain_fingerprint": "select pad from sbtest1 where id = :1", + "placeholders_count": 1, "fingerprint": "select pad from sbtest1 where id=?", "schema": "sbtest", "username": "root", @@ -117,6 +121,7 @@ { "common": { "queryid": "28FC5B5D583E2DA6", + "explain_fingerprint": "show global status", "fingerprint": "show global status", "username": "root", "agent_id": "/agent_id/73ee2f92-d5aa-45f0-8b09-6d3df605fd44", @@ -159,6 +164,7 @@ { "common": { "queryid": "328AAB9660C2879E", + "explain_fingerprint": "set @@lock_wait_timeout = 2", "fingerprint": "set lock_wait_timeout=?", "username": "root", "agent_id": "/agent_id/73ee2f92-d5aa-45f0-8b09-6d3df605fd44", @@ -189,6 +195,7 @@ { "common": { "queryid": "A212AD93263CF26F", + "explain_fingerprint": "select @@version from dual", "fingerprint": "select @@version", "username": "root", "agent_id": "/agent_id/73ee2f92-d5aa-45f0-8b09-6d3df605fd44", diff --git a/agent/agents/mysql/slowlog/slowlog_test.go b/agent/agents/mysql/slowlog/slowlog_test.go index bb6526657a..f152ea957d 100644 --- a/agent/agents/mysql/slowlog/slowlog_test.go +++ b/agent/agents/mysql/slowlog/slowlog_test.go @@ -53,7 +53,8 @@ func TestSlowLogMakeBucketsInvalidUTF8(t *testing.T) { parsingResult := event.Result{ Class: map[string]*event.Class{ "example": { - Metrics: &event.Metrics{}, + Metrics: &event.Metrics{}, + Fingerprint: "SELECT * FROM contacts t0 WHERE t0.person_id = '߿�\xff\\ud83d\xdd'", Example: &event.Example{ Query: "SELECT * FROM contacts t0 WHERE t0.person_id = '߿�\xff\\ud83d\xdd'", }, @@ -61,10 +62,13 @@ func TestSlowLogMakeBucketsInvalidUTF8(t *testing.T) { }, } - actualBuckets := makeBuckets(agentID, parsingResult, periodStart, 60, false, truncate.GetDefaultMaxQueryLength()) + actualBuckets := makeBuckets(agentID, parsingResult, periodStart, 60, false, truncate.GetDefaultMaxQueryLength(), logrus.NewEntry(logrus.New())) expectedBuckets := []*agentpb.MetricsBucket{ { Common: &agentpb.MetricsBucket_Common{ + Fingerprint: "select * from contacts t0 where t0.person_id = ?", + ExplainFingerprint: "select * from contacts as t0 where t0.person_id = :1", + PlaceholdersCount: 1, AgentId: agentID, AgentType: inventorypb.AgentType_QAN_MYSQL_SLOWLOG_AGENT, PeriodStartUnixSecs: 1557137220, @@ -90,7 +94,7 @@ func TestSlowLogMakeBuckets(t *testing.T) { parsingResult := event.Result{} getDataFromFile(t, "slowlog_fixture.json", &parsingResult) - actualBuckets := makeBuckets(agentID, parsingResult, periodStart, 60, false, truncate.GetDefaultMaxQueryLength()) + actualBuckets := makeBuckets(agentID, parsingResult, periodStart, 60, false, truncate.GetDefaultMaxQueryLength(), logrus.NewEntry(logrus.New())) var expectedBuckets []*agentpb.MetricsBucket getDataFromFile(t, "slowlog_expected.json", &expectedBuckets) diff --git a/agent/queryparser/parser.go b/agent/queryparser/parser.go new file mode 100644 index 0000000000..7caa911c0e --- /dev/null +++ b/agent/queryparser/parser.go @@ -0,0 +1,40 @@ +// Copyright 2019 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package queryparser + +import ( + "github.com/pkg/errors" + "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/sqlparser" +) + +// MySQL parse query and return fingeprint and placeholders. +func MySQL(q string) (string, uint32, error) { + normalizedQuery, _, err := sqlparser.Parse2(q) + if err != nil { + return "", 0, errors.Wrap(err, "cannot parse query") + } + + bv := make(map[string]*query.BindVariable) + err = sqlparser.Normalize(normalizedQuery, sqlparser.NewReservedVars("", sqlparser.GetBindvars(normalizedQuery)), bv) + if err != nil { + return "", 0, errors.Wrap(err, "cannot normalize query") + } + + parsedQuery := sqlparser.NewParsedQuery(normalizedQuery) + bindVars := sqlparser.GetBindvars(normalizedQuery) + + return parsedQuery.Query, uint32(len(bindVars)), nil +} diff --git a/api/agentpb/collector.pb.go b/api/agentpb/collector.pb.go index a83128ef5a..9558cf4974 100644 --- a/api/agentpb/collector.pb.go +++ b/api/agentpb/collector.pb.go @@ -271,6 +271,10 @@ type MetricsBucket_Common struct { // md5 of digest_text/fingerprint. Queryid string `protobuf:"bytes,1,opt,name=queryid,proto3" json:"queryid,omitempty"` + // contains fingerprint prepared by sql parser, which can be different than fingerprint. + ExplainFingerprint string `protobuf:"bytes,25,opt,name=explain_fingerprint,json=explainFingerprint,proto3" json:"explain_fingerprint,omitempty"` + // ammount of variables in query. + PlaceholdersCount uint32 `protobuf:"varint,26,opt,name=placeholders_count,json=placeholdersCount,proto3" json:"placeholders_count,omitempty"` // digest_text - query signature. Query without values. Fingerprint string `protobuf:"bytes,2,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` // Dimension Group. @@ -363,6 +367,20 @@ func (x *MetricsBucket_Common) GetQueryid() string { return "" } +func (x *MetricsBucket_Common) GetExplainFingerprint() string { + if x != nil { + return x.ExplainFingerprint + } + return "" +} + +func (x *MetricsBucket_Common) GetPlaceholdersCount() uint32 { + if x != nil { + return x.PlaceholdersCount + } + return 0 +} + func (x *MetricsBucket_Common) GetFingerprint() string { if x != nil { return x.Fingerprint @@ -2150,7 +2168,7 @@ var file_agentpb_collector_proto_rawDesc = []byte{ 0x0a, 0x17, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x70, 0x62, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x1a, 0x18, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x70, 0x62, 0x2f, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, 0x4b, 0x0a, 0x0d, 0x4d, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, 0x4c, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, @@ -2165,10 +2183,16 @@ var file_agentpb_collector_proto_rawDesc = []byte{ 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, - 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x1a, 0x91, 0x08, 0x0a, + 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x1a, 0xf1, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, + 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, + 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, + 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, diff --git a/api/agentpb/collector.proto b/api/agentpb/collector.proto index 2fa5759f7d..a3e8f6b394 100644 --- a/api/agentpb/collector.proto +++ b/api/agentpb/collector.proto @@ -31,6 +31,10 @@ message MetricsBucket { message Common { // md5 of digest_text/fingerprint. string queryid = 1; + // contains fingerprint prepared by sql parser, which can be different than fingerprint. + string explain_fingerprint = 25; + // ammount of variables in query. + uint32 placeholders_count = 26; // digest_text - query signature. Query without values. string fingerprint = 2; // diff --git a/api/managementpb/actions.pb.go b/api/managementpb/actions.pb.go index 8b83370835..101be3b9fa 100644 --- a/api/managementpb/actions.pb.go +++ b/api/managementpb/actions.pb.go @@ -242,9 +242,14 @@ type StartMySQLExplainActionRequest struct { PmmAgentId string `protobuf:"bytes,1,opt,name=pmm_agent_id,json=pmmAgentId,proto3" json:"pmm_agent_id,omitempty"` // Service ID for this Action. Required. ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryId string `protobuf:"bytes,6,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty"` + // Array of placeholder values + Placeholders []string `protobuf:"bytes,5,rep,name=placeholders,proto3" json:"placeholders,omitempty"` + // Database name. Required if it can't be deduced from the query ID. Database string `protobuf:"bytes,4,opt,name=database,proto3" json:"database,omitempty"` } @@ -301,6 +306,20 @@ func (x *StartMySQLExplainActionRequest) GetQuery() string { return "" } +func (x *StartMySQLExplainActionRequest) GetQueryId() string { + if x != nil { + return x.QueryId + } + return "" +} + +func (x *StartMySQLExplainActionRequest) GetPlaceholders() []string { + if x != nil { + return x.Placeholders + } + return nil +} + func (x *StartMySQLExplainActionRequest) GetDatabase() string { if x != nil { return x.Database @@ -374,9 +393,14 @@ type StartMySQLExplainJSONActionRequest struct { PmmAgentId string `protobuf:"bytes,1,opt,name=pmm_agent_id,json=pmmAgentId,proto3" json:"pmm_agent_id,omitempty"` // Service ID for this Action. Required. ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryId string `protobuf:"bytes,6,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty"` + // Array of placeholder values + Placeholders []string `protobuf:"bytes,5,rep,name=placeholders,proto3" json:"placeholders,omitempty"` + // Database name. Required if it can't be deduced from the query ID. Database string `protobuf:"bytes,4,opt,name=database,proto3" json:"database,omitempty"` } @@ -433,6 +457,20 @@ func (x *StartMySQLExplainJSONActionRequest) GetQuery() string { return "" } +func (x *StartMySQLExplainJSONActionRequest) GetQueryId() string { + if x != nil { + return x.QueryId + } + return "" +} + +func (x *StartMySQLExplainJSONActionRequest) GetPlaceholders() []string { + if x != nil { + return x.Placeholders + } + return nil +} + func (x *StartMySQLExplainJSONActionRequest) GetDatabase() string { if x != nil { return x.Database @@ -506,9 +544,14 @@ type StartMySQLExplainTraditionalJSONActionRequest struct { PmmAgentId string `protobuf:"bytes,1,opt,name=pmm_agent_id,json=pmmAgentId,proto3" json:"pmm_agent_id,omitempty"` // Service ID for this Action. Required. ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryId string `protobuf:"bytes,6,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty"` + // Array of placeholder values + Placeholders []string `protobuf:"bytes,5,rep,name=placeholders,proto3" json:"placeholders,omitempty"` + // Database name. Required if it can't be deduced from the query ID. Database string `protobuf:"bytes,4,opt,name=database,proto3" json:"database,omitempty"` } @@ -565,6 +608,20 @@ func (x *StartMySQLExplainTraditionalJSONActionRequest) GetQuery() string { return "" } +func (x *StartMySQLExplainTraditionalJSONActionRequest) GetQueryId() string { + if x != nil { + return x.QueryId + } + return "" +} + +func (x *StartMySQLExplainTraditionalJSONActionRequest) GetPlaceholders() []string { + if x != nil { + return x.Placeholders + } + return nil +} + func (x *StartMySQLExplainTraditionalJSONActionRequest) GetDatabase() string { if x != nil { return x.Database @@ -1986,79 +2043,107 @@ var file_managementpb_actions_proto_rawDesc = []byte{ 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa3, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xda, 0x01, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, - 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, - 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, - 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x22, 0x64, 0x0a, 0x23, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb2, 0x01, 0x0a, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x6f, 0x0a, 0x2e, 0x53, + 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, - 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, - 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb4, 0x01, 0x0a, - 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, - 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x27, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, - 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb4, 0x01, - 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xde, 0x01, + 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, + 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, + 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x64, + 0x0a, 0x23, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, + 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0xe9, 0x01, 0x0a, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, + 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, + 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, + 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x22, 0x6f, 0x0a, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, + 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, + 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, + 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x27, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, + 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x27, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, + 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, @@ -2068,51 +2153,15 @@ var file_managementpb_actions_proto_rawDesc = []byte{ 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x27, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, - 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, - 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xae, - 0x01, 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, - 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, - 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x2b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, - 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, - 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, - 0x6d, 0x0a, 0x2c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, - 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, - 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb3, - 0x01, 0x0a, 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, + 0x62, 0x61, 0x73, 0x65, 0x22, 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, + 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x2b, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, @@ -2122,356 +2171,374 @@ var file_managementpb_actions_proto_rawDesc = []byte{ 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, + 0x62, 0x61, 0x73, 0x65, 0x22, 0x6d, 0x0a, 0x2c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, + 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x25, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, - 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x89, 0x01, - 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, - 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x05, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, - 0x58, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, - 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x58, 0x0a, - 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, - 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x1d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, - 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, + 0x58, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x26, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, + 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x22, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, + 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x62, + 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x58, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x1c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, + 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x1d, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, + 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x5f, 0x0a, + 0x1e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, + 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x65, + 0x0a, 0x22, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x23, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, + 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, + 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x20, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x22, 0x64, 0x0a, 0x23, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, - 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, - 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, - 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x21, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, - 0x3a, 0x0a, 0x13, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe2, 0xdf, 0x1f, 0x02, 0x58, - 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0xab, 0x02, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, - 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x1b, - 0x0a, 0x17, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x4d, - 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x59, 0x53, 0x51, - 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x04, 0x12, 0x20, - 0x0a, 0x1c, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, - 0x57, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x05, - 0x12, 0x19, 0x0a, 0x15, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, 0x4c, 0x5f, 0x53, - 0x48, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x4d, - 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x07, - 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x54, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x08, - 0x12, 0x14, 0x0a, 0x10, 0x50, 0x54, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x55, 0x4d, - 0x4d, 0x41, 0x52, 0x59, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x54, 0x5f, 0x50, 0x47, 0x5f, - 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x54, 0x5f, - 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, - 0x0b, 0x32, 0xc7, 0x1e, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa2, 0x01, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x92, 0x41, 0x30, 0x12, 0x0a, 0x47, - 0x65, 0x74, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x22, 0x47, 0x65, 0x74, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x3a, - 0x01, 0x2a, 0x12, 0x81, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, - 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x22, 0x62, 0x0a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x70, 0x6d, 0x6d, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6d, 0x6d, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x13, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xe2, 0xdf, 0x1f, 0x02, 0x58, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x22, 0x16, 0x0a, 0x14, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xab, 0x02, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, + 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, + 0x57, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, + 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x44, 0x45, + 0x58, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x51, + 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x41, + 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, + 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x06, + 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x45, 0x58, 0x50, 0x4c, + 0x41, 0x49, 0x4e, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x54, 0x5f, 0x53, 0x55, 0x4d, 0x4d, + 0x41, 0x52, 0x59, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x54, 0x5f, 0x4d, 0x59, 0x53, 0x51, + 0x4c, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x50, + 0x54, 0x5f, 0x50, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x0a, 0x12, 0x16, + 0x0a, 0x12, 0x50, 0x54, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x55, 0x4d, + 0x4d, 0x41, 0x52, 0x59, 0x10, 0x0b, 0x32, 0xc7, 0x1e, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x92, + 0x41, 0x30, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x22, + 0x47, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, + 0x6f, 0x66, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x47, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x81, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, - 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8c, 0x01, 0x92, 0x41, 0x56, 0x12, 0x1c, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, - 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x36, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, - 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, - 0x61, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x02, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8e, 0x01, 0x92, 0x41, 0x54, 0x12, 0x21, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, - 0x41, 0x49, 0x4e, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, + 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8c, 0x01, 0x92, + 0x41, 0x56, 0x12, 0x1c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x36, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x02, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x3a, 0x01, 0x2a, 0x12, 0xd3, 0x02, 0x0a, 0x26, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8e, 0x01, 0x92, + 0x41, 0x54, 0x12, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x27, 0x20, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, + 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x4a, 0x53, 0x4f, 0x4e, 0x3a, 0x01, 0x2a, 0x12, 0xd3, 0x02, + 0x0a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, + 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, + 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, - 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x92, 0x41, 0x6c, - 0x12, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, - 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x20, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0x3b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x45, - 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, - 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3c, 0x22, 0x37, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x54, 0x72, 0x61, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x3a, 0x01, 0x2a, 0x12, 0x9d, - 0x02, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, - 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x01, 0x92, 0x41, - 0x52, 0x12, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, - 0x53, 0x48, 0x4f, 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, - 0x45, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x9d, - 0x02, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, - 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x01, 0x92, 0x41, - 0x52, 0x12, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, - 0x53, 0x48, 0x4f, 0x57, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x54, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf6, - 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, - 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, + 0x4e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xb1, 0x01, 0x92, 0x41, 0x6c, 0x12, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x20, 0x54, 0x72, 0x61, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x27, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x22, 0x37, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, + 0x6e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4a, 0x53, 0x4f, 0x4e, + 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x02, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, + 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, + 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x90, 0x01, 0x92, 0x41, 0x52, 0x12, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, + 0x4f, 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x27, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x02, 0x0a, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, + 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, + 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x90, 0x01, 0x92, 0x41, 0x52, 0x12, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x20, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, + 0x4f, 0x57, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x27, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0xf6, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, 0x92, 0x41, 0x44, 0x12, 0x1f, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, - 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, - 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x02, 0x0a, 0x24, 0x53, 0x74, 0x61, 0x72, + 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, + 0x92, 0x41, 0x44, 0x12, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x79, + 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x02, 0x0a, + 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, + 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, + 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x37, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, - 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, - 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x9f, 0x01, 0x92, 0x41, 0x5c, 0x12, 0x2b, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x20, 0x27, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, - 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x27, 0x20, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, - 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x27, 0x20, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x22, 0x35, 0x2f, 0x76, 0x31, - 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, - 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x95, 0x02, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, - 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, - 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, - 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x8b, 0x01, 0x92, 0x41, 0x4e, 0x12, 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, 0x6f, - 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, - 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x26, 0x53, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9f, 0x01, 0x92, 0x41, 0x5c, 0x12, 0x2b, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, + 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, + 0x42, 0x4c, 0x45, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, - 0x53, 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, - 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0xf4, 0x01, - 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, - 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, - 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7a, 0x92, 0x41, 0x42, 0x12, 0x1e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, 0x45, 0x58, - 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x20, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, 0x45, - 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xe3, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, + 0x53, 0x48, 0x4f, 0x57, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x20, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x22, 0x35, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, + 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x95, 0x02, 0x0a, 0x1e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, + 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x78, 0x92, 0x41, 0x45, 0x12, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, 0x54, - 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x28, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, - 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, 0x69, 0x74, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, - 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x02, 0x0a, 0x16, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x01, 0x92, - 0x41, 0x5b, 0x12, 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, 0x54, 0x20, 0x50, 0x6f, - 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x33, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, - 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, 0x69, - 0x74, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2c, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, - 0x90, 0x02, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, - 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x2e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x8f, 0x01, 0x92, 0x41, 0x55, 0x12, 0x21, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, - 0x54, 0x20, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x73, 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, - 0x69, 0x74, 0x20, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x31, 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, - 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, - 0x01, 0x2a, 0x12, 0x84, 0x02, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, - 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, + 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x4e, 0x12, 0x24, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x20, 0x27, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, + 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x26, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, + 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x48, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x27, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x2f, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x74, + 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, + 0x01, 0x2a, 0x12, 0xf4, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, + 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, + 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, + 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x89, 0x01, - 0x92, 0x41, 0x51, 0x12, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x50, 0x54, 0x20, 0x4d, - 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x65, - 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, 0x69, 0x74, 0x20, 0x4d, 0x79, - 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, + 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7a, 0x92, + 0x41, 0x42, 0x12, 0x1e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, + 0x44, 0x42, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x4d, 0x6f, 0x6e, 0x67, + 0x6f, 0x44, 0x42, 0x20, 0x45, 0x58, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x0c, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, - 0x41, 0x21, 0x12, 0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, 0x2a, 0x42, 0x8f, 0x01, 0x0a, 0x0e, - 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0c, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, - 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0a, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0xca, 0x02, 0x0a, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0xe2, 0x02, 0x16, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x0a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x45, + 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xe3, 0x01, 0x0a, 0x14, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x92, 0x41, 0x45, 0x12, 0x19, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x20, 0x27, 0x50, 0x54, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, + 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, 0x69, 0x74, 0x20, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x54, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, + 0x82, 0x02, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, + 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x90, 0x01, 0x92, 0x41, 0x5b, 0x12, 0x24, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x27, + 0x50, 0x54, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x33, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, + 0x6f, 0x6f, 0x6c, 0x6b, 0x69, 0x74, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x53, 0x51, + 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x50, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x02, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, + 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x01, 0x92, 0x41, 0x55, 0x12, 0x21, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x20, 0x27, 0x50, 0x54, 0x20, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x30, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, + 0x54, 0x6f, 0x6f, 0x6c, 0x6b, 0x69, 0x74, 0x20, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x20, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x6f, 0x6e, 0x67, 0x6f, 0x44, 0x42, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x02, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x89, 0x01, 0x92, 0x41, 0x51, 0x12, 0x1f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, + 0x27, 0x50, 0x54, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x73, 0x20, 0x27, 0x50, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x20, 0x54, 0x6f, 0x6f, 0x6c, 0x6b, + 0x69, 0x74, 0x20, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x20, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x27, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x54, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9f, + 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x21, 0x12, 0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x73, 0x20, 0x61, 0x6e, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, + 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, 0x2a, + 0x42, 0x8f, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x42, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x4d, + 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0xca, + 0x02, 0x0a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0xe2, 0x02, 0x16, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/managementpb/actions.proto b/api/managementpb/actions.proto index aedc94d7ca..f23678f740 100644 --- a/api/managementpb/actions.proto +++ b/api/managementpb/actions.proto @@ -55,13 +55,14 @@ message StartMySQLExplainActionRequest { string_not_empty: true } ]; - // SQL query. Required. - string query = 3 [ - (validator.field) = { - string_not_empty: true - } - ]; - // Database name. Required if it can't be deduced from the query. + // Query ID or query is required. + // Value of query. + string query = 3; + // Query ID of query. + string query_id = 6; + // Array of placeholder values + repeated string placeholders = 5; + // Database name. Required if it can't be deduced from the query ID. string database = 4; } @@ -81,13 +82,14 @@ message StartMySQLExplainJSONActionRequest { string_not_empty: true } ]; - // SQL query. Required. - string query = 3 [ - (validator.field) = { - string_not_empty: true - } - ]; - // Database name. Required if it can't be deduced from the query. + // Query ID or query is required. + // Value of query. + string query = 3; + // Query ID of query. + string query_id = 6; + // Array of placeholder values + repeated string placeholders = 5; + // Database name. Required if it can't be deduced from the query ID. string database = 4; } @@ -107,13 +109,14 @@ message StartMySQLExplainTraditionalJSONActionRequest { string_not_empty: true } ]; - // SQL query. Required. - string query = 3 [ - (validator.field) = { - string_not_empty: true - } - ]; - // Database name. Required if it can't be deduced from the query. + // Query ID or query is required. + // Value of query. + string query = 3; + // Query ID of query. + string query_id = 6; + // Array of placeholder values + repeated string placeholders = 5; + // Database name. Required if it can't be deduced from the query ID. string database = 4; } diff --git a/api/managementpb/actions.validator.pb.go b/api/managementpb/actions.validator.pb.go index 6ac28644d2..020774f4b0 100644 --- a/api/managementpb/actions.validator.pb.go +++ b/api/managementpb/actions.validator.pb.go @@ -36,9 +36,6 @@ func (this *StartMySQLExplainActionRequest) Validate() error { if this.ServiceId == "" { return github_com_mwitkow_go_proto_validators.FieldError("ServiceId", fmt.Errorf(`value '%v' must not be an empty string`, this.ServiceId)) } - if this.Query == "" { - return github_com_mwitkow_go_proto_validators.FieldError("Query", fmt.Errorf(`value '%v' must not be an empty string`, this.Query)) - } return nil } @@ -50,9 +47,6 @@ func (this *StartMySQLExplainJSONActionRequest) Validate() error { if this.ServiceId == "" { return github_com_mwitkow_go_proto_validators.FieldError("ServiceId", fmt.Errorf(`value '%v' must not be an empty string`, this.ServiceId)) } - if this.Query == "" { - return github_com_mwitkow_go_proto_validators.FieldError("Query", fmt.Errorf(`value '%v' must not be an empty string`, this.Query)) - } return nil } @@ -64,9 +58,6 @@ func (this *StartMySQLExplainTraditionalJSONActionRequest) Validate() error { if this.ServiceId == "" { return github_com_mwitkow_go_proto_validators.FieldError("ServiceId", fmt.Errorf(`value '%v' must not be an empty string`, this.ServiceId)) } - if this.Query == "" { - return github_com_mwitkow_go_proto_validators.FieldError("Query", fmt.Errorf(`value '%v' must not be an empty string`, this.Query)) - } return nil } diff --git a/api/managementpb/json/client/actions/start_my_sql_explain_action_responses.go b/api/managementpb/json/client/actions/start_my_sql_explain_action_responses.go index 3a9b33a8a5..6e7feb2a9d 100644 --- a/api/managementpb/json/client/actions/start_my_sql_explain_action_responses.go +++ b/api/managementpb/json/client/actions/start_my_sql_explain_action_responses.go @@ -129,10 +129,17 @@ type StartMySQLExplainActionBody struct { // Service ID for this Action. Required. ServiceID string `json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryID string `json:"query_id,omitempty"` + + // Array of placeholder values + Placeholders []string `json:"placeholders"` + + // Database name. Required if it can't be deduced from the query ID. Database string `json:"database,omitempty"` } diff --git a/api/managementpb/json/client/actions/start_my_sql_explain_json_action_responses.go b/api/managementpb/json/client/actions/start_my_sql_explain_json_action_responses.go index 273216b710..37be27a151 100644 --- a/api/managementpb/json/client/actions/start_my_sql_explain_json_action_responses.go +++ b/api/managementpb/json/client/actions/start_my_sql_explain_json_action_responses.go @@ -129,10 +129,17 @@ type StartMySQLExplainJSONActionBody struct { // Service ID for this Action. Required. ServiceID string `json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryID string `json:"query_id,omitempty"` + + // Array of placeholder values + Placeholders []string `json:"placeholders"` + + // Database name. Required if it can't be deduced from the query ID. Database string `json:"database,omitempty"` } diff --git a/api/managementpb/json/client/actions/start_my_sql_explain_traditional_json_action_responses.go b/api/managementpb/json/client/actions/start_my_sql_explain_traditional_json_action_responses.go index ebea881b94..c5b392e190 100644 --- a/api/managementpb/json/client/actions/start_my_sql_explain_traditional_json_action_responses.go +++ b/api/managementpb/json/client/actions/start_my_sql_explain_traditional_json_action_responses.go @@ -129,10 +129,17 @@ type StartMySQLExplainTraditionalJSONActionBody struct { // Service ID for this Action. Required. ServiceID string `json:"service_id,omitempty"` - // SQL query. Required. + // Query ID or query is required. + // Value of query. Query string `json:"query,omitempty"` - // Database name. Required if it can't be deduced from the query. + // Query ID of query. + QueryID string `json:"query_id,omitempty"` + + // Array of placeholder values + Placeholders []string `json:"placeholders"` + + // Database name. Required if it can't be deduced from the query ID. Database string `json:"database,omitempty"` } diff --git a/api/managementpb/json/managementpb.json b/api/managementpb/json/managementpb.json index 219fedbaa7..12df74523f 100644 --- a/api/managementpb/json/managementpb.json +++ b/api/managementpb/json/managementpb.json @@ -279,9 +279,17 @@ "type": "object", "properties": { "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "description": "Database name. Required if it can't be deduced from the query ID.", "type": "string", - "x-order": 3 + "x-order": 5 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 }, "pmm_agent_id": { "description": "pmm-agent ID where to run this Action.", @@ -289,10 +297,15 @@ "x-order": 0 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, + "query_id": { + "description": "Query ID of query.", + "type": "string", + "x-order": 3 + }, "service_id": { "description": "Service ID for this Action. Required.", "type": "string", @@ -372,9 +385,17 @@ "type": "object", "properties": { "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "description": "Database name. Required if it can't be deduced from the query ID.", "type": "string", - "x-order": 3 + "x-order": 5 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 }, "pmm_agent_id": { "description": "pmm-agent ID where to run this Action.", @@ -382,10 +403,15 @@ "x-order": 0 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, + "query_id": { + "description": "Query ID of query.", + "type": "string", + "x-order": 3 + }, "service_id": { "description": "Service ID for this Action. Required.", "type": "string", @@ -465,9 +491,17 @@ "type": "object", "properties": { "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "description": "Database name. Required if it can't be deduced from the query ID.", "type": "string", - "x-order": 3 + "x-order": 5 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 }, "pmm_agent_id": { "description": "pmm-agent ID where to run this Action.", @@ -475,10 +509,15 @@ "x-order": 0 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, + "query_id": { + "description": "Query ID of query.", + "type": "string", + "x-order": 3 + }, "service_id": { "description": "Service ID for this Action. Required.", "type": "string", diff --git a/api/qanpb/collector.pb.go b/api/qanpb/collector.pb.go index 84111947a2..0f8272b02e 100644 --- a/api/qanpb/collector.pb.go +++ b/api/qanpb/collector.pb.go @@ -79,6 +79,10 @@ type MetricsBucket struct { // md5 of digest_text/fingerprint. Queryid string `protobuf:"bytes,1,opt,name=queryid,proto3" json:"queryid,omitempty"` + // contains fingerprint prepared by sql parser, which can be different than fingerprint. + ExplainFingerprint string `protobuf:"bytes,253,opt,name=explain_fingerprint,json=explainFingerprint,proto3" json:"explain_fingerprint,omitempty"` + // ammount of variables in query. + PlaceholdersCount uint32 `protobuf:"varint,254,opt,name=placeholders_count,json=placeholdersCount,proto3" json:"placeholders_count,omitempty"` // digest_text - query signature. Query without values. Fingerprint string `protobuf:"bytes,2,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` // Service Name (can be several Services on one Node). @@ -448,6 +452,20 @@ func (x *MetricsBucket) GetQueryid() string { return "" } +func (x *MetricsBucket) GetExplainFingerprint() string { + if x != nil { + return x.ExplainFingerprint + } + return "" +} + +func (x *MetricsBucket) GetPlaceholdersCount() uint32 { + if x != nil { + return x.PlaceholdersCount + } + return 0 +} + func (x *MetricsBucket) GetFingerprint() string { if x != nil { return x.Fingerprint @@ -2026,659 +2044,665 @@ var file_qanpb_collector_proto_rawDesc = []byte{ 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x22, 0xb3, 0x4f, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x63, 0x6b, 0x65, 0x74, 0x22, 0x95, 0x50, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x17, 0x0a, 0x06, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x18, 0xa6, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0xe0, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe1, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, - 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0xe3, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xa5, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, - 0xa4, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x12, 0x17, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0xa3, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x02, 0x61, 0x7a, - 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x61, 0x7a, 0x12, 0x1e, 0x0a, 0x0a, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0xe5, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0xa0, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x21, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0xa1, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x9f, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, - 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, - 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, - 0x72, 0x79, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, 0x65, 0x63, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x73, 0x65, - 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x71, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, - 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3b, - 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x6e, 0x75, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x44, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x57, 0x61, - 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x77, 0x61, 0x72, - 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x3e, 0x0a, 0x06, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x6e, 0x75, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, - 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6e, - 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, - 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, + 0x12, 0x30, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x67, + 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0xfd, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, + 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x11, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x17, 0x0a, 0x06, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0xa6, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0xe0, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe1, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, + 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0xe3, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xa5, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0xa3, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x02, + 0x61, 0x7a, 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x61, 0x7a, 0x12, 0x1e, 0x0a, + 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0xe5, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0xa0, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, + 0x9f, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, + 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x65, 0x74, 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x71, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x70, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, + 0x65, 0x63, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x73, 0x12, 0x2c, + 0x0a, 0x12, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, + 0x73, 0x65, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x53, 0x65, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, + 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x3b, 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x6e, 0x75, 0x6d, 0x5f, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x69, + 0x6e, 0x67, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x16, 0x6e, 0x75, 0x6d, 0x51, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x44, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, + 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x77, + 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x3e, + 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x61, - 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x39, 0x39, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x1c, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, - 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, - 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, - 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x61, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, - 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x20, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x39, 0x39, 0x12, 0x25, 0x0a, - 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6e, 0x74, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, - 0x74, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, - 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, - 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x23, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, - 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, - 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, - 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, - 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x25, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x50, 0x39, 0x39, + 0x63, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, + 0x6d, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x61, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x39, 0x39, 0x12, 0x25, 0x0a, 0x0f, + 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, + 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, + 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, + 0x6e, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, + 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x20, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0c, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x39, 0x39, 0x12, + 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x63, + 0x6e, 0x74, 0x18, 0x21, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, + 0x65, 0x6e, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, + 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, + 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, + 0x18, 0x23, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, + 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, + 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, + 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, + 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x25, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x50, + 0x39, 0x39, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x43, 0x6e, + 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x27, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, + 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, - 0x52, 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, + 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, + 0x52, 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x27, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, - 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2d, + 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x29, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, + 0x6f, 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, - 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2d, 0x0a, - 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x29, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, - 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2d, 0x0a, 0x13, - 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x5f, - 0x70, 0x39, 0x39, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, - 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x2d, 0x0a, 0x13, 0x6d, - 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, - 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x75, - 0x6d, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, - 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x69, 0x6e, - 0x18, 0x2d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, - 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, - 0x2e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, - 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x2f, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, - 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, - 0x18, 0x31, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, - 0x64, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, - 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0f, 0x6d, - 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x33, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x4d, - 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x34, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, - 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x50, 0x39, 0x39, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, - 0x35, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, - 0x73, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x36, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, - 0x53, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, - 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x69, 0x6e, - 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x38, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, - 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x2b, 0x0a, - 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, - 0x70, 0x39, 0x39, 0x18, 0x39, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, - 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x2f, 0x0a, 0x15, 0x6d, 0x5f, - 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x6f, 0x70, 0x73, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, - 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x15, 0x6d, - 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x6f, 0x70, 0x73, - 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, 0x6e, 0x6e, - 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x15, + 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, + 0x77, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x2d, 0x0a, + 0x13, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, + 0x73, 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x13, + 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x75, 0x6d, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, + 0x41, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, 0x6d, + 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6d, + 0x69, 0x6e, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, + 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x61, + 0x78, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, + 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x5f, 0x72, + 0x6f, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x39, 0x39, + 0x18, 0x2f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x41, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, + 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, + 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, + 0x75, 0x6d, 0x18, 0x31, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, + 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, + 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x25, 0x0a, + 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x78, + 0x18, 0x33, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, + 0x64, 0x4d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x34, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, + 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x61, 0x64, 0x50, 0x39, 0x39, 0x12, 0x2b, 0x0a, 0x12, 0x6d, + 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x63, 0x6e, + 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, + 0x61, 0x73, 0x73, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, + 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x36, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, + 0x65, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, + 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x4d, + 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, + 0x73, 0x73, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x38, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, + 0x6d, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, + 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, + 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x39, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4d, 0x65, + 0x72, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x2f, 0x0a, 0x15, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x6f, 0x70, - 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x2f, 0x0a, + 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, 0x6e, + 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x15, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x6f, - 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, - 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x2f, + 0x70, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x49, + 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x15, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, - 0x6f, 0x70, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, - 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x50, 0x39, 0x39, 0x12, - 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x43, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, - 0x40, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, - 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, - 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, - 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x33, - 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x42, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x4d, 0x61, 0x78, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, - 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x43, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0x44, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, - 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x16, 0x6d, - 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, - 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x45, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x31, - 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, - 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x46, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, - 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x4d, 0x69, - 0x6e, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, - 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x47, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, - 0x74, 0x4d, 0x61, 0x78, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x48, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, - 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, - 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, - 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x49, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x43, - 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, - 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, - 0x18, 0x4a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, - 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x39, 0x0a, - 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x4b, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, - 0x6b, 0x57, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, - 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, - 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, - 0x4d, 0x61, 0x78, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, - 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x39, - 0x39, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x34, - 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, - 0x74, 0x43, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, - 0x4f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, - 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, - 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, - 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, + 0x6f, 0x70, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, + 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x4d, 0x69, 0x6e, 0x12, + 0x2f, 0x0a, 0x15, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, + 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, + 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x4d, 0x61, 0x78, + 0x12, 0x2f, 0x0a, 0x15, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, + 0x72, 0x5f, 0x6f, 0x70, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x10, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x4f, 0x70, 0x73, 0x50, 0x39, + 0x39, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, + 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x3f, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, + 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x75, + 0x6d, 0x18, 0x40, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, + 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x33, 0x0a, 0x17, 0x6d, + 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, + 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4d, 0x69, 0x6e, + 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, + 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x42, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, + 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, + 0x18, 0x43, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, + 0x6f, 0x52, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, + 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, + 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x44, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, + 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, + 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x45, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, + 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, + 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, + 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x46, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, + 0x4d, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, + 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x47, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, 0x6f, 0x52, 0x57, + 0x61, 0x69, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x31, 0x0a, 0x16, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, + 0x64, 0x62, 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x39, 0x39, + 0x18, 0x48, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x49, + 0x6f, 0x52, 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, + 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x49, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, + 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, + 0x74, 0x43, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, + 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x73, + 0x75, 0x6d, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, + 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, + 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x4b, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, + 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, + 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, + 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, + 0x69, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x39, 0x0a, 0x1a, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, + 0x62, 0x5f, 0x72, 0x65, 0x63, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, + 0x70, 0x39, 0x39, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, + 0x64, 0x62, 0x52, 0x65, 0x63, 0x4c, 0x6f, 0x63, 0x6b, 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x51, 0x20, 0x01, 0x28, + 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, - 0x61, 0x69, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, - 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x70, 0x39, - 0x39, 0x18, 0x52, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x3c, 0x0a, 0x1b, + 0x61, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, + 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x73, 0x75, + 0x6d, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x17, + 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, + 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x4d, + 0x69, 0x6e, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, + 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x51, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x57, 0x61, 0x69, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x34, 0x0a, 0x17, 0x6d, 0x5f, 0x69, 0x6e, + 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, + 0x70, 0x39, 0x39, 0x18, 0x52, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, + 0x64, 0x62, 0x51, 0x75, 0x65, 0x75, 0x65, 0x57, 0x61, 0x69, 0x74, 0x50, 0x39, 0x39, 0x12, 0x3c, + 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, + 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x53, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, + 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x53, 0x20, 0x01, 0x28, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x54, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, 0x73, 0x44, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, - 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x54, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x55, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x73, - 0x74, 0x69, 0x6e, 0x63, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, + 0x74, 0x69, 0x6e, 0x63, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x63, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x55, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, + 0x6e, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x56, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x63, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, + 0x6e, 0x63, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, - 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x56, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, + 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x57, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, - 0x74, 0x4d, 0x61, 0x78, 0x12, 0x3c, 0x0a, 0x1b, 0x6d, 0x5f, 0x69, 0x6e, 0x6e, 0x6f, 0x64, 0x62, - 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x5f, - 0x70, 0x39, 0x39, 0x18, 0x57, 0x20, 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x49, 0x6e, 0x6e, 0x6f, - 0x64, 0x62, 0x50, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x50, - 0x39, 0x39, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x58, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, - 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, 0x6e, 0x74, 0x12, - 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x59, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x53, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x12, - 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, - 0x69, 0x6e, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x18, - 0x5b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x5c, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x50, 0x39, 0x39, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, - 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x5d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x10, - 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x6d, - 0x18, 0x5e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, - 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x27, - 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, - 0x61, 0x78, 0x18, 0x60, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x61, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x50, 0x39, 0x39, - 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x62, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, - 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x63, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x53, - 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x64, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, - 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x10, 0x6d, - 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, - 0x65, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x4d, 0x61, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x66, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, - 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, - 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x67, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, - 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, + 0x74, 0x50, 0x39, 0x39, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x58, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, 0x6e, + 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x59, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x53, 0x75, 0x6d, 0x12, 0x2b, + 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x12, 0x6d, + 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, + 0x78, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x5c, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x50, 0x39, 0x39, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x5d, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x27, + 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x73, + 0x75, 0x6d, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x53, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x5f, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x69, 0x6e, + 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x60, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x61, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x50, + 0x39, 0x39, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x62, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, + 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x6d, + 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0x63, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x53, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x64, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, + 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x27, 0x0a, + 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x61, + 0x78, 0x18, 0x65, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x66, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0d, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x68, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, - 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x53, 0x75, - 0x6d, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, 0x02, + 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x67, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, + 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6e, + 0x74, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x68, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x4d, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, - 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x6a, 0x20, 0x01, + 0x53, 0x75, 0x6d, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, 0x69, 0x73, + 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x69, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, - 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x6b, + 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x64, + 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x63, 0x6e, 0x74, - 0x18, 0x6c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, - 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x30, 0x0a, 0x15, 0x6d, + 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, + 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, + 0x18, 0x6b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x6b, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x39, 0x39, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, + 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x63, + 0x6e, 0x74, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, - 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x30, 0x0a, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, - 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4d, 0x61, 0x78, 0x12, + 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x54, + 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x70, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, - 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x50, 0x39, - 0x39, 0x12, 0x1f, 0x0a, 0x0c, 0x6d, 0x5f, 0x71, 0x63, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6e, - 0x74, 0x18, 0x71, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x51, 0x63, 0x48, 0x69, 0x74, 0x43, - 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0c, 0x6d, 0x5f, 0x71, 0x63, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0x72, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x51, 0x63, 0x48, 0x69, 0x74, - 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x63, - 0x61, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x73, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, - 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x61, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, - 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x74, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x75, - 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x75, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x75, 0x6c, - 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x66, 0x75, - 0x6c, 0x6c, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x76, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x6d, 0x12, - 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0x77, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x78, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0c, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x33, 0x0a, - 0x17, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, - 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x79, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, - 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x43, - 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x7a, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x6e, - 0x44, 0x69, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0c, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x24, 0x0a, - 0x0e, 0x6d, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, - 0x7c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, - 0x53, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x16, 0x6d, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, - 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x7d, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x6e, - 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x16, 0x6d, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, 0x75, - 0x6d, 0x18, 0x7e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, - 0x72, 0x74, 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x3d, 0x0a, 0x1c, 0x6d, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x7f, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x17, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1c, 0x6d, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x17, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6e, 0x74, - 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x82, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6e, 0x74, 0x12, - 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x84, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x14, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x5f, 0x73, 0x6f, - 0x72, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x85, 0x01, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, - 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x86, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, - 0x53, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0f, - 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, - 0x87, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x77, - 0x73, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, - 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, - 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0f, - 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, - 0x89, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x61, - 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, - 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, - 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, - 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4e, 0x6f, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6d, - 0x5f, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4e, 0x6f, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x18, 0x6d, 0x5f, - 0x6e, 0x6f, 0x5f, 0x67, 0x6f, 0x6f, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, - 0x4e, 0x6f, 0x47, 0x6f, 0x6f, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x43, - 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x18, 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x67, 0x6f, 0x6f, 0x64, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x8e, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x4e, 0x6f, 0x47, 0x6f, 0x6f, 0x64, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6e, - 0x74, 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x75, - 0x6d, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x69, - 0x6e, 0x18, 0x91, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x61, - 0x78, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x39, - 0x39, 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, 0x6e, 0x74, 0x12, 0x32, - 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x53, - 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x96, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x18, - 0x97, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, - 0x70, 0x39, 0x39, 0x18, 0x98, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x50, 0x39, 0x39, 0x12, 0x2c, + 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, + 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x4d, 0x61, + 0x78, 0x12, 0x30, 0x0a, 0x15, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x70, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x73, + 0x50, 0x39, 0x39, 0x12, 0x1f, 0x0a, 0x0c, 0x6d, 0x5f, 0x71, 0x63, 0x5f, 0x68, 0x69, 0x74, 0x5f, + 0x63, 0x6e, 0x74, 0x18, 0x71, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x51, 0x63, 0x48, 0x69, + 0x74, 0x43, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0c, 0x6d, 0x5f, 0x71, 0x63, 0x5f, 0x68, 0x69, 0x74, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x72, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x51, 0x63, 0x48, + 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, + 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x73, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, + 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x61, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, + 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0x74, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x61, 0x6e, + 0x53, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6a, 0x6f, + 0x69, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x75, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, + 0x75, 0x6c, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, + 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x76, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x75, + 0x6d, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x77, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x54, 0x6d, 0x70, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0f, 0x6d, 0x5f, 0x74, 0x6d, + 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x78, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0c, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x12, + 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, + 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x79, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x12, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x6e, 0x44, 0x69, 0x73, + 0x6b, 0x43, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x6d, 0x70, 0x5f, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0x7a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x54, 0x6d, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x7b, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x43, 0x6e, 0x74, 0x12, + 0x24, 0x0a, 0x0e, 0x6d, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x75, + 0x6d, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, + 0x72, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x16, 0x6d, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x63, 0x6e, 0x74, 0x18, + 0x7d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, + 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x16, 0x6d, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, + 0x73, 0x75, 0x6d, 0x18, 0x7e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x3d, 0x0a, + 0x1c, 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x7f, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x75, 0x6c, 0x6c, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1c, + 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x80, 0x01, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x17, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x46, 0x75, 0x6c, 0x6c, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x12, + 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, + 0x6e, 0x74, 0x18, 0x81, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, + 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x83, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6e, + 0x74, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x84, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x5f, + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x85, + 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x86, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0d, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x26, + 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x63, 0x6e, + 0x74, 0x18, 0x87, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, + 0x6f, 0x77, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, + 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x77, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x26, + 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6e, + 0x74, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x53, + 0x63, 0x61, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x73, 0x6f, 0x72, 0x74, + 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0c, 0x6d, 0x53, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2d, + 0x0a, 0x13, 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, + 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4e, + 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, + 0x13, 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x4e, 0x6f, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x18, + 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x67, 0x6f, 0x6f, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, + 0x75, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x13, 0x6d, 0x4e, 0x6f, 0x47, 0x6f, 0x6f, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, + 0x64, 0x43, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x18, 0x6d, 0x5f, 0x6e, 0x6f, 0x5f, 0x67, 0x6f, 0x6f, + 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, + 0x18, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x4e, 0x6f, 0x47, 0x6f, 0x6f, 0x64, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x55, 0x73, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x13, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, + 0x63, 0x6e, 0x74, 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, + 0x73, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, + 0x73, 0x75, 0x6d, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, + 0x73, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x13, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, + 0x6d, 0x69, 0x6e, 0x18, 0x91, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, + 0x73, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x13, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, + 0x6d, 0x61, 0x78, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, + 0x73, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2e, 0x0a, 0x13, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, + 0x70, 0x39, 0x39, 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x44, 0x6f, 0x63, + 0x73, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x32, 0x0a, 0x15, + 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, 0x6e, 0x74, + 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x53, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x96, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, + 0x78, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x12, 0x32, 0x0a, 0x15, + 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x98, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x50, 0x39, 0x39, + 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, + 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x99, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, + 0x44, 0x6f, 0x63, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x99, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, - 0x63, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0x9a, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, - 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, - 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x69, 0x6e, - 0x18, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x53, 0x63, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x64, 0x6f, - 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x9c, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x9a, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, + 0x63, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x12, + 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6d, + 0x69, 0x6e, 0x18, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, + 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, + 0x64, 0x6f, 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x78, + 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x53, 0x63, + 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x64, 0x6f, + 0x63, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x53, 0x63, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x5f, 0x64, 0x6f, 0x63, 0x73, - 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x39, 0x39, 0x18, 0x9d, 0x01, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x44, 0x6f, 0x63, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x50, 0x39, 0x39, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xc8, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, - 0x73, 0x48, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, - 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x5f, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, - 0x33, 0x0a, 0x16, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x12, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, - 0x64, 0x53, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6e, - 0x74, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, - 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, - 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xcd, 0x01, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, - 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, - 0x74, 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, - 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, - 0x65, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0xcf, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x75, 0x6d, - 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, - 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x10, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x43, 0x6e, - 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, - 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd1, 0x01, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x10, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x53, - 0x75, 0x6d, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, - 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd2, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x11, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, - 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd3, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, - 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x43, 0x6e, - 0x74, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, - 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd5, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, - 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, - 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd6, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x6e, 0x65, 0x64, 0x50, 0x39, 0x39, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, + 0xc8, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, + 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x73, + 0x75, 0x6d, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, 0x53, 0x75, 0x6d, 0x12, 0x33, 0x0a, 0x16, + 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, + 0x74, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, + 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xcb, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x12, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x52, + 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, + 0x63, 0x6e, 0x74, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x43, 0x6e, + 0x74, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, + 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xcd, + 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, + 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x19, + 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x15, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x6d, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xcf, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x6d, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, + 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, + 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x10, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, 0x74, + 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, + 0x6c, 0x6b, 0x73, 0x5f, 0x68, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd1, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x10, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x48, 0x69, + 0x74, 0x53, 0x75, 0x6d, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, + 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd2, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, + 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, + 0x18, 0xd3, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, + 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, + 0x65, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, - 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x75, 0x6d, 0x18, - 0xd7, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, - 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, - 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x54, 0x65, - 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, - 0x14, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x54, - 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x35, - 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xda, 0x01, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x13, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, - 0x65, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, - 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x75, 0x6d, - 0x18, 0xdb, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x42, 0x6c, - 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, - 0x6d, 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x42, 0x6c, 0x6b, - 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6d, - 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x42, 0x6c, 0x6b, 0x52, - 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x5f, - 0x62, 0x6c, 0x6b, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, - 0x6e, 0x74, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x42, 0x6c, 0x6b, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6d, - 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x73, 0x75, 0x6d, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x42, 0x6c, 0x6b, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x13, - 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x43, 0x70, 0x75, - 0x55, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x6d, - 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, - 0x75, 0x6d, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x43, 0x70, 0x75, 0x55, - 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, - 0x63, 0x70, 0x75, 0x5f, 0x73, 0x79, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x6e, 0x74, - 0x18, 0xe8, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x43, 0x70, 0x75, 0x53, 0x79, 0x73, - 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x63, 0x70, 0x75, - 0x5f, 0x73, 0x79, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xe9, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x43, 0x70, 0x75, 0x53, 0x79, 0x73, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6d, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x50, - 0x6c, 0x61, 0x6e, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x11, - 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x63, 0x6e, - 0x74, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x73, - 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, 0x77, 0x61, - 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xec, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x57, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xed, 0x01, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x0e, 0x6d, 0x57, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x43, 0x6e, 0x74, - 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x66, 0x70, 0x69, 0x5f, 0x73, 0x75, - 0x6d, 0x18, 0xee, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6d, 0x57, 0x61, 0x6c, 0x46, 0x70, - 0x69, 0x53, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x66, 0x70, - 0x69, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6d, 0x57, - 0x61, 0x6c, 0x46, 0x70, 0x69, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x77, 0x61, - 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xf0, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x57, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x75, 0x6d, - 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x57, 0x61, 0x6c, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, - 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xf2, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, - 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, - 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0xf4, 0x01, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x69, 0x6e, - 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x61, 0x78, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, - 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf8, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x18, 0xf9, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0xfb, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x28, 0x0a, - 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0xfc, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x39, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x51, 0x0a, - 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x07, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x9b, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x42, 0x0e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x71, 0x61, 0x6e, 0x70, 0x62, 0x3b, 0x71, 0x61, 0x6e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x51, 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x2e, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x17, 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0c, 0x51, 0x61, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x6b, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0xd5, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, + 0x6b, 0x73, 0x44, 0x69, 0x72, 0x74, 0x69, 0x65, 0x64, 0x53, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x18, + 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd6, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x14, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x75, + 0x6d, 0x18, 0xd7, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2f, + 0x0a, 0x14, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, + 0x54, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6e, 0x74, 0x12, + 0x2f, 0x0a, 0x14, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, + 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x52, 0x65, 0x61, 0x64, 0x53, 0x75, 0x6d, + 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, + 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xda, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x13, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x43, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x5f, 0x74, 0x65, 0x6d, + 0x70, 0x5f, 0x62, 0x6c, 0x6b, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, + 0x75, 0x6d, 0x18, 0xdb, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x6d, 0x54, 0x65, 0x6d, 0x70, + 0x42, 0x6c, 0x6b, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x75, 0x6d, 0x12, 0x2d, + 0x0a, 0x13, 0x6d, 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x42, + 0x6c, 0x6b, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, + 0x13, 0x6d, 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x42, 0x6c, + 0x6b, 0x52, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, + 0x6d, 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x42, 0x6c, + 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2f, 0x0a, + 0x14, 0x6d, 0x5f, 0x62, 0x6c, 0x6b, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x42, + 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2d, + 0x0a, 0x13, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x43, + 0x70, 0x75, 0x55, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2d, 0x0a, + 0x13, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6d, 0x43, 0x70, + 0x75, 0x55, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x12, + 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x79, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, + 0x6e, 0x74, 0x18, 0xe8, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x43, 0x70, 0x75, 0x53, + 0x79, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x6d, 0x5f, 0x63, + 0x70, 0x75, 0x5f, 0x73, 0x79, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0xe9, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x43, 0x70, 0x75, 0x53, 0x79, 0x73, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x64, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6d, 0x64, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, + 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2a, + 0x0a, 0x11, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, + 0x63, 0x6e, 0x74, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x50, 0x6c, 0x61, + 0x6e, 0x73, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, + 0x77, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, + 0xec, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x57, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x53, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xed, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0e, 0x6d, 0x57, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x43, + 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x66, 0x70, 0x69, 0x5f, + 0x73, 0x75, 0x6d, 0x18, 0xee, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6d, 0x57, 0x61, 0x6c, + 0x46, 0x70, 0x69, 0x53, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, + 0x66, 0x70, 0x69, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, + 0x6d, 0x57, 0x61, 0x6c, 0x46, 0x70, 0x69, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, + 0x77, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xf0, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x57, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, + 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x57, + 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0xf2, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, + 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0xf4, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4d, + 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, 0x50, + 0x6c, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, + 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x74, 0x6f, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x6f, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf8, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, + 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0xfb, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x28, 0x0a, 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0xfc, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x11, 0x0a, 0x0f, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x51, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x44, 0x0a, 0x07, + 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x9b, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x71, 0x61, 0x6e, 0x70, 0x62, 0x3b, 0x71, 0x61, 0x6e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x51, 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x51, 0x61, + 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x5c, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x17, 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0c, 0x51, 0x61, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/qanpb/collector.proto b/api/qanpb/collector.proto index 60667eec05..914c5b22a8 100644 --- a/api/qanpb/collector.proto +++ b/api/qanpb/collector.proto @@ -22,6 +22,10 @@ message CollectRequest { message MetricsBucket { // md5 of digest_text/fingerprint. string queryid = 1; + // contains fingerprint prepared by sql parser, which can be different than fingerprint. + string explain_fingerprint = 253; + // ammount of variables in query. + uint32 placeholders_count = 254; // digest_text - query signature. Query without values. string fingerprint = 2; // diff --git a/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_parameters.go b/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_parameters.go new file mode 100644 index 0000000000..dfee8a0488 --- /dev/null +++ b/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_parameters.go @@ -0,0 +1,147 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package object_details + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewExplainFingerprintByQueryIDParams creates a new ExplainFingerprintByQueryIDParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewExplainFingerprintByQueryIDParams() *ExplainFingerprintByQueryIDParams { + return &ExplainFingerprintByQueryIDParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewExplainFingerprintByQueryIDParamsWithTimeout creates a new ExplainFingerprintByQueryIDParams object +// with the ability to set a timeout on a request. +func NewExplainFingerprintByQueryIDParamsWithTimeout(timeout time.Duration) *ExplainFingerprintByQueryIDParams { + return &ExplainFingerprintByQueryIDParams{ + timeout: timeout, + } +} + +// NewExplainFingerprintByQueryIDParamsWithContext creates a new ExplainFingerprintByQueryIDParams object +// with the ability to set a context for a request. +func NewExplainFingerprintByQueryIDParamsWithContext(ctx context.Context) *ExplainFingerprintByQueryIDParams { + return &ExplainFingerprintByQueryIDParams{ + Context: ctx, + } +} + +// NewExplainFingerprintByQueryIDParamsWithHTTPClient creates a new ExplainFingerprintByQueryIDParams object +// with the ability to set a custom HTTPClient for a request. +func NewExplainFingerprintByQueryIDParamsWithHTTPClient(client *http.Client) *ExplainFingerprintByQueryIDParams { + return &ExplainFingerprintByQueryIDParams{ + HTTPClient: client, + } +} + +/* +ExplainFingerprintByQueryIDParams contains all the parameters to send to the API endpoint + + for the explain fingerprint by query ID operation. + + Typically these are written to a http.Request. +*/ +type ExplainFingerprintByQueryIDParams struct { + /* Body. + + ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID. + */ + Body ExplainFingerprintByQueryIDBody + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the explain fingerprint by query ID params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ExplainFingerprintByQueryIDParams) WithDefaults() *ExplainFingerprintByQueryIDParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the explain fingerprint by query ID params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ExplainFingerprintByQueryIDParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) WithTimeout(timeout time.Duration) *ExplainFingerprintByQueryIDParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) WithContext(ctx context.Context) *ExplainFingerprintByQueryIDParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) WithHTTPClient(client *http.Client) *ExplainFingerprintByQueryIDParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) WithBody(body ExplainFingerprintByQueryIDBody) *ExplainFingerprintByQueryIDParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the explain fingerprint by query ID params +func (o *ExplainFingerprintByQueryIDParams) SetBody(body ExplainFingerprintByQueryIDBody) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *ExplainFingerprintByQueryIDParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_responses.go b/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_responses.go new file mode 100644 index 0000000000..b84de69c8c --- /dev/null +++ b/api/qanpb/json/client/object_details/explain_fingerprint_by_query_id_responses.go @@ -0,0 +1,340 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package object_details + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + "io" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// ExplainFingerprintByQueryIDReader is a Reader for the ExplainFingerprintByQueryID structure. +type ExplainFingerprintByQueryIDReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *ExplainFingerprintByQueryIDReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewExplainFingerprintByQueryIDOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + result := NewExplainFingerprintByQueryIDDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result + } +} + +// NewExplainFingerprintByQueryIDOK creates a ExplainFingerprintByQueryIDOK with default headers values +func NewExplainFingerprintByQueryIDOK() *ExplainFingerprintByQueryIDOK { + return &ExplainFingerprintByQueryIDOK{} +} + +/* +ExplainFingerprintByQueryIDOK describes a response with status code 200, with default header values. + +A successful response. +*/ +type ExplainFingerprintByQueryIDOK struct { + Payload *ExplainFingerprintByQueryIDOKBody +} + +func (o *ExplainFingerprintByQueryIDOK) Error() string { + return fmt.Sprintf("[POST /v0/qan/ObjectDetails/ExplainFingerprintByQueryID][%d] explainFingerprintByQueryIdOk %+v", 200, o.Payload) +} + +func (o *ExplainFingerprintByQueryIDOK) GetPayload() *ExplainFingerprintByQueryIDOKBody { + return o.Payload +} + +func (o *ExplainFingerprintByQueryIDOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + o.Payload = new(ExplainFingerprintByQueryIDOKBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewExplainFingerprintByQueryIDDefault creates a ExplainFingerprintByQueryIDDefault with default headers values +func NewExplainFingerprintByQueryIDDefault(code int) *ExplainFingerprintByQueryIDDefault { + return &ExplainFingerprintByQueryIDDefault{ + _statusCode: code, + } +} + +/* +ExplainFingerprintByQueryIDDefault describes a response with status code -1, with default header values. + +An unexpected error response. +*/ +type ExplainFingerprintByQueryIDDefault struct { + _statusCode int + + Payload *ExplainFingerprintByQueryIDDefaultBody +} + +// Code gets the status code for the explain fingerprint by query ID default response +func (o *ExplainFingerprintByQueryIDDefault) Code() int { + return o._statusCode +} + +func (o *ExplainFingerprintByQueryIDDefault) Error() string { + return fmt.Sprintf("[POST /v0/qan/ObjectDetails/ExplainFingerprintByQueryID][%d] ExplainFingerprintByQueryID default %+v", o._statusCode, o.Payload) +} + +func (o *ExplainFingerprintByQueryIDDefault) GetPayload() *ExplainFingerprintByQueryIDDefaultBody { + return o.Payload +} + +func (o *ExplainFingerprintByQueryIDDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + o.Payload = new(ExplainFingerprintByQueryIDDefaultBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +/* +ExplainFingerprintByQueryIDBody ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID. +swagger:model ExplainFingerprintByQueryIDBody +*/ +type ExplainFingerprintByQueryIDBody struct { + // serviceid + Serviceid string `json:"serviceid,omitempty"` + + // query id + QueryID string `json:"query_id,omitempty"` +} + +// Validate validates this explain fingerprint by query ID body +func (o *ExplainFingerprintByQueryIDBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this explain fingerprint by query ID body based on context it is used +func (o *ExplainFingerprintByQueryIDBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDBody) UnmarshalBinary(b []byte) error { + var res ExplainFingerprintByQueryIDBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ExplainFingerprintByQueryIDDefaultBody explain fingerprint by query ID default body +swagger:model ExplainFingerprintByQueryIDDefaultBody +*/ +type ExplainFingerprintByQueryIDDefaultBody struct { + // code + Code int32 `json:"code,omitempty"` + + // message + Message string `json:"message,omitempty"` + + // details + Details []*ExplainFingerprintByQueryIDDefaultBodyDetailsItems0 `json:"details"` +} + +// Validate validates this explain fingerprint by query ID default body +func (o *ExplainFingerprintByQueryIDDefaultBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateDetails(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ExplainFingerprintByQueryIDDefaultBody) validateDetails(formats strfmt.Registry) error { + if swag.IsZero(o.Details) { // not required + return nil + } + + for i := 0; i < len(o.Details); i++ { + if swag.IsZero(o.Details[i]) { // not required + continue + } + + if o.Details[i] != nil { + if err := o.Details[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("ExplainFingerprintByQueryID default" + "." + "details" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("ExplainFingerprintByQueryID default" + "." + "details" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this explain fingerprint by query ID default body based on the context it is used +func (o *ExplainFingerprintByQueryIDDefaultBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateDetails(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ExplainFingerprintByQueryIDDefaultBody) contextValidateDetails(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.Details); i++ { + if o.Details[i] != nil { + if err := o.Details[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("ExplainFingerprintByQueryID default" + "." + "details" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("ExplainFingerprintByQueryID default" + "." + "details" + "." + strconv.Itoa(i)) + } + return err + } + } + } + + return nil +} + +// MarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDDefaultBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDDefaultBody) UnmarshalBinary(b []byte) error { + var res ExplainFingerprintByQueryIDDefaultBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ExplainFingerprintByQueryIDDefaultBodyDetailsItems0 explain fingerprint by query ID default body details items0 +swagger:model ExplainFingerprintByQueryIDDefaultBodyDetailsItems0 +*/ +type ExplainFingerprintByQueryIDDefaultBodyDetailsItems0 struct { + // at type + AtType string `json:"@type,omitempty"` +} + +// Validate validates this explain fingerprint by query ID default body details items0 +func (o *ExplainFingerprintByQueryIDDefaultBodyDetailsItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this explain fingerprint by query ID default body details items0 based on context it is used +func (o *ExplainFingerprintByQueryIDDefaultBodyDetailsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDDefaultBodyDetailsItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDDefaultBodyDetailsItems0) UnmarshalBinary(b []byte) error { + var res ExplainFingerprintByQueryIDDefaultBodyDetailsItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ExplainFingerprintByQueryIDOKBody ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID. +swagger:model ExplainFingerprintByQueryIDOKBody +*/ +type ExplainFingerprintByQueryIDOKBody struct { + // explain fingerprint + ExplainFingerprint string `json:"explain_fingerprint,omitempty"` + + // placeholders count + PlaceholdersCount int64 `json:"placeholders_count,omitempty"` +} + +// Validate validates this explain fingerprint by query ID OK body +func (o *ExplainFingerprintByQueryIDOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this explain fingerprint by query ID OK body based on context it is used +func (o *ExplainFingerprintByQueryIDOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ExplainFingerprintByQueryIDOKBody) UnmarshalBinary(b []byte) error { + var res ExplainFingerprintByQueryIDOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/api/qanpb/json/client/object_details/get_query_example_responses.go b/api/qanpb/json/client/object_details/get_query_example_responses.go index ee7709800c..fee949c15c 100644 --- a/api/qanpb/json/client/object_details/get_query_example_responses.go +++ b/api/qanpb/json/client/object_details/get_query_example_responses.go @@ -528,6 +528,15 @@ type GetQueryExampleOKBodyQueryExamplesItems0 struct { // is truncated IsTruncated int64 `json:"is_truncated,omitempty"` + // placeholders count + PlaceholdersCount int64 `json:"placeholders_count,omitempty"` + + // explain fingerprint + ExplainFingerprint string `json:"explain_fingerprint,omitempty"` + + // query id + QueryID string `json:"query_id,omitempty"` + // example metrics ExampleMetrics string `json:"example_metrics,omitempty"` diff --git a/api/qanpb/json/client/object_details/object_details_client.go b/api/qanpb/json/client/object_details/object_details_client.go index e929e04f46..c882f603b4 100644 --- a/api/qanpb/json/client/object_details/object_details_client.go +++ b/api/qanpb/json/client/object_details/object_details_client.go @@ -28,6 +28,8 @@ type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { + ExplainFingerprintByQueryID(params *ExplainFingerprintByQueryIDParams, opts ...ClientOption) (*ExplainFingerprintByQueryIDOK, error) + GetHistogram(params *GetHistogramParams, opts ...ClientOption) (*GetHistogramOK, error) GetLabels(params *GetLabelsParams, opts ...ClientOption) (*GetLabelsOK, error) @@ -43,6 +45,43 @@ type ClientService interface { SetTransport(transport runtime.ClientTransport) } +/* +ExplainFingerprintByQueryID explains fingerprint by query ID get explain fingerprint for given query ID +*/ +func (a *Client) ExplainFingerprintByQueryID(params *ExplainFingerprintByQueryIDParams, opts ...ClientOption) (*ExplainFingerprintByQueryIDOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewExplainFingerprintByQueryIDParams() + } + op := &runtime.ClientOperation{ + ID: "ExplainFingerprintByQueryID", + Method: "POST", + PathPattern: "/v0/qan/ObjectDetails/ExplainFingerprintByQueryID", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &ExplainFingerprintByQueryIDReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*ExplainFingerprintByQueryIDOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*ExplainFingerprintByQueryIDDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + /* GetHistogram gets histogram gets histogram items for specific filtering */ diff --git a/api/qanpb/json/qanpb.json b/api/qanpb/json/qanpb.json index 30b309a6ef..f535bebfc8 100644 --- a/api/qanpb/json/qanpb.json +++ b/api/qanpb/json/qanpb.json @@ -844,6 +844,88 @@ } } }, + "/v0/qan/ObjectDetails/ExplainFingerprintByQueryID": { + "post": { + "tags": [ + "ObjectDetails" + ], + "summary": "ExplainFingerprintByQueryID get explain fingerprint for given query ID.", + "operationId": "ExplainFingerprintByQueryID", + "parameters": [ + { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "type": "object", + "properties": { + "query_id": { + "type": "string", + "x-order": 1 + }, + "serviceid": { + "type": "string", + "x-order": 0 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID.", + "type": "object", + "properties": { + "explain_fingerprint": { + "type": "string", + "x-order": 0 + }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 1 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + }, + "message": { + "type": "string", + "x-order": 1 + } + } + } + } + } + } + }, "/v0/qan/ObjectDetails/GetHistogram": { "post": { "tags": [ @@ -1773,7 +1855,7 @@ }, "example_metrics": { "type": "string", - "x-order": 4 + "x-order": 7 }, "example_type": { "description": "ExampleType is a type of query example selected for this query class in given period of time.", @@ -1788,29 +1870,42 @@ ], "x-order": 2 }, + "explain_fingerprint": { + "type": "string", + "x-order": 5 + }, "is_truncated": { "type": "integer", "format": "int64", "x-order": 3 }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 4 + }, + "query_id": { + "type": "string", + "x-order": 6 + }, "schema": { "type": "string", - "x-order": 7 + "x-order": 10 }, "service_id": { "type": "string", - "x-order": 5 + "x-order": 8 }, "service_type": { "type": "string", - "x-order": 6 + "x-order": 9 }, "tables": { "type": "array", "items": { "type": "string" }, - "x-order": 8 + "x-order": 11 } } }, diff --git a/api/qanpb/object_details.pb.go b/api/qanpb/object_details.pb.go index 80a142bcac..5daa989649 100644 --- a/api/qanpb/object_details.pb.go +++ b/api/qanpb/object_details.pb.go @@ -504,14 +504,17 @@ type QueryExample struct { // Deprecated: should not be used, should be removed. // // Deprecated: Do not use. - ExampleFormat ExampleFormat `protobuf:"varint,2,opt,name=example_format,json=exampleFormat,proto3,enum=qan.v1beta1.ExampleFormat" json:"example_format,omitempty"` - ExampleType ExampleType `protobuf:"varint,3,opt,name=example_type,json=exampleType,proto3,enum=qan.v1beta1.ExampleType" json:"example_type,omitempty"` - IsTruncated uint32 `protobuf:"varint,4,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"` - ExampleMetrics string `protobuf:"bytes,5,opt,name=example_metrics,json=exampleMetrics,proto3" json:"example_metrics,omitempty"` - ServiceId string `protobuf:"bytes,6,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - ServiceType string `protobuf:"bytes,7,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` - Schema string `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` - Tables []string `protobuf:"bytes,9,rep,name=tables,proto3" json:"tables,omitempty"` + ExampleFormat ExampleFormat `protobuf:"varint,2,opt,name=example_format,json=exampleFormat,proto3,enum=qan.v1beta1.ExampleFormat" json:"example_format,omitempty"` + ExampleType ExampleType `protobuf:"varint,3,opt,name=example_type,json=exampleType,proto3,enum=qan.v1beta1.ExampleType" json:"example_type,omitempty"` + IsTruncated uint32 `protobuf:"varint,4,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"` + PlaceholdersCount uint32 `protobuf:"varint,10,opt,name=placeholders_count,json=placeholdersCount,proto3" json:"placeholders_count,omitempty"` + ExplainFingerprint string `protobuf:"bytes,11,opt,name=explain_fingerprint,json=explainFingerprint,proto3" json:"explain_fingerprint,omitempty"` + QueryId string `protobuf:"bytes,12,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty"` + ExampleMetrics string `protobuf:"bytes,5,opt,name=example_metrics,json=exampleMetrics,proto3" json:"example_metrics,omitempty"` + ServiceId string `protobuf:"bytes,6,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + ServiceType string `protobuf:"bytes,7,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` + Schema string `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` + Tables []string `protobuf:"bytes,9,rep,name=tables,proto3" json:"tables,omitempty"` } func (x *QueryExample) Reset() { @@ -575,6 +578,27 @@ func (x *QueryExample) GetIsTruncated() uint32 { return 0 } +func (x *QueryExample) GetPlaceholdersCount() uint32 { + if x != nil { + return x.PlaceholdersCount + } + return 0 +} + +func (x *QueryExample) GetExplainFingerprint() string { + if x != nil { + return x.ExplainFingerprint + } + return "" +} + +func (x *QueryExample) GetQueryId() string { + if x != nil { + return x.QueryId + } + return "" +} + func (x *QueryExample) GetExampleMetrics() string { if x != nil { return x.ExampleMetrics @@ -1117,6 +1141,118 @@ func (x *QueryExistsRequest) GetQuery() string { return "" } +// ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID. +type ExplainFingerprintByQueryIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Serviceid string `protobuf:"bytes,1,opt,name=serviceid,proto3" json:"serviceid,omitempty"` + QueryId string `protobuf:"bytes,2,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty"` +} + +func (x *ExplainFingerprintByQueryIDRequest) Reset() { + *x = ExplainFingerprintByQueryIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_qanpb_object_details_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExplainFingerprintByQueryIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExplainFingerprintByQueryIDRequest) ProtoMessage() {} + +func (x *ExplainFingerprintByQueryIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_qanpb_object_details_proto_msgTypes[16] + 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 ExplainFingerprintByQueryIDRequest.ProtoReflect.Descriptor instead. +func (*ExplainFingerprintByQueryIDRequest) Descriptor() ([]byte, []int) { + return file_qanpb_object_details_proto_rawDescGZIP(), []int{16} +} + +func (x *ExplainFingerprintByQueryIDRequest) GetServiceid() string { + if x != nil { + return x.Serviceid + } + return "" +} + +func (x *ExplainFingerprintByQueryIDRequest) GetQueryId() string { + if x != nil { + return x.QueryId + } + return "" +} + +// ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID. +type ExplainFingerprintByQueryIDReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExplainFingerprint string `protobuf:"bytes,1,opt,name=explain_fingerprint,json=explainFingerprint,proto3" json:"explain_fingerprint,omitempty"` + PlaceholdersCount uint32 `protobuf:"varint,2,opt,name=placeholders_count,json=placeholdersCount,proto3" json:"placeholders_count,omitempty"` +} + +func (x *ExplainFingerprintByQueryIDReply) Reset() { + *x = ExplainFingerprintByQueryIDReply{} + if protoimpl.UnsafeEnabled { + mi := &file_qanpb_object_details_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExplainFingerprintByQueryIDReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExplainFingerprintByQueryIDReply) ProtoMessage() {} + +func (x *ExplainFingerprintByQueryIDReply) ProtoReflect() protoreflect.Message { + mi := &file_qanpb_object_details_proto_msgTypes[17] + 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 ExplainFingerprintByQueryIDReply.ProtoReflect.Descriptor instead. +func (*ExplainFingerprintByQueryIDReply) Descriptor() ([]byte, []int) { + return file_qanpb_object_details_proto_rawDescGZIP(), []int{17} +} + +func (x *ExplainFingerprintByQueryIDReply) GetExplainFingerprint() string { + if x != nil { + return x.ExplainFingerprint + } + return "" +} + +func (x *ExplainFingerprintByQueryIDReply) GetPlaceholdersCount() uint32 { + if x != nil { + return x.PlaceholdersCount + } + return 0 +} + var File_qanpb_object_details_proto protoreflect.FileDescriptor var file_qanpb_object_details_proto_rawDesc = []byte{ @@ -1222,7 +1358,7 @@ var file_qanpb_object_details_proto_rawDesc = []byte{ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x22, 0xea, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x22, 0xe5, 0x03, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x72, @@ -1235,141 +1371,175 @@ var file_qanpb_object_details_proto_rawDesc = []byte{ 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x69, 0x73, 0x54, - 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x1a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x46, 0x0a, 0x11, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x6f, 0x12, 0x1b, - 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x22, 0xbe, 0x01, 0x0a, 0x18, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x57, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x29, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x22, 0x2c, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, - 0x22, 0x47, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x22, 0xec, 0x01, 0x0a, 0x10, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, - 0x0a, 0x11, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x66, - 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x6f, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x22, 0x55, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x43, 0x0a, 0x0f, 0x68, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0x43, 0x0a, 0x0d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x48, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x32, 0x84, - 0x06, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x71, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1b, - 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, + 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, + 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0xe0, + 0x01, 0x0a, 0x1a, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, + 0x11, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x66, 0x72, + 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x42, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x79, 0x22, 0xbe, 0x01, 0x0a, 0x18, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x49, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x57, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x71, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x29, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x2c, 0x0a, + 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x0e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x6c, 0x61, 0x6e, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, + 0x6c, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x6c, 0x61, 0x6e, 0x22, 0xec, 0x01, 0x0a, 0x10, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x11, 0x70, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x46, 0x72, 0x6f, + 0x6d, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x6f, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x69, 0x64, 0x22, 0x55, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x43, 0x0a, 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x43, 0x0a, 0x0d, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x22, + 0x48, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x5d, 0x0a, 0x22, 0x45, 0x78, 0x70, + 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, + 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x20, 0x45, 0x78, 0x70, + 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, + 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x44, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2f, 0x0a, + 0x13, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x78, 0x70, 0x6c, + 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x2d, + 0x0a, 0x12, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xc2, 0x07, + 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x71, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1b, 0x2e, + 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, + 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x22, 0x25, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x27, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, + 0x22, 0x1f, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x1d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, + 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, + 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x3a, 0x01, 0x2a, 0x12, + 0x79, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, + 0x1d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x78, 0x0a, 0x0b, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x71, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x21, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x71, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x87, 0x01, 0x0a, 0x09, - 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x27, 0x2e, 0x71, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x1d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x30, 0x2f, 0x71, - 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x2f, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x6e, 0x3a, 0x01, 0x2a, - 0x12, 0x79, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x12, 0x1d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x47, 0x65, 0x74, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x12, 0x78, 0x0a, 0x0b, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x71, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, - 0x21, 0x2f, 0x76, 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, - 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x42, 0x9f, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x71, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x12, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, - 0x6f, 0x6e, 0x61, 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x71, 0x61, 0x6e, 0x70, - 0x62, 0x3b, 0x71, 0x61, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x51, - 0x58, 0x58, 0xaa, 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xca, 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, - 0x17, 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0c, 0x51, 0x61, 0x6e, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x01, 0x0a, 0x1b, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, + 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x79, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x49, 0x44, 0x12, 0x2f, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, + 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x44, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, + 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x44, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x31, 0x2f, 0x76, + 0x30, 0x2f, 0x71, 0x61, 0x6e, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x2f, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x67, 0x65, + 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x44, 0x3a, + 0x01, 0x2a, 0x42, 0x9f, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x71, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x12, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x61, + 0x2f, 0x70, 0x6d, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x71, 0x61, 0x6e, 0x70, 0x62, 0x3b, 0x71, + 0x61, 0x6e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x51, 0x58, 0x58, 0xaa, + 0x02, 0x0b, 0x51, 0x61, 0x6e, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0b, + 0x51, 0x61, 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x17, 0x51, 0x61, + 0x6e, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0c, 0x51, 0x61, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1385,57 +1555,59 @@ func file_qanpb_object_details_proto_rawDescGZIP() []byte { } var ( - file_qanpb_object_details_proto_msgTypes = make([]protoimpl.MessageInfo, 20) + file_qanpb_object_details_proto_msgTypes = make([]protoimpl.MessageInfo, 22) file_qanpb_object_details_proto_goTypes = []interface{}{ - (*MetricsRequest)(nil), // 0: qan.v1beta1.MetricsRequest - (*MetricsReply)(nil), // 1: qan.v1beta1.MetricsReply - (*MetricValues)(nil), // 2: qan.v1beta1.MetricValues - (*Labels)(nil), // 3: qan.v1beta1.Labels - (*QueryExampleRequest)(nil), // 4: qan.v1beta1.QueryExampleRequest - (*QueryExampleReply)(nil), // 5: qan.v1beta1.QueryExampleReply - (*QueryExample)(nil), // 6: qan.v1beta1.QueryExample - (*ObjectDetailsLabelsRequest)(nil), // 7: qan.v1beta1.ObjectDetailsLabelsRequest - (*ObjectDetailsLabelsReply)(nil), // 8: qan.v1beta1.ObjectDetailsLabelsReply - (*ListLabelValues)(nil), // 9: qan.v1beta1.ListLabelValues - (*QueryPlanRequest)(nil), // 10: qan.v1beta1.QueryPlanRequest - (*QueryPlanReply)(nil), // 11: qan.v1beta1.QueryPlanReply - (*HistogramRequest)(nil), // 12: qan.v1beta1.HistogramRequest - (*HistogramReply)(nil), // 13: qan.v1beta1.HistogramReply - (*HistogramItem)(nil), // 14: qan.v1beta1.HistogramItem - (*QueryExistsRequest)(nil), // 15: qan.v1beta1.QueryExistsRequest - nil, // 16: qan.v1beta1.MetricsReply.MetricsEntry - nil, // 17: qan.v1beta1.MetricsReply.TextMetricsEntry - nil, // 18: qan.v1beta1.MetricsReply.TotalsEntry - nil, // 19: qan.v1beta1.ObjectDetailsLabelsReply.LabelsEntry - (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*MapFieldEntry)(nil), // 21: qan.v1beta1.MapFieldEntry - (*Point)(nil), // 22: qan.v1beta1.Point - (ExampleFormat)(0), // 23: qan.v1beta1.ExampleFormat - (ExampleType)(0), // 24: qan.v1beta1.ExampleType - (*wrapperspb.BoolValue)(nil), // 25: google.protobuf.BoolValue + (*MetricsRequest)(nil), // 0: qan.v1beta1.MetricsRequest + (*MetricsReply)(nil), // 1: qan.v1beta1.MetricsReply + (*MetricValues)(nil), // 2: qan.v1beta1.MetricValues + (*Labels)(nil), // 3: qan.v1beta1.Labels + (*QueryExampleRequest)(nil), // 4: qan.v1beta1.QueryExampleRequest + (*QueryExampleReply)(nil), // 5: qan.v1beta1.QueryExampleReply + (*QueryExample)(nil), // 6: qan.v1beta1.QueryExample + (*ObjectDetailsLabelsRequest)(nil), // 7: qan.v1beta1.ObjectDetailsLabelsRequest + (*ObjectDetailsLabelsReply)(nil), // 8: qan.v1beta1.ObjectDetailsLabelsReply + (*ListLabelValues)(nil), // 9: qan.v1beta1.ListLabelValues + (*QueryPlanRequest)(nil), // 10: qan.v1beta1.QueryPlanRequest + (*QueryPlanReply)(nil), // 11: qan.v1beta1.QueryPlanReply + (*HistogramRequest)(nil), // 12: qan.v1beta1.HistogramRequest + (*HistogramReply)(nil), // 13: qan.v1beta1.HistogramReply + (*HistogramItem)(nil), // 14: qan.v1beta1.HistogramItem + (*QueryExistsRequest)(nil), // 15: qan.v1beta1.QueryExistsRequest + (*ExplainFingerprintByQueryIDRequest)(nil), // 16: qan.v1beta1.ExplainFingerprintByQueryIDRequest + (*ExplainFingerprintByQueryIDReply)(nil), // 17: qan.v1beta1.ExplainFingerprintByQueryIDReply + nil, // 18: qan.v1beta1.MetricsReply.MetricsEntry + nil, // 19: qan.v1beta1.MetricsReply.TextMetricsEntry + nil, // 20: qan.v1beta1.MetricsReply.TotalsEntry + nil, // 21: qan.v1beta1.ObjectDetailsLabelsReply.LabelsEntry + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*MapFieldEntry)(nil), // 23: qan.v1beta1.MapFieldEntry + (*Point)(nil), // 24: qan.v1beta1.Point + (ExampleFormat)(0), // 25: qan.v1beta1.ExampleFormat + (ExampleType)(0), // 26: qan.v1beta1.ExampleType + (*wrapperspb.BoolValue)(nil), // 27: google.protobuf.BoolValue } ) var file_qanpb_object_details_proto_depIdxs = []int32{ - 20, // 0: qan.v1beta1.MetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp - 20, // 1: qan.v1beta1.MetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp - 21, // 2: qan.v1beta1.MetricsRequest.labels:type_name -> qan.v1beta1.MapFieldEntry - 16, // 3: qan.v1beta1.MetricsReply.metrics:type_name -> qan.v1beta1.MetricsReply.MetricsEntry - 17, // 4: qan.v1beta1.MetricsReply.text_metrics:type_name -> qan.v1beta1.MetricsReply.TextMetricsEntry - 22, // 5: qan.v1beta1.MetricsReply.sparkline:type_name -> qan.v1beta1.Point - 18, // 6: qan.v1beta1.MetricsReply.totals:type_name -> qan.v1beta1.MetricsReply.TotalsEntry - 20, // 7: qan.v1beta1.QueryExampleRequest.period_start_from:type_name -> google.protobuf.Timestamp - 20, // 8: qan.v1beta1.QueryExampleRequest.period_start_to:type_name -> google.protobuf.Timestamp - 21, // 9: qan.v1beta1.QueryExampleRequest.labels:type_name -> qan.v1beta1.MapFieldEntry + 22, // 0: qan.v1beta1.MetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp + 22, // 1: qan.v1beta1.MetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp + 23, // 2: qan.v1beta1.MetricsRequest.labels:type_name -> qan.v1beta1.MapFieldEntry + 18, // 3: qan.v1beta1.MetricsReply.metrics:type_name -> qan.v1beta1.MetricsReply.MetricsEntry + 19, // 4: qan.v1beta1.MetricsReply.text_metrics:type_name -> qan.v1beta1.MetricsReply.TextMetricsEntry + 24, // 5: qan.v1beta1.MetricsReply.sparkline:type_name -> qan.v1beta1.Point + 20, // 6: qan.v1beta1.MetricsReply.totals:type_name -> qan.v1beta1.MetricsReply.TotalsEntry + 22, // 7: qan.v1beta1.QueryExampleRequest.period_start_from:type_name -> google.protobuf.Timestamp + 22, // 8: qan.v1beta1.QueryExampleRequest.period_start_to:type_name -> google.protobuf.Timestamp + 23, // 9: qan.v1beta1.QueryExampleRequest.labels:type_name -> qan.v1beta1.MapFieldEntry 6, // 10: qan.v1beta1.QueryExampleReply.query_examples:type_name -> qan.v1beta1.QueryExample - 23, // 11: qan.v1beta1.QueryExample.example_format:type_name -> qan.v1beta1.ExampleFormat - 24, // 12: qan.v1beta1.QueryExample.example_type:type_name -> qan.v1beta1.ExampleType - 20, // 13: qan.v1beta1.ObjectDetailsLabelsRequest.period_start_from:type_name -> google.protobuf.Timestamp - 20, // 14: qan.v1beta1.ObjectDetailsLabelsRequest.period_start_to:type_name -> google.protobuf.Timestamp - 19, // 15: qan.v1beta1.ObjectDetailsLabelsReply.labels:type_name -> qan.v1beta1.ObjectDetailsLabelsReply.LabelsEntry - 20, // 16: qan.v1beta1.HistogramRequest.period_start_from:type_name -> google.protobuf.Timestamp - 20, // 17: qan.v1beta1.HistogramRequest.period_start_to:type_name -> google.protobuf.Timestamp - 21, // 18: qan.v1beta1.HistogramRequest.labels:type_name -> qan.v1beta1.MapFieldEntry + 25, // 11: qan.v1beta1.QueryExample.example_format:type_name -> qan.v1beta1.ExampleFormat + 26, // 12: qan.v1beta1.QueryExample.example_type:type_name -> qan.v1beta1.ExampleType + 22, // 13: qan.v1beta1.ObjectDetailsLabelsRequest.period_start_from:type_name -> google.protobuf.Timestamp + 22, // 14: qan.v1beta1.ObjectDetailsLabelsRequest.period_start_to:type_name -> google.protobuf.Timestamp + 21, // 15: qan.v1beta1.ObjectDetailsLabelsReply.labels:type_name -> qan.v1beta1.ObjectDetailsLabelsReply.LabelsEntry + 22, // 16: qan.v1beta1.HistogramRequest.period_start_from:type_name -> google.protobuf.Timestamp + 22, // 17: qan.v1beta1.HistogramRequest.period_start_to:type_name -> google.protobuf.Timestamp + 23, // 18: qan.v1beta1.HistogramRequest.labels:type_name -> qan.v1beta1.MapFieldEntry 14, // 19: qan.v1beta1.HistogramReply.histogram_items:type_name -> qan.v1beta1.HistogramItem 2, // 20: qan.v1beta1.MetricsReply.MetricsEntry.value:type_name -> qan.v1beta1.MetricValues 2, // 21: qan.v1beta1.MetricsReply.TotalsEntry.value:type_name -> qan.v1beta1.MetricValues @@ -1446,14 +1618,16 @@ var file_qanpb_object_details_proto_depIdxs = []int32{ 10, // 26: qan.v1beta1.ObjectDetails.GetQueryPlan:input_type -> qan.v1beta1.QueryPlanRequest 12, // 27: qan.v1beta1.ObjectDetails.GetHistogram:input_type -> qan.v1beta1.HistogramRequest 15, // 28: qan.v1beta1.ObjectDetails.QueryExists:input_type -> qan.v1beta1.QueryExistsRequest - 1, // 29: qan.v1beta1.ObjectDetails.GetMetrics:output_type -> qan.v1beta1.MetricsReply - 5, // 30: qan.v1beta1.ObjectDetails.GetQueryExample:output_type -> qan.v1beta1.QueryExampleReply - 8, // 31: qan.v1beta1.ObjectDetails.GetLabels:output_type -> qan.v1beta1.ObjectDetailsLabelsReply - 11, // 32: qan.v1beta1.ObjectDetails.GetQueryPlan:output_type -> qan.v1beta1.QueryPlanReply - 13, // 33: qan.v1beta1.ObjectDetails.GetHistogram:output_type -> qan.v1beta1.HistogramReply - 25, // 34: qan.v1beta1.ObjectDetails.QueryExists:output_type -> google.protobuf.BoolValue - 29, // [29:35] is the sub-list for method output_type - 23, // [23:29] is the sub-list for method input_type + 16, // 29: qan.v1beta1.ObjectDetails.ExplainFingerprintByQueryID:input_type -> qan.v1beta1.ExplainFingerprintByQueryIDRequest + 1, // 30: qan.v1beta1.ObjectDetails.GetMetrics:output_type -> qan.v1beta1.MetricsReply + 5, // 31: qan.v1beta1.ObjectDetails.GetQueryExample:output_type -> qan.v1beta1.QueryExampleReply + 8, // 32: qan.v1beta1.ObjectDetails.GetLabels:output_type -> qan.v1beta1.ObjectDetailsLabelsReply + 11, // 33: qan.v1beta1.ObjectDetails.GetQueryPlan:output_type -> qan.v1beta1.QueryPlanReply + 13, // 34: qan.v1beta1.ObjectDetails.GetHistogram:output_type -> qan.v1beta1.HistogramReply + 27, // 35: qan.v1beta1.ObjectDetails.QueryExists:output_type -> google.protobuf.BoolValue + 17, // 36: qan.v1beta1.ObjectDetails.ExplainFingerprintByQueryID:output_type -> qan.v1beta1.ExplainFingerprintByQueryIDReply + 30, // [30:37] is the sub-list for method output_type + 23, // [23:30] is the sub-list for method input_type 23, // [23:23] is the sub-list for extension type_name 23, // [23:23] is the sub-list for extension extendee 0, // [0:23] is the sub-list for field type_name @@ -1658,6 +1832,30 @@ func file_qanpb_object_details_proto_init() { return nil } } + file_qanpb_object_details_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExplainFingerprintByQueryIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_qanpb_object_details_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExplainFingerprintByQueryIDReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1665,7 +1863,7 @@ func file_qanpb_object_details_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_qanpb_object_details_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/api/qanpb/object_details.pb.gw.go b/api/qanpb/object_details.pb.gw.go index 36f4a871da..613c2d53e3 100644 --- a/api/qanpb/object_details.pb.gw.go +++ b/api/qanpb/object_details.pb.gw.go @@ -225,6 +225,38 @@ func local_request_ObjectDetails_QueryExists_0(ctx context.Context, marshaler ru return msg, metadata, err } +func request_ObjectDetails_ExplainFingerprintByQueryID_0(ctx context.Context, marshaler runtime.Marshaler, client ObjectDetailsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExplainFingerprintByQueryIDRequest + 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); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ExplainFingerprintByQueryID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_ObjectDetails_ExplainFingerprintByQueryID_0(ctx context.Context, marshaler runtime.Marshaler, server ObjectDetailsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExplainFingerprintByQueryIDRequest + 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); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ExplainFingerprintByQueryID(ctx, &protoReq) + return msg, metadata, err +} + // RegisterObjectDetailsHandlerServer registers the http handlers for service ObjectDetails to "mux". // UnaryRPC :call ObjectDetailsServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -374,6 +406,30 @@ func RegisterObjectDetailsHandlerServer(ctx context.Context, mux *runtime.ServeM forward_ObjectDetails_QueryExists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("POST", pattern_ObjectDetails_ExplainFingerprintByQueryID_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/qan.v1beta1.ObjectDetails/ExplainFingerprintByQueryID", runtime.WithHTTPPathPattern("/v0/qan/ObjectDetails/ExplainFingerprintByQueryID")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ObjectDetails_ExplainFingerprintByQueryID_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ObjectDetails_ExplainFingerprintByQueryID_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil } @@ -540,6 +596,27 @@ func RegisterObjectDetailsHandlerClient(ctx context.Context, mux *runtime.ServeM forward_ObjectDetails_QueryExists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle("POST", pattern_ObjectDetails_ExplainFingerprintByQueryID_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/qan.v1beta1.ObjectDetails/ExplainFingerprintByQueryID", runtime.WithHTTPPathPattern("/v0/qan/ObjectDetails/ExplainFingerprintByQueryID")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ObjectDetails_ExplainFingerprintByQueryID_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ObjectDetails_ExplainFingerprintByQueryID_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil } @@ -555,6 +632,8 @@ var ( pattern_ObjectDetails_GetHistogram_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v0", "qan", "ObjectDetails", "GetHistogram"}, "")) pattern_ObjectDetails_QueryExists_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v0", "qan", "ObjectDetails", "QueryExists"}, "")) + + pattern_ObjectDetails_ExplainFingerprintByQueryID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v0", "qan", "ObjectDetails", "ExplainFingerprintByQueryID"}, "")) ) var ( @@ -569,4 +648,6 @@ var ( forward_ObjectDetails_GetHistogram_0 = runtime.ForwardResponseMessage forward_ObjectDetails_QueryExists_0 = runtime.ForwardResponseMessage + + forward_ObjectDetails_ExplainFingerprintByQueryID_0 = runtime.ForwardResponseMessage ) diff --git a/api/qanpb/object_details.proto b/api/qanpb/object_details.proto index c8047c5c3c..3dcb48c86a 100644 --- a/api/qanpb/object_details.proto +++ b/api/qanpb/object_details.proto @@ -53,6 +53,13 @@ service ObjectDetails { body: "*" }; } + // ExplainFingerprintByQueryID get explain fingerprint for given query ID. + rpc ExplainFingerprintByQueryID(ExplainFingerprintByQueryIDRequest) returns (ExplainFingerprintByQueryIDReply) { + option (google.api.http) = { + post: "/v0/qan/ObjectDetails/ExplainFingerprintByQueryID" + body: "*" + }; + } } // MetricsRequest defines filtering of metrics for specific value of dimension (ex.: host=hostname1 or queryid=1D410B4BE5060972. @@ -120,6 +127,9 @@ message QueryExample { ExampleFormat example_format = 2 [deprecated = true]; ExampleType example_type = 3; uint32 is_truncated = 4; + uint32 placeholders_count = 10; + string explain_fingerprint = 11; + string query_id = 12; string example_metrics = 5; string service_id = 6; string service_type = 7; @@ -183,3 +193,16 @@ message QueryExistsRequest { string serviceid = 1; string query = 2; } + +// ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID. +message ExplainFingerprintByQueryIDRequest { + string serviceid = 1; + string query_id = 2; +} + +// ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID. +message ExplainFingerprintByQueryIDReply { + string explain_fingerprint = 1; + uint32 placeholders_count = 2; +} + diff --git a/api/qanpb/object_details.validator.pb.go b/api/qanpb/object_details.validator.pb.go index 146a5749d2..54052bdd1b 100644 --- a/api/qanpb/object_details.validator.pb.go +++ b/api/qanpb/object_details.validator.pb.go @@ -170,3 +170,11 @@ func (this *HistogramItem) Validate() error { func (this *QueryExistsRequest) Validate() error { return nil } + +func (this *ExplainFingerprintByQueryIDRequest) Validate() error { + return nil +} + +func (this *ExplainFingerprintByQueryIDReply) Validate() error { + return nil +} diff --git a/api/qanpb/object_details_grpc.pb.go b/api/qanpb/object_details_grpc.pb.go index 3c595daec4..fe64c76a4c 100644 --- a/api/qanpb/object_details_grpc.pb.go +++ b/api/qanpb/object_details_grpc.pb.go @@ -36,6 +36,8 @@ type ObjectDetailsClient interface { GetHistogram(ctx context.Context, in *HistogramRequest, opts ...grpc.CallOption) (*HistogramReply, error) // QueryExists check if query exists in clickhouse. QueryExists(ctx context.Context, in *QueryExistsRequest, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) + // ExplainFingerprintByQueryID get explain fingerprint for given query ID. + ExplainFingerprintByQueryID(ctx context.Context, in *ExplainFingerprintByQueryIDRequest, opts ...grpc.CallOption) (*ExplainFingerprintByQueryIDReply, error) } type objectDetailsClient struct { @@ -100,6 +102,15 @@ func (c *objectDetailsClient) QueryExists(ctx context.Context, in *QueryExistsRe return out, nil } +func (c *objectDetailsClient) ExplainFingerprintByQueryID(ctx context.Context, in *ExplainFingerprintByQueryIDRequest, opts ...grpc.CallOption) (*ExplainFingerprintByQueryIDReply, error) { + out := new(ExplainFingerprintByQueryIDReply) + err := c.cc.Invoke(ctx, "/qan.v1beta1.ObjectDetails/ExplainFingerprintByQueryID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ObjectDetailsServer is the server API for ObjectDetails service. // All implementations must embed UnimplementedObjectDetailsServer // for forward compatibility @@ -116,6 +127,8 @@ type ObjectDetailsServer interface { GetHistogram(context.Context, *HistogramRequest) (*HistogramReply, error) // QueryExists check if query exists in clickhouse. QueryExists(context.Context, *QueryExistsRequest) (*wrapperspb.BoolValue, error) + // ExplainFingerprintByQueryID get explain fingerprint for given query ID. + ExplainFingerprintByQueryID(context.Context, *ExplainFingerprintByQueryIDRequest) (*ExplainFingerprintByQueryIDReply, error) mustEmbedUnimplementedObjectDetailsServer() } @@ -145,6 +158,10 @@ func (UnimplementedObjectDetailsServer) GetHistogram(context.Context, *Histogram func (UnimplementedObjectDetailsServer) QueryExists(context.Context, *QueryExistsRequest) (*wrapperspb.BoolValue, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryExists not implemented") } + +func (UnimplementedObjectDetailsServer) ExplainFingerprintByQueryID(context.Context, *ExplainFingerprintByQueryIDRequest) (*ExplainFingerprintByQueryIDReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExplainFingerprintByQueryID not implemented") +} func (UnimplementedObjectDetailsServer) mustEmbedUnimplementedObjectDetailsServer() {} // UnsafeObjectDetailsServer may be embedded to opt out of forward compatibility for this service. @@ -266,6 +283,24 @@ func _ObjectDetails_QueryExists_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _ObjectDetails_ExplainFingerprintByQueryID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExplainFingerprintByQueryIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ObjectDetailsServer).ExplainFingerprintByQueryID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/qan.v1beta1.ObjectDetails/ExplainFingerprintByQueryID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ObjectDetailsServer).ExplainFingerprintByQueryID(ctx, req.(*ExplainFingerprintByQueryIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ObjectDetails_ServiceDesc is the grpc.ServiceDesc for ObjectDetails service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -297,6 +332,10 @@ var ObjectDetails_ServiceDesc = grpc.ServiceDesc{ MethodName: "QueryExists", Handler: _ObjectDetails_QueryExists_Handler, }, + { + MethodName: "ExplainFingerprintByQueryID", + Handler: _ObjectDetails_ExplainFingerprintByQueryID_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "qanpb/object_details.proto", diff --git a/api/swagger/swagger-dev-only.json b/api/swagger/swagger-dev-only.json index cf95e29281..26e390aeb9 100644 --- a/api/swagger/swagger-dev-only.json +++ b/api/swagger/swagger-dev-only.json @@ -845,6 +845,88 @@ } } }, + "/v0/qan/ObjectDetails/ExplainFingerprintByQueryID": { + "post": { + "tags": [ + "ObjectDetails" + ], + "summary": "ExplainFingerprintByQueryID get explain fingerprint for given query ID.", + "operationId": "ExplainFingerprintByQueryID", + "parameters": [ + { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "type": "object", + "properties": { + "serviceid": { + "type": "string", + "x-order": 0 + }, + "query_id": { + "type": "string", + "x-order": 1 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID.", + "type": "object", + "properties": { + "explain_fingerprint": { + "type": "string", + "x-order": 0 + }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 1 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v0/qan/ObjectDetails/GetHistogram": { "post": { "tags": [ @@ -1790,28 +1872,41 @@ "format": "int64", "x-order": 3 }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 4 + }, + "explain_fingerprint": { + "type": "string", + "x-order": 5 + }, + "query_id": { + "type": "string", + "x-order": 6 + }, "example_metrics": { "type": "string", - "x-order": 4 + "x-order": 7 }, "service_id": { "type": "string", - "x-order": 5 + "x-order": 8 }, "service_type": { "type": "string", - "x-order": 6 + "x-order": 9 }, "schema": { "type": "string", - "x-order": 7 + "x-order": 10 }, "tables": { "type": "array", "items": { "type": "string" }, - "x-order": 8 + "x-order": 11 } } }, diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 8833b9c337..aea00b5837 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -893,6 +893,88 @@ } } }, + "/v0/qan/ObjectDetails/ExplainFingerprintByQueryID": { + "post": { + "tags": [ + "ObjectDetails" + ], + "summary": "ExplainFingerprintByQueryID get explain fingerprint for given query ID.", + "operationId": "ExplainFingerprintByQueryID", + "parameters": [ + { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "ExplainFingerprintByQueryIDRequest get explain fingerprint for given query ID.", + "type": "object", + "properties": { + "serviceid": { + "type": "string", + "x-order": 0 + }, + "query_id": { + "type": "string", + "x-order": 1 + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "ExplainFingerprintByQueryIDReply is explain fingerprint and placeholders count for given query ID.", + "type": "object", + "properties": { + "explain_fingerprint": { + "type": "string", + "x-order": 0 + }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 1 + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "x-order": 0 + }, + "message": { + "type": "string", + "x-order": 1 + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "x-order": 0 + } + }, + "additionalProperties": false + }, + "x-order": 2 + } + } + } + } + } + } + }, "/v0/qan/ObjectDetails/GetHistogram": { "post": { "tags": [ @@ -1838,28 +1920,41 @@ "format": "int64", "x-order": 3 }, + "placeholders_count": { + "type": "integer", + "format": "int64", + "x-order": 4 + }, + "explain_fingerprint": { + "type": "string", + "x-order": 5 + }, + "query_id": { + "type": "string", + "x-order": 6 + }, "example_metrics": { "type": "string", - "x-order": 4 + "x-order": 7 }, "service_id": { "type": "string", - "x-order": 5 + "x-order": 8 }, "service_type": { "type": "string", - "x-order": 6 + "x-order": 9 }, "schema": { "type": "string", - "x-order": 7 + "x-order": 10 }, "tables": { "type": "array", "items": { "type": "string" }, - "x-order": 8 + "x-order": 11 } } }, @@ -16857,14 +16952,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } @@ -16950,14 +17058,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } @@ -17043,14 +17164,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index 6b768d03a6..5d7786f6d0 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -14240,14 +14240,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } @@ -14333,14 +14346,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } @@ -14426,14 +14452,27 @@ "x-order": 1 }, "query": { - "description": "SQL query. Required.", + "description": "Query ID or query is required.\nValue of query.", "type": "string", "x-order": 2 }, - "database": { - "description": "Database name. Required if it can't be deduced from the query.", + "query_id": { + "description": "Query ID of query.", "type": "string", "x-order": 3 + }, + "placeholders": { + "type": "array", + "title": "Array of placeholder values", + "items": { + "type": "string" + }, + "x-order": 4 + }, + "database": { + "description": "Database name. Required if it can't be deduced from the query ID.", + "type": "string", + "x-order": 5 } } } diff --git a/go.mod b/go.mod index 867a7ffe15..2c8c6188a4 100644 --- a/go.mod +++ b/go.mod @@ -84,6 +84,7 @@ require ( k8s.io/apimachinery v0.24.8 k8s.io/cli-runtime v0.24.8 k8s.io/client-go v0.24.8 + vitess.io/vitess v0.15.0 ) require ( @@ -99,17 +100,25 @@ require ( github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-logr/logr v1.2.3 // indirect + github.com/golang/glog v1.0.0 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02 // indirect + github.com/philhofer/fwd v1.0.0 // indirect github.com/posener/complete v1.2.3 // indirect github.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/tinylib/msgp v1.1.1 // indirect + github.com/uber/jaeger-client-go v2.16.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/xlab/treeprint v1.1.0 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + gopkg.in/DataDog/dd-trace-go.v1 v1.17.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/klog/v2 v2.70.1 // indirect k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 // indirect @@ -178,7 +187,6 @@ require ( github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/mattn/go-sqlite3 v1.14.6 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/miekg/dns v1.1.49 // indirect github.com/minio/md5-simd v1.1.2 // indirect diff --git a/go.sum b/go.sum index 8173ad1bd3..9947205d22 100644 --- a/go.sum +++ b/go.sum @@ -85,6 +85,7 @@ github.com/ClickHouse/clickhouse-go/v2 v2.3.0/go.mod h1:f2kb1LPopJdIyt0Y0vxNk9ai github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/HdrHistogram/hdrhistogram-go v0.9.0 h1:dpujRju0R4M/QZzcnR1LH1qm+TVG3UzkWdp5tH1WMcg= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -339,6 +340,7 @@ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -458,8 +460,8 @@ github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0S github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -573,8 +575,7 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.14 h1:qZgc/Rwetq+MtyE18WhzjokPD93dNqLGNT3QJuLvBGw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -659,6 +660,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02 h1:0R5mDLI66Qw13qN80TRz85zthQ2nf2+uDyiV23w6c3Q= +github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02/go.mod h1:JNdpVEzCpXBgIiv4ds+TzhN1hrtxq6ClLrTlT9OQRSc= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -687,8 +690,10 @@ github.com/percona/percona-toolkit v3.2.1+incompatible/go.mod h1:netQWdWMaF1cnmw github.com/percona/promconfig v0.2.5 h1:f/HN/CbECQs7d9RIB6MKVkuXstsrsqEDxRvf6yigquc= github.com/percona/promconfig v0.2.5/go.mod h1:Y2uXi5QNk71+ceJHuI9poank+0S1kjxd3K105fXKVkg= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= @@ -817,9 +822,16 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tinylib/msgp v1.1.1 h1:TnCZ3FIuKeaIy+F45+Cnp+caqdXGy4z74HvwXN+570Y= +github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o= +github.com/uber/jaeger-client-go v2.16.0+incompatible h1:Q2Pp6v3QYiocMxomCaJuwQGFt7E53bPYqEgug/AoBtY= +github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= @@ -1185,6 +1197,7 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1283,6 +1296,7 @@ google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc/examples v0.0.0-20210430044426-28078834f35b h1:D/GTYPo6I1oEo08Bfpuj3xl5XE+UGHj7//5fVyKxhsQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1298,6 +1312,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/DataDog/dd-trace-go.v1 v1.17.0 h1:j9vAp9Re9bbtA/QFehkJpNba/6W2IbJtNuXZophCa54= +gopkg.in/DataDog/dd-trace-go.v1 v1.17.0/go.mod h1:DVp8HmDh8PuTu2Z0fVVlBsyWaC++fzwVCaGWylTe3tg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1330,6 +1346,7 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= @@ -1384,3 +1401,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ih sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +vitess.io/vitess v0.15.0 h1:Tt6A1+Ba8Ulw0e9mbym5xjE5nOewvp+QXYI7FgynGEk= +vitess.io/vitess v0.15.0/go.mod h1:/GkjuhGSnhXSsvk2OzYaEk9veaT53PzsJraV+Z1sDTg= diff --git a/managed/services/agents/actions.go b/managed/services/agents/actions.go index 3d5590311f..1ecc28f4cc 100644 --- a/managed/services/agents/actions.go +++ b/managed/services/agents/actions.go @@ -17,8 +17,12 @@ package agents import ( "context" + "fmt" + "strings" "time" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/durationpb" "github.com/percona/pmm/api/agentpb" @@ -46,10 +50,35 @@ func NewActionsService(qanClient qanClient, r *Registry) *ActionsService { } // StartMySQLExplainAction starts MySQL EXPLAIN Action on pmm-agent. -func (s *ActionsService) StartMySQLExplainAction(ctx context.Context, id, pmmAgentID, serviceID, dsn, query string, format agentpb.MysqlExplainOutputFormat, files map[string]string, tdp *models.DelimiterPair, tlsSkipVerify bool) error { //nolint:lll - err := s.qanClient.QueryExists(ctx, serviceID, query) - if err != nil { - return err +func (s *ActionsService) StartMySQLExplainAction(ctx context.Context, id, pmmAgentID, serviceID, dsn, query, queryID string, placeholders []string, format agentpb.MysqlExplainOutputFormat, files map[string]string, tdp *models.DelimiterPair, tlsSkipVerify bool) error { + if query == "" && queryID == "" { + return status.Error(codes.FailedPrecondition, "query or query_id is required") + } + + var q string + switch { + case queryID != "": + res, err := s.qanClient.ExplainFingerprintByQueryID(ctx, serviceID, queryID) + if err != nil { + return err + } + + if res.PlaceholdersCount != uint32(len(placeholders)) { + return status.Error(codes.FailedPrecondition, "placeholders count is not correct") + } + + parsed := res.ExplainFingerprint + for k, v := range placeholders { + parsed = strings.Replace(parsed, fmt.Sprintf(":%d", k+1), v, 1) + } + + q = parsed + default: + err := s.qanClient.QueryExists(ctx, serviceID, query) + if err != nil { + return err + } + q = query } agent, err := s.r.get(pmmAgentID) @@ -62,7 +91,7 @@ func (s *ActionsService) StartMySQLExplainAction(ctx context.Context, id, pmmAge Params: &agentpb.StartActionRequest_MysqlExplainParams{ MysqlExplainParams: &agentpb.StartActionRequest_MySQLExplainParams{ Dsn: dsn, - Query: query, + Query: q, OutputFormat: format, TlsFiles: &agentpb.TextFiles{ Files: files, diff --git a/managed/services/agents/deps.go b/managed/services/agents/deps.go index 67018611e6..e05582ae11 100644 --- a/managed/services/agents/deps.go +++ b/managed/services/agents/deps.go @@ -21,6 +21,7 @@ import ( "github.com/sirupsen/logrus" "github.com/percona/pmm/api/agentpb" + qanpb "github.com/percona/pmm/api/qanpb" ) // prometheusService is a subset of methods of victoriametrics.Service used by this package. @@ -37,6 +38,7 @@ type prometheusService interface { type qanClient interface { Collect(ctx context.Context, metricsBuckets []*agentpb.MetricsBucket) error QueryExists(ctx context.Context, serviceID, query string) error + ExplainFingerprintByQueryID(ctx context.Context, serviceID, queryID string) (*qanpb.ExplainFingerprintByQueryIDReply, error) } // retentionService is a subset of methods of backup.Client used by this package. diff --git a/managed/services/management/grpc/actions_server.go b/managed/services/management/grpc/actions_server.go index 7b15a11305..9d0e3a53f3 100644 --- a/managed/services/management/grpc/actions_server.go +++ b/managed/services/management/grpc/actions_server.go @@ -146,7 +146,7 @@ func (s *actionsServer) StartMySQLExplainAction(ctx context.Context, req *manage return nil, status.Errorf(codes.FailedPrecondition, "Cannot find right agent") } - err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_DEFAULT, files, tdp, agents[0].TLSSkipVerify) + err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, req.QueryId, req.Placeholders, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_DEFAULT, files, tdp, agents[0].TLSSkipVerify) if err != nil { return nil, err } @@ -174,7 +174,7 @@ func (s *actionsServer) StartMySQLExplainJSONAction(ctx context.Context, req *ma return nil, status.Errorf(codes.FailedPrecondition, "Cannot find right agent") } - err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_JSON, files, tdp, agents[0].TLSSkipVerify) + err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, req.QueryId, req.Placeholders, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_JSON, files, tdp, agents[0].TLSSkipVerify) if err != nil { return nil, err } @@ -202,7 +202,7 @@ func (s *actionsServer) StartMySQLExplainTraditionalJSONAction(ctx context.Conte return nil, status.Errorf(codes.FailedPrecondition, "Cannot find right agent") } - err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_TRADITIONAL_JSON, files, tdp, agents[0].TLSSkipVerify) + err = s.a.StartMySQLExplainAction(ctx, res.ID, res.PMMAgentID, req.ServiceId, dsn, req.Query, req.QueryId, req.Placeholders, agentpb.MysqlExplainOutputFormat_MYSQL_EXPLAIN_OUTPUT_FORMAT_TRADITIONAL_JSON, files, tdp, agents[0].TLSSkipVerify) if err != nil { return nil, err } diff --git a/managed/services/qan/client.go b/managed/services/qan/client.go index 5cf36aa6e1..cd212bf958 100644 --- a/managed/services/qan/client.go +++ b/managed/services/qan/client.go @@ -125,6 +125,22 @@ func (c *Client) QueryExists(ctx context.Context, serviceID, query string) error return nil } +// ExplainFingerprintByQueryID get query for given query ID. +// This avoid receiving custom queries. +func (c *Client) ExplainFingerprintByQueryID(ctx context.Context, serviceID, queryID string) (*qanpb.ExplainFingerprintByQueryIDReply, error) { + qanReq := &qanpb.ExplainFingerprintByQueryIDRequest{ + Serviceid: serviceID, + QueryId: queryID, + } + c.l.Debugf("%+v", qanReq) + res, err := c.odc.ExplainFingerprintByQueryID(ctx, qanReq) + if err != nil { + return res, err + } + + return res, nil +} + // Collect adds labels to the data from pmm-agent and sends it to qan-api. func (c *Client) Collect(ctx context.Context, metricsBuckets []*agentpb.MetricsBucket) error { start := time.Now() @@ -175,6 +191,8 @@ func (c *Client) Collect(ctx context.Context, metricsBuckets []*agentpb.MetricsB } mb := &qanpb.MetricsBucket{ Queryid: m.Common.Queryid, + ExplainFingerprint: m.Common.ExplainFingerprint, + PlaceholdersCount: m.Common.PlaceholdersCount, Fingerprint: m.Common.Fingerprint, ServiceName: service.ServiceName, Database: m.Common.Database, diff --git a/qan-api2/exporters/slow_log.go b/qan-api2/exporters/slow_log.go index a7e86973ff..52f4c8b764 100644 --- a/qan-api2/exporters/slow_log.go +++ b/qan-api2/exporters/slow_log.go @@ -137,6 +137,8 @@ func main() { mb := &qanpb.MetricsBucket{ Queryid: v.Id, + ExplainFingerprint: v.ExplainFingerprint, + PlaceholdersCount: v.PlaceholdersCount, Fingerprint: v.Fingerprint, Database: "", Schema: v.Db, diff --git a/qan-api2/migrations/bindata.go b/qan-api2/migrations/bindata.go index 0f00cb26f4..309834a44e 100644 --- a/qan-api2/migrations/bindata.go +++ b/qan-api2/migrations/bindata.go @@ -30,6 +30,8 @@ // migrations/sql/14_pg_stat_monitor_09_queryplan.up.sql (70B) // migrations/sql/15_pg_stat_monitor_09_histogram.down.sql (53B) // migrations/sql/15_pg_stat_monitor_09_histogram.up.sql (66B) +// migrations/sql/16_explain_columns.down.sql (93B) +// migrations/sql/16_explain_columns.up.sql (105B) package migrations @@ -703,6 +705,46 @@ func _15_pg_stat_monitor_09_histogramUpSql() (*asset, error) { return a, nil } +var __16_explain_columnsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\xc8\x4d\x2d\x29\xca\x4c\x2e\xe6\x52\x50\x70\x09\xf2\x0f\x50\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x48\xad\x28\xc8\x49\xcc\xcc\x8b\x4f\xcb\xcc\x4b\x4f\x2d\x2a\x28\xca\xcc\x2b\x49\xd0\x41\x57\x54\x90\x93\x98\x9c\x9a\x91\x9f\x93\x92\x5a\x54\x1c\x9f\x9c\x5f\x9a\x57\x92\x60\xcd\x05\x08\x00\x00\xff\xff\xfc\xd6\x40\x5a\x5d\x00\x00\x00") + +func _16_explain_columnsDownSqlBytes() ([]byte, error) { + return bindataRead( + __16_explain_columnsDownSql, + "16_explain_columns.down.sql", + ) +} + +func _16_explain_columnsDownSql() (*asset, error) { + bytes, err := _16_explain_columnsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "16_explain_columns.down.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0xe6, 0x76, 0x94, 0xed, 0x1, 0x6f, 0xe6, 0x78, 0x55, 0xc8, 0x10, 0xb6, 0x74, 0xc1, 0xf7, 0xe, 0xd3, 0xde, 0xc9, 0x5a, 0x3, 0x54, 0x8e, 0x38, 0xb, 0x34, 0x1, 0xb2, 0xae, 0xe, 0x8a}} + return a, nil +} + +var __16_explain_columnsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\xc8\x4d\x2d\x29\xca\x4c\x2e\xe6\x52\x50\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x48\xad\x28\xc8\x49\xcc\xcc\x8b\x4f\xcb\xcc\x4b\x4f\x2d\x2a\x28\xca\xcc\x2b\x49\x50\x08\x2e\x29\xca\xcc\x4b\xd7\x41\x53\x5a\x90\x93\x98\x9c\x9a\x91\x9f\x93\x92\x5a\x54\x1c\x9f\x9c\x5f\x0a\x52\x19\xea\x99\x57\x62\x6c\x64\xcd\x05\x08\x00\x00\xff\xff\x42\x82\x28\x5b\x69\x00\x00\x00") + +func _16_explain_columnsUpSqlBytes() ([]byte, error) { + return bindataRead( + __16_explain_columnsUpSql, + "16_explain_columns.up.sql", + ) +} + +func _16_explain_columnsUpSql() (*asset, error) { + bytes, err := _16_explain_columnsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "16_explain_columns.up.sql", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x57, 0x70, 0x98, 0x77, 0xcb, 0x32, 0x68, 0x7d, 0x96, 0x9f, 0x63, 0x81, 0xa0, 0xc5, 0xd9, 0x81, 0x82, 0xfd, 0xcd, 0x5a, 0x89, 0xa6, 0x1, 0x1a, 0x4c, 0xb3, 0x2, 0xab, 0xfd, 0x2f, 0x14, 0x6b}} + return a, nil +} + // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -824,6 +866,8 @@ var _bindata = map[string]func() (*asset, error){ "14_pg_stat_monitor_09_queryplan.up.sql": _14_pg_stat_monitor_09_queryplanUpSql, "15_pg_stat_monitor_09_histogram.down.sql": _15_pg_stat_monitor_09_histogramDownSql, "15_pg_stat_monitor_09_histogram.up.sql": _15_pg_stat_monitor_09_histogramUpSql, + "16_explain_columns.down.sql": _16_explain_columnsDownSql, + "16_explain_columns.up.sql": _16_explain_columnsUpSql, } // AssetDebug is true if the assets were built with the debug flag enabled. @@ -902,6 +946,8 @@ var _bintree = &bintree{nil, map[string]*bintree{ "14_pg_stat_monitor_09_queryplan.up.sql": {_14_pg_stat_monitor_09_queryplanUpSql, map[string]*bintree{}}, "15_pg_stat_monitor_09_histogram.down.sql": {_15_pg_stat_monitor_09_histogramDownSql, map[string]*bintree{}}, "15_pg_stat_monitor_09_histogram.up.sql": {_15_pg_stat_monitor_09_histogramUpSql, map[string]*bintree{}}, + "16_explain_columns.down.sql": {_16_explain_columnsDownSql, map[string]*bintree{}}, + "16_explain_columns.up.sql": {_16_explain_columnsUpSql, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/qan-api2/migrations/sql/16_explain_columns.down.sql b/qan-api2/migrations/sql/16_explain_columns.down.sql new file mode 100644 index 0000000000..da5db175c7 --- /dev/null +++ b/qan-api2/migrations/sql/16_explain_columns.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE metrics + DROP COLUMN `explain_fingerprint`, + DROP COLUMN `placeholders_count`; diff --git a/qan-api2/migrations/sql/16_explain_columns.up.sql b/qan-api2/migrations/sql/16_explain_columns.up.sql new file mode 100644 index 0000000000..8ab2d8e365 --- /dev/null +++ b/qan-api2/migrations/sql/16_explain_columns.up.sql @@ -0,0 +1,3 @@ +ALTER TABLE metrics + ADD COLUMN `explain_fingerprint` String, + ADD COLUMN `placeholders_count` UInt32; diff --git a/qan-api2/models/data_ingestion.go b/qan-api2/models/data_ingestion.go index 8f6287bcd8..d512b1507d 100644 --- a/qan-api2/models/data_ingestion.go +++ b/qan-api2/models/data_ingestion.go @@ -42,6 +42,8 @@ const insertSQL = ` INSERT INTO metrics ( queryid, + explain_fingerprint, + placeholders_count, service_name, database, schema, @@ -266,6 +268,8 @@ const insertSQL = ` ) VALUES ( :queryid, + :explain_fingerprint, + :placeholders_count, :service_name, :database, :schema, diff --git a/qan-api2/models/metrics.go b/qan-api2/models/metrics.go index c338bd22f7..fbf25be3c5 100644 --- a/qan-api2/models/metrics.go +++ b/qan-api2/models/metrics.go @@ -521,7 +521,7 @@ func (m *Metrics) SelectSparklines(ctx context.Context, periodStartFromSec, peri } const queryExampleTmpl = ` -SELECT schema AS schema, tables, service_id, service_type, example, toUInt8(example_format) AS example_format, +SELECT schema AS schema, tables, service_id, service_type, queryid, explain_fingerprint, placeholders_count, example, toUInt8(example_format) AS example_format, is_truncated, toUInt8(example_type) AS example_type, example_metrics FROM metrics WHERE period_start >= :period_start_from AND period_start <= :period_start_to @@ -548,8 +548,8 @@ func (m *Metrics) SelectQueryExamples(ctx context.Context, periodStartFrom, peri arg := map[string]interface{}{ "filter": filter, "group": group, - "period_start_from": periodStartFrom, "period_start_to": periodStartTo, + "period_start_from": periodStartFrom, "limit": limit, } @@ -588,6 +588,9 @@ func (m *Metrics) SelectQueryExamples(ctx context.Context, periodStartFrom, peri &row.Tables, &row.ServiceId, &row.ServiceType, + &row.QueryId, + &row.ExplainFingerprint, + &row.PlaceholdersCount, &row.Example, // TODO should we remove this field since it's deprecated? &row.ExampleFormat, //nolint:staticcheck @@ -597,6 +600,7 @@ func (m *Metrics) SelectQueryExamples(ctx context.Context, periodStartFrom, peri if err != nil { return nil, errors.Wrap(err, "failed to scan query example for object details") } + res.QueryExamples = append(res.QueryExamples, &row) } @@ -973,3 +977,52 @@ func (m *Metrics) QueryExists(ctx context.Context, serviceID, query string) (boo return false, nil } + +const queryByQueryIDTmpl = `SELECT explain_fingerprint, placeholders_count FROM metrics +WHERE service_id = :service_id AND queryid = :query_id LIMIT 1; +` + +// ExplainFingerprintByQueryID get explain fingerprint and placeholders count for given queryid. +func (m *Metrics) ExplainFingerprintByQueryID(ctx context.Context, serviceID, queryID string) (*qanpb.ExplainFingerprintByQueryIDReply, error) { + arg := map[string]interface{}{ + "service_id": serviceID, + "query_id": queryID, + } + + var queryBuffer bytes.Buffer + queryBuffer.WriteString(queryByQueryIDTmpl) + + res := &qanpb.ExplainFingerprintByQueryIDReply{} + query, args, err := sqlx.Named(queryBuffer.String(), arg) + if err != nil { + return res, errors.Wrap(err, cannotPrepare) + } + query, args, err = sqlx.In(query, args...) + if err != nil { + return res, errors.Wrap(err, cannotPopulate) + } + query = m.db.Rebind(query) + + queryCtx, cancel := context.WithTimeout(ctx, queryTimeout) + defer cancel() + + rows, err := m.db.QueryxContext(queryCtx, query, args...) + if err != nil { + return res, errors.Wrap(err, cannotExecute) + } + defer rows.Close() //nolint:errcheck + + for rows.Next() { + err = rows.Scan( + &res.ExplainFingerprint, + &res.PlaceholdersCount) + + if err != nil { + return res, errors.Wrap(err, "failed to scan query") + } + + return res, nil //nolint:staticcheck + } + + return res, errors.New("query_id doesnt exists") +} diff --git a/qan-api2/services/analytics/object_details.go b/qan-api2/services/analytics/object_details.go index 348abcb116..c85d648242 100644 --- a/qan-api2/services/analytics/object_details.go +++ b/qan-api2/services/analytics/object_details.go @@ -350,3 +350,16 @@ func (s *Service) QueryExists(ctx context.Context, in *qanpb.QueryExistsRequest) return wrapperspb.Bool(resp), nil } + +// ExplainFingerprintByQueryID get explain fingerprint and placeholders count by query ID. +func (s *Service) ExplainFingerprintByQueryID(ctx context.Context, in *qanpb.ExplainFingerprintByQueryIDRequest) (*qanpb.ExplainFingerprintByQueryIDReply, error) { + res, err := s.mm.ExplainFingerprintByQueryID( + ctx, + in.Serviceid, + in.QueryId) + if err != nil { + return nil, fmt.Errorf("error in checking query:%v", err) + } + + return res, nil +} diff --git a/qan-api2/test_data/GetQueryExample_no_group.json b/qan-api2/test_data/GetQueryExample_no_group.json index 44fa1ea901..dc6801a824 100644 --- a/qan-api2/test_data/GetQueryExample_no_group.json +++ b/qan-api2/test_data/GetQueryExample_no_group.json @@ -4,6 +4,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema29", @@ -15,6 +16,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema37", @@ -26,6 +28,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema58", @@ -37,6 +40,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema60", @@ -48,6 +52,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema65", diff --git a/qan-api2/test_data/GetQueryExample_no_limit.json b/qan-api2/test_data/GetQueryExample_no_limit.json index 89da299b0a..0097e00dc7 100644 --- a/qan-api2/test_data/GetQueryExample_no_limit.json +++ b/qan-api2/test_data/GetQueryExample_no_limit.json @@ -4,6 +4,7 @@ "example": "SELECT @@GLOBAL.slow_query_log_file", "exampleFormat": "EXAMPLE", "exampleType": "RANDOM", + "queryId": "B305F6354FA21F2A", "serviceId": "service_id1", "serviceType": "service_type1", "schema": "schema29",