diff --git a/CHANGELOG.md b/CHANGELOG.md index 41260418..ec7b7ebe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,24 @@ # Change History -## May 16 2024: v7.4.0 +## June 27 2024: v7.5.0 + + This a minor feature and fix release. + +- **New Features** + - [CLIENT-2968] Support new v71 proxy features: + - Info command. + - `QueryPolicy.QueryDuration` + - [CLIENT-3012] Support new server 7.1 info command error response strings. + +- **Improvements** + - [CLIENT-2997] Scans should work in a mixed cluster of v5.7 and v6.4 server nodes. + - [CLIENT-3012] Support new server 7.1 info command error response strings. + - [CLIENT-3020] Change ReadModeSC doc from server to client perspective. + +- **Fixes** + - [CLIENT-3019] Prevent Goroutine leak in AuthInterceptor for the Proxy Client. + +## May 20 2024: v7.4.0 This a minor fix release. We strongly suggest you upgrade to this version over the v7.3.0 if you use the `Client.BatchGetOperate` API. @@ -16,7 +34,7 @@ ## May 3 2024: v7.3.0 -> [!WARNING] +> [!WARNING] > Do not use this version if you are using the `Client.BatchGetOperate` API. This is a major feature release of the Go client and touches some of the fundamental aspects of the inner workings of it. diff --git a/aerospike_suite_test.go b/aerospike_suite_test.go index 497ae1f3..478c46d4 100644 --- a/aerospike_suite_test.go +++ b/aerospike_suite_test.go @@ -68,6 +68,7 @@ func initTestVars() { var buf bytes.Buffer var err error + log.SetFlags(log.LstdFlags | log.Lshortfile) logger := log.New(&buf, "", log.LstdFlags|log.Lshortfile) logger.SetOutput(os.Stdout) asl.Logger.SetLogger(logger) diff --git a/cdt_map.go b/cdt_map.go index 0482a830..5e3c84c4 100644 --- a/cdt_map.go +++ b/cdt_map.go @@ -238,7 +238,7 @@ const ( // MapWriteFlagsNoFail means: Do not raise error if a map item is denied due to write flag constraints. MapWriteFlagsNoFail = 4 - // MapWriteFlagsNoFail means: Allow other valid map items to be committed if a map item is denied due to + // MapWriteFlagsPartial means: Allow other valid map items to be committed if a map item is denied due to // write flag constraints. MapWriteFlagsPartial = 8 ) diff --git a/client.go b/client.go index d0af607e..a6841caf 100644 --- a/client.go +++ b/client.go @@ -20,6 +20,7 @@ import ( "encoding/json" "fmt" "os" + "regexp" "runtime" "strconv" "strings" @@ -1089,7 +1090,7 @@ func (clnt *Client) ExecuteUDFNode(policy *QueryPolicy, // SetXDRFilter sets XDR filter for given datacenter name and namespace. The expression filter indicates // which records XDR should ship to the datacenter. -// Pass nil as filter to remove the currentl filter on the server. +// Pass nil as filter to remove the current filter on the server. func (clnt *Client) SetXDRFilter(policy *InfoPolicy, datacenter string, namespace string, filter *Expression) Error { policy = clnt.getUsableInfoPolicy(policy) @@ -1116,26 +1117,37 @@ func (clnt *Client) SetXDRFilter(policy *InfoPolicy, datacenter string, namespac return nil } - code := parseIndexErrorCode(response) - return newError(code, response) + return parseIndexErrorCode(response) } -func parseIndexErrorCode(response string) types.ResultCode { - var code = types.OK +var indexErrRegexp = regexp.MustCompile(`(?i)(fail|error)(:[0-9]+)?(:.+)?`) - list := strings.Split(response, ":") - if len(list) >= 2 && list[0] == "FAIL" { - i, err := strconv.ParseInt(list[1], 10, 64) +func parseIndexErrorCode(response string) Error { + var code = types.SERVER_ERROR + var message = response + + match := indexErrRegexp.FindStringSubmatch(response) + + // invalid response + if len(match) != 4 { + return newError(types.PARSE_ERROR, response) + } + + // error code + if len(match[2]) > 0 { + i, err := strconv.ParseInt(string(match[2][1:]), 10, 64) if err == nil { code = types.ResultCode(i) + message = types.ResultCodeToString(code) } } - if code == 0 { - code = types.SERVER_ERROR + // message + if len(match[3]) > 0 { + message = string(match[3][1:]) } - return code + return newError(code, message) } //-------------------------------------------------------- @@ -1296,12 +1308,7 @@ func (clnt *Client) CreateComplexIndex( return NewIndexTask(clnt.cluster, namespace, indexName), nil } - if strings.HasPrefix(response, "FAIL:200") { - // Index has already been created. Do not need to poll for completion. - return nil, newError(types.INDEX_FOUND) - } - - return nil, newError(types.INDEX_GENERIC, "Create index failed: "+response) + return nil, parseIndexErrorCode(response) } // DropIndex deletes a secondary index. It will block until index is dropped on all nodes. @@ -1339,12 +1346,13 @@ func (clnt *Client) DropIndex( return <-task.OnComplete() } - if strings.HasPrefix(response, "FAIL:201") { + err = parseIndexErrorCode(response) + if err.Matches(types.INDEX_NOTFOUND) { // Index did not previously exist. Return without error. return nil } - return newError(types.INDEX_GENERIC, "Drop index failed: "+response) + return err } // Truncate removes records in specified namespace/set efficiently. This method is many orders of magnitude diff --git a/client_test.go b/client_test.go index 628c5cfa..db835bcf 100644 --- a/client_test.go +++ b/client_test.go @@ -25,6 +25,7 @@ import ( "time" as "github.com/aerospike/aerospike-client-go/v7" + "github.com/aerospike/aerospike-client-go/v7/types" ast "github.com/aerospike/aerospike-client-go/v7/types" asub "github.com/aerospike/aerospike-client-go/v7/utils/buffer" @@ -62,6 +63,39 @@ var _ = gg.Describe("Aerospike", func() { var actualClusterName string + gg.Describe("Client IndexErrorParser", func() { + + gg.It("must parse IndexError response strings", func() { + type t struct { + r string + code types.ResultCode + err string + } + + responses := []t{ + {"invalid", types.PARSE_ERROR, "invalid"}, + {"FAIL", types.SERVER_ERROR, "FAIL"}, + {"FAiL", types.SERVER_ERROR, "FAiL"}, + {"Error", types.SERVER_ERROR, "Error"}, + {"ERROR", types.SERVER_ERROR, "ERROR"}, + {"ERROR:200", types.INDEX_FOUND, "Index already exists"}, + {"FAIL:201", types.INDEX_NOTFOUND, "Index not found"}, + {"ERROR:200", types.INDEX_FOUND, "Index already exists"}, + {"FAIL:201", types.INDEX_NOTFOUND, "Index not found"}, + {"FAIL:201:some message from the server", types.INDEX_NOTFOUND, "some message from the server"}, + } + + for _, r := range responses { + err := as.ParseIndexErrorCode(r.r) + gm.Expect(err).To(gm.HaveOccurred()) + gm.Expect(err.(*as.AerospikeError).Msg()).To(gm.Equal(r.err)) + gm.Expect(err.Matches(r.code)).To(gm.BeTrue()) + } + + }) + + }) + gg.Describe("Client Management", func() { gg.BeforeEach(func() { @@ -229,6 +263,19 @@ var _ = gg.Describe("Aerospike", func() { }) }) + gg.Describe("Info operations on proxy client", func() { + gg.BeforeEach(func() { + if !*proxy { + gg.Skip("Only supported in grpc environment") + } + }) + + gg.It("must successfully call info command", func() { + _, err := client.(*as.ProxyClient).RequestInfo(nil) + gm.Expect(err).ToNot(gm.HaveOccurred()) + }) + }) + gg.Describe("Data operations on native types", func() { // connection data var err error diff --git a/command.go b/command.go index e1961094..3fa0e7c8 100644 --- a/command.go +++ b/command.go @@ -1455,16 +1455,11 @@ func (cmd *baseCommand) setScan(policy *ScanPolicy, namespace *string, setName * readAttr |= _INFO1_NOBINDATA } - infoAttr := 0 - if cmd.node == nil || cmd.node.cluster.supportsPartitionQuery.Get() { - infoAttr = _INFO3_PARTITION_DONE - } - operationCount := 0 if len(binNames) > 0 { operationCount = len(binNames) } - cmd.writeHeaderRead(&policy.BasePolicy, readAttr, 0, infoAttr, fieldCount, operationCount) + cmd.writeHeaderRead(&policy.BasePolicy, readAttr, 0, _INFO3_PARTITION_DONE, fieldCount, operationCount) if namespace != nil { cmd.writeFieldString(*namespace, NAMESPACE) @@ -1735,7 +1730,7 @@ func (cmd *baseCommand) setQuery(policy *QueryPolicy, wpolicy *WritePolicy, stat writeAttr |= _INFO2_RELAX_AP_LONG_QUERY } infoAttr := 0 - if isNew { + if isNew || statement.Filter == nil { infoAttr = _INFO3_PARTITION_DONE } cmd.writeHeaderRead(&policy.BasePolicy, readAttr, writeAttr, infoAttr, fieldCount, operationCount) diff --git a/helper_test.go b/helper_test.go index 5a5965ba..50e312b6 100644 --- a/helper_test.go +++ b/helper_test.go @@ -14,6 +14,14 @@ package aerospike +func ParseIndexErrorCode(response string) Error { + return parseIndexErrorCode(response) +} + +func (e *AerospikeError) Msg() string { + return e.msg +} + func (clstr *Cluster) GetMasterNode(partition *Partition) (*Node, Error) { return partition.getMasterNode(clstr) } diff --git a/info_policy.go b/info_policy.go index 574ddbc7..afa0267e 100644 --- a/info_policy.go +++ b/info_policy.go @@ -17,6 +17,8 @@ package aerospike import ( "context" "time" + + kvs "github.com/aerospike/aerospike-client-go/v7/proto/kvs" ) // InfoPolicy contains attributes used for info commands. @@ -62,3 +64,16 @@ func (p *InfoPolicy) grpcDeadlineContext() (context.Context, context.CancelFunc) ctx, cancel := context.WithTimeout(context.Background(), timeout) return ctx, cancel } + +func (p *InfoPolicy) grpc() *kvs.InfoPolicy { + if p == nil { + return nil + } + + Timeout := uint32(p.Timeout / time.Millisecond) + res := &kvs.InfoPolicy{ + Timeout: &Timeout, + } + + return res +} diff --git a/partition_filter.go b/partition_filter.go index afc3abc2..971dcf55 100644 --- a/partition_filter.go +++ b/partition_filter.go @@ -74,6 +74,8 @@ func newPartitionFilter(begin, count int) *PartitionFilter { // IsDone returns - if using ScanPolicy.MaxRecords or QueryPolicy,MaxRecords - // if the previous paginated scans with this partition filter instance return all records? +// This method is not synchronized and is not meant to be called while the Scan/Query is +// ongoing. It should be called after all the records are received from the recordset. func (pf *PartitionFilter) IsDone() bool { return pf.Done } diff --git a/policy.go b/policy.go index bcc55add..5e660c6c 100644 --- a/policy.go +++ b/policy.go @@ -244,7 +244,6 @@ func (p *BasePolicy) compress() bool { } func (p *BasePolicy) grpc() *kvs.ReadPolicy { - // TODO: support ReadTouchTTLPercent in the future for the proxy client return &kvs.ReadPolicy{ Replica: p.ReplicaPolicy.grpc(), ReadModeSC: p.ReadModeSC.grpc(), diff --git a/proto/auth/aerospike_proxy_auth.pb.go b/proto/auth/aerospike_proxy_auth.pb.go index 2b906075..c472fc1c 100644 --- a/proto/auth/aerospike_proxy_auth.pb.go +++ b/proto/auth/aerospike_proxy_auth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v3.12.4 +// protoc v5.27.1 // source: aerospike_proxy_auth.proto package auth diff --git a/proto/auth/aerospike_proxy_auth_grpc.pb.go b/proto/auth/aerospike_proxy_auth_grpc.pb.go index 3f5c1e0e..766bb0ba 100644 --- a/proto/auth/aerospike_proxy_auth_grpc.pb.go +++ b/proto/auth/aerospike_proxy_auth_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.12.4 +// - protoc v5.27.1 // source: proto/auth/aerospike_proxy_auth.proto package auth diff --git a/proto/kvs/aerospike_proxy_kv.pb.go b/proto/kvs/aerospike_proxy_kv.pb.go index 5cf7646c..97b82117 100644 --- a/proto/kvs/aerospike_proxy_kv.pb.go +++ b/proto/kvs/aerospike_proxy_kv.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v3.12.4 +// protoc v5.27.1 // source: aerospike_proxy_kv.proto package kvs @@ -206,6 +206,59 @@ func (Replica) EnumDescriptor() ([]byte, []int) { return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{2} } +type QueryDuration int32 + +const ( + // The query is expected to return more than 100 records per node. The server optimizes for a large record set. + QueryDuration_LONG QueryDuration = 0 + // The query is expected to return less than 100 records per node. The server optimizes for a small record set. + QueryDuration_SHORT QueryDuration = 1 + // Treat query as a LONG query, but relax read consistency for AP namespaces. + // This value is treated exactly like LONG for server versions < 7.1. + QueryDuration_LONG_RELAX_AP QueryDuration = 2 +) + +// Enum value maps for QueryDuration. +var ( + QueryDuration_name = map[int32]string{ + 0: "LONG", + 1: "SHORT", + 2: "LONG_RELAX_AP", + } + QueryDuration_value = map[string]int32{ + "LONG": 0, + "SHORT": 1, + "LONG_RELAX_AP": 2, + } +) + +func (x QueryDuration) Enum() *QueryDuration { + p := new(QueryDuration) + *p = x + return p +} + +func (x QueryDuration) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QueryDuration) Descriptor() protoreflect.EnumDescriptor { + return file_aerospike_proxy_kv_proto_enumTypes[3].Descriptor() +} + +func (QueryDuration) Type() protoreflect.EnumType { + return &file_aerospike_proxy_kv_proto_enumTypes[3] +} + +func (x QueryDuration) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use QueryDuration.Descriptor instead. +func (QueryDuration) EnumDescriptor() ([]byte, []int) { + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{3} +} + // Secondary index collection type. type IndexCollectionType int32 @@ -247,11 +300,11 @@ func (x IndexCollectionType) String() string { } func (IndexCollectionType) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[3].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[4].Descriptor() } func (IndexCollectionType) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[3] + return &file_aerospike_proxy_kv_proto_enumTypes[4] } func (x IndexCollectionType) Number() protoreflect.EnumNumber { @@ -260,7 +313,7 @@ func (x IndexCollectionType) Number() protoreflect.EnumNumber { // Deprecated: Use IndexCollectionType.Descriptor instead. func (IndexCollectionType) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{3} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{4} } type OperationType int32 @@ -341,11 +394,11 @@ func (x OperationType) String() string { } func (OperationType) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[4].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[5].Descriptor() } func (OperationType) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[4] + return &file_aerospike_proxy_kv_proto_enumTypes[5] } func (x OperationType) Number() protoreflect.EnumNumber { @@ -354,7 +407,7 @@ func (x OperationType) Number() protoreflect.EnumNumber { // Deprecated: Use OperationType.Descriptor instead. func (OperationType) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{4} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{5} } type RecordExistsAction int32 @@ -407,11 +460,11 @@ func (x RecordExistsAction) String() string { } func (RecordExistsAction) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[5].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[6].Descriptor() } func (RecordExistsAction) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[5] + return &file_aerospike_proxy_kv_proto_enumTypes[6] } func (x RecordExistsAction) Number() protoreflect.EnumNumber { @@ -420,7 +473,7 @@ func (x RecordExistsAction) Number() protoreflect.EnumNumber { // Deprecated: Use RecordExistsAction.Descriptor instead. func (RecordExistsAction) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{5} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{6} } type GenerationPolicy int32 @@ -460,11 +513,11 @@ func (x GenerationPolicy) String() string { } func (GenerationPolicy) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[6].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[7].Descriptor() } func (GenerationPolicy) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[6] + return &file_aerospike_proxy_kv_proto_enumTypes[7] } func (x GenerationPolicy) Number() protoreflect.EnumNumber { @@ -473,7 +526,7 @@ func (x GenerationPolicy) Number() protoreflect.EnumNumber { // Deprecated: Use GenerationPolicy.Descriptor instead. func (GenerationPolicy) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{6} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{7} } type CommitLevel int32 @@ -508,11 +561,11 @@ func (x CommitLevel) String() string { } func (CommitLevel) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[7].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[8].Descriptor() } func (CommitLevel) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[7] + return &file_aerospike_proxy_kv_proto_enumTypes[8] } func (x CommitLevel) Number() protoreflect.EnumNumber { @@ -521,7 +574,7 @@ func (x CommitLevel) Number() protoreflect.EnumNumber { // Deprecated: Use CommitLevel.Descriptor instead. func (CommitLevel) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{7} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{8} } type BackgroundTaskStatus int32 @@ -560,11 +613,11 @@ func (x BackgroundTaskStatus) String() string { } func (BackgroundTaskStatus) Descriptor() protoreflect.EnumDescriptor { - return file_aerospike_proxy_kv_proto_enumTypes[8].Descriptor() + return file_aerospike_proxy_kv_proto_enumTypes[9].Descriptor() } func (BackgroundTaskStatus) Type() protoreflect.EnumType { - return &file_aerospike_proxy_kv_proto_enumTypes[8] + return &file_aerospike_proxy_kv_proto_enumTypes[9] } func (x BackgroundTaskStatus) Number() protoreflect.EnumNumber { @@ -573,7 +626,7 @@ func (x BackgroundTaskStatus) Number() protoreflect.EnumNumber { // Deprecated: Use BackgroundTaskStatus.Descriptor instead. func (BackgroundTaskStatus) EnumDescriptor() ([]byte, []int) { - return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{8} + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{9} } // The about request message. @@ -812,7 +865,9 @@ type AerospikeRequestPayload struct { // Unique identifier of the request in the stream. Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // Client retry iteration. + // Client iteration number starting at 1. On first attempt iteration should + // be 1. On first retry iteration should be 2, on second retry iteration + // should be 3, and so on. Iteration uint32 `protobuf:"varint,2,opt,name=iteration,proto3" json:"iteration,omitempty"` // Aerospike wire format request payload. Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` @@ -830,6 +885,8 @@ type AerospikeRequestPayload struct { BackgroundExecuteRequest *BackgroundExecuteRequest `protobuf:"bytes,9,opt,name=backgroundExecuteRequest,proto3,oneof" json:"backgroundExecuteRequest,omitempty"` // Request for getting background task status. BackgroundTaskStatusRequest *BackgroundTaskStatusRequest `protobuf:"bytes,10,opt,name=backgroundTaskStatusRequest,proto3,oneof" json:"backgroundTaskStatusRequest,omitempty"` + // Info request + InfoRequest *InfoRequest `protobuf:"bytes,11,opt,name=infoRequest,proto3,oneof" json:"infoRequest,omitempty"` } func (x *AerospikeRequestPayload) Reset() { @@ -934,6 +991,13 @@ func (x *AerospikeRequestPayload) GetBackgroundTaskStatusRequest() *BackgroundTa return nil } +func (x *AerospikeRequestPayload) GetInfoRequest() *InfoRequest { + if x != nil { + return x.InfoRequest + } + return nil +} + // The request message containing the user's name. type AerospikeResponsePayload struct { state protoimpl.MessageState @@ -1500,6 +1564,7 @@ type QueryPolicy struct { // queries or the query filter is null (scan), this field is ignored. // Default: false FailOnClusterChange *bool `protobuf:"varint,11,opt,name=failOnClusterChange,proto3,oneof" json:"failOnClusterChange,omitempty"` + // Deprecated, use expectedDuration instead. // Is query expected to return less than 100 records per node. // If true, the server will optimize the query for a small record set. // This field is ignored for aggregation queries, background queries @@ -1511,6 +1576,10 @@ type QueryPolicy struct { // // Default: 1000 InfoTimeout *uint32 `protobuf:"varint,13,opt,name=infoTimeout,proto3,oneof" json:"infoTimeout,omitempty"` + // Expected query duration. The server treats the query in different ways depending on the expected duration. + // This field is ignored for aggregation queries, background queries and server versions less than 6.0. + // Default: QueryDuration.LONG + ExpectedDuration *QueryDuration `protobuf:"varint,14,opt,name=expectedDuration,proto3,enum=QueryDuration,oneof" json:"expectedDuration,omitempty"` } func (x *QueryPolicy) Reset() { @@ -1636,6 +1705,13 @@ func (x *QueryPolicy) GetInfoTimeout() uint32 { return 0 } +func (x *QueryPolicy) GetExpectedDuration() QueryDuration { + if x != nil && x.ExpectedDuration != nil { + return *x.ExpectedDuration + } + return QueryDuration_LONG +} + // Query statement filter type Filter struct { state protoimpl.MessageState @@ -2425,6 +2501,113 @@ func (x *AbortRequest) GetAbortId() uint32 { return 0 } +// Info policy for info request +type InfoPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Info command socket timeout in milliseconds. + // + // Default: 1000 + Timeout *uint32 `protobuf:"varint,1,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` +} + +func (x *InfoPolicy) Reset() { + *x = InfoPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_aerospike_proxy_kv_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoPolicy) ProtoMessage() {} + +func (x *InfoPolicy) ProtoReflect() protoreflect.Message { + mi := &file_aerospike_proxy_kv_proto_msgTypes[19] + 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 InfoPolicy.ProtoReflect.Descriptor instead. +func (*InfoPolicy) Descriptor() ([]byte, []int) { + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{19} +} + +func (x *InfoPolicy) GetTimeout() uint32 { + if x != nil && x.Timeout != nil { + return *x.Timeout + } + return 0 +} + +// Info request +type InfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InfoPolicy *InfoPolicy `protobuf:"bytes,1,opt,name=infoPolicy,proto3,oneof" json:"infoPolicy,omitempty"` + Commands []string `protobuf:"bytes,2,rep,name=commands,proto3" json:"commands,omitempty"` +} + +func (x *InfoRequest) Reset() { + *x = InfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_aerospike_proxy_kv_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoRequest) ProtoMessage() {} + +func (x *InfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_aerospike_proxy_kv_proto_msgTypes[20] + 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 InfoRequest.ProtoReflect.Descriptor instead. +func (*InfoRequest) Descriptor() ([]byte, []int) { + return file_aerospike_proxy_kv_proto_rawDescGZIP(), []int{20} +} + +func (x *InfoRequest) GetInfoPolicy() *InfoPolicy { + if x != nil { + return x.InfoPolicy + } + return nil +} + +func (x *InfoRequest) GetCommands() []string { + if x != nil { + return x.Commands + } + return nil +} + var File_aerospike_proxy_kv_proto protoreflect.FileDescriptor var file_aerospike_proxy_kv_proto_rawDesc = []byte{ @@ -2451,7 +2634,7 @@ var file_aerospike_proxy_kv_proto_rawDesc = []byte{ 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, - 0x22, 0xbc, 0x05, 0x0a, 0x17, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x22, 0x81, 0x06, 0x0a, 0x17, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, @@ -2486,292 +2669,312 @@ var file_aerospike_proxy_kv_proto_rawDesc = []byte{ 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x06, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, - 0x1e, 0x0a, 0x1c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, - 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0xf9, 0x01, 0x0a, 0x18, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x44, 0x6f, 0x75, 0x62, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x44, 0x6f, 0x75, 0x62, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x4e, - 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4e, 0x65, - 0x78, 0x74, 0x12, 0x4e, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, - 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xdd, 0x04, 0x0a, 0x0a, - 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x08, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2b, - 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x52, - 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, 0x0a, 0x72, - 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, 0x72, 0x65, - 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x48, - 0x01, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0d, 0x48, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x43, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d, 0x61, - 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x42, 0x12, 0x0a, - 0x10, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8d, 0x01, 0x0a, 0x0f, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x02, 0x69, - 0x64, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x62, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x01, 0x52, 0x04, 0x62, 0x56, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x02, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, - 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, - 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x56, 0x61, 0x6c, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xca, 0x01, 0x0a, 0x0f, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x19, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, - 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x48, 0x01, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, + 0x01, 0x12, 0x33, 0x0a, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x07, 0x52, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0xf9, 0x01, 0x0a, 0x18, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x44, + 0x6f, 0x75, 0x62, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x44, 0x6f, + 0x75, 0x62, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x68, 0x61, 0x73, 0x4e, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x68, 0x61, 0x73, 0x4e, 0x65, 0x78, 0x74, 0x12, 0x4e, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x14, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0xdd, 0x04, 0x0a, 0x0a, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x22, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x08, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, + 0x50, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, + 0x64, 0x65, 0x41, 0x50, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, + 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, + 0x43, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x1a, 0x0a, + 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, + 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x27, + 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, 0x0a, 0x6d, + 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x10, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x03, 0x52, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, + 0x0f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x12, + 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, + 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x43, + 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x0e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, + 0x0d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x42, 0x13, 0x0a, + 0x11, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, 0x61, 0x78, 0x43, 0x6f, + 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x11, 0x0a, + 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x8d, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x62, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x04, 0x62, 0x56, 0x61, 0x6c, 0x88, + 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x48, 0x02, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x14, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x72, 0x65, 0x74, 0x72, 0x79, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x62, 0x56, 0x61, 0x6c, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x22, 0xca, 0x01, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, - 0x74, 0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x42, 0x09, 0x0a, - 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x88, 0x02, 0x0a, 0x0b, 0x53, 0x63, 0x61, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, - 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x63, 0x61, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x73, 0x65, 0x74, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x88, 0x02, + 0x0a, 0x0b, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, + 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, + 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, + 0x07, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, + 0x52, 0x07, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, + 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x48, 0x02, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x63, + 0x61, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x9f, 0x06, 0x0a, 0x0b, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2b, 0x0a, 0x0a, + 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x52, 0x0a, 0x72, + 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, + 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, + 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, + 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, + 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x02, 0x52, 0x0c, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x33, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x03, 0x52, 0x12, 0x6d, + 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x04, 0x52, + 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, 0x52, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, + 0x12, 0x35, 0x0a, 0x13, 0x66, 0x61, 0x69, 0x6c, 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, + 0x13, 0x66, 0x61, 0x69, 0x6c, 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x0a, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, + 0x69, 0x6e, 0x66, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0d, 0x48, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x09, 0x52, + 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x42, 0x16, + 0x0a, 0x14, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x01, 0x0a, 0x06, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x63, 0x6f, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, + 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x88, 0x01, + 0x01, 0x12, 0x15, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x02, + 0x52, 0x03, 0x65, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x65, 0x6e, 0x64, 0x22, 0x7f, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x62, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x62, 0x69, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x42, + 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8a, 0x04, 0x0a, 0x09, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x02, - 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, - 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x22, 0xc9, 0x05, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x07, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, - 0x6f, 0x64, 0x65, 0x41, 0x50, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, - 0x64, 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, - 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, - 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, - 0x43, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0a, - 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, - 0x48, 0x01, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, - 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x02, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x12, 0x6d, 0x61, - 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x03, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x2d, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2b, - 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x13, 0x66, - 0x61, 0x69, 0x6c, 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x06, 0x52, 0x13, 0x66, 0x61, 0x69, 0x6c, - 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x08, 0x52, 0x0b, - 0x69, 0x6e, 0x66, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, - 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, - 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x66, 0x61, 0x69, - 0x6c, 0x4f, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, - 0x0e, 0x0a, 0x0c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, - 0xdb, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, - 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x14, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, - 0x0a, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x88, 0x01, - 0x01, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x62, - 0x65, 0x67, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x05, 0x62, 0x65, - 0x67, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x48, 0x02, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x43, 0x74, 0x78, 0x42, 0x08, 0x0a, 0x06, 0x5f, - 0x62, 0x65, 0x67, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x65, 0x6e, 0x64, 0x22, 0x7f, 0x0a, - 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x07, 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x07, 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x01, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x62, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8a, - 0x04, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x73, - 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, - 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x62, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x48, 0x02, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, - 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x72, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, - 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x04, 0x48, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, - 0x48, 0x05, 0x52, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, - 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d, 0x61, 0x78, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0b, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, - 0x00, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, - 0x01, 0x12, 0x28, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x0f, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, - 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x12, 0x0a, 0x10, - 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x22, 0xcc, 0x06, 0x0a, 0x17, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x08, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, - 0x50, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, - 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, - 0x72, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x48, 0x01, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, - 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, - 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x04, 0x52, 0x10, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, - 0x01, 0x12, 0x33, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x48, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x06, 0x52, 0x0a, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x48, - 0x07, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, - 0x12, 0x29, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x4f, 0x70, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x4f, 0x70, 0x73, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x64, - 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x09, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x78, 0x64, 0x72, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x0a, 0x52, 0x03, 0x78, 0x64, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, - 0x6c, 0x6c, 0x4f, 0x70, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x62, 0x6c, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x78, 0x64, 0x72, 0x22, - 0x95, 0x01, 0x0a, 0x18, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0b, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, - 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x4d, 0x0a, 0x1b, 0x42, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x69, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x69, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x22, 0x28, 0x0a, 0x0c, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x02, 0x52, 0x06, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x1b, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, + 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, + 0x48, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x2f, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x10, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x88, + 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x49, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x65, 0x72, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x09, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x48, 0x01, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xcc, 0x06, 0x0a, 0x17, + 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x08, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x72, + 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0b, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x52, 0x0a, 0x72, 0x65, + 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x12, 0x2b, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x64, + 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x52, + 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, + 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0c, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x1d, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x02, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x48, + 0x0a, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x03, 0x52, 0x12, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x42, 0x0a, 0x10, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x04, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x0b, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x48, + 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x88, 0x01, + 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x06, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x07, 0x52, 0x0a, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x4f, 0x70, 0x73, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, 0x6c, 0x6c, + 0x4f, 0x70, 0x73, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x62, 0x6c, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x09, 0x52, + 0x0d, 0x64, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x88, 0x01, + 0x01, 0x12, 0x15, 0x0a, 0x03, 0x78, 0x64, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0a, + 0x52, 0x03, 0x78, 0x64, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x65, 0x6e, + 0x64, 0x4b, 0x65, 0x79, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, + 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x4f, 0x70, 0x73, + 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x78, 0x64, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x42, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x42, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x22, 0x4d, 0x0a, 0x1b, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x53, + 0x63, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x63, 0x61, + 0x6e, 0x22, 0x28, 0x0a, 0x0c, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0a, 0x49, + 0x6e, 0x66, 0x6f, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x22, 0x6a, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2a, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x2a, 0x52, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x43, 0x12, 0x0b, @@ -2784,171 +2987,179 @@ var file_aerospike_proxy_kv_proto_rawDesc = []byte{ 0x06, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x5f, 0x52, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0a, 0x0a, - 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x04, 0x2a, 0x48, 0x0a, 0x13, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x41, 0x50, 0x4b, 0x45, - 0x59, 0x53, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x41, 0x50, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x53, 0x10, 0x03, 0x2a, 0x84, 0x02, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, - 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, - 0x44, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x44, 0x54, - 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x41, 0x50, - 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x50, 0x5f, 0x4d, - 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x07, - 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x08, 0x12, 0x0e, - 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x09, 0x12, 0x0a, - 0x0a, 0x06, 0x41, 0x50, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, - 0x45, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x0b, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x4f, 0x55, 0x43, 0x48, - 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x0d, - 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x49, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x0e, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, - 0x48, 0x4c, 0x4c, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x4c, - 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x11, 0x2a, 0x61, 0x0a, 0x12, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, - 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x2a, 0x45, 0x0a, - 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x45, - 0x58, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, - 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x47, 0x45, 0x4e, 0x5f, - 0x47, 0x54, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x41, 0x4c, - 0x4c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x4d, 0x41, - 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x44, 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0d, - 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, - 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0c, - 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x32, 0x2f, 0x0a, 0x05, - 0x41, 0x62, 0x6f, 0x75, 0x74, 0x12, 0x26, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x0d, 0x2e, 0x41, - 0x62, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x41, 0x62, - 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9c, 0x0a, - 0x0a, 0x03, 0x4b, 0x56, 0x53, 0x12, 0x3d, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x18, 0x2e, - 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, - 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, - 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x2e, - 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, - 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, - 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, - 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, - 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0f, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, - 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, - 0x28, 0x01, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x18, 0x2e, - 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, - 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x04, 0x2a, 0x37, 0x0a, 0x0d, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, + 0x4e, 0x47, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x12, + 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x5f, 0x41, 0x50, + 0x10, 0x02, 0x2a, 0x48, 0x0a, 0x13, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x41, 0x50, 0x4b, 0x45, 0x59, 0x53, 0x10, 0x02, 0x12, 0x0d, 0x0a, + 0x09, 0x4d, 0x41, 0x50, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x10, 0x03, 0x2a, 0x84, 0x02, 0x0a, + 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, + 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x41, 0x44, + 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x52, 0x49, + 0x54, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x44, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, + 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x44, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, + 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x05, + 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x50, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x06, + 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, + 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x5f, 0x4d, + 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x50, 0x50, 0x45, 0x4e, + 0x44, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x0b, + 0x12, 0x09, 0x0a, 0x05, 0x54, 0x4f, 0x55, 0x43, 0x48, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x42, + 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x49, 0x54, + 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x0e, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x4c, 0x4c, 0x5f, 0x52, 0x45, 0x41, + 0x44, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x4c, 0x4c, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, + 0x59, 0x10, 0x11, 0x2a, 0x61, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, + 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, + 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x5f, 0x4f, + 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, + 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x2a, 0x45, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x47, + 0x45, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x58, + 0x50, 0x45, 0x43, 0x54, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x47, 0x54, 0x10, 0x02, 0x2a, 0x30, 0x0a, + 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x0a, + 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, + 0x44, 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, + 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0x02, 0x32, 0x2f, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x12, 0x26, + 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x0d, 0x2e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9c, 0x0a, 0x0a, 0x03, 0x4b, 0x56, 0x53, 0x12, 0x3d, + 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, - 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, - 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, - 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x3e, 0x0a, 0x05, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, - 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, - 0x12, 0x4b, 0x0a, 0x0e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, - 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, - 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x40, 0x0a, - 0x07, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, - 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, - 0x4d, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4a, 0x0a, + 0x0d, 0x52, 0x65, 0x61, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, + 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x47, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4f, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x40, - 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, - 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, - 0x12, 0x4d, 0x0a, 0x10, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, - 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x47, 0x0a, 0x0c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, + 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, + 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, + 0x4c, 0x0a, 0x0f, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, + 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, + 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3e, 0x0a, + 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4b, 0x0a, + 0x0e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, - 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, + 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, + 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0f, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, + 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x05, 0x54, 0x6f, 0x75, + 0x63, 0x68, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, + 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0e, 0x54, 0x6f, 0x75, + 0x63, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, + 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x07, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x93, 0x01, 0x0a, - 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x18, 0x2e, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, + 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, + 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x10, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0d, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, - 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, - 0x30, 0x01, 0x32, 0xea, 0x03, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x05, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, - 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4b, - 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, + 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x47, 0x0a, 0x0c, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, + 0x01, 0x12, 0x52, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, + 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x93, 0x01, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x3f, + 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, + 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x4a, 0x0a, 0x0d, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x11, 0x42, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0xea, 0x03, 0x0a, 0x05, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x18, + 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, + 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, + 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, + 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x57, 0x0a, 0x1a, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x1a, 0x42, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, - 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x4f, 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, - 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x1d, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, - 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4f, 0x0a, 0x14, 0x42, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, + 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x1d, + 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, + 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, + 0x69, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x45, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x3d, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, + 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x1a, 0x19, 0x2e, 0x41, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x42, 0x57, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x65, 0x72, 0x6f, 0x73, 0x70, 0x69, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x65, 0x72, 0x6f, 0x73, 0x70, @@ -2969,37 +3180,40 @@ func file_aerospike_proxy_kv_proto_rawDescGZIP() []byte { return file_aerospike_proxy_kv_proto_rawDescData } -var file_aerospike_proxy_kv_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_aerospike_proxy_kv_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_aerospike_proxy_kv_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_aerospike_proxy_kv_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_aerospike_proxy_kv_proto_goTypes = []interface{}{ (ReadModeAP)(0), // 0: ReadModeAP (ReadModeSC)(0), // 1: ReadModeSC (Replica)(0), // 2: Replica - (IndexCollectionType)(0), // 3: IndexCollectionType - (OperationType)(0), // 4: OperationType - (RecordExistsAction)(0), // 5: RecordExistsAction - (GenerationPolicy)(0), // 6: GenerationPolicy - (CommitLevel)(0), // 7: CommitLevel - (BackgroundTaskStatus)(0), // 8: BackgroundTaskStatus - (*AboutRequest)(nil), // 9: AboutRequest - (*AboutResponse)(nil), // 10: AboutResponse - (*ReadPolicy)(nil), // 11: ReadPolicy - (*WritePolicy)(nil), // 12: WritePolicy - (*AerospikeRequestPayload)(nil), // 13: AerospikeRequestPayload - (*AerospikeResponsePayload)(nil), // 14: AerospikeResponsePayload - (*ScanPolicy)(nil), // 15: ScanPolicy - (*PartitionStatus)(nil), // 16: PartitionStatus - (*PartitionFilter)(nil), // 17: PartitionFilter - (*ScanRequest)(nil), // 18: ScanRequest - (*QueryPolicy)(nil), // 19: QueryPolicy - (*Filter)(nil), // 20: Filter - (*Operation)(nil), // 21: Operation - (*Statement)(nil), // 22: Statement - (*QueryRequest)(nil), // 23: QueryRequest - (*BackgroundExecutePolicy)(nil), // 24: BackgroundExecutePolicy - (*BackgroundExecuteRequest)(nil), // 25: BackgroundExecuteRequest - (*BackgroundTaskStatusRequest)(nil), // 26: BackgroundTaskStatusRequest - (*AbortRequest)(nil), // 27: AbortRequest + (QueryDuration)(0), // 3: QueryDuration + (IndexCollectionType)(0), // 4: IndexCollectionType + (OperationType)(0), // 5: OperationType + (RecordExistsAction)(0), // 6: RecordExistsAction + (GenerationPolicy)(0), // 7: GenerationPolicy + (CommitLevel)(0), // 8: CommitLevel + (BackgroundTaskStatus)(0), // 9: BackgroundTaskStatus + (*AboutRequest)(nil), // 10: AboutRequest + (*AboutResponse)(nil), // 11: AboutResponse + (*ReadPolicy)(nil), // 12: ReadPolicy + (*WritePolicy)(nil), // 13: WritePolicy + (*AerospikeRequestPayload)(nil), // 14: AerospikeRequestPayload + (*AerospikeResponsePayload)(nil), // 15: AerospikeResponsePayload + (*ScanPolicy)(nil), // 16: ScanPolicy + (*PartitionStatus)(nil), // 17: PartitionStatus + (*PartitionFilter)(nil), // 18: PartitionFilter + (*ScanRequest)(nil), // 19: ScanRequest + (*QueryPolicy)(nil), // 20: QueryPolicy + (*Filter)(nil), // 21: Filter + (*Operation)(nil), // 22: Operation + (*Statement)(nil), // 23: Statement + (*QueryRequest)(nil), // 24: QueryRequest + (*BackgroundExecutePolicy)(nil), // 25: BackgroundExecutePolicy + (*BackgroundExecuteRequest)(nil), // 26: BackgroundExecuteRequest + (*BackgroundTaskStatusRequest)(nil), // 27: BackgroundTaskStatusRequest + (*AbortRequest)(nil), // 28: AbortRequest + (*InfoPolicy)(nil), // 29: InfoPolicy + (*InfoRequest)(nil), // 30: InfoRequest } var file_aerospike_proxy_kv_proto_depIdxs = []int32{ 2, // 0: ReadPolicy.replica:type_name -> Replica @@ -3008,97 +3222,102 @@ var file_aerospike_proxy_kv_proto_depIdxs = []int32{ 2, // 3: WritePolicy.replica:type_name -> Replica 0, // 4: WritePolicy.readModeAP:type_name -> ReadModeAP 1, // 5: WritePolicy.readModeSC:type_name -> ReadModeSC - 11, // 6: AerospikeRequestPayload.readPolicy:type_name -> ReadPolicy - 12, // 7: AerospikeRequestPayload.writePolicy:type_name -> WritePolicy - 18, // 8: AerospikeRequestPayload.scanRequest:type_name -> ScanRequest - 23, // 9: AerospikeRequestPayload.queryRequest:type_name -> QueryRequest - 27, // 10: AerospikeRequestPayload.abortRequest:type_name -> AbortRequest - 25, // 11: AerospikeRequestPayload.backgroundExecuteRequest:type_name -> BackgroundExecuteRequest - 26, // 12: AerospikeRequestPayload.backgroundTaskStatusRequest:type_name -> BackgroundTaskStatusRequest - 8, // 13: AerospikeResponsePayload.backgroundTaskStatus:type_name -> BackgroundTaskStatus - 2, // 14: ScanPolicy.replica:type_name -> Replica - 0, // 15: ScanPolicy.readModeAP:type_name -> ReadModeAP - 1, // 16: ScanPolicy.readModeSC:type_name -> ReadModeSC - 16, // 17: PartitionFilter.partitionStatuses:type_name -> PartitionStatus - 15, // 18: ScanRequest.scanPolicy:type_name -> ScanPolicy - 17, // 19: ScanRequest.partitionFilter:type_name -> PartitionFilter - 2, // 20: QueryPolicy.replica:type_name -> Replica - 0, // 21: QueryPolicy.readModeAP:type_name -> ReadModeAP - 1, // 22: QueryPolicy.readModeSC:type_name -> ReadModeSC - 3, // 23: Filter.colType:type_name -> IndexCollectionType - 4, // 24: Operation.type:type_name -> OperationType - 20, // 25: Statement.filter:type_name -> Filter - 21, // 26: Statement.operations:type_name -> Operation - 19, // 27: QueryRequest.queryPolicy:type_name -> QueryPolicy - 22, // 28: QueryRequest.statement:type_name -> Statement - 17, // 29: QueryRequest.partitionFilter:type_name -> PartitionFilter - 2, // 30: BackgroundExecutePolicy.replica:type_name -> Replica - 0, // 31: BackgroundExecutePolicy.readModeAP:type_name -> ReadModeAP - 1, // 32: BackgroundExecutePolicy.readModeSC:type_name -> ReadModeSC - 5, // 33: BackgroundExecutePolicy.recordExistsAction:type_name -> RecordExistsAction - 6, // 34: BackgroundExecutePolicy.generationPolicy:type_name -> GenerationPolicy - 7, // 35: BackgroundExecutePolicy.commitLevel:type_name -> CommitLevel - 24, // 36: BackgroundExecuteRequest.writePolicy:type_name -> BackgroundExecutePolicy - 22, // 37: BackgroundExecuteRequest.statement:type_name -> Statement - 9, // 38: About.Get:input_type -> AboutRequest - 13, // 39: KVS.Read:input_type -> AerospikeRequestPayload - 13, // 40: KVS.ReadStreaming:input_type -> AerospikeRequestPayload - 13, // 41: KVS.GetHeader:input_type -> AerospikeRequestPayload - 13, // 42: KVS.GetHeaderStreaming:input_type -> AerospikeRequestPayload - 13, // 43: KVS.Exists:input_type -> AerospikeRequestPayload - 13, // 44: KVS.ExistsStreaming:input_type -> AerospikeRequestPayload - 13, // 45: KVS.Write:input_type -> AerospikeRequestPayload - 13, // 46: KVS.WriteStreaming:input_type -> AerospikeRequestPayload - 13, // 47: KVS.Delete:input_type -> AerospikeRequestPayload - 13, // 48: KVS.DeleteStreaming:input_type -> AerospikeRequestPayload - 13, // 49: KVS.Touch:input_type -> AerospikeRequestPayload - 13, // 50: KVS.TouchStreaming:input_type -> AerospikeRequestPayload - 13, // 51: KVS.Operate:input_type -> AerospikeRequestPayload - 13, // 52: KVS.OperateStreaming:input_type -> AerospikeRequestPayload - 13, // 53: KVS.Execute:input_type -> AerospikeRequestPayload - 13, // 54: KVS.ExecuteStreaming:input_type -> AerospikeRequestPayload - 13, // 55: KVS.BatchOperate:input_type -> AerospikeRequestPayload - 13, // 56: KVS.BatchOperateStreaming:input_type -> AerospikeRequestPayload - 13, // 57: Scan.Scan:input_type -> AerospikeRequestPayload - 13, // 58: Scan.ScanStreaming:input_type -> AerospikeRequestPayload - 13, // 59: Query.Query:input_type -> AerospikeRequestPayload - 13, // 60: Query.QueryStreaming:input_type -> AerospikeRequestPayload - 13, // 61: Query.BackgroundExecute:input_type -> AerospikeRequestPayload - 13, // 62: Query.BackgroundExecuteStreaming:input_type -> AerospikeRequestPayload - 13, // 63: Query.BackgroundTaskStatus:input_type -> AerospikeRequestPayload - 13, // 64: Query.BackgroundTaskStatusStreaming:input_type -> AerospikeRequestPayload - 10, // 65: About.Get:output_type -> AboutResponse - 14, // 66: KVS.Read:output_type -> AerospikeResponsePayload - 14, // 67: KVS.ReadStreaming:output_type -> AerospikeResponsePayload - 14, // 68: KVS.GetHeader:output_type -> AerospikeResponsePayload - 14, // 69: KVS.GetHeaderStreaming:output_type -> AerospikeResponsePayload - 14, // 70: KVS.Exists:output_type -> AerospikeResponsePayload - 14, // 71: KVS.ExistsStreaming:output_type -> AerospikeResponsePayload - 14, // 72: KVS.Write:output_type -> AerospikeResponsePayload - 14, // 73: KVS.WriteStreaming:output_type -> AerospikeResponsePayload - 14, // 74: KVS.Delete:output_type -> AerospikeResponsePayload - 14, // 75: KVS.DeleteStreaming:output_type -> AerospikeResponsePayload - 14, // 76: KVS.Touch:output_type -> AerospikeResponsePayload - 14, // 77: KVS.TouchStreaming:output_type -> AerospikeResponsePayload - 14, // 78: KVS.Operate:output_type -> AerospikeResponsePayload - 14, // 79: KVS.OperateStreaming:output_type -> AerospikeResponsePayload - 14, // 80: KVS.Execute:output_type -> AerospikeResponsePayload - 14, // 81: KVS.ExecuteStreaming:output_type -> AerospikeResponsePayload - 14, // 82: KVS.BatchOperate:output_type -> AerospikeResponsePayload - 14, // 83: KVS.BatchOperateStreaming:output_type -> AerospikeResponsePayload - 14, // 84: Scan.Scan:output_type -> AerospikeResponsePayload - 14, // 85: Scan.ScanStreaming:output_type -> AerospikeResponsePayload - 14, // 86: Query.Query:output_type -> AerospikeResponsePayload - 14, // 87: Query.QueryStreaming:output_type -> AerospikeResponsePayload - 14, // 88: Query.BackgroundExecute:output_type -> AerospikeResponsePayload - 14, // 89: Query.BackgroundExecuteStreaming:output_type -> AerospikeResponsePayload - 14, // 90: Query.BackgroundTaskStatus:output_type -> AerospikeResponsePayload - 14, // 91: Query.BackgroundTaskStatusStreaming:output_type -> AerospikeResponsePayload - 65, // [65:92] is the sub-list for method output_type - 38, // [38:65] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name + 12, // 6: AerospikeRequestPayload.readPolicy:type_name -> ReadPolicy + 13, // 7: AerospikeRequestPayload.writePolicy:type_name -> WritePolicy + 19, // 8: AerospikeRequestPayload.scanRequest:type_name -> ScanRequest + 24, // 9: AerospikeRequestPayload.queryRequest:type_name -> QueryRequest + 28, // 10: AerospikeRequestPayload.abortRequest:type_name -> AbortRequest + 26, // 11: AerospikeRequestPayload.backgroundExecuteRequest:type_name -> BackgroundExecuteRequest + 27, // 12: AerospikeRequestPayload.backgroundTaskStatusRequest:type_name -> BackgroundTaskStatusRequest + 30, // 13: AerospikeRequestPayload.infoRequest:type_name -> InfoRequest + 9, // 14: AerospikeResponsePayload.backgroundTaskStatus:type_name -> BackgroundTaskStatus + 2, // 15: ScanPolicy.replica:type_name -> Replica + 0, // 16: ScanPolicy.readModeAP:type_name -> ReadModeAP + 1, // 17: ScanPolicy.readModeSC:type_name -> ReadModeSC + 17, // 18: PartitionFilter.partitionStatuses:type_name -> PartitionStatus + 16, // 19: ScanRequest.scanPolicy:type_name -> ScanPolicy + 18, // 20: ScanRequest.partitionFilter:type_name -> PartitionFilter + 2, // 21: QueryPolicy.replica:type_name -> Replica + 0, // 22: QueryPolicy.readModeAP:type_name -> ReadModeAP + 1, // 23: QueryPolicy.readModeSC:type_name -> ReadModeSC + 3, // 24: QueryPolicy.expectedDuration:type_name -> QueryDuration + 4, // 25: Filter.colType:type_name -> IndexCollectionType + 5, // 26: Operation.type:type_name -> OperationType + 21, // 27: Statement.filter:type_name -> Filter + 22, // 28: Statement.operations:type_name -> Operation + 20, // 29: QueryRequest.queryPolicy:type_name -> QueryPolicy + 23, // 30: QueryRequest.statement:type_name -> Statement + 18, // 31: QueryRequest.partitionFilter:type_name -> PartitionFilter + 2, // 32: BackgroundExecutePolicy.replica:type_name -> Replica + 0, // 33: BackgroundExecutePolicy.readModeAP:type_name -> ReadModeAP + 1, // 34: BackgroundExecutePolicy.readModeSC:type_name -> ReadModeSC + 6, // 35: BackgroundExecutePolicy.recordExistsAction:type_name -> RecordExistsAction + 7, // 36: BackgroundExecutePolicy.generationPolicy:type_name -> GenerationPolicy + 8, // 37: BackgroundExecutePolicy.commitLevel:type_name -> CommitLevel + 25, // 38: BackgroundExecuteRequest.writePolicy:type_name -> BackgroundExecutePolicy + 23, // 39: BackgroundExecuteRequest.statement:type_name -> Statement + 29, // 40: InfoRequest.infoPolicy:type_name -> InfoPolicy + 10, // 41: About.Get:input_type -> AboutRequest + 14, // 42: KVS.Read:input_type -> AerospikeRequestPayload + 14, // 43: KVS.ReadStreaming:input_type -> AerospikeRequestPayload + 14, // 44: KVS.GetHeader:input_type -> AerospikeRequestPayload + 14, // 45: KVS.GetHeaderStreaming:input_type -> AerospikeRequestPayload + 14, // 46: KVS.Exists:input_type -> AerospikeRequestPayload + 14, // 47: KVS.ExistsStreaming:input_type -> AerospikeRequestPayload + 14, // 48: KVS.Write:input_type -> AerospikeRequestPayload + 14, // 49: KVS.WriteStreaming:input_type -> AerospikeRequestPayload + 14, // 50: KVS.Delete:input_type -> AerospikeRequestPayload + 14, // 51: KVS.DeleteStreaming:input_type -> AerospikeRequestPayload + 14, // 52: KVS.Touch:input_type -> AerospikeRequestPayload + 14, // 53: KVS.TouchStreaming:input_type -> AerospikeRequestPayload + 14, // 54: KVS.Operate:input_type -> AerospikeRequestPayload + 14, // 55: KVS.OperateStreaming:input_type -> AerospikeRequestPayload + 14, // 56: KVS.Execute:input_type -> AerospikeRequestPayload + 14, // 57: KVS.ExecuteStreaming:input_type -> AerospikeRequestPayload + 14, // 58: KVS.BatchOperate:input_type -> AerospikeRequestPayload + 14, // 59: KVS.BatchOperateStreaming:input_type -> AerospikeRequestPayload + 14, // 60: Scan.Scan:input_type -> AerospikeRequestPayload + 14, // 61: Scan.ScanStreaming:input_type -> AerospikeRequestPayload + 14, // 62: Query.Query:input_type -> AerospikeRequestPayload + 14, // 63: Query.QueryStreaming:input_type -> AerospikeRequestPayload + 14, // 64: Query.BackgroundExecute:input_type -> AerospikeRequestPayload + 14, // 65: Query.BackgroundExecuteStreaming:input_type -> AerospikeRequestPayload + 14, // 66: Query.BackgroundTaskStatus:input_type -> AerospikeRequestPayload + 14, // 67: Query.BackgroundTaskStatusStreaming:input_type -> AerospikeRequestPayload + 14, // 68: Info.Info:input_type -> AerospikeRequestPayload + 11, // 69: About.Get:output_type -> AboutResponse + 15, // 70: KVS.Read:output_type -> AerospikeResponsePayload + 15, // 71: KVS.ReadStreaming:output_type -> AerospikeResponsePayload + 15, // 72: KVS.GetHeader:output_type -> AerospikeResponsePayload + 15, // 73: KVS.GetHeaderStreaming:output_type -> AerospikeResponsePayload + 15, // 74: KVS.Exists:output_type -> AerospikeResponsePayload + 15, // 75: KVS.ExistsStreaming:output_type -> AerospikeResponsePayload + 15, // 76: KVS.Write:output_type -> AerospikeResponsePayload + 15, // 77: KVS.WriteStreaming:output_type -> AerospikeResponsePayload + 15, // 78: KVS.Delete:output_type -> AerospikeResponsePayload + 15, // 79: KVS.DeleteStreaming:output_type -> AerospikeResponsePayload + 15, // 80: KVS.Touch:output_type -> AerospikeResponsePayload + 15, // 81: KVS.TouchStreaming:output_type -> AerospikeResponsePayload + 15, // 82: KVS.Operate:output_type -> AerospikeResponsePayload + 15, // 83: KVS.OperateStreaming:output_type -> AerospikeResponsePayload + 15, // 84: KVS.Execute:output_type -> AerospikeResponsePayload + 15, // 85: KVS.ExecuteStreaming:output_type -> AerospikeResponsePayload + 15, // 86: KVS.BatchOperate:output_type -> AerospikeResponsePayload + 15, // 87: KVS.BatchOperateStreaming:output_type -> AerospikeResponsePayload + 15, // 88: Scan.Scan:output_type -> AerospikeResponsePayload + 15, // 89: Scan.ScanStreaming:output_type -> AerospikeResponsePayload + 15, // 90: Query.Query:output_type -> AerospikeResponsePayload + 15, // 91: Query.QueryStreaming:output_type -> AerospikeResponsePayload + 15, // 92: Query.BackgroundExecute:output_type -> AerospikeResponsePayload + 15, // 93: Query.BackgroundExecuteStreaming:output_type -> AerospikeResponsePayload + 15, // 94: Query.BackgroundTaskStatus:output_type -> AerospikeResponsePayload + 15, // 95: Query.BackgroundTaskStatusStreaming:output_type -> AerospikeResponsePayload + 15, // 96: Info.Info:output_type -> AerospikeResponsePayload + 69, // [69:97] is the sub-list for method output_type + 41, // [41:69] is the sub-list for method input_type + 41, // [41:41] is the sub-list for extension type_name + 41, // [41:41] is the sub-list for extension extendee + 0, // [0:41] is the sub-list for field type_name } func init() { file_aerospike_proxy_kv_proto_init() } @@ -3335,6 +3554,30 @@ func file_aerospike_proxy_kv_proto_init() { return nil } } + file_aerospike_proxy_kv_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_aerospike_proxy_kv_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_aerospike_proxy_kv_proto_msgTypes[4].OneofWrappers = []interface{}{} file_aerospike_proxy_kv_proto_msgTypes[5].OneofWrappers = []interface{}{} @@ -3349,15 +3592,17 @@ func file_aerospike_proxy_kv_proto_init() { file_aerospike_proxy_kv_proto_msgTypes[14].OneofWrappers = []interface{}{} file_aerospike_proxy_kv_proto_msgTypes[15].OneofWrappers = []interface{}{} file_aerospike_proxy_kv_proto_msgTypes[16].OneofWrappers = []interface{}{} + file_aerospike_proxy_kv_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_aerospike_proxy_kv_proto_msgTypes[20].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_aerospike_proxy_kv_proto_rawDesc, - NumEnums: 9, - NumMessages: 19, + NumEnums: 10, + NumMessages: 21, NumExtensions: 0, - NumServices: 4, + NumServices: 5, }, GoTypes: file_aerospike_proxy_kv_proto_goTypes, DependencyIndexes: file_aerospike_proxy_kv_proto_depIdxs, diff --git a/proto/kvs/aerospike_proxy_kv.proto b/proto/kvs/aerospike_proxy_kv.proto index a80dce4d..be32978c 100644 --- a/proto/kvs/aerospike_proxy_kv.proto +++ b/proto/kvs/aerospike_proxy_kv.proto @@ -3,6 +3,7 @@ syntax = "proto3"; option go_package = "github.com/aerospike/aerospike-client-go/v7/proto/kvs;kvs"; option java_package = "com.aerospike.proxy.client"; + // The about request message. message AboutRequest { // Empty for now. @@ -75,6 +76,18 @@ enum Replica { RANDOM = 4; } +enum QueryDuration { + // The query is expected to return more than 100 records per node. The server optimizes for a large record set. + LONG = 0; + + // The query is expected to return less than 100 records per node. The server optimizes for a small record set. + SHORT = 1; + + // Treat query as a LONG query, but relax read consistency for AP namespaces. + // This value is treated exactly like LONG for server versions < 7.1. + LONG_RELAX_AP = 2; +} + // Read policy attributes used in read database commands that are not part of // the wire protocol. message ReadPolicy { @@ -111,7 +124,9 @@ message AerospikeRequestPayload { // Unique identifier of the request in the stream. uint32 id = 1; - // Client retry iteration. + // Client iteration number starting at 1. On first attempt iteration should + // be 1. On first retry iteration should be 2, on second retry iteration + // should be 3, and so on. uint32 iteration = 2; // Aerospike wire format request payload. @@ -137,6 +152,9 @@ message AerospikeRequestPayload { // Request for getting background task status. optional BackgroundTaskStatusRequest backgroundTaskStatusRequest = 10; + + // Info request + optional InfoRequest infoRequest = 11; } // The request message containing the user's name. @@ -431,6 +449,7 @@ message QueryPolicy { // Default: false optional bool failOnClusterChange = 11; + // Deprecated, use expectedDuration instead. // Is query expected to return less than 100 records per node. // If true, the server will optimize the query for a small record set. // This field is ignored for aggregation queries, background queries @@ -440,9 +459,13 @@ message QueryPolicy { // Timeout in milliseconds for "cluster-stable" info command that is run when // failOnClusterChange is true and server version is less than 6.0. - // // Default: 1000 optional uint32 infoTimeout = 13; + + // Expected query duration. The server treats the query in different ways depending on the expected duration. + // This field is ignored for aggregation queries, background queries and server versions less than 6.0. + // Default: QueryDuration.LONG + optional QueryDuration expectedDuration = 14; } @@ -785,3 +808,24 @@ service Query { rpc BackgroundTaskStatusStreaming(stream AerospikeRequestPayload) returns (stream AerospikeResponsePayload) {} } + +// Info policy for info request +message InfoPolicy { + // Info command socket timeout in milliseconds. + // + // Default: 1000 + optional uint32 timeout = 1; +} + +// Info request +message InfoRequest { + optional InfoPolicy infoPolicy = 1; + repeated string commands = 2; +} + +// Aerospike info requests +service Info { + // Send an info request + rpc Info (AerospikeRequestPayload) returns + (AerospikeResponsePayload) {} +} \ No newline at end of file diff --git a/proto/kvs/aerospike_proxy_kv_grpc.pb.go b/proto/kvs/aerospike_proxy_kv_grpc.pb.go index f1a3505d..7ee945e9 100644 --- a/proto/kvs/aerospike_proxy_kv_grpc.pb.go +++ b/proto/kvs/aerospike_proxy_kv_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.12.4 +// - protoc v5.27.1 // source: proto/kvs/aerospike_proxy_kv.proto package kvs @@ -1832,3 +1832,95 @@ var Query_ServiceDesc = grpc.ServiceDesc{ }, Metadata: "proto/kvs/aerospike_proxy_kv.proto", } + +const ( + Info_Info_FullMethodName = "/Info/Info" +) + +// InfoClient is the client API for Info service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type InfoClient interface { + // Send an info request + Info(ctx context.Context, in *AerospikeRequestPayload, opts ...grpc.CallOption) (*AerospikeResponsePayload, error) +} + +type infoClient struct { + cc grpc.ClientConnInterface +} + +func NewInfoClient(cc grpc.ClientConnInterface) InfoClient { + return &infoClient{cc} +} + +func (c *infoClient) Info(ctx context.Context, in *AerospikeRequestPayload, opts ...grpc.CallOption) (*AerospikeResponsePayload, error) { + out := new(AerospikeResponsePayload) + err := c.cc.Invoke(ctx, Info_Info_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// InfoServer is the server API for Info service. +// All implementations must embed UnimplementedInfoServer +// for forward compatibility +type InfoServer interface { + // Send an info request + Info(context.Context, *AerospikeRequestPayload) (*AerospikeResponsePayload, error) + mustEmbedUnimplementedInfoServer() +} + +// UnimplementedInfoServer must be embedded to have forward compatible implementations. +type UnimplementedInfoServer struct { +} + +func (UnimplementedInfoServer) Info(context.Context, *AerospikeRequestPayload) (*AerospikeResponsePayload, error) { + return nil, status.Errorf(codes.Unimplemented, "method Info not implemented") +} +func (UnimplementedInfoServer) mustEmbedUnimplementedInfoServer() {} + +// UnsafeInfoServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to InfoServer will +// result in compilation errors. +type UnsafeInfoServer interface { + mustEmbedUnimplementedInfoServer() +} + +func RegisterInfoServer(s grpc.ServiceRegistrar, srv InfoServer) { + s.RegisterService(&Info_ServiceDesc, srv) +} + +func _Info_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AerospikeRequestPayload) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InfoServer).Info(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Info_Info_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InfoServer).Info(ctx, req.(*AerospikeRequestPayload)) + } + return interceptor(ctx, in, info, handler) +} + +// Info_ServiceDesc is the grpc.ServiceDesc for Info service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Info_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "Info", + HandlerType: (*InfoServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Info", + Handler: _Info_Info_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/kvs/aerospike_proxy_kv.proto", +} diff --git a/proxy_auth_interceptor.go b/proxy_auth_interceptor.go index 8c9f8a63..e6f8b46b 100644 --- a/proxy_auth_interceptor.go +++ b/proxy_auth_interceptor.go @@ -18,17 +18,21 @@ import ( "context" "encoding/base64" "encoding/json" + "runtime/debug" "strings" "time" grpc "google.golang.org/grpc" "google.golang.org/grpc/metadata" + "github.com/aerospike/aerospike-client-go/v7/logger" auth "github.com/aerospike/aerospike-client-go/v7/proto/auth" + "github.com/aerospike/aerospike-client-go/v7/types" ) type authInterceptor struct { - clnt *ProxyClient + clnt *ProxyClient + closer chan struct{} expiry time.Time fullToken string // "Bearer " @@ -36,7 +40,8 @@ type authInterceptor struct { func newAuthInterceptor(clnt *ProxyClient) (*authInterceptor, Error) { interceptor := &authInterceptor{ - clnt: clnt, + clnt: clnt, + closer: make(chan struct{}), } err := interceptor.scheduleRefreshToken() @@ -47,26 +52,62 @@ func newAuthInterceptor(clnt *ProxyClient) (*authInterceptor, Error) { return interceptor, nil } +func (interceptor *authInterceptor) close() { + if interceptor.active() { + close(interceptor.closer) + } +} + +func (interceptor *authInterceptor) active() bool { + active := true + select { + case _, active = <-interceptor.closer: + default: + } + return active +} + func (interceptor *authInterceptor) scheduleRefreshToken() Error { err := interceptor.refreshToken() if err != nil { return err } - go func() { - wait := interceptor.expiry.Sub(time.Now()) - 5*time.Second - for { - time.Sleep(wait) + // launch the refresher go routine + go interceptor.tokenRefresher() + + return nil +} + +func (interceptor *authInterceptor) tokenRefresher() { + // make sure the goroutine is restarted if something panics downstream + defer func() { + if r := recover(); r != nil { + logger.Logger.Error("Interceptor refresh goroutine crashed: %s", debug.Stack()) + go interceptor.tokenRefresher() + } + }() + + // provide 5 secs of buffer before expiry due to network latency + wait := interceptor.expiry.Sub(time.Now()) - 5*time.Second + for { + ticker := time.NewTicker(wait) + select { + case <-ticker.C: + ticker.Stop() // prevent goroutine leak err := interceptor.refreshToken() if err != nil { wait = time.Second } else { wait = interceptor.expiry.Sub(time.Now()) - 5*time.Second } - } - }() - return nil + case <-interceptor.closer: + ticker.Stop() // prevent goroutine leak + // channel closed; return from the goroutine + return + } + } } func (interceptor *authInterceptor) refreshToken() Error { @@ -139,30 +180,30 @@ func (interceptor *authInterceptor) login() Error { claims := strings.Split(res.GetToken(), ".") decClaims, gerr := base64.RawURLEncoding.DecodeString(claims[1]) - if err != nil { - return newGrpcError(false, err, "Invalid token encoding. Expected base64.") + if gerr != nil { + return newGrpcError(false, gerr, "Invalid token encoding. Expected base64.") } tokenMap := make(map[string]interface{}, 8) gerr = json.Unmarshal(decClaims, &tokenMap) - if err != nil { - return newGrpcError(false, err, "Invalid token encoding. Expected json.") + if gerr != nil { + return newError(types.PARSE_ERROR, "Invalid token encoding. Expected json.") } expiryToken, ok := tokenMap["exp"].(float64) if !ok { - return newGrpcError(false, err, "Invalid expiry value. Expected float64.") + return newError(types.PARSE_ERROR, "Invalid expiry value. Expected float64.") } iat, ok := tokenMap["iat"].(float64) if !ok { - return newGrpcError(false, err, "Invalid iat value. Expected float64.") + return newError(types.PARSE_ERROR, "Invalid iat value. Expected float64.") } ttl := time.Duration(expiryToken-iat) * time.Second if ttl <= 0 { - return newGrpcError(false, err, "Invalid token values. token 'iat' > 'exp'") + return newError(types.PARSE_ERROR, "Invalid token values. token 'iat' > 'exp'") } // Set expiry based on local clock. diff --git a/proxy_client.go b/proxy_client.go index 64e47ebf..a32fde85 100644 --- a/proxy_client.go +++ b/proxy_client.go @@ -16,6 +16,7 @@ package aerospike import ( "context" + "math/rand" "runtime" "sync" "sync/atomic" @@ -305,6 +306,7 @@ func (clnt *ProxyClient) createGrpcConn(noInterceptor bool) (*grpc.ClientConn, E // Close closes all Grpcclient connections to database server nodes. func (clnt *ProxyClient) Close() { clnt.active.Set(false) + clnt.authInterceptor.close() } // IsConnected determines if the Grpcclient is ready to talk to the database server cluster. @@ -1175,6 +1177,50 @@ func (clnt *ProxyClient) SetQuotas(policy *AdminPolicy, roleName string, readQuo panic(notSupportedInProxyClient) } +// RequestInfo sends an info command to the server. The proxy server should be configured to have allowed +// the commands to go through. +func (clnt *ProxyClient) RequestInfo(policy *InfoPolicy, commands ...string) (map[string]string, Error) { + policy = clnt.getUsableInfoPolicy(policy) + + req := kvs.AerospikeRequestPayload{ + Id: rand.Uint32(), + Iteration: 1, + InfoRequest: &kvs.InfoRequest{ + InfoPolicy: policy.grpc(), + Commands: commands, + }, + } + + conn, err := clnt.grpcConn() + if err != nil { + return nil, err + } + + client := kvs.NewInfoClient(conn) + + ctx, cancel := policy.grpcDeadlineContext() + defer cancel() + + res, gerr := client.Info(ctx, &req) + if gerr != nil { + return nil, newGrpcError(false, gerr, gerr.Error()) + } + + defer clnt.returnGrpcConnToPool(conn) + + if res.GetStatus() != 0 { + return nil, newGrpcStatusError(res) + } + + info := info{ + msg: &types.Message{ + Data: res.Payload, + }, + } + + return info.parseMultiResponse() +} + //------------------------------------------------------- // Access Methods //------------------------------------------------------- diff --git a/query_durtion.go b/query_duration.go similarity index 84% rename from query_durtion.go rename to query_duration.go index ae910e1a..c06df6b7 100644 --- a/query_durtion.go +++ b/query_duration.go @@ -17,6 +17,8 @@ package aerospike +import kvs "github.com/aerospike/aerospike-client-go/v7/proto/kvs" + // QueryDuration defines the expected query duration. The server treats the query in different ways depending on the expected duration. // This enum is ignored for aggregation queries, background queries and server versions < 6.0. type QueryDuration int @@ -47,19 +49,14 @@ const ( LONG_RELAX_AP ) -// func (rp QueryDuration) grpc() kvs.Replica { -// TODO: Support GRPC conversions for the proxy client -// switch rp { -// case MASTER: -// return kvs.Replica_MASTER -// case MASTER_PROLES: -// return kvs.Replica_MASTER_PROLES -// case RANDOM: -// return kvs.Replica_RANDOM -// case SEQUENCE: -// return kvs.Replica_SEQUENCE -// case PREFER_RACK: -// return kvs.Replica_PREFER_RACK -// } -// panic(unreachable) -// } +func (qd QueryDuration) grpc() kvs.QueryDuration { + switch qd { + case LONG: + return kvs.QueryDuration(kvs.QueryDuration_LONG) + case SHORT: + return kvs.QueryDuration(kvs.QueryDuration_SHORT) + case LONG_RELAX_AP: + return kvs.QueryDuration(kvs.QueryDuration_LONG_RELAX_AP) + } + panic(unreachable) +} diff --git a/query_policy.go b/query_policy.go index 706c90a2..40439a0d 100644 --- a/query_policy.go +++ b/query_policy.go @@ -70,6 +70,7 @@ func (qp *QueryPolicy) grpc() *kvs.QueryPolicy { FailOnClusterChange := false //qp.FailOnClusterChange ShortQuery := qp.ShortQuery || qp.ExpectedDuration == SHORT InfoTimeout := uint32(qp.SocketTimeout / time.Millisecond) + ExpectedDuration := qp.ExpectedDuration.grpc() return &kvs.QueryPolicy{ Replica: qp.ReplicaPolicy.grpc(), @@ -85,5 +86,6 @@ func (qp *QueryPolicy) grpc() *kvs.QueryPolicy { FailOnClusterChange: &FailOnClusterChange, ShortQuery: &ShortQuery, InfoTimeout: &InfoTimeout, + ExpectedDuration: &ExpectedDuration, } } diff --git a/read_mode_sc.go b/read_mode_sc.go index 58deb95b..6ac90309 100644 --- a/read_mode_sc.go +++ b/read_mode_sc.go @@ -25,19 +25,19 @@ type ReadModeSC int const ( // ReadModeSCSession ensures this client will only see an increasing sequence of record versions. - // Server only reads from master. This is the default. + // Client only reads from master. This is the default. ReadModeSCSession ReadModeSC = iota - // ReadModeSCLinearize ensures ALL clients will only see an increasing sequence of record versions. - // Server only reads from master. + // ReadModeSCLinearize ensures all clients will only see an increasing sequence of record versions. + // Client only reads from master. ReadModeSCLinearize - // ReadModeSCAllowReplica indicates that the server may read from master or any full (non-migrating) replica. + // ReadModeSCAllowReplica indicates that the client may read from master or any full (non-migrating) replica. // Increasing sequence of record versions is not guaranteed. ReadModeSCAllowReplica - // ReadModeSCAllowUnavailable indicates that the server may read from master or any full (non-migrating) replica or from unavailable - // partitions. Increasing sequence of record versions is not guaranteed. + // ReadModeSCAllowUnavailable indicates that the client may read from master or any full (non-migrating) replica or from unavailable + // partitions. Increasing sequence of record versions is not guaranteed. ReadModeSCAllowUnavailable )