From 910ef44b5112749f20a90e77b2eb0056888a7afd Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 12:08:59 +0200 Subject: [PATCH 01/29] return inode in fileinfo --- pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 1364 +++++++++++----------- pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto | 370 +++--- pkg/eosclient/eosgrpc/eosgrpc.go | 17 +- 3 files changed, 879 insertions(+), 872 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 6f5502ee18..678e73c862 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -1,54 +1,38 @@ -// Copyright 2018-2021 CERN -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// In applying this license, CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - // @project The CERN Tape Archive (CTA) // @brief CTA-EOS gRPC API for CASTOR-EOS migration // @copyright Copyright 2019 CERN -// @license This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. +// @license This program is free software: you can redistribute it and/or +// modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 +// of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// This program is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU General Public License for more +// details. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// You should have received a copy of the GNU General Public +// License along with this program. If not, see +// . // NOTE: Compile for Go with: // protoc ./eos_grpc.proto --go_out=plugins=grpc:. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.19.1 +// protoc-gen-go v1.28.1 +// protoc v3.21.7 // source: Rpc.proto package eos_grpc import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -1080,6 +1064,7 @@ type FileMdProto struct { Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` + Inode uint64 `protobuf:"varint,18,opt,name=inode,proto3" json:"inode,omitempty"` } func (x *FileMdProto) Reset() { @@ -1233,6 +1218,13 @@ func (x *FileMdProto) GetEtag() string { return "" } +func (x *FileMdProto) GetInode() uint64 { + if x != nil { + return x.Inode + } + return 0 +} + type ContainerMdProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1252,6 +1244,7 @@ type ContainerMdProto struct { Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` + Inode uint64 `protobuf:"varint,15,opt,name=inode,proto3" json:"inode,omitempty"` } func (x *ContainerMdProto) Reset() { @@ -1384,6 +1377,13 @@ func (x *ContainerMdProto) GetEtag() string { return "" } +func (x *ContainerMdProto) GetInode() uint64 { + if x != nil { + return x.Inode + } + return 0 +} + type QuotaProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2415,6 +2415,7 @@ type NSRequest struct { // Actual request data object // // Types that are assignable to Command: + // // *NSRequest_Mkdir // *NSRequest_Rmdir // *NSRequest_Touch @@ -3140,7 +3141,7 @@ type ManilaResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` //for generic messages + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` // for generic messages Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` // < 1 is an error -- > 1 is OK TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` @@ -4165,6 +4166,7 @@ type NSRequest_ShareRequest struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Subcmd: + // // *NSRequest_ShareRequest_Ls // *NSRequest_ShareRequest_Op Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"` @@ -5196,7 +5198,7 @@ var file_Rpc_proto_rawDesc = []byte{ 0x65, 0x63, 0x22, 0x34, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc7, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x74, 0x49, @@ -5228,669 +5230,671 @@ var file_Rpc_proto_rawDesc = []byte{ 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x03, 0x0a, - 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, - 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, - 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, - 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, - 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, - 0x74, 0x61, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, - 0x03, 0x0a, 0x0a, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, - 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, - 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, - 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, - 0x66, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, - 0x52, 0x03, 0x69, 0x6e, 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, - 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, - 0x2c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, - 0x12, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x67, 0x65, 0x78, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x35, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, - 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xc0, 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, - 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, - 0x2b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, - 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, + 0x38, 0x01, 0x22, 0xe5, 0x03, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, + 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x1a, + 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, 0x03, 0x0a, 0x0a, 0x51, + 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, + 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, + 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, + 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, + 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, + 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x66, 0x0a, 0x06, 0x52, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x69, 0x6e, + 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x7a, 0x65, 0x72, + 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x24, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x63, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x12, 0x75, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, + 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6d, + 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x46, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, + 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, + 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x78, + 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, + 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, - 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, - 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, - 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, - 0x8c, 0x1e, 0x0a, 0x09, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, - 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, - 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, - 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, - 0x0a, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x02, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x32, 0x0a, + 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, + 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, 0x2b, 0x0a, 0x03, 0x63, + 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, 0x0b, 0x46, 0x69, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, + 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, + 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x09, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, + 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x22, + 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x8c, 0x1e, 0x0a, 0x09, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, + 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, + 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6d, 0x6b, 0x64, 0x69, + 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6b, 0x64, 0x69, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x6b, 0x64, 0x69, + 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x6f, + 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, + 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, + 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, - 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x12, + 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, - 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, - 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, - 0x6c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x02, 0x72, 0x6d, 0x12, + 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, + 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, - 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, - 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, - 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, - 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, - 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, - 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, - 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, - 0x4d, 0x44, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, - 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, - 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, - 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, - 0x1a, 0x58, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, - 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, - 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, - 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x64, 0x61, 0x79, 0x22, 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, - 0x4d, 0x44, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0x02, 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, + 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, - 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, - 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x78, + 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, 0x6e, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, 0x6e, 0x12, 0x37, 0x0a, + 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x21, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x05, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, + 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, - 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, + 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, + 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, - 0x0a, 0x0a, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, - 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, - 0x41, 0x4e, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, - 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, - 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, - 0x44, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, - 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0x02, 0x22, 0x25, 0x0a, 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, - 0x08, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, - 0x59, 0x53, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x1a, 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, - 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, - 0x04, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x39, 0x0a, 0x02, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, + 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, 0x01, 0x0a, 0x0e, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x03, + 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x45, 0x52, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, + 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x55, + 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, 0x0a, 0x0e, 0x52, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, + 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, - 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, - 0x4e, 0x10, 0x03, 0x1a, 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, - 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, - 0x63, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, - 0x70, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, - 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, - 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, - 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, - 0x63, 0x6d, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, - 0x0c, 0x0a, 0x0a, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x12, 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, + 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, 0x61, + 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x58, 0x0a, 0x0c, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, 0x72, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, + 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x79, 0x22, + 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x12, 0x0b, + 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, + 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, + 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6b, 0x65, 0x79, + 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, 0x0a, 0x0a, 0x41, 0x63, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x52, + 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, + 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, + 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2d, + 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, + 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x25, 0x0a, + 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53, 0x45, + 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x59, 0x53, 0x5f, 0x41, + 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, + 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, + 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, + 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, 0x04, 0x0a, 0x0c, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x02, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, 0x73, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, + 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x4f, 0x4e, 0x49, + 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x03, 0x1a, + 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x0a, 0x0a, + 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, + 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, + 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, + 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x42, + 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, 0x0c, 0x0a, 0x0a, 0x4e, + 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x03, + 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x05, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x1a, 0xd7, 0x01, 0x0a, + 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, + 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x79, 0x63, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x1a, 0xd7, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, - 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x1a, 0x94, 0x02, + 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, + 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, + 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x68, 0x0a, + 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x50, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, - 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, - 0x65, 0x1a, 0x68, 0x0a, 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, - 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x1a, 0x3b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, - 0x0a, 0x0d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x1a, 0x3b, 0x0a, 0x0b, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, 0x0a, 0x0d, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x22, 0xab, 0x03, 0x0a, + 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, - 0x22, 0xab, 0x03, 0x0a, 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, - 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, - 0x6d, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x6d, 0x65, 0x6d, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, - 0x65, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x65, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x6d, 0x65, 0x6d, 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x66, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, - 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, - 0x6f, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, - 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, - 0x73, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, - 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, - 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, - 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, - 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, - 0x2a, 0x2d, 0x0a, 0x09, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, - 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, - 0x2f, 0x0a, 0x07, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, - 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, - 0x52, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, - 0x2a, 0x2d, 0x0a, 0x0a, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, - 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, - 0x94, 0x01, 0x0a, 0x13, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, - 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, - 0x58, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, - 0x0c, 0x53, 0x48, 0x52, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, - 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, - 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, - 0x54, 0x49, 0x45, 0x53, 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x12, 0x31, 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, - 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, - 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, - 0x6e, 0x69, 0x6c, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, - 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x65, 0x72, 0x6e, 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, - 0x5f, 0x67, 0x72, 0x70, 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x5f, 0x76, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x65, 0x6d, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x5f, 0x72, + 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, + 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x5f, 0x67, + 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x6d, + 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, + 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, 0x03, 0x0a, 0x0d, 0x4d, + 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x41, 0x4e, + 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, 0x72, 0x65, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x21, + 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x48, 0x6f, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x69, + 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x61, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x24, + 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, + 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, + 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, 0x2a, 0x2d, 0x0a, 0x09, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, + 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, 0x2f, 0x0a, 0x07, 0x51, + 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x4d, 0x10, 0x02, + 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x2a, 0x2d, 0x0a, 0x0a, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, 0x94, 0x01, 0x0a, 0x13, + 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, + 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, + 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x58, 0x54, 0x45, 0x4e, + 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x48, 0x52, + 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, + 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, + 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x10, 0x05, 0x12, 0x12, + 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x49, 0x45, 0x53, + 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x50, 0x69, + 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, + 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, + 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, 0x4e, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, + 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x12, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x6e, + 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, 0x5f, 0x67, 0x72, 0x70, + 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto index 93f0e0be48..97c68bdaa5 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto @@ -1,24 +1,25 @@ // @project The CERN Tape Archive (CTA) // @brief CTA-EOS gRPC API for CASTOR-EOS migration // @copyright Copyright 2019 CERN -// @license This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. +// @license This program is free software: you can redistribute it and/or +// modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 +// of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// This program is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU General Public License for more +// details. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - +// You should have received a copy of the GNU General Public +// License along with this program. If not, see +// . // NOTE: Compile for Go with: // protoc ./eos_grpc.proto --go_out=plugins=grpc:. - syntax = "proto3"; package eos.rpc; @@ -29,37 +30,36 @@ option java_outer_classname = "EosProto"; option objc_class_prefix = "EOS"; option go_package = "github.com/cern-eos/grpc-proto/protobuf;eos_grpc"; - service Eos { // Replies to a ping - rpc Ping (PingRequest) returns (PingReply) {} + rpc Ping(PingRequest) returns (PingReply) {} // --------------------------------------------------------------------- // NAMESPACE // --------------------------------------------------------------------- - // Replies to MD requests with a stream - rpc MD (MDRequest) returns (stream MDResponse) {} + // Replies to MD requests with a stream + rpc MD(MDRequest) returns (stream MDResponse) {} // Replies to Find requests with a stream - rpc Find (FindRequest) returns (stream MDResponse) {} + rpc Find(FindRequest) returns (stream MDResponse) {} // Replies to a NsStat operation - rpc NsStat (NsStatRequest) returns (NsStatResponse) {} + rpc NsStat(NsStatRequest) returns (NsStatResponse) {} // Replies to an insert - rpc ContainerInsert (ContainerInsertRequest) returns (InsertReply) {} - rpc FileInsert (FileInsertRequest) returns (InsertReply) {} + rpc ContainerInsert(ContainerInsertRequest) returns (InsertReply) {} + rpc FileInsert(FileInsertRequest) returns (InsertReply) {} // Replies to a NsRequest operation - rpc Exec (NSRequest) returns (NSResponse) {} + rpc Exec(NSRequest) returns (NSResponse) {} // --------------------------------------------------------------------- // OPENSTACK // --------------------------------------------------------------------- // Manila Driver - rpc ManilaServerRequest (ManilaRequest) returns (ManilaResponse) {} + rpc ManilaServerRequest(ManilaRequest) returns (ManilaResponse) {} } message PingRequest { @@ -67,9 +67,7 @@ message PingRequest { bytes message = 2; } -message PingReply { - bytes message = 1; -} +message PingReply { bytes message = 1; } // --------------------------------------------------------------------- // NAMESPACE @@ -113,12 +111,13 @@ message FileMdProto { bytes link_name = 9; Time ctime = 10; // change time Time mtime = 11; // modification time - Checksum checksum =12; + Checksum checksum = 12; repeated uint32 locations = 13; repeated uint32 unlink_locations = 14; map xattrs = 15; bytes path = 16; string etag = 17; + uint64 inode = 18; } message ContainerMdProto { @@ -136,32 +135,53 @@ message ContainerMdProto { map xattrs = 12; bytes path = 13; string etag = 14; + uint64 inode = 15; +} + +enum TYPE { + FILE = 0; + CONTAINER = 1; + LISTING = 2; + STAT = 3; +} + +enum QUOTATYPE { + USER = 0; + GROUP = 2; + PROJECT = 3; +} + +enum QUOTAOP { + GET = 0; + SET = 1; + RM = 2; + RMNODE = 3; } -enum TYPE { FILE = 0; CONTAINER = 1; LISTING = 2; STAT = 3;} - -enum QUOTATYPE { USER = 0; GROUP = 2; PROJECT = 3;} - -enum QUOTAOP { GET = 0; SET = 1; RM = 2; RMNODE = 3;} - -enum QUOTAENTRY { NONE = 0; VOLUME = 1; INODE = 2;} - -message QuotaProto { - bytes path = 1; // quota node path - string name = 2; // associated name for the given type - QUOTATYPE type = 3; // user,group,project or all quota - uint64 usedbytes = 4; // bytes used physical - uint64 usedlogicalbytes = 5; // bytes used logical - uint64 usedfiles = 6; // number of files used - uint64 maxbytes = 7; // maximum number of bytes (volume quota) - uint64 maxlogicalbytes = 8; // maximum number of logical bytes (logical volume quota) - uint64 maxfiles = 9; // maximum number of files (inode quota) - float percentageusedbytes = 10; // percentage of volume quota used from 0 to 100 +enum QUOTAENTRY { + NONE = 0; + VOLUME = 1; + INODE = 2; +} + +message QuotaProto { + bytes path = 1; // quota node path + string name = 2; // associated name for the given type + QUOTATYPE type = 3; // user,group,project or all quota + uint64 usedbytes = 4; // bytes used physical + uint64 usedlogicalbytes = 5; // bytes used logical + uint64 usedfiles = 6; // number of files used + uint64 maxbytes = 7; // maximum number of bytes (volume quota) + uint64 maxlogicalbytes = + 8; // maximum number of logical bytes (logical volume quota) + uint64 maxfiles = 9; // maximum number of files (inode quota) + float percentageusedbytes = + 10; // percentage of volume quota used from 0 to 100 float percentageusedfiles = 11; // percentag of inode quota used from 0 to 100 - string statusbytes = 12; // status string for volume quota ok,warning,exceeded - string statusfiles = 13; // status string for inode quota ok,warning,exceeded + string statusbytes = 12; // status string for volume quota ok,warning,exceeded + string statusfiles = 13; // status string for inode quota ok,warning,exceeded } - + message RoleId { uint64 uid = 1; uint64 gid = 2; @@ -222,26 +242,25 @@ message MDResponse { message FindRequest { TYPE type = 1; MDId id = 2; - RoleId role = 3; + RoleId role = 3; string authkey = 4; uint64 maxdepth = 5; MDSelection selection = 6; } message ShareAuth { - string prot = 1; - string name = 2; - string host = 3; + string prot = 1; + string name = 2; + string host = 3; } - message ShareProto { string permission = 1; - uint64 expires = 2; - string owner = 3; - string group = 4; + uint64 expires = 2; + string owner = 3; + string group = 4; uint64 generation = 5; - string path = 6; + string path = 6; bool allowtree = 7; string vtoken = 8; repeated ShareAuth origins = 9; @@ -260,14 +279,10 @@ message NSRequest { bool recursive = 2; int64 mode = 3; } - - message RmdirRequest { - MDId id = 1; - } - - message TouchRequest { - MDId id = 1; - } + + message RmdirRequest { MDId id = 1; } + + message TouchRequest { MDId id = 1; } message UnlinkRequest { MDId id = 1; @@ -292,19 +307,19 @@ message NSRequest { message VersionRequest { enum VERSION_CMD { - CREATE= 0; - PURGE = 1; - LIST = 2; - GRAB = 3; - } - MDId id = 1; - VERSION_CMD cmd = 2; - int32 maxversion = 3; - string grabversion = 4; + CREATE = 0; + PURGE = 1; + LIST = 2; + GRAB = 3; + } + MDId id = 1; + VERSION_CMD cmd = 2; + int32 maxversion = 3; + string grabversion = 4; } message RecycleRequest { - string key = 1; + string key = 1; enum RECYCLE_CMD { RESTORE = 0; PURGE = 1; @@ -338,7 +353,7 @@ message NSRequest { message ChownRequest { MDId id = 1; - RoleId owner = 2; + RoleId owner = 2; } message ChmodRequest { @@ -350,7 +365,7 @@ message NSRequest { enum ACL_COMMAND { NONE = 0; MODIFY = 1; - LIST = 2; + LIST = 2; } enum ACL_TYPE { @@ -362,40 +377,38 @@ message NSRequest { ACL_COMMAND cmd = 2; bool recursive = 3; ACL_TYPE type = 4; - string rule = 5; + string rule = 5; uint32 position = 6; } - message TokenRequest { - ShareToken token = 1; - } + message TokenRequest { ShareToken token = 1; } message QuotaRequest { bytes path = 1; RoleId id = 2; - QUOTAOP op = 3; // get or set, rm or rmnode - uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting - uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting + QUOTAOP op = 3; // get or set, rm or rmnode + uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting + uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting QUOTAENTRY entry = 6; // select volume or inode entry for deletion } message ShareRequest { message LsShare { enum OutFormat { - NONE = 0; // - MONITORING = 1; // [-m] - LISTING = 2; // [-l] - JSON = 3; // [grpc] + NONE = 0; // + MONITORING = 1; // [-m] + LISTING = 2; // [-l] + JSON = 3; // [grpc] } - OutFormat outformat = 1; // - string selection = 2; // + OutFormat outformat = 1; // + string selection = 2; // } message OperateShare { enum Op { CREATE = 0; REMOVE = 1; - SHARE = 2; + SHARE = 2; UNSHARE = 3; ACCESS = 4; MODIFY = 5; @@ -409,7 +422,7 @@ message NSRequest { } oneof subcmd { - LsShare ls = 1; + LsShare ls = 1; OperateShare op = 2; } } @@ -419,69 +432,70 @@ message NSRequest { // Actual request data object oneof command { - MkdirRequest mkdir = 21; - RmdirRequest rmdir = 22; - TouchRequest touch = 23; - UnlinkRequest unlink = 24; - RmRequest rm = 25; - RenameRequest rename = 26; - SymlinkRequest symlink = 27; - VersionRequest version = 28; - RecycleRequest recycle = 29; - SetXAttrRequest xattr = 30; - ChownRequest chown = 31; - ChmodRequest chmod = 32; - AclRequest acl = 33; - TokenRequest token = 34; - QuotaRequest quota = 35; - ShareRequest share = 36; + MkdirRequest mkdir = 21; + RmdirRequest rmdir = 22; + TouchRequest touch = 23; + UnlinkRequest unlink = 24; + RmRequest rm = 25; + RenameRequest rename = 26; + SymlinkRequest symlink = 27; + VersionRequest version = 28; + RecycleRequest recycle = 29; + SetXAttrRequest xattr = 30; + ChownRequest chown = 31; + ChmodRequest chmod = 32; + AclRequest acl = 33; + TokenRequest token = 34; + QuotaRequest quota = 35; + ShareRequest share = 36; } } - - message NSResponse { message ErrorResponse { int64 code = 1; - string msg = 2; + string msg = 2; } message VersionResponse { message VersionInfo { - MDId id = 1; - Time mtime = 2; + MDId id = 1; + Time mtime = 2; } int64 code = 1; - string msg = 2; + string msg = 2; repeated VersionInfo versions = 3; } message RecycleResponse { int64 code = 1; - string msg = 2; - + string msg = 2; + message RecycleInfo { - enum DELETIONTYPE { FILE = 0; TREE = 1; } - MDId id = 1; + enum DELETIONTYPE { + FILE = 0; + TREE = 1; + } + MDId id = 1; RoleId owner = 2; - Time dtime = 3; + Time dtime = 3; uint64 size = 4; DELETIONTYPE type = 5; string key = 6; - } - + } + repeated RecycleInfo recycles = 3; } message AclResponse { int64 code = 1; - string msg = 2; + string msg = 2; string rule = 3; } message QuotaResponse { - int64 code = 1; - string msg = 2; + int64 code = 1; + string msg = 2; repeated QuotaProto quotanode = 3; } @@ -500,22 +514,20 @@ message NSResponse { message ShareResponse { int64 code = 1; - string msg = 2; + string msg = 2; repeated ShareInfo shares = 3; repeated ShareAccess access = 4; } - ErrorResponse error = 1; - VersionResponse version = 2; - RecycleResponse recycle = 3; - AclResponse acl = 4; - QuotaResponse quota = 5; - ShareResponse share = 6; + ErrorResponse error = 1; + VersionResponse version = 2; + RecycleResponse recycle = 3; + AclResponse acl = 4; + QuotaResponse quota = 5; + ShareResponse share = 6; } -message NsStatRequest { - string authkey = 1; -} +message NsStatRequest { string authkey = 1; } message NsStatResponse { int64 code = 1; @@ -540,57 +552,53 @@ message NsStatResponse { // --------------------------------------------------------------------- enum MANILA_REQUEST_TYPE { - CREATE_SHARE = 0; - DELETE_SHARE = 1; - EXTEND_SHARE = 2; - SHRINK_SHARE = 3; - MANAGE_EXISTING = 4; - UNMANAGE = 5; - GET_CAPACITIES = 6; -/* EXTRA FUNCTIONS NOT IMPLEMENTED */ - /* - CREATE_SNAPSHOT = 7; - DELETE_SNAPSHOT = 8; - CREATE_SHARE_FROM_SNAPSHOT = 9; - ENSURE_SHARE = 10; - ALLOW_ACCESS = 11; - DENY_ACCESS = 12; - GET_SHARE_STATS = 13; - DO_SETUP = 14; - SETUP_SERVER = 15; - TEARDOWN_SERVER = 16; - GET_NETWORK_ALLOCATIONS_NUMBER = 17; - VERIFY_SHARE_SERVER_HANDLING = 18; - CREATE_SHARE_GROUP = 19; - DELETE_SHARE_GROUP = 20; - */ - + CREATE_SHARE = 0; + DELETE_SHARE = 1; + EXTEND_SHARE = 2; + SHRINK_SHARE = 3; + MANAGE_EXISTING = 4; + UNMANAGE = 5; + GET_CAPACITIES = 6; + /* EXTRA FUNCTIONS NOT IMPLEMENTED */ + /* + CREATE_SNAPSHOT = 7; + DELETE_SNAPSHOT = 8; + CREATE_SHARE_FROM_SNAPSHOT = 9; + ENSURE_SHARE = 10; + ALLOW_ACCESS = 11; + DENY_ACCESS = 12; + GET_SHARE_STATS = 13; + DO_SETUP = 14; + SETUP_SERVER = 15; + TEARDOWN_SERVER = 16; + GET_NETWORK_ALLOCATIONS_NUMBER = 17; + VERIFY_SHARE_SERVER_HANDLING = 18; + CREATE_SHARE_GROUP = 19; + DELETE_SHARE_GROUP = 20; + */ } message ManilaRequest { - MANILA_REQUEST_TYPE request_type = 1; - string auth_key = 2; - string protocol = 3; - string share_name = 4; - string description = 5; - string share_id = 6; - string share_group_id = 7; - int32 quota = 8; - string creator = 9; - string egroup = 10; - string admin_egroup = 11; - string share_host = 12; - string share_location = 13; + MANILA_REQUEST_TYPE request_type = 1; + string auth_key = 2; + string protocol = 3; + string share_name = 4; + string description = 5; + string share_id = 6; + string share_group_id = 7; + int32 quota = 8; + string creator = 9; + string egroup = 10; + string admin_egroup = 11; + string share_host = 12; + string share_location = 13; } message ManilaResponse { - string msg = 1; //for generic messages - int32 code = 2; // < 1 is an error -- > 1 is OK - int64 total_used = 3; - int64 total_capacity = 4; - int64 new_share_quota = 5; - string new_share_path = 6; - + string msg = 1; // for generic messages + int32 code = 2; // < 1 is an error -- > 1 is OK + int64 total_used = 3; + int64 total_capacity = 4; + int64 new_share_quota = 5; + string new_share_path = 6; } - - diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index ea59613958..9c7a6c3e08 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1567,7 +1567,8 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.IsDir = true } if st.Fmd != nil { - fi.Inode = st.Fmd.Id + fi.Inode = st.Fmd.Inode + fi.FID = st.Fmd.ContId fi.UID = st.Fmd.Uid fi.GID = st.Fmd.Gid fi.MTimeSec = st.Fmd.Mtime.Sec @@ -1578,10 +1579,8 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.File = namepfx + "/" + string(st.Fmd.Name) } + fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { - if fi.Attrs == nil { - fi.Attrs = make(map[string]string) - } fi.Attrs[k] = string(v) } @@ -1595,7 +1594,8 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") } else { - fi.Inode = st.Cmd.Id + fi.Inode = st.Cmd.Inode + fi.FID = st.Fmd.ContId fi.UID = st.Cmd.Uid fi.GID = st.Cmd.Gid fi.MTimeSec = st.Cmd.Mtime.Sec @@ -1606,14 +1606,9 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.File = namepfx + "/" + string(st.Cmd.Name) } - var allattrs = "" + fi.Attrs = make(map[string]string) for k, v := range st.Cmd.Xattrs { - if fi.Attrs == nil { - fi.Attrs = make(map[string]string) - } fi.Attrs[k] = string(v) - allattrs += string(v) - allattrs += "," } fi.Size = 0 From 02e7b7fa8c302f46370888b409b95dcb25d89cc6 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 13:50:37 +0200 Subject: [PATCH 02/29] fix log --- pkg/eosclient/eosgrpc/eosgrpc.go | 101 +++++++++++++++---------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 9c7a6c3e08..3fdd8384b4 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -670,13 +670,13 @@ func (c *Client) GetFileInfoByPath(ctx context.Context, auth eosclient.Authoriza // Now send the req and see what happens resp, err := c.cl.MD(ctx, mdrq) if err != nil { - log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()) + log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()).Msg("") return nil, err } rsp, err := resp.Recv() if err != nil { - log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()) + log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()).Msg("") // FIXME: this is very bad and poisonous for the project!!!!!!! // Apparently here we have to assume that an error in Recv() means "file not found" @@ -788,65 +788,64 @@ func (c *Client) GetQuota(ctx context.Context, username string, rootAuth eosclie // SetQuota sets the quota of a user on the quota node defined by path. func (c *Client) SetQuota(ctx context.Context, rootAuth eosclient.Authorization, info *eosclient.SetQuotaInfo) error { - { - log := appctx.GetLogger(ctx) - log.Info().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", info)).Msg("") - - // EOS does not have yet this command... work in progress, this is a draft piece of code - // return errtypes.NotSupported("eosgrpc: SetQuota not implemented") + log := appctx.GetLogger(ctx) + log.Info().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", info)).Msg("") - // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, rootAuth) - if err != nil { - return err - } + // EOS does not have yet this command... work in progress, this is a draft piece of code + // return errtypes.NotSupported("eosgrpc: SetQuota not implemented") - msg := new(erpc.NSRequest_QuotaRequest) - msg.Path = []byte(info.QuotaNode) - msg.Id = new(erpc.RoleId) - uidInt, err := strconv.ParseUint(info.UID, 10, 64) - if err != nil { - return err - } + // Initialize the common fields of the NSReq + rq, err := c.initNSRequest(ctx, rootAuth) + if err != nil { + return err + } - // We set a quota for an user, not a group! - msg.Id.Uid = uidInt - msg.Id.Gid = 0 - msg.Id.Username = info.Username - msg.Op = erpc.QUOTAOP_SET - msg.Maxbytes = info.MaxBytes - msg.Maxfiles = info.MaxFiles - rq.Command = &erpc.NSRequest_Quota{Quota: msg} - - // Now send the req and see what happens - resp, err := c.cl.Exec(ctx, rq) - e := c.getRespError(resp, err) - if e != nil { - return e - } + msg := new(erpc.NSRequest_QuotaRequest) + msg.Path = []byte(info.QuotaNode) + msg.Id = new(erpc.RoleId) + uidInt, err := strconv.ParseUint(info.UID, 10, 64) + if err != nil { + return err + } - if resp == nil { - return errtypes.InternalError(fmt.Sprintf("nil response for info: '%#v'", info)) - } + // We set a quota for an user, not a group! + msg.Id.Uid = uidInt + msg.Id.Gid = 0 + msg.Id.Username = info.Username + msg.Op = erpc.QUOTAOP_SET + msg.Maxbytes = info.MaxBytes + msg.Maxfiles = info.MaxFiles + rq.Command = &erpc.NSRequest_Quota{Quota: msg} - if resp.GetError() != nil { - log.Error().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Int64("errcode", resp.GetError().Code).Str("errmsg", resp.GetError().Msg).Msg("EOS negative resp") - } else { - log.Debug().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Msg("grpc response") - } + // Now send the req and see what happens + resp, err := c.cl.Exec(ctx, rq) + e := c.getRespError(resp, err) + if e != nil { + return e + } - if resp.Quota == nil { - return errtypes.InternalError(fmt.Sprintf("nil quota response? info: '%#v'", info)) - } + if resp == nil { + return errtypes.InternalError(fmt.Sprintf("nil response for info: '%#v'", info)) + } - if resp.Quota.Code != 0 { - return errtypes.InternalError(fmt.Sprintf("Quota error from eos. quota: '%#v'", resp.Quota)) - } + if resp.GetError() != nil { + log.Error().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Int64("errcode", resp.GetError().Code).Str("errmsg", resp.GetError().Msg).Msg("EOS negative resp") + } else { + log.Debug().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Msg("grpc response") + } - log.Debug().Str("func", "GetQuota").Str("quotanodes", fmt.Sprintf("%d", len(resp.Quota.Quotanode))).Msg("grpc response") + if resp.Quota == nil { + return errtypes.InternalError(fmt.Sprintf("nil quota response? info: '%#v'", info)) + } - return err + if resp.Quota.Code != 0 { + return errtypes.InternalError(fmt.Sprintf("Quota error from eos. quota: '%#v'", resp.Quota)) } + + log.Debug().Str("func", "GetQuota").Str("quotanodes", fmt.Sprintf("%d", len(resp.Quota.Quotanode))).Msg("grpc response") + + return err + } // Touch creates a 0-size,0-replica file in the EOS namespace. From 8a9b779906890ab427c44e9f37eae1a8bc65c47a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 15:11:58 +0200 Subject: [PATCH 03/29] fix eos grpc parsing --- pkg/eosclient/eosgrpc/eosgrpc.go | 46 +++++++++++++++----------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 3fdd8384b4..650e0be7fa 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1562,10 +1562,29 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( } fi := new(eosclient.FileInfo) - if st.Type != 0 { + if st.Type == erpc.TYPE_CONTAINER { fi.IsDir = true - } - if st.Fmd != nil { + fi.Inode = st.Cmd.Inode + fi.FID = st.Cmd.ParentId + fi.UID = st.Cmd.Uid + fi.GID = st.Cmd.Gid + fi.MTimeSec = st.Cmd.Mtime.Sec + fi.ETag = st.Cmd.Etag + if namepfx == "" { + fi.File = string(st.Cmd.Name) + } else { + fi.File = namepfx + "/" + string(st.Cmd.Name) + } + + fi.Attrs = make(map[string]string) + for k, v := range st.Cmd.Xattrs { + fi.Attrs[k] = string(v) + } + + fi.Size = uint64(st.Cmd.TreeSize) + + log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Msg("grpc response") + } else { fi.Inode = st.Fmd.Inode fi.FID = st.Fmd.ContId fi.UID = st.Fmd.Uid @@ -1592,27 +1611,6 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.XS = xs log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") - } else { - fi.Inode = st.Cmd.Inode - fi.FID = st.Fmd.ContId - fi.UID = st.Cmd.Uid - fi.GID = st.Cmd.Gid - fi.MTimeSec = st.Cmd.Mtime.Sec - fi.ETag = st.Cmd.Etag - if namepfx == "" { - fi.File = string(st.Cmd.Name) - } else { - fi.File = namepfx + "/" + string(st.Cmd.Name) - } - - fi.Attrs = make(map[string]string) - for k, v := range st.Cmd.Xattrs { - fi.Attrs[k] = string(v) - } - - fi.Size = 0 - - log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Msg("grpc response") } return fi, nil From 74a723de0bdc8861554d93f5d394bbdc6b3745fd Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 15:20:20 +0200 Subject: [PATCH 04/29] stat as a root --- pkg/storage/utils/eosfs/eosfs.go | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index f43cb4d3d2..1815eeb1eb 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1223,23 +1223,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st log := appctx.GetLogger(ctx) log.Info().Msg("eosfs: get md for ref:" + ref.String()) - u, err := getUser(ctx) - if err != nil { - return nil, err - } - - fn := "" - if u.Id.Type == userpb.UserType_USER_TYPE_LIGHTWEIGHT || - u.Id.Type == userpb.UserType_USER_TYPE_FEDERATED { - p, err := fs.resolve(ctx, ref) - if err != nil { - return nil, errors.Wrap(err, "eosfs: error resolving reference") - } - - fn = fs.wrap(ctx, p) - } - - auth, err := fs.getUserAuth(ctx, u, fn) + auth, err := fs.getRootAuth(ctx) if err != nil { return nil, err } @@ -1266,7 +1250,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st } } - fn = fs.wrap(ctx, p) + fn := fs.wrap(ctx, p) eosFileInfo, err := fs.c.GetFileInfoByPath(ctx, auth, fn) if err != nil { return nil, err From 0ca4fd7dbc1586786b39ae7e4acff1e5215d27f3 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 18:02:00 +0200 Subject: [PATCH 05/29] workaround for inode (revert me) --- pkg/eosclient/eosgrpc/eosgrpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 650e0be7fa..09c6354938 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1564,7 +1564,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( if st.Type == erpc.TYPE_CONTAINER { fi.IsDir = true - fi.Inode = st.Cmd.Inode + fi.Inode = st.Fmd.Inode fi.FID = st.Cmd.ParentId fi.UID = st.Cmd.Uid fi.GID = st.Cmd.Gid From 5c78b4e859390cfe3e7c6ba34499e8b379db16cc Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 18:07:56 +0200 Subject: [PATCH 06/29] set parent id in eosfs --- pkg/storage/utils/eosfs/eosfs.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 1815eeb1eb..32adb02aa3 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -2228,6 +2228,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( Etag: fmt.Sprintf("\"%s\"", strings.Trim(eosFileInfo.ETag, "\"")), MimeType: mime.Detect(eosFileInfo.IsDir, path), Size: size, + ParentId: &provider.ResourceId{OpaqueId: fmt.Sprintf("%d", eosFileInfo.FID)}, PermissionSet: fs.permissionSet(ctx, eosFileInfo, owner), Checksum: &xs, Type: getResourceType(eosFileInfo.IsDir), From 9047033be2028ed83f662fb18d67188feaf52d7e Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 18:08:27 +0200 Subject: [PATCH 07/29] Revert "stat as a root" This reverts commit 81ce7b3e66f79d2401549d8ec67c1fa15a187f7b. --- pkg/storage/utils/eosfs/eosfs.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 32adb02aa3..4920403a62 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1223,7 +1223,23 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st log := appctx.GetLogger(ctx) log.Info().Msg("eosfs: get md for ref:" + ref.String()) - auth, err := fs.getRootAuth(ctx) + u, err := getUser(ctx) + if err != nil { + return nil, err + } + + fn := "" + if u.Id.Type == userpb.UserType_USER_TYPE_LIGHTWEIGHT || + u.Id.Type == userpb.UserType_USER_TYPE_FEDERATED { + p, err := fs.resolve(ctx, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error resolving reference") + } + + fn = fs.wrap(ctx, p) + } + + auth, err := fs.getUserAuth(ctx, u, fn) if err != nil { return nil, err } @@ -1250,7 +1266,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st } } - fn := fs.wrap(ctx, p) + fn = fs.wrap(ctx, p) eosFileInfo, err := fs.c.GetFileInfoByPath(ctx, auth, fn) if err != nil { return nil, err From c6ad5ebf20ffc5c7c7edb6e5eb349e352fd2078b Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 18:12:14 +0200 Subject: [PATCH 08/29] set storage id to parent id in storage provider --- internal/grpc/services/storageprovider/storageprovider.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 423f17a4f6..f9adfb7678 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -1559,6 +1559,9 @@ func (s *service) wrap(ctx context.Context, ri *provider.ResourceInfo, prefixMou // For wrapper drivers, the storage ID might already be set. In that case, skip setting it ri.Id.StorageId = s.mountID } + if ri.ParentId != nil && ri.ParentId.StorageId == "" { + ri.ParentId.StorageId = s.mountID + } if prefixMountpoint { // TODO move mount path prefixing to the gateway ri.Path = path.Join(s.mountPath, ri.Path) From c1af35565a9744eaf4520feb6a2e34f21eaef23c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 25 Oct 2022 18:24:58 +0200 Subject: [PATCH 09/29] fix file path --- pkg/eosclient/eosgrpc/eosgrpc.go | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 09c6354938..6d9f28033f 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -27,7 +27,6 @@ import ( "os" "os/exec" "path" - "path/filepath" "strconv" "strings" "syscall" @@ -462,7 +461,7 @@ func (c *Client) GetFileInfoByInode(ctx context.Context, auth eosclient.Authoriz log.Debug().Uint64("inode", inode).Str("rsp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - info, err := c.grpcMDResponseToFileInfo(rsp, "") + info, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { return nil, err } @@ -692,7 +691,7 @@ func (c *Client) GetFileInfoByPath(ctx context.Context, auth eosclient.Authoriza log.Debug().Str("func", "GetFileInfoByPath").Str("path", path).Str("rsp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - info, err := c.grpcMDResponseToFileInfo(rsp, filepath.Dir(path)) + info, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { return nil, err } @@ -1196,7 +1195,7 @@ func (c *Client) List(ctx context.Context, auth eosclient.Authorization, dpath s log.Debug().Str("func", "List").Str("path", dpath).Str("item resp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - myitem, err := c.grpcMDResponseToFileInfo(rsp, dpath) + myitem, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { log.Error().Err(err).Str("func", "List").Str("path", dpath).Str("could not convert item:", fmt.Sprintf("%#v", rsp)).Str("err", err.Error()).Msg("") @@ -1556,7 +1555,7 @@ func getFileFromVersionFolder(p string) string { return path.Join(path.Dir(p), strings.TrimPrefix(path.Base(p), versionPrefix)) } -func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) (*eosclient.FileInfo, error) { +func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileInfo, error) { if st.Cmd == nil && st.Fmd == nil { return nil, errors.Wrap(errtypes.NotSupported(""), "Invalid response (st.Cmd and st.Fmd are nil)") } @@ -1570,11 +1569,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.GID = st.Cmd.Gid fi.MTimeSec = st.Cmd.Mtime.Sec fi.ETag = st.Cmd.Etag - if namepfx == "" { - fi.File = string(st.Cmd.Name) - } else { - fi.File = namepfx + "/" + string(st.Cmd.Name) - } + fi.File = string(st.Cmd.Path) fi.Attrs = make(map[string]string) for k, v := range st.Cmd.Xattrs { @@ -1591,11 +1586,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) ( fi.GID = st.Fmd.Gid fi.MTimeSec = st.Fmd.Mtime.Sec fi.ETag = st.Fmd.Etag - if namepfx == "" { - fi.File = string(st.Fmd.Name) - } else { - fi.File = namepfx + "/" + string(st.Fmd.Name) - } + fi.File = string(st.Fmd.Path) fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { From 969dca39fc8f39bf70d1fe24594e3e397e82ce63 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 11:27:41 +0200 Subject: [PATCH 10/29] clean path returned by eos --- pkg/eosclient/eosgrpc/eosgrpc.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 6d9f28033f..0ff3e0e34f 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1569,7 +1569,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.GID = st.Cmd.Gid fi.MTimeSec = st.Cmd.Mtime.Sec fi.ETag = st.Cmd.Etag - fi.File = string(st.Cmd.Path) + fi.File = path.Clean(string(st.Cmd.Path)) fi.Attrs = make(map[string]string) for k, v := range st.Cmd.Xattrs { @@ -1586,7 +1586,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.GID = st.Fmd.Gid fi.MTimeSec = st.Fmd.Mtime.Sec fi.ETag = st.Fmd.Etag - fi.File = string(st.Fmd.Path) + fi.File = path.Clean(string(st.Fmd.Path)) fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { From 774b7fcdb76b3a3d86e8b16c40b5b6cf6c91b74a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 14:01:22 +0200 Subject: [PATCH 11/29] set xattrs for lock as root --- pkg/storage/utils/eosfs/eosfs.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 4920403a62..b51d0041f7 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -712,7 +712,12 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide return fs.getLock(ctx, auth, user, path, ref) } -func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string, check bool) error { +func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string, check bool) error { + auth, err := fs.getRootAuth(ctx) + if err != nil { + return err + } + encodedLock, err := encodeLock(lock) if err != nil { return errors.Wrap(err, "eosfs: error encoding lock") @@ -812,7 +817,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } } - return fs.setLock(ctx, auth, l, path, true) + return fs.setLock(ctx, l, path, true) } func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { @@ -914,13 +919,7 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } - // set the xattr with the new value - auth, err := fs.getUserAuth(ctx, user, path) - if err != nil { - return errors.Wrap(err, "eosfs: error getting uid and gid for user") - } - - return fs.setLock(ctx, auth, newLock, path, false) + return fs.setLock(ctx, newLock, path, false) } func sameHolder(l1, l2 *provider.Lock) bool { From 58a9040a9146dccb99676de6c55a311de66f0036 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 14:46:39 +0200 Subject: [PATCH 12/29] fix key when setting attribute --- pkg/eosclient/eosgrpc/eosgrpc.go | 2 +- pkg/eosclient/utils.go | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 0ff3e0e34f..591007b6be 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -513,7 +513,7 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr msg := new(erpc.NSRequest_SetXAttrRequest) - var m = map[string][]byte{attr.Key: []byte(attr.Val)} + var m = map[string][]byte{attr.GetKey(): []byte(attr.Val)} msg.Xattrs = m msg.Recursive = recursive diff --git a/pkg/eosclient/utils.go b/pkg/eosclient/utils.go index e0e2c83471..e67e19d26b 100644 --- a/pkg/eosclient/utils.go +++ b/pkg/eosclient/utils.go @@ -18,7 +18,11 @@ package eosclient -import "github.com/cs3org/reva/pkg/errtypes" +import ( + "fmt" + + "github.com/cs3org/reva/pkg/errtypes" +) const ( // SystemAttr is the system extended attribute. @@ -38,3 +42,20 @@ func AttrStringToType(t string) (AttrType, error) { return 0, errtypes.InternalError("attr type not existing") } } + +// AttrTypeToString converts a type to a string representation +func AttrTypeToString(at AttrType) string { + switch at { + case SystemAttr: + return "sys" + case UserAttr: + return "user" + default: + return "invalid" + } +} + +// GetKey returns the key considering the type of attribute +func (a *Attribute) GetKey() string { + return fmt.Sprintf("%s.%s", AttrTypeToString(a.Type), a.Key) +} From 9c3536fffbd1617dac020d7acc4e0b69187b2665 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 17:02:27 +0200 Subject: [PATCH 13/29] stat as root --- pkg/storage/utils/eosfs/eosfs.go | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index b51d0041f7..747246abbf 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1222,23 +1222,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st log := appctx.GetLogger(ctx) log.Info().Msg("eosfs: get md for ref:" + ref.String()) - u, err := getUser(ctx) - if err != nil { - return nil, err - } - - fn := "" - if u.Id.Type == userpb.UserType_USER_TYPE_LIGHTWEIGHT || - u.Id.Type == userpb.UserType_USER_TYPE_FEDERATED { - p, err := fs.resolve(ctx, ref) - if err != nil { - return nil, errors.Wrap(err, "eosfs: error resolving reference") - } - - fn = fs.wrap(ctx, p) - } - - auth, err := fs.getUserAuth(ctx, u, fn) + auth, err := fs.getRootAuth(ctx) if err != nil { return nil, err } @@ -1265,7 +1249,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st } } - fn = fs.wrap(ctx, p) + fn := fs.wrap(ctx, p) eosFileInfo, err := fs.c.GetFileInfoByPath(ctx, auth, fn) if err != nil { return nil, err From 8465c0ae15025630cabb3a794045f602bf2a0b16 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 17:06:43 +0200 Subject: [PATCH 14/29] Revert "stat as root" This reverts commit e865e6e2f8d75d3759f2e3e0c8ca657a2c6ade6b. --- pkg/storage/utils/eosfs/eosfs.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 747246abbf..b51d0041f7 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -1222,7 +1222,23 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st log := appctx.GetLogger(ctx) log.Info().Msg("eosfs: get md for ref:" + ref.String()) - auth, err := fs.getRootAuth(ctx) + u, err := getUser(ctx) + if err != nil { + return nil, err + } + + fn := "" + if u.Id.Type == userpb.UserType_USER_TYPE_LIGHTWEIGHT || + u.Id.Type == userpb.UserType_USER_TYPE_FEDERATED { + p, err := fs.resolve(ctx, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error resolving reference") + } + + fn = fs.wrap(ctx, p) + } + + auth, err := fs.getUserAuth(ctx, u, fn) if err != nil { return nil, err } @@ -1249,7 +1265,7 @@ func (fs *eosfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []st } } - fn := fs.wrap(ctx, p) + fn = fs.wrap(ctx, p) eosFileInfo, err := fs.c.GetFileInfoByPath(ctx, auth, fn) if err != nil { return nil, err From 44424d83fd319f0da8efe6e9e5dac2886ed8257f Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 17:26:10 +0200 Subject: [PATCH 15/29] trim prefix for user attrs --- pkg/eosclient/eosgrpc/eosgrpc.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 591007b6be..42bb171ddd 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1573,7 +1573,9 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.Attrs = make(map[string]string) for k, v := range st.Cmd.Xattrs { - fi.Attrs[k] = string(v) + if !strings.HasPrefix(k, "sys.") { + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) + } } fi.Size = uint64(st.Cmd.TreeSize) @@ -1590,7 +1592,9 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { - fi.Attrs[k] = string(v) + if !strings.HasPrefix(k, "sys.") { + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) + } } fi.Size = st.Fmd.Size From a1c523e59a9233c6ee769b22ff03cb29debc9ebe Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Wed, 26 Oct 2022 17:55:43 +0200 Subject: [PATCH 16/29] do not filter sys attrs --- pkg/eosclient/eosgrpc/eosgrpc.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 42bb171ddd..9106c86eb0 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1573,9 +1573,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.Attrs = make(map[string]string) for k, v := range st.Cmd.Xattrs { - if !strings.HasPrefix(k, "sys.") { - fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) - } + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) } fi.Size = uint64(st.Cmd.TreeSize) @@ -1592,9 +1590,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { - if !strings.HasPrefix(k, "sys.") { - fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) - } + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) } fi.Size = st.Fmd.Size From 6aee9328fcaf2a83b28aaa8f6395953b68624784 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 27 Oct 2022 12:13:59 +0200 Subject: [PATCH 17/29] fix add acl --- pkg/eosclient/eosgrpc/eosgrpc.go | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 9106c86eb0..659245cbfe 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -246,17 +246,6 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat log := appctx.GetLogger(ctx) log.Info().Str("func", "AddACL").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") - acls, err := c.getACLForPath(ctx, auth, path) - if err != nil { - return err - } - - err = acls.SetEntry(a.Type, a.Qualifier, a.Permissions) - if err != nil { - return err - } - sysACL := acls.Serialize() - // Init a new NSRequest rq, err := c.initNSRequest(ctx, auth) if err != nil { @@ -267,7 +256,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat msg.Cmd = erpc.NSRequest_AclRequest_ACL_COMMAND(erpc.NSRequest_AclRequest_ACL_COMMAND_value["MODIFY"]) msg.Type = erpc.NSRequest_AclRequest_ACL_TYPE(erpc.NSRequest_AclRequest_ACL_TYPE_value["SYS_ACL"]) msg.Recursive = true - msg.Rule = sysACL + msg.Rule = a.CitrineSerialize() msg.Id = new(erpc.MDId) msg.Id.Path = []byte(path) From 03a45ec715e0d2ca286f11aaee43d2222f3cb10a Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Oct 2022 16:05:26 +0200 Subject: [PATCH 18/29] fix initiate file upload reference resolution --- pkg/storage/utils/eosfs/upload.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go index 6a926f8ceb..e8fb19d0fb 100644 --- a/pkg/storage/utils/eosfs/upload.go +++ b/pkg/storage/utils/eosfs/upload.go @@ -79,7 +79,11 @@ func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadC } func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) { + p, err := fs.resolve(ctx, ref) + if err != nil { + return nil, err + } return map[string]string{ - "simple": ref.GetPath(), + "simple": p, }, nil } From ed9f5419135975726312dcbc46d68616b1fb6eca Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Oct 2022 16:10:48 +0200 Subject: [PATCH 19/29] fix initiate file upload --- pkg/storage/utils/eosfs/upload.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go index e8fb19d0fb..80aef535e0 100644 --- a/pkg/storage/utils/eosfs/upload.go +++ b/pkg/storage/utils/eosfs/upload.go @@ -83,6 +83,7 @@ func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, up if err != nil { return nil, err } + p = fs.wrap(ctx, p) return map[string]string{ "simple": p, }, nil From 1785e079097f5264457f1fe24e714124971dac1c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 28 Oct 2022 16:15:05 +0200 Subject: [PATCH 20/29] Revert "fix initiate file upload" This reverts commit 265d09187d3ab4d646ace20df2ceaf925788e39f. --- pkg/storage/utils/eosfs/upload.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go index 80aef535e0..e8fb19d0fb 100644 --- a/pkg/storage/utils/eosfs/upload.go +++ b/pkg/storage/utils/eosfs/upload.go @@ -83,7 +83,6 @@ func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, up if err != nil { return nil, err } - p = fs.wrap(ctx, p) return map[string]string{ "simple": p, }, nil From 5c1abaa6089cfb7bff1dbee1f49e3eb3fb7c9429 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Oct 2022 11:40:14 +0100 Subject: [PATCH 21/29] set sys acl as root --- pkg/eosclient/eosgrpc/eosgrpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 659245cbfe..57fc3eaac6 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -247,7 +247,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat log.Info().Str("func", "AddACL").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") // Init a new NSRequest - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, rootAuth) if err != nil { return err } From ce7d9535eeed56307982439409feeace8e271704 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Oct 2022 14:13:44 +0100 Subject: [PATCH 22/29] workaround for adding acl --- pkg/eosclient/eosgrpc/eosgrpc.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 57fc3eaac6..f838310299 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -252,6 +252,10 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat return err } + // workaround to be root + // TODO: removed once fixed in eos grpc + rq.Role.Gid = 1 + msg := new(erpc.NSRequest_AclRequest) msg.Cmd = erpc.NSRequest_AclRequest_ACL_COMMAND(erpc.NSRequest_AclRequest_ACL_COMMAND_value["MODIFY"]) msg.Type = erpc.NSRequest_AclRequest_ACL_TYPE(erpc.NSRequest_AclRequest_ACL_TYPE_value["SYS_ACL"]) From 7b3dc3fce85d90d488383f3194aeb3fba918719c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Oct 2022 14:42:04 +0100 Subject: [PATCH 23/29] fix unset attr --- pkg/eosclient/eosgrpc/eosgrpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index f838310299..abb60643c9 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -556,7 +556,7 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at msg := new(erpc.NSRequest_SetXAttrRequest) - var ktd = []string{attr.Key} + var ktd = []string{attr.GetKey()} msg.Keystodelete = ktd msg.Recursive = recursive From cd9554bff1e0b5f44b36b1378ea7989c5af25c59 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Mon, 31 Oct 2022 14:55:11 +0100 Subject: [PATCH 24/29] unset lock as root --- pkg/storage/utils/eosfs/eosfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index b51d0041f7..06aeecea3c 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -980,7 +980,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov } path = fs.wrap(ctx, path) - auth, err := fs.getUserAuth(ctx, user, path) + auth, err := fs.getRootAuth(ctx) if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") } From a7e175e8fb9986322ff79c557dac2cefcd7f84fb Mon Sep 17 00:00:00 2001 From: Fabrizio Furano Date: Thu, 3 Nov 2022 14:05:40 +0100 Subject: [PATCH 25/29] Avoid crash when getting checksum in a stat request --- pkg/eosclient/eosgrpc/eosgrpc.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index abb60643c9..3b7d240d60 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1587,11 +1587,12 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI } fi.Size = st.Fmd.Size - - xs := &eosclient.Checksum{ - XSSum: hex.EncodeToString(st.Fmd.Checksum.Value), - XSType: st.Fmd.Checksum.Type, - } + + if st.Fmd.Checksum != nil { + xs := &eosclient.Checksum{ + XSSum: hex.EncodeToString(st.Fmd.Checksum.Value), + XSType: st.Fmd.Checksum.Type, + } fi.XS = xs log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") From 4fcc35ff0b78d6ccc5b2d21f5182c5a799bfb171 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Fri, 4 Nov 2022 17:03:41 +0100 Subject: [PATCH 26/29] fix --- pkg/eosclient/eosgrpc/eosgrpc.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 3b7d240d60..29305ea6e1 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -1587,17 +1587,19 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI } fi.Size = st.Fmd.Size - + if st.Fmd.Checksum != nil { xs := &eosclient.Checksum{ XSSum: hex.EncodeToString(st.Fmd.Checksum.Value), XSType: st.Fmd.Checksum.Type, } - fi.XS = xs + fi.XS = xs - log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") - } + log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") + } + + } return fi, nil } From 9a39089b709fa63ded133b5e42cf4c10eb85f6ce Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 29 Nov 2022 12:41:10 +0100 Subject: [PATCH 27/29] add changelog --- changelog/unreleased/eos-grpc-fixes.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changelog/unreleased/eos-grpc-fixes.md diff --git a/changelog/unreleased/eos-grpc-fixes.md b/changelog/unreleased/eos-grpc-fixes.md new file mode 100644 index 0000000000..911b7a7fdf --- /dev/null +++ b/changelog/unreleased/eos-grpc-fixes.md @@ -0,0 +1,6 @@ +Bugfix: EOS grpc fixes + +The shares and the applications were not working +with the EOS grpc storage driver. This fixes both. + +https://github.com/cs3org/reva/pull/3420 \ No newline at end of file From cc0519a1c900ad79795095437241b95516b738c4 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 29 Nov 2022 12:43:43 +0100 Subject: [PATCH 28/29] fix linter --- pkg/eosclient/eosgrpc/eosgrpc.go | 3 --- pkg/eosclient/utils.go | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 29305ea6e1..12123dab2f 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -837,7 +837,6 @@ func (c *Client) SetQuota(ctx context.Context, rootAuth eosclient.Authorization, log.Debug().Str("func", "GetQuota").Str("quotanodes", fmt.Sprintf("%d", len(resp.Quota.Quotanode))).Msg("grpc response") return err - } // Touch creates a 0-size,0-replica file in the EOS namespace. @@ -1596,9 +1595,7 @@ func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileI fi.XS = xs log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") - } - } return fi, nil } diff --git a/pkg/eosclient/utils.go b/pkg/eosclient/utils.go index e67e19d26b..46db124d92 100644 --- a/pkg/eosclient/utils.go +++ b/pkg/eosclient/utils.go @@ -43,7 +43,7 @@ func AttrStringToType(t string) (AttrType, error) { } } -// AttrTypeToString converts a type to a string representation +// AttrTypeToString converts a type to a string representation. func AttrTypeToString(at AttrType) string { switch at { case SystemAttr: @@ -55,7 +55,7 @@ func AttrTypeToString(at AttrType) string { } } -// GetKey returns the key considering the type of attribute +// GetKey returns the key considering the type of attribute. func (a *Attribute) GetKey() string { return fmt.Sprintf("%s.%s", AttrTypeToString(a.Type), a.Key) } From f35ed7e403ae86e81959ddba6b650ec76d1aaf0c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Tue, 29 Nov 2022 14:03:18 +0100 Subject: [PATCH 29/29] fix license --- pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 678e73c862..962b9a0e00 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -1,3 +1,21 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + // @project The CERN Tape Archive (CTA) // @brief CTA-EOS gRPC API for CASTOR-EOS migration // @copyright Copyright 2019 CERN