From 778821e94eed212b707c4d89f7ad04e756b3da59 Mon Sep 17 00:00:00 2001 From: scortier Date: Tue, 5 Apr 2022 10:01:52 +0530 Subject: [PATCH 1/4] feat: add get assets query params filtering to grpc --- Makefile | 2 +- api/proto/odpf/compass/v1beta1/service.pb.go | 1377 +++++++++-------- .../compass/v1beta1/service.pb.validate.go | 88 +- api/v1beta1/asset.go | 55 +- api/v1beta1/asset_test.go | 68 +- asset/config.go | 52 +- third_party/OpenAPI/compass.swagger.json | 49 +- 7 files changed, 973 insertions(+), 718 deletions(-) diff --git a/Makefile b/Makefile index 64934c84..3d17e281 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ NAME="github.com/odpf/columbus" VERSION=$(shell git describe --always --tags 2>/dev/null) COVERFILE="/tmp/columbus.coverprofile" -PROTON_COMMIT := "39dd0f995eec1369eaa4ab811f2142484a085af8" +PROTON_COMMIT := "e95f7d235911669fc8cfc5e40d153189a3ccce32" .PHONY: all build test clean install proto diff --git a/api/proto/odpf/compass/v1beta1/service.pb.go b/api/proto/odpf/compass/v1beta1/service.pb.go index 9b50994d..3a4f9c9a 100644 --- a/api/proto/odpf/compass/v1beta1/service.pb.go +++ b/api/proto/odpf/compass/v1beta1/service.pb.go @@ -1545,12 +1545,16 @@ type GetAllAssetsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Service string `protobuf:"bytes,3,opt,name=service,proto3" json:"service,omitempty"` - Size uint32 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` - Offset uint32 `protobuf:"varint,5,opt,name=offset,proto3" json:"offset,omitempty"` - WithTotal bool `protobuf:"varint,6,opt,name=with_total,json=withTotal,proto3" json:"with_total,omitempty"` + Q string `protobuf:"bytes,1,opt,name=q,proto3" json:"q,omitempty"` + QFields string `protobuf:"bytes,2,opt,name=q_fields,json=qFields,proto3" json:"q_fields,omitempty"` + Types string `protobuf:"bytes,3,opt,name=types,proto3" json:"types,omitempty"` + Services string `protobuf:"bytes,4,opt,name=services,proto3" json:"services,omitempty"` + Sort string `protobuf:"bytes,5,opt,name=sort,proto3" json:"sort,omitempty"` + Direction string `protobuf:"bytes,6,opt,name=direction,proto3" json:"direction,omitempty"` + Data map[string]string `protobuf:"bytes,7,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Size uint32 `protobuf:"varint,8,opt,name=size,proto3" json:"size,omitempty"` + Offset uint32 `protobuf:"varint,9,opt,name=offset,proto3" json:"offset,omitempty"` + WithTotal bool `protobuf:"varint,10,opt,name=with_total,json=withTotal,proto3" json:"with_total,omitempty"` } func (x *GetAllAssetsRequest) Reset() { @@ -1585,27 +1589,55 @@ func (*GetAllAssetsRequest) Descriptor() ([]byte, []int) { return file_odpf_compass_v1beta1_service_proto_rawDescGZIP(), []int{26} } -func (x *GetAllAssetsRequest) GetText() string { +func (x *GetAllAssetsRequest) GetQ() string { if x != nil { - return x.Text + return x.Q } return "" } -func (x *GetAllAssetsRequest) GetType() string { +func (x *GetAllAssetsRequest) GetQFields() string { if x != nil { - return x.Type + return x.QFields } return "" } -func (x *GetAllAssetsRequest) GetService() string { +func (x *GetAllAssetsRequest) GetTypes() string { if x != nil { - return x.Service + return x.Types + } + return "" +} + +func (x *GetAllAssetsRequest) GetServices() string { + if x != nil { + return x.Services + } + return "" +} + +func (x *GetAllAssetsRequest) GetSort() string { + if x != nil { + return x.Sort } return "" } +func (x *GetAllAssetsRequest) GetDirection() string { + if x != nil { + return x.Direction + } + return "" +} + +func (x *GetAllAssetsRequest) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + func (x *GetAllAssetsRequest) GetSize() uint32 { if x != nil { return x.Size @@ -5264,12 +5296,13 @@ type UpsertAssetRequest_BaseAsset struct { Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` + Owners []*User `protobuf:"bytes,8,rep,name=owners,proto3" json:"owners,omitempty"` } func (x *UpsertAssetRequest_BaseAsset) Reset() { *x = UpsertAssetRequest_BaseAsset{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[90] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5282,7 +5315,7 @@ func (x *UpsertAssetRequest_BaseAsset) String() string { func (*UpsertAssetRequest_BaseAsset) ProtoMessage() {} func (x *UpsertAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[90] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5347,6 +5380,13 @@ func (x *UpsertAssetRequest_BaseAsset) GetLabels() *structpb.Struct { return nil } +func (x *UpsertAssetRequest_BaseAsset) GetOwners() []*User { + if x != nil { + return x.Owners + } + return nil +} + type UpsertPatchAssetRequest_BaseAsset struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5359,12 +5399,13 @@ type UpsertPatchAssetRequest_BaseAsset struct { Description *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` Data *structpb.Struct `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` Labels *structpb.Struct `protobuf:"bytes,7,opt,name=labels,proto3" json:"labels,omitempty"` + Owners []*User `protobuf:"bytes,8,rep,name=owners,proto3" json:"owners,omitempty"` } func (x *UpsertPatchAssetRequest_BaseAsset) Reset() { *x = UpsertPatchAssetRequest_BaseAsset{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[91] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5377,7 +5418,7 @@ func (x *UpsertPatchAssetRequest_BaseAsset) String() string { func (*UpsertPatchAssetRequest_BaseAsset) ProtoMessage() {} func (x *UpsertPatchAssetRequest_BaseAsset) ProtoReflect() protoreflect.Message { - mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[91] + mi := &file_odpf_compass_v1beta1_service_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5442,6 +5483,13 @@ func (x *UpsertPatchAssetRequest_BaseAsset) GetLabels() *structpb.Struct { return nil } +func (x *UpsertPatchAssetRequest_BaseAsset) GetOwners() []*User { + if x != nil { + return x.Owners + } + return nil +} + var File_odpf_compass_v1beta1_service_proto protoreflect.FileDescriptor var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ @@ -5749,119 +5797,163 @@ var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, - 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, - 0x10, 0x32, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x74, 0x65, 0x78, - 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, - 0x41, 0x10, 0x32, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x74, 0x79, - 0x70, 0x65, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1e, 0x92, 0x41, 0x13, 0x32, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, - 0x79, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, - 0x01, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x23, 0x92, 0x41, 0x17, 0x32, 0x15, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, - 0x65, 0x74, 0x63, 0x68, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x22, 0x92, 0x41, 0x16, 0x32, 0x14, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0xfa, 0x42, - 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x4a, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x42, 0x2b, 0x92, 0x41, 0x28, 0x32, 0x26, 0x69, 0x66, 0x20, 0x73, 0x65, 0x74, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x09, 0x77, 0x69, 0x74, 0x68, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x5d, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, - 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x85, 0x04, 0x0a, 0x12, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x48, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, 0x0a, 0x09, 0x75, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, - 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x1a, 0x9e, 0x02, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x22, 0x25, 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x89, 0x05, 0x0a, 0x17, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x86, 0x07, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6c, + 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, + 0x0a, 0x01, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x1a, 0x32, 0x18, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, + 0x52, 0x01, 0x71, 0x12, 0x47, 0x0a, 0x08, 0x71, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0x92, 0x41, 0x21, 0x32, 0x1f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0xd0, 0x01, 0x01, 0x52, 0x07, 0x71, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3b, 0x0a, 0x05, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x1a, + 0x32, 0x18, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x70, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, + 0x01, 0x01, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, 0x41, 0x1d, + 0x32, 0x1b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0xfa, 0x42, 0x05, + 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, + 0x38, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, + 0x41, 0x19, 0x32, 0x17, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x61, 0x73, 0x65, + 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0xd0, 0x01, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x57, 0x0a, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x39, 0x92, 0x41, + 0x2e, 0x32, 0x2c, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x73, 0x63, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x73, 0x63, 0x20, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0xe0, 0x01, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x96, 0x01, 0x92, 0x41, 0x92, 0x01, 0x32, 0x8f, 0x01, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x62, 0x61, 0x73, + 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x28, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x29, + 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x65, 0x67, 0x2c, 0x20, 0x22, 0x64, 0x61, 0x74, + 0x61, 0x5b, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5d, 0x22, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x23, 0x92, 0x41, 0x17, 0x32, 0x15, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0xfa, + 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, + 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x22, + 0x92, 0x41, 0x16, 0x32, 0x14, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, + 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0x2b, + 0x92, 0x41, 0x28, 0x32, 0x26, 0x69, 0x66, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x77, 0x69, 0x74, + 0x68, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x5d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x25, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xdb, + 0x04, 0x0a, 0x12, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, - 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x98, 0x03, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4f, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1d, 0x92, 0x41, 0x12, 0x32, - 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, - 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x92, 0x41, + 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, + 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, + 0x3f, 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, + 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, + 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, + 0x65, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0xf4, 0x02, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x4a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x32, 0x18, 0x64, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x2a, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x32, 0x1b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x22, 0x25, 0x0a, 0x13, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xdf, 0x05, 0x0a, 0x17, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, + 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4d, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, + 0x73, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3f, + 0x0a, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x67, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, + 0x43, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x65, + 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x1a, 0xee, 0x03, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1d, 0x92, 0x41, 0x12, 0x32, 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, + 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x92, 0x41, 0x19, 0x32, 0x17, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x01, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x32, 0x18, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x64, + 0x61, 0x74, 0x61, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x17, + 0x92, 0x41, 0x14, 0x32, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x54, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x20, 0x92, 0x41, 0x1d, + 0x32, 0x1b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x52, 0x06, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x22, 0x2a, 0x0a, 0x18, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, @@ -6335,7 +6427,7 @@ var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ 0x30, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x32, 0x9b, 0x43, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, + 0x74, 0x32, 0xd0, 0x43, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb6, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, @@ -6524,399 +6616,402 @@ var file_odpf_compass_v1beta1_service_proto_rawDesc = []byte{ 0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x17, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0xdd, 0x01, 0x0a, 0x0c, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x92, 0x02, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x76, 0x92, 0x41, 0x5c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, - 0x12, 0x47, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x73, 0x1a, 0x3f, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x6c, 0x69, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x29, 0x2e, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xaa, 0x01, 0x92, 0x41, 0x8f, 0x01, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x1a, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x6c, + 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x2c, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, + 0x67, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, + 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x12, 0xc2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, + 0x44, 0x12, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x3c, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, - 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x24, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x81, 0x02, 0x0a, 0x0b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x3c, 0x0a, 0x05, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x12, 0x0d, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x1a, 0x24, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, + 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x02, 0x0a, 0x0b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x92, 0x41, 0x7f, + 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, + 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, + 0x20, 0x75, 0x72, 0x6e, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, + 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf4, 0x01, 0x0a, 0x10, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x2d, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, + 0x92, 0x41, 0x63, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x15, 0x50, 0x61, 0x74, 0x63, + 0x68, 0x2f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x1a, 0x43, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, + 0x74, 0x63, 0x68, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x32, 0x0f, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, + 0x12, 0xc0, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9c, 0x01, 0x92, 0x41, 0x7f, 0x0a, 0x05, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x12, 0x0f, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x1a, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, - 0x77, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x72, 0x6e, 0x2c, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, - 0x2e, 0x20, 0x49, 0x66, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x1a, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xf4, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, - 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x63, 0x0a, 0x05, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x15, 0x50, 0x61, 0x74, 0x63, 0x68, 0x2f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x43, 0x53, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, - 0x62, 0x75, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, 0x74, 0x63, 0x68, 0x20, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x32, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc0, 0x01, 0x0a, 0x0b, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x12, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x1a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, + 0x69, 0x76, 0x65, 0x6e, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0xf7, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, + 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x5c, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x23, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, - 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xf7, - 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, - 0x61, 0x7a, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, 0x92, 0x41, 0x54, 0x0a, 0x05, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x1a, 0x2b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, - 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x67, + 0x61, 0x7a, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, 0x92, + 0x41, 0x54, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x46, 0x69, 0x6e, 0x64, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x73, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x2b, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x73, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x67, 0x61, 0x7a, 0x65, 0x72, 0x73, 0x12, 0xfe, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x33, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, - 0x92, 0x41, 0x51, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x47, 0x65, 0x74, 0x20, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x27, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf5, 0x01, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, - 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, - 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x7f, 0x92, 0x41, 0x4d, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x27, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x26, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, - 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x77, 0x92, 0x41, 0x4c, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, - 0x61, 0x72, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, - 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x1a, 0x20, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0xd8, 0x01, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x79, 0x92, 0x41, 0x51, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, + 0x1f, 0x47, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x1a, 0x27, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, + 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf5, + 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x42, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x92, 0x41, 0x4d, 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x27, 0x73, 0x20, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, + 0x26, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, + 0x31, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, - 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x41, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, - 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, - 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x1a, 0x1c, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, - 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0xdd, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, - 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x92, 0x41, - 0x3e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x14, 0x47, - 0x65, 0x74, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x1a, 0x1a, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x92, 0x41, 0x3c, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, - 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x1a, 0x1f, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, - 0x20, 0x73, 0x74, 0x61, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x1e, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, - 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x0b, - 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x73, - 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x5f, 0x92, 0x41, 0x36, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, - 0x72, 0x12, 0x0f, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x1a, 0x17, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, - 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x81, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x92, 0x41, 0x4c, 0x0a, 0x04, 0x55, 0x73, 0x65, + 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, + 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x20, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, + 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, + 0xd8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x01, 0x92, 0x41, 0x6b, 0x0a, 0x04, 0x55, 0x73, 0x65, - 0x72, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x47, - 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x1a, 0x38, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb8, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x61, 0x67, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, + 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x41, 0x0a, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, + 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x1a, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0xdd, 0x01, 0x0a, 0x11, 0x47, + 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, + 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x53, 0x74, 0x61, + 0x72, 0x72, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x67, 0x92, 0x41, 0x3e, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, + 0x61, 0x72, 0x12, 0x14, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, + 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x1a, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x62, + 0x79, 0x20, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, + 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x09, 0x53, + 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x92, 0x41, 0x3c, 0x0a, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x0d, 0x53, 0x74, 0x61, 0x72, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x1f, 0x4d, 0x61, 0x72, 0x6b, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x65, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x1a, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xc3, 0x01, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x12, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x36, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, + 0x0a, 0x04, 0x53, 0x74, 0x61, 0x72, 0x12, 0x0f, 0x55, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, 0x1a, 0x17, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x20, + 0x6d, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x79, + 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x3f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x0c, - 0x54, 0x61, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x2a, 0x54, 0x61, - 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0xc2, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x37, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x01, 0x92, 0x41, 0x6b, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x63, + 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, + 0x72, 0x1a, 0x38, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, + 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x64, + 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb8, 0x01, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x3f, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x12, 0x0c, 0x54, 0x61, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x1a, 0x2a, 0x54, 0x61, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, + 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, + 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc2, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, + 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb0, 0x01, 0x92, 0x41, 0x5d, 0x0a, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x21, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x62, + 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x33, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x75, 0x72, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, + 0x12, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xf8, 0x01, 0x0a, 0x09, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, - 0x6e, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0xb0, 0x01, 0x92, 0x41, 0x5d, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x21, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x1a, 0x33, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, - 0x74, 0x61, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x20, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x20, 0x75, 0x72, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, - 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xf8, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x92, 0x41, 0x43, 0x0a, + 0x03, 0x54, 0x61, 0x67, 0x12, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, + 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x22, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, + 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x1a, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, + 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xf5, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x92, 0x41, 0x43, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x92, 0x41, 0x43, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, + 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4d, 0x1a, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, + 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0xf5, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x26, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x96, 0x01, 0x92, 0x41, 0x43, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x18, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x20, 0x74, - 0x61, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xe9, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x64, 0x70, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xe9, 0x01, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, + 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, + 0x92, 0x41, 0x3f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x27, 0x73, 0x20, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x23, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xd8, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, + 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x92, 0x41, 0x3d, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x15, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x1a, 0x1f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x12, 0xce, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x42, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x79, 0x92, 0x41, 0x3f, 0x0a, 0x03, - 0x54, 0x61, 0x67, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x27, 0x73, 0x20, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x23, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, - 0x67, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, - 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xd8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, - 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6f, - 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, - 0x92, 0x41, 0x3d, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x1a, - 0x1f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, - 0xce, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x92, 0x41, 0x33, 0x0a, 0x03, 0x54, 0x61, 0x67, - 0x12, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x1a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, - 0x77, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0xd2, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x92, 0x41, 0x33, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xd2, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x65, 0x92, 0x41, 0x34, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x1a, 0x19, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, + 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, + 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xe3, 0x01, 0x0a, 0x11, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x67, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, - 0x92, 0x41, 0x34, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, - 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x19, 0x47, 0x65, - 0x74, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x12, 0xe3, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6d, 0x92, 0x41, - 0x39, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, - 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, - 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe1, 0x01, 0x0a, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x6b, 0x92, 0x41, 0x3a, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x15, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x1a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x42, - 0xae, 0x05, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x42, 0x13, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, - 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, - 0x73, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0xc4, 0x04, 0x12, 0x97, 0x01, 0x0a, - 0x07, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x12, 0x3c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x2a, 0x47, 0x0a, 0x12, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, - 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x31, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x62, 0x6c, - 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, - 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x39, 0x2a, 0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x51, - 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, 0x4a, 0x0a, 0x30, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x69, 0x73, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x4b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x44, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x4a, - 0x0a, 0x03, 0x34, 0x30, 0x39, 0x12, 0x43, 0x0a, 0x29, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x5c, 0x0a, 0x03, 0x35, 0x30, - 0x30, 0x12, 0x55, 0x0a, 0x3b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x73, 0x20, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2e, - 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x72, 0x36, 0x0a, 0x12, 0x4d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x12, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x67, 0x69, 0x74, - 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x6d, 0x92, 0x41, 0x39, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x11, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x1f, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0xe1, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6b, 0x92, 0x41, 0x3a, 0x0a, 0x03, 0x54, 0x61, + 0x67, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x67, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x75, 0x72, 0x6e, 0x7d, 0x42, 0xae, 0x05, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x42, + 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0xc4, + 0x04, 0x12, 0x97, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x12, 0x3c, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, + 0x6f, 0x75, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x73, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x52, 0x50, 0x43, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x52, + 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x2a, 0x47, 0x0a, 0x12, 0x41, + 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x32, 0x2e, + 0x30, 0x12, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x73, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x39, 0x2a, 0x02, 0x01, 0x02, 0x32, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x52, 0x51, 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, 0x4a, 0x0a, 0x30, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x2e, 0x12, 0x16, + 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x4b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x44, 0x0a, + 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x4a, 0x0a, 0x03, 0x34, 0x30, 0x39, 0x12, 0x43, 0x0a, 0x29, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x5c, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x55, 0x0a, 0x3b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x73, 0x20, 0x69, + 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x72, 0x6f, 0x6e, + 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x2e, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x72, 0x36, 0x0a, + 0x12, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x73, 0x73, 0x12, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x67, 0x69, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x73, 0x73, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6931,7 +7026,7 @@ func file_odpf_compass_v1beta1_service_proto_rawDescGZIP() []byte { return file_odpf_compass_v1beta1_service_proto_rawDescData } -var file_odpf_compass_v1beta1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 92) +var file_odpf_compass_v1beta1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 93) var file_odpf_compass_v1beta1_service_proto_goTypes = []interface{}{ (*GetAllDiscussionsRequest)(nil), // 0: odpf.compass.v1beta1.GetAllDiscussionsRequest (*GetAllDiscussionsResponse)(nil), // 1: odpf.compass.v1beta1.GetAllDiscussionsResponse @@ -7023,12 +7118,13 @@ var file_odpf_compass_v1beta1_service_proto_goTypes = []interface{}{ nil, // 87: odpf.compass.v1beta1.SearchAssetsRequest.QueryEntry nil, // 88: odpf.compass.v1beta1.SuggestAssetsRequest.FilterEntry nil, // 89: odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry - (*UpsertAssetRequest_BaseAsset)(nil), // 90: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset - (*UpsertPatchAssetRequest_BaseAsset)(nil), // 91: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset - (*timestamppb.Timestamp)(nil), // 92: google.protobuf.Timestamp - (*structpb.Value)(nil), // 93: google.protobuf.Value - (*structpb.Struct)(nil), // 94: google.protobuf.Struct - (*wrapperspb.StringValue)(nil), // 95: google.protobuf.StringValue + nil, // 90: odpf.compass.v1beta1.GetAllAssetsRequest.DataEntry + (*UpsertAssetRequest_BaseAsset)(nil), // 91: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset + (*UpsertPatchAssetRequest_BaseAsset)(nil), // 92: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset + (*timestamppb.Timestamp)(nil), // 93: google.protobuf.Timestamp + (*structpb.Value)(nil), // 94: google.protobuf.Value + (*structpb.Struct)(nil), // 95: google.protobuf.Struct + (*wrapperspb.StringValue)(nil), // 96: google.protobuf.StringValue } var file_odpf_compass_v1beta1_service_proto_depIdxs = []int32{ 77, // 0: odpf.compass.v1beta1.GetAllDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion @@ -7042,146 +7138,149 @@ var file_odpf_compass_v1beta1_service_proto_depIdxs = []int32{ 89, // 8: odpf.compass.v1beta1.SuggestAssetsRequest.query:type_name -> odpf.compass.v1beta1.SuggestAssetsRequest.QueryEntry 79, // 9: odpf.compass.v1beta1.GetGraphResponse.data:type_name -> odpf.compass.v1beta1.LineageEdge 85, // 10: odpf.compass.v1beta1.GetAllTypesResponse.data:type_name -> odpf.compass.v1beta1.Type - 76, // 11: odpf.compass.v1beta1.GetAllAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset - 76, // 12: odpf.compass.v1beta1.GetAssetByIDResponse.data:type_name -> odpf.compass.v1beta1.Asset - 90, // 13: odpf.compass.v1beta1.UpsertAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset - 80, // 14: odpf.compass.v1beta1.UpsertAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode - 80, // 15: odpf.compass.v1beta1.UpsertAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode - 91, // 16: odpf.compass.v1beta1.UpsertPatchAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset - 80, // 17: odpf.compass.v1beta1.UpsertPatchAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode - 80, // 18: odpf.compass.v1beta1.UpsertPatchAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode - 74, // 19: odpf.compass.v1beta1.GetAssetStargazersResponse.data:type_name -> odpf.compass.v1beta1.User - 76, // 20: odpf.compass.v1beta1.GetAssetVersionHistoryResponse.data:type_name -> odpf.compass.v1beta1.Asset - 76, // 21: odpf.compass.v1beta1.GetAssetByVersionResponse.data:type_name -> odpf.compass.v1beta1.Asset - 76, // 22: odpf.compass.v1beta1.GetUserStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset - 76, // 23: odpf.compass.v1beta1.GetMyStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset - 76, // 24: odpf.compass.v1beta1.GetMyStarredAssetResponse.data:type_name -> odpf.compass.v1beta1.Asset - 77, // 25: odpf.compass.v1beta1.GetMyDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion - 82, // 26: odpf.compass.v1beta1.CreateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue - 81, // 27: odpf.compass.v1beta1.CreateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag - 81, // 28: odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse.data:type_name -> odpf.compass.v1beta1.Tag - 82, // 29: odpf.compass.v1beta1.UpdateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue - 81, // 30: odpf.compass.v1beta1.UpdateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag - 81, // 31: odpf.compass.v1beta1.GetTagsByRecordResponse.data:type_name -> odpf.compass.v1beta1.Tag - 83, // 32: odpf.compass.v1beta1.GetAllTagTemplatesResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate - 84, // 33: odpf.compass.v1beta1.CreateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField - 83, // 34: odpf.compass.v1beta1.CreateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate - 83, // 35: odpf.compass.v1beta1.GetTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate - 84, // 36: odpf.compass.v1beta1.UpdateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField - 83, // 37: odpf.compass.v1beta1.UpdateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate - 92, // 38: odpf.compass.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp - 92, // 39: odpf.compass.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp - 93, // 40: odpf.compass.v1beta1.Change.from:type_name -> google.protobuf.Value - 93, // 41: odpf.compass.v1beta1.Change.to:type_name -> google.protobuf.Value - 94, // 42: odpf.compass.v1beta1.Asset.data:type_name -> google.protobuf.Struct - 94, // 43: odpf.compass.v1beta1.Asset.labels:type_name -> google.protobuf.Struct - 74, // 44: odpf.compass.v1beta1.Asset.owners:type_name -> odpf.compass.v1beta1.User - 74, // 45: odpf.compass.v1beta1.Asset.updated_by:type_name -> odpf.compass.v1beta1.User - 75, // 46: odpf.compass.v1beta1.Asset.changelog:type_name -> odpf.compass.v1beta1.Change - 92, // 47: odpf.compass.v1beta1.Asset.created_at:type_name -> google.protobuf.Timestamp - 92, // 48: odpf.compass.v1beta1.Asset.updated_at:type_name -> google.protobuf.Timestamp - 74, // 49: odpf.compass.v1beta1.Discussion.owner:type_name -> odpf.compass.v1beta1.User - 92, // 50: odpf.compass.v1beta1.Discussion.created_at:type_name -> google.protobuf.Timestamp - 92, // 51: odpf.compass.v1beta1.Discussion.updated_at:type_name -> google.protobuf.Timestamp - 74, // 52: odpf.compass.v1beta1.Comment.owner:type_name -> odpf.compass.v1beta1.User - 74, // 53: odpf.compass.v1beta1.Comment.updated_by:type_name -> odpf.compass.v1beta1.User - 92, // 54: odpf.compass.v1beta1.Comment.created_at:type_name -> google.protobuf.Timestamp - 92, // 55: odpf.compass.v1beta1.Comment.updated_at:type_name -> google.protobuf.Timestamp - 94, // 56: odpf.compass.v1beta1.LineageEdge.prop:type_name -> google.protobuf.Struct - 82, // 57: odpf.compass.v1beta1.Tag.tag_values:type_name -> odpf.compass.v1beta1.TagValue - 93, // 58: odpf.compass.v1beta1.TagValue.field_value:type_name -> google.protobuf.Value - 92, // 59: odpf.compass.v1beta1.TagValue.created_at:type_name -> google.protobuf.Timestamp - 92, // 60: odpf.compass.v1beta1.TagValue.updated_at:type_name -> google.protobuf.Timestamp - 84, // 61: odpf.compass.v1beta1.TagTemplate.fields:type_name -> odpf.compass.v1beta1.TagTemplateField - 92, // 62: odpf.compass.v1beta1.TagTemplate.created_at:type_name -> google.protobuf.Timestamp - 92, // 63: odpf.compass.v1beta1.TagTemplate.updated_at:type_name -> google.protobuf.Timestamp - 92, // 64: odpf.compass.v1beta1.TagTemplateField.created_at:type_name -> google.protobuf.Timestamp - 92, // 65: odpf.compass.v1beta1.TagTemplateField.updated_at:type_name -> google.protobuf.Timestamp - 94, // 66: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct - 94, // 67: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct - 95, // 68: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.name:type_name -> google.protobuf.StringValue - 95, // 69: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.description:type_name -> google.protobuf.StringValue - 94, // 70: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct - 94, // 71: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct - 0, // 72: odpf.compass.v1beta1.CompassService.GetAllDiscussions:input_type -> odpf.compass.v1beta1.GetAllDiscussionsRequest - 2, // 73: odpf.compass.v1beta1.CompassService.CreateDiscussion:input_type -> odpf.compass.v1beta1.CreateDiscussionRequest - 4, // 74: odpf.compass.v1beta1.CompassService.GetDiscussion:input_type -> odpf.compass.v1beta1.GetDiscussionRequest - 6, // 75: odpf.compass.v1beta1.CompassService.PatchDiscussion:input_type -> odpf.compass.v1beta1.PatchDiscussionRequest - 7, // 76: odpf.compass.v1beta1.CompassService.CreateComment:input_type -> odpf.compass.v1beta1.CreateCommentRequest - 10, // 77: odpf.compass.v1beta1.CompassService.GetAllComments:input_type -> odpf.compass.v1beta1.GetAllCommentsRequest - 12, // 78: odpf.compass.v1beta1.CompassService.GetComment:input_type -> odpf.compass.v1beta1.GetCommentRequest - 14, // 79: odpf.compass.v1beta1.CompassService.UpdateComment:input_type -> odpf.compass.v1beta1.UpdateCommentRequest - 16, // 80: odpf.compass.v1beta1.CompassService.DeleteComment:input_type -> odpf.compass.v1beta1.DeleteCommentRequest - 18, // 81: odpf.compass.v1beta1.CompassService.SearchAssets:input_type -> odpf.compass.v1beta1.SearchAssetsRequest - 20, // 82: odpf.compass.v1beta1.CompassService.SuggestAssets:input_type -> odpf.compass.v1beta1.SuggestAssetsRequest - 22, // 83: odpf.compass.v1beta1.CompassService.GetGraph:input_type -> odpf.compass.v1beta1.GetGraphRequest - 24, // 84: odpf.compass.v1beta1.CompassService.GetAllTypes:input_type -> odpf.compass.v1beta1.GetAllTypesRequest - 26, // 85: odpf.compass.v1beta1.CompassService.GetAllAssets:input_type -> odpf.compass.v1beta1.GetAllAssetsRequest - 28, // 86: odpf.compass.v1beta1.CompassService.GetAssetByID:input_type -> odpf.compass.v1beta1.GetAssetByIDRequest - 30, // 87: odpf.compass.v1beta1.CompassService.UpsertAsset:input_type -> odpf.compass.v1beta1.UpsertAssetRequest - 32, // 88: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:input_type -> odpf.compass.v1beta1.UpsertPatchAssetRequest - 34, // 89: odpf.compass.v1beta1.CompassService.DeleteAsset:input_type -> odpf.compass.v1beta1.DeleteAssetRequest - 36, // 90: odpf.compass.v1beta1.CompassService.GetAssetStargazers:input_type -> odpf.compass.v1beta1.GetAssetStargazersRequest - 38, // 91: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:input_type -> odpf.compass.v1beta1.GetAssetVersionHistoryRequest - 40, // 92: odpf.compass.v1beta1.CompassService.GetAssetByVersion:input_type -> odpf.compass.v1beta1.GetAssetByVersionRequest - 42, // 93: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:input_type -> odpf.compass.v1beta1.GetUserStarredAssetsRequest - 44, // 94: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:input_type -> odpf.compass.v1beta1.GetMyStarredAssetsRequest - 46, // 95: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:input_type -> odpf.compass.v1beta1.GetMyStarredAssetRequest - 48, // 96: odpf.compass.v1beta1.CompassService.StarAsset:input_type -> odpf.compass.v1beta1.StarAssetRequest - 50, // 97: odpf.compass.v1beta1.CompassService.UnstarAsset:input_type -> odpf.compass.v1beta1.UnstarAssetRequest - 52, // 98: odpf.compass.v1beta1.CompassService.GetMyDiscussions:input_type -> odpf.compass.v1beta1.GetMyDiscussionsRequest - 54, // 99: odpf.compass.v1beta1.CompassService.CreateTag:input_type -> odpf.compass.v1beta1.CreateTagRequest - 56, // 100: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:input_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateRequest - 58, // 101: odpf.compass.v1beta1.CompassService.UpdateTag:input_type -> odpf.compass.v1beta1.UpdateTagRequest - 60, // 102: odpf.compass.v1beta1.CompassService.DeleteTag:input_type -> odpf.compass.v1beta1.DeleteTagRequest - 62, // 103: odpf.compass.v1beta1.CompassService.GetTagsByRecord:input_type -> odpf.compass.v1beta1.GetTagsByRecordRequest - 64, // 104: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:input_type -> odpf.compass.v1beta1.GetAllTagTemplatesRequest - 66, // 105: odpf.compass.v1beta1.CompassService.CreateTagTemplate:input_type -> odpf.compass.v1beta1.CreateTagTemplateRequest - 68, // 106: odpf.compass.v1beta1.CompassService.GetTagTemplate:input_type -> odpf.compass.v1beta1.GetTagTemplateRequest - 70, // 107: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:input_type -> odpf.compass.v1beta1.UpdateTagTemplateRequest - 72, // 108: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:input_type -> odpf.compass.v1beta1.DeleteTagTemplateRequest - 1, // 109: odpf.compass.v1beta1.CompassService.GetAllDiscussions:output_type -> odpf.compass.v1beta1.GetAllDiscussionsResponse - 3, // 110: odpf.compass.v1beta1.CompassService.CreateDiscussion:output_type -> odpf.compass.v1beta1.CreateDiscussionResponse - 5, // 111: odpf.compass.v1beta1.CompassService.GetDiscussion:output_type -> odpf.compass.v1beta1.GetDiscussionResponse - 8, // 112: odpf.compass.v1beta1.CompassService.PatchDiscussion:output_type -> odpf.compass.v1beta1.PatchDiscussionResponse - 9, // 113: odpf.compass.v1beta1.CompassService.CreateComment:output_type -> odpf.compass.v1beta1.CreateCommentResponse - 11, // 114: odpf.compass.v1beta1.CompassService.GetAllComments:output_type -> odpf.compass.v1beta1.GetAllCommentsResponse - 13, // 115: odpf.compass.v1beta1.CompassService.GetComment:output_type -> odpf.compass.v1beta1.GetCommentResponse - 15, // 116: odpf.compass.v1beta1.CompassService.UpdateComment:output_type -> odpf.compass.v1beta1.UpdateCommentResponse - 17, // 117: odpf.compass.v1beta1.CompassService.DeleteComment:output_type -> odpf.compass.v1beta1.DeleteCommentResponse - 19, // 118: odpf.compass.v1beta1.CompassService.SearchAssets:output_type -> odpf.compass.v1beta1.SearchAssetsResponse - 21, // 119: odpf.compass.v1beta1.CompassService.SuggestAssets:output_type -> odpf.compass.v1beta1.SuggestAssetsResponse - 23, // 120: odpf.compass.v1beta1.CompassService.GetGraph:output_type -> odpf.compass.v1beta1.GetGraphResponse - 25, // 121: odpf.compass.v1beta1.CompassService.GetAllTypes:output_type -> odpf.compass.v1beta1.GetAllTypesResponse - 27, // 122: odpf.compass.v1beta1.CompassService.GetAllAssets:output_type -> odpf.compass.v1beta1.GetAllAssetsResponse - 29, // 123: odpf.compass.v1beta1.CompassService.GetAssetByID:output_type -> odpf.compass.v1beta1.GetAssetByIDResponse - 31, // 124: odpf.compass.v1beta1.CompassService.UpsertAsset:output_type -> odpf.compass.v1beta1.UpsertAssetResponse - 33, // 125: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:output_type -> odpf.compass.v1beta1.UpsertPatchAssetResponse - 35, // 126: odpf.compass.v1beta1.CompassService.DeleteAsset:output_type -> odpf.compass.v1beta1.DeleteAssetResponse - 37, // 127: odpf.compass.v1beta1.CompassService.GetAssetStargazers:output_type -> odpf.compass.v1beta1.GetAssetStargazersResponse - 39, // 128: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:output_type -> odpf.compass.v1beta1.GetAssetVersionHistoryResponse - 41, // 129: odpf.compass.v1beta1.CompassService.GetAssetByVersion:output_type -> odpf.compass.v1beta1.GetAssetByVersionResponse - 43, // 130: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:output_type -> odpf.compass.v1beta1.GetUserStarredAssetsResponse - 45, // 131: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:output_type -> odpf.compass.v1beta1.GetMyStarredAssetsResponse - 47, // 132: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:output_type -> odpf.compass.v1beta1.GetMyStarredAssetResponse - 49, // 133: odpf.compass.v1beta1.CompassService.StarAsset:output_type -> odpf.compass.v1beta1.StarAssetResponse - 51, // 134: odpf.compass.v1beta1.CompassService.UnstarAsset:output_type -> odpf.compass.v1beta1.UnstarAssetResponse - 53, // 135: odpf.compass.v1beta1.CompassService.GetMyDiscussions:output_type -> odpf.compass.v1beta1.GetMyDiscussionsResponse - 55, // 136: odpf.compass.v1beta1.CompassService.CreateTag:output_type -> odpf.compass.v1beta1.CreateTagResponse - 57, // 137: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:output_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse - 59, // 138: odpf.compass.v1beta1.CompassService.UpdateTag:output_type -> odpf.compass.v1beta1.UpdateTagResponse - 61, // 139: odpf.compass.v1beta1.CompassService.DeleteTag:output_type -> odpf.compass.v1beta1.DeleteTagResponse - 63, // 140: odpf.compass.v1beta1.CompassService.GetTagsByRecord:output_type -> odpf.compass.v1beta1.GetTagsByRecordResponse - 65, // 141: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:output_type -> odpf.compass.v1beta1.GetAllTagTemplatesResponse - 67, // 142: odpf.compass.v1beta1.CompassService.CreateTagTemplate:output_type -> odpf.compass.v1beta1.CreateTagTemplateResponse - 69, // 143: odpf.compass.v1beta1.CompassService.GetTagTemplate:output_type -> odpf.compass.v1beta1.GetTagTemplateResponse - 71, // 144: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:output_type -> odpf.compass.v1beta1.UpdateTagTemplateResponse - 73, // 145: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:output_type -> odpf.compass.v1beta1.DeleteTagTemplateResponse - 109, // [109:146] is the sub-list for method output_type - 72, // [72:109] is the sub-list for method input_type - 72, // [72:72] is the sub-list for extension type_name - 72, // [72:72] is the sub-list for extension extendee - 0, // [0:72] is the sub-list for field type_name + 90, // 11: odpf.compass.v1beta1.GetAllAssetsRequest.data:type_name -> odpf.compass.v1beta1.GetAllAssetsRequest.DataEntry + 76, // 12: odpf.compass.v1beta1.GetAllAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 13: odpf.compass.v1beta1.GetAssetByIDResponse.data:type_name -> odpf.compass.v1beta1.Asset + 91, // 14: odpf.compass.v1beta1.UpsertAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset + 80, // 15: odpf.compass.v1beta1.UpsertAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode + 80, // 16: odpf.compass.v1beta1.UpsertAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode + 92, // 17: odpf.compass.v1beta1.UpsertPatchAssetRequest.asset:type_name -> odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset + 80, // 18: odpf.compass.v1beta1.UpsertPatchAssetRequest.upstreams:type_name -> odpf.compass.v1beta1.LineageNode + 80, // 19: odpf.compass.v1beta1.UpsertPatchAssetRequest.downstreams:type_name -> odpf.compass.v1beta1.LineageNode + 74, // 20: odpf.compass.v1beta1.GetAssetStargazersResponse.data:type_name -> odpf.compass.v1beta1.User + 76, // 21: odpf.compass.v1beta1.GetAssetVersionHistoryResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 22: odpf.compass.v1beta1.GetAssetByVersionResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 23: odpf.compass.v1beta1.GetUserStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 24: odpf.compass.v1beta1.GetMyStarredAssetsResponse.data:type_name -> odpf.compass.v1beta1.Asset + 76, // 25: odpf.compass.v1beta1.GetMyStarredAssetResponse.data:type_name -> odpf.compass.v1beta1.Asset + 77, // 26: odpf.compass.v1beta1.GetMyDiscussionsResponse.data:type_name -> odpf.compass.v1beta1.Discussion + 82, // 27: odpf.compass.v1beta1.CreateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 81, // 28: odpf.compass.v1beta1.CreateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag + 81, // 29: odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse.data:type_name -> odpf.compass.v1beta1.Tag + 82, // 30: odpf.compass.v1beta1.UpdateTagRequest.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 81, // 31: odpf.compass.v1beta1.UpdateTagResponse.data:type_name -> odpf.compass.v1beta1.Tag + 81, // 32: odpf.compass.v1beta1.GetTagsByRecordResponse.data:type_name -> odpf.compass.v1beta1.Tag + 83, // 33: odpf.compass.v1beta1.GetAllTagTemplatesResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 84, // 34: odpf.compass.v1beta1.CreateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 83, // 35: odpf.compass.v1beta1.CreateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 83, // 36: odpf.compass.v1beta1.GetTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 84, // 37: odpf.compass.v1beta1.UpdateTagTemplateRequest.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 83, // 38: odpf.compass.v1beta1.UpdateTagTemplateResponse.data:type_name -> odpf.compass.v1beta1.TagTemplate + 93, // 39: odpf.compass.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp + 93, // 40: odpf.compass.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp + 94, // 41: odpf.compass.v1beta1.Change.from:type_name -> google.protobuf.Value + 94, // 42: odpf.compass.v1beta1.Change.to:type_name -> google.protobuf.Value + 95, // 43: odpf.compass.v1beta1.Asset.data:type_name -> google.protobuf.Struct + 95, // 44: odpf.compass.v1beta1.Asset.labels:type_name -> google.protobuf.Struct + 74, // 45: odpf.compass.v1beta1.Asset.owners:type_name -> odpf.compass.v1beta1.User + 74, // 46: odpf.compass.v1beta1.Asset.updated_by:type_name -> odpf.compass.v1beta1.User + 75, // 47: odpf.compass.v1beta1.Asset.changelog:type_name -> odpf.compass.v1beta1.Change + 93, // 48: odpf.compass.v1beta1.Asset.created_at:type_name -> google.protobuf.Timestamp + 93, // 49: odpf.compass.v1beta1.Asset.updated_at:type_name -> google.protobuf.Timestamp + 74, // 50: odpf.compass.v1beta1.Discussion.owner:type_name -> odpf.compass.v1beta1.User + 93, // 51: odpf.compass.v1beta1.Discussion.created_at:type_name -> google.protobuf.Timestamp + 93, // 52: odpf.compass.v1beta1.Discussion.updated_at:type_name -> google.protobuf.Timestamp + 74, // 53: odpf.compass.v1beta1.Comment.owner:type_name -> odpf.compass.v1beta1.User + 74, // 54: odpf.compass.v1beta1.Comment.updated_by:type_name -> odpf.compass.v1beta1.User + 93, // 55: odpf.compass.v1beta1.Comment.created_at:type_name -> google.protobuf.Timestamp + 93, // 56: odpf.compass.v1beta1.Comment.updated_at:type_name -> google.protobuf.Timestamp + 95, // 57: odpf.compass.v1beta1.LineageEdge.prop:type_name -> google.protobuf.Struct + 82, // 58: odpf.compass.v1beta1.Tag.tag_values:type_name -> odpf.compass.v1beta1.TagValue + 94, // 59: odpf.compass.v1beta1.TagValue.field_value:type_name -> google.protobuf.Value + 93, // 60: odpf.compass.v1beta1.TagValue.created_at:type_name -> google.protobuf.Timestamp + 93, // 61: odpf.compass.v1beta1.TagValue.updated_at:type_name -> google.protobuf.Timestamp + 84, // 62: odpf.compass.v1beta1.TagTemplate.fields:type_name -> odpf.compass.v1beta1.TagTemplateField + 93, // 63: odpf.compass.v1beta1.TagTemplate.created_at:type_name -> google.protobuf.Timestamp + 93, // 64: odpf.compass.v1beta1.TagTemplate.updated_at:type_name -> google.protobuf.Timestamp + 93, // 65: odpf.compass.v1beta1.TagTemplateField.created_at:type_name -> google.protobuf.Timestamp + 93, // 66: odpf.compass.v1beta1.TagTemplateField.updated_at:type_name -> google.protobuf.Timestamp + 95, // 67: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct + 95, // 68: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct + 74, // 69: odpf.compass.v1beta1.UpsertAssetRequest.BaseAsset.owners:type_name -> odpf.compass.v1beta1.User + 96, // 70: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.name:type_name -> google.protobuf.StringValue + 96, // 71: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.description:type_name -> google.protobuf.StringValue + 95, // 72: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.data:type_name -> google.protobuf.Struct + 95, // 73: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.labels:type_name -> google.protobuf.Struct + 74, // 74: odpf.compass.v1beta1.UpsertPatchAssetRequest.BaseAsset.owners:type_name -> odpf.compass.v1beta1.User + 0, // 75: odpf.compass.v1beta1.CompassService.GetAllDiscussions:input_type -> odpf.compass.v1beta1.GetAllDiscussionsRequest + 2, // 76: odpf.compass.v1beta1.CompassService.CreateDiscussion:input_type -> odpf.compass.v1beta1.CreateDiscussionRequest + 4, // 77: odpf.compass.v1beta1.CompassService.GetDiscussion:input_type -> odpf.compass.v1beta1.GetDiscussionRequest + 6, // 78: odpf.compass.v1beta1.CompassService.PatchDiscussion:input_type -> odpf.compass.v1beta1.PatchDiscussionRequest + 7, // 79: odpf.compass.v1beta1.CompassService.CreateComment:input_type -> odpf.compass.v1beta1.CreateCommentRequest + 10, // 80: odpf.compass.v1beta1.CompassService.GetAllComments:input_type -> odpf.compass.v1beta1.GetAllCommentsRequest + 12, // 81: odpf.compass.v1beta1.CompassService.GetComment:input_type -> odpf.compass.v1beta1.GetCommentRequest + 14, // 82: odpf.compass.v1beta1.CompassService.UpdateComment:input_type -> odpf.compass.v1beta1.UpdateCommentRequest + 16, // 83: odpf.compass.v1beta1.CompassService.DeleteComment:input_type -> odpf.compass.v1beta1.DeleteCommentRequest + 18, // 84: odpf.compass.v1beta1.CompassService.SearchAssets:input_type -> odpf.compass.v1beta1.SearchAssetsRequest + 20, // 85: odpf.compass.v1beta1.CompassService.SuggestAssets:input_type -> odpf.compass.v1beta1.SuggestAssetsRequest + 22, // 86: odpf.compass.v1beta1.CompassService.GetGraph:input_type -> odpf.compass.v1beta1.GetGraphRequest + 24, // 87: odpf.compass.v1beta1.CompassService.GetAllTypes:input_type -> odpf.compass.v1beta1.GetAllTypesRequest + 26, // 88: odpf.compass.v1beta1.CompassService.GetAllAssets:input_type -> odpf.compass.v1beta1.GetAllAssetsRequest + 28, // 89: odpf.compass.v1beta1.CompassService.GetAssetByID:input_type -> odpf.compass.v1beta1.GetAssetByIDRequest + 30, // 90: odpf.compass.v1beta1.CompassService.UpsertAsset:input_type -> odpf.compass.v1beta1.UpsertAssetRequest + 32, // 91: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:input_type -> odpf.compass.v1beta1.UpsertPatchAssetRequest + 34, // 92: odpf.compass.v1beta1.CompassService.DeleteAsset:input_type -> odpf.compass.v1beta1.DeleteAssetRequest + 36, // 93: odpf.compass.v1beta1.CompassService.GetAssetStargazers:input_type -> odpf.compass.v1beta1.GetAssetStargazersRequest + 38, // 94: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:input_type -> odpf.compass.v1beta1.GetAssetVersionHistoryRequest + 40, // 95: odpf.compass.v1beta1.CompassService.GetAssetByVersion:input_type -> odpf.compass.v1beta1.GetAssetByVersionRequest + 42, // 96: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:input_type -> odpf.compass.v1beta1.GetUserStarredAssetsRequest + 44, // 97: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:input_type -> odpf.compass.v1beta1.GetMyStarredAssetsRequest + 46, // 98: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:input_type -> odpf.compass.v1beta1.GetMyStarredAssetRequest + 48, // 99: odpf.compass.v1beta1.CompassService.StarAsset:input_type -> odpf.compass.v1beta1.StarAssetRequest + 50, // 100: odpf.compass.v1beta1.CompassService.UnstarAsset:input_type -> odpf.compass.v1beta1.UnstarAssetRequest + 52, // 101: odpf.compass.v1beta1.CompassService.GetMyDiscussions:input_type -> odpf.compass.v1beta1.GetMyDiscussionsRequest + 54, // 102: odpf.compass.v1beta1.CompassService.CreateTag:input_type -> odpf.compass.v1beta1.CreateTagRequest + 56, // 103: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:input_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateRequest + 58, // 104: odpf.compass.v1beta1.CompassService.UpdateTag:input_type -> odpf.compass.v1beta1.UpdateTagRequest + 60, // 105: odpf.compass.v1beta1.CompassService.DeleteTag:input_type -> odpf.compass.v1beta1.DeleteTagRequest + 62, // 106: odpf.compass.v1beta1.CompassService.GetTagsByRecord:input_type -> odpf.compass.v1beta1.GetTagsByRecordRequest + 64, // 107: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:input_type -> odpf.compass.v1beta1.GetAllTagTemplatesRequest + 66, // 108: odpf.compass.v1beta1.CompassService.CreateTagTemplate:input_type -> odpf.compass.v1beta1.CreateTagTemplateRequest + 68, // 109: odpf.compass.v1beta1.CompassService.GetTagTemplate:input_type -> odpf.compass.v1beta1.GetTagTemplateRequest + 70, // 110: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:input_type -> odpf.compass.v1beta1.UpdateTagTemplateRequest + 72, // 111: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:input_type -> odpf.compass.v1beta1.DeleteTagTemplateRequest + 1, // 112: odpf.compass.v1beta1.CompassService.GetAllDiscussions:output_type -> odpf.compass.v1beta1.GetAllDiscussionsResponse + 3, // 113: odpf.compass.v1beta1.CompassService.CreateDiscussion:output_type -> odpf.compass.v1beta1.CreateDiscussionResponse + 5, // 114: odpf.compass.v1beta1.CompassService.GetDiscussion:output_type -> odpf.compass.v1beta1.GetDiscussionResponse + 8, // 115: odpf.compass.v1beta1.CompassService.PatchDiscussion:output_type -> odpf.compass.v1beta1.PatchDiscussionResponse + 9, // 116: odpf.compass.v1beta1.CompassService.CreateComment:output_type -> odpf.compass.v1beta1.CreateCommentResponse + 11, // 117: odpf.compass.v1beta1.CompassService.GetAllComments:output_type -> odpf.compass.v1beta1.GetAllCommentsResponse + 13, // 118: odpf.compass.v1beta1.CompassService.GetComment:output_type -> odpf.compass.v1beta1.GetCommentResponse + 15, // 119: odpf.compass.v1beta1.CompassService.UpdateComment:output_type -> odpf.compass.v1beta1.UpdateCommentResponse + 17, // 120: odpf.compass.v1beta1.CompassService.DeleteComment:output_type -> odpf.compass.v1beta1.DeleteCommentResponse + 19, // 121: odpf.compass.v1beta1.CompassService.SearchAssets:output_type -> odpf.compass.v1beta1.SearchAssetsResponse + 21, // 122: odpf.compass.v1beta1.CompassService.SuggestAssets:output_type -> odpf.compass.v1beta1.SuggestAssetsResponse + 23, // 123: odpf.compass.v1beta1.CompassService.GetGraph:output_type -> odpf.compass.v1beta1.GetGraphResponse + 25, // 124: odpf.compass.v1beta1.CompassService.GetAllTypes:output_type -> odpf.compass.v1beta1.GetAllTypesResponse + 27, // 125: odpf.compass.v1beta1.CompassService.GetAllAssets:output_type -> odpf.compass.v1beta1.GetAllAssetsResponse + 29, // 126: odpf.compass.v1beta1.CompassService.GetAssetByID:output_type -> odpf.compass.v1beta1.GetAssetByIDResponse + 31, // 127: odpf.compass.v1beta1.CompassService.UpsertAsset:output_type -> odpf.compass.v1beta1.UpsertAssetResponse + 33, // 128: odpf.compass.v1beta1.CompassService.UpsertPatchAsset:output_type -> odpf.compass.v1beta1.UpsertPatchAssetResponse + 35, // 129: odpf.compass.v1beta1.CompassService.DeleteAsset:output_type -> odpf.compass.v1beta1.DeleteAssetResponse + 37, // 130: odpf.compass.v1beta1.CompassService.GetAssetStargazers:output_type -> odpf.compass.v1beta1.GetAssetStargazersResponse + 39, // 131: odpf.compass.v1beta1.CompassService.GetAssetVersionHistory:output_type -> odpf.compass.v1beta1.GetAssetVersionHistoryResponse + 41, // 132: odpf.compass.v1beta1.CompassService.GetAssetByVersion:output_type -> odpf.compass.v1beta1.GetAssetByVersionResponse + 43, // 133: odpf.compass.v1beta1.CompassService.GetUserStarredAssets:output_type -> odpf.compass.v1beta1.GetUserStarredAssetsResponse + 45, // 134: odpf.compass.v1beta1.CompassService.GetMyStarredAssets:output_type -> odpf.compass.v1beta1.GetMyStarredAssetsResponse + 47, // 135: odpf.compass.v1beta1.CompassService.GetMyStarredAsset:output_type -> odpf.compass.v1beta1.GetMyStarredAssetResponse + 49, // 136: odpf.compass.v1beta1.CompassService.StarAsset:output_type -> odpf.compass.v1beta1.StarAssetResponse + 51, // 137: odpf.compass.v1beta1.CompassService.UnstarAsset:output_type -> odpf.compass.v1beta1.UnstarAssetResponse + 53, // 138: odpf.compass.v1beta1.CompassService.GetMyDiscussions:output_type -> odpf.compass.v1beta1.GetMyDiscussionsResponse + 55, // 139: odpf.compass.v1beta1.CompassService.CreateTag:output_type -> odpf.compass.v1beta1.CreateTagResponse + 57, // 140: odpf.compass.v1beta1.CompassService.GetTagsByRecordAndTemplate:output_type -> odpf.compass.v1beta1.GetTagsByRecordAndTemplateResponse + 59, // 141: odpf.compass.v1beta1.CompassService.UpdateTag:output_type -> odpf.compass.v1beta1.UpdateTagResponse + 61, // 142: odpf.compass.v1beta1.CompassService.DeleteTag:output_type -> odpf.compass.v1beta1.DeleteTagResponse + 63, // 143: odpf.compass.v1beta1.CompassService.GetTagsByRecord:output_type -> odpf.compass.v1beta1.GetTagsByRecordResponse + 65, // 144: odpf.compass.v1beta1.CompassService.GetAllTagTemplates:output_type -> odpf.compass.v1beta1.GetAllTagTemplatesResponse + 67, // 145: odpf.compass.v1beta1.CompassService.CreateTagTemplate:output_type -> odpf.compass.v1beta1.CreateTagTemplateResponse + 69, // 146: odpf.compass.v1beta1.CompassService.GetTagTemplate:output_type -> odpf.compass.v1beta1.GetTagTemplateResponse + 71, // 147: odpf.compass.v1beta1.CompassService.UpdateTagTemplate:output_type -> odpf.compass.v1beta1.UpdateTagTemplateResponse + 73, // 148: odpf.compass.v1beta1.CompassService.DeleteTagTemplate:output_type -> odpf.compass.v1beta1.DeleteTagTemplateResponse + 112, // [112:149] is the sub-list for method output_type + 75, // [75:112] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name } func init() { file_odpf_compass_v1beta1_service_proto_init() } @@ -8222,7 +8321,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertAssetRequest_BaseAsset); i { case 0: return &v.state @@ -8234,7 +8333,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { return nil } } - file_odpf_compass_v1beta1_service_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_odpf_compass_v1beta1_service_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpsertPatchAssetRequest_BaseAsset); i { case 0: return &v.state @@ -8253,7 +8352,7 @@ func file_odpf_compass_v1beta1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_odpf_compass_v1beta1_service_proto_rawDesc, NumEnums: 0, - NumMessages: 92, + NumMessages: 93, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/odpf/compass/v1beta1/service.pb.validate.go b/api/proto/odpf/compass/v1beta1/service.pb.validate.go index db46c6ad..f2d468c6 100644 --- a/api/proto/odpf/compass/v1beta1/service.pb.validate.go +++ b/api/proto/odpf/compass/v1beta1/service.pb.validate.go @@ -3337,18 +3337,32 @@ func (m *GetAllAssetsRequest) validate(all bool) error { var errors []error - if m.GetText() != "" { + if m.GetQ() != "" { } - if m.GetType() != "" { + if m.GetQFields() != "" { + + } + + if m.GetTypes() != "" { } - if m.GetService() != "" { + if m.GetServices() != "" { } + if m.GetSort() != "" { + + } + + if m.GetDirection() != "" { + + } + + // no validation rules for Data + if m.GetSize() != 0 { if m.GetSize() < 0 { @@ -11581,6 +11595,40 @@ func (m *UpsertAssetRequest_BaseAsset) validate(all bool) error { } } + for idx, item := range m.GetOwners() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpsertAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpsertAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpsertAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + if len(errors) > 0 { return UpsertAssetRequest_BaseAssetMultiError(errors) } @@ -11765,6 +11813,40 @@ func (m *UpsertPatchAssetRequest_BaseAsset) validate(all bool) error { } } + for idx, item := range m.GetOwners() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpsertPatchAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpsertPatchAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpsertPatchAssetRequest_BaseAssetValidationError{ + field: fmt.Sprintf("Owners[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + if len(errors) > 0 { return UpsertPatchAssetRequest_BaseAssetMultiError(errors) } diff --git a/api/v1beta1/asset.go b/api/v1beta1/asset.go index 0a02c195..cbd77cfe 100644 --- a/api/v1beta1/asset.go +++ b/api/v1beta1/asset.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" compassv1beta1 "github.com/odpf/columbus/api/proto/odpf/compass/v1beta1" "github.com/odpf/columbus/asset" @@ -15,16 +16,29 @@ import ( ) func (h *Handler) GetAllAssets(ctx context.Context, req *compassv1beta1.GetAllAssetsRequest) (*compassv1beta1.GetAllAssetsResponse, error) { - config := asset.GRPCConfig{ - Text: req.GetText(), - Type: asset.Type(req.GetType()), - Service: req.GetService(), - Size: int(req.GetSize()), - Offset: int(req.GetOffset()), + + config := asset.Config{ + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + SortBy: req.GetSort(), + SortDirection: req.GetDirection(), + Query: req.GetQ(), + Data: req.GetData(), + } + if req.GetTypes() != "" { + typs := strings.Split(req.GetTypes(), ",") + for _, typeVal := range typs { + config.Types = append(config.Types, asset.Type(typeVal)) + } + } + if req.GetServices() != "" { + config.Services = strings.Split(req.GetServices(), ",") + } + if req.GetQFields() != "" { + config.QueryFields = strings.Split(req.GetQFields(), ",") } - cfg := config.ToConfig() - assets, err := h.AssetRepository.GetAll(ctx, cfg) + assets, err := h.AssetRepository.GetAll(ctx, config) if err != nil { return nil, internalServerError(h.Logger, err.Error()) } @@ -43,14 +57,27 @@ func (h *Handler) GetAllAssets(ctx context.Context, req *compassv1beta1.GetAllAs } if req.GetWithTotal() { - grpcConfig := asset.GRPCConfig{ - Type: config.Type, - Service: config.Service, - Text: config.Text, + config = asset.Config{ + //Types: asset.Type(req.GetTypes()), + //Services: req.GetService(), + //QueryFields: req.QFields, + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + SortBy: req.Sort, + SortDirection: req.Direction, + Query: req.Q, + Data: req.Data, } - cfg = grpcConfig.ToConfig() - total, err := h.AssetRepository.GetCount(ctx, cfg) + typ := strings.Split(req.GetTypes(), ",") + for _, typeVal := range typ { + config.Types = append(config.Types, asset.Type(typeVal)) + } + + config.Services = strings.Split(req.GetServices(), ",") + config.QueryFields = strings.Split(req.GetQFields(), ",") + + total, err := h.AssetRepository.GetCount(ctx, config) if err != nil { return nil, internalServerError(h.Logger, err.Error()) } diff --git a/api/v1beta1/asset_test.go b/api/v1beta1/asset_test.go index 4e121e1c..352bdc39 100644 --- a/api/v1beta1/asset_test.go +++ b/api/v1beta1/asset_test.go @@ -38,6 +38,7 @@ func TestGetAllAssets(t *testing.T) { { Description: `should return internal server error if fetching fails`, ExpectStatus: codes.Internal, + Request: &compassv1beta1.GetAllAssetsRequest{}, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { ar.On("GetAll", ctx, asset.Config{}).Return([]asset.Asset{}, errors.New("unknown error")) }, @@ -56,23 +57,37 @@ func TestGetAllAssets(t *testing.T) { { Description: `should successfully get config from request`, Request: &compassv1beta1.GetAllAssetsRequest{ - Text: "asd", - Type: "table", - Service: "bigquery", - Size: 30, - Offset: 50, + Types: "table,topic", + Services: "bigquery,kafka", + Sort: "type", + Direction: "asc", + Data: map[string]string{ + "dataset": "booking", + "project": "p-godata-id", + }, + Q: "internal", + QFields: "name,urn", + Size: 30, + Offset: 50, + WithTotal: false, }, ExpectStatus: codes.OK, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - cfg := asset.GRPCConfig{ - Text: "asd", - Type: "table", - Service: "bigquery", - Size: 30, - Offset: 50, + cfg := asset.Config{ + Types: []asset.Type{"table", "topic"}, + Services: []string{"bigquery", "kafka"}, + Size: 30, + Offset: 50, + SortBy: "type", + SortDirection: "asc", + QueryFields: []string{"name", "urn"}, + Query: "internal", + Data: map[string]string{ + "dataset": "booking", + "project": "p-godata-id", + }, } - config := cfg.ToConfig() - ar.On("GetAll", ctx, config).Return([]asset.Asset{}, nil, nil) + ar.On("GetAll", ctx, cfg).Return([]asset.Asset{}, nil, nil) }, }, { @@ -102,30 +117,27 @@ func TestGetAllAssets(t *testing.T) { Description: "should return total in the payload if with_total flag is given", ExpectStatus: codes.OK, Request: &compassv1beta1.GetAllAssetsRequest{ - Text: "dsa", - Type: "job", - Service: "kafka", + Types: "job", + Services: "kafka", Size: 10, Offset: 5, WithTotal: true, }, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.On("GetAll", ctx, asset.GRPCConfig{ - Text: "dsa", - Type: "job", - Service: "kafka", - Size: 10, - Offset: 5, - }.ToConfig()).Return([]asset.Asset{ + ar.On("GetAll", ctx, asset.Config{ + Types: []asset.Type{"job"}, + Services: []string{"kafka"}, + Size: 10, + Offset: 5, + }).Return([]asset.Asset{ {ID: "testid-1"}, {ID: "testid-2"}, {ID: "testid-3"}, }, nil, nil) - ar.On("GetCount", ctx, asset.GRPCConfig{ - Text: "dsa", - Type: "job", - Service: "kafka", - }.ToConfig()).Return(150, nil, nil) + ar.On("GetCount", ctx, asset.Config{ + Types: []asset.Type{"job"}, + Services: []string{"kafka"}, + }).Return(150, nil, nil) }, PostCheck: func(resp *compassv1beta1.GetAllAssetsResponse) error { expected := &compassv1beta1.GetAllAssetsResponse{ diff --git a/asset/config.go b/asset/config.go index 124feb53..b33092a9 100644 --- a/asset/config.go +++ b/asset/config.go @@ -17,34 +17,34 @@ type Config struct { } // GRPCConfig will be refactored to the config above -type GRPCConfig struct { - Text string `json:"text"` - Type Type `json:"type"` - Service string `json:"service"` - Size int `json:"size"` - Offset int `json:"offset"` -} +//type GRPCConfig struct { +// Text string `json:"text"` +// Type Type `json:"type"` +// Service string `json:"service"` +// Size int `json:"size"` +// Offset int `json:"offset"` +//} func (cfg *Config) Validate() error { return validator.ValidateStruct(cfg) } -func (grpcCfg GRPCConfig) ToConfig() Config { - cfg := Config{ - Size: grpcCfg.Size, - Offset: grpcCfg.Offset, - } - - if len(grpcCfg.Type) > 0 { - cfg.Types = []Type{grpcCfg.Type} - } - if len(grpcCfg.Service) > 0 { - cfg.Services = []string{grpcCfg.Service} - } - - if len(grpcCfg.Text) > 0 { - cfg.Query = grpcCfg.Text - } - - return cfg -} +//func (grpcCfg GRPCConfig) ToConfig() Config { +// cfg := Config{ +// Size: grpcCfg.Size, +// Offset: grpcCfg.Offset, +// } +// +// if len(grpcCfg.Type) > 0 { +// cfg.Types = []Type{grpcCfg.Type} +// } +// if len(grpcCfg.Service) > 0 { +// cfg.Services = []string{grpcCfg.Service} +// } +// +// if len(grpcCfg.Text) > 0 { +// cfg.Query = grpcCfg.Text +// } +// +// return cfg +//} diff --git a/third_party/OpenAPI/compass.swagger.json b/third_party/OpenAPI/compass.swagger.json index d2c86104..97fb1cf4 100644 --- a/third_party/OpenAPI/compass.swagger.json +++ b/third_party/OpenAPI/compass.swagger.json @@ -28,7 +28,7 @@ "/v1beta1/assets": { "get": { "summary": "Get list of assets", - "description": "Returns list of assets, optionally filtered by type and service", + "description": "Returns list of assets, optionally filtered by types, services, sorting, fields in asset.data and querying fields ", "operationId": "CompassService_GetAllAssets", "responses": { "200": { @@ -70,22 +70,43 @@ }, "parameters": [ { - "name": "text", - "description": "filter by text", + "name": "q", + "description": "filter by specific query", "in": "query", "required": false, "type": "string" }, { - "name": "type", - "description": "filter by type", + "name": "qFields", + "description": "filter by multiple query fields", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "types", + "description": "filter by multiple types", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "services", + "description": "filter by multiple services", "in": "query", "required": false, "type": "string" }, { - "name": "service", - "description": "filter by service", + "name": "sort", + "description": "sorting based on fields", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "direction", + "description": "sorting direction can either be asc or desc ", "in": "query", "required": false, "type": "string" @@ -3337,6 +3358,13 @@ "labels": { "type": "object", "description": "labels of an asset" + }, + "owners": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1User" + }, + "description": "list of owners of the asset" } } }, @@ -3395,6 +3423,13 @@ "labels": { "type": "object", "description": "labels of an asset" + }, + "owners": { + "type": "array", + "items": { + "$ref": "#/definitions/v1beta1User" + }, + "description": "list of owners of the asset" } } }, From 1dc7e589235936979db75e513cd59ecad9692d2a Mon Sep 17 00:00:00 2001 From: Muhammad Abduh Date: Wed, 13 Apr 2022 16:47:48 +0700 Subject: [PATCH 2/4] refactor: update config name to filter --- api/v1beta1/asset.go | 84 ++++++++++++------------- api/v1beta1/asset_test.go | 24 +++---- api/v1beta1/user.go | 8 +-- api/v1beta1/user_test.go | 16 ++--- asset/asset.go | 6 +- asset/config.go | 50 --------------- asset/filter.go | 21 +++++++ lib/mocks/asset_repository.go | 50 +++++++-------- lib/mocks/discovery_record_searcher.go | 2 +- lib/mocks/discovery_repository.go | 2 +- lib/mocks/discussion_repository.go | 2 +- lib/mocks/lineage_repository.go | 2 +- lib/mocks/star_repository.go | 74 +++++++++++----------- lib/mocks/statsd_monitor.go | 2 +- lib/mocks/tag_repository.go | 2 +- lib/mocks/tag_template_repository.go | 2 +- lib/mocks/user_repository.go | 2 +- star/{config.go => filter.go} | 4 +- star/star.go | 6 +- store/postgres/asset_repository.go | 52 +++++++-------- store/postgres/asset_repository_test.go | 38 +++++------ store/postgres/star_repository.go | 26 ++++---- store/postgres/star_repository_test.go | 16 ++--- user/filter.go | 1 - 24 files changed, 231 insertions(+), 261 deletions(-) delete mode 100644 asset/config.go create mode 100644 asset/filter.go rename star/{config.go => filter.go} (88%) delete mode 100644 user/filter.go diff --git a/api/v1beta1/asset.go b/api/v1beta1/asset.go index cbd77cfe..137eb81e 100644 --- a/api/v1beta1/asset.go +++ b/api/v1beta1/asset.go @@ -17,28 +17,16 @@ import ( func (h *Handler) GetAllAssets(ctx context.Context, req *compassv1beta1.GetAllAssetsRequest) (*compassv1beta1.GetAllAssetsResponse, error) { - config := asset.Config{ - Size: int(req.GetSize()), - Offset: int(req.GetOffset()), - SortBy: req.GetSort(), - SortDirection: req.GetDirection(), - Query: req.GetQ(), - Data: req.GetData(), + if err := req.ValidateAll(); err != nil { + return nil, status.Error(codes.InvalidArgument, bodyParserErrorMsg(err)) } - if req.GetTypes() != "" { - typs := strings.Split(req.GetTypes(), ",") - for _, typeVal := range typs { - config.Types = append(config.Types, asset.Type(typeVal)) - } - } - if req.GetServices() != "" { - config.Services = strings.Split(req.GetServices(), ",") - } - if req.GetQFields() != "" { - config.QueryFields = strings.Split(req.GetQFields(), ",") + + flt, err := h.buildGetAllAssetsFilter(req) + if err != nil { + return nil, status.Error(codes.InvalidArgument, bodyParserErrorMsg(err)) } - assets, err := h.AssetRepository.GetAll(ctx, config) + assets, err := h.AssetRepository.GetAll(ctx, flt) if err != nil { return nil, internalServerError(h.Logger, err.Error()) } @@ -57,27 +45,7 @@ func (h *Handler) GetAllAssets(ctx context.Context, req *compassv1beta1.GetAllAs } if req.GetWithTotal() { - config = asset.Config{ - //Types: asset.Type(req.GetTypes()), - //Services: req.GetService(), - //QueryFields: req.QFields, - Size: int(req.GetSize()), - Offset: int(req.GetOffset()), - SortBy: req.Sort, - SortDirection: req.Direction, - Query: req.Q, - Data: req.Data, - } - - typ := strings.Split(req.GetTypes(), ",") - for _, typeVal := range typ { - config.Types = append(config.Types, asset.Type(typeVal)) - } - - config.Services = strings.Split(req.GetServices(), ",") - config.QueryFields = strings.Split(req.GetQFields(), ",") - - total, err := h.AssetRepository.GetCount(ctx, config) + total, err := h.AssetRepository.GetCount(ctx, flt) if err != nil { return nil, internalServerError(h.Logger, err.Error()) } @@ -87,6 +55,38 @@ func (h *Handler) GetAllAssets(ctx context.Context, req *compassv1beta1.GetAllAs return response, nil } +func (h *Handler) buildGetAllAssetsFilter(req *compassv1beta1.GetAllAssetsRequest) (asset.Filter, error) { + + flt := asset.Filter{ + Size: int(req.GetSize()), + Offset: int(req.GetOffset()), + SortBy: req.GetSort(), + SortDirection: req.GetDirection(), + Query: req.GetQ(), + Data: req.GetData(), + } + + if req.GetTypes() != "" { + typs := strings.Split(req.GetTypes(), ",") + for _, typeVal := range typs { + flt.Types = append(flt.Types, asset.Type(typeVal)) + } + } + if req.GetServices() != "" { + flt.Services = strings.Split(req.GetServices(), ",") + } + + if req.GetQFields() != "" { + flt.QueryFields = strings.Split(req.GetQFields(), ",") + } + + if err := flt.Validate(); err != nil { + return asset.Filter{}, err + } + + return flt, nil +} + func (h *Handler) GetAssetByID(ctx context.Context, req *compassv1beta1.GetAssetByIDRequest) (*compassv1beta1.GetAssetByIDResponse, error) { ast, err := h.AssetRepository.GetByID(ctx, req.GetId()) if err != nil { @@ -233,7 +233,7 @@ func (h *Handler) DeleteAsset(ctx context.Context, req *compassv1beta1.DeleteAss func (h *Handler) GetAssetStargazers(ctx context.Context, req *compassv1beta1.GetAssetStargazersRequest) (*compassv1beta1.GetAssetStargazersResponse, error) { - users, err := h.StarRepository.GetStargazers(ctx, star.Config{ + users, err := h.StarRepository.GetStargazers(ctx, star.Filter{ Size: int(req.GetSize()), Offset: int(req.GetOffset()), }, req.GetId()) @@ -258,7 +258,7 @@ func (h *Handler) GetAssetStargazers(ctx context.Context, req *compassv1beta1.Ge } func (h *Handler) GetAssetVersionHistory(ctx context.Context, req *compassv1beta1.GetAssetVersionHistoryRequest) (*compassv1beta1.GetAssetVersionHistoryResponse, error) { - assetVersions, err := h.AssetRepository.GetVersionHistory(ctx, asset.Config{ + assetVersions, err := h.AssetRepository.GetVersionHistory(ctx, asset.Filter{ Size: int(req.GetSize()), Offset: int(req.GetOffset()), }, req.GetId()) diff --git a/api/v1beta1/asset_test.go b/api/v1beta1/asset_test.go index 352bdc39..b4ab4d91 100644 --- a/api/v1beta1/asset_test.go +++ b/api/v1beta1/asset_test.go @@ -40,7 +40,7 @@ func TestGetAllAssets(t *testing.T) { ExpectStatus: codes.Internal, Request: &compassv1beta1.GetAllAssetsRequest{}, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.On("GetAll", ctx, asset.Config{}).Return([]asset.Asset{}, errors.New("unknown error")) + ar.On("GetAll", ctx, asset.Filter{}).Return([]asset.Asset{}, errors.New("unknown error")) }, }, { @@ -50,8 +50,8 @@ func TestGetAllAssets(t *testing.T) { }, ExpectStatus: codes.Internal, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.On("GetAll", ctx, asset.Config{}).Return([]asset.Asset{}, nil, nil) - ar.On("GetCount", ctx, asset.Config{}).Return(0, errors.New("unknown error")) + ar.On("GetAll", ctx, asset.Filter{}).Return([]asset.Asset{}, nil, nil) + ar.On("GetCount", ctx, asset.Filter{}).Return(0, errors.New("unknown error")) }, }, { @@ -73,7 +73,7 @@ func TestGetAllAssets(t *testing.T) { }, ExpectStatus: codes.OK, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - cfg := asset.Config{ + cfg := asset.Filter{ Types: []asset.Type{"table", "topic"}, Services: []string{"bigquery", "kafka"}, Size: 30, @@ -94,7 +94,7 @@ func TestGetAllAssets(t *testing.T) { Description: "should return status OK along with list of assets", ExpectStatus: codes.OK, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.On("GetAll", ctx, asset.Config{}).Return([]asset.Asset{ + ar.On("GetAll", ctx, asset.Filter{}).Return([]asset.Asset{ {ID: "testid-1"}, {ID: "testid-2"}, }, nil, nil) @@ -124,7 +124,7 @@ func TestGetAllAssets(t *testing.T) { WithTotal: true, }, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.On("GetAll", ctx, asset.Config{ + ar.On("GetAll", ctx, asset.Filter{ Types: []asset.Type{"job"}, Services: []string{"kafka"}, Size: 10, @@ -134,7 +134,7 @@ func TestGetAllAssets(t *testing.T) { {ID: "testid-2"}, {ID: "testid-3"}, }, nil, nil) - ar.On("GetCount", ctx, asset.Config{ + ar.On("GetCount", ctx, asset.Filter{ Types: []asset.Type{"job"}, Services: []string{"kafka"}, }).Return(150, nil, nil) @@ -854,7 +854,7 @@ func TestGetAssetStargazers(t *testing.T) { var ( offset = 10 size = 20 - defaultStarCfg = star.Config{Offset: offset, Size: size} + defaultStarCfg = star.Filter{Offset: offset, Size: size} assetID = uuid.NewString() userID = uuid.NewString() ) @@ -956,7 +956,7 @@ func TestGetAssetVersionHistory(t *testing.T) { Id: assetID, }, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.EXPECT().GetVersionHistory(ctx, asset.Config{}, assetID).Return([]asset.Asset{}, asset.InvalidError{AssetID: assetID}) + ar.EXPECT().GetVersionHistory(ctx, asset.Filter{}, assetID).Return([]asset.Asset{}, asset.InvalidError{AssetID: assetID}) }, }, { @@ -966,7 +966,7 @@ func TestGetAssetVersionHistory(t *testing.T) { Id: assetID, }, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.EXPECT().GetVersionHistory(ctx, asset.Config{}, assetID).Return([]asset.Asset{}, errors.New("unknown error")) + ar.EXPECT().GetVersionHistory(ctx, asset.Filter{}, assetID).Return([]asset.Asset{}, errors.New("unknown error")) }, }, { @@ -978,7 +978,7 @@ func TestGetAssetVersionHistory(t *testing.T) { }, ExpectStatus: codes.OK, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.EXPECT().GetVersionHistory(ctx, asset.Config{ + ar.EXPECT().GetVersionHistory(ctx, asset.Filter{ Size: 30, Offset: 50, }, assetID).Return([]asset.Asset{}, nil) @@ -991,7 +991,7 @@ func TestGetAssetVersionHistory(t *testing.T) { Id: assetID, }, Setup: func(ctx context.Context, ar *mocks.AssetRepository) { - ar.EXPECT().GetVersionHistory(ctx, asset.Config{}, assetID).Return([]asset.Asset{ + ar.EXPECT().GetVersionHistory(ctx, asset.Filter{}, assetID).Return([]asset.Asset{ {ID: "testid-1"}, {ID: "testid-2"}, }, nil) diff --git a/api/v1beta1/user.go b/api/v1beta1/user.go index 61d31c34..40c2b6d1 100644 --- a/api/v1beta1/user.go +++ b/api/v1beta1/user.go @@ -16,12 +16,12 @@ import ( func (h *Handler) GetUserStarredAssets(ctx context.Context, req *compassv1beta1.GetUserStarredAssetsRequest) (*compassv1beta1.GetUserStarredAssetsResponse, error) { - starCfg := star.Config{ + starFilter := star.Filter{ Size: int(req.GetSize()), Offset: int(req.GetOffset()), } - starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starCfg, req.GetUserId()) + starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starFilter, req.GetUserId()) if errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { return nil, status.Error(codes.InvalidArgument, err.Error()) @@ -53,12 +53,12 @@ func (h *Handler) GetMyStarredAssets(ctx context.Context, req *compassv1beta1.Ge return nil, status.Error(codes.InvalidArgument, errMissingUserInfo.Error()) } - starCfg := star.Config{ + starFilter := star.Filter{ Size: int(req.GetSize()), Offset: int(req.GetOffset()), } - starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starCfg, userID) + starredAssets, err := h.StarRepository.GetAllAssetsByUserID(ctx, starFilter, userID) if errors.Is(err, star.ErrEmptyUserID) || errors.As(err, new(star.InvalidError)) { return nil, status.Error(codes.InvalidArgument, err.Error()) diff --git a/api/v1beta1/user_test.go b/api/v1beta1/user_test.go index bbad4282..b75b0a41 100644 --- a/api/v1beta1/user_test.go +++ b/api/v1beta1/user_test.go @@ -39,28 +39,28 @@ func TestGetUserStarredAssets(t *testing.T) { Description: "should return internal server error if failed to fetch starred", ExpectStatus: codes.Internal, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) }, }, { Description: "should return invalid argument if star repository return invalid error", ExpectStatus: codes.InvalidArgument, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) }, }, { Description: "should return not found if starred not found", ExpectStatus: codes.NotFound, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) }, }, { Description: "should return starred assets of a user if no error", ExpectStatus: codes.OK, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return([]asset.Asset{ + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return([]asset.Asset{ {ID: "1", URN: "asset-urn-1", Type: "asset-type"}, {ID: "2", URN: "asset-urn-2", Type: "asset-type"}, {ID: "3", URN: "asset-urn-3", Type: "asset-type"}, @@ -147,28 +147,28 @@ func TestGetMyStarredAssets(t *testing.T) { Description: "should return internal server error if failed to fetch starred", ExpectStatus: codes.Internal, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, errors.New("failed to fetch starred")) }, }, { Description: "should return invalid argument if star repository return invalid error", ExpectStatus: codes.InvalidArgument, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, star.InvalidError{}) }, }, { Description: "should return not found if starred not found", ExpectStatus: codes.NotFound, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return(nil, star.NotFoundError{}) }, }, { Description: "should return starred assets of a user if no error", ExpectStatus: codes.OK, Setup: func(ctx context.Context, er *mocks.StarRepository) { - er.EXPECT().GetAllAssetsByUserID(ctx, star.Config{Offset: offset, Size: size}, userID).Return([]asset.Asset{ + er.EXPECT().GetAllAssetsByUserID(ctx, star.Filter{Offset: offset, Size: size}, userID).Return([]asset.Asset{ {ID: "1", URN: "asset-urn-1", Type: "asset-type"}, {ID: "2", URN: "asset-urn-2", Type: "asset-type"}, {ID: "3", URN: "asset-urn-3", Type: "asset-type"}, diff --git a/asset/asset.go b/asset/asset.go index b422e481..a0267dd8 100644 --- a/asset/asset.go +++ b/asset/asset.go @@ -14,11 +14,11 @@ import ( ) type Repository interface { - GetAll(context.Context, Config) ([]Asset, error) - GetCount(context.Context, Config) (int, error) + GetAll(context.Context, Filter) ([]Asset, error) + GetCount(context.Context, Filter) (int, error) GetByID(ctx context.Context, id string) (Asset, error) Find(ctx context.Context, urn string, typ Type, service string) (Asset, error) - GetVersionHistory(ctx context.Context, cfg Config, id string) ([]Asset, error) + GetVersionHistory(ctx context.Context, flt Filter, id string) ([]Asset, error) GetByVersion(ctx context.Context, id string, version string) (Asset, error) Upsert(ctx context.Context, ast *Asset) (string, error) Delete(ctx context.Context, id string) error diff --git a/asset/config.go b/asset/config.go deleted file mode 100644 index b33092a9..00000000 --- a/asset/config.go +++ /dev/null @@ -1,50 +0,0 @@ -package asset - -import ( - "github.com/odpf/columbus/validator" -) - -type Config struct { - Types []Type - Services []string - Size int - Offset int - SortBy string `validate:"omitempty,oneof=name type service created_at updated_at"` - SortDirection string `validate:"omitempty,oneof=asc desc"` - QueryFields []string - Query string - Data map[string]string -} - -// GRPCConfig will be refactored to the config above -//type GRPCConfig struct { -// Text string `json:"text"` -// Type Type `json:"type"` -// Service string `json:"service"` -// Size int `json:"size"` -// Offset int `json:"offset"` -//} - -func (cfg *Config) Validate() error { - return validator.ValidateStruct(cfg) -} - -//func (grpcCfg GRPCConfig) ToConfig() Config { -// cfg := Config{ -// Size: grpcCfg.Size, -// Offset: grpcCfg.Offset, -// } -// -// if len(grpcCfg.Type) > 0 { -// cfg.Types = []Type{grpcCfg.Type} -// } -// if len(grpcCfg.Service) > 0 { -// cfg.Services = []string{grpcCfg.Service} -// } -// -// if len(grpcCfg.Text) > 0 { -// cfg.Query = grpcCfg.Text -// } -// -// return cfg -//} diff --git a/asset/filter.go b/asset/filter.go new file mode 100644 index 00000000..dda89bd6 --- /dev/null +++ b/asset/filter.go @@ -0,0 +1,21 @@ +package asset + +import ( + "github.com/odpf/columbus/validator" +) + +type Filter struct { + Types []Type + Services []string + Size int + Offset int + SortBy string `validate:"omitempty,oneof=name type service created_at updated_at"` + SortDirection string `validate:"omitempty,oneof=asc desc"` + QueryFields []string + Query string + Data map[string]string +} + +func (f *Filter) Validate() error { + return validator.ValidateStruct(f) +} diff --git a/lib/mocks/asset_repository.go b/lib/mocks/asset_repository.go index cf2190fb..37a1271d 100644 --- a/lib/mocks/asset_repository.go +++ b/lib/mocks/asset_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks @@ -109,11 +109,11 @@ func (_c *AssetRepository_Find_Call) Return(_a0 asset.Asset, _a1 error) *AssetRe } // GetAll provides a mock function with given fields: _a0, _a1 -func (_m *AssetRepository) GetAll(_a0 context.Context, _a1 asset.Config) ([]asset.Asset, error) { +func (_m *AssetRepository) GetAll(_a0 context.Context, _a1 asset.Filter) ([]asset.Asset, error) { ret := _m.Called(_a0, _a1) var r0 []asset.Asset - if rf, ok := ret.Get(0).(func(context.Context, asset.Config) []asset.Asset); ok { + if rf, ok := ret.Get(0).(func(context.Context, asset.Filter) []asset.Asset); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { @@ -122,7 +122,7 @@ func (_m *AssetRepository) GetAll(_a0 context.Context, _a1 asset.Config) ([]asse } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, asset.Config) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, asset.Filter) error); ok { r1 = rf(_a0, _a1) } else { r1 = ret.Error(1) @@ -138,14 +138,14 @@ type AssetRepository_GetAll_Call struct { // GetAll is a helper method to define mock.On call // - _a0 context.Context -// - _a1 asset.Config +// - _a1 asset.Filter func (_e *AssetRepository_Expecter) GetAll(_a0 interface{}, _a1 interface{}) *AssetRepository_GetAll_Call { return &AssetRepository_GetAll_Call{Call: _e.mock.On("GetAll", _a0, _a1)} } -func (_c *AssetRepository_GetAll_Call) Run(run func(_a0 context.Context, _a1 asset.Config)) *AssetRepository_GetAll_Call { +func (_c *AssetRepository_GetAll_Call) Run(run func(_a0 context.Context, _a1 asset.Filter)) *AssetRepository_GetAll_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(asset.Config)) + run(args[0].(context.Context), args[1].(asset.Filter)) }) return _c } @@ -247,18 +247,18 @@ func (_c *AssetRepository_GetByVersion_Call) Return(_a0 asset.Asset, _a1 error) } // GetCount provides a mock function with given fields: _a0, _a1 -func (_m *AssetRepository) GetCount(_a0 context.Context, _a1 asset.Config) (int, error) { +func (_m *AssetRepository) GetCount(_a0 context.Context, _a1 asset.Filter) (int, error) { ret := _m.Called(_a0, _a1) var r0 int - if rf, ok := ret.Get(0).(func(context.Context, asset.Config) int); ok { + if rf, ok := ret.Get(0).(func(context.Context, asset.Filter) int); ok { r0 = rf(_a0, _a1) } else { r0 = ret.Get(0).(int) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, asset.Config) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, asset.Filter) error); ok { r1 = rf(_a0, _a1) } else { r1 = ret.Error(1) @@ -274,14 +274,14 @@ type AssetRepository_GetCount_Call struct { // GetCount is a helper method to define mock.On call // - _a0 context.Context -// - _a1 asset.Config +// - _a1 asset.Filter func (_e *AssetRepository_Expecter) GetCount(_a0 interface{}, _a1 interface{}) *AssetRepository_GetCount_Call { return &AssetRepository_GetCount_Call{Call: _e.mock.On("GetCount", _a0, _a1)} } -func (_c *AssetRepository_GetCount_Call) Run(run func(_a0 context.Context, _a1 asset.Config)) *AssetRepository_GetCount_Call { +func (_c *AssetRepository_GetCount_Call) Run(run func(_a0 context.Context, _a1 asset.Filter)) *AssetRepository_GetCount_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(asset.Config)) + run(args[0].(context.Context), args[1].(asset.Filter)) }) return _c } @@ -291,13 +291,13 @@ func (_c *AssetRepository_GetCount_Call) Return(_a0 int, _a1 error) *AssetReposi return _c } -// GetVersionHistory provides a mock function with given fields: ctx, cfg, id -func (_m *AssetRepository) GetVersionHistory(ctx context.Context, cfg asset.Config, id string) ([]asset.Asset, error) { - ret := _m.Called(ctx, cfg, id) +// GetVersionHistory provides a mock function with given fields: ctx, flt, id +func (_m *AssetRepository) GetVersionHistory(ctx context.Context, flt asset.Filter, id string) ([]asset.Asset, error) { + ret := _m.Called(ctx, flt, id) var r0 []asset.Asset - if rf, ok := ret.Get(0).(func(context.Context, asset.Config, string) []asset.Asset); ok { - r0 = rf(ctx, cfg, id) + if rf, ok := ret.Get(0).(func(context.Context, asset.Filter, string) []asset.Asset); ok { + r0 = rf(ctx, flt, id) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]asset.Asset) @@ -305,8 +305,8 @@ func (_m *AssetRepository) GetVersionHistory(ctx context.Context, cfg asset.Conf } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, asset.Config, string) error); ok { - r1 = rf(ctx, cfg, id) + if rf, ok := ret.Get(1).(func(context.Context, asset.Filter, string) error); ok { + r1 = rf(ctx, flt, id) } else { r1 = ret.Error(1) } @@ -321,15 +321,15 @@ type AssetRepository_GetVersionHistory_Call struct { // GetVersionHistory is a helper method to define mock.On call // - ctx context.Context -// - cfg asset.Config +// - flt asset.Filter // - id string -func (_e *AssetRepository_Expecter) GetVersionHistory(ctx interface{}, cfg interface{}, id interface{}) *AssetRepository_GetVersionHistory_Call { - return &AssetRepository_GetVersionHistory_Call{Call: _e.mock.On("GetVersionHistory", ctx, cfg, id)} +func (_e *AssetRepository_Expecter) GetVersionHistory(ctx interface{}, flt interface{}, id interface{}) *AssetRepository_GetVersionHistory_Call { + return &AssetRepository_GetVersionHistory_Call{Call: _e.mock.On("GetVersionHistory", ctx, flt, id)} } -func (_c *AssetRepository_GetVersionHistory_Call) Run(run func(ctx context.Context, cfg asset.Config, id string)) *AssetRepository_GetVersionHistory_Call { +func (_c *AssetRepository_GetVersionHistory_Call) Run(run func(ctx context.Context, flt asset.Filter, id string)) *AssetRepository_GetVersionHistory_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(asset.Config), args[2].(string)) + run(args[0].(context.Context), args[1].(asset.Filter), args[2].(string)) }) return _c } diff --git a/lib/mocks/discovery_record_searcher.go b/lib/mocks/discovery_record_searcher.go index a9299ce7..b42d3f64 100644 --- a/lib/mocks/discovery_record_searcher.go +++ b/lib/mocks/discovery_record_searcher.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/discovery_repository.go b/lib/mocks/discovery_repository.go index f1014762..1e1a5d62 100644 --- a/lib/mocks/discovery_repository.go +++ b/lib/mocks/discovery_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/discussion_repository.go b/lib/mocks/discussion_repository.go index 164c59a8..bfca197f 100644 --- a/lib/mocks/discussion_repository.go +++ b/lib/mocks/discussion_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/lineage_repository.go b/lib/mocks/lineage_repository.go index 5184141b..535ff8b9 100644 --- a/lib/mocks/lineage_repository.go +++ b/lib/mocks/lineage_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/star_repository.go b/lib/mocks/star_repository.go index 69ba88f4..0592dce3 100644 --- a/lib/mocks/star_repository.go +++ b/lib/mocks/star_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks @@ -112,13 +112,13 @@ func (_c *StarRepository_Delete_Call) Return(_a0 error) *StarRepository_Delete_C return _c } -// GetAllAssetsByUserEmail provides a mock function with given fields: ctx, cfg, userEmail -func (_m *StarRepository) GetAllAssetsByUserEmail(ctx context.Context, cfg star.Config, userEmail string) ([]asset.Asset, error) { - ret := _m.Called(ctx, cfg, userEmail) +// GetAllAssetsByUserEmail provides a mock function with given fields: ctx, flt, userEmail +func (_m *StarRepository) GetAllAssetsByUserEmail(ctx context.Context, flt star.Filter, userEmail string) ([]asset.Asset, error) { + ret := _m.Called(ctx, flt, userEmail) var r0 []asset.Asset - if rf, ok := ret.Get(0).(func(context.Context, star.Config, string) []asset.Asset); ok { - r0 = rf(ctx, cfg, userEmail) + if rf, ok := ret.Get(0).(func(context.Context, star.Filter, string) []asset.Asset); ok { + r0 = rf(ctx, flt, userEmail) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]asset.Asset) @@ -126,8 +126,8 @@ func (_m *StarRepository) GetAllAssetsByUserEmail(ctx context.Context, cfg star. } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, star.Config, string) error); ok { - r1 = rf(ctx, cfg, userEmail) + if rf, ok := ret.Get(1).(func(context.Context, star.Filter, string) error); ok { + r1 = rf(ctx, flt, userEmail) } else { r1 = ret.Error(1) } @@ -142,15 +142,15 @@ type StarRepository_GetAllAssetsByUserEmail_Call struct { // GetAllAssetsByUserEmail is a helper method to define mock.On call // - ctx context.Context -// - cfg star.Config +// - flt star.Filter // - userEmail string -func (_e *StarRepository_Expecter) GetAllAssetsByUserEmail(ctx interface{}, cfg interface{}, userEmail interface{}) *StarRepository_GetAllAssetsByUserEmail_Call { - return &StarRepository_GetAllAssetsByUserEmail_Call{Call: _e.mock.On("GetAllAssetsByUserEmail", ctx, cfg, userEmail)} +func (_e *StarRepository_Expecter) GetAllAssetsByUserEmail(ctx interface{}, flt interface{}, userEmail interface{}) *StarRepository_GetAllAssetsByUserEmail_Call { + return &StarRepository_GetAllAssetsByUserEmail_Call{Call: _e.mock.On("GetAllAssetsByUserEmail", ctx, flt, userEmail)} } -func (_c *StarRepository_GetAllAssetsByUserEmail_Call) Run(run func(ctx context.Context, cfg star.Config, userEmail string)) *StarRepository_GetAllAssetsByUserEmail_Call { +func (_c *StarRepository_GetAllAssetsByUserEmail_Call) Run(run func(ctx context.Context, flt star.Filter, userEmail string)) *StarRepository_GetAllAssetsByUserEmail_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(star.Config), args[2].(string)) + run(args[0].(context.Context), args[1].(star.Filter), args[2].(string)) }) return _c } @@ -160,13 +160,13 @@ func (_c *StarRepository_GetAllAssetsByUserEmail_Call) Return(_a0 []asset.Asset, return _c } -// GetAllAssetsByUserID provides a mock function with given fields: ctx, cfg, userID -func (_m *StarRepository) GetAllAssetsByUserID(ctx context.Context, cfg star.Config, userID string) ([]asset.Asset, error) { - ret := _m.Called(ctx, cfg, userID) +// GetAllAssetsByUserID provides a mock function with given fields: ctx, flt, userID +func (_m *StarRepository) GetAllAssetsByUserID(ctx context.Context, flt star.Filter, userID string) ([]asset.Asset, error) { + ret := _m.Called(ctx, flt, userID) var r0 []asset.Asset - if rf, ok := ret.Get(0).(func(context.Context, star.Config, string) []asset.Asset); ok { - r0 = rf(ctx, cfg, userID) + if rf, ok := ret.Get(0).(func(context.Context, star.Filter, string) []asset.Asset); ok { + r0 = rf(ctx, flt, userID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]asset.Asset) @@ -174,8 +174,8 @@ func (_m *StarRepository) GetAllAssetsByUserID(ctx context.Context, cfg star.Con } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, star.Config, string) error); ok { - r1 = rf(ctx, cfg, userID) + if rf, ok := ret.Get(1).(func(context.Context, star.Filter, string) error); ok { + r1 = rf(ctx, flt, userID) } else { r1 = ret.Error(1) } @@ -190,15 +190,15 @@ type StarRepository_GetAllAssetsByUserID_Call struct { // GetAllAssetsByUserID is a helper method to define mock.On call // - ctx context.Context -// - cfg star.Config +// - flt star.Filter // - userID string -func (_e *StarRepository_Expecter) GetAllAssetsByUserID(ctx interface{}, cfg interface{}, userID interface{}) *StarRepository_GetAllAssetsByUserID_Call { - return &StarRepository_GetAllAssetsByUserID_Call{Call: _e.mock.On("GetAllAssetsByUserID", ctx, cfg, userID)} +func (_e *StarRepository_Expecter) GetAllAssetsByUserID(ctx interface{}, flt interface{}, userID interface{}) *StarRepository_GetAllAssetsByUserID_Call { + return &StarRepository_GetAllAssetsByUserID_Call{Call: _e.mock.On("GetAllAssetsByUserID", ctx, flt, userID)} } -func (_c *StarRepository_GetAllAssetsByUserID_Call) Run(run func(ctx context.Context, cfg star.Config, userID string)) *StarRepository_GetAllAssetsByUserID_Call { +func (_c *StarRepository_GetAllAssetsByUserID_Call) Run(run func(ctx context.Context, flt star.Filter, userID string)) *StarRepository_GetAllAssetsByUserID_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(star.Config), args[2].(string)) + run(args[0].(context.Context), args[1].(star.Filter), args[2].(string)) }) return _c } @@ -254,13 +254,13 @@ func (_c *StarRepository_GetAssetByUserID_Call) Return(_a0 asset.Asset, _a1 erro return _c } -// GetStargazers provides a mock function with given fields: ctx, cfg, assetID -func (_m *StarRepository) GetStargazers(ctx context.Context, cfg star.Config, assetID string) ([]user.User, error) { - ret := _m.Called(ctx, cfg, assetID) +// GetStargazers provides a mock function with given fields: ctx, flt, assetID +func (_m *StarRepository) GetStargazers(ctx context.Context, flt star.Filter, assetID string) ([]user.User, error) { + ret := _m.Called(ctx, flt, assetID) var r0 []user.User - if rf, ok := ret.Get(0).(func(context.Context, star.Config, string) []user.User); ok { - r0 = rf(ctx, cfg, assetID) + if rf, ok := ret.Get(0).(func(context.Context, star.Filter, string) []user.User); ok { + r0 = rf(ctx, flt, assetID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]user.User) @@ -268,8 +268,8 @@ func (_m *StarRepository) GetStargazers(ctx context.Context, cfg star.Config, as } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, star.Config, string) error); ok { - r1 = rf(ctx, cfg, assetID) + if rf, ok := ret.Get(1).(func(context.Context, star.Filter, string) error); ok { + r1 = rf(ctx, flt, assetID) } else { r1 = ret.Error(1) } @@ -284,15 +284,15 @@ type StarRepository_GetStargazers_Call struct { // GetStargazers is a helper method to define mock.On call // - ctx context.Context -// - cfg star.Config +// - flt star.Filter // - assetID string -func (_e *StarRepository_Expecter) GetStargazers(ctx interface{}, cfg interface{}, assetID interface{}) *StarRepository_GetStargazers_Call { - return &StarRepository_GetStargazers_Call{Call: _e.mock.On("GetStargazers", ctx, cfg, assetID)} +func (_e *StarRepository_Expecter) GetStargazers(ctx interface{}, flt interface{}, assetID interface{}) *StarRepository_GetStargazers_Call { + return &StarRepository_GetStargazers_Call{Call: _e.mock.On("GetStargazers", ctx, flt, assetID)} } -func (_c *StarRepository_GetStargazers_Call) Run(run func(ctx context.Context, cfg star.Config, assetID string)) *StarRepository_GetStargazers_Call { +func (_c *StarRepository_GetStargazers_Call) Run(run func(ctx context.Context, flt star.Filter, assetID string)) *StarRepository_GetStargazers_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(star.Config), args[2].(string)) + run(args[0].(context.Context), args[1].(star.Filter), args[2].(string)) }) return _c } diff --git a/lib/mocks/statsd_monitor.go b/lib/mocks/statsd_monitor.go index 77233323..0ce4f4b8 100644 --- a/lib/mocks/statsd_monitor.go +++ b/lib/mocks/statsd_monitor.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/tag_repository.go b/lib/mocks/tag_repository.go index a153e46b..63f462b3 100644 --- a/lib/mocks/tag_repository.go +++ b/lib/mocks/tag_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/tag_template_repository.go b/lib/mocks/tag_template_repository.go index 5a1c0cb5..35223642 100644 --- a/lib/mocks/tag_template_repository.go +++ b/lib/mocks/tag_template_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/lib/mocks/user_repository.go b/lib/mocks/user_repository.go index 7da1d56f..6d04bad9 100644 --- a/lib/mocks/user_repository.go +++ b/lib/mocks/user_repository.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.10.0. DO NOT EDIT. +// Code generated by mockery v2.10.4. DO NOT EDIT. package mocks diff --git a/star/config.go b/star/filter.go similarity index 88% rename from star/config.go rename to star/filter.go index 88c80397..41bbea4e 100644 --- a/star/config.go +++ b/star/filter.go @@ -7,8 +7,8 @@ const ( SortDirectionKeyDescending = "desc" ) -// Config is a config of star domain -type Config struct { +// Filter is a config of star domain +type Filter struct { // Number of relevant results to return Size int diff --git a/star/star.go b/star/star.go index 6fc2c719..d35fba5b 100644 --- a/star/star.go +++ b/star/star.go @@ -11,9 +11,9 @@ import ( type Repository interface { Create(ctx context.Context, userID string, assetID string) (string, error) - GetStargazers(ctx context.Context, cfg Config, assetID string) ([]user.User, error) - GetAllAssetsByUserID(ctx context.Context, cfg Config, userID string) ([]asset.Asset, error) - GetAllAssetsByUserEmail(ctx context.Context, cfg Config, userEmail string) ([]asset.Asset, error) + GetStargazers(ctx context.Context, flt Filter, assetID string) ([]user.User, error) + GetAllAssetsByUserID(ctx context.Context, flt Filter, userID string) ([]asset.Asset, error) + GetAllAssetsByUserEmail(ctx context.Context, flt Filter, userEmail string) ([]asset.Asset, error) GetAssetByUserID(ctx context.Context, userID string, assetID string) (asset.Asset, error) Delete(ctx context.Context, userID string, assetID string) error } diff --git a/store/postgres/asset_repository.go b/store/postgres/asset_repository.go index 5917b4b6..a1702f2a 100644 --- a/store/postgres/asset_repository.go +++ b/store/postgres/asset_repository.go @@ -24,16 +24,16 @@ type AssetRepository struct { defaultUserProvider string } -// GetAll retrieves list of assets with filters via config -func (r *AssetRepository) GetAll(ctx context.Context, cfg asset.Config) ([]asset.Asset, error) { - size := cfg.Size +// GetAll retrieves list of assets with filters +func (r *AssetRepository) GetAll(ctx context.Context, flt asset.Filter) ([]asset.Asset, error) { + size := flt.Size if size == 0 { size = r.defaultGetMaxSize } - builder := r.getAssetSQL().Limit(uint64(size)).Offset(uint64(cfg.Offset)) - builder = r.BuildFilterQuery(builder, cfg) - builder = r.buildOrderQuery(builder, cfg) + builder := r.getAssetSQL().Limit(uint64(size)).Offset(uint64(flt.Offset)) + builder = r.BuildFilterQuery(builder, flt) + builder = r.buildOrderQuery(builder, flt) query, args, err := r.buildSQL(builder) if err != nil { return nil, fmt.Errorf("error building query: %w", err) @@ -54,9 +54,9 @@ func (r *AssetRepository) GetAll(ctx context.Context, cfg asset.Config) ([]asset } // GetCount retrieves number of assets for every type -func (r *AssetRepository) GetCount(ctx context.Context, config asset.Config) (total int, err error) { +func (r *AssetRepository) GetCount(ctx context.Context, flt asset.Filter) (total int, err error) { builder := sq.Select("count(1)").From("assets") - builder = r.BuildFilterQuery(builder, config) + builder = r.BuildFilterQuery(builder, flt) query, args, err := r.buildSQL(builder) if err != nil { err = fmt.Errorf("error building count query: %w", err) @@ -146,13 +146,13 @@ func (r *AssetRepository) Find(ctx context.Context, assetURN string, assetType a } // GetVersionHistory retrieves the versions of an asset -func (r *AssetRepository) GetVersionHistory(ctx context.Context, cfg asset.Config, id string) (avs []asset.Asset, err error) { +func (r *AssetRepository) GetVersionHistory(ctx context.Context, flt asset.Filter, id string) (avs []asset.Asset, err error) { if !isValidUUID(id) { err = asset.InvalidError{AssetID: id} return } - size := cfg.Size + size := flt.Size if size == 0 { size = r.defaultGetMaxSize } @@ -161,7 +161,7 @@ func (r *AssetRepository) GetVersionHistory(ctx context.Context, cfg asset.Confi Where(sq.Eq{"a.asset_id": id}). OrderBy("version DESC"). Limit(uint64(size)). - Offset(uint64(cfg.Offset)) + Offset(uint64(flt.Offset)) query, args, err := r.buildSQL(builder) if err != nil { err = fmt.Errorf("error building query: %w", err) @@ -643,19 +643,19 @@ func (r *AssetRepository) getAssetVersionSQL() sq.SelectBuilder { } // BuildFilterQuery retrieves the sql query based on applied filter in the queryString -func (r *AssetRepository) BuildFilterQuery(builder sq.SelectBuilder, cfg asset.Config) sq.SelectBuilder { - if len(cfg.Types) > 0 { - builder = builder.Where(sq.Eq{"type": cfg.Types}) +func (r *AssetRepository) BuildFilterQuery(builder sq.SelectBuilder, flt asset.Filter) sq.SelectBuilder { + if len(flt.Types) > 0 { + builder = builder.Where(sq.Eq{"type": flt.Types}) } - if len(cfg.Services) > 0 { - builder = builder.Where(sq.Eq{"service": cfg.Services}) + if len(flt.Services) > 0 { + builder = builder.Where(sq.Eq{"service": flt.Services}) } - if len(cfg.QueryFields) > 0 && cfg.Query != "" { + if len(flt.QueryFields) > 0 && flt.Query != "" { orClause := sq.Or{} - for _, field := range cfg.QueryFields { + for _, field := range flt.QueryFields { finalQuery := field if strings.Contains(field, "data") { @@ -663,14 +663,14 @@ func (r *AssetRepository) BuildFilterQuery(builder sq.SelectBuilder, cfg asset.C finalQuery = nestedDataQuery(query) } orClause = append(orClause, sq.ILike{ - finalQuery: fmt.Sprint("%", cfg.Query, "%"), + finalQuery: fmt.Sprint("%", flt.Query, "%"), }) } builder = builder.Where(orClause) } - if len(cfg.Data) > 0 { - for key, val := range cfg.Data { + if len(flt.Data) > 0 { + for key, val := range flt.Data { finalQuery := nestedDataQuery(key) builder = builder.Where(fmt.Sprintf("%s = '%s'", finalQuery, val)) } @@ -680,17 +680,17 @@ func (r *AssetRepository) BuildFilterQuery(builder sq.SelectBuilder, cfg asset.C } // buildFilterQuery retrieves the ordered sql query based on the sorting filter used in queryString -func (r *AssetRepository) buildOrderQuery(builder sq.SelectBuilder, cfg asset.Config) sq.SelectBuilder { - if cfg.SortBy == "" { +func (r *AssetRepository) buildOrderQuery(builder sq.SelectBuilder, flt asset.Filter) sq.SelectBuilder { + if flt.SortBy == "" { return builder } orderDirection := "ASC" - if cfg.SortDirection != "" { - orderDirection = cfg.SortDirection + if flt.SortDirection != "" { + orderDirection = flt.SortDirection } - return builder.OrderBy(cfg.SortBy + " " + orderDirection) + return builder.OrderBy(flt.SortBy + " " + orderDirection) } // NewAssetRepository initializes user repository clients diff --git a/store/postgres/asset_repository_test.go b/store/postgres/asset_repository_test.go index 1e11f229..7720b191 100644 --- a/store/postgres/asset_repository_test.go +++ b/store/postgres/asset_repository_test.go @@ -136,26 +136,26 @@ func (r *AssetRepositoryTestSuite) TestBuildFilterQuery() { testCases := []struct { description string - config asset.Config + config asset.Filter expectedQuery string }{ { description: "should return sql query with types filter", - config: asset.Config{ + config: asset.Filter{ Types: []asset.Type{asset.TypeTable}, }, expectedQuery: `type IN ($1)`, }, { description: "should return sql query with services filter", - config: asset.Config{ + config: asset.Filter{ Services: []string{"mysql", "kafka"}, }, expectedQuery: `service IN ($1,$2)`, }, { description: "should return sql query with query fields filter", - config: asset.Config{ + config: asset.Filter{ QueryFields: []string{"name", "description"}, Query: "demo", }, @@ -163,7 +163,7 @@ func (r *AssetRepositoryTestSuite) TestBuildFilterQuery() { }, { description: "should return sql query with nested data query filter", - config: asset.Config{ + config: asset.Filter{ QueryFields: []string{"data.landscape.properties.project-id", "description"}, Query: "columbus_002", }, @@ -171,7 +171,7 @@ func (r *AssetRepositoryTestSuite) TestBuildFilterQuery() { }, { description: "should return sql query with asset's data fields filter", - config: asset.Config{ + config: asset.Filter{ Data: map[string]string{ "entity": "odpf", "country": "th", @@ -181,7 +181,7 @@ func (r *AssetRepositoryTestSuite) TestBuildFilterQuery() { }, { description: "should return sql query with asset's nested data fields filter", - config: asset.Config{ + config: asset.Filter{ Data: map[string]string{ "landscape.properties.project-id": "columbus_001", "country": "vn", @@ -209,7 +209,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { assets := r.insertRecord() r.Run("should return all assets limited by default size", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{}) + results, err := r.repository.GetAll(r.ctx, asset.Filter{}) r.Require().NoError(err) r.Require().Len(results, defaultGetMaxSize) for i := 0; i < defaultGetMaxSize; i++ { @@ -219,7 +219,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { r.Run("should override default size using GetConfig.Size", func() { size := 6 - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Size: size, }) r.Require().NoError(err) @@ -231,7 +231,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { r.Run("should fetch assets by offset defined in GetConfig.Offset", func() { offset := 2 - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Offset: offset, }) r.Require().NoError(err) @@ -241,7 +241,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using type", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Types: []asset.Type{asset.TypeTable}, SortBy: "urn", SortDirection: "desc", @@ -256,7 +256,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using service", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Services: []string{"mysql", "kafka"}, SortBy: "urn", }) @@ -270,7 +270,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using query fields", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ QueryFields: []string{"name", "description"}, Query: "demo", SortBy: "urn", @@ -285,7 +285,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter only using nested query data fields", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ QueryFields: []string{"data.landscape.properties.project-id", "data.title"}, Query: "columbus_001", SortBy: "urn", @@ -300,7 +300,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using query field with nested query data fields", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ QueryFields: []string{"data.landscape.properties.project-id", "description"}, Query: "columbus_002", SortBy: "urn", @@ -315,7 +315,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using asset's data fields", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Data: map[string]string{ "entity": "odpf", "country": "th", @@ -331,7 +331,7 @@ func (r *AssetRepositoryTestSuite) TestGetAll() { }) r.Run("should filter using asset's nested data fields", func() { - results, err := r.repository.GetAll(r.ctx, asset.Config{ + results, err := r.repository.GetAll(r.ctx, asset.Filter{ Data: map[string]string{ "landscape.properties.project-id": "columbus_001", "country": "vn", @@ -366,7 +366,7 @@ func (r *AssetRepositoryTestSuite) TestGetCount() { } r.Run("should return total assets with filter", func() { - actual, err := r.repository.GetCount(r.ctx, asset.Config{ + actual, err := r.repository.GetCount(r.ctx, asset.Filter{ Types: []asset.Type{typ}, Services: service, }) @@ -617,7 +617,7 @@ func (r *AssetRepositoryTestSuite) TestVersions() { }, } - assetVersions, err := r.repository.GetVersionHistory(r.ctx, asset.Config{Size: 3}, astVersioning.ID) + assetVersions, err := r.repository.GetVersionHistory(r.ctx, asset.Filter{Size: 3}, astVersioning.ID) r.NoError(err) // making updatedby user time empty to make ast comparable for i := 0; i < len(assetVersions); i++ { diff --git a/store/postgres/star_repository.go b/store/postgres/star_repository.go index a2f6c428..e0e53122 100644 --- a/store/postgres/star_repository.go +++ b/store/postgres/star_repository.go @@ -64,7 +64,7 @@ func (r *StarRepository) Create(ctx context.Context, userID string, assetID stri } // GetStargazers fetch list of user IDs that star an asset -func (r *StarRepository) GetStargazers(ctx context.Context, cfg star.Config, assetID string) ([]user.User, error) { +func (r *StarRepository) GetStargazers(ctx context.Context, flt star.Filter, assetID string) ([]user.User, error) { if assetID == "" { return nil, star.ErrEmptyAssetID } @@ -73,7 +73,7 @@ func (r *StarRepository) GetStargazers(ctx context.Context, cfg star.Config, ass return nil, star.InvalidError{AssetID: assetID} } - starClausesValue := r.buildClausesValue(cfg) + starClausesValue := r.buildClausesValue(flt) var userModels UserModels if err := r.client.db.SelectContext(ctx, &userModels, ` @@ -103,7 +103,7 @@ func (r *StarRepository) GetStargazers(ctx context.Context, cfg star.Config, ass } // GetAllAssetsByUserID fetch list of assets starred by a user -func (r *StarRepository) GetAllAssetsByUserID(ctx context.Context, cfg star.Config, userID string) ([]asset.Asset, error) { +func (r *StarRepository) GetAllAssetsByUserID(ctx context.Context, flt star.Filter, userID string) ([]asset.Asset, error) { if userID == "" { return nil, star.ErrEmptyUserID } @@ -112,7 +112,7 @@ func (r *StarRepository) GetAllAssetsByUserID(ctx context.Context, cfg star.Conf return nil, star.InvalidError{UserID: userID} } - starClausesValue := r.buildClausesValue(cfg) + starClausesValue := r.buildClausesValue(flt) var assetModels []AssetModel if err := r.client.db.SelectContext(ctx, &assetModels, fmt.Sprintf(` @@ -164,12 +164,12 @@ func (r *StarRepository) GetAllAssetsByUserID(ctx context.Context, cfg star.Conf // GetAllAssetsByUserEmail fetch list of assets starred by a user // TODO: this function is temporary and might be remove in the future version -func (r *StarRepository) GetAllAssetsByUserEmail(ctx context.Context, cfg star.Config, userEmail string) ([]asset.Asset, error) { +func (r *StarRepository) GetAllAssetsByUserEmail(ctx context.Context, flt star.Filter, userEmail string) ([]asset.Asset, error) { if userEmail == "" { return nil, star.ErrEmptyUserID } - starClausesValue := r.buildClausesValue(cfg) + starClausesValue := r.buildClausesValue(flt) var assetModels []AssetModel if err := r.client.db.SelectContext(ctx, &assetModels, fmt.Sprintf(` @@ -314,7 +314,7 @@ func (r *StarRepository) Delete(ctx context.Context, userID string, assetID stri return nil } -func (r *StarRepository) buildClausesValue(cfg star.Config) StarClauses { +func (r *StarRepository) buildClausesValue(flt star.Filter) StarClauses { sCfg := StarClauses{ Offset: 0, Limit: DEFAULT_MAX_RESULT_SIZE, @@ -322,22 +322,22 @@ func (r *StarRepository) buildClausesValue(cfg star.Config) StarClauses { SortDirectionKey: sortDirectionDescending, } - if cfg.Size > 0 { - sCfg.Limit = cfg.Size + if flt.Size > 0 { + sCfg.Limit = flt.Size } - if cfg.Offset < 1 { - cfg.Offset = 0 + if flt.Offset < 1 { + flt.Offset = 0 } - switch cfg.Sort { + switch flt.Sort { case star.SortKeyCreated: sCfg.SortKey = columnNameCreatedAt case star.SortKeyUpdated: sCfg.SortKey = columnNameUpdatedAt } - switch cfg.SortDirection { + switch flt.SortDirection { case star.SortDirectionKeyAscending: sCfg.SortDirectionKey = sortDirectionAscending case star.SortDirectionKeyDescending: diff --git a/store/postgres/star_repository_test.go b/store/postgres/star_repository_test.go index caad0cc4..8759ad5c 100644 --- a/store/postgres/star_repository_test.go +++ b/store/postgres/star_repository_test.go @@ -139,7 +139,7 @@ func (r *StarRepositoryTestSuite) TestCreate() { func (r *StarRepositoryTestSuite) TestGetStargazers() { ownerEmail := "test-getstargazers@odpf.io" - defaultCfg := star.Config{} + defaultCfg := star.Filter{} r.Run("return ErrEmptyAssetID if asset id is empty", func() { users, err := r.repository.GetStargazers(r.ctx, defaultCfg, "") r.ErrorIs(err, star.ErrEmptyAssetID) @@ -212,7 +212,7 @@ func (r *StarRepositoryTestSuite) TestGetStargazers() { assetID = createdAsset.ID } - cfg := star.Config{Size: 7} + cfg := star.Filter{Size: 7} actualUsers, err := r.repository.GetStargazers(r.ctx, cfg, assetID) r.NoError(err) @@ -223,7 +223,7 @@ func (r *StarRepositoryTestSuite) TestGetStargazers() { func (r *StarRepositoryTestSuite) TestGetAllAssetsByUserID() { ownerEmail := "test-getallbyuserid@odpf.io" - defaultCfg := star.Config{} + defaultCfg := star.Filter{} r.Run("return invalid error if user id is empty", func() { assets, err := r.repository.GetAllAssetsByUserID(r.ctx, defaultCfg, "") r.ErrorIs(err, star.ErrEmptyUserID) @@ -298,7 +298,7 @@ func (r *StarRepositoryTestSuite) TestGetAllAssetsByUserID() { r.NotEmpty(id) } - cfg := star.Config{Size: 7} + cfg := star.Filter{Size: 7} actualAssets, err := r.repository.GetAllAssetsByUserID(r.ctx, cfg, userID) r.NoError(err) r.NoError(err) @@ -309,7 +309,7 @@ func (r *StarRepositoryTestSuite) TestGetAllAssetsByUserID() { func (r *StarRepositoryTestSuite) TestGetAllAssetsByUserEmail() { userEmail := "user@odpf.io" - defaultCfg := star.Config{} + defaultCfg := star.Filter{} r.Run("return invalid error if user email is empty", func() { assets, err := r.repository.GetAllAssetsByUserEmail(r.ctx, defaultCfg, "") r.ErrorIs(err, star.ErrEmptyUserID) @@ -377,7 +377,7 @@ func (r *StarRepositoryTestSuite) TestGetAllAssetsByUserEmail() { r.NotEmpty(id) } - cfg := star.Config{Size: 7} + cfg := star.Filter{Size: 7} actualAssets, err := r.repository.GetAllAssetsByUserEmail(r.ctx, cfg, userEmail) r.NoError(err) r.NoError(err) @@ -510,7 +510,7 @@ func (r *StarRepositoryTestSuite) TestDelete() { r.NoError(err) r.NotEmpty(id) - actualAssets, err := r.repository.GetAllAssetsByUserID(r.ctx, star.Config{}, userID1) + actualAssets, err := r.repository.GetAllAssetsByUserID(r.ctx, star.Filter{}, userID1) r.NoError(err) r.Len(actualAssets, 3) @@ -518,7 +518,7 @@ func (r *StarRepositoryTestSuite) TestDelete() { err = r.repository.Delete(r.ctx, userID1, createdAsset3.ID) r.NoError(err) - actualAssets, err = r.repository.GetAllAssetsByUserID(r.ctx, star.Config{}, userID1) + actualAssets, err = r.repository.GetAllAssetsByUserID(r.ctx, star.Filter{}, userID1) r.NoError(err) assetIDs := []string{} diff --git a/user/filter.go b/user/filter.go deleted file mode 100644 index a00006b6..00000000 --- a/user/filter.go +++ /dev/null @@ -1 +0,0 @@ -package user From 6d06d589286e0a3c3a96e47b4696cab02006f438 Mon Sep 17 00:00:00 2001 From: Muhammad Abduh Date: Wed, 13 Apr 2022 16:54:22 +0700 Subject: [PATCH 3/4] fix(asset): failing test in handler --- api/v1beta1/asset_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/v1beta1/asset_test.go b/api/v1beta1/asset_test.go index b4ab4d91..a328fa22 100644 --- a/api/v1beta1/asset_test.go +++ b/api/v1beta1/asset_test.go @@ -137,6 +137,8 @@ func TestGetAllAssets(t *testing.T) { ar.On("GetCount", ctx, asset.Filter{ Types: []asset.Type{"job"}, Services: []string{"kafka"}, + Size: 10, + Offset: 5, }).Return(150, nil, nil) }, PostCheck: func(resp *compassv1beta1.GetAllAssetsResponse) error { From 179f6b92dd02b46f3d537e9c5b4bf642a372858a Mon Sep 17 00:00:00 2001 From: Muhammad Abduh Date: Thu, 14 Apr 2022 10:14:44 +0700 Subject: [PATCH 4/4] chore: update proton commit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3d17e281..ee8e50d8 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ NAME="github.com/odpf/columbus" VERSION=$(shell git describe --always --tags 2>/dev/null) COVERFILE="/tmp/columbus.coverprofile" -PROTON_COMMIT := "e95f7d235911669fc8cfc5e40d153189a3ccce32" +PROTON_COMMIT := "712a5a1ae39c6dbbd5a1e152c2c082dde18b5e79" .PHONY: all build test clean install proto