diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-09-18 09:28:44 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-09-18 09:28:44 +0300 |
commit | e450c7ca1115ddc16b3db84a5400b781ed81e2e6 (patch) | |
tree | c39be07e6acd1c7616014980e42c17810de82d76 | |
parent | c7099d645d162a8760f7f84e9f3e0c45229240c1 (diff) | |
parent | 671e6c405526c796fc54e0075a6e4245cd8bb4c7 (diff) |
Merge branch 'pks-raw-blame-fix-error-handling' into 'master'
commit: Gracefully handle invalid arguments in RawBlame
Closes #5594
See merge request https://gitlab.com/gitlab-org/gitaly/-/merge_requests/6361
Merged-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Approved-by: James Liu <jliu@gitlab.com>
-rw-r--r-- | internal/gitaly/service/commit/raw_blame.go | 54 | ||||
-rw-r--r-- | internal/gitaly/service/commit/raw_blame_test.go | 88 | ||||
-rw-r--r-- | proto/commit.proto | 37 | ||||
-rw-r--r-- | proto/errors.proto | 6 | ||||
-rw-r--r-- | proto/go/gitalypb/commit.pb.go | 1182 | ||||
-rw-r--r-- | proto/go/gitalypb/commit_grpc.pb.go | 6 | ||||
-rw-r--r-- | proto/go/gitalypb/errors.pb.go | 83 |
7 files changed, 931 insertions, 525 deletions
diff --git a/internal/gitaly/service/commit/raw_blame.go b/internal/gitaly/service/commit/raw_blame.go index 454e143fa..09c1b8cc4 100644 --- a/internal/gitaly/service/commit/raw_blame.go +++ b/internal/gitaly/service/commit/raw_blame.go @@ -2,7 +2,10 @@ package commit import ( "fmt" + "path/filepath" "regexp" + "strconv" + "strings" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" @@ -11,7 +14,10 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/streamio" ) -var validBlameRange = regexp.MustCompile(`\A\d+,\d+\z`) +var ( + validBlameRange = regexp.MustCompile(`\A\d+,\d+\z`) + blameLineCountErrorRegexp = regexp.MustCompile("^fatal: file .* has only (\\d) lines?\n$") +) func (s *server) RawBlame(in *gitalypb.RawBlameRequest, stream gitalypb.CommitService_RawBlameServer) error { if err := validateRawBlameRequest(s.locator, in); err != nil { @@ -32,18 +38,53 @@ func (s *server) RawBlame(in *gitalypb.RawBlameRequest, stream gitalypb.CommitSe return stream.Send(&gitalypb.RawBlameResponse{Data: p}) }) + var stderr strings.Builder cmd, err := s.gitCmdFactory.New(ctx, in.Repository, git.Command{ Name: "blame", Flags: flags, Args: []string{revision}, PostSepArgs: []string{path}, - }, git.WithStdout(sw)) + }, git.WithStdout(sw), git.WithStderr(&stderr)) if err != nil { - return structerr.NewInternal("cmd: %w", err) + return fmt.Errorf("starting blame: %w", err) } if err := cmd.Wait(); err != nil { - return fmt.Errorf("streaming raw blame data: %w", err) + errorMessage := stderr.String() + + if strings.HasPrefix(errorMessage, "fatal: no such path ") { + return structerr.NewNotFound("path not found in revision"). + WithMetadata("path", path). + WithMetadata("revision", revision). + WithDetail(&gitalypb.RawBlameError{ + Error: &gitalypb.RawBlameError_PathNotFound{ + PathNotFound: &gitalypb.PathNotFoundError{ + Path: in.GetPath(), + }, + }, + }) + } + + if matches := blameLineCountErrorRegexp.FindStringSubmatch(errorMessage); len(matches) == 2 { + lines, err := strconv.ParseUint(matches[1], 10, 64) + if err != nil { + return structerr.New("failed parsing actual lines").WithMetadata("lines", matches[1]) + } + + return structerr.NewInvalidArgument("range is outside of the file length"). + WithMetadata("path", path). + WithMetadata("revision", revision). + WithMetadata("lines", lines). + WithDetail(&gitalypb.RawBlameError{ + Error: &gitalypb.RawBlameError_OutOfRange{ + OutOfRange: &gitalypb.RawBlameError_OutOfRangeError{ + ActualLines: lines, + }, + }, + }) + } + + return structerr.New("blaming file: %w", err).WithMetadata("stderr", stderr.String()) } return nil @@ -61,6 +102,11 @@ func validateRawBlameRequest(locator storage.Locator, in *gitalypb.RawBlameReque return fmt.Errorf("empty Path") } + if !filepath.IsLocal(string(in.GetPath())) { + return structerr.NewInvalidArgument("path escapes repository root"). + WithMetadata("path", string(in.GetPath())) + } + blameRange := in.GetRange() if len(blameRange) > 0 && !validBlameRange.Match(blameRange) { return fmt.Errorf("invalid Range") diff --git a/internal/gitaly/service/commit/raw_blame_test.go b/internal/gitaly/service/commit/raw_blame_test.go index 842905103..cb0e5b76b 100644 --- a/internal/gitaly/service/commit/raw_blame_test.go +++ b/internal/gitaly/service/commit/raw_blame_test.go @@ -12,6 +12,8 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v16/streamio" + spb "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/protobuf/testing/protocmp" ) func TestRawBlame(t *testing.T) { @@ -113,6 +115,90 @@ func TestRawBlame(t *testing.T) { }, }, { + desc: "out-of-range", + setup: func(t *testing.T) setupData { + repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + + // We write a file with three lines, only, but the request asks us to blame line 10. + commit := gittest.WriteCommit(t, cfg, repoPath, gittest.WithTreeEntries( + gittest.TreeEntry{Path: "path", Mode: "100644", Content: "a\nb\nc\n"}, + )) + + return setupData{ + request: &gitalypb.RawBlameRequest{ + Repository: repo, + Revision: []byte(commit), + Path: []byte("path"), + Range: []byte("10,10"), + }, + expectedErr: testhelper.ToInterceptedMetadata( + structerr.NewInvalidArgument("range is outside of the file length"). + WithMetadata("revision", commit.String()). + WithMetadata("path", "path"). + WithMetadata("lines", 3). + WithDetail(&gitalypb.RawBlameError{ + Error: &gitalypb.RawBlameError_OutOfRange{ + OutOfRange: &gitalypb.RawBlameError_OutOfRangeError{ + ActualLines: 3, + }, + }, + }), + ), + } + }, + }, + { + desc: "missing path", + setup: func(t *testing.T) setupData { + repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + + commit := gittest.WriteCommit(t, cfg, repoPath) + + return setupData{ + request: &gitalypb.RawBlameRequest{ + Repository: repo, + Revision: []byte(commit), + Path: []byte("does-not-exist"), + Range: []byte("1,1"), + }, + expectedErr: testhelper.ToInterceptedMetadata( + structerr.NewNotFound("path not found in revision"). + WithMetadata("revision", commit.String()). + WithMetadata("path", "does-not-exist"). + WithDetail(&gitalypb.RawBlameError{ + Error: &gitalypb.RawBlameError_PathNotFound{ + PathNotFound: &gitalypb.PathNotFoundError{ + Path: []byte("does-not-exist"), + }, + }, + }), + ), + } + }, + }, + { + desc: "path escapes repository root", + setup: func(t *testing.T) setupData { + repo, repoPath := gittest.CreateRepository(t, ctx, cfg) + + commit := gittest.WriteCommit(t, cfg, repoPath) + escapingPath := "im/gonna/../../../escape" + + return setupData{ + request: &gitalypb.RawBlameRequest{ + Repository: repo, + Revision: []byte(commit), + Path: []byte(escapingPath), + Range: []byte("1,1"), + }, + expectedErr: testhelper.ToInterceptedMetadata( + structerr.NewInvalidArgument("path escapes repository root"). + WithMetadata("path", escapingPath), + ), + } + }, + }, + { desc: "simple blame", setup: func(t *testing.T) setupData { repo, repoPath := gittest.CreateRepository(t, ctx, cfg) @@ -271,7 +357,7 @@ filename path }) data, err := io.ReadAll(reader) - testhelper.RequireGrpcError(t, setup.expectedErr, err) + testhelper.RequireGrpcError(t, setup.expectedErr, err, protocmp.SortRepeatedFields(&spb.Status{}, "details")) require.Equal(t, setup.expectedData, string(data)) }) } diff --git a/proto/commit.proto b/proto/commit.proto index 919ede288..467e1e631 100644 --- a/proto/commit.proto +++ b/proto/commit.proto @@ -108,7 +108,8 @@ service CommitService { }; } - // This comment is left unintentionally blank. + // RawBlame blames lines in a blob to when they have last been changed. Returns the raw output of the git-blame(1) + // command. rpc RawBlame(RawBlameRequest) returns (stream RawBlameResponse) { option (op_type) = { op: ACCESSOR @@ -682,25 +683,43 @@ message CommitLanguagesResponse { repeated Language languages = 1; } -// This comment is left unintentionally blank. +// RawBlameRequest is a request for the RawBlame RPC. message RawBlameRequest { - // This comment is left unintentionally blank. + // Repository is the repositroy where to perform the blame. Repository repository = 1 [(target_repository)=true]; - // This comment is left unintentionally blank. + // Revision is the committish at which to start the blame. bytes revision = 2; - // This comment is left unintentionally blank. + // Path is the path of the blob that should be blamed. bytes path = 3; - // Comma-separated range of line numbers to perform the blame on: "1,1000". - // Optional - if no range is provided, the whole file will be blamed. + // Range is the comma-separated range of line numbers to perform the blame on, e.g. "1,1000". Optional - if no range + // is provided, the whole file will be blamed. bytes range = 4; } -// This comment is left unintentionally blank. +// RawBlameResponse is a response for the RawBlame RPC. The response will be chunked into multiple message if the +// returned data exceeds gRPC message limits. message RawBlameResponse { - // This comment is left unintentionally blank. + // Data is the raw data as generated by git-blame(1). bytes data = 1; } +// RawBlameError is used as error detail when the RawBlame RPC fails in a specific way. +message RawBlameError { + // OutOfRangeError indicates that the specified file range that is to be blamed exceeds the length of the blamed + // file. + message OutOfRangeError { + // ActualLines contains the actual number of lines that can be blamed in the file. + uint64 actual_lines = 1; + } + + oneof error { + // PathNotFound is returned when the blamed path cannot be found in the revision. + PathNotFoundError path_not_found = 1; + // OutOfRangeError is returned when the specified blamed range exceeds the file length. + OutOfRangeError out_of_range = 2; + } +} + // LastCommitForPathRequest is a request for the LastCommitForPath RPC. message LastCommitForPathRequest { // Repository is the repository to run the query in. diff --git a/proto/errors.proto b/proto/errors.proto index 6697d1883..caaca1995 100644 --- a/proto/errors.proto +++ b/proto/errors.proto @@ -199,3 +199,9 @@ message PathError { // ErrorType is the type of path error that occurred. ErrorType error_type = 2; } + +// PathNotFoundError is an error returned when a given path cannot be found. +message PathNotFoundError { + // Path is the path that could not be found. + bytes path = 1; +} diff --git a/proto/go/gitalypb/commit.pb.go b/proto/go/gitalypb/commit.pb.go index 6f6a9b8c1..a4c8e8c52 100644 --- a/proto/go/gitalypb/commit.pb.go +++ b/proto/go/gitalypb/commit.pb.go @@ -391,7 +391,7 @@ func (x GetCommitSignaturesResponse_Signer) Number() protoreflect.EnumNumber { // Deprecated: Use GetCommitSignaturesResponse_Signer.Descriptor instead. func (GetCommitSignaturesResponse_Signer) EnumDescriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{45, 0} + return file_commit_proto_rawDescGZIP(), []int{46, 0} } // ListCommitsRequest is a request for the ListCommits RPC. @@ -2719,20 +2719,20 @@ func (x *CommitLanguagesResponse) GetLanguages() []*CommitLanguagesResponse_Lang return nil } -// This comment is left unintentionally blank. +// RawBlameRequest is a request for the RawBlame RPC. type RawBlameRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // This comment is left unintentionally blank. + // Repository is the repositroy where to perform the blame. Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` - // This comment is left unintentionally blank. + // Revision is the committish at which to start the blame. Revision []byte `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"` - // This comment is left unintentionally blank. + // Path is the path of the blob that should be blamed. Path []byte `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - // Comma-separated range of line numbers to perform the blame on: "1,1000". - // Optional - if no range is provided, the whole file will be blamed. + // Range is the comma-separated range of line numbers to perform the blame on, e.g. "1,1000". Optional - if no range + // is provided, the whole file will be blamed. Range []byte `protobuf:"bytes,4,opt,name=range,proto3" json:"range,omitempty"` } @@ -2796,13 +2796,14 @@ func (x *RawBlameRequest) GetRange() []byte { return nil } -// This comment is left unintentionally blank. +// RawBlameResponse is a response for the RawBlame RPC. The response will be chunked into multiple message if the +// returned data exceeds gRPC message limits. type RawBlameResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // This comment is left unintentionally blank. + // Data is the raw data as generated by git-blame(1). Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } @@ -2845,6 +2846,90 @@ func (x *RawBlameResponse) GetData() []byte { return nil } +// RawBlameError is used as error detail when the RawBlame RPC fails in a specific way. +type RawBlameError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Error: + // + // *RawBlameError_PathNotFound + // *RawBlameError_OutOfRange + Error isRawBlameError_Error `protobuf_oneof:"error"` +} + +func (x *RawBlameError) Reset() { + *x = RawBlameError{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RawBlameError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RawBlameError) ProtoMessage() {} + +func (x *RawBlameError) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[34] + 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 RawBlameError.ProtoReflect.Descriptor instead. +func (*RawBlameError) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{34} +} + +func (m *RawBlameError) GetError() isRawBlameError_Error { + if m != nil { + return m.Error + } + return nil +} + +func (x *RawBlameError) GetPathNotFound() *PathNotFoundError { + if x, ok := x.GetError().(*RawBlameError_PathNotFound); ok { + return x.PathNotFound + } + return nil +} + +func (x *RawBlameError) GetOutOfRange() *RawBlameError_OutOfRangeError { + if x, ok := x.GetError().(*RawBlameError_OutOfRange); ok { + return x.OutOfRange + } + return nil +} + +type isRawBlameError_Error interface { + isRawBlameError_Error() +} + +type RawBlameError_PathNotFound struct { + // PathNotFound is returned when the blamed path cannot be found in the revision. + PathNotFound *PathNotFoundError `protobuf:"bytes,1,opt,name=path_not_found,json=pathNotFound,proto3,oneof"` +} + +type RawBlameError_OutOfRange struct { + // OutOfRangeError is returned when the specified blamed range exceeds the file length. + OutOfRange *RawBlameError_OutOfRangeError `protobuf:"bytes,2,opt,name=out_of_range,json=outOfRange,proto3,oneof"` +} + +func (*RawBlameError_PathNotFound) isRawBlameError_Error() {} + +func (*RawBlameError_OutOfRange) isRawBlameError_Error() {} + // LastCommitForPathRequest is a request for the LastCommitForPath RPC. type LastCommitForPathRequest struct { state protoimpl.MessageState @@ -2869,7 +2954,7 @@ type LastCommitForPathRequest struct { func (x *LastCommitForPathRequest) Reset() { *x = LastCommitForPathRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[34] + mi := &file_commit_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2882,7 +2967,7 @@ func (x *LastCommitForPathRequest) String() string { func (*LastCommitForPathRequest) ProtoMessage() {} func (x *LastCommitForPathRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[34] + mi := &file_commit_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2895,7 +2980,7 @@ func (x *LastCommitForPathRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LastCommitForPathRequest.ProtoReflect.Descriptor instead. func (*LastCommitForPathRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{34} + return file_commit_proto_rawDescGZIP(), []int{35} } func (x *LastCommitForPathRequest) GetRepository() *Repository { @@ -2946,7 +3031,7 @@ type LastCommitForPathResponse struct { func (x *LastCommitForPathResponse) Reset() { *x = LastCommitForPathResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[35] + mi := &file_commit_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2959,7 +3044,7 @@ func (x *LastCommitForPathResponse) String() string { func (*LastCommitForPathResponse) ProtoMessage() {} func (x *LastCommitForPathResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[35] + mi := &file_commit_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2972,7 +3057,7 @@ func (x *LastCommitForPathResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LastCommitForPathResponse.ProtoReflect.Descriptor instead. func (*LastCommitForPathResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{35} + return file_commit_proto_rawDescGZIP(), []int{36} } func (x *LastCommitForPathResponse) GetCommit() *GitCommit { @@ -3009,7 +3094,7 @@ type ListLastCommitsForTreeRequest struct { func (x *ListLastCommitsForTreeRequest) Reset() { *x = ListLastCommitsForTreeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[36] + mi := &file_commit_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3022,7 +3107,7 @@ func (x *ListLastCommitsForTreeRequest) String() string { func (*ListLastCommitsForTreeRequest) ProtoMessage() {} func (x *ListLastCommitsForTreeRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[36] + mi := &file_commit_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3035,7 +3120,7 @@ func (x *ListLastCommitsForTreeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLastCommitsForTreeRequest.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{36} + return file_commit_proto_rawDescGZIP(), []int{37} } func (x *ListLastCommitsForTreeRequest) GetRepository() *Repository { @@ -3101,7 +3186,7 @@ type ListLastCommitsForTreeResponse struct { func (x *ListLastCommitsForTreeResponse) Reset() { *x = ListLastCommitsForTreeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[37] + mi := &file_commit_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3114,7 +3199,7 @@ func (x *ListLastCommitsForTreeResponse) String() string { func (*ListLastCommitsForTreeResponse) ProtoMessage() {} func (x *ListLastCommitsForTreeResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[37] + mi := &file_commit_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3127,7 +3212,7 @@ func (x *ListLastCommitsForTreeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLastCommitsForTreeResponse.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{37} + return file_commit_proto_rawDescGZIP(), []int{38} } func (x *ListLastCommitsForTreeResponse) GetCommits() []*ListLastCommitsForTreeResponse_CommitForTree { @@ -3162,7 +3247,7 @@ type CommitsByMessageRequest struct { func (x *CommitsByMessageRequest) Reset() { *x = CommitsByMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[38] + mi := &file_commit_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3175,7 +3260,7 @@ func (x *CommitsByMessageRequest) String() string { func (*CommitsByMessageRequest) ProtoMessage() {} func (x *CommitsByMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[38] + mi := &file_commit_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3188,7 +3273,7 @@ func (x *CommitsByMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsByMessageRequest.ProtoReflect.Descriptor instead. func (*CommitsByMessageRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{38} + return file_commit_proto_rawDescGZIP(), []int{39} } func (x *CommitsByMessageRequest) GetRepository() *Repository { @@ -3253,7 +3338,7 @@ type CommitsByMessageResponse struct { func (x *CommitsByMessageResponse) Reset() { *x = CommitsByMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[39] + mi := &file_commit_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3266,7 +3351,7 @@ func (x *CommitsByMessageResponse) String() string { func (*CommitsByMessageResponse) ProtoMessage() {} func (x *CommitsByMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[39] + mi := &file_commit_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3279,7 +3364,7 @@ func (x *CommitsByMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitsByMessageResponse.ProtoReflect.Descriptor instead. func (*CommitsByMessageResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{39} + return file_commit_proto_rawDescGZIP(), []int{40} } func (x *CommitsByMessageResponse) GetCommits() []*GitCommit { @@ -3304,7 +3389,7 @@ type FilterShasWithSignaturesRequest struct { func (x *FilterShasWithSignaturesRequest) Reset() { *x = FilterShasWithSignaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[40] + mi := &file_commit_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3317,7 +3402,7 @@ func (x *FilterShasWithSignaturesRequest) String() string { func (*FilterShasWithSignaturesRequest) ProtoMessage() {} func (x *FilterShasWithSignaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[40] + mi := &file_commit_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3330,7 +3415,7 @@ func (x *FilterShasWithSignaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterShasWithSignaturesRequest.ProtoReflect.Descriptor instead. func (*FilterShasWithSignaturesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{40} + return file_commit_proto_rawDescGZIP(), []int{41} } func (x *FilterShasWithSignaturesRequest) GetRepository() *Repository { @@ -3360,7 +3445,7 @@ type FilterShasWithSignaturesResponse struct { func (x *FilterShasWithSignaturesResponse) Reset() { *x = FilterShasWithSignaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[41] + mi := &file_commit_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3373,7 +3458,7 @@ func (x *FilterShasWithSignaturesResponse) String() string { func (*FilterShasWithSignaturesResponse) ProtoMessage() {} func (x *FilterShasWithSignaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[41] + mi := &file_commit_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3386,7 +3471,7 @@ func (x *FilterShasWithSignaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FilterShasWithSignaturesResponse.ProtoReflect.Descriptor instead. func (*FilterShasWithSignaturesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{41} + return file_commit_proto_rawDescGZIP(), []int{42} } func (x *FilterShasWithSignaturesResponse) GetShas() [][]byte { @@ -3411,7 +3496,7 @@ type ExtractCommitSignatureRequest struct { func (x *ExtractCommitSignatureRequest) Reset() { *x = ExtractCommitSignatureRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[42] + mi := &file_commit_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3424,7 +3509,7 @@ func (x *ExtractCommitSignatureRequest) String() string { func (*ExtractCommitSignatureRequest) ProtoMessage() {} func (x *ExtractCommitSignatureRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[42] + mi := &file_commit_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3437,7 +3522,7 @@ func (x *ExtractCommitSignatureRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtractCommitSignatureRequest.ProtoReflect.Descriptor instead. func (*ExtractCommitSignatureRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{42} + return file_commit_proto_rawDescGZIP(), []int{43} } func (x *ExtractCommitSignatureRequest) GetRepository() *Repository { @@ -3470,7 +3555,7 @@ type ExtractCommitSignatureResponse struct { func (x *ExtractCommitSignatureResponse) Reset() { *x = ExtractCommitSignatureResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[43] + mi := &file_commit_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3483,7 +3568,7 @@ func (x *ExtractCommitSignatureResponse) String() string { func (*ExtractCommitSignatureResponse) ProtoMessage() {} func (x *ExtractCommitSignatureResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[43] + mi := &file_commit_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3496,7 +3581,7 @@ func (x *ExtractCommitSignatureResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExtractCommitSignatureResponse.ProtoReflect.Descriptor instead. func (*ExtractCommitSignatureResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{43} + return file_commit_proto_rawDescGZIP(), []int{44} } func (x *ExtractCommitSignatureResponse) GetSignature() []byte { @@ -3528,7 +3613,7 @@ type GetCommitSignaturesRequest struct { func (x *GetCommitSignaturesRequest) Reset() { *x = GetCommitSignaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[44] + mi := &file_commit_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3541,7 +3626,7 @@ func (x *GetCommitSignaturesRequest) String() string { func (*GetCommitSignaturesRequest) ProtoMessage() {} func (x *GetCommitSignaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[44] + mi := &file_commit_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3554,7 +3639,7 @@ func (x *GetCommitSignaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitSignaturesRequest.ProtoReflect.Descriptor instead. func (*GetCommitSignaturesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{44} + return file_commit_proto_rawDescGZIP(), []int{45} } func (x *GetCommitSignaturesRequest) GetRepository() *Repository { @@ -3590,7 +3675,7 @@ type GetCommitSignaturesResponse struct { func (x *GetCommitSignaturesResponse) Reset() { *x = GetCommitSignaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[45] + mi := &file_commit_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3603,7 +3688,7 @@ func (x *GetCommitSignaturesResponse) String() string { func (*GetCommitSignaturesResponse) ProtoMessage() {} func (x *GetCommitSignaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[45] + mi := &file_commit_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3616,7 +3701,7 @@ func (x *GetCommitSignaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitSignaturesResponse.ProtoReflect.Descriptor instead. func (*GetCommitSignaturesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{45} + return file_commit_proto_rawDescGZIP(), []int{46} } func (x *GetCommitSignaturesResponse) GetCommitId() string { @@ -3662,7 +3747,7 @@ type GetCommitMessagesRequest struct { func (x *GetCommitMessagesRequest) Reset() { *x = GetCommitMessagesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[46] + mi := &file_commit_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3675,7 +3760,7 @@ func (x *GetCommitMessagesRequest) String() string { func (*GetCommitMessagesRequest) ProtoMessage() {} func (x *GetCommitMessagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[46] + mi := &file_commit_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3688,7 +3773,7 @@ func (x *GetCommitMessagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitMessagesRequest.ProtoReflect.Descriptor instead. func (*GetCommitMessagesRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{46} + return file_commit_proto_rawDescGZIP(), []int{47} } func (x *GetCommitMessagesRequest) GetRepository() *Repository { @@ -3720,7 +3805,7 @@ type GetCommitMessagesResponse struct { func (x *GetCommitMessagesResponse) Reset() { *x = GetCommitMessagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[47] + mi := &file_commit_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3733,7 +3818,7 @@ func (x *GetCommitMessagesResponse) String() string { func (*GetCommitMessagesResponse) ProtoMessage() {} func (x *GetCommitMessagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[47] + mi := &file_commit_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3746,7 +3831,7 @@ func (x *GetCommitMessagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCommitMessagesResponse.ProtoReflect.Descriptor instead. func (*GetCommitMessagesResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{47} + return file_commit_proto_rawDescGZIP(), []int{48} } func (x *GetCommitMessagesResponse) GetCommitId() string { @@ -3782,7 +3867,7 @@ type CheckObjectsExistRequest struct { func (x *CheckObjectsExistRequest) Reset() { *x = CheckObjectsExistRequest{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[48] + mi := &file_commit_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3795,7 +3880,7 @@ func (x *CheckObjectsExistRequest) String() string { func (*CheckObjectsExistRequest) ProtoMessage() {} func (x *CheckObjectsExistRequest) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[48] + mi := &file_commit_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3808,7 +3893,7 @@ func (x *CheckObjectsExistRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckObjectsExistRequest.ProtoReflect.Descriptor instead. func (*CheckObjectsExistRequest) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{48} + return file_commit_proto_rawDescGZIP(), []int{49} } func (x *CheckObjectsExistRequest) GetRepository() *Repository { @@ -3838,7 +3923,7 @@ type CheckObjectsExistResponse struct { func (x *CheckObjectsExistResponse) Reset() { *x = CheckObjectsExistResponse{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[49] + mi := &file_commit_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3851,7 +3936,7 @@ func (x *CheckObjectsExistResponse) String() string { func (*CheckObjectsExistResponse) ProtoMessage() {} func (x *CheckObjectsExistResponse) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[49] + mi := &file_commit_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3864,7 +3949,7 @@ func (x *CheckObjectsExistResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckObjectsExistResponse.ProtoReflect.Descriptor instead. func (*CheckObjectsExistResponse) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{49} + return file_commit_proto_rawDescGZIP(), []int{50} } func (x *CheckObjectsExistResponse) GetRevisions() []*CheckObjectsExistResponse_RevisionExistence { @@ -3889,7 +3974,7 @@ type ListCommitsByRefNameResponse_CommitForRef struct { func (x *ListCommitsByRefNameResponse_CommitForRef) Reset() { *x = ListCommitsByRefNameResponse_CommitForRef{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[50] + mi := &file_commit_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3902,7 +3987,7 @@ func (x *ListCommitsByRefNameResponse_CommitForRef) String() string { func (*ListCommitsByRefNameResponse_CommitForRef) ProtoMessage() {} func (x *ListCommitsByRefNameResponse_CommitForRef) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[50] + mi := &file_commit_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3954,7 +4039,7 @@ type CommitLanguagesResponse_Language struct { func (x *CommitLanguagesResponse_Language) Reset() { *x = CommitLanguagesResponse_Language{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[51] + mi := &file_commit_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3967,7 +4052,7 @@ func (x *CommitLanguagesResponse_Language) String() string { func (*CommitLanguagesResponse_Language) ProtoMessage() {} func (x *CommitLanguagesResponse_Language) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[51] + mi := &file_commit_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4011,6 +4096,56 @@ func (x *CommitLanguagesResponse_Language) GetBytes() uint64 { return 0 } +// OutOfRangeError indicates that the specified file range that is to be blamed exceeds the length of the blamed +// file. +type RawBlameError_OutOfRangeError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ActualLines contains the actual number of lines that can be blamed in the file. + ActualLines uint64 `protobuf:"varint,1,opt,name=actual_lines,json=actualLines,proto3" json:"actual_lines,omitempty"` +} + +func (x *RawBlameError_OutOfRangeError) Reset() { + *x = RawBlameError_OutOfRangeError{} + if protoimpl.UnsafeEnabled { + mi := &file_commit_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RawBlameError_OutOfRangeError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RawBlameError_OutOfRangeError) ProtoMessage() {} + +func (x *RawBlameError_OutOfRangeError) ProtoReflect() protoreflect.Message { + mi := &file_commit_proto_msgTypes[53] + 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 RawBlameError_OutOfRangeError.ProtoReflect.Descriptor instead. +func (*RawBlameError_OutOfRangeError) Descriptor() ([]byte, []int) { + return file_commit_proto_rawDescGZIP(), []int{34, 0} +} + +func (x *RawBlameError_OutOfRangeError) GetActualLines() uint64 { + if x != nil { + return x.ActualLines + } + return 0 +} + // This comment is left unintentionally blank. type ListLastCommitsForTreeResponse_CommitForTree struct { state protoimpl.MessageState @@ -4026,7 +4161,7 @@ type ListLastCommitsForTreeResponse_CommitForTree struct { func (x *ListLastCommitsForTreeResponse_CommitForTree) Reset() { *x = ListLastCommitsForTreeResponse_CommitForTree{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[52] + mi := &file_commit_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4039,7 +4174,7 @@ func (x *ListLastCommitsForTreeResponse_CommitForTree) String() string { func (*ListLastCommitsForTreeResponse_CommitForTree) ProtoMessage() {} func (x *ListLastCommitsForTreeResponse_CommitForTree) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[52] + mi := &file_commit_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4052,7 +4187,7 @@ func (x *ListLastCommitsForTreeResponse_CommitForTree) ProtoReflect() protorefle // Deprecated: Use ListLastCommitsForTreeResponse_CommitForTree.ProtoReflect.Descriptor instead. func (*ListLastCommitsForTreeResponse_CommitForTree) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{37, 0} + return file_commit_proto_rawDescGZIP(), []int{38, 0} } func (x *ListLastCommitsForTreeResponse_CommitForTree) GetCommit() *GitCommit { @@ -4084,7 +4219,7 @@ type CheckObjectsExistResponse_RevisionExistence struct { func (x *CheckObjectsExistResponse_RevisionExistence) Reset() { *x = CheckObjectsExistResponse_RevisionExistence{} if protoimpl.UnsafeEnabled { - mi := &file_commit_proto_msgTypes[53] + mi := &file_commit_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4097,7 +4232,7 @@ func (x *CheckObjectsExistResponse_RevisionExistence) String() string { func (*CheckObjectsExistResponse_RevisionExistence) ProtoMessage() {} func (x *CheckObjectsExistResponse_RevisionExistence) ProtoReflect() protoreflect.Message { - mi := &file_commit_proto_msgTypes[53] + mi := &file_commit_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4110,7 +4245,7 @@ func (x *CheckObjectsExistResponse_RevisionExistence) ProtoReflect() protoreflec // Deprecated: Use CheckObjectsExistResponse_RevisionExistence.ProtoReflect.Descriptor instead. func (*CheckObjectsExistResponse_RevisionExistence) Descriptor() ([]byte, []int) { - return file_commit_proto_rawDescGZIP(), []int{49, 0} + return file_commit_proto_rawDescGZIP(), []int{50, 0} } func (x *CheckObjectsExistResponse_RevisionExistence) GetName() []byte { @@ -4498,297 +4633,311 @@ var file_commit_proto_rawDesc = []byte{ 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x26, 0x0a, 0x10, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xed, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, - 0x73, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x46, 0x0a, 0x19, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0xa4, 0x02, 0x0a, 0x1d, 0x4c, - 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, - 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x74, 0x61, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x0e, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x6f, 0x74, + 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x61, 0x74, 0x68, 0x4e, + 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x49, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x4f, 0x66, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x1a, 0x34, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, + 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x61, 0x63, 0x74, + 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0xed, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, - 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x1a, 0x65, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, - 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x85, 0x02, 0x0a, 0x17, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, - 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6f, 0x0a, 0x1f, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x36, 0x0a, - 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x76, 0x0a, 0x1d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x73, 0x22, 0x46, 0x0a, 0x19, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, + 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0xa4, 0x02, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x10, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x0f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x73, 0x70, + 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0xd7, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x1a, 0x65, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x54, 0x72, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x61, 0x74, 0x68, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x85, 0x02, 0x0a, 0x17, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, - 0x1e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x75, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x49, 0x64, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0x6f, 0x0a, 0x1f, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x68, 0x61, 0x73, 0x22, 0x36, 0x0a, 0x20, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, + 0x73, 0x68, 0x61, 0x73, 0x22, 0x76, 0x0a, 0x1d, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, + 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x1e, + 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x22, 0x75, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x49, 0x64, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, + 0x12, 0x42, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x65, 0x78, - 0x74, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x52, 0x06, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x47, 0x4e, 0x45, - 0x52, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x49, 0x47, 0x4e, - 0x45, 0x52, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, 0x22, 0x73, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, - 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x73, - 0x22, 0x52, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x72, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x19, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x32, 0xf1, 0x10, 0x0a, 0x0d, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x59, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, - 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x2e, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x52, 0x06, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x12, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, + 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x49, 0x47, 0x4e, 0x45, + 0x52, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, 0x22, 0x73, 0x0a, 0x18, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, + 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x73, 0x22, + 0x52, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x72, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x38, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x04, 0x98, 0xc6, 0x2c, 0x01, 0x52, 0x0a, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x19, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x32, 0xf1, 0x10, 0x0a, 0x0d, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x59, 0x0a, + 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, + 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, 0x6e, + 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, 0x41, - 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x73, - 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4a, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, - 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x6c, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, - 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, - 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4a, 0x0a, 0x09, 0x54, 0x72, 0x65, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, + 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, + 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x6c, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, + 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, + 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, + 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x69, 0x76, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, + 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, - 0x12, 0x4a, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x18, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0a, - 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, - 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x46, 0x69, 0x6e, - 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, + 0x4a, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0a, 0x46, + 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x4e, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x59, 0x0a, 0x0e, 0x46, 0x69, 0x6e, 0x64, + 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, - 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, - 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x12, 0x47, 0x0a, 0x08, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x12, 0x17, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x4c, - 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x71, 0x0a, - 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, - 0x12, 0x5f, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, + 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 0x12, 0x47, 0x0a, 0x08, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x52, 0x61, 0x77, 0x42, 0x6c, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x11, 0x4c, 0x61, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x50, 0x61, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x12, 0x71, 0x0a, 0x16, + 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, + 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, + 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, + 0x5f, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, - 0x01, 0x12, 0x5f, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, - 0x42, 0x79, 0x4f, 0x69, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, + 0x12, 0x5f, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, + 0x79, 0x4f, 0x69, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x4f, 0x69, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, - 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, - 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, - 0x79, 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, - 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, - 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, - 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x13, 0x47, 0x65, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, + 0x01, 0x12, 0x6b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, + 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, + 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x73, 0x42, 0x79, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x79, + 0x0a, 0x18, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, + 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x73, 0x57, 0x69, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, - 0x08, 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, - 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x11, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x42, 0x34, - 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, - 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, - 0x31, 0x36, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, + 0x02, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xfa, + 0x97, 0x28, 0x02, 0x08, 0x02, 0x30, 0x01, 0x12, 0x64, 0x0a, 0x11, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x06, 0xfa, 0x97, 0x28, 0x02, 0x08, 0x02, 0x28, 0x01, 0x30, 0x01, 0x42, 0x34, 0x5a, + 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, + 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, + 0x36, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4804,7 +4953,7 @@ func file_commit_proto_rawDescGZIP() []byte { } var file_commit_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_commit_proto_msgTypes = make([]protoimpl.MessageInfo, 54) +var file_commit_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_commit_proto_goTypes = []interface{}{ (ListCommitsRequest_Order)(0), // 0: gitaly.ListCommitsRequest.Order (TreeEntryResponse_ObjectType)(0), // 1: gitaly.TreeEntryResponse.ObjectType @@ -4847,150 +4996,155 @@ var file_commit_proto_goTypes = []interface{}{ (*CommitLanguagesResponse)(nil), // 38: gitaly.CommitLanguagesResponse (*RawBlameRequest)(nil), // 39: gitaly.RawBlameRequest (*RawBlameResponse)(nil), // 40: gitaly.RawBlameResponse - (*LastCommitForPathRequest)(nil), // 41: gitaly.LastCommitForPathRequest - (*LastCommitForPathResponse)(nil), // 42: gitaly.LastCommitForPathResponse - (*ListLastCommitsForTreeRequest)(nil), // 43: gitaly.ListLastCommitsForTreeRequest - (*ListLastCommitsForTreeResponse)(nil), // 44: gitaly.ListLastCommitsForTreeResponse - (*CommitsByMessageRequest)(nil), // 45: gitaly.CommitsByMessageRequest - (*CommitsByMessageResponse)(nil), // 46: gitaly.CommitsByMessageResponse - (*FilterShasWithSignaturesRequest)(nil), // 47: gitaly.FilterShasWithSignaturesRequest - (*FilterShasWithSignaturesResponse)(nil), // 48: gitaly.FilterShasWithSignaturesResponse - (*ExtractCommitSignatureRequest)(nil), // 49: gitaly.ExtractCommitSignatureRequest - (*ExtractCommitSignatureResponse)(nil), // 50: gitaly.ExtractCommitSignatureResponse - (*GetCommitSignaturesRequest)(nil), // 51: gitaly.GetCommitSignaturesRequest - (*GetCommitSignaturesResponse)(nil), // 52: gitaly.GetCommitSignaturesResponse - (*GetCommitMessagesRequest)(nil), // 53: gitaly.GetCommitMessagesRequest - (*GetCommitMessagesResponse)(nil), // 54: gitaly.GetCommitMessagesResponse - (*CheckObjectsExistRequest)(nil), // 55: gitaly.CheckObjectsExistRequest - (*CheckObjectsExistResponse)(nil), // 56: gitaly.CheckObjectsExistResponse - (*ListCommitsByRefNameResponse_CommitForRef)(nil), // 57: gitaly.ListCommitsByRefNameResponse.CommitForRef - (*CommitLanguagesResponse_Language)(nil), // 58: gitaly.CommitLanguagesResponse.Language - (*ListLastCommitsForTreeResponse_CommitForTree)(nil), // 59: gitaly.ListLastCommitsForTreeResponse.CommitForTree - (*CheckObjectsExistResponse_RevisionExistence)(nil), // 60: gitaly.CheckObjectsExistResponse.RevisionExistence - (*Repository)(nil), // 61: gitaly.Repository - (*PaginationParameter)(nil), // 62: gitaly.PaginationParameter - (*timestamppb.Timestamp)(nil), // 63: google.protobuf.Timestamp - (*GitCommit)(nil), // 64: gitaly.GitCommit - (*GlobalOptions)(nil), // 65: gitaly.GlobalOptions - (*PaginationCursor)(nil), // 66: gitaly.PaginationCursor - (*ResolveRevisionError)(nil), // 67: gitaly.ResolveRevisionError - (*PathError)(nil), // 68: gitaly.PathError + (*RawBlameError)(nil), // 41: gitaly.RawBlameError + (*LastCommitForPathRequest)(nil), // 42: gitaly.LastCommitForPathRequest + (*LastCommitForPathResponse)(nil), // 43: gitaly.LastCommitForPathResponse + (*ListLastCommitsForTreeRequest)(nil), // 44: gitaly.ListLastCommitsForTreeRequest + (*ListLastCommitsForTreeResponse)(nil), // 45: gitaly.ListLastCommitsForTreeResponse + (*CommitsByMessageRequest)(nil), // 46: gitaly.CommitsByMessageRequest + (*CommitsByMessageResponse)(nil), // 47: gitaly.CommitsByMessageResponse + (*FilterShasWithSignaturesRequest)(nil), // 48: gitaly.FilterShasWithSignaturesRequest + (*FilterShasWithSignaturesResponse)(nil), // 49: gitaly.FilterShasWithSignaturesResponse + (*ExtractCommitSignatureRequest)(nil), // 50: gitaly.ExtractCommitSignatureRequest + (*ExtractCommitSignatureResponse)(nil), // 51: gitaly.ExtractCommitSignatureResponse + (*GetCommitSignaturesRequest)(nil), // 52: gitaly.GetCommitSignaturesRequest + (*GetCommitSignaturesResponse)(nil), // 53: gitaly.GetCommitSignaturesResponse + (*GetCommitMessagesRequest)(nil), // 54: gitaly.GetCommitMessagesRequest + (*GetCommitMessagesResponse)(nil), // 55: gitaly.GetCommitMessagesResponse + (*CheckObjectsExistRequest)(nil), // 56: gitaly.CheckObjectsExistRequest + (*CheckObjectsExistResponse)(nil), // 57: gitaly.CheckObjectsExistResponse + (*ListCommitsByRefNameResponse_CommitForRef)(nil), // 58: gitaly.ListCommitsByRefNameResponse.CommitForRef + (*CommitLanguagesResponse_Language)(nil), // 59: gitaly.CommitLanguagesResponse.Language + (*RawBlameError_OutOfRangeError)(nil), // 60: gitaly.RawBlameError.OutOfRangeError + (*ListLastCommitsForTreeResponse_CommitForTree)(nil), // 61: gitaly.ListLastCommitsForTreeResponse.CommitForTree + (*CheckObjectsExistResponse_RevisionExistence)(nil), // 62: gitaly.CheckObjectsExistResponse.RevisionExistence + (*Repository)(nil), // 63: gitaly.Repository + (*PaginationParameter)(nil), // 64: gitaly.PaginationParameter + (*timestamppb.Timestamp)(nil), // 65: google.protobuf.Timestamp + (*GitCommit)(nil), // 66: gitaly.GitCommit + (*GlobalOptions)(nil), // 67: gitaly.GlobalOptions + (*PaginationCursor)(nil), // 68: gitaly.PaginationCursor + (*ResolveRevisionError)(nil), // 69: gitaly.ResolveRevisionError + (*PathError)(nil), // 70: gitaly.PathError + (*PathNotFoundError)(nil), // 71: gitaly.PathNotFoundError } var file_commit_proto_depIdxs = []int32{ - 61, // 0: gitaly.ListCommitsRequest.repository:type_name -> gitaly.Repository - 62, // 1: gitaly.ListCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter + 63, // 0: gitaly.ListCommitsRequest.repository:type_name -> gitaly.Repository + 64, // 1: gitaly.ListCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter 0, // 2: gitaly.ListCommitsRequest.order:type_name -> gitaly.ListCommitsRequest.Order - 63, // 3: gitaly.ListCommitsRequest.after:type_name -> google.protobuf.Timestamp - 63, // 4: gitaly.ListCommitsRequest.before:type_name -> google.protobuf.Timestamp - 64, // 5: gitaly.ListCommitsResponse.commits:type_name -> gitaly.GitCommit - 61, // 6: gitaly.ListAllCommitsRequest.repository:type_name -> gitaly.Repository - 62, // 7: gitaly.ListAllCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter - 64, // 8: gitaly.ListAllCommitsResponse.commits:type_name -> gitaly.GitCommit - 61, // 9: gitaly.CommitStatsRequest.repository:type_name -> gitaly.Repository - 61, // 10: gitaly.CommitIsAncestorRequest.repository:type_name -> gitaly.Repository - 61, // 11: gitaly.TreeEntryRequest.repository:type_name -> gitaly.Repository + 65, // 3: gitaly.ListCommitsRequest.after:type_name -> google.protobuf.Timestamp + 65, // 4: gitaly.ListCommitsRequest.before:type_name -> google.protobuf.Timestamp + 66, // 5: gitaly.ListCommitsResponse.commits:type_name -> gitaly.GitCommit + 63, // 6: gitaly.ListAllCommitsRequest.repository:type_name -> gitaly.Repository + 64, // 7: gitaly.ListAllCommitsRequest.pagination_params:type_name -> gitaly.PaginationParameter + 66, // 8: gitaly.ListAllCommitsResponse.commits:type_name -> gitaly.GitCommit + 63, // 9: gitaly.CommitStatsRequest.repository:type_name -> gitaly.Repository + 63, // 10: gitaly.CommitIsAncestorRequest.repository:type_name -> gitaly.Repository + 63, // 11: gitaly.TreeEntryRequest.repository:type_name -> gitaly.Repository 1, // 12: gitaly.TreeEntryResponse.type:type_name -> gitaly.TreeEntryResponse.ObjectType - 61, // 13: gitaly.CountCommitsRequest.repository:type_name -> gitaly.Repository - 63, // 14: gitaly.CountCommitsRequest.after:type_name -> google.protobuf.Timestamp - 63, // 15: gitaly.CountCommitsRequest.before:type_name -> google.protobuf.Timestamp - 65, // 16: gitaly.CountCommitsRequest.global_options:type_name -> gitaly.GlobalOptions - 61, // 17: gitaly.CountDivergingCommitsRequest.repository:type_name -> gitaly.Repository + 63, // 13: gitaly.CountCommitsRequest.repository:type_name -> gitaly.Repository + 65, // 14: gitaly.CountCommitsRequest.after:type_name -> google.protobuf.Timestamp + 65, // 15: gitaly.CountCommitsRequest.before:type_name -> google.protobuf.Timestamp + 67, // 16: gitaly.CountCommitsRequest.global_options:type_name -> gitaly.GlobalOptions + 63, // 17: gitaly.CountDivergingCommitsRequest.repository:type_name -> gitaly.Repository 2, // 18: gitaly.TreeEntry.type:type_name -> gitaly.TreeEntry.EntryType - 61, // 19: gitaly.GetTreeEntriesRequest.repository:type_name -> gitaly.Repository + 63, // 19: gitaly.GetTreeEntriesRequest.repository:type_name -> gitaly.Repository 3, // 20: gitaly.GetTreeEntriesRequest.sort:type_name -> gitaly.GetTreeEntriesRequest.SortBy - 62, // 21: gitaly.GetTreeEntriesRequest.pagination_params:type_name -> gitaly.PaginationParameter + 64, // 21: gitaly.GetTreeEntriesRequest.pagination_params:type_name -> gitaly.PaginationParameter 21, // 22: gitaly.GetTreeEntriesResponse.entries:type_name -> gitaly.TreeEntry - 66, // 23: gitaly.GetTreeEntriesResponse.pagination_cursor:type_name -> gitaly.PaginationCursor - 67, // 24: gitaly.GetTreeEntriesError.resolve_tree:type_name -> gitaly.ResolveRevisionError - 68, // 25: gitaly.GetTreeEntriesError.path:type_name -> gitaly.PathError - 61, // 26: gitaly.ListFilesRequest.repository:type_name -> gitaly.Repository - 61, // 27: gitaly.FindCommitRequest.repository:type_name -> gitaly.Repository - 64, // 28: gitaly.FindCommitResponse.commit:type_name -> gitaly.GitCommit - 61, // 29: gitaly.ListCommitsByOidRequest.repository:type_name -> gitaly.Repository - 64, // 30: gitaly.ListCommitsByOidResponse.commits:type_name -> gitaly.GitCommit - 61, // 31: gitaly.ListCommitsByRefNameRequest.repository:type_name -> gitaly.Repository - 57, // 32: gitaly.ListCommitsByRefNameResponse.commit_refs:type_name -> gitaly.ListCommitsByRefNameResponse.CommitForRef - 61, // 33: gitaly.FindAllCommitsRequest.repository:type_name -> gitaly.Repository + 68, // 23: gitaly.GetTreeEntriesResponse.pagination_cursor:type_name -> gitaly.PaginationCursor + 69, // 24: gitaly.GetTreeEntriesError.resolve_tree:type_name -> gitaly.ResolveRevisionError + 70, // 25: gitaly.GetTreeEntriesError.path:type_name -> gitaly.PathError + 63, // 26: gitaly.ListFilesRequest.repository:type_name -> gitaly.Repository + 63, // 27: gitaly.FindCommitRequest.repository:type_name -> gitaly.Repository + 66, // 28: gitaly.FindCommitResponse.commit:type_name -> gitaly.GitCommit + 63, // 29: gitaly.ListCommitsByOidRequest.repository:type_name -> gitaly.Repository + 66, // 30: gitaly.ListCommitsByOidResponse.commits:type_name -> gitaly.GitCommit + 63, // 31: gitaly.ListCommitsByRefNameRequest.repository:type_name -> gitaly.Repository + 58, // 32: gitaly.ListCommitsByRefNameResponse.commit_refs:type_name -> gitaly.ListCommitsByRefNameResponse.CommitForRef + 63, // 33: gitaly.FindAllCommitsRequest.repository:type_name -> gitaly.Repository 4, // 34: gitaly.FindAllCommitsRequest.order:type_name -> gitaly.FindAllCommitsRequest.Order - 64, // 35: gitaly.FindAllCommitsResponse.commits:type_name -> gitaly.GitCommit - 61, // 36: gitaly.FindCommitsRequest.repository:type_name -> gitaly.Repository - 63, // 37: gitaly.FindCommitsRequest.after:type_name -> google.protobuf.Timestamp - 63, // 38: gitaly.FindCommitsRequest.before:type_name -> google.protobuf.Timestamp + 66, // 35: gitaly.FindAllCommitsResponse.commits:type_name -> gitaly.GitCommit + 63, // 36: gitaly.FindCommitsRequest.repository:type_name -> gitaly.Repository + 65, // 37: gitaly.FindCommitsRequest.after:type_name -> google.protobuf.Timestamp + 65, // 38: gitaly.FindCommitsRequest.before:type_name -> google.protobuf.Timestamp 5, // 39: gitaly.FindCommitsRequest.order:type_name -> gitaly.FindCommitsRequest.Order - 65, // 40: gitaly.FindCommitsRequest.global_options:type_name -> gitaly.GlobalOptions - 64, // 41: gitaly.FindCommitsResponse.commits:type_name -> gitaly.GitCommit - 61, // 42: gitaly.CommitLanguagesRequest.repository:type_name -> gitaly.Repository - 58, // 43: gitaly.CommitLanguagesResponse.languages:type_name -> gitaly.CommitLanguagesResponse.Language - 61, // 44: gitaly.RawBlameRequest.repository:type_name -> gitaly.Repository - 61, // 45: gitaly.LastCommitForPathRequest.repository:type_name -> gitaly.Repository - 65, // 46: gitaly.LastCommitForPathRequest.global_options:type_name -> gitaly.GlobalOptions - 64, // 47: gitaly.LastCommitForPathResponse.commit:type_name -> gitaly.GitCommit - 61, // 48: gitaly.ListLastCommitsForTreeRequest.repository:type_name -> gitaly.Repository - 65, // 49: gitaly.ListLastCommitsForTreeRequest.global_options:type_name -> gitaly.GlobalOptions - 59, // 50: gitaly.ListLastCommitsForTreeResponse.commits:type_name -> gitaly.ListLastCommitsForTreeResponse.CommitForTree - 61, // 51: gitaly.CommitsByMessageRequest.repository:type_name -> gitaly.Repository - 65, // 52: gitaly.CommitsByMessageRequest.global_options:type_name -> gitaly.GlobalOptions - 64, // 53: gitaly.CommitsByMessageResponse.commits:type_name -> gitaly.GitCommit - 61, // 54: gitaly.FilterShasWithSignaturesRequest.repository:type_name -> gitaly.Repository - 61, // 55: gitaly.ExtractCommitSignatureRequest.repository:type_name -> gitaly.Repository - 61, // 56: gitaly.GetCommitSignaturesRequest.repository:type_name -> gitaly.Repository - 6, // 57: gitaly.GetCommitSignaturesResponse.signer:type_name -> gitaly.GetCommitSignaturesResponse.Signer - 61, // 58: gitaly.GetCommitMessagesRequest.repository:type_name -> gitaly.Repository - 61, // 59: gitaly.CheckObjectsExistRequest.repository:type_name -> gitaly.Repository - 60, // 60: gitaly.CheckObjectsExistResponse.revisions:type_name -> gitaly.CheckObjectsExistResponse.RevisionExistence - 64, // 61: gitaly.ListCommitsByRefNameResponse.CommitForRef.commit:type_name -> gitaly.GitCommit - 64, // 62: gitaly.ListLastCommitsForTreeResponse.CommitForTree.commit:type_name -> gitaly.GitCommit - 7, // 63: gitaly.CommitService.ListCommits:input_type -> gitaly.ListCommitsRequest - 9, // 64: gitaly.CommitService.ListAllCommits:input_type -> gitaly.ListAllCommitsRequest - 13, // 65: gitaly.CommitService.CommitIsAncestor:input_type -> gitaly.CommitIsAncestorRequest - 15, // 66: gitaly.CommitService.TreeEntry:input_type -> gitaly.TreeEntryRequest - 17, // 67: gitaly.CommitService.CountCommits:input_type -> gitaly.CountCommitsRequest - 19, // 68: gitaly.CommitService.CountDivergingCommits:input_type -> gitaly.CountDivergingCommitsRequest - 22, // 69: gitaly.CommitService.GetTreeEntries:input_type -> gitaly.GetTreeEntriesRequest - 25, // 70: gitaly.CommitService.ListFiles:input_type -> gitaly.ListFilesRequest - 27, // 71: gitaly.CommitService.FindCommit:input_type -> gitaly.FindCommitRequest - 11, // 72: gitaly.CommitService.CommitStats:input_type -> gitaly.CommitStatsRequest - 33, // 73: gitaly.CommitService.FindAllCommits:input_type -> gitaly.FindAllCommitsRequest - 35, // 74: gitaly.CommitService.FindCommits:input_type -> gitaly.FindCommitsRequest - 37, // 75: gitaly.CommitService.CommitLanguages:input_type -> gitaly.CommitLanguagesRequest - 39, // 76: gitaly.CommitService.RawBlame:input_type -> gitaly.RawBlameRequest - 41, // 77: gitaly.CommitService.LastCommitForPath:input_type -> gitaly.LastCommitForPathRequest - 43, // 78: gitaly.CommitService.ListLastCommitsForTree:input_type -> gitaly.ListLastCommitsForTreeRequest - 45, // 79: gitaly.CommitService.CommitsByMessage:input_type -> gitaly.CommitsByMessageRequest - 29, // 80: gitaly.CommitService.ListCommitsByOid:input_type -> gitaly.ListCommitsByOidRequest - 31, // 81: gitaly.CommitService.ListCommitsByRefName:input_type -> gitaly.ListCommitsByRefNameRequest - 47, // 82: gitaly.CommitService.FilterShasWithSignatures:input_type -> gitaly.FilterShasWithSignaturesRequest - 51, // 83: gitaly.CommitService.GetCommitSignatures:input_type -> gitaly.GetCommitSignaturesRequest - 53, // 84: gitaly.CommitService.GetCommitMessages:input_type -> gitaly.GetCommitMessagesRequest - 55, // 85: gitaly.CommitService.CheckObjectsExist:input_type -> gitaly.CheckObjectsExistRequest - 8, // 86: gitaly.CommitService.ListCommits:output_type -> gitaly.ListCommitsResponse - 10, // 87: gitaly.CommitService.ListAllCommits:output_type -> gitaly.ListAllCommitsResponse - 14, // 88: gitaly.CommitService.CommitIsAncestor:output_type -> gitaly.CommitIsAncestorResponse - 16, // 89: gitaly.CommitService.TreeEntry:output_type -> gitaly.TreeEntryResponse - 18, // 90: gitaly.CommitService.CountCommits:output_type -> gitaly.CountCommitsResponse - 20, // 91: gitaly.CommitService.CountDivergingCommits:output_type -> gitaly.CountDivergingCommitsResponse - 23, // 92: gitaly.CommitService.GetTreeEntries:output_type -> gitaly.GetTreeEntriesResponse - 26, // 93: gitaly.CommitService.ListFiles:output_type -> gitaly.ListFilesResponse - 28, // 94: gitaly.CommitService.FindCommit:output_type -> gitaly.FindCommitResponse - 12, // 95: gitaly.CommitService.CommitStats:output_type -> gitaly.CommitStatsResponse - 34, // 96: gitaly.CommitService.FindAllCommits:output_type -> gitaly.FindAllCommitsResponse - 36, // 97: gitaly.CommitService.FindCommits:output_type -> gitaly.FindCommitsResponse - 38, // 98: gitaly.CommitService.CommitLanguages:output_type -> gitaly.CommitLanguagesResponse - 40, // 99: gitaly.CommitService.RawBlame:output_type -> gitaly.RawBlameResponse - 42, // 100: gitaly.CommitService.LastCommitForPath:output_type -> gitaly.LastCommitForPathResponse - 44, // 101: gitaly.CommitService.ListLastCommitsForTree:output_type -> gitaly.ListLastCommitsForTreeResponse - 46, // 102: gitaly.CommitService.CommitsByMessage:output_type -> gitaly.CommitsByMessageResponse - 30, // 103: gitaly.CommitService.ListCommitsByOid:output_type -> gitaly.ListCommitsByOidResponse - 32, // 104: gitaly.CommitService.ListCommitsByRefName:output_type -> gitaly.ListCommitsByRefNameResponse - 48, // 105: gitaly.CommitService.FilterShasWithSignatures:output_type -> gitaly.FilterShasWithSignaturesResponse - 52, // 106: gitaly.CommitService.GetCommitSignatures:output_type -> gitaly.GetCommitSignaturesResponse - 54, // 107: gitaly.CommitService.GetCommitMessages:output_type -> gitaly.GetCommitMessagesResponse - 56, // 108: gitaly.CommitService.CheckObjectsExist:output_type -> gitaly.CheckObjectsExistResponse - 86, // [86:109] is the sub-list for method output_type - 63, // [63:86] is the sub-list for method input_type - 63, // [63:63] is the sub-list for extension type_name - 63, // [63:63] is the sub-list for extension extendee - 0, // [0:63] is the sub-list for field type_name + 67, // 40: gitaly.FindCommitsRequest.global_options:type_name -> gitaly.GlobalOptions + 66, // 41: gitaly.FindCommitsResponse.commits:type_name -> gitaly.GitCommit + 63, // 42: gitaly.CommitLanguagesRequest.repository:type_name -> gitaly.Repository + 59, // 43: gitaly.CommitLanguagesResponse.languages:type_name -> gitaly.CommitLanguagesResponse.Language + 63, // 44: gitaly.RawBlameRequest.repository:type_name -> gitaly.Repository + 71, // 45: gitaly.RawBlameError.path_not_found:type_name -> gitaly.PathNotFoundError + 60, // 46: gitaly.RawBlameError.out_of_range:type_name -> gitaly.RawBlameError.OutOfRangeError + 63, // 47: gitaly.LastCommitForPathRequest.repository:type_name -> gitaly.Repository + 67, // 48: gitaly.LastCommitForPathRequest.global_options:type_name -> gitaly.GlobalOptions + 66, // 49: gitaly.LastCommitForPathResponse.commit:type_name -> gitaly.GitCommit + 63, // 50: gitaly.ListLastCommitsForTreeRequest.repository:type_name -> gitaly.Repository + 67, // 51: gitaly.ListLastCommitsForTreeRequest.global_options:type_name -> gitaly.GlobalOptions + 61, // 52: gitaly.ListLastCommitsForTreeResponse.commits:type_name -> gitaly.ListLastCommitsForTreeResponse.CommitForTree + 63, // 53: gitaly.CommitsByMessageRequest.repository:type_name -> gitaly.Repository + 67, // 54: gitaly.CommitsByMessageRequest.global_options:type_name -> gitaly.GlobalOptions + 66, // 55: gitaly.CommitsByMessageResponse.commits:type_name -> gitaly.GitCommit + 63, // 56: gitaly.FilterShasWithSignaturesRequest.repository:type_name -> gitaly.Repository + 63, // 57: gitaly.ExtractCommitSignatureRequest.repository:type_name -> gitaly.Repository + 63, // 58: gitaly.GetCommitSignaturesRequest.repository:type_name -> gitaly.Repository + 6, // 59: gitaly.GetCommitSignaturesResponse.signer:type_name -> gitaly.GetCommitSignaturesResponse.Signer + 63, // 60: gitaly.GetCommitMessagesRequest.repository:type_name -> gitaly.Repository + 63, // 61: gitaly.CheckObjectsExistRequest.repository:type_name -> gitaly.Repository + 62, // 62: gitaly.CheckObjectsExistResponse.revisions:type_name -> gitaly.CheckObjectsExistResponse.RevisionExistence + 66, // 63: gitaly.ListCommitsByRefNameResponse.CommitForRef.commit:type_name -> gitaly.GitCommit + 66, // 64: gitaly.ListLastCommitsForTreeResponse.CommitForTree.commit:type_name -> gitaly.GitCommit + 7, // 65: gitaly.CommitService.ListCommits:input_type -> gitaly.ListCommitsRequest + 9, // 66: gitaly.CommitService.ListAllCommits:input_type -> gitaly.ListAllCommitsRequest + 13, // 67: gitaly.CommitService.CommitIsAncestor:input_type -> gitaly.CommitIsAncestorRequest + 15, // 68: gitaly.CommitService.TreeEntry:input_type -> gitaly.TreeEntryRequest + 17, // 69: gitaly.CommitService.CountCommits:input_type -> gitaly.CountCommitsRequest + 19, // 70: gitaly.CommitService.CountDivergingCommits:input_type -> gitaly.CountDivergingCommitsRequest + 22, // 71: gitaly.CommitService.GetTreeEntries:input_type -> gitaly.GetTreeEntriesRequest + 25, // 72: gitaly.CommitService.ListFiles:input_type -> gitaly.ListFilesRequest + 27, // 73: gitaly.CommitService.FindCommit:input_type -> gitaly.FindCommitRequest + 11, // 74: gitaly.CommitService.CommitStats:input_type -> gitaly.CommitStatsRequest + 33, // 75: gitaly.CommitService.FindAllCommits:input_type -> gitaly.FindAllCommitsRequest + 35, // 76: gitaly.CommitService.FindCommits:input_type -> gitaly.FindCommitsRequest + 37, // 77: gitaly.CommitService.CommitLanguages:input_type -> gitaly.CommitLanguagesRequest + 39, // 78: gitaly.CommitService.RawBlame:input_type -> gitaly.RawBlameRequest + 42, // 79: gitaly.CommitService.LastCommitForPath:input_type -> gitaly.LastCommitForPathRequest + 44, // 80: gitaly.CommitService.ListLastCommitsForTree:input_type -> gitaly.ListLastCommitsForTreeRequest + 46, // 81: gitaly.CommitService.CommitsByMessage:input_type -> gitaly.CommitsByMessageRequest + 29, // 82: gitaly.CommitService.ListCommitsByOid:input_type -> gitaly.ListCommitsByOidRequest + 31, // 83: gitaly.CommitService.ListCommitsByRefName:input_type -> gitaly.ListCommitsByRefNameRequest + 48, // 84: gitaly.CommitService.FilterShasWithSignatures:input_type -> gitaly.FilterShasWithSignaturesRequest + 52, // 85: gitaly.CommitService.GetCommitSignatures:input_type -> gitaly.GetCommitSignaturesRequest + 54, // 86: gitaly.CommitService.GetCommitMessages:input_type -> gitaly.GetCommitMessagesRequest + 56, // 87: gitaly.CommitService.CheckObjectsExist:input_type -> gitaly.CheckObjectsExistRequest + 8, // 88: gitaly.CommitService.ListCommits:output_type -> gitaly.ListCommitsResponse + 10, // 89: gitaly.CommitService.ListAllCommits:output_type -> gitaly.ListAllCommitsResponse + 14, // 90: gitaly.CommitService.CommitIsAncestor:output_type -> gitaly.CommitIsAncestorResponse + 16, // 91: gitaly.CommitService.TreeEntry:output_type -> gitaly.TreeEntryResponse + 18, // 92: gitaly.CommitService.CountCommits:output_type -> gitaly.CountCommitsResponse + 20, // 93: gitaly.CommitService.CountDivergingCommits:output_type -> gitaly.CountDivergingCommitsResponse + 23, // 94: gitaly.CommitService.GetTreeEntries:output_type -> gitaly.GetTreeEntriesResponse + 26, // 95: gitaly.CommitService.ListFiles:output_type -> gitaly.ListFilesResponse + 28, // 96: gitaly.CommitService.FindCommit:output_type -> gitaly.FindCommitResponse + 12, // 97: gitaly.CommitService.CommitStats:output_type -> gitaly.CommitStatsResponse + 34, // 98: gitaly.CommitService.FindAllCommits:output_type -> gitaly.FindAllCommitsResponse + 36, // 99: gitaly.CommitService.FindCommits:output_type -> gitaly.FindCommitsResponse + 38, // 100: gitaly.CommitService.CommitLanguages:output_type -> gitaly.CommitLanguagesResponse + 40, // 101: gitaly.CommitService.RawBlame:output_type -> gitaly.RawBlameResponse + 43, // 102: gitaly.CommitService.LastCommitForPath:output_type -> gitaly.LastCommitForPathResponse + 45, // 103: gitaly.CommitService.ListLastCommitsForTree:output_type -> gitaly.ListLastCommitsForTreeResponse + 47, // 104: gitaly.CommitService.CommitsByMessage:output_type -> gitaly.CommitsByMessageResponse + 30, // 105: gitaly.CommitService.ListCommitsByOid:output_type -> gitaly.ListCommitsByOidResponse + 32, // 106: gitaly.CommitService.ListCommitsByRefName:output_type -> gitaly.ListCommitsByRefNameResponse + 49, // 107: gitaly.CommitService.FilterShasWithSignatures:output_type -> gitaly.FilterShasWithSignaturesResponse + 53, // 108: gitaly.CommitService.GetCommitSignatures:output_type -> gitaly.GetCommitSignaturesResponse + 55, // 109: gitaly.CommitService.GetCommitMessages:output_type -> gitaly.GetCommitMessagesResponse + 57, // 110: gitaly.CommitService.CheckObjectsExist:output_type -> gitaly.CheckObjectsExistResponse + 88, // [88:111] is the sub-list for method output_type + 65, // [65:88] is the sub-list for method input_type + 65, // [65:65] is the sub-list for extension type_name + 65, // [65:65] is the sub-list for extension extendee + 0, // [0:65] is the sub-list for field type_name } func init() { file_commit_proto_init() } @@ -5411,7 +5565,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LastCommitForPathRequest); i { + switch v := v.(*RawBlameError); i { case 0: return &v.state case 1: @@ -5423,7 +5577,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LastCommitForPathResponse); i { + switch v := v.(*LastCommitForPathRequest); i { case 0: return &v.state case 1: @@ -5435,7 +5589,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLastCommitsForTreeRequest); i { + switch v := v.(*LastCommitForPathResponse); i { case 0: return &v.state case 1: @@ -5447,7 +5601,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLastCommitsForTreeResponse); i { + switch v := v.(*ListLastCommitsForTreeRequest); i { case 0: return &v.state case 1: @@ -5459,7 +5613,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsByMessageRequest); i { + switch v := v.(*ListLastCommitsForTreeResponse); i { case 0: return &v.state case 1: @@ -5471,7 +5625,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitsByMessageResponse); i { + switch v := v.(*CommitsByMessageRequest); i { case 0: return &v.state case 1: @@ -5483,7 +5637,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterShasWithSignaturesRequest); i { + switch v := v.(*CommitsByMessageResponse); i { case 0: return &v.state case 1: @@ -5495,7 +5649,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterShasWithSignaturesResponse); i { + switch v := v.(*FilterShasWithSignaturesRequest); i { case 0: return &v.state case 1: @@ -5507,7 +5661,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtractCommitSignatureRequest); i { + switch v := v.(*FilterShasWithSignaturesResponse); i { case 0: return &v.state case 1: @@ -5519,7 +5673,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtractCommitSignatureResponse); i { + switch v := v.(*ExtractCommitSignatureRequest); i { case 0: return &v.state case 1: @@ -5531,7 +5685,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitSignaturesRequest); i { + switch v := v.(*ExtractCommitSignatureResponse); i { case 0: return &v.state case 1: @@ -5543,7 +5697,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitSignaturesResponse); i { + switch v := v.(*GetCommitSignaturesRequest); i { case 0: return &v.state case 1: @@ -5555,7 +5709,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitMessagesRequest); i { + switch v := v.(*GetCommitSignaturesResponse); i { case 0: return &v.state case 1: @@ -5567,7 +5721,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCommitMessagesResponse); i { + switch v := v.(*GetCommitMessagesRequest); i { case 0: return &v.state case 1: @@ -5579,7 +5733,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckObjectsExistRequest); i { + switch v := v.(*GetCommitMessagesResponse); i { case 0: return &v.state case 1: @@ -5591,7 +5745,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckObjectsExistResponse); i { + switch v := v.(*CheckObjectsExistRequest); i { case 0: return &v.state case 1: @@ -5603,7 +5757,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCommitsByRefNameResponse_CommitForRef); i { + switch v := v.(*CheckObjectsExistResponse); i { case 0: return &v.state case 1: @@ -5615,7 +5769,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommitLanguagesResponse_Language); i { + switch v := v.(*ListCommitsByRefNameResponse_CommitForRef); i { case 0: return &v.state case 1: @@ -5627,7 +5781,7 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLastCommitsForTreeResponse_CommitForTree); i { + switch v := v.(*CommitLanguagesResponse_Language); i { case 0: return &v.state case 1: @@ -5639,6 +5793,30 @@ func file_commit_proto_init() { } } file_commit_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RawBlameError_OutOfRangeError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListLastCommitsForTreeResponse_CommitForTree); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_commit_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckObjectsExistResponse_RevisionExistence); i { case 0: return &v.state @@ -5655,13 +5833,17 @@ func file_commit_proto_init() { (*GetTreeEntriesError_ResolveTree)(nil), (*GetTreeEntriesError_Path)(nil), } + file_commit_proto_msgTypes[34].OneofWrappers = []interface{}{ + (*RawBlameError_PathNotFound)(nil), + (*RawBlameError_OutOfRange)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_commit_proto_rawDesc, NumEnums: 7, - NumMessages: 54, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/commit_grpc.pb.go b/proto/go/gitalypb/commit_grpc.pb.go index e3aeeaa06..d476f2d91 100644 --- a/proto/go/gitalypb/commit_grpc.pb.go +++ b/proto/go/gitalypb/commit_grpc.pb.go @@ -52,7 +52,8 @@ type CommitServiceClient interface { // CommitLanguages detects the source code languages of the whole tree for a // given commit. Returns an error in case no languages could be detected. CommitLanguages(ctx context.Context, in *CommitLanguagesRequest, opts ...grpc.CallOption) (*CommitLanguagesResponse, error) - // This comment is left unintentionally blank. + // RawBlame blames lines in a blob to when they have last been changed. Returns the raw output of the git-blame(1) + // command. RawBlame(ctx context.Context, in *RawBlameRequest, opts ...grpc.CallOption) (CommitService_RawBlameClient, error) // LastCommitForPath returns the last commit that has changed a given path. // @@ -697,7 +698,8 @@ type CommitServiceServer interface { // CommitLanguages detects the source code languages of the whole tree for a // given commit. Returns an error in case no languages could be detected. CommitLanguages(context.Context, *CommitLanguagesRequest) (*CommitLanguagesResponse, error) - // This comment is left unintentionally blank. + // RawBlame blames lines in a blob to when they have last been changed. Returns the raw output of the git-blame(1) + // command. RawBlame(*RawBlameRequest, CommitService_RawBlameServer) error // LastCommitForPath returns the last commit that has changed a given path. // diff --git a/proto/go/gitalypb/errors.pb.go b/proto/go/gitalypb/errors.pb.go index 8501cbc75..3d3c4e56e 100644 --- a/proto/go/gitalypb/errors.pb.go +++ b/proto/go/gitalypb/errors.pb.go @@ -1100,6 +1100,55 @@ func (x *PathError) GetErrorType() PathError_ErrorType { return PathError_ERROR_TYPE_UNSPECIFIED } +// PathNotFoundError is an error returned when a given path cannot be found. +type PathNotFoundError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Path is the path that could not be found. + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *PathNotFoundError) Reset() { + *x = PathNotFoundError{} + if protoimpl.UnsafeEnabled { + mi := &file_errors_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PathNotFoundError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PathNotFoundError) ProtoMessage() {} + +func (x *PathNotFoundError) ProtoReflect() protoreflect.Message { + mi := &file_errors_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PathNotFoundError.ProtoReflect.Descriptor instead. +func (*PathNotFoundError) Descriptor() ([]byte, []int) { + return file_errors_proto_rawDescGZIP(), []int{15} +} + +func (x *PathNotFoundError) GetPath() []byte { + if x != nil { + return x.Path + } + return nil +} + var File_errors_proto protoreflect.FileDescriptor var file_errors_proto_rawDesc = []byte{ @@ -1224,11 +1273,14 @@ var file_errors_proto_rawDesc = []byte{ 0x52, 0x59, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x04, 0x42, 0x34, 0x5a, 0x32, - 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, - 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x36, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x04, 0x22, 0x27, 0x0a, 0x11, + 0x50, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, + 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x36, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1244,7 +1296,7 @@ func file_errors_proto_rawDescGZIP() []byte { } var file_errors_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_errors_proto_goTypes = []interface{}{ (IndexError_ErrorType)(0), // 0: gitaly.IndexError.ErrorType (CustomHookError_HookType)(0), // 1: gitaly.CustomHookError.HookType @@ -1264,11 +1316,12 @@ var file_errors_proto_goTypes = []interface{}{ (*LimitError)(nil), // 15: gitaly.LimitError (*CustomHookError)(nil), // 16: gitaly.CustomHookError (*PathError)(nil), // 17: gitaly.PathError - (*durationpb.Duration)(nil), // 18: google.protobuf.Duration + (*PathNotFoundError)(nil), // 18: gitaly.PathNotFoundError + (*durationpb.Duration)(nil), // 19: google.protobuf.Duration } var file_errors_proto_depIdxs = []int32{ 0, // 0: gitaly.IndexError.error_type:type_name -> gitaly.IndexError.ErrorType - 18, // 1: gitaly.LimitError.retry_after:type_name -> google.protobuf.Duration + 19, // 1: gitaly.LimitError.retry_after:type_name -> google.protobuf.Duration 1, // 2: gitaly.CustomHookError.hook_type:type_name -> gitaly.CustomHookError.HookType 2, // 3: gitaly.PathError.error_type:type_name -> gitaly.PathError.ErrorType 4, // [4:4] is the sub-list for method output_type @@ -1464,6 +1517,18 @@ func file_errors_proto_init() { return nil } } + file_errors_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PathNotFoundError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1471,7 +1536,7 @@ func file_errors_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_errors_proto_rawDesc, NumEnums: 3, - NumMessages: 15, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, |