diff --git a/clients/v1/clients.pb.go b/clients/v1/clients.pb.go index b37e666..b4c54a1 100644 --- a/clients/v1/clients.pb.go +++ b/clients/v1/clients.pb.go @@ -23,6 +23,62 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// ExternalAccountType identifies the type of external account provider. +type ExternalAccountType int32 + +const ( + ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_UNSPECIFIED ExternalAccountType = 0 + ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_PASSWORD ExternalAccountType = 1 + ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_GITHUB ExternalAccountType = 2 + ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_GITLAB ExternalAccountType = 3 + ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_GOOGLE ExternalAccountType = 4 +) + +// Enum value maps for ExternalAccountType. +var ( + ExternalAccountType_name = map[int32]string{ + 0: "EXTERNAL_ACCOUNT_TYPE_UNSPECIFIED", + 1: "EXTERNAL_ACCOUNT_TYPE_PASSWORD", + 2: "EXTERNAL_ACCOUNT_TYPE_GITHUB", + 3: "EXTERNAL_ACCOUNT_TYPE_GITLAB", + 4: "EXTERNAL_ACCOUNT_TYPE_GOOGLE", + } + ExternalAccountType_value = map[string]int32{ + "EXTERNAL_ACCOUNT_TYPE_UNSPECIFIED": 0, + "EXTERNAL_ACCOUNT_TYPE_PASSWORD": 1, + "EXTERNAL_ACCOUNT_TYPE_GITHUB": 2, + "EXTERNAL_ACCOUNT_TYPE_GITLAB": 3, + "EXTERNAL_ACCOUNT_TYPE_GOOGLE": 4, + } +) + +func (x ExternalAccountType) Enum() *ExternalAccountType { + p := new(ExternalAccountType) + *p = x + return p +} + +func (x ExternalAccountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExternalAccountType) Descriptor() protoreflect.EnumDescriptor { + return file_clients_v1_clients_proto_enumTypes[0].Descriptor() +} + +func (ExternalAccountType) Type() protoreflect.EnumType { + return &file_clients_v1_clients_proto_enumTypes[0] +} + +func (x ExternalAccountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ExternalAccountType.Descriptor instead. +func (ExternalAccountType) EnumDescriptor() ([]byte, []int) { + return file_clients_v1_clients_proto_rawDescGZIP(), []int{0} +} + // Exactly one attribute can be set. type GetUserRequest struct { state protoimpl.MessageState @@ -799,6 +855,178 @@ func (x *UpdateUserMetadataResponse) GetMetadata() *UserServiceMetadata { return nil } +type GetUserExternalAccountsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user's external ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetUserExternalAccountsRequest) Reset() { + *x = GetUserExternalAccountsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_clients_v1_clients_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserExternalAccountsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserExternalAccountsRequest) ProtoMessage() {} + +func (x *GetUserExternalAccountsRequest) ProtoReflect() protoreflect.Message { + mi := &file_clients_v1_clients_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserExternalAccountsRequest.ProtoReflect.Descriptor instead. +func (*GetUserExternalAccountsRequest) Descriptor() ([]byte, []int) { + return file_clients_v1_clients_proto_rawDescGZIP(), []int{13} +} + +func (x *GetUserExternalAccountsRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// ExternalAccount represents a connection between a SAMS user and an external +// account provider. +type ExternalAccount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The type of the external account. + Type ExternalAccountType `protobuf:"varint,1,opt,name=type,proto3,enum=clients.v1.ExternalAccountType" json:"type,omitempty"` + // The account identifier from the external provider (e.g. the GitHub user ID). + AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` + // The time the external account was connected. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // The time the external account was last updated. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *ExternalAccount) Reset() { + *x = ExternalAccount{} + if protoimpl.UnsafeEnabled { + mi := &file_clients_v1_clients_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExternalAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExternalAccount) ProtoMessage() {} + +func (x *ExternalAccount) ProtoReflect() protoreflect.Message { + mi := &file_clients_v1_clients_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExternalAccount.ProtoReflect.Descriptor instead. +func (*ExternalAccount) Descriptor() ([]byte, []int) { + return file_clients_v1_clients_proto_rawDescGZIP(), []int{14} +} + +func (x *ExternalAccount) GetType() ExternalAccountType { + if x != nil { + return x.Type + } + return ExternalAccountType_EXTERNAL_ACCOUNT_TYPE_UNSPECIFIED +} + +func (x *ExternalAccount) GetAccountId() string { + if x != nil { + return x.AccountId + } + return "" +} + +func (x *ExternalAccount) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *ExternalAccount) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +type GetUserExternalAccountsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExternalAccounts []*ExternalAccount `protobuf:"bytes,1,rep,name=external_accounts,json=externalAccounts,proto3" json:"external_accounts,omitempty"` +} + +func (x *GetUserExternalAccountsResponse) Reset() { + *x = GetUserExternalAccountsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_clients_v1_clients_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserExternalAccountsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserExternalAccountsResponse) ProtoMessage() {} + +func (x *GetUserExternalAccountsResponse) ProtoReflect() protoreflect.Message { + mi := &file_clients_v1_clients_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUserExternalAccountsResponse.ProtoReflect.Descriptor instead. +func (*GetUserExternalAccountsResponse) Descriptor() ([]byte, []int) { + return file_clients_v1_clients_proto_rawDescGZIP(), []int{15} +} + +func (x *GetUserExternalAccountsResponse) GetExternalAccounts() []*ExternalAccount { + if x != nil { + return x.ExternalAccounts + } + return nil +} + type CreateUserRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -813,7 +1041,7 @@ type CreateUserRequest struct { func (x *CreateUserRequest) Reset() { *x = CreateUserRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[13] + mi := &file_clients_v1_clients_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -826,7 +1054,7 @@ func (x *CreateUserRequest) String() string { func (*CreateUserRequest) ProtoMessage() {} func (x *CreateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[13] + mi := &file_clients_v1_clients_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -839,7 +1067,7 @@ func (x *CreateUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateUserRequest.ProtoReflect.Descriptor instead. func (*CreateUserRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{13} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{16} } func (x *CreateUserRequest) GetEmail() string { @@ -868,7 +1096,7 @@ type CreateUserResponse struct { func (x *CreateUserResponse) Reset() { *x = CreateUserResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[14] + mi := &file_clients_v1_clients_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -881,7 +1109,7 @@ func (x *CreateUserResponse) String() string { func (*CreateUserResponse) ProtoMessage() {} func (x *CreateUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[14] + mi := &file_clients_v1_clients_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -894,7 +1122,7 @@ func (x *CreateUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateUserResponse.ProtoReflect.Descriptor instead. func (*CreateUserResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{14} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{17} } func (x *CreateUserResponse) GetUser() *User { @@ -916,7 +1144,7 @@ type GetSessionRequest struct { func (x *GetSessionRequest) Reset() { *x = GetSessionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[15] + mi := &file_clients_v1_clients_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -929,7 +1157,7 @@ func (x *GetSessionRequest) String() string { func (*GetSessionRequest) ProtoMessage() {} func (x *GetSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[15] + mi := &file_clients_v1_clients_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -942,7 +1170,7 @@ func (x *GetSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSessionRequest.ProtoReflect.Descriptor instead. func (*GetSessionRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{15} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{18} } func (x *GetSessionRequest) GetId() string { @@ -966,7 +1194,7 @@ type Session struct { func (x *Session) Reset() { *x = Session{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[16] + mi := &file_clients_v1_clients_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -979,7 +1207,7 @@ func (x *Session) String() string { func (*Session) ProtoMessage() {} func (x *Session) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[16] + mi := &file_clients_v1_clients_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -992,7 +1220,7 @@ func (x *Session) ProtoReflect() protoreflect.Message { // Deprecated: Use Session.ProtoReflect.Descriptor instead. func (*Session) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{16} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{19} } func (x *Session) GetId() string { @@ -1020,7 +1248,7 @@ type GetSessionResponse struct { func (x *GetSessionResponse) Reset() { *x = GetSessionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[17] + mi := &file_clients_v1_clients_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +1261,7 @@ func (x *GetSessionResponse) String() string { func (*GetSessionResponse) ProtoMessage() {} func (x *GetSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[17] + mi := &file_clients_v1_clients_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +1274,7 @@ func (x *GetSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSessionResponse.ProtoReflect.Descriptor instead. func (*GetSessionResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{17} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{20} } func (x *GetSessionResponse) GetSession() *Session { @@ -1070,7 +1298,7 @@ type SignOutSessionRequest struct { func (x *SignOutSessionRequest) Reset() { *x = SignOutSessionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[18] + mi := &file_clients_v1_clients_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1083,7 +1311,7 @@ func (x *SignOutSessionRequest) String() string { func (*SignOutSessionRequest) ProtoMessage() {} func (x *SignOutSessionRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[18] + mi := &file_clients_v1_clients_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1096,7 +1324,7 @@ func (x *SignOutSessionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SignOutSessionRequest.ProtoReflect.Descriptor instead. func (*SignOutSessionRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{18} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{21} } func (x *SignOutSessionRequest) GetId() string { @@ -1122,7 +1350,7 @@ type SignOutSessionResponse struct { func (x *SignOutSessionResponse) Reset() { *x = SignOutSessionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[19] + mi := &file_clients_v1_clients_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1135,7 +1363,7 @@ func (x *SignOutSessionResponse) String() string { func (*SignOutSessionResponse) ProtoMessage() {} func (x *SignOutSessionResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[19] + mi := &file_clients_v1_clients_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1148,7 +1376,7 @@ func (x *SignOutSessionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SignOutSessionResponse.ProtoReflect.Descriptor instead. func (*SignOutSessionResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{19} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{22} } // ErrorRecordMismatch is returned in the error details when the record does not match the expected record, @@ -1162,7 +1390,7 @@ type ErrorRecordMismatch struct { func (x *ErrorRecordMismatch) Reset() { *x = ErrorRecordMismatch{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[20] + mi := &file_clients_v1_clients_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1175,7 +1403,7 @@ func (x *ErrorRecordMismatch) String() string { func (*ErrorRecordMismatch) ProtoMessage() {} func (x *ErrorRecordMismatch) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[20] + mi := &file_clients_v1_clients_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1188,7 +1416,7 @@ func (x *ErrorRecordMismatch) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorRecordMismatch.ProtoReflect.Descriptor instead. func (*ErrorRecordMismatch) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{20} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{23} } type IntrospectTokenRequest struct { @@ -1203,7 +1431,7 @@ type IntrospectTokenRequest struct { func (x *IntrospectTokenRequest) Reset() { *x = IntrospectTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[21] + mi := &file_clients_v1_clients_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1216,7 +1444,7 @@ func (x *IntrospectTokenRequest) String() string { func (*IntrospectTokenRequest) ProtoMessage() {} func (x *IntrospectTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[21] + mi := &file_clients_v1_clients_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1229,7 +1457,7 @@ func (x *IntrospectTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IntrospectTokenRequest.ProtoReflect.Descriptor instead. func (*IntrospectTokenRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{21} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{24} } func (x *IntrospectTokenRequest) GetToken() string { @@ -1261,7 +1489,7 @@ type IntrospectTokenResponse struct { func (x *IntrospectTokenResponse) Reset() { *x = IntrospectTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[22] + mi := &file_clients_v1_clients_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1274,7 +1502,7 @@ func (x *IntrospectTokenResponse) String() string { func (*IntrospectTokenResponse) ProtoMessage() {} func (x *IntrospectTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[22] + mi := &file_clients_v1_clients_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1287,7 +1515,7 @@ func (x *IntrospectTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IntrospectTokenResponse.ProtoReflect.Descriptor instead. func (*IntrospectTokenResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{22} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{25} } func (x *IntrospectTokenResponse) GetActive() bool { @@ -1342,7 +1570,7 @@ type RegisterRoleResourcesRequestMetadata struct { func (x *RegisterRoleResourcesRequestMetadata) Reset() { *x = RegisterRoleResourcesRequestMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[23] + mi := &file_clients_v1_clients_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1355,7 +1583,7 @@ func (x *RegisterRoleResourcesRequestMetadata) String() string { func (*RegisterRoleResourcesRequestMetadata) ProtoMessage() {} func (x *RegisterRoleResourcesRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[23] + mi := &file_clients_v1_clients_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1368,7 +1596,7 @@ func (x *RegisterRoleResourcesRequestMetadata) ProtoReflect() protoreflect.Messa // Deprecated: Use RegisterRoleResourcesRequestMetadata.ProtoReflect.Descriptor instead. func (*RegisterRoleResourcesRequestMetadata) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{23} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{26} } func (x *RegisterRoleResourcesRequestMetadata) GetRevision() string { @@ -1400,7 +1628,7 @@ type RegisterRoleResourcesRequest struct { func (x *RegisterRoleResourcesRequest) Reset() { *x = RegisterRoleResourcesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[24] + mi := &file_clients_v1_clients_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1413,7 +1641,7 @@ func (x *RegisterRoleResourcesRequest) String() string { func (*RegisterRoleResourcesRequest) ProtoMessage() {} func (x *RegisterRoleResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[24] + mi := &file_clients_v1_clients_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1426,7 +1654,7 @@ func (x *RegisterRoleResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRoleResourcesRequest.ProtoReflect.Descriptor instead. func (*RegisterRoleResourcesRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{24} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{27} } func (m *RegisterRoleResourcesRequest) GetPayload() isRegisterRoleResourcesRequest_Payload { @@ -1482,7 +1710,7 @@ type RegisterRoleResourcesResponse struct { func (x *RegisterRoleResourcesResponse) Reset() { *x = RegisterRoleResourcesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[25] + mi := &file_clients_v1_clients_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1495,7 +1723,7 @@ func (x *RegisterRoleResourcesResponse) String() string { func (*RegisterRoleResourcesResponse) ProtoMessage() {} func (x *RegisterRoleResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[25] + mi := &file_clients_v1_clients_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1508,7 +1736,7 @@ func (x *RegisterRoleResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRoleResourcesResponse.ProtoReflect.Descriptor instead. func (*RegisterRoleResourcesResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{25} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{28} } func (x *RegisterRoleResourcesResponse) GetResourceCount() uint64 { @@ -1532,7 +1760,7 @@ type RoleResource struct { func (x *RoleResource) Reset() { *x = RoleResource{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[26] + mi := &file_clients_v1_clients_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1545,7 +1773,7 @@ func (x *RoleResource) String() string { func (*RoleResource) ProtoMessage() {} func (x *RoleResource) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[26] + mi := &file_clients_v1_clients_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1558,7 +1786,7 @@ func (x *RoleResource) ProtoReflect() protoreflect.Message { // Deprecated: Use RoleResource.ProtoReflect.Descriptor instead. func (*RoleResource) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{26} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{29} } func (x *RoleResource) GetResourceId() string { @@ -1599,7 +1827,7 @@ type ServiceAccessToken struct { func (x *ServiceAccessToken) Reset() { *x = ServiceAccessToken{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[27] + mi := &file_clients_v1_clients_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1612,7 +1840,7 @@ func (x *ServiceAccessToken) String() string { func (*ServiceAccessToken) ProtoMessage() {} func (x *ServiceAccessToken) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[27] + mi := &file_clients_v1_clients_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1625,7 +1853,7 @@ func (x *ServiceAccessToken) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceAccessToken.ProtoReflect.Descriptor instead. func (*ServiceAccessToken) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{27} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{30} } func (x *ServiceAccessToken) GetId() string { @@ -1694,7 +1922,7 @@ type CreateServiceAccessTokenRequest struct { func (x *CreateServiceAccessTokenRequest) Reset() { *x = CreateServiceAccessTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[28] + mi := &file_clients_v1_clients_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1707,7 +1935,7 @@ func (x *CreateServiceAccessTokenRequest) String() string { func (*CreateServiceAccessTokenRequest) ProtoMessage() {} func (x *CreateServiceAccessTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[28] + mi := &file_clients_v1_clients_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1720,7 +1948,7 @@ func (x *CreateServiceAccessTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateServiceAccessTokenRequest.ProtoReflect.Descriptor instead. func (*CreateServiceAccessTokenRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{28} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{31} } func (x *CreateServiceAccessTokenRequest) GetToken() *ServiceAccessToken { @@ -1743,7 +1971,7 @@ type CreateServiceAccessTokenResponse struct { func (x *CreateServiceAccessTokenResponse) Reset() { *x = CreateServiceAccessTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[29] + mi := &file_clients_v1_clients_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1756,7 +1984,7 @@ func (x *CreateServiceAccessTokenResponse) String() string { func (*CreateServiceAccessTokenResponse) ProtoMessage() {} func (x *CreateServiceAccessTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[29] + mi := &file_clients_v1_clients_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +1997,7 @@ func (x *CreateServiceAccessTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateServiceAccessTokenResponse.ProtoReflect.Descriptor instead. func (*CreateServiceAccessTokenResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{29} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{32} } func (x *CreateServiceAccessTokenResponse) GetToken() *ServiceAccessToken { @@ -1811,7 +2039,7 @@ type ListServiceAccessTokensRequest struct { func (x *ListServiceAccessTokensRequest) Reset() { *x = ListServiceAccessTokensRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[30] + mi := &file_clients_v1_clients_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1824,7 +2052,7 @@ func (x *ListServiceAccessTokensRequest) String() string { func (*ListServiceAccessTokensRequest) ProtoMessage() {} func (x *ListServiceAccessTokensRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[30] + mi := &file_clients_v1_clients_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1837,7 +2065,7 @@ func (x *ListServiceAccessTokensRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServiceAccessTokensRequest.ProtoReflect.Descriptor instead. func (*ListServiceAccessTokensRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{30} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{33} } func (x *ListServiceAccessTokensRequest) GetPageSize() int32 { @@ -1877,7 +2105,7 @@ type ListServiceAccessTokensFilter struct { func (x *ListServiceAccessTokensFilter) Reset() { *x = ListServiceAccessTokensFilter{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[31] + mi := &file_clients_v1_clients_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1890,7 +2118,7 @@ func (x *ListServiceAccessTokensFilter) String() string { func (*ListServiceAccessTokensFilter) ProtoMessage() {} func (x *ListServiceAccessTokensFilter) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[31] + mi := &file_clients_v1_clients_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1903,7 +2131,7 @@ func (x *ListServiceAccessTokensFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServiceAccessTokensFilter.ProtoReflect.Descriptor instead. func (*ListServiceAccessTokensFilter) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{31} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{34} } func (m *ListServiceAccessTokensFilter) GetFilter() isListServiceAccessTokensFilter_Filter { @@ -1970,7 +2198,7 @@ type ListServiceAccessTokensResponse struct { func (x *ListServiceAccessTokensResponse) Reset() { *x = ListServiceAccessTokensResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[32] + mi := &file_clients_v1_clients_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1983,7 +2211,7 @@ func (x *ListServiceAccessTokensResponse) String() string { func (*ListServiceAccessTokensResponse) ProtoMessage() {} func (x *ListServiceAccessTokensResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[32] + mi := &file_clients_v1_clients_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1996,7 +2224,7 @@ func (x *ListServiceAccessTokensResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServiceAccessTokensResponse.ProtoReflect.Descriptor instead. func (*ListServiceAccessTokensResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{32} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{35} } func (x *ListServiceAccessTokensResponse) GetTokens() []*ServiceAccessToken { @@ -2018,7 +2246,7 @@ type RevokeServiceAccessTokenRequest struct { func (x *RevokeServiceAccessTokenRequest) Reset() { *x = RevokeServiceAccessTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[33] + mi := &file_clients_v1_clients_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2031,7 +2259,7 @@ func (x *RevokeServiceAccessTokenRequest) String() string { func (*RevokeServiceAccessTokenRequest) ProtoMessage() {} func (x *RevokeServiceAccessTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[33] + mi := &file_clients_v1_clients_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2044,7 +2272,7 @@ func (x *RevokeServiceAccessTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeServiceAccessTokenRequest.ProtoReflect.Descriptor instead. func (*RevokeServiceAccessTokenRequest) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{33} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{36} } func (x *RevokeServiceAccessTokenRequest) GetId() string { @@ -2063,7 +2291,7 @@ type RevokeServiceAccessTokenResponse struct { func (x *RevokeServiceAccessTokenResponse) Reset() { *x = RevokeServiceAccessTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[34] + mi := &file_clients_v1_clients_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2076,7 +2304,7 @@ func (x *RevokeServiceAccessTokenResponse) String() string { func (*RevokeServiceAccessTokenResponse) ProtoMessage() {} func (x *RevokeServiceAccessTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[34] + mi := &file_clients_v1_clients_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2089,7 +2317,7 @@ func (x *RevokeServiceAccessTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeServiceAccessTokenResponse.ProtoReflect.Descriptor instead. func (*RevokeServiceAccessTokenResponse) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{34} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{37} } type RegisterRoleResourcesRequest_Resources struct { @@ -2103,7 +2331,7 @@ type RegisterRoleResourcesRequest_Resources struct { func (x *RegisterRoleResourcesRequest_Resources) Reset() { *x = RegisterRoleResourcesRequest_Resources{} if protoimpl.UnsafeEnabled { - mi := &file_clients_v1_clients_proto_msgTypes[35] + mi := &file_clients_v1_clients_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2116,7 +2344,7 @@ func (x *RegisterRoleResourcesRequest_Resources) String() string { func (*RegisterRoleResourcesRequest_Resources) ProtoMessage() {} func (x *RegisterRoleResourcesRequest_Resources) ProtoReflect() protoreflect.Message { - mi := &file_clients_v1_clients_proto_msgTypes[35] + mi := &file_clients_v1_clients_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2129,7 +2357,7 @@ func (x *RegisterRoleResourcesRequest_Resources) ProtoReflect() protoreflect.Mes // Deprecated: Use RegisterRoleResourcesRequest_Resources.ProtoReflect.Descriptor instead. func (*RegisterRoleResourcesRequest_Resources) Descriptor() ([]byte, []int) { - return file_clients_v1_clients_proto_rawDescGZIP(), []int{24, 0} + return file_clients_v1_clients_proto_rawDescGZIP(), []int{27, 0} } func (x *RegisterRoleResourcesRequest_Resources) GetResources() []*RoleResource { @@ -2252,245 +2480,292 @@ var file_clients_v1_clients_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3d, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x29, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x43, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x15, 0x53, 0x69, 0x67, - 0x6e, 0x4f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x30, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x6b, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x22, 0x3d, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x3a, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x23, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, - 0x69, 0x67, 0x6e, 0x4f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x2e, 0x0a, 0x16, - 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xba, 0x01, 0x0a, - 0x17, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x22, 0x67, 0x0a, 0x24, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x92, 0x02, 0x0a, 0x1c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x46, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x52, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x22, 0x43, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x40, 0x0a, 0x15, 0x53, 0x69, 0x67, 0x6e, 0x4f, 0x75, + 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, + 0x4f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x2e, 0x0a, 0x16, 0x49, 0x6e, 0x74, + 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xba, 0x01, 0x0a, 0x17, 0x49, 0x6e, + 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, - 0x70, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x22, 0x67, 0x0a, 0x24, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, + 0x92, 0x02, 0x0a, 0x1c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x52, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x46, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x0c, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x90, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x70, 0x0a, 0x20, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x34, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0xa1, + 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x43, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x43, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x64, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x59, 0x0a, - 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x36, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x31, 0x0a, 0x1f, 0x52, 0x65, 0x76, 0x6f, + 0x65, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x19, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x73, + 0x68, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x68, 0x6f, 0x77, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, + 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x1f, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x31, 0x0a, 0x1f, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, 0x20, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, - 0xcb, 0x04, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x4f, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0b, 0x8a, 0xb5, 0x18, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x12, 0x52, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xc6, 0x01, 0x0a, + 0x13, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x45, + 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, + 0x20, 0x0a, 0x1c, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, + 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x43, + 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, + 0x42, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, + 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x4f, 0x4f, + 0x47, 0x4c, 0x45, 0x10, 0x04, 0x32, 0xe8, 0x05, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1a, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0b, 0x8a, 0xb5, 0x18, 0x07, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x15, 0x8a, 0xb5, 0x18, 0x11, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x75, 0x73, - 0x65, 0x72, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x8a, 0xb5, - 0x18, 0x16, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x3a, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x12, 0x5c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x2e, 0x63, 0x6c, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0b, 0x8a, 0xb5, 0x18, 0x07, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0b, + 0x8a, 0xb5, 0x18, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x8a, 0xb5, 0x18, 0x11, 0x73, 0x61, + 0x6d, 0x73, 0x3a, 0x3a, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x1f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1a, 0x8a, 0xb5, 0x18, 0x16, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x3a, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x12, 0x5c, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x2a, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xea, 0x01, - 0x0a, 0x0f, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, - 0x8a, 0xb5, 0x18, 0x13, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x3a, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x12, 0x71, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x4f, - 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4f, 0x75, 0x74, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x8a, 0xb5, 0x18, 0x22, 0x73, 0x61, + 0x6d, 0x73, 0x3a, 0x3a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x3a, 0x3a, 0x72, 0x65, 0x61, 0x64, + 0x32, 0xea, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x17, 0x8a, 0xb5, 0x18, 0x13, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x12, 0x71, 0x0a, 0x0e, 0x53, 0x69, + 0x67, 0x6e, 0x4f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4f, 0x75, - 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x18, 0x8a, 0xb5, 0x18, 0x14, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x32, 0x6b, 0x0a, 0x0d, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x49, - 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x72, - 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa1, 0x01, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x4f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x18, 0x8a, 0xb5, 0x18, 0x14, 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x32, 0x6b, 0x0a, + 0x0d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, + 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa1, 0x01, 0x0a, 0x0c, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x8a, 0xb5, 0x18, 0x1c, 0x73, 0x61, 0x6d, - 0x73, 0x3a, 0x3a, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x01, 0x32, 0x8a, 0x03, 0x0a, 0x1a, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x8a, 0xb5, 0x18, 0x1c, + 0x73, 0x61, 0x6d, 0x73, 0x3a, 0x3a, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x3a, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x01, 0x32, 0x8a, + 0x03, 0x0a, 0x1a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, + 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x2a, - 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7a, 0x0a, 0x18, - 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x7a, 0x0a, 0x18, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x3a, 0x52, 0x0a, 0x14, 0x73, 0x61, 0x6d, 0x73, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, - 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0xd1, 0x86, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x73, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x49, 0x5a, 0x47, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x2d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2d, - 0x67, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x3a, 0x52, 0x0a, 0x14, 0x73, + 0x61, 0x6d, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0xd1, 0x86, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x73, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, + 0x49, 0x5a, 0x47, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x2d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x73, + 0x64, 0x6b, 0x2d, 0x67, 0x6f, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2505,103 +2780,114 @@ func file_clients_v1_clients_proto_rawDescGZIP() []byte { return file_clients_v1_clients_proto_rawDescData } -var file_clients_v1_clients_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_clients_v1_clients_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_clients_v1_clients_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_clients_v1_clients_proto_goTypes = []interface{}{ - (*GetUserRequest)(nil), // 0: clients.v1.GetUserRequest - (*User)(nil), // 1: clients.v1.User - (*GetUserResponse)(nil), // 2: clients.v1.GetUserResponse - (*GetUsersRequest)(nil), // 3: clients.v1.GetUsersRequest - (*GetUsersResponse)(nil), // 4: clients.v1.GetUsersResponse - (*GetUserRolesRequest)(nil), // 5: clients.v1.GetUserRolesRequest - (*GetUserRolesResponse)(nil), // 6: clients.v1.GetUserRolesResponse - (*Role)(nil), // 7: clients.v1.Role - (*GetUserMetadataRequest)(nil), // 8: clients.v1.GetUserMetadataRequest - (*UserServiceMetadata)(nil), // 9: clients.v1.UserServiceMetadata - (*GetUserMetadataResponse)(nil), // 10: clients.v1.GetUserMetadataResponse - (*UpdateUserMetadataRequest)(nil), // 11: clients.v1.UpdateUserMetadataRequest - (*UpdateUserMetadataResponse)(nil), // 12: clients.v1.UpdateUserMetadataResponse - (*CreateUserRequest)(nil), // 13: clients.v1.CreateUserRequest - (*CreateUserResponse)(nil), // 14: clients.v1.CreateUserResponse - (*GetSessionRequest)(nil), // 15: clients.v1.GetSessionRequest - (*Session)(nil), // 16: clients.v1.Session - (*GetSessionResponse)(nil), // 17: clients.v1.GetSessionResponse - (*SignOutSessionRequest)(nil), // 18: clients.v1.SignOutSessionRequest - (*SignOutSessionResponse)(nil), // 19: clients.v1.SignOutSessionResponse - (*ErrorRecordMismatch)(nil), // 20: clients.v1.ErrorRecordMismatch - (*IntrospectTokenRequest)(nil), // 21: clients.v1.IntrospectTokenRequest - (*IntrospectTokenResponse)(nil), // 22: clients.v1.IntrospectTokenResponse - (*RegisterRoleResourcesRequestMetadata)(nil), // 23: clients.v1.RegisterRoleResourcesRequestMetadata - (*RegisterRoleResourcesRequest)(nil), // 24: clients.v1.RegisterRoleResourcesRequest - (*RegisterRoleResourcesResponse)(nil), // 25: clients.v1.RegisterRoleResourcesResponse - (*RoleResource)(nil), // 26: clients.v1.RoleResource - (*ServiceAccessToken)(nil), // 27: clients.v1.ServiceAccessToken - (*CreateServiceAccessTokenRequest)(nil), // 28: clients.v1.CreateServiceAccessTokenRequest - (*CreateServiceAccessTokenResponse)(nil), // 29: clients.v1.CreateServiceAccessTokenResponse - (*ListServiceAccessTokensRequest)(nil), // 30: clients.v1.ListServiceAccessTokensRequest - (*ListServiceAccessTokensFilter)(nil), // 31: clients.v1.ListServiceAccessTokensFilter - (*ListServiceAccessTokensResponse)(nil), // 32: clients.v1.ListServiceAccessTokensResponse - (*RevokeServiceAccessTokenRequest)(nil), // 33: clients.v1.RevokeServiceAccessTokenRequest - (*RevokeServiceAccessTokenResponse)(nil), // 34: clients.v1.RevokeServiceAccessTokenResponse - (*RegisterRoleResourcesRequest_Resources)(nil), // 35: clients.v1.RegisterRoleResourcesRequest.Resources - (*timestamppb.Timestamp)(nil), // 36: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 37: google.protobuf.Struct - (*descriptorpb.MethodOptions)(nil), // 38: google.protobuf.MethodOptions + (ExternalAccountType)(0), // 0: clients.v1.ExternalAccountType + (*GetUserRequest)(nil), // 1: clients.v1.GetUserRequest + (*User)(nil), // 2: clients.v1.User + (*GetUserResponse)(nil), // 3: clients.v1.GetUserResponse + (*GetUsersRequest)(nil), // 4: clients.v1.GetUsersRequest + (*GetUsersResponse)(nil), // 5: clients.v1.GetUsersResponse + (*GetUserRolesRequest)(nil), // 6: clients.v1.GetUserRolesRequest + (*GetUserRolesResponse)(nil), // 7: clients.v1.GetUserRolesResponse + (*Role)(nil), // 8: clients.v1.Role + (*GetUserMetadataRequest)(nil), // 9: clients.v1.GetUserMetadataRequest + (*UserServiceMetadata)(nil), // 10: clients.v1.UserServiceMetadata + (*GetUserMetadataResponse)(nil), // 11: clients.v1.GetUserMetadataResponse + (*UpdateUserMetadataRequest)(nil), // 12: clients.v1.UpdateUserMetadataRequest + (*UpdateUserMetadataResponse)(nil), // 13: clients.v1.UpdateUserMetadataResponse + (*GetUserExternalAccountsRequest)(nil), // 14: clients.v1.GetUserExternalAccountsRequest + (*ExternalAccount)(nil), // 15: clients.v1.ExternalAccount + (*GetUserExternalAccountsResponse)(nil), // 16: clients.v1.GetUserExternalAccountsResponse + (*CreateUserRequest)(nil), // 17: clients.v1.CreateUserRequest + (*CreateUserResponse)(nil), // 18: clients.v1.CreateUserResponse + (*GetSessionRequest)(nil), // 19: clients.v1.GetSessionRequest + (*Session)(nil), // 20: clients.v1.Session + (*GetSessionResponse)(nil), // 21: clients.v1.GetSessionResponse + (*SignOutSessionRequest)(nil), // 22: clients.v1.SignOutSessionRequest + (*SignOutSessionResponse)(nil), // 23: clients.v1.SignOutSessionResponse + (*ErrorRecordMismatch)(nil), // 24: clients.v1.ErrorRecordMismatch + (*IntrospectTokenRequest)(nil), // 25: clients.v1.IntrospectTokenRequest + (*IntrospectTokenResponse)(nil), // 26: clients.v1.IntrospectTokenResponse + (*RegisterRoleResourcesRequestMetadata)(nil), // 27: clients.v1.RegisterRoleResourcesRequestMetadata + (*RegisterRoleResourcesRequest)(nil), // 28: clients.v1.RegisterRoleResourcesRequest + (*RegisterRoleResourcesResponse)(nil), // 29: clients.v1.RegisterRoleResourcesResponse + (*RoleResource)(nil), // 30: clients.v1.RoleResource + (*ServiceAccessToken)(nil), // 31: clients.v1.ServiceAccessToken + (*CreateServiceAccessTokenRequest)(nil), // 32: clients.v1.CreateServiceAccessTokenRequest + (*CreateServiceAccessTokenResponse)(nil), // 33: clients.v1.CreateServiceAccessTokenResponse + (*ListServiceAccessTokensRequest)(nil), // 34: clients.v1.ListServiceAccessTokensRequest + (*ListServiceAccessTokensFilter)(nil), // 35: clients.v1.ListServiceAccessTokensFilter + (*ListServiceAccessTokensResponse)(nil), // 36: clients.v1.ListServiceAccessTokensResponse + (*RevokeServiceAccessTokenRequest)(nil), // 37: clients.v1.RevokeServiceAccessTokenRequest + (*RevokeServiceAccessTokenResponse)(nil), // 38: clients.v1.RevokeServiceAccessTokenResponse + (*RegisterRoleResourcesRequest_Resources)(nil), // 39: clients.v1.RegisterRoleResourcesRequest.Resources + (*timestamppb.Timestamp)(nil), // 40: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 41: google.protobuf.Struct + (*descriptorpb.MethodOptions)(nil), // 42: google.protobuf.MethodOptions } var file_clients_v1_clients_proto_depIdxs = []int32{ - 36, // 0: clients.v1.User.created_at:type_name -> google.protobuf.Timestamp - 36, // 1: clients.v1.User.updated_at:type_name -> google.protobuf.Timestamp - 1, // 2: clients.v1.GetUserResponse.user:type_name -> clients.v1.User - 1, // 3: clients.v1.GetUsersResponse.users:type_name -> clients.v1.User - 7, // 4: clients.v1.GetUserRolesResponse.user_roles:type_name -> clients.v1.Role - 37, // 5: clients.v1.UserServiceMetadata.metadata:type_name -> google.protobuf.Struct - 9, // 6: clients.v1.GetUserMetadataResponse.metadata:type_name -> clients.v1.UserServiceMetadata - 9, // 7: clients.v1.UpdateUserMetadataRequest.metadata:type_name -> clients.v1.UserServiceMetadata - 9, // 8: clients.v1.UpdateUserMetadataResponse.metadata:type_name -> clients.v1.UserServiceMetadata - 1, // 9: clients.v1.CreateUserResponse.user:type_name -> clients.v1.User - 1, // 10: clients.v1.Session.user:type_name -> clients.v1.User - 16, // 11: clients.v1.GetSessionResponse.session:type_name -> clients.v1.Session - 36, // 12: clients.v1.IntrospectTokenResponse.expires_at:type_name -> google.protobuf.Timestamp - 23, // 13: clients.v1.RegisterRoleResourcesRequest.metadata:type_name -> clients.v1.RegisterRoleResourcesRequestMetadata - 35, // 14: clients.v1.RegisterRoleResourcesRequest.resources:type_name -> clients.v1.RegisterRoleResourcesRequest.Resources - 36, // 15: clients.v1.ServiceAccessToken.creation_time:type_name -> google.protobuf.Timestamp - 36, // 16: clients.v1.ServiceAccessToken.expire_time:type_name -> google.protobuf.Timestamp - 27, // 17: clients.v1.CreateServiceAccessTokenRequest.token:type_name -> clients.v1.ServiceAccessToken - 27, // 18: clients.v1.CreateServiceAccessTokenResponse.token:type_name -> clients.v1.ServiceAccessToken - 31, // 19: clients.v1.ListServiceAccessTokensRequest.filters:type_name -> clients.v1.ListServiceAccessTokensFilter - 27, // 20: clients.v1.ListServiceAccessTokensResponse.tokens:type_name -> clients.v1.ServiceAccessToken - 26, // 21: clients.v1.RegisterRoleResourcesRequest.Resources.resources:type_name -> clients.v1.RoleResource - 38, // 22: clients.v1.sams_required_scopes:extendee -> google.protobuf.MethodOptions - 0, // 23: clients.v1.UsersService.GetUser:input_type -> clients.v1.GetUserRequest - 3, // 24: clients.v1.UsersService.GetUsers:input_type -> clients.v1.GetUsersRequest - 13, // 25: clients.v1.UsersService.CreateUser:input_type -> clients.v1.CreateUserRequest - 5, // 26: clients.v1.UsersService.GetUserRoles:input_type -> clients.v1.GetUserRolesRequest - 8, // 27: clients.v1.UsersService.GetUserMetadata:input_type -> clients.v1.GetUserMetadataRequest - 11, // 28: clients.v1.UsersService.UpdateUserMetadata:input_type -> clients.v1.UpdateUserMetadataRequest - 15, // 29: clients.v1.SessionsService.GetSession:input_type -> clients.v1.GetSessionRequest - 18, // 30: clients.v1.SessionsService.SignOutSession:input_type -> clients.v1.SignOutSessionRequest - 21, // 31: clients.v1.TokensService.IntrospectToken:input_type -> clients.v1.IntrospectTokenRequest - 24, // 32: clients.v1.RolesService.RegisterRoleResources:input_type -> clients.v1.RegisterRoleResourcesRequest - 28, // 33: clients.v1.ServiceAccessTokensService.CreateServiceAccessToken:input_type -> clients.v1.CreateServiceAccessTokenRequest - 30, // 34: clients.v1.ServiceAccessTokensService.ListServiceAccessTokens:input_type -> clients.v1.ListServiceAccessTokensRequest - 33, // 35: clients.v1.ServiceAccessTokensService.RevokeServiceAccessToken:input_type -> clients.v1.RevokeServiceAccessTokenRequest - 2, // 36: clients.v1.UsersService.GetUser:output_type -> clients.v1.GetUserResponse - 4, // 37: clients.v1.UsersService.GetUsers:output_type -> clients.v1.GetUsersResponse - 14, // 38: clients.v1.UsersService.CreateUser:output_type -> clients.v1.CreateUserResponse - 6, // 39: clients.v1.UsersService.GetUserRoles:output_type -> clients.v1.GetUserRolesResponse - 10, // 40: clients.v1.UsersService.GetUserMetadata:output_type -> clients.v1.GetUserMetadataResponse - 12, // 41: clients.v1.UsersService.UpdateUserMetadata:output_type -> clients.v1.UpdateUserMetadataResponse - 17, // 42: clients.v1.SessionsService.GetSession:output_type -> clients.v1.GetSessionResponse - 19, // 43: clients.v1.SessionsService.SignOutSession:output_type -> clients.v1.SignOutSessionResponse - 22, // 44: clients.v1.TokensService.IntrospectToken:output_type -> clients.v1.IntrospectTokenResponse - 25, // 45: clients.v1.RolesService.RegisterRoleResources:output_type -> clients.v1.RegisterRoleResourcesResponse - 29, // 46: clients.v1.ServiceAccessTokensService.CreateServiceAccessToken:output_type -> clients.v1.CreateServiceAccessTokenResponse - 32, // 47: clients.v1.ServiceAccessTokensService.ListServiceAccessTokens:output_type -> clients.v1.ListServiceAccessTokensResponse - 34, // 48: clients.v1.ServiceAccessTokensService.RevokeServiceAccessToken:output_type -> clients.v1.RevokeServiceAccessTokenResponse - 36, // [36:49] is the sub-list for method output_type - 23, // [23:36] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 22, // [22:23] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name + 40, // 0: clients.v1.User.created_at:type_name -> google.protobuf.Timestamp + 40, // 1: clients.v1.User.updated_at:type_name -> google.protobuf.Timestamp + 2, // 2: clients.v1.GetUserResponse.user:type_name -> clients.v1.User + 2, // 3: clients.v1.GetUsersResponse.users:type_name -> clients.v1.User + 8, // 4: clients.v1.GetUserRolesResponse.user_roles:type_name -> clients.v1.Role + 41, // 5: clients.v1.UserServiceMetadata.metadata:type_name -> google.protobuf.Struct + 10, // 6: clients.v1.GetUserMetadataResponse.metadata:type_name -> clients.v1.UserServiceMetadata + 10, // 7: clients.v1.UpdateUserMetadataRequest.metadata:type_name -> clients.v1.UserServiceMetadata + 10, // 8: clients.v1.UpdateUserMetadataResponse.metadata:type_name -> clients.v1.UserServiceMetadata + 0, // 9: clients.v1.ExternalAccount.type:type_name -> clients.v1.ExternalAccountType + 40, // 10: clients.v1.ExternalAccount.created_at:type_name -> google.protobuf.Timestamp + 40, // 11: clients.v1.ExternalAccount.updated_at:type_name -> google.protobuf.Timestamp + 15, // 12: clients.v1.GetUserExternalAccountsResponse.external_accounts:type_name -> clients.v1.ExternalAccount + 2, // 13: clients.v1.CreateUserResponse.user:type_name -> clients.v1.User + 2, // 14: clients.v1.Session.user:type_name -> clients.v1.User + 20, // 15: clients.v1.GetSessionResponse.session:type_name -> clients.v1.Session + 40, // 16: clients.v1.IntrospectTokenResponse.expires_at:type_name -> google.protobuf.Timestamp + 27, // 17: clients.v1.RegisterRoleResourcesRequest.metadata:type_name -> clients.v1.RegisterRoleResourcesRequestMetadata + 39, // 18: clients.v1.RegisterRoleResourcesRequest.resources:type_name -> clients.v1.RegisterRoleResourcesRequest.Resources + 40, // 19: clients.v1.ServiceAccessToken.creation_time:type_name -> google.protobuf.Timestamp + 40, // 20: clients.v1.ServiceAccessToken.expire_time:type_name -> google.protobuf.Timestamp + 31, // 21: clients.v1.CreateServiceAccessTokenRequest.token:type_name -> clients.v1.ServiceAccessToken + 31, // 22: clients.v1.CreateServiceAccessTokenResponse.token:type_name -> clients.v1.ServiceAccessToken + 35, // 23: clients.v1.ListServiceAccessTokensRequest.filters:type_name -> clients.v1.ListServiceAccessTokensFilter + 31, // 24: clients.v1.ListServiceAccessTokensResponse.tokens:type_name -> clients.v1.ServiceAccessToken + 30, // 25: clients.v1.RegisterRoleResourcesRequest.Resources.resources:type_name -> clients.v1.RoleResource + 42, // 26: clients.v1.sams_required_scopes:extendee -> google.protobuf.MethodOptions + 1, // 27: clients.v1.UsersService.GetUser:input_type -> clients.v1.GetUserRequest + 4, // 28: clients.v1.UsersService.GetUsers:input_type -> clients.v1.GetUsersRequest + 17, // 29: clients.v1.UsersService.CreateUser:input_type -> clients.v1.CreateUserRequest + 6, // 30: clients.v1.UsersService.GetUserRoles:input_type -> clients.v1.GetUserRolesRequest + 9, // 31: clients.v1.UsersService.GetUserMetadata:input_type -> clients.v1.GetUserMetadataRequest + 12, // 32: clients.v1.UsersService.UpdateUserMetadata:input_type -> clients.v1.UpdateUserMetadataRequest + 14, // 33: clients.v1.UsersService.GetUserExternalAccounts:input_type -> clients.v1.GetUserExternalAccountsRequest + 19, // 34: clients.v1.SessionsService.GetSession:input_type -> clients.v1.GetSessionRequest + 22, // 35: clients.v1.SessionsService.SignOutSession:input_type -> clients.v1.SignOutSessionRequest + 25, // 36: clients.v1.TokensService.IntrospectToken:input_type -> clients.v1.IntrospectTokenRequest + 28, // 37: clients.v1.RolesService.RegisterRoleResources:input_type -> clients.v1.RegisterRoleResourcesRequest + 32, // 38: clients.v1.ServiceAccessTokensService.CreateServiceAccessToken:input_type -> clients.v1.CreateServiceAccessTokenRequest + 34, // 39: clients.v1.ServiceAccessTokensService.ListServiceAccessTokens:input_type -> clients.v1.ListServiceAccessTokensRequest + 37, // 40: clients.v1.ServiceAccessTokensService.RevokeServiceAccessToken:input_type -> clients.v1.RevokeServiceAccessTokenRequest + 3, // 41: clients.v1.UsersService.GetUser:output_type -> clients.v1.GetUserResponse + 5, // 42: clients.v1.UsersService.GetUsers:output_type -> clients.v1.GetUsersResponse + 18, // 43: clients.v1.UsersService.CreateUser:output_type -> clients.v1.CreateUserResponse + 7, // 44: clients.v1.UsersService.GetUserRoles:output_type -> clients.v1.GetUserRolesResponse + 11, // 45: clients.v1.UsersService.GetUserMetadata:output_type -> clients.v1.GetUserMetadataResponse + 13, // 46: clients.v1.UsersService.UpdateUserMetadata:output_type -> clients.v1.UpdateUserMetadataResponse + 16, // 47: clients.v1.UsersService.GetUserExternalAccounts:output_type -> clients.v1.GetUserExternalAccountsResponse + 21, // 48: clients.v1.SessionsService.GetSession:output_type -> clients.v1.GetSessionResponse + 23, // 49: clients.v1.SessionsService.SignOutSession:output_type -> clients.v1.SignOutSessionResponse + 26, // 50: clients.v1.TokensService.IntrospectToken:output_type -> clients.v1.IntrospectTokenResponse + 29, // 51: clients.v1.RolesService.RegisterRoleResources:output_type -> clients.v1.RegisterRoleResourcesResponse + 33, // 52: clients.v1.ServiceAccessTokensService.CreateServiceAccessToken:output_type -> clients.v1.CreateServiceAccessTokenResponse + 36, // 53: clients.v1.ServiceAccessTokensService.ListServiceAccessTokens:output_type -> clients.v1.ListServiceAccessTokensResponse + 38, // 54: clients.v1.ServiceAccessTokensService.RevokeServiceAccessToken:output_type -> clients.v1.RevokeServiceAccessTokenResponse + 41, // [41:55] is the sub-list for method output_type + 27, // [27:41] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 26, // [26:27] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_clients_v1_clients_proto_init() } @@ -2767,7 +3053,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateUserRequest); i { + switch v := v.(*GetUserExternalAccountsRequest); i { case 0: return &v.state case 1: @@ -2779,7 +3065,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateUserResponse); i { + switch v := v.(*ExternalAccount); i { case 0: return &v.state case 1: @@ -2791,7 +3077,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSessionRequest); i { + switch v := v.(*GetUserExternalAccountsResponse); i { case 0: return &v.state case 1: @@ -2803,7 +3089,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Session); i { + switch v := v.(*CreateUserRequest); i { case 0: return &v.state case 1: @@ -2815,7 +3101,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSessionResponse); i { + switch v := v.(*CreateUserResponse); i { case 0: return &v.state case 1: @@ -2827,7 +3113,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignOutSessionRequest); i { + switch v := v.(*GetSessionRequest); i { case 0: return &v.state case 1: @@ -2839,7 +3125,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignOutSessionResponse); i { + switch v := v.(*Session); i { case 0: return &v.state case 1: @@ -2851,7 +3137,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorRecordMismatch); i { + switch v := v.(*GetSessionResponse); i { case 0: return &v.state case 1: @@ -2863,7 +3149,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IntrospectTokenRequest); i { + switch v := v.(*SignOutSessionRequest); i { case 0: return &v.state case 1: @@ -2875,7 +3161,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IntrospectTokenResponse); i { + switch v := v.(*SignOutSessionResponse); i { case 0: return &v.state case 1: @@ -2887,7 +3173,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRoleResourcesRequestMetadata); i { + switch v := v.(*ErrorRecordMismatch); i { case 0: return &v.state case 1: @@ -2899,7 +3185,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRoleResourcesRequest); i { + switch v := v.(*IntrospectTokenRequest); i { case 0: return &v.state case 1: @@ -2911,7 +3197,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRoleResourcesResponse); i { + switch v := v.(*IntrospectTokenResponse); i { case 0: return &v.state case 1: @@ -2923,7 +3209,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleResource); i { + switch v := v.(*RegisterRoleResourcesRequestMetadata); i { case 0: return &v.state case 1: @@ -2935,7 +3221,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceAccessToken); i { + switch v := v.(*RegisterRoleResourcesRequest); i { case 0: return &v.state case 1: @@ -2947,7 +3233,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateServiceAccessTokenRequest); i { + switch v := v.(*RegisterRoleResourcesResponse); i { case 0: return &v.state case 1: @@ -2959,7 +3245,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateServiceAccessTokenResponse); i { + switch v := v.(*RoleResource); i { case 0: return &v.state case 1: @@ -2971,7 +3257,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServiceAccessTokensRequest); i { + switch v := v.(*ServiceAccessToken); i { case 0: return &v.state case 1: @@ -2983,7 +3269,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServiceAccessTokensFilter); i { + switch v := v.(*CreateServiceAccessTokenRequest); i { case 0: return &v.state case 1: @@ -2995,7 +3281,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServiceAccessTokensResponse); i { + switch v := v.(*CreateServiceAccessTokenResponse); i { case 0: return &v.state case 1: @@ -3007,7 +3293,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeServiceAccessTokenRequest); i { + switch v := v.(*ListServiceAccessTokensRequest); i { case 0: return &v.state case 1: @@ -3019,7 +3305,7 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeServiceAccessTokenResponse); i { + switch v := v.(*ListServiceAccessTokensFilter); i { case 0: return &v.state case 1: @@ -3031,6 +3317,42 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListServiceAccessTokensResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clients_v1_clients_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RevokeServiceAccessTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clients_v1_clients_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RevokeServiceAccessTokenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clients_v1_clients_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisterRoleResourcesRequest_Resources); i { case 0: return &v.state @@ -3044,12 +3366,12 @@ func file_clients_v1_clients_proto_init() { } } file_clients_v1_clients_proto_msgTypes[7].OneofWrappers = []interface{}{} - file_clients_v1_clients_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_clients_v1_clients_proto_msgTypes[24].OneofWrappers = []interface{}{ + file_clients_v1_clients_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_clients_v1_clients_proto_msgTypes[27].OneofWrappers = []interface{}{ (*RegisterRoleResourcesRequest_Metadata)(nil), (*RegisterRoleResourcesRequest_Resources_)(nil), } - file_clients_v1_clients_proto_msgTypes[31].OneofWrappers = []interface{}{ + file_clients_v1_clients_proto_msgTypes[34].OneofWrappers = []interface{}{ (*ListServiceAccessTokensFilter_Service)(nil), (*ListServiceAccessTokensFilter_UserId)(nil), (*ListServiceAccessTokensFilter_ShowExpired)(nil), @@ -3059,13 +3381,14 @@ func file_clients_v1_clients_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_clients_v1_clients_proto_rawDesc, - NumEnums: 0, - NumMessages: 36, + NumEnums: 1, + NumMessages: 39, NumExtensions: 1, NumServices: 5, }, GoTypes: file_clients_v1_clients_proto_goTypes, DependencyIndexes: file_clients_v1_clients_proto_depIdxs, + EnumInfos: file_clients_v1_clients_proto_enumTypes, MessageInfos: file_clients_v1_clients_proto_msgTypes, ExtensionInfos: file_clients_v1_clients_proto_extTypes, }.Build() diff --git a/clients/v1/clients.proto b/clients/v1/clients.proto index 3d8e7f7..3cef6c7 100644 --- a/clients/v1/clients.proto +++ b/clients/v1/clients.proto @@ -63,6 +63,15 @@ service UsersService { // Cannot use 'sams_required_scopes' due to metadata-namespace-specific scopes. // See docstring for required scopes. } + // GetUserExternalAccounts returns the external account connections for a SAMS + // user, e.g. Google, GitHub, email/password. It returns connect.CodeNotFound + // if no such user exists. An empty list is returned if the user has no + // external accounts. + // + // Required scopes: sams::user.external_accounts::read + rpc GetUserExternalAccounts(GetUserExternalAccountsRequest) returns (GetUserExternalAccountsResponse) { + option (sams_required_scopes) = "sams::user.external_accounts::read"; + } } // Exactly one attribute can be set. @@ -175,6 +184,37 @@ message UpdateUserMetadataResponse { UserServiceMetadata metadata = 1; } +message GetUserExternalAccountsRequest { + // The user's external ID. + string id = 1; +} + +// ExternalAccountType identifies the type of external account provider. +enum ExternalAccountType { + EXTERNAL_ACCOUNT_TYPE_UNSPECIFIED = 0; + EXTERNAL_ACCOUNT_TYPE_PASSWORD = 1; + EXTERNAL_ACCOUNT_TYPE_GITHUB = 2; + EXTERNAL_ACCOUNT_TYPE_GITLAB = 3; + EXTERNAL_ACCOUNT_TYPE_GOOGLE = 4; +} + +// ExternalAccount represents a connection between a SAMS user and an external +// account provider. +message ExternalAccount { + // The type of the external account. + ExternalAccountType type = 1; + // The account identifier from the external provider (e.g. the GitHub user ID). + string account_id = 2; + // The time the external account was connected. + google.protobuf.Timestamp created_at = 3; + // The time the external account was last updated. + google.protobuf.Timestamp updated_at = 4; +} + +message GetUserExternalAccountsResponse { + repeated ExternalAccount external_accounts = 1; +} + message CreateUserRequest { // The email address for the new user. string email = 1; diff --git a/clients/v1/clientsv1connect/clients.connect.go b/clients/v1/clientsv1connect/clients.connect.go index efdb8e1..cf4eb62 100644 --- a/clients/v1/clientsv1connect/clients.connect.go +++ b/clients/v1/clientsv1connect/clients.connect.go @@ -57,6 +57,9 @@ const ( // UsersServiceUpdateUserMetadataProcedure is the fully-qualified name of the UsersService's // UpdateUserMetadata RPC. UsersServiceUpdateUserMetadataProcedure = "/clients.v1.UsersService/UpdateUserMetadata" + // UsersServiceGetUserExternalAccountsProcedure is the fully-qualified name of the UsersService's + // GetUserExternalAccounts RPC. + UsersServiceGetUserExternalAccountsProcedure = "/clients.v1.UsersService/GetUserExternalAccounts" // SessionsServiceGetSessionProcedure is the fully-qualified name of the SessionsService's // GetSession RPC. SessionsServiceGetSessionProcedure = "/clients.v1.SessionsService/GetSession" @@ -89,6 +92,7 @@ var ( usersServiceGetUserRolesMethodDescriptor = usersServiceServiceDescriptor.Methods().ByName("GetUserRoles") usersServiceGetUserMetadataMethodDescriptor = usersServiceServiceDescriptor.Methods().ByName("GetUserMetadata") usersServiceUpdateUserMetadataMethodDescriptor = usersServiceServiceDescriptor.Methods().ByName("UpdateUserMetadata") + usersServiceGetUserExternalAccountsMethodDescriptor = usersServiceServiceDescriptor.Methods().ByName("GetUserExternalAccounts") sessionsServiceServiceDescriptor = v1.File_clients_v1_clients_proto.Services().ByName("SessionsService") sessionsServiceGetSessionMethodDescriptor = sessionsServiceServiceDescriptor.Methods().ByName("GetSession") sessionsServiceSignOutSessionMethodDescriptor = sessionsServiceServiceDescriptor.Methods().ByName("SignOutSession") @@ -134,6 +138,13 @@ type UsersServiceClient interface { // Required scopes: 'sams::user.metadata::write' or metadata-namespace-specific // variant scope, such as 'sams::user.metadata.dotcom::write' UpdateUserMetadata(context.Context, *connect.Request[v1.UpdateUserMetadataRequest]) (*connect.Response[v1.UpdateUserMetadataResponse], error) + // GetUserExternalAccounts returns the external account connections for a SAMS + // user, e.g. Google, GitHub, email/password. It returns connect.CodeNotFound + // if no such user exists. An empty list is returned if the user has no + // external accounts. + // + // Required scopes: sams::user.external_accounts::read + GetUserExternalAccounts(context.Context, *connect.Request[v1.GetUserExternalAccountsRequest]) (*connect.Response[v1.GetUserExternalAccountsResponse], error) } // NewUsersServiceClient constructs a client for the clients.v1.UsersService service. By default, it @@ -182,17 +193,24 @@ func NewUsersServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(usersServiceUpdateUserMetadataMethodDescriptor), connect.WithClientOptions(opts...), ), + getUserExternalAccounts: connect.NewClient[v1.GetUserExternalAccountsRequest, v1.GetUserExternalAccountsResponse]( + httpClient, + baseURL+UsersServiceGetUserExternalAccountsProcedure, + connect.WithSchema(usersServiceGetUserExternalAccountsMethodDescriptor), + connect.WithClientOptions(opts...), + ), } } // usersServiceClient implements UsersServiceClient. type usersServiceClient struct { - getUser *connect.Client[v1.GetUserRequest, v1.GetUserResponse] - getUsers *connect.Client[v1.GetUsersRequest, v1.GetUsersResponse] - createUser *connect.Client[v1.CreateUserRequest, v1.CreateUserResponse] - getUserRoles *connect.Client[v1.GetUserRolesRequest, v1.GetUserRolesResponse] - getUserMetadata *connect.Client[v1.GetUserMetadataRequest, v1.GetUserMetadataResponse] - updateUserMetadata *connect.Client[v1.UpdateUserMetadataRequest, v1.UpdateUserMetadataResponse] + getUser *connect.Client[v1.GetUserRequest, v1.GetUserResponse] + getUsers *connect.Client[v1.GetUsersRequest, v1.GetUsersResponse] + createUser *connect.Client[v1.CreateUserRequest, v1.CreateUserResponse] + getUserRoles *connect.Client[v1.GetUserRolesRequest, v1.GetUserRolesResponse] + getUserMetadata *connect.Client[v1.GetUserMetadataRequest, v1.GetUserMetadataResponse] + updateUserMetadata *connect.Client[v1.UpdateUserMetadataRequest, v1.UpdateUserMetadataResponse] + getUserExternalAccounts *connect.Client[v1.GetUserExternalAccountsRequest, v1.GetUserExternalAccountsResponse] } // GetUser calls clients.v1.UsersService.GetUser. @@ -225,6 +243,11 @@ func (c *usersServiceClient) UpdateUserMetadata(ctx context.Context, req *connec return c.updateUserMetadata.CallUnary(ctx, req) } +// GetUserExternalAccounts calls clients.v1.UsersService.GetUserExternalAccounts. +func (c *usersServiceClient) GetUserExternalAccounts(ctx context.Context, req *connect.Request[v1.GetUserExternalAccountsRequest]) (*connect.Response[v1.GetUserExternalAccountsResponse], error) { + return c.getUserExternalAccounts.CallUnary(ctx, req) +} + // UsersServiceHandler is an implementation of the clients.v1.UsersService service. type UsersServiceHandler interface { // GetUser returns the SAMS user with the given query. It returns connect.CodeNotFound @@ -257,6 +280,13 @@ type UsersServiceHandler interface { // Required scopes: 'sams::user.metadata::write' or metadata-namespace-specific // variant scope, such as 'sams::user.metadata.dotcom::write' UpdateUserMetadata(context.Context, *connect.Request[v1.UpdateUserMetadataRequest]) (*connect.Response[v1.UpdateUserMetadataResponse], error) + // GetUserExternalAccounts returns the external account connections for a SAMS + // user, e.g. Google, GitHub, email/password. It returns connect.CodeNotFound + // if no such user exists. An empty list is returned if the user has no + // external accounts. + // + // Required scopes: sams::user.external_accounts::read + GetUserExternalAccounts(context.Context, *connect.Request[v1.GetUserExternalAccountsRequest]) (*connect.Response[v1.GetUserExternalAccountsResponse], error) } // NewUsersServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -301,6 +331,12 @@ func NewUsersServiceHandler(svc UsersServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(usersServiceUpdateUserMetadataMethodDescriptor), connect.WithHandlerOptions(opts...), ) + usersServiceGetUserExternalAccountsHandler := connect.NewUnaryHandler( + UsersServiceGetUserExternalAccountsProcedure, + svc.GetUserExternalAccounts, + connect.WithSchema(usersServiceGetUserExternalAccountsMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) return "/clients.v1.UsersService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case UsersServiceGetUserProcedure: @@ -315,6 +351,8 @@ func NewUsersServiceHandler(svc UsersServiceHandler, opts ...connect.HandlerOpti usersServiceGetUserMetadataHandler.ServeHTTP(w, r) case UsersServiceUpdateUserMetadataProcedure: usersServiceUpdateUserMetadataHandler.ServeHTTP(w, r) + case UsersServiceGetUserExternalAccountsProcedure: + usersServiceGetUserExternalAccountsHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -348,6 +386,10 @@ func (UnimplementedUsersServiceHandler) UpdateUserMetadata(context.Context, *con return nil, connect.NewError(connect.CodeUnimplemented, errors.New("clients.v1.UsersService.UpdateUserMetadata is not implemented")) } +func (UnimplementedUsersServiceHandler) GetUserExternalAccounts(context.Context, *connect.Request[v1.GetUserExternalAccountsRequest]) (*connect.Response[v1.GetUserExternalAccountsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("clients.v1.UsersService.GetUserExternalAccounts is not implemented")) +} + // SessionsServiceClient is a client for the clients.v1.SessionsService service. type SessionsServiceClient interface { // GetSession returns the SAMS session with the given ID. It returns diff --git a/clientv1_users.go b/clientv1_users.go index e89623c..052eba9 100644 --- a/clientv1_users.go +++ b/clientv1_users.go @@ -128,6 +128,25 @@ func (s *UsersServiceV1) GetUserMetadata(ctx context.Context, userID string, nam return resp.Msg.GetMetadata(), nil } +// GetUserExternalAccountsByID returns the external account connections for the +// SAMS user with the given ID, e.g. Google, GitHub, email/password. It returns +// ErrNotFound if no such user exists. An empty list is returned if the user has +// no external accounts. +// +// Required scopes: sams::user.external_accounts::read +func (s *UsersServiceV1) GetUserExternalAccountsByID(ctx context.Context, id string) ([]*clientsv1.ExternalAccount, error) { + if id == "" { + return nil, errors.New("user ID cannot be empty") + } + req := &clientsv1.GetUserExternalAccountsRequest{Id: id} + client := s.newClient(ctx) + resp, err := parseResponseAndError(client.GetUserExternalAccounts(ctx, connect.NewRequest(req))) + if err != nil { + return nil, err + } + return resp.Msg.GetExternalAccounts(), nil +} + // UpdateUserMetadata updates the metadata associated with the given user ID // and metadata namespace. // diff --git a/scopes/scopes.go b/scopes/scopes.go index 334a263..3829850 100644 --- a/scopes/scopes.go +++ b/scopes/scopes.go @@ -89,6 +89,7 @@ var ( "user", "user.profile", "user.roles", + "user.external_accounts", // Grants access to all scopes - use sparingly. "user.metadata", diff --git a/scopes/scopes_test.go b/scopes/scopes_test.go index f735199..f2de522 100644 --- a/scopes/scopes_test.go +++ b/scopes/scopes_test.go @@ -32,6 +32,9 @@ func TestAllowedGoldenList(t *testing.T) { Scope("sams::user.roles::read"), Scope("sams::user.roles::write"), Scope("sams::user.roles::delete"), + Scope("sams::user.external_accounts::read"), + Scope("sams::user.external_accounts::write"), + Scope("sams::user.external_accounts::delete"), Scope("sams::user.metadata::read"), Scope("sams::user.metadata::write"), Scope("sams::user.metadata::delete"),