diff --git a/Makefile b/Makefile index 2568655329..ebdb60727d 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ NAME = "github.com/odpf/optimus" LAST_COMMIT := $(shell git rev-parse --short HEAD) LAST_TAG := "$(shell git rev-list --tags --max-count=1)" OPMS_VERSION := "$(shell git describe --tags ${LAST_TAG})-next" -PROTON_COMMIT := "2e1bc719ec2382cd5c135b27b889224b71b06785" +PROTON_COMMIT := "ae233f3d942e8e72e2ec3f66ed404c57390d37fb" all: build diff --git a/api/handler/v1/runtime.go b/api/handler/v1/runtime.go index 6884cb635f..559fd13dfa 100644 --- a/api/handler/v1/runtime.go +++ b/api/handler/v1/runtime.go @@ -929,6 +929,7 @@ func (sv *RuntimeServiceServer) ListReplays(ctx context.Context, req *pb.ListRep StartDate: timestamppb.New(replaySpec.StartDate), EndDate: timestamppb.New(replaySpec.EndDate), State: replaySpec.Status, + Config: replaySpec.Config, CreatedAt: timestamppb.New(replaySpec.CreatedAt), }) } @@ -1050,7 +1051,7 @@ func (sv *RuntimeServiceServer) BackupDryRun(ctx context.Context, req *pb.Backup }, nil } -func (sv *RuntimeServiceServer) Backup(ctx context.Context, req *pb.BackupRequest) (*pb.BackupResponse, error) { +func (sv *RuntimeServiceServer) CreateBackup(ctx context.Context, req *pb.CreateBackupRequest) (*pb.CreateBackupResponse, error) { projectSpec, err := sv.getProjectSpec(ctx, req.ProjectName) if err != nil { return nil, err @@ -1096,7 +1097,7 @@ func (sv *RuntimeServiceServer) Backup(ctx context.Context, req *pb.BackupReques return nil, status.Errorf(codes.Internal, "error while doing backup: %v", err) } - return &pb.BackupResponse{ + return &pb.CreateBackupResponse{ Urn: result.Resources, IgnoredResources: result.IgnoredResources, }, nil @@ -1108,7 +1109,7 @@ func (sv *RuntimeServiceServer) ListBackups(ctx context.Context, req *pb.ListBac return nil, err } - results, err := sv.resourceSvc.ListBackupResources(ctx, projectSpec, req.DatastoreName) + results, err := sv.resourceSvc.ListResourceBackups(ctx, projectSpec, req.DatastoreName) if err != nil { return nil, status.Errorf(codes.Internal, "error while getting backup list: %v", err) } @@ -1120,6 +1121,7 @@ func (sv *RuntimeServiceServer) ListBackups(ctx context.Context, req *pb.ListBac ResourceName: result.Resource.Name, CreatedAt: timestamppb.New(result.CreatedAt), Description: result.Description, + Config: result.Config, }) } return &pb.ListBackupsResponse{ @@ -1127,6 +1129,57 @@ func (sv *RuntimeServiceServer) ListBackups(ctx context.Context, req *pb.ListBac }, nil } +func (sv *RuntimeServiceServer) GetBackup(ctx context.Context, req *pb.GetBackupRequest) (*pb.GetBackupResponse, error) { + projectSpec, err := sv.getProjectSpec(ctx, req.ProjectName) + if err != nil { + return nil, err + } + + uuid, err := uuid.Parse(req.Id) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "error while parsing backup ID: %v", err) + } + + backupDetail, err := sv.resourceSvc.GetResourceBackup(ctx, projectSpec, req.DatastoreName, uuid) + if err != nil { + if err == store.ErrResourceNotFound { + return nil, status.Errorf(codes.NotFound, "%s: backup with ID %s not found", err.Error(), uuid.String()) + } + return nil, status.Errorf(codes.Internal, "error while getting backup detail: %v", err) + } + + var results []string + for _, result := range backupDetail.Result { + backupResult, ok := result.(map[string]interface{}) + if !ok { + return nil, status.Errorf(codes.Internal, "error while parsing backup result: %v", ok) + } + + backupURN, ok := backupResult[models.BackupSpecKeyURN] + if !ok { + return nil, status.Errorf(codes.Internal, "%s is not found in backup result", models.BackupSpecKeyURN) + } + + backupURNStr, ok := backupURN.(string) + if !ok { + return nil, status.Errorf(codes.Internal, "invalid backup URN: %v", backupURN) + } + + results = append(results, backupURNStr) + } + + return &pb.GetBackupResponse{ + Spec: &pb.BackupSpec{ + Id: backupDetail.ID.String(), + ResourceName: backupDetail.Resource.Name, + CreatedAt: timestamppb.New(backupDetail.CreatedAt), + Description: backupDetail.Description, + Config: backupDetail.Config, + }, + Urn: results, + }, nil +} + func (sv *RuntimeServiceServer) RunJob(ctx context.Context, req *pb.RunJobRequest) (*pb.RunJobResponse, error) { // create job run in db projSpec, err := sv.projectRepoFactory.New().GetByName(ctx, req.ProjectName) diff --git a/api/handler/v1/runtime_test.go b/api/handler/v1/runtime_test.go index 4d5a08f4d0..92f2e713bb 100644 --- a/api/handler/v1/runtime_test.go +++ b/api/handler/v1/runtime_test.go @@ -8,6 +8,8 @@ import ( "testing" "time" + "github.com/odpf/optimus/store" + "github.com/odpf/optimus/core/set" "github.com/odpf/optimus/run" @@ -3554,7 +3556,7 @@ func TestRuntimeServiceServer(t *testing.T) { Name: resourceName, URN: resourceUrn, } - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3572,7 +3574,7 @@ func TestRuntimeServiceServer(t *testing.T) { }, DryRun: false, } - backupResponsePb := &pb.BackupResponse{ + backupResponsePb := &pb.CreateBackupResponse{ Urn: []string{backupUrn}, } backupResult := models.BackupResult{ @@ -3602,7 +3604,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(ctx, &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(ctx, &backupRequestPb) assert.Nil(t, err) assert.Equal(t, backupResponsePb, backupResponse) @@ -3663,7 +3665,7 @@ func TestRuntimeServiceServer(t *testing.T) { } backupDownstream1Urn := "datastore://a-data-project:optimus_backup.downstream1" backupDownstream2Urn := "datastore://a-data-project:optimus_backup.downstream2" - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3714,7 +3716,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Nil(t, err) assert.Equal(t, backupResult.Resources, backupResponse.Urn) @@ -3775,7 +3777,7 @@ func TestRuntimeServiceServer(t *testing.T) { } backupDownstream1Urn := "datastore://a-data-project:optimus_backup.downstream1" backupDownstream2Urn := "datastore://a-data-project:optimus_backup.downstream2" - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3826,7 +3828,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Nil(t, err) assert.Equal(t, backupResult.Resources, backupResponse.Urn) @@ -3848,7 +3850,7 @@ func TestRuntimeServiceServer(t *testing.T) { resourceSvc := new(mock.DatastoreService) defer resourceSvc.AssertExpectations(t) - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3871,7 +3873,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -3889,7 +3891,7 @@ func TestRuntimeServiceServer(t *testing.T) { namespaceRepoFact := new(mock.NamespaceRepoFactory) defer namespaceRepoFact.AssertExpectations(t) - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3916,7 +3918,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -3941,7 +3943,7 @@ func TestRuntimeServiceServer(t *testing.T) { Name: resourceName, URN: resourceUrn, } - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -3969,7 +3971,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -3997,7 +3999,7 @@ func TestRuntimeServiceServer(t *testing.T) { Name: resourceName, URN: resourceUrn, } - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -4025,7 +4027,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -4074,7 +4076,7 @@ func TestRuntimeServiceServer(t *testing.T) { Name: resourceName, URN: resourceUrn, } - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -4104,7 +4106,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -4163,7 +4165,7 @@ func TestRuntimeServiceServer(t *testing.T) { Name: resourceName, URN: resourceUrn, } - backupRequestPb := pb.BackupRequest{ + backupRequestPb := pb.CreateBackupRequest{ ProjectName: projectName, DatastoreName: models.DestinationTypeBigquery.String(), ResourceName: resourceName, @@ -4197,7 +4199,7 @@ func TestRuntimeServiceServer(t *testing.T) { nil, nil, ) - backupResponse, err := runtimeServiceServer.Backup(context.Background(), &backupRequestPb) + backupResponse, err := runtimeServiceServer.CreateBackup(context.Background(), &backupRequestPb) assert.Contains(t, err.Error(), errorMsg) assert.Nil(t, backupResponse) @@ -4271,7 +4273,7 @@ func TestRuntimeServiceServer(t *testing.T) { projectRepoFactory.On("New").Return(projectRepository) projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) - resourceSvc.On("ListBackupResources", ctx, projectSpec, datastoreName).Return(backupSpecs, nil) + resourceSvc.On("ListResourceBackups", ctx, projectSpec, datastoreName).Return(backupSpecs, nil) runtimeServiceServer := v1.NewRuntimeServiceServer( log, @@ -4337,7 +4339,7 @@ func TestRuntimeServiceServer(t *testing.T) { projectRepoFactory.On("New").Return(projectRepository) projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) errorMsg := "unable to get list of backups" - resourceSvc.On("ListBackupResources", ctx, projectSpec, datastoreName).Return([]models.BackupSpec{}, errors.New(errorMsg)) + resourceSvc.On("ListResourceBackups", ctx, projectSpec, datastoreName).Return([]models.BackupSpec{}, errors.New(errorMsg)) runtimeServiceServer := v1.NewRuntimeServiceServer( log, @@ -4358,4 +4360,268 @@ func TestRuntimeServiceServer(t *testing.T) { assert.Nil(t, backupResponse) }) }) + + t.Run("GetBackup", func(t *testing.T) { + projectName := "a-data-project" + projectSpec := models.ProjectSpec{ + ID: uuid.Must(uuid.NewRandom()), + Name: projectName, + } + datastoreName := models.DestinationTypeBigquery.String() + namespaceSpec := models.NamespaceSpec{ + ID: uuid.Must(uuid.NewRandom()), + Name: "dev-test-namespace-1", + Config: map[string]string{ + "bucket": "gs://some_folder", + }, + ProjectSpec: projectSpec, + } + backupID := uuid.Must(uuid.NewRandom()) + getBackupDetailReq := pb.GetBackupRequest{ + ProjectName: projectName, + DatastoreName: datastoreName, + Namespace: namespaceSpec.Name, + Id: backupID.String(), + } + backupSpec := models.BackupSpec{ + ID: backupID, + CreatedAt: time.Now().Add(time.Hour * 24 * -30), + Resource: models.ResourceSpec{ + Name: "sample resource", + }, + Description: "backup purpose", + } + t.Run("should return backup detail", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + backupResultPb := &pb.GetBackupResponse{ + Spec: &pb.BackupSpec{ + Id: backupSpec.ID.String(), + ResourceName: backupSpec.Resource.Name, + CreatedAt: timestamppb.New(backupSpec.CreatedAt), + Description: backupSpec.Description, + }, + } + + projectRepoFactory.On("New").Return(projectRepository) + projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) + resourceSvc.On("GetResourceBackup", ctx, projectSpec, datastoreName, backupID).Return(backupSpec, nil) + + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Nil(t, err) + assert.Equal(t, backupResultPb, backupResponse) + }) + t.Run("should return error when unable to get project spec", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + projectRepoFactory.On("New").Return(projectRepository) + errorMsg := "unable to get project spec" + projectRepository.On("GetByName", ctx, projectName).Return(models.ProjectSpec{}, + errors.New(errorMsg)) + + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Contains(t, err.Error(), errorMsg) + assert.Nil(t, backupResponse) + }) + t.Run("should return error when unable to get backup detail", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + projectRepoFactory.On("New").Return(projectRepository) + projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) + errorMsg := "unable to get backup detail" + resourceSvc.On("GetResourceBackup", ctx, projectSpec, datastoreName, backupID).Return(models.BackupSpec{}, errors.New(errorMsg)) + + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Contains(t, err.Error(), errorMsg) + assert.Nil(t, backupResponse) + }) + t.Run("should return error when backup is not found", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + projectRepoFactory.On("New").Return(projectRepository) + projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) + resourceSvc.On("GetResourceBackup", ctx, projectSpec, datastoreName, backupID).Return(models.BackupSpec{}, store.ErrResourceNotFound) + + errorMsg := fmt.Sprintf("backup with ID %s not found", backupID) + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Contains(t, err.Error(), errorMsg) + assert.Nil(t, backupResponse) + }) + t.Run("should return error when backup URN is not found", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + invalidBackupSpec := models.BackupSpec{ + ID: backupID, + CreatedAt: time.Now().Add(time.Hour * 24 * -30), + Resource: models.ResourceSpec{ + Name: "sample resource", + }, + Description: "backup purpose", + Result: map[string]interface{}{ + "sample_table": map[string]interface{}{ + "other_key": "other_value", + }, + }, + } + + projectRepoFactory.On("New").Return(projectRepository) + projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) + resourceSvc.On("GetResourceBackup", ctx, projectSpec, datastoreName, backupID).Return(invalidBackupSpec, nil) + + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Nil(t, backupResponse) + assert.Contains(t, err.Error(), "URN is not found in backup result") + }) + t.Run("should return error when backup URN is invalid", func(t *testing.T) { + projectRepository := new(mock.ProjectRepository) + defer projectRepository.AssertExpectations(t) + + projectRepoFactory := new(mock.ProjectRepoFactory) + defer projectRepoFactory.AssertExpectations(t) + + resourceSvc := new(mock.DatastoreService) + defer resourceSvc.AssertExpectations(t) + + invalidBackupSpec := models.BackupSpec{ + ID: backupID, + CreatedAt: time.Now().Add(time.Hour * 24 * -30), + Resource: models.ResourceSpec{ + Name: "sample resource", + }, + Description: "backup purpose", + Result: map[string]interface{}{ + "sample_table": map[string]interface{}{ + models.BackupSpecKeyURN: 0, + }, + }, + } + + projectRepoFactory.On("New").Return(projectRepository) + projectRepository.On("GetByName", ctx, projectName).Return(projectSpec, nil) + resourceSvc.On("GetResourceBackup", ctx, projectSpec, datastoreName, backupID).Return(invalidBackupSpec, nil) + + runtimeServiceServer := v1.NewRuntimeServiceServer( + log, + "Version", + nil, nil, + resourceSvc, + projectRepoFactory, + nil, + nil, + nil, + nil, + nil, + nil, + ) + backupResponse, err := runtimeServiceServer.GetBackup(context.Background(), &getBackupDetailReq) + + assert.Nil(t, backupResponse) + assert.Contains(t, err.Error(), "invalid backup URN") + }) + }) } diff --git a/api/proto/odpf/optimus/runtime_service.pb.go b/api/proto/odpf/optimus/runtime_service.pb.go index e109d8a34a..9b4dde53d7 100644 --- a/api/proto/odpf/optimus/runtime_service.pb.go +++ b/api/proto/odpf/optimus/runtime_service.pb.go @@ -71,7 +71,7 @@ func (x InstanceSpec_Type) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceSpec_Type.Descriptor instead. func (InstanceSpec_Type) EnumDescriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6, 0} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{9, 0} } // type of data, could be an env var or file @@ -121,7 +121,7 @@ func (x InstanceSpecData_Type) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceSpecData_Type.Descriptor instead. func (InstanceSpecData_Type) EnumDescriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{7, 0} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{10, 0} } type JobEvent_Type int32 @@ -173,7 +173,7 @@ func (x JobEvent_Type) Number() protoreflect.EnumNumber { // Deprecated: Use JobEvent_Type.Descriptor instead. func (JobEvent_Type) EnumDescriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{10, 0} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{13, 0} } type ProjectSpecification struct { @@ -349,6 +349,163 @@ func (x *JobSpecHook) GetConfig() []*JobConfigItem { return nil } +type JobSpecMetadataResourceConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cpu string `protobuf:"bytes,1,opt,name=cpu,proto3" json:"cpu,omitempty"` + Memory string `protobuf:"bytes,2,opt,name=memory,proto3" json:"memory,omitempty"` +} + +func (x *JobSpecMetadataResourceConfig) Reset() { + *x = JobSpecMetadataResourceConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobSpecMetadataResourceConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobSpecMetadataResourceConfig) ProtoMessage() {} + +func (x *JobSpecMetadataResourceConfig) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[3] + 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 JobSpecMetadataResourceConfig.ProtoReflect.Descriptor instead. +func (*JobSpecMetadataResourceConfig) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{3} +} + +func (x *JobSpecMetadataResourceConfig) GetCpu() string { + if x != nil { + return x.Cpu + } + return "" +} + +func (x *JobSpecMetadataResourceConfig) GetMemory() string { + if x != nil { + return x.Memory + } + return "" +} + +type JobSpecMetadataResource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Request *JobSpecMetadataResourceConfig `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` + Limit *JobSpecMetadataResourceConfig `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *JobSpecMetadataResource) Reset() { + *x = JobSpecMetadataResource{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobSpecMetadataResource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobSpecMetadataResource) ProtoMessage() {} + +func (x *JobSpecMetadataResource) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[4] + 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 JobSpecMetadataResource.ProtoReflect.Descriptor instead. +func (*JobSpecMetadataResource) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{4} +} + +func (x *JobSpecMetadataResource) GetRequest() *JobSpecMetadataResourceConfig { + if x != nil { + return x.Request + } + return nil +} + +func (x *JobSpecMetadataResource) GetLimit() *JobSpecMetadataResourceConfig { + if x != nil { + return x.Limit + } + return nil +} + +type JobMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resource *JobSpecMetadataResource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` +} + +func (x *JobMetadata) Reset() { + *x = JobMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobMetadata) ProtoMessage() {} + +func (x *JobMetadata) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[5] + 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 JobMetadata.ProtoReflect.Descriptor instead. +func (*JobMetadata) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{5} +} + +func (x *JobMetadata) GetResource() *JobSpecMetadataResource { + if x != nil { + return x.Resource + } + return nil +} + type JobSpecification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -373,12 +530,13 @@ type JobSpecification struct { Description string `protobuf:"bytes,17,opt,name=description,proto3" json:"description,omitempty"` // optional Labels map[string]string `protobuf:"bytes,18,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Behavior *JobSpecification_Behavior `protobuf:"bytes,19,opt,name=behavior,proto3" json:"behavior,omitempty"` + Metadata *JobMetadata `protobuf:"bytes,20,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *JobSpecification) Reset() { *x = JobSpecification{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[3] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -391,7 +549,7 @@ func (x *JobSpecification) String() string { func (*JobSpecification) ProtoMessage() {} func (x *JobSpecification) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[3] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -404,7 +562,7 @@ func (x *JobSpecification) ProtoReflect() protoreflect.Message { // Deprecated: Use JobSpecification.ProtoReflect.Descriptor instead. func (*JobSpecification) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{3} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6} } func (x *JobSpecification) GetVersion() int32 { @@ -540,6 +698,13 @@ func (x *JobSpecification) GetBehavior() *JobSpecification_Behavior { return nil } +func (x *JobSpecification) GetMetadata() *JobMetadata { + if x != nil { + return x.Metadata + } + return nil +} + type JobConfigItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -552,7 +717,7 @@ type JobConfigItem struct { func (x *JobConfigItem) Reset() { *x = JobConfigItem{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[4] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -565,7 +730,7 @@ func (x *JobConfigItem) String() string { func (*JobConfigItem) ProtoMessage() {} func (x *JobConfigItem) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[4] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -578,7 +743,7 @@ func (x *JobConfigItem) ProtoReflect() protoreflect.Message { // Deprecated: Use JobConfigItem.ProtoReflect.Descriptor instead. func (*JobConfigItem) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{4} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{7} } func (x *JobConfigItem) GetName() string { @@ -607,7 +772,7 @@ type JobDependency struct { func (x *JobDependency) Reset() { *x = JobDependency{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[5] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -620,7 +785,7 @@ func (x *JobDependency) String() string { func (*JobDependency) ProtoMessage() {} func (x *JobDependency) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[5] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -633,7 +798,7 @@ func (x *JobDependency) ProtoReflect() protoreflect.Message { // Deprecated: Use JobDependency.ProtoReflect.Descriptor instead. func (*JobDependency) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{5} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{8} } func (x *JobDependency) GetName() string { @@ -665,7 +830,7 @@ type InstanceSpec struct { func (x *InstanceSpec) Reset() { *x = InstanceSpec{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[6] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -678,7 +843,7 @@ func (x *InstanceSpec) String() string { func (*InstanceSpec) ProtoMessage() {} func (x *InstanceSpec) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[6] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -691,7 +856,7 @@ func (x *InstanceSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceSpec.ProtoReflect.Descriptor instead. func (*InstanceSpec) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{9} } func (x *InstanceSpec) GetState() string { @@ -742,7 +907,7 @@ type InstanceSpecData struct { func (x *InstanceSpecData) Reset() { *x = InstanceSpecData{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[7] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -755,7 +920,7 @@ func (x *InstanceSpecData) String() string { func (*InstanceSpecData) ProtoMessage() {} func (x *InstanceSpecData) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[7] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -768,7 +933,7 @@ func (x *InstanceSpecData) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceSpecData.ProtoReflect.Descriptor instead. func (*InstanceSpecData) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{7} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{10} } func (x *InstanceSpecData) GetName() string { @@ -804,7 +969,7 @@ type InstanceContext struct { func (x *InstanceContext) Reset() { *x = InstanceContext{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[8] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -817,7 +982,7 @@ func (x *InstanceContext) String() string { func (*InstanceContext) ProtoMessage() {} func (x *InstanceContext) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[8] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -830,7 +995,7 @@ func (x *InstanceContext) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceContext.ProtoReflect.Descriptor instead. func (*InstanceContext) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{8} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{11} } func (x *InstanceContext) GetEnvs() map[string]string { @@ -859,7 +1024,7 @@ type JobStatus struct { func (x *JobStatus) Reset() { *x = JobStatus{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[9] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -872,7 +1037,7 @@ func (x *JobStatus) String() string { func (*JobStatus) ProtoMessage() {} func (x *JobStatus) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[9] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -885,7 +1050,7 @@ func (x *JobStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use JobStatus.ProtoReflect.Descriptor instead. func (*JobStatus) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{9} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{12} } func (x *JobStatus) GetState() string { @@ -914,7 +1079,7 @@ type JobEvent struct { func (x *JobEvent) Reset() { *x = JobEvent{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[10] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -927,7 +1092,7 @@ func (x *JobEvent) String() string { func (*JobEvent) ProtoMessage() {} func (x *JobEvent) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[10] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -940,7 +1105,7 @@ func (x *JobEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use JobEvent.ProtoReflect.Descriptor instead. func (*JobEvent) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{10} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{13} } func (x *JobEvent) GetType() JobEvent_Type { @@ -970,7 +1135,7 @@ type TaskWindow struct { func (x *TaskWindow) Reset() { *x = TaskWindow{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[11] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1148,7 @@ func (x *TaskWindow) String() string { func (*TaskWindow) ProtoMessage() {} func (x *TaskWindow) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[11] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1161,7 @@ func (x *TaskWindow) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskWindow.ProtoReflect.Descriptor instead. func (*TaskWindow) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{11} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{14} } func (x *TaskWindow) GetSize() *durationpb.Duration { @@ -1037,7 +1202,7 @@ type ResourceSpecification struct { func (x *ResourceSpecification) Reset() { *x = ResourceSpecification{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[12] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1050,7 +1215,7 @@ func (x *ResourceSpecification) String() string { func (*ResourceSpecification) ProtoMessage() {} func (x *ResourceSpecification) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[12] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1063,7 +1228,7 @@ func (x *ResourceSpecification) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceSpecification.ProtoReflect.Descriptor instead. func (*ResourceSpecification) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{12} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{15} } func (x *ResourceSpecification) GetVersion() int32 { @@ -1125,7 +1290,7 @@ type JobTask struct { func (x *JobTask) Reset() { *x = JobTask{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[13] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1138,7 +1303,7 @@ func (x *JobTask) String() string { func (*JobTask) ProtoMessage() {} func (x *JobTask) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[13] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1151,7 +1316,7 @@ func (x *JobTask) ProtoReflect() protoreflect.Message { // Deprecated: Use JobTask.ProtoReflect.Descriptor instead. func (*JobTask) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{13} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{16} } func (x *JobTask) GetName() string { @@ -1200,7 +1365,7 @@ type VersionRequest struct { func (x *VersionRequest) Reset() { *x = VersionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[14] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1213,7 +1378,7 @@ func (x *VersionRequest) String() string { func (*VersionRequest) ProtoMessage() {} func (x *VersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[14] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1226,7 +1391,7 @@ func (x *VersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionRequest.ProtoReflect.Descriptor instead. func (*VersionRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{14} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{17} } func (x *VersionRequest) GetClient() string { @@ -1247,7 +1412,7 @@ type VersionResponse struct { func (x *VersionResponse) Reset() { *x = VersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[15] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1260,7 +1425,7 @@ func (x *VersionResponse) String() string { func (*VersionResponse) ProtoMessage() {} func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[15] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1273,7 +1438,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{15} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{18} } func (x *VersionResponse) GetServer() string { @@ -1296,7 +1461,7 @@ type DeployJobSpecificationRequest struct { func (x *DeployJobSpecificationRequest) Reset() { *x = DeployJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[16] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1309,7 +1474,7 @@ func (x *DeployJobSpecificationRequest) String() string { func (*DeployJobSpecificationRequest) ProtoMessage() {} func (x *DeployJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[16] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1322,7 +1487,7 @@ func (x *DeployJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*DeployJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{16} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{19} } func (x *DeployJobSpecificationRequest) GetProjectName() string { @@ -1362,7 +1527,7 @@ type DeployJobSpecificationResponse struct { func (x *DeployJobSpecificationResponse) Reset() { *x = DeployJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[17] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1375,7 +1540,7 @@ func (x *DeployJobSpecificationResponse) String() string { func (*DeployJobSpecificationResponse) ProtoMessage() {} func (x *DeployJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[17] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1388,7 +1553,7 @@ func (x *DeployJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*DeployJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{17} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{20} } func (x *DeployJobSpecificationResponse) GetSuccess() bool { @@ -1431,7 +1596,7 @@ type ListJobSpecificationRequest struct { func (x *ListJobSpecificationRequest) Reset() { *x = ListJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[18] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1444,7 +1609,7 @@ func (x *ListJobSpecificationRequest) String() string { func (*ListJobSpecificationRequest) ProtoMessage() {} func (x *ListJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[18] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1457,7 +1622,7 @@ func (x *ListJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*ListJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{18} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{21} } func (x *ListJobSpecificationRequest) GetProjectName() string { @@ -1485,7 +1650,7 @@ type ListJobSpecificationResponse struct { func (x *ListJobSpecificationResponse) Reset() { *x = ListJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[19] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1498,7 +1663,7 @@ func (x *ListJobSpecificationResponse) String() string { func (*ListJobSpecificationResponse) ProtoMessage() {} func (x *ListJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[19] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1511,7 +1676,7 @@ func (x *ListJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*ListJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{19} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{22} } func (x *ListJobSpecificationResponse) GetJobs() []*JobSpecification { @@ -1534,7 +1699,7 @@ type GetJobTaskRequest struct { func (x *GetJobTaskRequest) Reset() { *x = GetJobTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[20] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1547,7 +1712,7 @@ func (x *GetJobTaskRequest) String() string { func (*GetJobTaskRequest) ProtoMessage() {} func (x *GetJobTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[20] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1560,7 +1725,7 @@ func (x *GetJobTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobTaskRequest.ProtoReflect.Descriptor instead. func (*GetJobTaskRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{20} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{23} } func (x *GetJobTaskRequest) GetProjectName() string { @@ -1595,7 +1760,7 @@ type GetJobTaskResponse struct { func (x *GetJobTaskResponse) Reset() { *x = GetJobTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[21] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1608,7 +1773,7 @@ func (x *GetJobTaskResponse) String() string { func (*GetJobTaskResponse) ProtoMessage() {} func (x *GetJobTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[21] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1621,7 +1786,7 @@ func (x *GetJobTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobTaskResponse.ProtoReflect.Descriptor instead. func (*GetJobTaskResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{21} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{24} } func (x *GetJobTaskResponse) GetTask() *JobTask { @@ -1644,7 +1809,7 @@ type CheckJobSpecificationRequest struct { func (x *CheckJobSpecificationRequest) Reset() { *x = CheckJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[22] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1657,7 +1822,7 @@ func (x *CheckJobSpecificationRequest) String() string { func (*CheckJobSpecificationRequest) ProtoMessage() {} func (x *CheckJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[22] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1670,7 +1835,7 @@ func (x *CheckJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*CheckJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{22} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{25} } func (x *CheckJobSpecificationRequest) GetProjectName() string { @@ -1705,7 +1870,7 @@ type CheckJobSpecificationResponse struct { func (x *CheckJobSpecificationResponse) Reset() { *x = CheckJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[23] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1718,7 +1883,7 @@ func (x *CheckJobSpecificationResponse) String() string { func (*CheckJobSpecificationResponse) ProtoMessage() {} func (x *CheckJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[23] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1731,7 +1896,7 @@ func (x *CheckJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*CheckJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{23} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{26} } func (x *CheckJobSpecificationResponse) GetSuccess() bool { @@ -1754,7 +1919,7 @@ type CheckJobSpecificationsRequest struct { func (x *CheckJobSpecificationsRequest) Reset() { *x = CheckJobSpecificationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[24] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1767,7 +1932,7 @@ func (x *CheckJobSpecificationsRequest) String() string { func (*CheckJobSpecificationsRequest) ProtoMessage() {} func (x *CheckJobSpecificationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[24] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1780,7 +1945,7 @@ func (x *CheckJobSpecificationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckJobSpecificationsRequest.ProtoReflect.Descriptor instead. func (*CheckJobSpecificationsRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{24} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{27} } func (x *CheckJobSpecificationsRequest) GetProjectName() string { @@ -1820,7 +1985,7 @@ type CheckJobSpecificationsResponse struct { func (x *CheckJobSpecificationsResponse) Reset() { *x = CheckJobSpecificationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[25] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1833,7 +1998,7 @@ func (x *CheckJobSpecificationsResponse) String() string { func (*CheckJobSpecificationsResponse) ProtoMessage() {} func (x *CheckJobSpecificationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[25] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1846,7 +2011,7 @@ func (x *CheckJobSpecificationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckJobSpecificationsResponse.ProtoReflect.Descriptor instead. func (*CheckJobSpecificationsResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{25} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{28} } func (x *CheckJobSpecificationsResponse) GetSuccess() bool { @@ -1890,7 +2055,7 @@ type RegisterProjectRequest struct { func (x *RegisterProjectRequest) Reset() { *x = RegisterProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[26] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1903,7 +2068,7 @@ func (x *RegisterProjectRequest) String() string { func (*RegisterProjectRequest) ProtoMessage() {} func (x *RegisterProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[26] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1916,7 +2081,7 @@ func (x *RegisterProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterProjectRequest.ProtoReflect.Descriptor instead. func (*RegisterProjectRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{26} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{29} } func (x *RegisterProjectRequest) GetProject() *ProjectSpecification { @@ -1946,7 +2111,7 @@ type RegisterProjectResponse struct { func (x *RegisterProjectResponse) Reset() { *x = RegisterProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[27] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1959,7 +2124,7 @@ func (x *RegisterProjectResponse) String() string { func (*RegisterProjectResponse) ProtoMessage() {} func (x *RegisterProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[27] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1972,7 +2137,7 @@ func (x *RegisterProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterProjectResponse.ProtoReflect.Descriptor instead. func (*RegisterProjectResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{27} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{30} } func (x *RegisterProjectResponse) GetSuccess() bool { @@ -2001,7 +2166,7 @@ type RegisterProjectNamespaceRequest struct { func (x *RegisterProjectNamespaceRequest) Reset() { *x = RegisterProjectNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[28] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2014,7 +2179,7 @@ func (x *RegisterProjectNamespaceRequest) String() string { func (*RegisterProjectNamespaceRequest) ProtoMessage() {} func (x *RegisterProjectNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[28] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2027,7 +2192,7 @@ func (x *RegisterProjectNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterProjectNamespaceRequest.ProtoReflect.Descriptor instead. func (*RegisterProjectNamespaceRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{28} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{31} } func (x *RegisterProjectNamespaceRequest) GetProjectName() string { @@ -2056,7 +2221,7 @@ type RegisterProjectNamespaceResponse struct { func (x *RegisterProjectNamespaceResponse) Reset() { *x = RegisterProjectNamespaceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[29] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2069,7 +2234,7 @@ func (x *RegisterProjectNamespaceResponse) String() string { func (*RegisterProjectNamespaceResponse) ProtoMessage() {} func (x *RegisterProjectNamespaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[29] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2082,7 +2247,7 @@ func (x *RegisterProjectNamespaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterProjectNamespaceResponse.ProtoReflect.Descriptor instead. func (*RegisterProjectNamespaceResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{29} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{32} } func (x *RegisterProjectNamespaceResponse) GetSuccess() bool { @@ -2112,7 +2277,7 @@ type CreateJobSpecificationRequest struct { func (x *CreateJobSpecificationRequest) Reset() { *x = CreateJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[30] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2125,7 +2290,7 @@ func (x *CreateJobSpecificationRequest) String() string { func (*CreateJobSpecificationRequest) ProtoMessage() {} func (x *CreateJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[30] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2138,7 +2303,7 @@ func (x *CreateJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*CreateJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{30} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{33} } func (x *CreateJobSpecificationRequest) GetProjectName() string { @@ -2174,7 +2339,7 @@ type CreateJobSpecificationResponse struct { func (x *CreateJobSpecificationResponse) Reset() { *x = CreateJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[31] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2187,7 +2352,7 @@ func (x *CreateJobSpecificationResponse) String() string { func (*CreateJobSpecificationResponse) ProtoMessage() {} func (x *CreateJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[31] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2200,7 +2365,7 @@ func (x *CreateJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*CreateJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{31} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{34} } func (x *CreateJobSpecificationResponse) GetSuccess() bool { @@ -2230,7 +2395,7 @@ type ReadJobSpecificationRequest struct { func (x *ReadJobSpecificationRequest) Reset() { *x = ReadJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[32] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2243,7 +2408,7 @@ func (x *ReadJobSpecificationRequest) String() string { func (*ReadJobSpecificationRequest) ProtoMessage() {} func (x *ReadJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[32] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2256,7 +2421,7 @@ func (x *ReadJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*ReadJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{32} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{35} } func (x *ReadJobSpecificationRequest) GetProjectName() string { @@ -2291,7 +2456,7 @@ type ReadJobSpecificationResponse struct { func (x *ReadJobSpecificationResponse) Reset() { *x = ReadJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[33] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2304,7 +2469,7 @@ func (x *ReadJobSpecificationResponse) String() string { func (*ReadJobSpecificationResponse) ProtoMessage() {} func (x *ReadJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[33] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2317,7 +2482,7 @@ func (x *ReadJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*ReadJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{33} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{36} } func (x *ReadJobSpecificationResponse) GetSpec() *JobSpecification { @@ -2340,7 +2505,7 @@ type DeleteJobSpecificationRequest struct { func (x *DeleteJobSpecificationRequest) Reset() { *x = DeleteJobSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[34] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2353,7 +2518,7 @@ func (x *DeleteJobSpecificationRequest) String() string { func (*DeleteJobSpecificationRequest) ProtoMessage() {} func (x *DeleteJobSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[34] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2366,7 +2531,7 @@ func (x *DeleteJobSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteJobSpecificationRequest.ProtoReflect.Descriptor instead. func (*DeleteJobSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{34} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{37} } func (x *DeleteJobSpecificationRequest) GetProjectName() string { @@ -2402,7 +2567,7 @@ type DeleteJobSpecificationResponse struct { func (x *DeleteJobSpecificationResponse) Reset() { *x = DeleteJobSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[35] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2415,7 +2580,7 @@ func (x *DeleteJobSpecificationResponse) String() string { func (*DeleteJobSpecificationResponse) ProtoMessage() {} func (x *DeleteJobSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[35] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2428,7 +2593,7 @@ func (x *DeleteJobSpecificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteJobSpecificationResponse.ProtoReflect.Descriptor instead. func (*DeleteJobSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{35} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{38} } func (x *DeleteJobSpecificationResponse) GetSuccess() bool { @@ -2458,7 +2623,7 @@ type RegisterSecretRequest struct { func (x *RegisterSecretRequest) Reset() { *x = RegisterSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[36] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2471,7 +2636,7 @@ func (x *RegisterSecretRequest) String() string { func (*RegisterSecretRequest) ProtoMessage() {} func (x *RegisterSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[36] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2484,7 +2649,7 @@ func (x *RegisterSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterSecretRequest.ProtoReflect.Descriptor instead. func (*RegisterSecretRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{36} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{39} } func (x *RegisterSecretRequest) GetProjectName() string { @@ -2520,7 +2685,7 @@ type RegisterSecretResponse struct { func (x *RegisterSecretResponse) Reset() { *x = RegisterSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[37] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2533,7 +2698,7 @@ func (x *RegisterSecretResponse) String() string { func (*RegisterSecretResponse) ProtoMessage() {} func (x *RegisterSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[37] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2546,7 +2711,7 @@ func (x *RegisterSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterSecretResponse.ProtoReflect.Descriptor instead. func (*RegisterSecretResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{37} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{40} } func (x *RegisterSecretResponse) GetSuccess() bool { @@ -2572,7 +2737,7 @@ type ListProjectsRequest struct { func (x *ListProjectsRequest) Reset() { *x = ListProjectsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[38] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2585,7 +2750,7 @@ func (x *ListProjectsRequest) String() string { func (*ListProjectsRequest) ProtoMessage() {} func (x *ListProjectsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[38] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2598,7 +2763,7 @@ func (x *ListProjectsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectsRequest.ProtoReflect.Descriptor instead. func (*ListProjectsRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{38} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{41} } type ListProjectsResponse struct { @@ -2612,7 +2777,7 @@ type ListProjectsResponse struct { func (x *ListProjectsResponse) Reset() { *x = ListProjectsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[39] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2625,7 +2790,7 @@ func (x *ListProjectsResponse) String() string { func (*ListProjectsResponse) ProtoMessage() {} func (x *ListProjectsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[39] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2638,7 +2803,7 @@ func (x *ListProjectsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectsResponse.ProtoReflect.Descriptor instead. func (*ListProjectsResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{39} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{42} } func (x *ListProjectsResponse) GetProjects() []*ProjectSpecification { @@ -2659,7 +2824,7 @@ type ListProjectNamespacesRequest struct { func (x *ListProjectNamespacesRequest) Reset() { *x = ListProjectNamespacesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[40] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2672,7 +2837,7 @@ func (x *ListProjectNamespacesRequest) String() string { func (*ListProjectNamespacesRequest) ProtoMessage() {} func (x *ListProjectNamespacesRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[40] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2685,7 +2850,7 @@ func (x *ListProjectNamespacesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectNamespacesRequest.ProtoReflect.Descriptor instead. func (*ListProjectNamespacesRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{40} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{43} } func (x *ListProjectNamespacesRequest) GetProjectName() string { @@ -2706,7 +2871,7 @@ type ListProjectNamespacesResponse struct { func (x *ListProjectNamespacesResponse) Reset() { *x = ListProjectNamespacesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[41] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2719,7 +2884,7 @@ func (x *ListProjectNamespacesResponse) String() string { func (*ListProjectNamespacesResponse) ProtoMessage() {} func (x *ListProjectNamespacesResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[41] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2732,7 +2897,7 @@ func (x *ListProjectNamespacesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectNamespacesResponse.ProtoReflect.Descriptor instead. func (*ListProjectNamespacesResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{41} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{44} } func (x *ListProjectNamespacesResponse) GetNamespaces() []*NamespaceSpecification { @@ -2761,7 +2926,7 @@ type RegisterInstanceRequest struct { func (x *RegisterInstanceRequest) Reset() { *x = RegisterInstanceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[42] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2774,7 +2939,7 @@ func (x *RegisterInstanceRequest) String() string { func (*RegisterInstanceRequest) ProtoMessage() {} func (x *RegisterInstanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[42] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2787,7 +2952,7 @@ func (x *RegisterInstanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterInstanceRequest.ProtoReflect.Descriptor instead. func (*RegisterInstanceRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{42} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{45} } func (x *RegisterInstanceRequest) GetProjectName() string { @@ -2847,7 +3012,7 @@ type RegisterInstanceResponse struct { func (x *RegisterInstanceResponse) Reset() { *x = RegisterInstanceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[43] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2860,7 +3025,7 @@ func (x *RegisterInstanceResponse) String() string { func (*RegisterInstanceResponse) ProtoMessage() {} func (x *RegisterInstanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[43] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2873,7 +3038,7 @@ func (x *RegisterInstanceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterInstanceResponse.ProtoReflect.Descriptor instead. func (*RegisterInstanceResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{43} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{46} } func (x *RegisterInstanceResponse) GetProject() *ProjectSpecification { @@ -2923,7 +3088,7 @@ type JobStatusRequest struct { func (x *JobStatusRequest) Reset() { *x = JobStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[44] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2936,7 +3101,7 @@ func (x *JobStatusRequest) String() string { func (*JobStatusRequest) ProtoMessage() {} func (x *JobStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[44] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2949,7 +3114,7 @@ func (x *JobStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JobStatusRequest.ProtoReflect.Descriptor instead. func (*JobStatusRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{44} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{47} } func (x *JobStatusRequest) GetProjectName() string { @@ -2977,7 +3142,7 @@ type JobStatusResponse struct { func (x *JobStatusResponse) Reset() { *x = JobStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[45] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2990,7 +3155,7 @@ func (x *JobStatusResponse) String() string { func (*JobStatusResponse) ProtoMessage() {} func (x *JobStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[45] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3003,7 +3168,7 @@ func (x *JobStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JobStatusResponse.ProtoReflect.Descriptor instead. func (*JobStatusResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{45} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{48} } func (x *JobStatusResponse) GetStatuses() []*JobStatus { @@ -3027,7 +3192,7 @@ type GetWindowRequest struct { func (x *GetWindowRequest) Reset() { *x = GetWindowRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[46] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3040,7 +3205,7 @@ func (x *GetWindowRequest) String() string { func (*GetWindowRequest) ProtoMessage() {} func (x *GetWindowRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[46] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3053,7 +3218,7 @@ func (x *GetWindowRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWindowRequest.ProtoReflect.Descriptor instead. func (*GetWindowRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{46} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{49} } func (x *GetWindowRequest) GetScheduledAt() *timestamppb.Timestamp { @@ -3096,7 +3261,7 @@ type GetWindowResponse struct { func (x *GetWindowResponse) Reset() { *x = GetWindowResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[47] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3109,7 +3274,7 @@ func (x *GetWindowResponse) String() string { func (*GetWindowResponse) ProtoMessage() {} func (x *GetWindowResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[47] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3122,7 +3287,7 @@ func (x *GetWindowResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWindowResponse.ProtoReflect.Descriptor instead. func (*GetWindowResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{47} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{50} } func (x *GetWindowResponse) GetStart() *timestamppb.Timestamp { @@ -3153,7 +3318,7 @@ type DeployResourceSpecificationRequest struct { func (x *DeployResourceSpecificationRequest) Reset() { *x = DeployResourceSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[48] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3166,7 +3331,7 @@ func (x *DeployResourceSpecificationRequest) String() string { func (*DeployResourceSpecificationRequest) ProtoMessage() {} func (x *DeployResourceSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[48] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3179,7 +3344,7 @@ func (x *DeployResourceSpecificationRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeployResourceSpecificationRequest.ProtoReflect.Descriptor instead. func (*DeployResourceSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{48} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{51} } func (x *DeployResourceSpecificationRequest) GetProjectName() string { @@ -3226,7 +3391,7 @@ type DeployResourceSpecificationResponse struct { func (x *DeployResourceSpecificationResponse) Reset() { *x = DeployResourceSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[49] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3239,7 +3404,7 @@ func (x *DeployResourceSpecificationResponse) String() string { func (*DeployResourceSpecificationResponse) ProtoMessage() {} func (x *DeployResourceSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[49] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3252,7 +3417,7 @@ func (x *DeployResourceSpecificationResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use DeployResourceSpecificationResponse.ProtoReflect.Descriptor instead. func (*DeployResourceSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{49} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{52} } func (x *DeployResourceSpecificationResponse) GetSuccess() bool { @@ -3297,7 +3462,7 @@ type ListResourceSpecificationRequest struct { func (x *ListResourceSpecificationRequest) Reset() { *x = ListResourceSpecificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[50] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3310,7 +3475,7 @@ func (x *ListResourceSpecificationRequest) String() string { func (*ListResourceSpecificationRequest) ProtoMessage() {} func (x *ListResourceSpecificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[50] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3323,7 +3488,7 @@ func (x *ListResourceSpecificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourceSpecificationRequest.ProtoReflect.Descriptor instead. func (*ListResourceSpecificationRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{50} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{53} } func (x *ListResourceSpecificationRequest) GetProjectName() string { @@ -3358,7 +3523,7 @@ type ListResourceSpecificationResponse struct { func (x *ListResourceSpecificationResponse) Reset() { *x = ListResourceSpecificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[51] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3371,7 +3536,7 @@ func (x *ListResourceSpecificationResponse) String() string { func (*ListResourceSpecificationResponse) ProtoMessage() {} func (x *ListResourceSpecificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[51] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3384,7 +3549,7 @@ func (x *ListResourceSpecificationResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ListResourceSpecificationResponse.ProtoReflect.Descriptor instead. func (*ListResourceSpecificationResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{51} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{54} } func (x *ListResourceSpecificationResponse) GetResources() []*ResourceSpecification { @@ -3408,7 +3573,7 @@ type CreateResourceRequest struct { func (x *CreateResourceRequest) Reset() { *x = CreateResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[52] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3421,7 +3586,7 @@ func (x *CreateResourceRequest) String() string { func (*CreateResourceRequest) ProtoMessage() {} func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[52] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3434,7 +3599,7 @@ func (x *CreateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceRequest.ProtoReflect.Descriptor instead. func (*CreateResourceRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{52} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{55} } func (x *CreateResourceRequest) GetProjectName() string { @@ -3477,7 +3642,7 @@ type CreateResourceResponse struct { func (x *CreateResourceResponse) Reset() { *x = CreateResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[53] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3490,7 +3655,7 @@ func (x *CreateResourceResponse) String() string { func (*CreateResourceResponse) ProtoMessage() {} func (x *CreateResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[53] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3503,7 +3668,7 @@ func (x *CreateResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResourceResponse.ProtoReflect.Descriptor instead. func (*CreateResourceResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{53} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{56} } func (x *CreateResourceResponse) GetSuccess() bool { @@ -3534,7 +3699,7 @@ type ReadResourceRequest struct { func (x *ReadResourceRequest) Reset() { *x = ReadResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[54] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3547,7 +3712,7 @@ func (x *ReadResourceRequest) String() string { func (*ReadResourceRequest) ProtoMessage() {} func (x *ReadResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[54] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3560,7 +3725,7 @@ func (x *ReadResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResourceRequest.ProtoReflect.Descriptor instead. func (*ReadResourceRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{54} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{57} } func (x *ReadResourceRequest) GetProjectName() string { @@ -3604,7 +3769,7 @@ type ReadResourceResponse struct { func (x *ReadResourceResponse) Reset() { *x = ReadResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[55] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3617,7 +3782,7 @@ func (x *ReadResourceResponse) String() string { func (*ReadResourceResponse) ProtoMessage() {} func (x *ReadResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[55] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3630,7 +3795,7 @@ func (x *ReadResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResourceResponse.ProtoReflect.Descriptor instead. func (*ReadResourceResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{55} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{58} } func (x *ReadResourceResponse) GetSuccess() bool { @@ -3668,7 +3833,7 @@ type UpdateResourceRequest struct { func (x *UpdateResourceRequest) Reset() { *x = UpdateResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[56] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3681,7 +3846,7 @@ func (x *UpdateResourceRequest) String() string { func (*UpdateResourceRequest) ProtoMessage() {} func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[56] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3694,7 +3859,7 @@ func (x *UpdateResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceRequest.ProtoReflect.Descriptor instead. func (*UpdateResourceRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{56} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{59} } func (x *UpdateResourceRequest) GetProjectName() string { @@ -3737,7 +3902,7 @@ type UpdateResourceResponse struct { func (x *UpdateResourceResponse) Reset() { *x = UpdateResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[57] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3750,7 +3915,7 @@ func (x *UpdateResourceResponse) String() string { func (*UpdateResourceResponse) ProtoMessage() {} func (x *UpdateResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[57] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3763,7 +3928,7 @@ func (x *UpdateResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResourceResponse.ProtoReflect.Descriptor instead. func (*UpdateResourceResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{57} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{60} } func (x *UpdateResourceResponse) GetSuccess() bool { @@ -3800,7 +3965,7 @@ type ReplayRequest struct { func (x *ReplayRequest) Reset() { *x = ReplayRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[58] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3813,7 +3978,7 @@ func (x *ReplayRequest) String() string { func (*ReplayRequest) ProtoMessage() {} func (x *ReplayRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[58] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3826,7 +3991,7 @@ func (x *ReplayRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRequest.ProtoReflect.Descriptor instead. func (*ReplayRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{58} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{61} } func (x *ReplayRequest) GetProjectName() string { @@ -3890,7 +4055,7 @@ type ReplayResponse struct { func (x *ReplayResponse) Reset() { *x = ReplayResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[59] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3903,7 +4068,7 @@ func (x *ReplayResponse) String() string { func (*ReplayResponse) ProtoMessage() {} func (x *ReplayResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[59] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3916,7 +4081,7 @@ func (x *ReplayResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayResponse.ProtoReflect.Descriptor instead. func (*ReplayResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{59} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{62} } func (x *ReplayResponse) GetId() string { @@ -3952,7 +4117,7 @@ type ReplayDryRunRequest struct { func (x *ReplayDryRunRequest) Reset() { *x = ReplayDryRunRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[60] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3965,7 +4130,7 @@ func (x *ReplayDryRunRequest) String() string { func (*ReplayDryRunRequest) ProtoMessage() {} func (x *ReplayDryRunRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[60] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3978,7 +4143,7 @@ func (x *ReplayDryRunRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayDryRunRequest.ProtoReflect.Descriptor instead. func (*ReplayDryRunRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{60} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{63} } func (x *ReplayDryRunRequest) GetProjectName() string { @@ -4038,7 +4203,7 @@ type ReplayDryRunResponse struct { func (x *ReplayDryRunResponse) Reset() { *x = ReplayDryRunResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[61] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4051,7 +4216,7 @@ func (x *ReplayDryRunResponse) String() string { func (*ReplayDryRunResponse) ProtoMessage() {} func (x *ReplayDryRunResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[61] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4064,7 +4229,7 @@ func (x *ReplayDryRunResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayDryRunResponse.ProtoReflect.Descriptor instead. func (*ReplayDryRunResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{61} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{64} } func (x *ReplayDryRunResponse) GetSuccess() bool { @@ -4109,7 +4274,7 @@ type ReplayExecutionTreeNode struct { func (x *ReplayExecutionTreeNode) Reset() { *x = ReplayExecutionTreeNode{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[62] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4122,7 +4287,7 @@ func (x *ReplayExecutionTreeNode) String() string { func (*ReplayExecutionTreeNode) ProtoMessage() {} func (x *ReplayExecutionTreeNode) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[62] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4135,7 +4300,7 @@ func (x *ReplayExecutionTreeNode) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayExecutionTreeNode.ProtoReflect.Descriptor instead. func (*ReplayExecutionTreeNode) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{62} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{65} } func (x *ReplayExecutionTreeNode) GetJobName() string { @@ -4171,7 +4336,7 @@ type GetReplayStatusResponse struct { func (x *GetReplayStatusResponse) Reset() { *x = GetReplayStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[63] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4184,7 +4349,7 @@ func (x *GetReplayStatusResponse) String() string { func (*GetReplayStatusResponse) ProtoMessage() {} func (x *GetReplayStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[63] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4197,7 +4362,7 @@ func (x *GetReplayStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReplayStatusResponse.ProtoReflect.Descriptor instead. func (*GetReplayStatusResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{63} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{66} } func (x *GetReplayStatusResponse) GetState() string { @@ -4228,7 +4393,7 @@ type ReplayStatusTreeNode struct { func (x *ReplayStatusTreeNode) Reset() { *x = ReplayStatusTreeNode{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[64] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4241,7 +4406,7 @@ func (x *ReplayStatusTreeNode) String() string { func (*ReplayStatusTreeNode) ProtoMessage() {} func (x *ReplayStatusTreeNode) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[64] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4254,7 +4419,7 @@ func (x *ReplayStatusTreeNode) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayStatusTreeNode.ProtoReflect.Descriptor instead. func (*ReplayStatusTreeNode) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{64} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{67} } func (x *ReplayStatusTreeNode) GetJobName() string { @@ -4297,7 +4462,7 @@ type ReplayStatusRun struct { func (x *ReplayStatusRun) Reset() { *x = ReplayStatusRun{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[65] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4310,7 +4475,7 @@ func (x *ReplayStatusRun) String() string { func (*ReplayStatusRun) ProtoMessage() {} func (x *ReplayStatusRun) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[65] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4323,7 +4488,7 @@ func (x *ReplayStatusRun) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayStatusRun.ProtoReflect.Descriptor instead. func (*ReplayStatusRun) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{65} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{68} } func (x *ReplayStatusRun) GetRun() *timestamppb.Timestamp { @@ -4353,7 +4518,7 @@ type GetReplayStatusRequest struct { func (x *GetReplayStatusRequest) Reset() { *x = GetReplayStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[66] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4366,7 +4531,7 @@ func (x *GetReplayStatusRequest) String() string { func (*GetReplayStatusRequest) ProtoMessage() {} func (x *GetReplayStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[66] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4379,7 +4544,7 @@ func (x *GetReplayStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReplayStatusRequest.ProtoReflect.Descriptor instead. func (*GetReplayStatusRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{66} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{69} } func (x *GetReplayStatusRequest) GetId() string { @@ -4417,7 +4582,7 @@ type RegisterJobEventRequest struct { func (x *RegisterJobEventRequest) Reset() { *x = RegisterJobEventRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[67] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4430,7 +4595,7 @@ func (x *RegisterJobEventRequest) String() string { func (*RegisterJobEventRequest) ProtoMessage() {} func (x *RegisterJobEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[67] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4443,7 +4608,7 @@ func (x *RegisterJobEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterJobEventRequest.ProtoReflect.Descriptor instead. func (*RegisterJobEventRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{67} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{70} } func (x *RegisterJobEventRequest) GetProjectName() string { @@ -4483,7 +4648,7 @@ type RegisterJobEventResponse struct { func (x *RegisterJobEventResponse) Reset() { *x = RegisterJobEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[68] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4496,7 +4661,7 @@ func (x *RegisterJobEventResponse) String() string { func (*RegisterJobEventResponse) ProtoMessage() {} func (x *RegisterJobEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[68] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4509,7 +4674,7 @@ func (x *RegisterJobEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterJobEventResponse.ProtoReflect.Descriptor instead. func (*RegisterJobEventResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{68} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{71} } type ListReplaysRequest struct { @@ -4523,7 +4688,7 @@ type ListReplaysRequest struct { func (x *ListReplaysRequest) Reset() { *x = ListReplaysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[69] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4536,7 +4701,7 @@ func (x *ListReplaysRequest) String() string { func (*ListReplaysRequest) ProtoMessage() {} func (x *ListReplaysRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[69] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4549,7 +4714,7 @@ func (x *ListReplaysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListReplaysRequest.ProtoReflect.Descriptor instead. func (*ListReplaysRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{69} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{72} } func (x *ListReplaysRequest) GetProjectName() string { @@ -4570,7 +4735,7 @@ type ListReplaysResponse struct { func (x *ListReplaysResponse) Reset() { *x = ListReplaysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[70] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4583,7 +4748,7 @@ func (x *ListReplaysResponse) String() string { func (*ListReplaysResponse) ProtoMessage() {} func (x *ListReplaysResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[70] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4596,7 +4761,7 @@ func (x *ListReplaysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListReplaysResponse.ProtoReflect.Descriptor instead. func (*ListReplaysResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{70} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{73} } func (x *ListReplaysResponse) GetReplayList() []*ReplaySpec { @@ -4617,12 +4782,13 @@ type ReplaySpec struct { EndDate *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"` State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + Config map[string]string `protobuf:"bytes,7,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *ReplaySpec) Reset() { *x = ReplaySpec{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[71] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4635,7 +4801,7 @@ func (x *ReplaySpec) String() string { func (*ReplaySpec) ProtoMessage() {} func (x *ReplaySpec) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[71] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4648,7 +4814,7 @@ func (x *ReplaySpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaySpec.ProtoReflect.Descriptor instead. func (*ReplaySpec) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{71} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{74} } func (x *ReplaySpec) GetId() string { @@ -4693,6 +4859,13 @@ func (x *ReplaySpec) GetCreatedAt() *timestamppb.Timestamp { return nil } +func (x *ReplaySpec) GetConfig() map[string]string { + if x != nil { + return x.Config + } + return nil +} + type RunJobRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4709,7 +4882,7 @@ type RunJobRequest struct { func (x *RunJobRequest) Reset() { *x = RunJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[72] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4722,7 +4895,7 @@ func (x *RunJobRequest) String() string { func (*RunJobRequest) ProtoMessage() {} func (x *RunJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[72] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4735,7 +4908,7 @@ func (x *RunJobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunJobRequest.ProtoReflect.Descriptor instead. func (*RunJobRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{72} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{75} } func (x *RunJobRequest) GetProjectName() string { @@ -4768,7 +4941,7 @@ type RunJobResponse struct { func (x *RunJobResponse) Reset() { *x = RunJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[73] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4781,7 +4954,7 @@ func (x *RunJobResponse) String() string { func (*RunJobResponse) ProtoMessage() {} func (x *RunJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[73] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4794,7 +4967,7 @@ func (x *RunJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunJobResponse.ProtoReflect.Descriptor instead. func (*RunJobResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{73} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{76} } type BackupDryRunRequest struct { @@ -4818,7 +4991,7 @@ type BackupDryRunRequest struct { func (x *BackupDryRunRequest) Reset() { *x = BackupDryRunRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[74] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4831,7 +5004,7 @@ func (x *BackupDryRunRequest) String() string { func (*BackupDryRunRequest) ProtoMessage() {} func (x *BackupDryRunRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[74] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4844,7 +5017,7 @@ func (x *BackupDryRunRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupDryRunRequest.ProtoReflect.Descriptor instead. func (*BackupDryRunRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{74} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{77} } func (x *BackupDryRunRequest) GetProjectName() string { @@ -4909,7 +5082,7 @@ type BackupDryRunResponse struct { func (x *BackupDryRunResponse) Reset() { *x = BackupDryRunResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[75] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4922,7 +5095,7 @@ func (x *BackupDryRunResponse) String() string { func (*BackupDryRunResponse) ProtoMessage() {} func (x *BackupDryRunResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[75] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4935,7 +5108,7 @@ func (x *BackupDryRunResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupDryRunResponse.ProtoReflect.Descriptor instead. func (*BackupDryRunResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{75} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{78} } func (x *BackupDryRunResponse) GetResourceName() []string { @@ -4952,7 +5125,7 @@ func (x *BackupDryRunResponse) GetIgnoredResources() []string { return nil } -type BackupRequest struct { +type CreateBackupRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -4971,23 +5144,23 @@ type BackupRequest struct { AllowedDownstreamNamespaces []string `protobuf:"bytes,8,rep,name=allowed_downstream_namespaces,json=allowedDownstreamNamespaces,proto3" json:"allowed_downstream_namespaces,omitempty"` } -func (x *BackupRequest) Reset() { - *x = BackupRequest{} +func (x *CreateBackupRequest) Reset() { + *x = CreateBackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[76] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *BackupRequest) String() string { +func (x *CreateBackupRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BackupRequest) ProtoMessage() {} +func (*CreateBackupRequest) ProtoMessage() {} -func (x *BackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[76] +func (x *CreateBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4998,40 +5171,40 @@ func (x *BackupRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BackupRequest.ProtoReflect.Descriptor instead. -func (*BackupRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{76} +// Deprecated: Use CreateBackupRequest.ProtoReflect.Descriptor instead. +func (*CreateBackupRequest) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{79} } -func (x *BackupRequest) GetProjectName() string { +func (x *CreateBackupRequest) GetProjectName() string { if x != nil { return x.ProjectName } return "" } -func (x *BackupRequest) GetDatastoreName() string { +func (x *CreateBackupRequest) GetDatastoreName() string { if x != nil { return x.DatastoreName } return "" } -func (x *BackupRequest) GetResourceName() string { +func (x *CreateBackupRequest) GetResourceName() string { if x != nil { return x.ResourceName } return "" } -func (x *BackupRequest) GetNamespace() string { +func (x *CreateBackupRequest) GetNamespace() string { if x != nil { return x.Namespace } return "" } -func (x *BackupRequest) GetDescription() string { +func (x *CreateBackupRequest) GetDescription() string { if x != nil { return x.Description } @@ -5039,28 +5212,28 @@ func (x *BackupRequest) GetDescription() string { } // Deprecated: Do not use. -func (x *BackupRequest) GetIgnoreDownstream() bool { +func (x *CreateBackupRequest) GetIgnoreDownstream() bool { if x != nil { return x.IgnoreDownstream } return false } -func (x *BackupRequest) GetConfig() map[string]string { +func (x *CreateBackupRequest) GetConfig() map[string]string { if x != nil { return x.Config } return nil } -func (x *BackupRequest) GetAllowedDownstreamNamespaces() []string { +func (x *CreateBackupRequest) GetAllowedDownstreamNamespaces() []string { if x != nil { return x.AllowedDownstreamNamespaces } return nil } -type BackupResponse struct { +type CreateBackupResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -5069,23 +5242,23 @@ type BackupResponse struct { IgnoredResources []string `protobuf:"bytes,2,rep,name=ignored_resources,json=ignoredResources,proto3" json:"ignored_resources,omitempty"` } -func (x *BackupResponse) Reset() { - *x = BackupResponse{} +func (x *CreateBackupResponse) Reset() { + *x = CreateBackupResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[77] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *BackupResponse) String() string { +func (x *CreateBackupResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BackupResponse) ProtoMessage() {} +func (*CreateBackupResponse) ProtoMessage() {} -func (x *BackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[77] +func (x *CreateBackupResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5096,19 +5269,19 @@ func (x *BackupResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BackupResponse.ProtoReflect.Descriptor instead. -func (*BackupResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{77} +// Deprecated: Use CreateBackupResponse.ProtoReflect.Descriptor instead. +func (*CreateBackupResponse) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{80} } -func (x *BackupResponse) GetUrn() []string { +func (x *CreateBackupResponse) GetUrn() []string { if x != nil { return x.Urn } return nil } -func (x *BackupResponse) GetIgnoredResources() []string { +func (x *CreateBackupResponse) GetIgnoredResources() []string { if x != nil { return x.IgnoredResources } @@ -5128,7 +5301,7 @@ type ListBackupsRequest struct { func (x *ListBackupsRequest) Reset() { *x = ListBackupsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[78] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5141,7 +5314,7 @@ func (x *ListBackupsRequest) String() string { func (*ListBackupsRequest) ProtoMessage() {} func (x *ListBackupsRequest) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[78] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5154,7 +5327,7 @@ func (x *ListBackupsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBackupsRequest.ProtoReflect.Descriptor instead. func (*ListBackupsRequest) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{78} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{81} } func (x *ListBackupsRequest) GetProjectName() string { @@ -5189,7 +5362,7 @@ type ListBackupsResponse struct { func (x *ListBackupsResponse) Reset() { *x = ListBackupsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[79] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5202,7 +5375,7 @@ func (x *ListBackupsResponse) String() string { func (*ListBackupsResponse) ProtoMessage() {} func (x *ListBackupsResponse) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[79] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5215,7 +5388,7 @@ func (x *ListBackupsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBackupsResponse.ProtoReflect.Descriptor instead. func (*ListBackupsResponse) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{79} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{82} } func (x *ListBackupsResponse) GetBackups() []*BackupSpec { @@ -5234,12 +5407,13 @@ type BackupSpec struct { ResourceName string `protobuf:"bytes,2,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"` CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + Config map[string]string `protobuf:"bytes,5,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *BackupSpec) Reset() { *x = BackupSpec{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[80] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5252,7 +5426,7 @@ func (x *BackupSpec) String() string { func (*BackupSpec) ProtoMessage() {} func (x *BackupSpec) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[80] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5265,7 +5439,7 @@ func (x *BackupSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupSpec.ProtoReflect.Descriptor instead. func (*BackupSpec) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{80} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{83} } func (x *BackupSpec) GetId() string { @@ -5296,6 +5470,139 @@ func (x *BackupSpec) GetDescription() string { return "" } +func (x *BackupSpec) GetConfig() map[string]string { + if x != nil { + return x.Config + } + return nil +} + +type GetBackupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` + DatastoreName string `protobuf:"bytes,2,opt,name=datastore_name,json=datastoreName,proto3" json:"datastore_name,omitempty"` + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` + Id string `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetBackupRequest) Reset() { + *x = GetBackupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBackupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBackupRequest) ProtoMessage() {} + +func (x *GetBackupRequest) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[84] + 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 GetBackupRequest.ProtoReflect.Descriptor instead. +func (*GetBackupRequest) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{84} +} + +func (x *GetBackupRequest) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *GetBackupRequest) GetDatastoreName() string { + if x != nil { + return x.DatastoreName + } + return "" +} + +func (x *GetBackupRequest) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *GetBackupRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type GetBackupResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Spec *BackupSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + Urn []string `protobuf:"bytes,2,rep,name=urn,proto3" json:"urn,omitempty"` +} + +func (x *GetBackupResponse) Reset() { + *x = GetBackupResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBackupResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBackupResponse) ProtoMessage() {} + +func (x *GetBackupResponse) ProtoReflect() protoreflect.Message { + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[85] + 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 GetBackupResponse.ProtoReflect.Descriptor instead. +func (*GetBackupResponse) Descriptor() ([]byte, []int) { + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{85} +} + +func (x *GetBackupResponse) GetSpec() *BackupSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *GetBackupResponse) GetUrn() []string { + if x != nil { + return x.Urn + } + return nil +} + type ProjectSpecification_ProjectSecret struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5308,7 +5615,7 @@ type ProjectSpecification_ProjectSecret struct { func (x *ProjectSpecification_ProjectSecret) Reset() { *x = ProjectSpecification_ProjectSecret{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[82] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5321,7 +5628,7 @@ func (x *ProjectSpecification_ProjectSecret) String() string { func (*ProjectSpecification_ProjectSecret) ProtoMessage() {} func (x *ProjectSpecification_ProjectSecret) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[82] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5363,7 +5670,7 @@ type JobSpecification_Behavior struct { func (x *JobSpecification_Behavior) Reset() { *x = JobSpecification_Behavior{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[86] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5376,7 +5683,7 @@ func (x *JobSpecification_Behavior) String() string { func (*JobSpecification_Behavior) ProtoMessage() {} func (x *JobSpecification_Behavior) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[86] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5389,7 +5696,7 @@ func (x *JobSpecification_Behavior) ProtoReflect() protoreflect.Message { // Deprecated: Use JobSpecification_Behavior.ProtoReflect.Descriptor instead. func (*JobSpecification_Behavior) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{3, 2} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6, 2} } func (x *JobSpecification_Behavior) GetRetry() *JobSpecification_Behavior_Retry { @@ -5420,7 +5727,7 @@ type JobSpecification_Behavior_Retry struct { func (x *JobSpecification_Behavior_Retry) Reset() { *x = JobSpecification_Behavior_Retry{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[87] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5433,7 +5740,7 @@ func (x *JobSpecification_Behavior_Retry) String() string { func (*JobSpecification_Behavior_Retry) ProtoMessage() {} func (x *JobSpecification_Behavior_Retry) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[87] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5446,7 +5753,7 @@ func (x *JobSpecification_Behavior_Retry) ProtoReflect() protoreflect.Message { // Deprecated: Use JobSpecification_Behavior_Retry.ProtoReflect.Descriptor instead. func (*JobSpecification_Behavior_Retry) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{3, 2, 0} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6, 2, 0} } func (x *JobSpecification_Behavior_Retry) GetCount() int32 { @@ -5484,7 +5791,7 @@ type JobSpecification_Behavior_Notifiers struct { func (x *JobSpecification_Behavior_Notifiers) Reset() { *x = JobSpecification_Behavior_Notifiers{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[88] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5497,7 +5804,7 @@ func (x *JobSpecification_Behavior_Notifiers) String() string { func (*JobSpecification_Behavior_Notifiers) ProtoMessage() {} func (x *JobSpecification_Behavior_Notifiers) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[88] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5510,7 +5817,7 @@ func (x *JobSpecification_Behavior_Notifiers) ProtoReflect() protoreflect.Messag // Deprecated: Use JobSpecification_Behavior_Notifiers.ProtoReflect.Descriptor instead. func (*JobSpecification_Behavior_Notifiers) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{3, 2, 1} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{6, 2, 1} } func (x *JobSpecification_Behavior_Notifiers) GetOn() JobEvent_Type { @@ -5546,7 +5853,7 @@ type JobTask_Destination struct { func (x *JobTask_Destination) Reset() { *x = JobTask_Destination{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[94] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5559,7 +5866,7 @@ func (x *JobTask_Destination) String() string { func (*JobTask_Destination) ProtoMessage() {} func (x *JobTask_Destination) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[94] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5572,7 +5879,7 @@ func (x *JobTask_Destination) ProtoReflect() protoreflect.Message { // Deprecated: Use JobTask_Destination.ProtoReflect.Descriptor instead. func (*JobTask_Destination) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{13, 0} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{16, 0} } func (x *JobTask_Destination) GetDestination() string { @@ -5600,7 +5907,7 @@ type JobTask_Dependency struct { func (x *JobTask_Dependency) Reset() { *x = JobTask_Dependency{} if protoimpl.UnsafeEnabled { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[95] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5613,7 +5920,7 @@ func (x *JobTask_Dependency) String() string { func (*JobTask_Dependency) ProtoMessage() {} func (x *JobTask_Dependency) ProtoReflect() protoreflect.Message { - mi := &file_odpf_optimus_runtime_service_proto_msgTypes[95] + mi := &file_odpf_optimus_runtime_service_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5626,7 +5933,7 @@ func (x *JobTask_Dependency) ProtoReflect() protoreflect.Message { // Deprecated: Use JobTask_Dependency.ProtoReflect.Descriptor instead. func (*JobTask_Dependency) Descriptor() ([]byte, []int) { - return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{13, 1} + return file_odpf_optimus_runtime_service_proto_rawDescGZIP(), []int{16, 1} } func (x *JobTask_Dependency) GetDependency() string { @@ -5689,775 +5996,829 @@ var file_odpf_optimus_runtime_service_proto_rawDesc = []byte{ 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x93, 0x0b, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, - 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x6f, 0x6e, 0x5f, - 0x70, 0x61, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x73, 0x4f, 0x6e, 0x50, 0x61, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x74, - 0x63, 0x68, 0x55, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, - 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, - 0x2f, 0x0a, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x69, 0x67, 0x22, 0x49, 0x0a, 0x1d, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0xa3, 0x01, + 0x0a, 0x17, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, + 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, + 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x22, 0x50, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x41, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xca, 0x0b, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x5f, + 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, + 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x4f, 0x6e, 0x50, 0x61, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x63, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x12, 0x3f, 0x0a, + 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, + 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x42, + 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, - 0x62, 0x53, 0x70, 0x65, 0x63, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, - 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x43, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, - 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x84, 0x04, 0x0a, 0x08, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x43, - 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x05, 0x72, 0x65, - 0x74, 0x72, 0x79, 0x12, 0x49, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x1a, 0x7f, - 0x0a, 0x05, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, - 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x2f, - 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, - 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x1a, - 0xe6, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x0a, - 0x02, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x02, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x55, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, - 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x37, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x97, 0x02, 0x0a, - 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, - 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 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, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x41, 0x53, 0x4b, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x4f, 0x4b, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, - 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2a, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x56, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x81, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x65, 0x6e, - 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x45, 0x6e, 0x76, 0x73, 0x45, + 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x05, 0x68, 0x6f, + 0x6f, 0x6b, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x43, 0x0a, 0x08, 0x62, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x35, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x4a, 0x6f, 0x62, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x38, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, 0x0a, 0x09, 0x4a, 0x6f, - 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, - 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x22, 0xab, 0x01, 0x0a, - 0x08, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3f, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4c, 0x41, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x03, 0x22, 0x8f, 0x01, 0x0a, 0x0a, 0x54, - 0x61, 0x73, 0x6b, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x22, 0x94, 0x03, 0x0a, - 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x47, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x47, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x84, 0x04, 0x0a, 0x08, + 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, + 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x49, 0x0a, + 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x1a, 0x7f, 0x0a, 0x05, 0x52, 0x65, 0x74, 0x72, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x1a, 0xe6, 0x01, 0x0a, 0x09, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x02, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x12, 0x55, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0xd3, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x44, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x44, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x2c, 0x0a, 0x0a, 0x44, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x28, 0x0a, 0x0e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x94, - 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x38, 0x01, 0x22, 0x39, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x37, 0x0a, + 0x0d, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x97, 0x02, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x05, 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, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x41, 0x53, 0x4b, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, + 0x4f, 0x4b, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x22, 0xad, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2a, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4e, 0x56, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, + 0x4c, 0x45, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x22, 0x81, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, + 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x76, + 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x60, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x2e, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x3f, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x4c, 0x41, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x41, + 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x10, 0x03, 0x22, 0x8f, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x57, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x75, 0x6e, + 0x63, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x22, 0x94, 0x03, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, + 0x47, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xd3, 0x02, + 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, + 0x6b, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0c, 0x64, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x1a, 0x43, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x2c, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x79, 0x22, 0x28, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, + 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x94, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, + 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x81, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x1b, 0x4c, 0x69, 0x73, - 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x6f, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4a, 0x6f, + 0x62, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4a, + 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, + 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, 0x91, 0x01, 0x0a, 0x1c, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, + 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x39, 0x0a, + 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, + 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x81, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, + 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x46, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x1f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x56, + 0x0a, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x94, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x4c, 0x69, 0x73, - 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x6a, 0x6f, 0x62, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x6f, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x54, 0x0a, + 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x1b, 0x52, 0x65, 0x61, 0x64, 0x4a, 0x6f, 0x62, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3f, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, - 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x22, - 0x91, 0x01, 0x0a, 0x1c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x39, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x94, - 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, - 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4a, - 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x17, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x1f, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x42, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x56, 0x0a, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x94, 0x01, 0x0a, - 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x52, + 0x0a, 0x1c, 0x52, 0x65, 0x61, 0x64, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x22, 0x7b, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x71, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x22, 0x54, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x1b, 0x52, 0x65, 0x61, - 0x64, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x52, 0x65, 0x61, 0x64, 0x4a, 0x6f, 0x62, 0x53, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x41, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, + 0xa4, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 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, 0x0b, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, + 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x72, 0x75, 0x6e, 0x49, 0x64, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xbf, 0x02, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x42, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x7b, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, - 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, - 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x71, 0x0a, 0x15, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4c, - 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x15, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x56, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x41, 0x0a, 0x1c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x65, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x44, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x6f, 0x6e, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x36, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x37, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x48, 0x0a, 0x11, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 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, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, - 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, - 0x62, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xbf, 0x02, 0x0a, - 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x42, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x6a, - 0x6f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x36, 0x0a, - 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, - 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, - 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x48, 0x0a, 0x11, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, - 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, - 0x6f, 0x22, 0x73, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xcf, 0x01, 0x0a, 0x22, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x23, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x20, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, - 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x66, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x22, 0xc0, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x70, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, + 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x22, 0x73, 0x0a, 0x11, 0x47, + 0x65, 0x74, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, + 0x22, 0xcf, 0x01, 0x0a, 0x22, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x23, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0x66, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, - 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x64, - 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x43, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, - 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0xef, 0x01, 0x0a, - 0x13, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe8, - 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, + 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, + 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x17, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 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, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x22, 0x6f, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, - 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0a, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x72, 0x65, 0x65, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x31, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, - 0x75, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x55, 0x0a, 0x0f, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x2c, 0x0a, 0x03, - 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x72, 0x75, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x66, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, - 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, - 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x13, + 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, - 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1a, - 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, 0x12, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfa, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x70, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x22, 0x8b, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, + 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xff, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 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, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x10, 0x0a, - 0x0e, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xb9, 0x02, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x77, - 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x14, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xaf, 0x03, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x42, 0x0a, + 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, + 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x22, 0x43, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x6a, + 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, + 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x72, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x4a, + 0x6f, 0x62, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x79, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, + 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 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, 0x04, 0x72, 0x75, 0x6e, + 0x73, 0x22, 0x6f, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, + 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, + 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x0a, + 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x75, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x55, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x2c, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x03, 0x72, 0x75, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x66, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4a, + 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0xf3, 0x02, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, + 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, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x01, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x77, - 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4f, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x69, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x4a, 0x6f, 0x62, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xb9, 0x02, 0x0a, 0x13, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x72, 0x79, + 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x11, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, + 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x68, + 0x0a, 0x14, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x49, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, - 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 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, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x32, 0xe5, 0x25, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xbb, 0x03, 0x0a, 0x13, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2f, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10, + 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1b, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x55, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, + 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67, 0x6e, + 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x7c, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x49, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x22, 0x97, 0x02, 0x0a, 0x0a, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x53, 0x70, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 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, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x70, 0x65, + 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x8a, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6e, 0x32, 0xa7, 0x27, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5e, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, @@ -6729,46 +7090,58 @@ var file_odpf_optimus_runtime_service_proto_rawDesc = []byte{ 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x2d, 0x64, 0x72, 0x79, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xa2, 0x01, - 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x57, 0x22, 0x52, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, - 0x01, 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x73, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6b, 0x75, 0x70, 0x2d, 0x64, 0x72, 0x79, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, + 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x21, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x57, 0x22, 0x52, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x3a, 0x01, 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, - 0x52, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, - 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x1b, - 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x75, - 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x64, - 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x75, 0x6e, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x54, 0x12, 0x52, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x86, 0x01, 0x0a, 0x16, 0x69, - 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6d, 0x75, 0x73, 0x42, 0x15, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x1e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x92, 0x41, - 0x32, 0x12, 0x05, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x1a, 0x0e, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, - 0x30, 0x2e, 0x31, 0x3a, 0x39, 0x31, 0x30, 0x30, 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, 0x2a, 0x01, - 0x01, 0x72, 0x10, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x7d, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0xad, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x12, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x12, 0x57, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, + 0x12, 0x1b, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, + 0x52, 0x75, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x2e, 0x52, 0x75, 0x6e, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x86, 0x01, 0x0a, + 0x16, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x42, 0x15, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x50, 0x01, + 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, + 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, + 0x92, 0x41, 0x32, 0x12, 0x05, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x1a, 0x0e, 0x31, 0x32, 0x37, 0x2e, + 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x3a, 0x39, 0x31, 0x30, 0x30, 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, + 0x2a, 0x01, 0x01, 0x72, 0x10, 0x0a, 0x0e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x75, 0x73, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6784,7 +7157,7 @@ func file_odpf_optimus_runtime_service_proto_rawDescGZIP() []byte { } var file_odpf_optimus_runtime_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_odpf_optimus_runtime_service_proto_msgTypes = make([]protoimpl.MessageInfo, 97) +var file_odpf_optimus_runtime_service_proto_msgTypes = make([]protoimpl.MessageInfo, 104) var file_odpf_optimus_runtime_service_proto_goTypes = []interface{}{ (InstanceSpec_Type)(0), // 0: odpf.optimus.InstanceSpec.Type (InstanceSpecData_Type)(0), // 1: odpf.optimus.InstanceSpecData.Type @@ -6792,248 +7165,264 @@ var file_odpf_optimus_runtime_service_proto_goTypes = []interface{}{ (*ProjectSpecification)(nil), // 3: odpf.optimus.ProjectSpecification (*NamespaceSpecification)(nil), // 4: odpf.optimus.NamespaceSpecification (*JobSpecHook)(nil), // 5: odpf.optimus.JobSpecHook - (*JobSpecification)(nil), // 6: odpf.optimus.JobSpecification - (*JobConfigItem)(nil), // 7: odpf.optimus.JobConfigItem - (*JobDependency)(nil), // 8: odpf.optimus.JobDependency - (*InstanceSpec)(nil), // 9: odpf.optimus.InstanceSpec - (*InstanceSpecData)(nil), // 10: odpf.optimus.InstanceSpecData - (*InstanceContext)(nil), // 11: odpf.optimus.InstanceContext - (*JobStatus)(nil), // 12: odpf.optimus.JobStatus - (*JobEvent)(nil), // 13: odpf.optimus.JobEvent - (*TaskWindow)(nil), // 14: odpf.optimus.TaskWindow - (*ResourceSpecification)(nil), // 15: odpf.optimus.ResourceSpecification - (*JobTask)(nil), // 16: odpf.optimus.JobTask - (*VersionRequest)(nil), // 17: odpf.optimus.VersionRequest - (*VersionResponse)(nil), // 18: odpf.optimus.VersionResponse - (*DeployJobSpecificationRequest)(nil), // 19: odpf.optimus.DeployJobSpecificationRequest - (*DeployJobSpecificationResponse)(nil), // 20: odpf.optimus.DeployJobSpecificationResponse - (*ListJobSpecificationRequest)(nil), // 21: odpf.optimus.ListJobSpecificationRequest - (*ListJobSpecificationResponse)(nil), // 22: odpf.optimus.ListJobSpecificationResponse - (*GetJobTaskRequest)(nil), // 23: odpf.optimus.GetJobTaskRequest - (*GetJobTaskResponse)(nil), // 24: odpf.optimus.GetJobTaskResponse - (*CheckJobSpecificationRequest)(nil), // 25: odpf.optimus.CheckJobSpecificationRequest - (*CheckJobSpecificationResponse)(nil), // 26: odpf.optimus.CheckJobSpecificationResponse - (*CheckJobSpecificationsRequest)(nil), // 27: odpf.optimus.CheckJobSpecificationsRequest - (*CheckJobSpecificationsResponse)(nil), // 28: odpf.optimus.CheckJobSpecificationsResponse - (*RegisterProjectRequest)(nil), // 29: odpf.optimus.RegisterProjectRequest - (*RegisterProjectResponse)(nil), // 30: odpf.optimus.RegisterProjectResponse - (*RegisterProjectNamespaceRequest)(nil), // 31: odpf.optimus.RegisterProjectNamespaceRequest - (*RegisterProjectNamespaceResponse)(nil), // 32: odpf.optimus.RegisterProjectNamespaceResponse - (*CreateJobSpecificationRequest)(nil), // 33: odpf.optimus.CreateJobSpecificationRequest - (*CreateJobSpecificationResponse)(nil), // 34: odpf.optimus.CreateJobSpecificationResponse - (*ReadJobSpecificationRequest)(nil), // 35: odpf.optimus.ReadJobSpecificationRequest - (*ReadJobSpecificationResponse)(nil), // 36: odpf.optimus.ReadJobSpecificationResponse - (*DeleteJobSpecificationRequest)(nil), // 37: odpf.optimus.DeleteJobSpecificationRequest - (*DeleteJobSpecificationResponse)(nil), // 38: odpf.optimus.DeleteJobSpecificationResponse - (*RegisterSecretRequest)(nil), // 39: odpf.optimus.RegisterSecretRequest - (*RegisterSecretResponse)(nil), // 40: odpf.optimus.RegisterSecretResponse - (*ListProjectsRequest)(nil), // 41: odpf.optimus.ListProjectsRequest - (*ListProjectsResponse)(nil), // 42: odpf.optimus.ListProjectsResponse - (*ListProjectNamespacesRequest)(nil), // 43: odpf.optimus.ListProjectNamespacesRequest - (*ListProjectNamespacesResponse)(nil), // 44: odpf.optimus.ListProjectNamespacesResponse - (*RegisterInstanceRequest)(nil), // 45: odpf.optimus.RegisterInstanceRequest - (*RegisterInstanceResponse)(nil), // 46: odpf.optimus.RegisterInstanceResponse - (*JobStatusRequest)(nil), // 47: odpf.optimus.JobStatusRequest - (*JobStatusResponse)(nil), // 48: odpf.optimus.JobStatusResponse - (*GetWindowRequest)(nil), // 49: odpf.optimus.GetWindowRequest - (*GetWindowResponse)(nil), // 50: odpf.optimus.GetWindowResponse - (*DeployResourceSpecificationRequest)(nil), // 51: odpf.optimus.DeployResourceSpecificationRequest - (*DeployResourceSpecificationResponse)(nil), // 52: odpf.optimus.DeployResourceSpecificationResponse - (*ListResourceSpecificationRequest)(nil), // 53: odpf.optimus.ListResourceSpecificationRequest - (*ListResourceSpecificationResponse)(nil), // 54: odpf.optimus.ListResourceSpecificationResponse - (*CreateResourceRequest)(nil), // 55: odpf.optimus.CreateResourceRequest - (*CreateResourceResponse)(nil), // 56: odpf.optimus.CreateResourceResponse - (*ReadResourceRequest)(nil), // 57: odpf.optimus.ReadResourceRequest - (*ReadResourceResponse)(nil), // 58: odpf.optimus.ReadResourceResponse - (*UpdateResourceRequest)(nil), // 59: odpf.optimus.UpdateResourceRequest - (*UpdateResourceResponse)(nil), // 60: odpf.optimus.UpdateResourceResponse - (*ReplayRequest)(nil), // 61: odpf.optimus.ReplayRequest - (*ReplayResponse)(nil), // 62: odpf.optimus.ReplayResponse - (*ReplayDryRunRequest)(nil), // 63: odpf.optimus.ReplayDryRunRequest - (*ReplayDryRunResponse)(nil), // 64: odpf.optimus.ReplayDryRunResponse - (*ReplayExecutionTreeNode)(nil), // 65: odpf.optimus.ReplayExecutionTreeNode - (*GetReplayStatusResponse)(nil), // 66: odpf.optimus.GetReplayStatusResponse - (*ReplayStatusTreeNode)(nil), // 67: odpf.optimus.ReplayStatusTreeNode - (*ReplayStatusRun)(nil), // 68: odpf.optimus.ReplayStatusRun - (*GetReplayStatusRequest)(nil), // 69: odpf.optimus.GetReplayStatusRequest - (*RegisterJobEventRequest)(nil), // 70: odpf.optimus.RegisterJobEventRequest - (*RegisterJobEventResponse)(nil), // 71: odpf.optimus.RegisterJobEventResponse - (*ListReplaysRequest)(nil), // 72: odpf.optimus.ListReplaysRequest - (*ListReplaysResponse)(nil), // 73: odpf.optimus.ListReplaysResponse - (*ReplaySpec)(nil), // 74: odpf.optimus.ReplaySpec - (*RunJobRequest)(nil), // 75: odpf.optimus.RunJobRequest - (*RunJobResponse)(nil), // 76: odpf.optimus.RunJobResponse - (*BackupDryRunRequest)(nil), // 77: odpf.optimus.BackupDryRunRequest - (*BackupDryRunResponse)(nil), // 78: odpf.optimus.BackupDryRunResponse - (*BackupRequest)(nil), // 79: odpf.optimus.BackupRequest - (*BackupResponse)(nil), // 80: odpf.optimus.BackupResponse - (*ListBackupsRequest)(nil), // 81: odpf.optimus.ListBackupsRequest - (*ListBackupsResponse)(nil), // 82: odpf.optimus.ListBackupsResponse - (*BackupSpec)(nil), // 83: odpf.optimus.BackupSpec - nil, // 84: odpf.optimus.ProjectSpecification.ConfigEntry - (*ProjectSpecification_ProjectSecret)(nil), // 85: odpf.optimus.ProjectSpecification.ProjectSecret - nil, // 86: odpf.optimus.NamespaceSpecification.ConfigEntry - nil, // 87: odpf.optimus.JobSpecification.AssetsEntry - nil, // 88: odpf.optimus.JobSpecification.LabelsEntry - (*JobSpecification_Behavior)(nil), // 89: odpf.optimus.JobSpecification.Behavior - (*JobSpecification_Behavior_Retry)(nil), // 90: odpf.optimus.JobSpecification.Behavior.Retry - (*JobSpecification_Behavior_Notifiers)(nil), // 91: odpf.optimus.JobSpecification.Behavior.Notifiers - nil, // 92: odpf.optimus.JobSpecification.Behavior.Notifiers.ConfigEntry - nil, // 93: odpf.optimus.InstanceContext.EnvsEntry - nil, // 94: odpf.optimus.InstanceContext.FilesEntry - nil, // 95: odpf.optimus.ResourceSpecification.AssetsEntry - nil, // 96: odpf.optimus.ResourceSpecification.LabelsEntry - (*JobTask_Destination)(nil), // 97: odpf.optimus.JobTask.Destination - (*JobTask_Dependency)(nil), // 98: odpf.optimus.JobTask.Dependency - nil, // 99: odpf.optimus.BackupRequest.ConfigEntry - (*timestamppb.Timestamp)(nil), // 100: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 101: google.protobuf.Struct - (*durationpb.Duration)(nil), // 102: google.protobuf.Duration + (*JobSpecMetadataResourceConfig)(nil), // 6: odpf.optimus.JobSpecMetadataResourceConfig + (*JobSpecMetadataResource)(nil), // 7: odpf.optimus.JobSpecMetadataResource + (*JobMetadata)(nil), // 8: odpf.optimus.JobMetadata + (*JobSpecification)(nil), // 9: odpf.optimus.JobSpecification + (*JobConfigItem)(nil), // 10: odpf.optimus.JobConfigItem + (*JobDependency)(nil), // 11: odpf.optimus.JobDependency + (*InstanceSpec)(nil), // 12: odpf.optimus.InstanceSpec + (*InstanceSpecData)(nil), // 13: odpf.optimus.InstanceSpecData + (*InstanceContext)(nil), // 14: odpf.optimus.InstanceContext + (*JobStatus)(nil), // 15: odpf.optimus.JobStatus + (*JobEvent)(nil), // 16: odpf.optimus.JobEvent + (*TaskWindow)(nil), // 17: odpf.optimus.TaskWindow + (*ResourceSpecification)(nil), // 18: odpf.optimus.ResourceSpecification + (*JobTask)(nil), // 19: odpf.optimus.JobTask + (*VersionRequest)(nil), // 20: odpf.optimus.VersionRequest + (*VersionResponse)(nil), // 21: odpf.optimus.VersionResponse + (*DeployJobSpecificationRequest)(nil), // 22: odpf.optimus.DeployJobSpecificationRequest + (*DeployJobSpecificationResponse)(nil), // 23: odpf.optimus.DeployJobSpecificationResponse + (*ListJobSpecificationRequest)(nil), // 24: odpf.optimus.ListJobSpecificationRequest + (*ListJobSpecificationResponse)(nil), // 25: odpf.optimus.ListJobSpecificationResponse + (*GetJobTaskRequest)(nil), // 26: odpf.optimus.GetJobTaskRequest + (*GetJobTaskResponse)(nil), // 27: odpf.optimus.GetJobTaskResponse + (*CheckJobSpecificationRequest)(nil), // 28: odpf.optimus.CheckJobSpecificationRequest + (*CheckJobSpecificationResponse)(nil), // 29: odpf.optimus.CheckJobSpecificationResponse + (*CheckJobSpecificationsRequest)(nil), // 30: odpf.optimus.CheckJobSpecificationsRequest + (*CheckJobSpecificationsResponse)(nil), // 31: odpf.optimus.CheckJobSpecificationsResponse + (*RegisterProjectRequest)(nil), // 32: odpf.optimus.RegisterProjectRequest + (*RegisterProjectResponse)(nil), // 33: odpf.optimus.RegisterProjectResponse + (*RegisterProjectNamespaceRequest)(nil), // 34: odpf.optimus.RegisterProjectNamespaceRequest + (*RegisterProjectNamespaceResponse)(nil), // 35: odpf.optimus.RegisterProjectNamespaceResponse + (*CreateJobSpecificationRequest)(nil), // 36: odpf.optimus.CreateJobSpecificationRequest + (*CreateJobSpecificationResponse)(nil), // 37: odpf.optimus.CreateJobSpecificationResponse + (*ReadJobSpecificationRequest)(nil), // 38: odpf.optimus.ReadJobSpecificationRequest + (*ReadJobSpecificationResponse)(nil), // 39: odpf.optimus.ReadJobSpecificationResponse + (*DeleteJobSpecificationRequest)(nil), // 40: odpf.optimus.DeleteJobSpecificationRequest + (*DeleteJobSpecificationResponse)(nil), // 41: odpf.optimus.DeleteJobSpecificationResponse + (*RegisterSecretRequest)(nil), // 42: odpf.optimus.RegisterSecretRequest + (*RegisterSecretResponse)(nil), // 43: odpf.optimus.RegisterSecretResponse + (*ListProjectsRequest)(nil), // 44: odpf.optimus.ListProjectsRequest + (*ListProjectsResponse)(nil), // 45: odpf.optimus.ListProjectsResponse + (*ListProjectNamespacesRequest)(nil), // 46: odpf.optimus.ListProjectNamespacesRequest + (*ListProjectNamespacesResponse)(nil), // 47: odpf.optimus.ListProjectNamespacesResponse + (*RegisterInstanceRequest)(nil), // 48: odpf.optimus.RegisterInstanceRequest + (*RegisterInstanceResponse)(nil), // 49: odpf.optimus.RegisterInstanceResponse + (*JobStatusRequest)(nil), // 50: odpf.optimus.JobStatusRequest + (*JobStatusResponse)(nil), // 51: odpf.optimus.JobStatusResponse + (*GetWindowRequest)(nil), // 52: odpf.optimus.GetWindowRequest + (*GetWindowResponse)(nil), // 53: odpf.optimus.GetWindowResponse + (*DeployResourceSpecificationRequest)(nil), // 54: odpf.optimus.DeployResourceSpecificationRequest + (*DeployResourceSpecificationResponse)(nil), // 55: odpf.optimus.DeployResourceSpecificationResponse + (*ListResourceSpecificationRequest)(nil), // 56: odpf.optimus.ListResourceSpecificationRequest + (*ListResourceSpecificationResponse)(nil), // 57: odpf.optimus.ListResourceSpecificationResponse + (*CreateResourceRequest)(nil), // 58: odpf.optimus.CreateResourceRequest + (*CreateResourceResponse)(nil), // 59: odpf.optimus.CreateResourceResponse + (*ReadResourceRequest)(nil), // 60: odpf.optimus.ReadResourceRequest + (*ReadResourceResponse)(nil), // 61: odpf.optimus.ReadResourceResponse + (*UpdateResourceRequest)(nil), // 62: odpf.optimus.UpdateResourceRequest + (*UpdateResourceResponse)(nil), // 63: odpf.optimus.UpdateResourceResponse + (*ReplayRequest)(nil), // 64: odpf.optimus.ReplayRequest + (*ReplayResponse)(nil), // 65: odpf.optimus.ReplayResponse + (*ReplayDryRunRequest)(nil), // 66: odpf.optimus.ReplayDryRunRequest + (*ReplayDryRunResponse)(nil), // 67: odpf.optimus.ReplayDryRunResponse + (*ReplayExecutionTreeNode)(nil), // 68: odpf.optimus.ReplayExecutionTreeNode + (*GetReplayStatusResponse)(nil), // 69: odpf.optimus.GetReplayStatusResponse + (*ReplayStatusTreeNode)(nil), // 70: odpf.optimus.ReplayStatusTreeNode + (*ReplayStatusRun)(nil), // 71: odpf.optimus.ReplayStatusRun + (*GetReplayStatusRequest)(nil), // 72: odpf.optimus.GetReplayStatusRequest + (*RegisterJobEventRequest)(nil), // 73: odpf.optimus.RegisterJobEventRequest + (*RegisterJobEventResponse)(nil), // 74: odpf.optimus.RegisterJobEventResponse + (*ListReplaysRequest)(nil), // 75: odpf.optimus.ListReplaysRequest + (*ListReplaysResponse)(nil), // 76: odpf.optimus.ListReplaysResponse + (*ReplaySpec)(nil), // 77: odpf.optimus.ReplaySpec + (*RunJobRequest)(nil), // 78: odpf.optimus.RunJobRequest + (*RunJobResponse)(nil), // 79: odpf.optimus.RunJobResponse + (*BackupDryRunRequest)(nil), // 80: odpf.optimus.BackupDryRunRequest + (*BackupDryRunResponse)(nil), // 81: odpf.optimus.BackupDryRunResponse + (*CreateBackupRequest)(nil), // 82: odpf.optimus.CreateBackupRequest + (*CreateBackupResponse)(nil), // 83: odpf.optimus.CreateBackupResponse + (*ListBackupsRequest)(nil), // 84: odpf.optimus.ListBackupsRequest + (*ListBackupsResponse)(nil), // 85: odpf.optimus.ListBackupsResponse + (*BackupSpec)(nil), // 86: odpf.optimus.BackupSpec + (*GetBackupRequest)(nil), // 87: odpf.optimus.GetBackupRequest + (*GetBackupResponse)(nil), // 88: odpf.optimus.GetBackupResponse + nil, // 89: odpf.optimus.ProjectSpecification.ConfigEntry + (*ProjectSpecification_ProjectSecret)(nil), // 90: odpf.optimus.ProjectSpecification.ProjectSecret + nil, // 91: odpf.optimus.NamespaceSpecification.ConfigEntry + nil, // 92: odpf.optimus.JobSpecification.AssetsEntry + nil, // 93: odpf.optimus.JobSpecification.LabelsEntry + (*JobSpecification_Behavior)(nil), // 94: odpf.optimus.JobSpecification.Behavior + (*JobSpecification_Behavior_Retry)(nil), // 95: odpf.optimus.JobSpecification.Behavior.Retry + (*JobSpecification_Behavior_Notifiers)(nil), // 96: odpf.optimus.JobSpecification.Behavior.Notifiers + nil, // 97: odpf.optimus.JobSpecification.Behavior.Notifiers.ConfigEntry + nil, // 98: odpf.optimus.InstanceContext.EnvsEntry + nil, // 99: odpf.optimus.InstanceContext.FilesEntry + nil, // 100: odpf.optimus.ResourceSpecification.AssetsEntry + nil, // 101: odpf.optimus.ResourceSpecification.LabelsEntry + (*JobTask_Destination)(nil), // 102: odpf.optimus.JobTask.Destination + (*JobTask_Dependency)(nil), // 103: odpf.optimus.JobTask.Dependency + nil, // 104: odpf.optimus.ReplaySpec.ConfigEntry + nil, // 105: odpf.optimus.CreateBackupRequest.ConfigEntry + nil, // 106: odpf.optimus.BackupSpec.ConfigEntry + (*timestamppb.Timestamp)(nil), // 107: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 108: google.protobuf.Struct + (*durationpb.Duration)(nil), // 109: google.protobuf.Duration } var file_odpf_optimus_runtime_service_proto_depIdxs = []int32{ - 84, // 0: odpf.optimus.ProjectSpecification.config:type_name -> odpf.optimus.ProjectSpecification.ConfigEntry - 85, // 1: odpf.optimus.ProjectSpecification.secrets:type_name -> odpf.optimus.ProjectSpecification.ProjectSecret - 86, // 2: odpf.optimus.NamespaceSpecification.config:type_name -> odpf.optimus.NamespaceSpecification.ConfigEntry - 7, // 3: odpf.optimus.JobSpecHook.config:type_name -> odpf.optimus.JobConfigItem - 7, // 4: odpf.optimus.JobSpecification.config:type_name -> odpf.optimus.JobConfigItem - 8, // 5: odpf.optimus.JobSpecification.dependencies:type_name -> odpf.optimus.JobDependency - 87, // 6: odpf.optimus.JobSpecification.assets:type_name -> odpf.optimus.JobSpecification.AssetsEntry - 5, // 7: odpf.optimus.JobSpecification.hooks:type_name -> odpf.optimus.JobSpecHook - 88, // 8: odpf.optimus.JobSpecification.labels:type_name -> odpf.optimus.JobSpecification.LabelsEntry - 89, // 9: odpf.optimus.JobSpecification.behavior:type_name -> odpf.optimus.JobSpecification.Behavior - 10, // 10: odpf.optimus.InstanceSpec.data:type_name -> odpf.optimus.InstanceSpecData - 100, // 11: odpf.optimus.InstanceSpec.executed_at:type_name -> google.protobuf.Timestamp - 0, // 12: odpf.optimus.InstanceSpec.type:type_name -> odpf.optimus.InstanceSpec.Type - 1, // 13: odpf.optimus.InstanceSpecData.type:type_name -> odpf.optimus.InstanceSpecData.Type - 93, // 14: odpf.optimus.InstanceContext.envs:type_name -> odpf.optimus.InstanceContext.EnvsEntry - 94, // 15: odpf.optimus.InstanceContext.files:type_name -> odpf.optimus.InstanceContext.FilesEntry - 100, // 16: odpf.optimus.JobStatus.scheduled_at:type_name -> google.protobuf.Timestamp - 2, // 17: odpf.optimus.JobEvent.type:type_name -> odpf.optimus.JobEvent.Type - 101, // 18: odpf.optimus.JobEvent.value:type_name -> google.protobuf.Struct - 102, // 19: odpf.optimus.TaskWindow.size:type_name -> google.protobuf.Duration - 102, // 20: odpf.optimus.TaskWindow.offset:type_name -> google.protobuf.Duration - 101, // 21: odpf.optimus.ResourceSpecification.spec:type_name -> google.protobuf.Struct - 95, // 22: odpf.optimus.ResourceSpecification.assets:type_name -> odpf.optimus.ResourceSpecification.AssetsEntry - 96, // 23: odpf.optimus.ResourceSpecification.labels:type_name -> odpf.optimus.ResourceSpecification.LabelsEntry - 97, // 24: odpf.optimus.JobTask.destination:type_name -> odpf.optimus.JobTask.Destination - 98, // 25: odpf.optimus.JobTask.dependencies:type_name -> odpf.optimus.JobTask.Dependency - 6, // 26: odpf.optimus.DeployJobSpecificationRequest.jobs:type_name -> odpf.optimus.JobSpecification - 6, // 27: odpf.optimus.ListJobSpecificationResponse.jobs:type_name -> odpf.optimus.JobSpecification - 16, // 28: odpf.optimus.GetJobTaskResponse.task:type_name -> odpf.optimus.JobTask - 6, // 29: odpf.optimus.CheckJobSpecificationRequest.job:type_name -> odpf.optimus.JobSpecification - 6, // 30: odpf.optimus.CheckJobSpecificationsRequest.jobs:type_name -> odpf.optimus.JobSpecification - 3, // 31: odpf.optimus.RegisterProjectRequest.project:type_name -> odpf.optimus.ProjectSpecification - 4, // 32: odpf.optimus.RegisterProjectRequest.namespace:type_name -> odpf.optimus.NamespaceSpecification - 4, // 33: odpf.optimus.RegisterProjectNamespaceRequest.namespace:type_name -> odpf.optimus.NamespaceSpecification - 6, // 34: odpf.optimus.CreateJobSpecificationRequest.spec:type_name -> odpf.optimus.JobSpecification - 6, // 35: odpf.optimus.ReadJobSpecificationResponse.spec:type_name -> odpf.optimus.JobSpecification - 3, // 36: odpf.optimus.ListProjectsResponse.projects:type_name -> odpf.optimus.ProjectSpecification - 4, // 37: odpf.optimus.ListProjectNamespacesResponse.namespaces:type_name -> odpf.optimus.NamespaceSpecification - 100, // 38: odpf.optimus.RegisterInstanceRequest.scheduled_at:type_name -> google.protobuf.Timestamp - 0, // 39: odpf.optimus.RegisterInstanceRequest.instance_type:type_name -> odpf.optimus.InstanceSpec.Type - 3, // 40: odpf.optimus.RegisterInstanceResponse.project:type_name -> odpf.optimus.ProjectSpecification - 4, // 41: odpf.optimus.RegisterInstanceResponse.namespace:type_name -> odpf.optimus.NamespaceSpecification - 6, // 42: odpf.optimus.RegisterInstanceResponse.job:type_name -> odpf.optimus.JobSpecification - 9, // 43: odpf.optimus.RegisterInstanceResponse.instance:type_name -> odpf.optimus.InstanceSpec - 11, // 44: odpf.optimus.RegisterInstanceResponse.context:type_name -> odpf.optimus.InstanceContext - 12, // 45: odpf.optimus.JobStatusResponse.statuses:type_name -> odpf.optimus.JobStatus - 100, // 46: odpf.optimus.GetWindowRequest.scheduled_at:type_name -> google.protobuf.Timestamp - 100, // 47: odpf.optimus.GetWindowResponse.start:type_name -> google.protobuf.Timestamp - 100, // 48: odpf.optimus.GetWindowResponse.end:type_name -> google.protobuf.Timestamp - 15, // 49: odpf.optimus.DeployResourceSpecificationRequest.resources:type_name -> odpf.optimus.ResourceSpecification - 15, // 50: odpf.optimus.ListResourceSpecificationResponse.resources:type_name -> odpf.optimus.ResourceSpecification - 15, // 51: odpf.optimus.CreateResourceRequest.resource:type_name -> odpf.optimus.ResourceSpecification - 15, // 52: odpf.optimus.ReadResourceResponse.resource:type_name -> odpf.optimus.ResourceSpecification - 15, // 53: odpf.optimus.UpdateResourceRequest.resource:type_name -> odpf.optimus.ResourceSpecification - 65, // 54: odpf.optimus.ReplayDryRunResponse.response:type_name -> odpf.optimus.ReplayExecutionTreeNode - 65, // 55: odpf.optimus.ReplayDryRunResponse.execution_tree:type_name -> odpf.optimus.ReplayExecutionTreeNode - 65, // 56: odpf.optimus.ReplayExecutionTreeNode.dependents:type_name -> odpf.optimus.ReplayExecutionTreeNode - 100, // 57: odpf.optimus.ReplayExecutionTreeNode.runs:type_name -> google.protobuf.Timestamp - 67, // 58: odpf.optimus.GetReplayStatusResponse.response:type_name -> odpf.optimus.ReplayStatusTreeNode - 67, // 59: odpf.optimus.ReplayStatusTreeNode.dependents:type_name -> odpf.optimus.ReplayStatusTreeNode - 68, // 60: odpf.optimus.ReplayStatusTreeNode.runs:type_name -> odpf.optimus.ReplayStatusRun - 100, // 61: odpf.optimus.ReplayStatusRun.run:type_name -> google.protobuf.Timestamp - 13, // 62: odpf.optimus.RegisterJobEventRequest.event:type_name -> odpf.optimus.JobEvent - 74, // 63: odpf.optimus.ListReplaysResponse.replay_list:type_name -> odpf.optimus.ReplaySpec - 100, // 64: odpf.optimus.ReplaySpec.start_date:type_name -> google.protobuf.Timestamp - 100, // 65: odpf.optimus.ReplaySpec.end_date:type_name -> google.protobuf.Timestamp - 100, // 66: odpf.optimus.ReplaySpec.created_at:type_name -> google.protobuf.Timestamp - 6, // 67: odpf.optimus.RunJobRequest.specifications:type_name -> odpf.optimus.JobSpecification - 99, // 68: odpf.optimus.BackupRequest.config:type_name -> odpf.optimus.BackupRequest.ConfigEntry - 83, // 69: odpf.optimus.ListBackupsResponse.backups:type_name -> odpf.optimus.BackupSpec - 100, // 70: odpf.optimus.BackupSpec.created_at:type_name -> google.protobuf.Timestamp - 90, // 71: odpf.optimus.JobSpecification.Behavior.retry:type_name -> odpf.optimus.JobSpecification.Behavior.Retry - 91, // 72: odpf.optimus.JobSpecification.Behavior.notify:type_name -> odpf.optimus.JobSpecification.Behavior.Notifiers - 102, // 73: odpf.optimus.JobSpecification.Behavior.Retry.delay:type_name -> google.protobuf.Duration - 2, // 74: odpf.optimus.JobSpecification.Behavior.Notifiers.on:type_name -> odpf.optimus.JobEvent.Type - 92, // 75: odpf.optimus.JobSpecification.Behavior.Notifiers.config:type_name -> odpf.optimus.JobSpecification.Behavior.Notifiers.ConfigEntry - 17, // 76: odpf.optimus.RuntimeService.Version:input_type -> odpf.optimus.VersionRequest - 19, // 77: odpf.optimus.RuntimeService.DeployJobSpecification:input_type -> odpf.optimus.DeployJobSpecificationRequest - 33, // 78: odpf.optimus.RuntimeService.CreateJobSpecification:input_type -> odpf.optimus.CreateJobSpecificationRequest - 35, // 79: odpf.optimus.RuntimeService.ReadJobSpecification:input_type -> odpf.optimus.ReadJobSpecificationRequest - 37, // 80: odpf.optimus.RuntimeService.DeleteJobSpecification:input_type -> odpf.optimus.DeleteJobSpecificationRequest - 21, // 81: odpf.optimus.RuntimeService.ListJobSpecification:input_type -> odpf.optimus.ListJobSpecificationRequest - 23, // 82: odpf.optimus.RuntimeService.GetJobTask:input_type -> odpf.optimus.GetJobTaskRequest - 25, // 83: odpf.optimus.RuntimeService.CheckJobSpecification:input_type -> odpf.optimus.CheckJobSpecificationRequest - 27, // 84: odpf.optimus.RuntimeService.CheckJobSpecifications:input_type -> odpf.optimus.CheckJobSpecificationsRequest - 29, // 85: odpf.optimus.RuntimeService.RegisterProject:input_type -> odpf.optimus.RegisterProjectRequest - 31, // 86: odpf.optimus.RuntimeService.RegisterProjectNamespace:input_type -> odpf.optimus.RegisterProjectNamespaceRequest - 39, // 87: odpf.optimus.RuntimeService.RegisterSecret:input_type -> odpf.optimus.RegisterSecretRequest - 41, // 88: odpf.optimus.RuntimeService.ListProjects:input_type -> odpf.optimus.ListProjectsRequest - 43, // 89: odpf.optimus.RuntimeService.ListProjectNamespaces:input_type -> odpf.optimus.ListProjectNamespacesRequest - 45, // 90: odpf.optimus.RuntimeService.RegisterInstance:input_type -> odpf.optimus.RegisterInstanceRequest - 47, // 91: odpf.optimus.RuntimeService.JobStatus:input_type -> odpf.optimus.JobStatusRequest - 70, // 92: odpf.optimus.RuntimeService.RegisterJobEvent:input_type -> odpf.optimus.RegisterJobEventRequest - 49, // 93: odpf.optimus.RuntimeService.GetWindow:input_type -> odpf.optimus.GetWindowRequest - 51, // 94: odpf.optimus.RuntimeService.DeployResourceSpecification:input_type -> odpf.optimus.DeployResourceSpecificationRequest - 53, // 95: odpf.optimus.RuntimeService.ListResourceSpecification:input_type -> odpf.optimus.ListResourceSpecificationRequest - 55, // 96: odpf.optimus.RuntimeService.CreateResource:input_type -> odpf.optimus.CreateResourceRequest - 57, // 97: odpf.optimus.RuntimeService.ReadResource:input_type -> odpf.optimus.ReadResourceRequest - 59, // 98: odpf.optimus.RuntimeService.UpdateResource:input_type -> odpf.optimus.UpdateResourceRequest - 63, // 99: odpf.optimus.RuntimeService.ReplayDryRun:input_type -> odpf.optimus.ReplayDryRunRequest - 61, // 100: odpf.optimus.RuntimeService.Replay:input_type -> odpf.optimus.ReplayRequest - 69, // 101: odpf.optimus.RuntimeService.GetReplayStatus:input_type -> odpf.optimus.GetReplayStatusRequest - 72, // 102: odpf.optimus.RuntimeService.ListReplays:input_type -> odpf.optimus.ListReplaysRequest - 77, // 103: odpf.optimus.RuntimeService.BackupDryRun:input_type -> odpf.optimus.BackupDryRunRequest - 79, // 104: odpf.optimus.RuntimeService.Backup:input_type -> odpf.optimus.BackupRequest - 81, // 105: odpf.optimus.RuntimeService.ListBackups:input_type -> odpf.optimus.ListBackupsRequest - 75, // 106: odpf.optimus.RuntimeService.RunJob:input_type -> odpf.optimus.RunJobRequest - 18, // 107: odpf.optimus.RuntimeService.Version:output_type -> odpf.optimus.VersionResponse - 20, // 108: odpf.optimus.RuntimeService.DeployJobSpecification:output_type -> odpf.optimus.DeployJobSpecificationResponse - 34, // 109: odpf.optimus.RuntimeService.CreateJobSpecification:output_type -> odpf.optimus.CreateJobSpecificationResponse - 36, // 110: odpf.optimus.RuntimeService.ReadJobSpecification:output_type -> odpf.optimus.ReadJobSpecificationResponse - 38, // 111: odpf.optimus.RuntimeService.DeleteJobSpecification:output_type -> odpf.optimus.DeleteJobSpecificationResponse - 22, // 112: odpf.optimus.RuntimeService.ListJobSpecification:output_type -> odpf.optimus.ListJobSpecificationResponse - 24, // 113: odpf.optimus.RuntimeService.GetJobTask:output_type -> odpf.optimus.GetJobTaskResponse - 26, // 114: odpf.optimus.RuntimeService.CheckJobSpecification:output_type -> odpf.optimus.CheckJobSpecificationResponse - 28, // 115: odpf.optimus.RuntimeService.CheckJobSpecifications:output_type -> odpf.optimus.CheckJobSpecificationsResponse - 30, // 116: odpf.optimus.RuntimeService.RegisterProject:output_type -> odpf.optimus.RegisterProjectResponse - 32, // 117: odpf.optimus.RuntimeService.RegisterProjectNamespace:output_type -> odpf.optimus.RegisterProjectNamespaceResponse - 40, // 118: odpf.optimus.RuntimeService.RegisterSecret:output_type -> odpf.optimus.RegisterSecretResponse - 42, // 119: odpf.optimus.RuntimeService.ListProjects:output_type -> odpf.optimus.ListProjectsResponse - 44, // 120: odpf.optimus.RuntimeService.ListProjectNamespaces:output_type -> odpf.optimus.ListProjectNamespacesResponse - 46, // 121: odpf.optimus.RuntimeService.RegisterInstance:output_type -> odpf.optimus.RegisterInstanceResponse - 48, // 122: odpf.optimus.RuntimeService.JobStatus:output_type -> odpf.optimus.JobStatusResponse - 71, // 123: odpf.optimus.RuntimeService.RegisterJobEvent:output_type -> odpf.optimus.RegisterJobEventResponse - 50, // 124: odpf.optimus.RuntimeService.GetWindow:output_type -> odpf.optimus.GetWindowResponse - 52, // 125: odpf.optimus.RuntimeService.DeployResourceSpecification:output_type -> odpf.optimus.DeployResourceSpecificationResponse - 54, // 126: odpf.optimus.RuntimeService.ListResourceSpecification:output_type -> odpf.optimus.ListResourceSpecificationResponse - 56, // 127: odpf.optimus.RuntimeService.CreateResource:output_type -> odpf.optimus.CreateResourceResponse - 58, // 128: odpf.optimus.RuntimeService.ReadResource:output_type -> odpf.optimus.ReadResourceResponse - 60, // 129: odpf.optimus.RuntimeService.UpdateResource:output_type -> odpf.optimus.UpdateResourceResponse - 64, // 130: odpf.optimus.RuntimeService.ReplayDryRun:output_type -> odpf.optimus.ReplayDryRunResponse - 62, // 131: odpf.optimus.RuntimeService.Replay:output_type -> odpf.optimus.ReplayResponse - 66, // 132: odpf.optimus.RuntimeService.GetReplayStatus:output_type -> odpf.optimus.GetReplayStatusResponse - 73, // 133: odpf.optimus.RuntimeService.ListReplays:output_type -> odpf.optimus.ListReplaysResponse - 78, // 134: odpf.optimus.RuntimeService.BackupDryRun:output_type -> odpf.optimus.BackupDryRunResponse - 80, // 135: odpf.optimus.RuntimeService.Backup:output_type -> odpf.optimus.BackupResponse - 82, // 136: odpf.optimus.RuntimeService.ListBackups:output_type -> odpf.optimus.ListBackupsResponse - 76, // 137: odpf.optimus.RuntimeService.RunJob:output_type -> odpf.optimus.RunJobResponse - 107, // [107:138] is the sub-list for method output_type - 76, // [76:107] is the sub-list for method input_type - 76, // [76:76] is the sub-list for extension type_name - 76, // [76:76] is the sub-list for extension extendee - 0, // [0:76] is the sub-list for field type_name + 89, // 0: odpf.optimus.ProjectSpecification.config:type_name -> odpf.optimus.ProjectSpecification.ConfigEntry + 90, // 1: odpf.optimus.ProjectSpecification.secrets:type_name -> odpf.optimus.ProjectSpecification.ProjectSecret + 91, // 2: odpf.optimus.NamespaceSpecification.config:type_name -> odpf.optimus.NamespaceSpecification.ConfigEntry + 10, // 3: odpf.optimus.JobSpecHook.config:type_name -> odpf.optimus.JobConfigItem + 6, // 4: odpf.optimus.JobSpecMetadataResource.request:type_name -> odpf.optimus.JobSpecMetadataResourceConfig + 6, // 5: odpf.optimus.JobSpecMetadataResource.limit:type_name -> odpf.optimus.JobSpecMetadataResourceConfig + 7, // 6: odpf.optimus.JobMetadata.resource:type_name -> odpf.optimus.JobSpecMetadataResource + 10, // 7: odpf.optimus.JobSpecification.config:type_name -> odpf.optimus.JobConfigItem + 11, // 8: odpf.optimus.JobSpecification.dependencies:type_name -> odpf.optimus.JobDependency + 92, // 9: odpf.optimus.JobSpecification.assets:type_name -> odpf.optimus.JobSpecification.AssetsEntry + 5, // 10: odpf.optimus.JobSpecification.hooks:type_name -> odpf.optimus.JobSpecHook + 93, // 11: odpf.optimus.JobSpecification.labels:type_name -> odpf.optimus.JobSpecification.LabelsEntry + 94, // 12: odpf.optimus.JobSpecification.behavior:type_name -> odpf.optimus.JobSpecification.Behavior + 8, // 13: odpf.optimus.JobSpecification.metadata:type_name -> odpf.optimus.JobMetadata + 13, // 14: odpf.optimus.InstanceSpec.data:type_name -> odpf.optimus.InstanceSpecData + 107, // 15: odpf.optimus.InstanceSpec.executed_at:type_name -> google.protobuf.Timestamp + 0, // 16: odpf.optimus.InstanceSpec.type:type_name -> odpf.optimus.InstanceSpec.Type + 1, // 17: odpf.optimus.InstanceSpecData.type:type_name -> odpf.optimus.InstanceSpecData.Type + 98, // 18: odpf.optimus.InstanceContext.envs:type_name -> odpf.optimus.InstanceContext.EnvsEntry + 99, // 19: odpf.optimus.InstanceContext.files:type_name -> odpf.optimus.InstanceContext.FilesEntry + 107, // 20: odpf.optimus.JobStatus.scheduled_at:type_name -> google.protobuf.Timestamp + 2, // 21: odpf.optimus.JobEvent.type:type_name -> odpf.optimus.JobEvent.Type + 108, // 22: odpf.optimus.JobEvent.value:type_name -> google.protobuf.Struct + 109, // 23: odpf.optimus.TaskWindow.size:type_name -> google.protobuf.Duration + 109, // 24: odpf.optimus.TaskWindow.offset:type_name -> google.protobuf.Duration + 108, // 25: odpf.optimus.ResourceSpecification.spec:type_name -> google.protobuf.Struct + 100, // 26: odpf.optimus.ResourceSpecification.assets:type_name -> odpf.optimus.ResourceSpecification.AssetsEntry + 101, // 27: odpf.optimus.ResourceSpecification.labels:type_name -> odpf.optimus.ResourceSpecification.LabelsEntry + 102, // 28: odpf.optimus.JobTask.destination:type_name -> odpf.optimus.JobTask.Destination + 103, // 29: odpf.optimus.JobTask.dependencies:type_name -> odpf.optimus.JobTask.Dependency + 9, // 30: odpf.optimus.DeployJobSpecificationRequest.jobs:type_name -> odpf.optimus.JobSpecification + 9, // 31: odpf.optimus.ListJobSpecificationResponse.jobs:type_name -> odpf.optimus.JobSpecification + 19, // 32: odpf.optimus.GetJobTaskResponse.task:type_name -> odpf.optimus.JobTask + 9, // 33: odpf.optimus.CheckJobSpecificationRequest.job:type_name -> odpf.optimus.JobSpecification + 9, // 34: odpf.optimus.CheckJobSpecificationsRequest.jobs:type_name -> odpf.optimus.JobSpecification + 3, // 35: odpf.optimus.RegisterProjectRequest.project:type_name -> odpf.optimus.ProjectSpecification + 4, // 36: odpf.optimus.RegisterProjectRequest.namespace:type_name -> odpf.optimus.NamespaceSpecification + 4, // 37: odpf.optimus.RegisterProjectNamespaceRequest.namespace:type_name -> odpf.optimus.NamespaceSpecification + 9, // 38: odpf.optimus.CreateJobSpecificationRequest.spec:type_name -> odpf.optimus.JobSpecification + 9, // 39: odpf.optimus.ReadJobSpecificationResponse.spec:type_name -> odpf.optimus.JobSpecification + 3, // 40: odpf.optimus.ListProjectsResponse.projects:type_name -> odpf.optimus.ProjectSpecification + 4, // 41: odpf.optimus.ListProjectNamespacesResponse.namespaces:type_name -> odpf.optimus.NamespaceSpecification + 107, // 42: odpf.optimus.RegisterInstanceRequest.scheduled_at:type_name -> google.protobuf.Timestamp + 0, // 43: odpf.optimus.RegisterInstanceRequest.instance_type:type_name -> odpf.optimus.InstanceSpec.Type + 3, // 44: odpf.optimus.RegisterInstanceResponse.project:type_name -> odpf.optimus.ProjectSpecification + 4, // 45: odpf.optimus.RegisterInstanceResponse.namespace:type_name -> odpf.optimus.NamespaceSpecification + 9, // 46: odpf.optimus.RegisterInstanceResponse.job:type_name -> odpf.optimus.JobSpecification + 12, // 47: odpf.optimus.RegisterInstanceResponse.instance:type_name -> odpf.optimus.InstanceSpec + 14, // 48: odpf.optimus.RegisterInstanceResponse.context:type_name -> odpf.optimus.InstanceContext + 15, // 49: odpf.optimus.JobStatusResponse.statuses:type_name -> odpf.optimus.JobStatus + 107, // 50: odpf.optimus.GetWindowRequest.scheduled_at:type_name -> google.protobuf.Timestamp + 107, // 51: odpf.optimus.GetWindowResponse.start:type_name -> google.protobuf.Timestamp + 107, // 52: odpf.optimus.GetWindowResponse.end:type_name -> google.protobuf.Timestamp + 18, // 53: odpf.optimus.DeployResourceSpecificationRequest.resources:type_name -> odpf.optimus.ResourceSpecification + 18, // 54: odpf.optimus.ListResourceSpecificationResponse.resources:type_name -> odpf.optimus.ResourceSpecification + 18, // 55: odpf.optimus.CreateResourceRequest.resource:type_name -> odpf.optimus.ResourceSpecification + 18, // 56: odpf.optimus.ReadResourceResponse.resource:type_name -> odpf.optimus.ResourceSpecification + 18, // 57: odpf.optimus.UpdateResourceRequest.resource:type_name -> odpf.optimus.ResourceSpecification + 68, // 58: odpf.optimus.ReplayDryRunResponse.response:type_name -> odpf.optimus.ReplayExecutionTreeNode + 68, // 59: odpf.optimus.ReplayDryRunResponse.execution_tree:type_name -> odpf.optimus.ReplayExecutionTreeNode + 68, // 60: odpf.optimus.ReplayExecutionTreeNode.dependents:type_name -> odpf.optimus.ReplayExecutionTreeNode + 107, // 61: odpf.optimus.ReplayExecutionTreeNode.runs:type_name -> google.protobuf.Timestamp + 70, // 62: odpf.optimus.GetReplayStatusResponse.response:type_name -> odpf.optimus.ReplayStatusTreeNode + 70, // 63: odpf.optimus.ReplayStatusTreeNode.dependents:type_name -> odpf.optimus.ReplayStatusTreeNode + 71, // 64: odpf.optimus.ReplayStatusTreeNode.runs:type_name -> odpf.optimus.ReplayStatusRun + 107, // 65: odpf.optimus.ReplayStatusRun.run:type_name -> google.protobuf.Timestamp + 16, // 66: odpf.optimus.RegisterJobEventRequest.event:type_name -> odpf.optimus.JobEvent + 77, // 67: odpf.optimus.ListReplaysResponse.replay_list:type_name -> odpf.optimus.ReplaySpec + 107, // 68: odpf.optimus.ReplaySpec.start_date:type_name -> google.protobuf.Timestamp + 107, // 69: odpf.optimus.ReplaySpec.end_date:type_name -> google.protobuf.Timestamp + 107, // 70: odpf.optimus.ReplaySpec.created_at:type_name -> google.protobuf.Timestamp + 104, // 71: odpf.optimus.ReplaySpec.config:type_name -> odpf.optimus.ReplaySpec.ConfigEntry + 9, // 72: odpf.optimus.RunJobRequest.specifications:type_name -> odpf.optimus.JobSpecification + 105, // 73: odpf.optimus.CreateBackupRequest.config:type_name -> odpf.optimus.CreateBackupRequest.ConfigEntry + 86, // 74: odpf.optimus.ListBackupsResponse.backups:type_name -> odpf.optimus.BackupSpec + 107, // 75: odpf.optimus.BackupSpec.created_at:type_name -> google.protobuf.Timestamp + 106, // 76: odpf.optimus.BackupSpec.config:type_name -> odpf.optimus.BackupSpec.ConfigEntry + 86, // 77: odpf.optimus.GetBackupResponse.spec:type_name -> odpf.optimus.BackupSpec + 95, // 78: odpf.optimus.JobSpecification.Behavior.retry:type_name -> odpf.optimus.JobSpecification.Behavior.Retry + 96, // 79: odpf.optimus.JobSpecification.Behavior.notify:type_name -> odpf.optimus.JobSpecification.Behavior.Notifiers + 109, // 80: odpf.optimus.JobSpecification.Behavior.Retry.delay:type_name -> google.protobuf.Duration + 2, // 81: odpf.optimus.JobSpecification.Behavior.Notifiers.on:type_name -> odpf.optimus.JobEvent.Type + 97, // 82: odpf.optimus.JobSpecification.Behavior.Notifiers.config:type_name -> odpf.optimus.JobSpecification.Behavior.Notifiers.ConfigEntry + 20, // 83: odpf.optimus.RuntimeService.Version:input_type -> odpf.optimus.VersionRequest + 22, // 84: odpf.optimus.RuntimeService.DeployJobSpecification:input_type -> odpf.optimus.DeployJobSpecificationRequest + 36, // 85: odpf.optimus.RuntimeService.CreateJobSpecification:input_type -> odpf.optimus.CreateJobSpecificationRequest + 38, // 86: odpf.optimus.RuntimeService.ReadJobSpecification:input_type -> odpf.optimus.ReadJobSpecificationRequest + 40, // 87: odpf.optimus.RuntimeService.DeleteJobSpecification:input_type -> odpf.optimus.DeleteJobSpecificationRequest + 24, // 88: odpf.optimus.RuntimeService.ListJobSpecification:input_type -> odpf.optimus.ListJobSpecificationRequest + 26, // 89: odpf.optimus.RuntimeService.GetJobTask:input_type -> odpf.optimus.GetJobTaskRequest + 28, // 90: odpf.optimus.RuntimeService.CheckJobSpecification:input_type -> odpf.optimus.CheckJobSpecificationRequest + 30, // 91: odpf.optimus.RuntimeService.CheckJobSpecifications:input_type -> odpf.optimus.CheckJobSpecificationsRequest + 32, // 92: odpf.optimus.RuntimeService.RegisterProject:input_type -> odpf.optimus.RegisterProjectRequest + 34, // 93: odpf.optimus.RuntimeService.RegisterProjectNamespace:input_type -> odpf.optimus.RegisterProjectNamespaceRequest + 42, // 94: odpf.optimus.RuntimeService.RegisterSecret:input_type -> odpf.optimus.RegisterSecretRequest + 44, // 95: odpf.optimus.RuntimeService.ListProjects:input_type -> odpf.optimus.ListProjectsRequest + 46, // 96: odpf.optimus.RuntimeService.ListProjectNamespaces:input_type -> odpf.optimus.ListProjectNamespacesRequest + 48, // 97: odpf.optimus.RuntimeService.RegisterInstance:input_type -> odpf.optimus.RegisterInstanceRequest + 50, // 98: odpf.optimus.RuntimeService.JobStatus:input_type -> odpf.optimus.JobStatusRequest + 73, // 99: odpf.optimus.RuntimeService.RegisterJobEvent:input_type -> odpf.optimus.RegisterJobEventRequest + 52, // 100: odpf.optimus.RuntimeService.GetWindow:input_type -> odpf.optimus.GetWindowRequest + 54, // 101: odpf.optimus.RuntimeService.DeployResourceSpecification:input_type -> odpf.optimus.DeployResourceSpecificationRequest + 56, // 102: odpf.optimus.RuntimeService.ListResourceSpecification:input_type -> odpf.optimus.ListResourceSpecificationRequest + 58, // 103: odpf.optimus.RuntimeService.CreateResource:input_type -> odpf.optimus.CreateResourceRequest + 60, // 104: odpf.optimus.RuntimeService.ReadResource:input_type -> odpf.optimus.ReadResourceRequest + 62, // 105: odpf.optimus.RuntimeService.UpdateResource:input_type -> odpf.optimus.UpdateResourceRequest + 66, // 106: odpf.optimus.RuntimeService.ReplayDryRun:input_type -> odpf.optimus.ReplayDryRunRequest + 64, // 107: odpf.optimus.RuntimeService.Replay:input_type -> odpf.optimus.ReplayRequest + 72, // 108: odpf.optimus.RuntimeService.GetReplayStatus:input_type -> odpf.optimus.GetReplayStatusRequest + 75, // 109: odpf.optimus.RuntimeService.ListReplays:input_type -> odpf.optimus.ListReplaysRequest + 80, // 110: odpf.optimus.RuntimeService.BackupDryRun:input_type -> odpf.optimus.BackupDryRunRequest + 82, // 111: odpf.optimus.RuntimeService.CreateBackup:input_type -> odpf.optimus.CreateBackupRequest + 84, // 112: odpf.optimus.RuntimeService.ListBackups:input_type -> odpf.optimus.ListBackupsRequest + 87, // 113: odpf.optimus.RuntimeService.GetBackup:input_type -> odpf.optimus.GetBackupRequest + 78, // 114: odpf.optimus.RuntimeService.RunJob:input_type -> odpf.optimus.RunJobRequest + 21, // 115: odpf.optimus.RuntimeService.Version:output_type -> odpf.optimus.VersionResponse + 23, // 116: odpf.optimus.RuntimeService.DeployJobSpecification:output_type -> odpf.optimus.DeployJobSpecificationResponse + 37, // 117: odpf.optimus.RuntimeService.CreateJobSpecification:output_type -> odpf.optimus.CreateJobSpecificationResponse + 39, // 118: odpf.optimus.RuntimeService.ReadJobSpecification:output_type -> odpf.optimus.ReadJobSpecificationResponse + 41, // 119: odpf.optimus.RuntimeService.DeleteJobSpecification:output_type -> odpf.optimus.DeleteJobSpecificationResponse + 25, // 120: odpf.optimus.RuntimeService.ListJobSpecification:output_type -> odpf.optimus.ListJobSpecificationResponse + 27, // 121: odpf.optimus.RuntimeService.GetJobTask:output_type -> odpf.optimus.GetJobTaskResponse + 29, // 122: odpf.optimus.RuntimeService.CheckJobSpecification:output_type -> odpf.optimus.CheckJobSpecificationResponse + 31, // 123: odpf.optimus.RuntimeService.CheckJobSpecifications:output_type -> odpf.optimus.CheckJobSpecificationsResponse + 33, // 124: odpf.optimus.RuntimeService.RegisterProject:output_type -> odpf.optimus.RegisterProjectResponse + 35, // 125: odpf.optimus.RuntimeService.RegisterProjectNamespace:output_type -> odpf.optimus.RegisterProjectNamespaceResponse + 43, // 126: odpf.optimus.RuntimeService.RegisterSecret:output_type -> odpf.optimus.RegisterSecretResponse + 45, // 127: odpf.optimus.RuntimeService.ListProjects:output_type -> odpf.optimus.ListProjectsResponse + 47, // 128: odpf.optimus.RuntimeService.ListProjectNamespaces:output_type -> odpf.optimus.ListProjectNamespacesResponse + 49, // 129: odpf.optimus.RuntimeService.RegisterInstance:output_type -> odpf.optimus.RegisterInstanceResponse + 51, // 130: odpf.optimus.RuntimeService.JobStatus:output_type -> odpf.optimus.JobStatusResponse + 74, // 131: odpf.optimus.RuntimeService.RegisterJobEvent:output_type -> odpf.optimus.RegisterJobEventResponse + 53, // 132: odpf.optimus.RuntimeService.GetWindow:output_type -> odpf.optimus.GetWindowResponse + 55, // 133: odpf.optimus.RuntimeService.DeployResourceSpecification:output_type -> odpf.optimus.DeployResourceSpecificationResponse + 57, // 134: odpf.optimus.RuntimeService.ListResourceSpecification:output_type -> odpf.optimus.ListResourceSpecificationResponse + 59, // 135: odpf.optimus.RuntimeService.CreateResource:output_type -> odpf.optimus.CreateResourceResponse + 61, // 136: odpf.optimus.RuntimeService.ReadResource:output_type -> odpf.optimus.ReadResourceResponse + 63, // 137: odpf.optimus.RuntimeService.UpdateResource:output_type -> odpf.optimus.UpdateResourceResponse + 67, // 138: odpf.optimus.RuntimeService.ReplayDryRun:output_type -> odpf.optimus.ReplayDryRunResponse + 65, // 139: odpf.optimus.RuntimeService.Replay:output_type -> odpf.optimus.ReplayResponse + 69, // 140: odpf.optimus.RuntimeService.GetReplayStatus:output_type -> odpf.optimus.GetReplayStatusResponse + 76, // 141: odpf.optimus.RuntimeService.ListReplays:output_type -> odpf.optimus.ListReplaysResponse + 81, // 142: odpf.optimus.RuntimeService.BackupDryRun:output_type -> odpf.optimus.BackupDryRunResponse + 83, // 143: odpf.optimus.RuntimeService.CreateBackup:output_type -> odpf.optimus.CreateBackupResponse + 85, // 144: odpf.optimus.RuntimeService.ListBackups:output_type -> odpf.optimus.ListBackupsResponse + 88, // 145: odpf.optimus.RuntimeService.GetBackup:output_type -> odpf.optimus.GetBackupResponse + 79, // 146: odpf.optimus.RuntimeService.RunJob:output_type -> odpf.optimus.RunJobResponse + 115, // [115:147] is the sub-list for method output_type + 83, // [83:115] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name } func init() { file_odpf_optimus_runtime_service_proto_init() } @@ -7079,7 +7468,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobSpecification); i { + switch v := v.(*JobSpecMetadataResourceConfig); i { case 0: return &v.state case 1: @@ -7091,7 +7480,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobConfigItem); i { + switch v := v.(*JobSpecMetadataResource); i { case 0: return &v.state case 1: @@ -7103,7 +7492,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobDependency); i { + switch v := v.(*JobMetadata); i { case 0: return &v.state case 1: @@ -7115,7 +7504,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceSpec); i { + switch v := v.(*JobSpecification); i { case 0: return &v.state case 1: @@ -7127,7 +7516,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceSpecData); i { + switch v := v.(*JobConfigItem); i { case 0: return &v.state case 1: @@ -7139,7 +7528,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InstanceContext); i { + switch v := v.(*JobDependency); i { case 0: return &v.state case 1: @@ -7151,7 +7540,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobStatus); i { + switch v := v.(*InstanceSpec); i { case 0: return &v.state case 1: @@ -7163,7 +7552,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobEvent); i { + switch v := v.(*InstanceSpecData); i { case 0: return &v.state case 1: @@ -7175,7 +7564,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskWindow); i { + switch v := v.(*InstanceContext); i { case 0: return &v.state case 1: @@ -7187,7 +7576,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceSpecification); i { + switch v := v.(*JobStatus); i { case 0: return &v.state case 1: @@ -7199,7 +7588,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobTask); i { + switch v := v.(*JobEvent); i { case 0: return &v.state case 1: @@ -7211,7 +7600,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionRequest); i { + switch v := v.(*TaskWindow); i { case 0: return &v.state case 1: @@ -7223,7 +7612,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionResponse); i { + switch v := v.(*ResourceSpecification); i { case 0: return &v.state case 1: @@ -7235,7 +7624,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployJobSpecificationRequest); i { + switch v := v.(*JobTask); i { case 0: return &v.state case 1: @@ -7247,7 +7636,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployJobSpecificationResponse); i { + switch v := v.(*VersionRequest); i { case 0: return &v.state case 1: @@ -7259,7 +7648,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobSpecificationRequest); i { + switch v := v.(*VersionResponse); i { case 0: return &v.state case 1: @@ -7271,7 +7660,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobSpecificationResponse); i { + switch v := v.(*DeployJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7283,7 +7672,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobTaskRequest); i { + switch v := v.(*DeployJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7295,7 +7684,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobTaskResponse); i { + switch v := v.(*ListJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7307,7 +7696,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckJobSpecificationRequest); i { + switch v := v.(*ListJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7319,7 +7708,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckJobSpecificationResponse); i { + switch v := v.(*GetJobTaskRequest); i { case 0: return &v.state case 1: @@ -7331,7 +7720,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckJobSpecificationsRequest); i { + switch v := v.(*GetJobTaskResponse); i { case 0: return &v.state case 1: @@ -7343,7 +7732,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckJobSpecificationsResponse); i { + switch v := v.(*CheckJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7355,7 +7744,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterProjectRequest); i { + switch v := v.(*CheckJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7367,7 +7756,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterProjectResponse); i { + switch v := v.(*CheckJobSpecificationsRequest); i { case 0: return &v.state case 1: @@ -7379,7 +7768,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterProjectNamespaceRequest); i { + switch v := v.(*CheckJobSpecificationsResponse); i { case 0: return &v.state case 1: @@ -7391,7 +7780,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterProjectNamespaceResponse); i { + switch v := v.(*RegisterProjectRequest); i { case 0: return &v.state case 1: @@ -7403,7 +7792,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateJobSpecificationRequest); i { + switch v := v.(*RegisterProjectResponse); i { case 0: return &v.state case 1: @@ -7415,7 +7804,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateJobSpecificationResponse); i { + switch v := v.(*RegisterProjectNamespaceRequest); i { case 0: return &v.state case 1: @@ -7427,7 +7816,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadJobSpecificationRequest); i { + switch v := v.(*RegisterProjectNamespaceResponse); i { case 0: return &v.state case 1: @@ -7439,7 +7828,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadJobSpecificationResponse); i { + switch v := v.(*CreateJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7451,7 +7840,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteJobSpecificationRequest); i { + switch v := v.(*CreateJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7463,7 +7852,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteJobSpecificationResponse); i { + switch v := v.(*ReadJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7475,7 +7864,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterSecretRequest); i { + switch v := v.(*ReadJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7487,7 +7876,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterSecretResponse); i { + switch v := v.(*DeleteJobSpecificationRequest); i { case 0: return &v.state case 1: @@ -7499,7 +7888,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectsRequest); i { + switch v := v.(*DeleteJobSpecificationResponse); i { case 0: return &v.state case 1: @@ -7511,7 +7900,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectsResponse); i { + switch v := v.(*RegisterSecretRequest); i { case 0: return &v.state case 1: @@ -7523,7 +7912,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectNamespacesRequest); i { + switch v := v.(*RegisterSecretResponse); i { case 0: return &v.state case 1: @@ -7535,7 +7924,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectNamespacesResponse); i { + switch v := v.(*ListProjectsRequest); i { case 0: return &v.state case 1: @@ -7547,7 +7936,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterInstanceRequest); i { + switch v := v.(*ListProjectsResponse); i { case 0: return &v.state case 1: @@ -7559,7 +7948,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterInstanceResponse); i { + switch v := v.(*ListProjectNamespacesRequest); i { case 0: return &v.state case 1: @@ -7571,7 +7960,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobStatusRequest); i { + switch v := v.(*ListProjectNamespacesResponse); i { case 0: return &v.state case 1: @@ -7583,7 +7972,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JobStatusResponse); i { + switch v := v.(*RegisterInstanceRequest); i { case 0: return &v.state case 1: @@ -7595,7 +7984,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWindowRequest); i { + switch v := v.(*RegisterInstanceResponse); i { case 0: return &v.state case 1: @@ -7607,7 +7996,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWindowResponse); i { + switch v := v.(*JobStatusRequest); i { case 0: return &v.state case 1: @@ -7619,7 +8008,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployResourceSpecificationRequest); i { + switch v := v.(*JobStatusResponse); i { case 0: return &v.state case 1: @@ -7631,7 +8020,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployResourceSpecificationResponse); i { + switch v := v.(*GetWindowRequest); i { case 0: return &v.state case 1: @@ -7643,7 +8032,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListResourceSpecificationRequest); i { + switch v := v.(*GetWindowResponse); i { case 0: return &v.state case 1: @@ -7655,7 +8044,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListResourceSpecificationResponse); i { + switch v := v.(*DeployResourceSpecificationRequest); i { case 0: return &v.state case 1: @@ -7667,7 +8056,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateResourceRequest); i { + switch v := v.(*DeployResourceSpecificationResponse); i { case 0: return &v.state case 1: @@ -7679,7 +8068,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateResourceResponse); i { + switch v := v.(*ListResourceSpecificationRequest); i { case 0: return &v.state case 1: @@ -7691,7 +8080,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResourceRequest); i { + switch v := v.(*ListResourceSpecificationResponse); i { case 0: return &v.state case 1: @@ -7703,7 +8092,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResourceResponse); i { + switch v := v.(*CreateResourceRequest); i { case 0: return &v.state case 1: @@ -7715,7 +8104,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateResourceRequest); i { + switch v := v.(*CreateResourceResponse); i { case 0: return &v.state case 1: @@ -7727,7 +8116,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateResourceResponse); i { + switch v := v.(*ReadResourceRequest); i { case 0: return &v.state case 1: @@ -7739,7 +8128,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayRequest); i { + switch v := v.(*ReadResourceResponse); i { case 0: return &v.state case 1: @@ -7751,7 +8140,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayResponse); i { + switch v := v.(*UpdateResourceRequest); i { case 0: return &v.state case 1: @@ -7763,7 +8152,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayDryRunRequest); i { + switch v := v.(*UpdateResourceResponse); i { case 0: return &v.state case 1: @@ -7775,7 +8164,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayDryRunResponse); i { + switch v := v.(*ReplayRequest); i { case 0: return &v.state case 1: @@ -7787,7 +8176,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayExecutionTreeNode); i { + switch v := v.(*ReplayResponse); i { case 0: return &v.state case 1: @@ -7799,7 +8188,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReplayStatusResponse); i { + switch v := v.(*ReplayDryRunRequest); i { case 0: return &v.state case 1: @@ -7811,7 +8200,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayStatusTreeNode); i { + switch v := v.(*ReplayDryRunResponse); i { case 0: return &v.state case 1: @@ -7823,7 +8212,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayStatusRun); i { + switch v := v.(*ReplayExecutionTreeNode); i { case 0: return &v.state case 1: @@ -7835,7 +8224,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReplayStatusRequest); i { + switch v := v.(*GetReplayStatusResponse); i { case 0: return &v.state case 1: @@ -7847,7 +8236,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterJobEventRequest); i { + switch v := v.(*ReplayStatusTreeNode); i { case 0: return &v.state case 1: @@ -7859,7 +8248,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterJobEventResponse); i { + switch v := v.(*ReplayStatusRun); i { case 0: return &v.state case 1: @@ -7871,7 +8260,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListReplaysRequest); i { + switch v := v.(*GetReplayStatusRequest); i { case 0: return &v.state case 1: @@ -7883,7 +8272,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListReplaysResponse); i { + switch v := v.(*RegisterJobEventRequest); i { case 0: return &v.state case 1: @@ -7895,7 +8284,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaySpec); i { + switch v := v.(*RegisterJobEventResponse); i { case 0: return &v.state case 1: @@ -7907,7 +8296,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunJobRequest); i { + switch v := v.(*ListReplaysRequest); i { case 0: return &v.state case 1: @@ -7919,7 +8308,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunJobResponse); i { + switch v := v.(*ListReplaysResponse); i { case 0: return &v.state case 1: @@ -7931,7 +8320,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupDryRunRequest); i { + switch v := v.(*ReplaySpec); i { case 0: return &v.state case 1: @@ -7943,7 +8332,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupDryRunResponse); i { + switch v := v.(*RunJobRequest); i { case 0: return &v.state case 1: @@ -7955,7 +8344,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupRequest); i { + switch v := v.(*RunJobResponse); i { case 0: return &v.state case 1: @@ -7967,7 +8356,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupResponse); i { + switch v := v.(*BackupDryRunRequest); i { case 0: return &v.state case 1: @@ -7979,7 +8368,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBackupsRequest); i { + switch v := v.(*BackupDryRunResponse); i { case 0: return &v.state case 1: @@ -7991,7 +8380,7 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBackupsResponse); i { + switch v := v.(*CreateBackupRequest); i { case 0: return &v.state case 1: @@ -8003,7 +8392,19 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupSpec); i { + switch v := v.(*CreateBackupResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_optimus_runtime_service_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBackupsRequest); i { case 0: return &v.state case 1: @@ -8015,6 +8416,54 @@ func file_odpf_optimus_runtime_service_proto_init() { } } file_odpf_optimus_runtime_service_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListBackupsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_optimus_runtime_service_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_optimus_runtime_service_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBackupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_optimus_runtime_service_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBackupResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_optimus_runtime_service_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectSpecification_ProjectSecret); i { case 0: return &v.state @@ -8026,7 +8475,7 @@ func file_odpf_optimus_runtime_service_proto_init() { return nil } } - file_odpf_optimus_runtime_service_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_odpf_optimus_runtime_service_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobSpecification_Behavior); i { case 0: return &v.state @@ -8038,7 +8487,7 @@ func file_odpf_optimus_runtime_service_proto_init() { return nil } } - file_odpf_optimus_runtime_service_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_odpf_optimus_runtime_service_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobSpecification_Behavior_Retry); i { case 0: return &v.state @@ -8050,7 +8499,7 @@ func file_odpf_optimus_runtime_service_proto_init() { return nil } } - file_odpf_optimus_runtime_service_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_odpf_optimus_runtime_service_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobSpecification_Behavior_Notifiers); i { case 0: return &v.state @@ -8062,7 +8511,7 @@ func file_odpf_optimus_runtime_service_proto_init() { return nil } } - file_odpf_optimus_runtime_service_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_odpf_optimus_runtime_service_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobTask_Destination); i { case 0: return &v.state @@ -8074,7 +8523,7 @@ func file_odpf_optimus_runtime_service_proto_init() { return nil } } - file_odpf_optimus_runtime_service_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_odpf_optimus_runtime_service_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JobTask_Dependency); i { case 0: return &v.state @@ -8093,7 +8542,7 @@ func file_odpf_optimus_runtime_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_odpf_optimus_runtime_service_proto_rawDesc, NumEnums: 3, - NumMessages: 97, + NumMessages: 104, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/odpf/optimus/runtime_service.pb.gw.go b/api/proto/odpf/optimus/runtime_service.pb.gw.go index 0071befbe3..ba282d0a84 100644 --- a/api/proto/odpf/optimus/runtime_service.pb.gw.go +++ b/api/proto/odpf/optimus/runtime_service.pb.gw.go @@ -1941,8 +1941,8 @@ func local_request_RuntimeService_BackupDryRun_0(ctx context.Context, marshaler } -func request_RuntimeService_Backup_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BackupRequest +func request_RuntimeService_CreateBackup_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateBackupRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1990,13 +1990,13 @@ func request_RuntimeService_Backup_0(ctx context.Context, marshaler runtime.Mars return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "datastore_name", err) } - msg, err := client.Backup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CreateBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_RuntimeService_Backup_0(ctx context.Context, marshaler runtime.Marshaler, server RuntimeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BackupRequest +func local_request_RuntimeService_CreateBackup_0(ctx context.Context, marshaler runtime.Marshaler, server RuntimeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateBackupRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -2044,7 +2044,7 @@ func local_request_RuntimeService_Backup_0(ctx context.Context, marshaler runtim return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "datastore_name", err) } - msg, err := server.Backup(ctx, &protoReq) + msg, err := server.CreateBackup(ctx, &protoReq) return msg, metadata, err } @@ -2141,6 +2141,118 @@ func local_request_RuntimeService_ListBackups_0(ctx context.Context, marshaler r } +func request_RuntimeService_GetBackup_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBackupRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project_name") + } + + protoReq.ProjectName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project_name", err) + } + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["datastore_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "datastore_name") + } + + protoReq.DatastoreName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "datastore_name", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RuntimeService_GetBackup_0(ctx context.Context, marshaler runtime.Marshaler, server RuntimeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBackupRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project_name") + } + + protoReq.ProjectName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project_name", err) + } + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["datastore_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "datastore_name") + } + + protoReq.DatastoreName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "datastore_name", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetBackup(ctx, &protoReq) + return msg, metadata, err + +} + func request_RuntimeService_RunJob_0(ctx context.Context, marshaler runtime.Marshaler, client RuntimeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq RunJobRequest var metadata runtime.ServerMetadata @@ -2810,18 +2922,18 @@ func RegisterRuntimeServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) - mux.Handle("POST", pattern_RuntimeService_Backup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_RuntimeService_CreateBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.optimus.RuntimeService/Backup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.optimus.RuntimeService/CreateBackup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_RuntimeService_Backup_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_RuntimeService_CreateBackup_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2829,7 +2941,7 @@ func RegisterRuntimeServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_RuntimeService_Backup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_RuntimeService_CreateBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2856,6 +2968,29 @@ func RegisterRuntimeServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_RuntimeService_GetBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/odpf.optimus.RuntimeService/GetBackup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RuntimeService_GetBackup_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_GetBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_RuntimeService_RunJob_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3420,23 +3555,23 @@ func RegisterRuntimeServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) - mux.Handle("POST", pattern_RuntimeService_Backup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_RuntimeService_CreateBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.optimus.RuntimeService/Backup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.optimus.RuntimeService/CreateBackup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_RuntimeService_Backup_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_RuntimeService_CreateBackup_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_RuntimeService_Backup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_RuntimeService_CreateBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3460,6 +3595,26 @@ func RegisterRuntimeServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_RuntimeService_GetBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/odpf.optimus.RuntimeService/GetBackup", runtime.WithHTTPPathPattern("/v1/project/{project_name}/namespace/{namespace}/datastore/{datastore_name}/backup/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RuntimeService_GetBackup_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RuntimeService_GetBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_RuntimeService_RunJob_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3534,10 +3689,12 @@ var ( pattern_RuntimeService_BackupDryRun_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "project", "project_name", "namespace", "datastore", "datastore_name", "backup-dryrun"}, "")) - pattern_RuntimeService_Backup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "project", "project_name", "namespace", "datastore", "datastore_name", "backup"}, "")) + pattern_RuntimeService_CreateBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "project", "project_name", "namespace", "datastore", "datastore_name", "backup"}, "")) pattern_RuntimeService_ListBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "project", "project_name", "namespace", "datastore", "datastore_name", "backup"}, "")) + pattern_RuntimeService_GetBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"v1", "project", "project_name", "namespace", "datastore", "datastore_name", "backup", "id"}, "")) + pattern_RuntimeService_RunJob_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "project", "project_name", "namespace", "run"}, "")) ) @@ -3592,9 +3749,11 @@ var ( forward_RuntimeService_BackupDryRun_0 = runtime.ForwardResponseMessage - forward_RuntimeService_Backup_0 = runtime.ForwardResponseMessage + forward_RuntimeService_CreateBackup_0 = runtime.ForwardResponseMessage forward_RuntimeService_ListBackups_0 = runtime.ForwardResponseMessage + forward_RuntimeService_GetBackup_0 = runtime.ForwardResponseMessage + forward_RuntimeService_RunJob_0 = runtime.ForwardResponseMessage ) diff --git a/api/proto/odpf/optimus/runtime_service_grpc.pb.go b/api/proto/odpf/optimus/runtime_service_grpc.pb.go index 67dcf6ec66..ae5191c980 100644 --- a/api/proto/odpf/optimus/runtime_service_grpc.pb.go +++ b/api/proto/odpf/optimus/runtime_service_grpc.pb.go @@ -77,8 +77,9 @@ type RuntimeServiceClient interface { GetReplayStatus(ctx context.Context, in *GetReplayStatusRequest, opts ...grpc.CallOption) (*GetReplayStatusResponse, error) ListReplays(ctx context.Context, in *ListReplaysRequest, opts ...grpc.CallOption) (*ListReplaysResponse, error) BackupDryRun(ctx context.Context, in *BackupDryRunRequest, opts ...grpc.CallOption) (*BackupDryRunResponse, error) - Backup(ctx context.Context, in *BackupRequest, opts ...grpc.CallOption) (*BackupResponse, error) + CreateBackup(ctx context.Context, in *CreateBackupRequest, opts ...grpc.CallOption) (*CreateBackupResponse, error) ListBackups(ctx context.Context, in *ListBackupsRequest, opts ...grpc.CallOption) (*ListBackupsResponse, error) + GetBackup(ctx context.Context, in *GetBackupRequest, opts ...grpc.CallOption) (*GetBackupResponse, error) // RunJob creates a job run and executes all included tasks/hooks instantly // this doesn't necessarily deploy the job in db first RunJob(ctx context.Context, in *RunJobRequest, opts ...grpc.CallOption) (*RunJobResponse, error) @@ -413,9 +414,9 @@ func (c *runtimeServiceClient) BackupDryRun(ctx context.Context, in *BackupDryRu return out, nil } -func (c *runtimeServiceClient) Backup(ctx context.Context, in *BackupRequest, opts ...grpc.CallOption) (*BackupResponse, error) { - out := new(BackupResponse) - err := c.cc.Invoke(ctx, "/odpf.optimus.RuntimeService/Backup", in, out, opts...) +func (c *runtimeServiceClient) CreateBackup(ctx context.Context, in *CreateBackupRequest, opts ...grpc.CallOption) (*CreateBackupResponse, error) { + out := new(CreateBackupResponse) + err := c.cc.Invoke(ctx, "/odpf.optimus.RuntimeService/CreateBackup", in, out, opts...) if err != nil { return nil, err } @@ -431,6 +432,15 @@ func (c *runtimeServiceClient) ListBackups(ctx context.Context, in *ListBackupsR return out, nil } +func (c *runtimeServiceClient) GetBackup(ctx context.Context, in *GetBackupRequest, opts ...grpc.CallOption) (*GetBackupResponse, error) { + out := new(GetBackupResponse) + err := c.cc.Invoke(ctx, "/odpf.optimus.RuntimeService/GetBackup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runtimeServiceClient) RunJob(ctx context.Context, in *RunJobRequest, opts ...grpc.CallOption) (*RunJobResponse, error) { out := new(RunJobResponse) err := c.cc.Invoke(ctx, "/odpf.optimus.RuntimeService/RunJob", in, out, opts...) @@ -503,8 +513,9 @@ type RuntimeServiceServer interface { GetReplayStatus(context.Context, *GetReplayStatusRequest) (*GetReplayStatusResponse, error) ListReplays(context.Context, *ListReplaysRequest) (*ListReplaysResponse, error) BackupDryRun(context.Context, *BackupDryRunRequest) (*BackupDryRunResponse, error) - Backup(context.Context, *BackupRequest) (*BackupResponse, error) + CreateBackup(context.Context, *CreateBackupRequest) (*CreateBackupResponse, error) ListBackups(context.Context, *ListBackupsRequest) (*ListBackupsResponse, error) + GetBackup(context.Context, *GetBackupRequest) (*GetBackupResponse, error) // RunJob creates a job run and executes all included tasks/hooks instantly // this doesn't necessarily deploy the job in db first RunJob(context.Context, *RunJobRequest) (*RunJobResponse, error) @@ -599,12 +610,15 @@ func (UnimplementedRuntimeServiceServer) ListReplays(context.Context, *ListRepla func (UnimplementedRuntimeServiceServer) BackupDryRun(context.Context, *BackupDryRunRequest) (*BackupDryRunResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BackupDryRun not implemented") } -func (UnimplementedRuntimeServiceServer) Backup(context.Context, *BackupRequest) (*BackupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Backup not implemented") +func (UnimplementedRuntimeServiceServer) CreateBackup(context.Context, *CreateBackupRequest) (*CreateBackupResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateBackup not implemented") } func (UnimplementedRuntimeServiceServer) ListBackups(context.Context, *ListBackupsRequest) (*ListBackupsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListBackups not implemented") } +func (UnimplementedRuntimeServiceServer) GetBackup(context.Context, *GetBackupRequest) (*GetBackupResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetBackup not implemented") +} func (UnimplementedRuntimeServiceServer) RunJob(context.Context, *RunJobRequest) (*RunJobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RunJob not implemented") } @@ -1134,20 +1148,20 @@ func _RuntimeService_BackupDryRun_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _RuntimeService_Backup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BackupRequest) +func _RuntimeService_CreateBackup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateBackupRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(RuntimeServiceServer).Backup(ctx, in) + return srv.(RuntimeServiceServer).CreateBackup(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/odpf.optimus.RuntimeService/Backup", + FullMethod: "/odpf.optimus.RuntimeService/CreateBackup", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RuntimeServiceServer).Backup(ctx, req.(*BackupRequest)) + return srv.(RuntimeServiceServer).CreateBackup(ctx, req.(*CreateBackupRequest)) } return interceptor(ctx, in, info, handler) } @@ -1170,6 +1184,24 @@ func _RuntimeService_ListBackups_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _RuntimeService_GetBackup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBackupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).GetBackup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/odpf.optimus.RuntimeService/GetBackup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).GetBackup(ctx, req.(*GetBackupRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _RuntimeService_RunJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RunJobRequest) if err := dec(in); err != nil { @@ -1296,13 +1328,17 @@ var RuntimeService_ServiceDesc = grpc.ServiceDesc{ Handler: _RuntimeService_BackupDryRun_Handler, }, { - MethodName: "Backup", - Handler: _RuntimeService_Backup_Handler, + MethodName: "CreateBackup", + Handler: _RuntimeService_CreateBackup_Handler, }, { MethodName: "ListBackups", Handler: _RuntimeService_ListBackups_Handler, }, + { + MethodName: "GetBackup", + Handler: _RuntimeService_GetBackup_Handler, + }, { MethodName: "RunJob", Handler: _RuntimeService_RunJob_Handler, diff --git a/api/third_party/openapi/odpf/optimus/runtime_service.swagger.json b/api/third_party/openapi/odpf/optimus/runtime_service.swagger.json index 28f5462651..2f645cba9b 100644 --- a/api/third_party/openapi/odpf/optimus/runtime_service.swagger.json +++ b/api/third_party/openapi/odpf/optimus/runtime_service.swagger.json @@ -319,12 +319,12 @@ ] }, "post": { - "operationId": "RuntimeService_Backup", + "operationId": "RuntimeService_CreateBackup", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/optimusBackupResponse" + "$ref": "#/definitions/optimusCreateBackupResponse" } }, "default": { @@ -459,6 +459,54 @@ ] } }, + "/v1/project/{projectName}/namespace/{namespace}/datastore/{datastoreName}/backup/{id}": { + "get": { + "operationId": "RuntimeService_GetBackup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/optimusGetBackupResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "projectName", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "datastoreName", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "RuntimeService" + ] + } + }, "/v1/project/{projectName}/namespace/{namespace}/datastore/{datastoreName}/resource": { "get": { "summary": "ListResourceSpecification lists all resource specifications of a datastore in project", @@ -1405,23 +1453,6 @@ } } }, - "optimusBackupResponse": { - "type": "object", - "properties": { - "urn": { - "type": "array", - "items": { - "type": "string" - } - }, - "ignoredResources": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, "optimusBackupSpec": { "type": "object", "properties": { @@ -1437,6 +1468,12 @@ }, "description": { "type": "string" + }, + "config": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, @@ -1466,6 +1503,23 @@ } } }, + "optimusCreateBackupResponse": { + "type": "object", + "properties": { + "urn": { + "type": "array", + "items": { + "type": "string" + } + }, + "ignoredResources": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "optimusCreateJobSpecificationResponse": { "type": "object", "properties": { @@ -1535,6 +1589,20 @@ } } }, + "optimusGetBackupResponse": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/optimusBackupSpec" + }, + "urn": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "optimusGetJobTaskResponse": { "type": "object", "properties": { @@ -1684,6 +1752,14 @@ ], "default": "UNSPECIFIED" }, + "optimusJobMetadata": { + "type": "object", + "properties": { + "resource": { + "$ref": "#/definitions/optimusJobSpecMetadataResource" + } + } + }, "optimusJobSpecHook": { "type": "object", "properties": { @@ -1698,6 +1774,28 @@ } } }, + "optimusJobSpecMetadataResource": { + "type": "object", + "properties": { + "request": { + "$ref": "#/definitions/optimusJobSpecMetadataResourceConfig" + }, + "limit": { + "$ref": "#/definitions/optimusJobSpecMetadataResourceConfig" + } + } + }, + "optimusJobSpecMetadataResourceConfig": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + } + }, "optimusJobSpecification": { "type": "object", "properties": { @@ -1773,6 +1871,9 @@ }, "behavior": { "$ref": "#/definitions/JobSpecificationBehavior" + }, + "metadata": { + "$ref": "#/definitions/optimusJobMetadata" } } }, @@ -2090,6 +2191,12 @@ "createdAt": { "type": "string", "format": "date-time" + }, + "config": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, diff --git a/cmd/backup.go b/cmd/backup.go index a4441958fd..8597d9d610 100644 --- a/cmd/backup.go +++ b/cmd/backup.go @@ -3,6 +3,7 @@ package cmd import ( "context" "fmt" + "strings" "time" "github.com/olekukonko/tablewriter" @@ -29,6 +30,7 @@ func backupCommand(l log.Logger, datastoreRepo models.DatastoreRepo, conf config } cmd.AddCommand(backupResourceSubCommand(l, datastoreRepo, conf)) cmd.AddCommand(backupListSubCommand(l, datastoreRepo, conf)) + cmd.AddCommand(backupDetailSubCommand(l, datastoreRepo, conf)) return cmd } @@ -139,7 +141,7 @@ func backupResourceSubCommand(l log.Logger, datastoreRepo models.DatastoreRepo, return nil } - backupRequest := &pb.BackupRequest{ + backupRequest := &pb.CreateBackupRequest{ ProjectName: project, Namespace: namespace, ResourceName: resourceName, @@ -190,7 +192,7 @@ func runBackupDryRunRequest(l log.Logger, conf config.Provider, backupRequest *p return nil } -func runBackupRequest(l log.Logger, conf config.Provider, backupRequest *pb.BackupRequest) (err error) { +func runBackupRequest(l log.Logger, conf config.Provider, backupRequest *pb.CreateBackupRequest) (err error) { dialTimeoutCtx, dialCancel := context.WithTimeout(context.Background(), OptimusDialTimeout) defer dialCancel() @@ -209,7 +211,7 @@ func runBackupRequest(l log.Logger, conf config.Provider, backupRequest *pb.Back l.Info("please wait...") runtime := pb.NewRuntimeServiceClient(conn) - backupResponse, err := runtime.Backup(requestTimeout, backupRequest) + backupResponse, err := runtime.CreateBackup(requestTimeout, backupRequest) if err != nil { if errors.Is(err, context.DeadlineExceeded) { l.Info("backup took too long, timing out") @@ -221,7 +223,7 @@ func runBackupRequest(l log.Logger, conf config.Provider, backupRequest *pb.Back return nil } -func printBackupResponse(l log.Logger, backupResponse *pb.BackupResponse) { +func printBackupResponse(l log.Logger, backupResponse *pb.CreateBackupResponse) { l.Info(coloredSuccess("\nBackup Finished")) l.Info("Resource backup completed successfully:") counter := 1 @@ -328,13 +330,111 @@ func printBackupListResponse(l log.Logger, listBackupsResponse *pb.ListBackupsRe "ID", "Resource", "Created", + "Ignore Downstream?", + "TTL", "Description", }) for _, backupSpec := range listBackupsResponse.Backups { - table.Append([]string{backupSpec.Id, backupSpec.ResourceName, backupSpec.CreatedAt.AsTime().Format(time.RFC3339), - backupSpec.Description}) + ignoreDownstream := backupSpec.Config[models.ConfigIgnoreDownstream] + ttl := backupSpec.Config[models.ConfigTTL] + table.Append([]string{ + backupSpec.Id, + backupSpec.ResourceName, + backupSpec.CreatedAt.AsTime().Format(time.RFC3339), + ignoreDownstream, + ttl, + backupSpec.Description, + }) } table.Render() } + +func backupDetailSubCommand(l log.Logger, datastoreRepo models.DatastoreRepo, conf config.Provider) *cli.Command { + backupCmd := &cli.Command{ + Use: "detail", + Short: "get backup detail using uuid and datastore", + } + + var ( + project string + ) + + backupCmd.Flags().StringVarP(&project, "project", "p", conf.GetProject().Name, "project name of optimus managed repository") + + backupCmd.RunE = func(cmd *cli.Command, args []string) error { + availableStorer := []string{} + for _, s := range datastoreRepo.GetAll() { + availableStorer = append(availableStorer, s.Name()) + } + var storerName string + if err := survey.AskOne(&survey.Select{ + Message: "Select supported datastore?", + Options: availableStorer, + }, &storerName); err != nil { + return err + } + + listBackupsRequest := &pb.GetBackupRequest{ + ProjectName: project, + DatastoreName: storerName, + Id: args[0], + } + + dialTimeoutCtx, dialCancel := context.WithTimeout(context.Background(), OptimusDialTimeout) + defer dialCancel() + + conn, err := createConnection(dialTimeoutCtx, conf.GetHost()) + if err != nil { + if errors.Is(err, context.DeadlineExceeded) { + l.Info("can't reach optimus service") + } + return err + } + defer conn.Close() + + requestTimeout, requestCancel := context.WithTimeout(context.Background(), backupTimeout) + defer requestCancel() + + l.Info("please wait...") + runtime := pb.NewRuntimeServiceClient(conn) + + backupDetailResponse, err := runtime.GetBackup(requestTimeout, listBackupsRequest) + if err != nil { + if errors.Is(err, context.DeadlineExceeded) { + l.Info("getting backup detail took too long, timing out") + } + return errors.Wrapf(err, "request failed to get backup detail") + } + + printBackupDetailResponse(l, backupDetailResponse) + return nil + } + return backupCmd +} + +func printBackupDetailResponse(l log.Logger, backupDetailResponse *pb.GetBackupResponse) { + table := tablewriter.NewWriter(l.Writer()) + table.SetBorder(false) + + var expiry time.Time + ttl := backupDetailResponse.Spec.Config[models.ConfigTTL] + if ttl != "" { + ttlDuration, err := time.ParseDuration(ttl) + if err != nil { + l.Info("unable to parse backup TTL") + } + expiry = backupDetailResponse.Spec.CreatedAt.AsTime().Add(ttlDuration) + } + + table.Append([]string{"ID", backupDetailResponse.Spec.Id}) + table.Append([]string{"Resource", backupDetailResponse.Spec.ResourceName}) + table.Append([]string{"Created", backupDetailResponse.Spec.CreatedAt.AsTime().Format(time.RFC3339)}) + table.Append([]string{"Ignore Downstream?", backupDetailResponse.Spec.Config[models.ConfigIgnoreDownstream]}) + table.Append([]string{"Expire at", expiry.Format(time.RFC3339)}) + table.Append([]string{"Description", backupDetailResponse.Spec.Description}) + table.Append([]string{"Result", strings.Join(backupDetailResponse.Urn[:], "\n")}) + + table.Render() +} diff --git a/cmd/replay.go b/cmd/replay.go index 8f4e8a483a..f24314bcb6 100644 --- a/cmd/replay.go +++ b/cmd/replay.go @@ -438,14 +438,15 @@ func printReplayListResponse(l log.Logger, replayListResponse *pb.ListReplaysRes "Job", "Start Date", "End Date", + "Ignore Downstream?", "Requested At", "Status", }) for _, replaySpec := range replayListResponse.ReplayList { table.Append([]string{replaySpec.Id, replaySpec.JobName, replaySpec.StartDate.AsTime().Format(models.JobDatetimeLayout), - replaySpec.EndDate.AsTime().Format(models.JobDatetimeLayout), replaySpec.CreatedAt.AsTime().Format(time.RFC3339), - replaySpec.State}) + replaySpec.EndDate.AsTime().Format(models.JobDatetimeLayout), replaySpec.Config[models.ConfigIgnoreDownstream], + replaySpec.CreatedAt.AsTime().Format(time.RFC3339), replaySpec.State}) } table.Render() diff --git a/datastore/service.go b/datastore/service.go index 3d9de55a3c..7b425cf1c8 100644 --- a/datastore/service.go +++ b/datastore/service.go @@ -3,8 +3,11 @@ package datastore import ( "context" "fmt" + "strconv" "time" + "github.com/google/uuid" + "github.com/odpf/optimus/utils" "github.com/hashicorp/go-multierror" @@ -229,6 +232,7 @@ func (srv Service) BackupResource(ctx context.Context, backupRequest models.Back return models.BackupResult{}, err } backupRequest.ID = backupSpec.ID + backupTime := time.Now() var resources []string var resourcesToIgnore []string @@ -270,7 +274,7 @@ func (srv Service) BackupResource(ctx context.Context, backupRequest models.Back backupResp, err := datastorer.BackupResource(ctx, models.BackupResourceRequest{ Resource: resourceSpec, BackupSpec: backupRequest, - BackupTime: time.Now(), + BackupTime: backupTime, }) if err != nil { if err == models.ErrUnsupportedResource { @@ -303,7 +307,7 @@ func (srv Service) BackupResource(ctx context.Context, backupRequest models.Back }, nil } -func (srv Service) ListBackupResources(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string) ([]models.BackupSpec, error) { +func (srv Service) ListResourceBackups(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string) ([]models.BackupSpec, error) { datastorer, err := srv.dsRepo.GetByName(datastoreName) if err != nil { return []models.BackupSpec{}, err @@ -327,11 +331,23 @@ func (srv Service) ListBackupResources(ctx context.Context, projectSpec models.P return recentBackups, nil } +func (srv Service) GetResourceBackup(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string, + id uuid.UUID) (models.BackupSpec, error) { + datastorer, err := srv.dsRepo.GetByName(datastoreName) + if err != nil { + return models.BackupSpec{}, err + } + + backupRepo := srv.backupRepoFactory.New(projectSpec, datastorer) + return backupRepo.GetByID(ctx, id) +} + func (srv Service) prepareBackupSpec(backupRequest models.BackupRequest) (models.BackupSpec, error) { backupID, err := srv.uuidProvider.NewUUID() if err != nil { return models.BackupSpec{}, err } + backupRequest.Config = addIgnoreDownstreamConfig(backupRequest.Config, backupRequest.AllowedDownstreamNamespaces) return models.BackupSpec{ ID: backupID, Description: backupRequest.Description, @@ -340,6 +356,20 @@ func (srv Service) prepareBackupSpec(backupRequest models.BackupRequest) (models }, nil } +func addIgnoreDownstreamConfig(config map[string]string, allowedDownstreamNamespaces []string) map[string]string { + if len(config) == 0 { + config = make(map[string]string) + } + + ignoreDownstream := true + if len(allowedDownstreamNamespaces) > 0 { + ignoreDownstream = false + } + + config[models.ConfigIgnoreDownstream] = strconv.FormatBool(ignoreDownstream) + return config +} + func (srv *Service) notifyProgress(po progress.Observer, event progress.Event) { if po == nil { return diff --git a/datastore/service_test.go b/datastore/service_test.go index 07792a8277..6ea5af7dd7 100644 --- a/datastore/service_test.go +++ b/datastore/service_test.go @@ -1382,6 +1382,7 @@ func TestService(t *testing.T) { Resource: resourceSpec, Result: map[string]interface{}{resourceSpec.Name: backupResult}, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "false"}, } depMod.On("GenerateDestination", ctx, unitData).Return(destination, nil) @@ -1526,6 +1527,7 @@ func TestService(t *testing.T) { Resource: resourceRoot, Result: backupResult, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "false"}, } dsRepo.On("GetByName", models.DestinationTypeBigquery.String()).Return(datastorer, nil) @@ -1666,6 +1668,7 @@ func TestService(t *testing.T) { Resource: resourceRoot, Result: backupResult, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "false"}, } dsRepo.On("GetByName", models.DestinationTypeBigquery.String()).Return(datastorer, nil) @@ -2111,6 +2114,7 @@ func TestService(t *testing.T) { Resource: resourceRoot, Result: backupResult, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "false"}, } uuidProvider.On("NewUUID").Return(backupUUID, nil) @@ -2248,6 +2252,7 @@ func TestService(t *testing.T) { Resource: resourceRoot, Result: backupResult, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "false"}, } uuidProvider.On("NewUUID").Return(backupUUID, nil) @@ -2384,6 +2389,7 @@ func TestService(t *testing.T) { Resource: resourceRoot, Result: backupResult, Description: "", + Config: map[string]string{models.ConfigIgnoreDownstream: "true"}, } dsRepo.On("GetByName", models.DestinationTypeBigquery.String()).Return(datastorer, nil) @@ -2410,7 +2416,7 @@ func TestService(t *testing.T) { assert.Equal(t, []string{destinationDownstream.Destination}, resp.IgnoredResources) }) }) - t.Run("ListBackupResources", func(t *testing.T) { + t.Run("ListResourceBackups", func(t *testing.T) { datastoreName := models.DestinationTypeBigquery.String() backupSpecs := []models.BackupSpec{ { @@ -2444,7 +2450,7 @@ func TestService(t *testing.T) { backupRepo.On("GetAll", ctx).Return(backupSpecs, nil) service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) - resp, err := service.ListBackupResources(ctx, projectSpec, datastoreName) + resp, err := service.ListResourceBackups(ctx, projectSpec, datastoreName) assert.Nil(t, err) assert.Equal(t, []models.BackupSpec{backupSpecs[0], backupSpecs[1]}, resp) @@ -2460,7 +2466,7 @@ func TestService(t *testing.T) { dsRepo.On("GetByName", datastoreName).Return(datastorer, errors.New(errorMsg)) service := datastore.NewService(nil, nil, dsRepo, nil, nil) - resp, err := service.ListBackupResources(ctx, projectSpec, datastoreName) + resp, err := service.ListResourceBackups(ctx, projectSpec, datastoreName) assert.Equal(t, errorMsg, err.Error()) assert.Equal(t, []models.BackupSpec{}, resp) @@ -2485,7 +2491,7 @@ func TestService(t *testing.T) { backupRepo.On("GetAll", ctx).Return([]models.BackupSpec{}, errors.New(errorMsg)) service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) - resp, err := service.ListBackupResources(ctx, projectSpec, datastoreName) + resp, err := service.ListResourceBackups(ctx, projectSpec, datastoreName) assert.Equal(t, errorMsg, err.Error()) assert.Equal(t, []models.BackupSpec{}, resp) @@ -2508,7 +2514,7 @@ func TestService(t *testing.T) { backupRepo.On("GetAll", ctx).Return([]models.BackupSpec{}, store.ErrResourceNotFound) service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) - resp, err := service.ListBackupResources(ctx, projectSpec, datastoreName) + resp, err := service.ListResourceBackups(ctx, projectSpec, datastoreName) assert.Nil(t, err) assert.Equal(t, []models.BackupSpec{}, resp) @@ -2531,10 +2537,83 @@ func TestService(t *testing.T) { backupRepo.On("GetAll", ctx).Return([]models.BackupSpec{backupSpecs[2]}, nil) service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) - resp, err := service.ListBackupResources(ctx, projectSpec, datastoreName) + resp, err := service.ListResourceBackups(ctx, projectSpec, datastoreName) assert.Nil(t, err) assert.Equal(t, 0, len(resp)) }) }) + + t.Run("GetResourceBackup", func(t *testing.T) { + datastoreName := models.DestinationTypeBigquery.String() + backupID := uuid.Must(uuid.NewRandom()) + backupSpec := models.BackupSpec{ + ID: backupID, + CreatedAt: time.Now().Add(time.Hour * 24 * -30), + } + t.Run("should return backup detail", func(t *testing.T) { + datastorer := new(mock.Datastorer) + defer datastorer.AssertExpectations(t) + + dsRepo := new(mock.SupportedDatastoreRepo) + defer dsRepo.AssertExpectations(t) + + backupRepo := new(mock.BackupRepo) + defer backupRepo.AssertExpectations(t) + + backupRepoFac := new(mock.BackupRepoFactory) + defer backupRepoFac.AssertExpectations(t) + + dsRepo.On("GetByName", datastoreName).Return(datastorer, nil) + backupRepoFac.On("New", projectSpec, datastorer).Return(backupRepo) + backupRepo.On("GetByID", ctx, backupID).Return(backupSpec, nil) + + service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) + resp, err := service.GetResourceBackup(ctx, projectSpec, datastoreName, backupID) + + assert.Nil(t, err) + assert.Equal(t, backupSpec, resp) + }) + t.Run("should fail when unable to get datastore", func(t *testing.T) { + datastorer := new(mock.Datastorer) + defer datastorer.AssertExpectations(t) + + dsRepo := new(mock.SupportedDatastoreRepo) + defer dsRepo.AssertExpectations(t) + + errorMsg := "unable to get datastore" + dsRepo.On("GetByName", datastoreName).Return(datastorer, errors.New(errorMsg)) + + service := datastore.NewService(nil, nil, dsRepo, nil, nil) + resp, err := service.GetResourceBackup(ctx, projectSpec, datastoreName, backupID) + + assert.Equal(t, errorMsg, err.Error()) + assert.Equal(t, models.BackupSpec{}, resp) + }) + t.Run("should fail when unable to get backup", func(t *testing.T) { + datastorer := new(mock.Datastorer) + defer datastorer.AssertExpectations(t) + + dsRepo := new(mock.SupportedDatastoreRepo) + defer dsRepo.AssertExpectations(t) + + backupRepo := new(mock.BackupRepo) + defer backupRepo.AssertExpectations(t) + + backupRepoFac := new(mock.BackupRepoFactory) + defer backupRepoFac.AssertExpectations(t) + + dsRepo.On("GetByName", datastoreName).Return(datastorer, nil) + backupRepoFac.On("New", projectSpec, datastorer).Return(backupRepo) + + errorMsg := "unable to get backup" + backupRepo.On("GetByID", ctx, backupID).Return(models.BackupSpec{}, errors.New(errorMsg)) + + service := datastore.NewService(nil, nil, dsRepo, nil, backupRepoFac) + resp, err := service.GetResourceBackup(ctx, projectSpec, datastoreName, backupID) + + assert.Equal(t, errorMsg, err.Error()) + assert.Equal(t, models.BackupSpec{}, resp) + }) + }) } diff --git a/ext/datastore/bigquery/bigquery_test.go b/ext/datastore/bigquery/bigquery_test.go index 3b61adf454..36306b4ede 100644 --- a/ext/datastore/bigquery/bigquery_test.go +++ b/ext/datastore/bigquery/bigquery_test.go @@ -499,7 +499,7 @@ func TestBigquery(t *testing.T) { BackupSpec: models.BackupRequest{ Project: projectSpec, Config: map[string]string{ - BackupConfigTTL: "720h", + models.ConfigTTL: "720h", BackupConfigDataset: "optimus_backup", BackupConfigPrefix: "backup", }, @@ -511,7 +511,7 @@ func TestBigquery(t *testing.T) { destinationTable := BQTable{ Project: spec.Project, Dataset: resourceRequest.BackupSpec.Config[BackupConfigDataset], - Table: fmt.Sprintf("backup_dataset_table_%s", resourceRequest.BackupSpec.ID), + Table: fmt.Sprintf("backup_dataset_table_%s", backupTime.Format(backupTimePostfixFormat)), } resultURN := fmt.Sprintf(tableURNFormat, BigQuery{}.Name(), destinationTable.Project, destinationTable.Dataset, destinationTable.Table) diff --git a/ext/datastore/bigquery/table.go b/ext/datastore/bigquery/table.go index 68dea51d8b..7f513d9639 100644 --- a/ext/datastore/bigquery/table.go +++ b/ext/datastore/bigquery/table.go @@ -16,17 +16,19 @@ import ( ) var ( - tableNameParseRegex = regexp.MustCompile(`^([\w-]+)\.(\w+)\.([\w-]+)$`) - errorReadTableSpec = "failed to read table spec for bigquery" + tableNameParseRegex = regexp.MustCompile(`^([\w-]+)\.(\w+)\.([\w-]+)$`) + errorReadTableSpec = "failed to read table spec for bigquery" + backupTimePostfixFormat = "2006_01_02_15_04_05" ) const ( - BackupConfigDataset = "dataset" - BackupConfigPrefix = "prefix" - BackupConfigTTL = "ttl" + // bigquery datastore specific configurations + BackupConfigDataset = "dataset" + BackupConfigPrefix = "prefix" + defaultBackupDataset = "optimus_backup" defaultBackupPrefix = "backup" - defaultBackupTTL = time.Hour * 720 + defaultBackupTTL = "720h" ) func createTable(ctx context.Context, spec models.ResourceSpec, client bqiface.Client, upsert bool) error { @@ -145,7 +147,7 @@ func backupTable(ctx context.Context, request models.BackupResourceRequest, clie return models.BackupResourceResponse{}, errors.New(errorReadTableSpec) } - bqResourceDst := prepareBQResourceDst(bqResourceSrc, request.BackupSpec) + bqResourceDst := prepareBQResourceDst(bqResourceSrc, request.BackupSpec, request.BackupTime) tableDst, err := duplicateTable(ctx, client, bqResourceSrc, bqResourceDst) if err != nil { @@ -172,21 +174,24 @@ func backupTable(ctx context.Context, request models.BackupResourceRequest, clie }, nil } -func prepareBQResourceDst(bqResourceSrc BQTable, backupSpec models.BackupRequest) BQTable { +func prepareBQResourceDst(bqResourceSrc BQTable, backupSpec models.BackupRequest, backupTime time.Time) BQTable { datasetValue, ok := backupSpec.Config[BackupConfigDataset] if !ok { datasetValue = defaultBackupDataset + backupSpec.Config[BackupConfigDataset] = defaultBackupDataset } prefixValue, ok := backupSpec.Config[BackupConfigPrefix] if !ok { prefixValue = defaultBackupPrefix + backupSpec.Config[BackupConfigPrefix] = defaultBackupPrefix } return BQTable{ Project: bqResourceSrc.Project, Dataset: datasetValue, - Table: fmt.Sprintf("%s_%s_%s_%s", prefixValue, bqResourceSrc.Dataset, bqResourceSrc.Table, backupSpec.ID), + Table: fmt.Sprintf("%s_%s_%s_%s", prefixValue, bqResourceSrc.Dataset, bqResourceSrc.Table, + backupTime.Format(backupTimePostfixFormat)), } } @@ -231,19 +236,19 @@ func updateExpiry(ctx context.Context, tableDst bqiface.Table, req models.Backup return nil, err } - var ttl time.Duration - ttlStr, ok := req.BackupSpec.Config[BackupConfigTTL] - if ok { - ttl, err = time.ParseDuration(ttlStr) - if err != nil { - return nil, errors.Wrapf(err, "failed to parse bigquery backup TTL %s", ttlStr) - } - } else { + ttl, ok := req.BackupSpec.Config[models.ConfigTTL] + if !ok { ttl = defaultBackupTTL + req.BackupSpec.Config[models.ConfigTTL] = defaultBackupTTL + } + + ttlDuration, err := time.ParseDuration(ttl) + if err != nil { + return nil, errors.Wrapf(err, "failed to parse bigquery backup TTL %s", ttl) } update := bigquery.TableMetadataToUpdate{ - ExpirationTime: req.BackupTime.Add(ttl), + ExpirationTime: req.BackupTime.Add(ttlDuration), } if _, err = tableDst.Update(ctx, update, meta.ETag); err != nil { return nil, err diff --git a/ext/datastore/bigquery/table_test.go b/ext/datastore/bigquery/table_test.go index 32037727da..e4fbd6da3f 100644 --- a/ext/datastore/bigquery/table_test.go +++ b/ext/datastore/bigquery/table_test.go @@ -360,6 +360,7 @@ func TestTable(t *testing.T) { t.Run("backupTable", func(t *testing.T) { eTag := "uniqueID" + backupTime := time.Now() tableMetadata := &bigquery.TableMetadata{ Name: bQResource.Table, Schema: bigquery.Schema{ @@ -391,7 +392,7 @@ func TestTable(t *testing.T) { Type: models.ResourceTypeTable, } destinationConfig := map[string]string{ - BackupConfigTTL: "720h", + models.ConfigTTL: "720h", BackupConfigDataset: "optimus_backup", BackupConfigPrefix: "backup", } @@ -401,12 +402,12 @@ func TestTable(t *testing.T) { ID: uuid.Must(uuid.NewRandom()), Config: destinationConfig, }, - BackupTime: time.Now(), + BackupTime: backupTime, } destinationTable := BQTable{ Project: bQResource.Project, Dataset: request.BackupSpec.Config[BackupConfigDataset], - Table: fmt.Sprintf("backup_dataset_table_%s", request.BackupSpec.ID), + Table: fmt.Sprintf("backup_dataset_table_%s", backupTime.Format(backupTimePostfixFormat)), } datasetMetadata := bqiface.DatasetMetadata{ diff --git a/job/replay_manager.go b/job/replay_manager.go index a850927671..7a3cf680cb 100644 --- a/job/replay_manager.go +++ b/job/replay_manager.go @@ -101,6 +101,7 @@ func (m *Manager) Replay(ctx context.Context, reqInput models.ReplayRequest) (mo Job: reqInput.Job, StartDate: reqInput.Start, EndDate: reqInput.End, + Config: prepareReplayConfig(reqInput.AllowedDownstreamNamespaces), Status: models.ReplayStatusAccepted, ExecutionTree: replayPlan.ExecutionTree, } @@ -126,6 +127,17 @@ func (m *Manager) Replay(ctx context.Context, reqInput models.ReplayRequest) (mo } } +func prepareReplayConfig(allowedDownstreamNamespaces []string) map[string]string { + config := make(map[string]string) + + config[models.ConfigIgnoreDownstream] = "true" + if len(allowedDownstreamNamespaces) > 0 { + config[models.ConfigIgnoreDownstream] = "false" + } + + return config +} + // start a worker goroutine that runs the replay in background func (m *Manager) spawnServiceWorker(worker ReplayWorker) { defer m.wg.Done() diff --git a/mock/backup.go b/mock/backup.go index 7a26629070..a55f7a1946 100644 --- a/mock/backup.go +++ b/mock/backup.go @@ -3,6 +3,8 @@ package mock import ( "context" + "github.com/google/uuid" + "github.com/odpf/optimus/models" "github.com/odpf/optimus/store" "github.com/stretchr/testify/mock" @@ -21,6 +23,11 @@ func (repo *BackupRepo) GetAll(ctx context.Context) ([]models.BackupSpec, error) return args.Get(0).([]models.BackupSpec), args.Error(1) } +func (repo *BackupRepo) GetByID(ctx context.Context, id uuid.UUID) (models.BackupSpec, error) { + args := repo.Called(ctx, id) + return args.Get(0).(models.BackupSpec), args.Error(1) +} + type BackupRepoFactory struct { mock.Mock } diff --git a/mock/datastore.go b/mock/datastore.go index 791a2e099f..96b38de66e 100644 --- a/mock/datastore.go +++ b/mock/datastore.go @@ -3,6 +3,8 @@ package mock import ( "context" + "github.com/google/uuid" + "github.com/odpf/optimus/store" "github.com/odpf/optimus/core/progress" @@ -126,11 +128,16 @@ func (d *DatastoreService) BackupResource(ctx context.Context, req models.Backup return args.Get(0).(models.BackupResult), args.Error(1) } -func (d *DatastoreService) ListBackupResources(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string) ([]models.BackupSpec, error) { +func (d *DatastoreService) ListResourceBackups(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string) ([]models.BackupSpec, error) { args := d.Called(ctx, projectSpec, datastoreName) return args.Get(0).([]models.BackupSpec), args.Error(1) } +func (d *DatastoreService) GetResourceBackup(ctx context.Context, projectSpec models.ProjectSpec, datastoreName string, id uuid.UUID) (models.BackupSpec, error) { + args := d.Called(ctx, projectSpec, datastoreName, id) + return args.Get(0).(models.BackupSpec), args.Error(1) +} + type SupportedDatastoreRepo struct { mock.Mock } diff --git a/models/backup.go b/models/backup.go index 23f393c411..419ece02b9 100644 --- a/models/backup.go +++ b/models/backup.go @@ -6,6 +6,14 @@ import ( "github.com/google/uuid" ) +const ( + // generic backup configurations + ConfigTTL = "ttl" + ConfigIgnoreDownstream = "ignore_downstream" + + BackupSpecKeyURN = "URN" +) + type BackupResourceRequest struct { Resource ResourceSpec BackupSpec BackupRequest diff --git a/models/datastore.go b/models/datastore.go index cf37fa02bf..b94038b88a 100644 --- a/models/datastore.go +++ b/models/datastore.go @@ -186,5 +186,6 @@ type DatastoreService interface { DeleteResource(ctx context.Context, namespace NamespaceSpec, datastoreName, name string) error BackupResourceDryRun(ctx context.Context, backupRequest BackupRequest, jobSpecs []JobSpec) (BackupPlan, error) BackupResource(ctx context.Context, backupRequest BackupRequest, jobSpecs []JobSpec) (BackupResult, error) - ListBackupResources(ctx context.Context, projectSpec ProjectSpec, datastoreName string) ([]BackupSpec, error) + ListResourceBackups(ctx context.Context, projectSpec ProjectSpec, datastoreName string) ([]BackupSpec, error) + GetResourceBackup(ctx context.Context, projectSpec ProjectSpec, datastoreName string, id uuid.UUID) (BackupSpec, error) } diff --git a/models/replay.go b/models/replay.go index 3342ae371b..e31037acbe 100644 --- a/models/replay.go +++ b/models/replay.go @@ -43,15 +43,15 @@ type ReplayPlan struct { } type ReplaySpec struct { - ID uuid.UUID - Job JobSpec - StartDate time.Time - EndDate time.Time - IgnoreDownstream bool - ExecutionTree *tree.TreeNode - Status string - Message ReplayMessage - CreatedAt time.Time + ID uuid.UUID + Job JobSpec + StartDate time.Time + EndDate time.Time + Config map[string]string + ExecutionTree *tree.TreeNode + Status string + Message ReplayMessage + CreatedAt time.Time } type ReplayState struct { diff --git a/store/postgres/backup_repository.go b/store/postgres/backup_repository.go index 0cf2983c58..86b53a7662 100644 --- a/store/postgres/backup_repository.go +++ b/store/postgres/backup_repository.go @@ -5,6 +5,8 @@ import ( "encoding/json" "time" + "github.com/odpf/optimus/store" + "gorm.io/datatypes" "github.com/google/uuid" @@ -109,6 +111,18 @@ func (repo *backupRepository) GetAll(ctx context.Context) ([]models.BackupSpec, return specs, nil } +func (repo *backupRepository) GetByID(ctx context.Context, id uuid.UUID) (models.BackupSpec, error) { + var b Backup + if err := repo.db.WithContext(ctx).Preload("Resource").Joins("JOIN resource ON backup.resource_id = resource.id"). + Where("backup.id = ?", id).First(&b).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return models.BackupSpec{}, store.ErrResourceNotFound + } + return models.BackupSpec{}, err + } + return b.ToSpec(repo.datastorer) +} + func NewBackupRepository(db *gorm.DB, projectSpec models.ProjectSpec, ds models.Datastorer) *backupRepository { return &backupRepository{ db: db, diff --git a/store/postgres/backup_repository_test.go b/store/postgres/backup_repository_test.go index 0fc2281775..e6b2b9263f 100644 --- a/store/postgres/backup_repository_test.go +++ b/store/postgres/backup_repository_test.go @@ -130,5 +130,14 @@ func TestBackupRepository(t *testing.T) { assert.Equal(t, backupSpec.Resource, backups[0].Resource) assert.Equal(t, backupSpec.Config, backups[0].Config) assert.Equal(t, backupSpec.Result, backups[0].Result) + + backup, err := backupRepo.GetByID(ctx, backupUuid) + assert.Nil(t, err) + + assert.Equal(t, backupSpec.ID, backup.ID) + assert.Equal(t, backupSpec.Description, backup.Description) + assert.Equal(t, backupSpec.Resource, backup.Resource) + assert.Equal(t, backupSpec.Config, backup.Config) + assert.Equal(t, backupSpec.Result, backup.Result) }) } diff --git a/store/postgres/migrations/000016_update_replay_table_add_config_column.down.sql b/store/postgres/migrations/000016_update_replay_table_add_config_column.down.sql new file mode 100644 index 0000000000..5ddc973afd --- /dev/null +++ b/store/postgres/migrations/000016_update_replay_table_add_config_column.down.sql @@ -0,0 +1 @@ +ALTER TABLE replay DROP IF EXISTS config; diff --git a/store/postgres/migrations/000016_update_replay_table_add_config_column.up.sql b/store/postgres/migrations/000016_update_replay_table_add_config_column.up.sql new file mode 100644 index 0000000000..69464d71e5 --- /dev/null +++ b/store/postgres/migrations/000016_update_replay_table_add_config_column.up.sql @@ -0,0 +1 @@ +ALTER TABLE replay ADD IF NOT EXISTS config JSONB; diff --git a/store/postgres/replay_repository.go b/store/postgres/replay_repository.go index aa78678cff..3f042b8c05 100644 --- a/store/postgres/replay_repository.go +++ b/store/postgres/replay_repository.go @@ -27,6 +27,7 @@ type Replay struct { Status string `gorm:"not null"` Message datatypes.JSON ExecutionTree datatypes.JSON + Config datatypes.JSON CreatedAt time.Time `gorm:"not null" json:"created_at"` UpdatedAt time.Time `gorm:"not null" json:"updated_at"` @@ -83,12 +84,18 @@ func (p Replay) FromSpec(spec *models.ReplaySpec) (Replay, error) { } } + configInBytes, err := json.Marshal(spec.Config) + if err != nil { + return Replay{}, err + } + return Replay{ ID: spec.ID, JobID: spec.Job.ID, StartDate: spec.StartDate.UTC(), EndDate: spec.EndDate.UTC(), Status: spec.Status, + Config: configInBytes, Message: message, ExecutionTree: executionTree, }, nil @@ -132,6 +139,13 @@ func (p Replay) ToSpec(jobSpec models.JobSpec) (models.ReplaySpec, error) { treeNode = toTreeNode(&jobTree) } + if p.Config != nil { + config := make(map[string]string) + if err := json.Unmarshal(p.Config, &config); err != nil { + return models.ReplaySpec{}, err + } + } + return models.ReplaySpec{ ID: p.ID, Job: jobSpec, diff --git a/store/postgres/replay_repository_test.go b/store/postgres/replay_repository_test.go index f78f77e959..a86ad09431 100644 --- a/store/postgres/replay_repository_test.go +++ b/store/postgres/replay_repository_test.go @@ -115,6 +115,7 @@ func TestReplayRepository(t *testing.T) { EndDate: endTime, Status: models.ReplayStatusAccepted, ExecutionTree: treeNode1, + Config: map[string]string{models.ConfigIgnoreDownstream: "true"}, }, { ID: uuid.Must(uuid.NewRandom()), diff --git a/store/store.go b/store/store.go index f6e3dab912..03990f3683 100644 --- a/store/store.go +++ b/store/store.go @@ -118,4 +118,5 @@ type ReplaySpecRepository interface { type BackupRepository interface { Save(ctx context.Context, spec models.BackupSpec) error GetAll(context.Context) ([]models.BackupSpec, error) + GetByID(context.Context, uuid.UUID) (models.BackupSpec, error) }