| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // source: github.com/luci/luci-go/logdog/api/endpoints/coordinator/logs/v1/logs.proto |
| |
| /* |
| Package logdog is a generated protocol buffer package. |
| |
| It is generated from these files: |
| github.com/luci/luci-go/logdog/api/endpoints/coordinator/logs/v1/logs.proto |
| github.com/luci/luci-go/logdog/api/endpoints/coordinator/logs/v1/state.proto |
| |
| It has these top-level messages: |
| GetRequest |
| TailRequest |
| GetResponse |
| QueryRequest |
| QueryResponse |
| ListRequest |
| ListResponse |
| LogStreamState |
| */ |
| package logdog |
| |
| import prpc "github.com/luci/luci-go/grpc/prpc" |
| |
| import proto "github.com/golang/protobuf/proto" |
| import fmt "fmt" |
| import math "math" |
| import logpb "github.com/luci/luci-go/logdog/api/logpb" |
| import google_protobuf "github.com/golang/protobuf/ptypes/timestamp" |
| import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" |
| |
| import ( |
| context "golang.org/x/net/context" |
| grpc "google.golang.org/grpc" |
| ) |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ = proto.Marshal |
| var _ = fmt.Errorf |
| var _ = math.Inf |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the proto package it is being compiled against. |
| // A compilation error at this line likely means your copy of the |
| // proto package needs to be updated. |
| const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package |
| |
| // Trinary represents a trinary value. |
| type QueryRequest_Trinary int32 |
| |
| const ( |
| // Both positive and negative results will be returned. |
| QueryRequest_BOTH QueryRequest_Trinary = 0 |
| // Only positive results will be returned. |
| QueryRequest_YES QueryRequest_Trinary = 1 |
| // Only negative results will be returned. |
| QueryRequest_NO QueryRequest_Trinary = 2 |
| ) |
| |
| var QueryRequest_Trinary_name = map[int32]string{ |
| 0: "BOTH", |
| 1: "YES", |
| 2: "NO", |
| } |
| var QueryRequest_Trinary_value = map[string]int32{ |
| "BOTH": 0, |
| "YES": 1, |
| "NO": 2, |
| } |
| |
| func (x QueryRequest_Trinary) String() string { |
| return proto.EnumName(QueryRequest_Trinary_name, int32(x)) |
| } |
| func (QueryRequest_Trinary) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } |
| |
| type ListResponse_Component_Type int32 |
| |
| const ( |
| ListResponse_Component_PATH ListResponse_Component_Type = 0 |
| ListResponse_Component_STREAM ListResponse_Component_Type = 1 |
| ListResponse_Component_PROJECT ListResponse_Component_Type = 2 |
| ) |
| |
| var ListResponse_Component_Type_name = map[int32]string{ |
| 0: "PATH", |
| 1: "STREAM", |
| 2: "PROJECT", |
| } |
| var ListResponse_Component_Type_value = map[string]int32{ |
| "PATH": 0, |
| "STREAM": 1, |
| "PROJECT": 2, |
| } |
| |
| func (x ListResponse_Component_Type) String() string { |
| return proto.EnumName(ListResponse_Component_Type_name, int32(x)) |
| } |
| func (ListResponse_Component_Type) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor0, []int{6, 0, 0} |
| } |
| |
| // GetRequest is the request structure for the user Get endpoint. |
| // |
| // If the requested log stream exists, a valid GetRequest will succeed |
| // regardless of whether the requested log range was available. |
| // |
| // Note that this endpoint may return fewer logs than requested due to either |
| // availability or internal constraints. |
| type GetRequest struct { |
| // The request project to request. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The path of the log stream to get. |
| // |
| // This can either be a LogDog stream path or the SHA256 hash of a LogDog |
| // stream path. |
| // |
| // Some utilities may find passing around a full LogDog path to be cumbersome |
| // due to its length. They can opt to pass around the hash instead and |
| // retrieve logs using it. |
| Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` |
| // If true, requests that the log stream's state is returned. |
| State bool `protobuf:"varint,3,opt,name=state" json:"state,omitempty"` |
| // The initial log stream index to retrieve. |
| Index int64 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` |
| // The maximum number of bytes to return. If non-zero, it is applied as a |
| // constraint to limit the number of logs that are returned. |
| // |
| // This only returns complete logs. Assuming logs are available, it will |
| // return at least one log (even if it violates the size constraint) and as |
| // many additional logs as it can without exceeding this constraint. |
| ByteCount int32 `protobuf:"varint,5,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"` |
| // The maximum number of log records to request. |
| // |
| // If this value is zero, no count constraint will be applied. If this value |
| // is less than zero, no log entries will be returned. This can be used to |
| // fetch log stream descriptors without fetching any log records. |
| LogCount int32 `protobuf:"varint,6,opt,name=log_count,json=logCount" json:"log_count,omitempty"` |
| // If true, allows the range request to return non-contiguous records. |
| // |
| // A contiguous request (default) will iterate forwards from the supplied |
| // Index and stop if either the end of stream is encountered or there is a |
| // missing stream index. A NonContiguous request will remove the latter |
| // condition. |
| // |
| // For example, say the log stream consists of: |
| // [3, 4, 6, 7] |
| // |
| // A contiguous request with Index 3 will return: [3, 4], stopping because |
| // 5 is missing. A non-contiguous request will return [3, 4, 6, 7]. |
| NonContiguous bool `protobuf:"varint,7,opt,name=non_contiguous,json=nonContiguous" json:"non_contiguous,omitempty"` |
| GetSignedUrls *GetRequest_SignURLRequest `protobuf:"bytes,8,opt,name=get_signed_urls,json=getSignedUrls" json:"get_signed_urls,omitempty"` |
| } |
| |
| func (m *GetRequest) Reset() { *m = GetRequest{} } |
| func (m *GetRequest) String() string { return proto.CompactTextString(m) } |
| func (*GetRequest) ProtoMessage() {} |
| func (*GetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } |
| |
| func (m *GetRequest) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *GetRequest) GetPath() string { |
| if m != nil { |
| return m.Path |
| } |
| return "" |
| } |
| |
| func (m *GetRequest) GetState() bool { |
| if m != nil { |
| return m.State |
| } |
| return false |
| } |
| |
| func (m *GetRequest) GetIndex() int64 { |
| if m != nil { |
| return m.Index |
| } |
| return 0 |
| } |
| |
| func (m *GetRequest) GetByteCount() int32 { |
| if m != nil { |
| return m.ByteCount |
| } |
| return 0 |
| } |
| |
| func (m *GetRequest) GetLogCount() int32 { |
| if m != nil { |
| return m.LogCount |
| } |
| return 0 |
| } |
| |
| func (m *GetRequest) GetNonContiguous() bool { |
| if m != nil { |
| return m.NonContiguous |
| } |
| return false |
| } |
| |
| func (m *GetRequest) GetGetSignedUrls() *GetRequest_SignURLRequest { |
| if m != nil { |
| return m.GetSignedUrls |
| } |
| return nil |
| } |
| |
| // If supplied, the response will contain a SignedUrls message with the |
| // requested signed URLs. If signed URLs are not supported by the log's |
| // current storage system, the response message will be empty. |
| type GetRequest_SignURLRequest struct { |
| // The lifetime that the signed URL will be bound to.. The |
| Lifetime *google_protobuf1.Duration `protobuf:"bytes,1,opt,name=lifetime" json:"lifetime,omitempty"` |
| // Return a signed URL for the log's RecordIO protobuf data. |
| Stream bool `protobuf:"varint,2,opt,name=stream" json:"stream,omitempty"` |
| // Return a signed URL for the log's LogIndex protobuf. |
| Index bool `protobuf:"varint,3,opt,name=index" json:"index,omitempty"` |
| } |
| |
| func (m *GetRequest_SignURLRequest) Reset() { *m = GetRequest_SignURLRequest{} } |
| func (m *GetRequest_SignURLRequest) String() string { return proto.CompactTextString(m) } |
| func (*GetRequest_SignURLRequest) ProtoMessage() {} |
| func (*GetRequest_SignURLRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } |
| |
| func (m *GetRequest_SignURLRequest) GetLifetime() *google_protobuf1.Duration { |
| if m != nil { |
| return m.Lifetime |
| } |
| return nil |
| } |
| |
| func (m *GetRequest_SignURLRequest) GetStream() bool { |
| if m != nil { |
| return m.Stream |
| } |
| return false |
| } |
| |
| func (m *GetRequest_SignURLRequest) GetIndex() bool { |
| if m != nil { |
| return m.Index |
| } |
| return false |
| } |
| |
| // TailRequest is the request structure for the user Tail endpoint. It returns |
| // the last log in a given log stream at the time of the request. |
| type TailRequest struct { |
| // The request project to request. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The path of the log stream to get. |
| // |
| // This can either be a LogDog stream path or the SHA256 hash of a LogDog |
| // stream path. |
| // |
| // Some utilities may find passing around a full LogDog path to be cumbersome |
| // due to its length. They can opt to pass around the hash instead and |
| // retrieve logs using it. |
| Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` |
| // If true, requests that the log stream's state is returned. |
| State bool `protobuf:"varint,3,opt,name=state" json:"state,omitempty"` |
| } |
| |
| func (m *TailRequest) Reset() { *m = TailRequest{} } |
| func (m *TailRequest) String() string { return proto.CompactTextString(m) } |
| func (*TailRequest) ProtoMessage() {} |
| func (*TailRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } |
| |
| func (m *TailRequest) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *TailRequest) GetPath() string { |
| if m != nil { |
| return m.Path |
| } |
| return "" |
| } |
| |
| func (m *TailRequest) GetState() bool { |
| if m != nil { |
| return m.State |
| } |
| return false |
| } |
| |
| // GetResponse is the response structure for the user Get endpoint. |
| type GetResponse struct { |
| // Project is the project name that these logs belong to. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The log stream descriptor and state for this stream. |
| // |
| // It can be requested by setting the request's State field to true. If the |
| // Proto field is true, the State's Descriptor field will not be included. |
| State *LogStreamState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` |
| // The expanded LogStreamDescriptor protobuf. It is intended for JSON |
| // consumption. |
| // |
| // If the GetRequest's Proto field is false, this will be populated; |
| // otherwise, the serialized protobuf will be written to the DescriptorProto |
| // field. |
| Desc *logpb.LogStreamDescriptor `protobuf:"bytes,3,opt,name=desc" json:"desc,omitempty"` |
| // Log represents the set of retrieved log records. |
| Logs []*logpb.LogEntry `protobuf:"bytes,4,rep,name=logs" json:"logs,omitempty"` |
| // An optional signed log entry RecordIO protobuf URL, if requested via |
| // "sign_entry_url_lifetime". |
| SignedUrls *GetResponse_SignedUrls `protobuf:"bytes,5,opt,name=signed_urls,json=signedUrls" json:"signed_urls,omitempty"` |
| } |
| |
| func (m *GetResponse) Reset() { *m = GetResponse{} } |
| func (m *GetResponse) String() string { return proto.CompactTextString(m) } |
| func (*GetResponse) ProtoMessage() {} |
| func (*GetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } |
| |
| func (m *GetResponse) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *GetResponse) GetState() *LogStreamState { |
| if m != nil { |
| return m.State |
| } |
| return nil |
| } |
| |
| func (m *GetResponse) GetDesc() *logpb.LogStreamDescriptor { |
| if m != nil { |
| return m.Desc |
| } |
| return nil |
| } |
| |
| func (m *GetResponse) GetLogs() []*logpb.LogEntry { |
| if m != nil { |
| return m.Logs |
| } |
| return nil |
| } |
| |
| func (m *GetResponse) GetSignedUrls() *GetResponse_SignedUrls { |
| if m != nil { |
| return m.SignedUrls |
| } |
| return nil |
| } |
| |
| // Holds information about the log stream's signed entry URL. |
| type GetResponse_SignedUrls struct { |
| // The time when this signed URL will expire. |
| Expiration *google_protobuf.Timestamp `protobuf:"bytes,1,opt,name=expiration" json:"expiration,omitempty"` |
| // The signed log stream URL, if requested. |
| Stream string `protobuf:"bytes,2,opt,name=stream" json:"stream,omitempty"` |
| // The signed log index URL, if requested. |
| Index string `protobuf:"bytes,3,opt,name=index" json:"index,omitempty"` |
| } |
| |
| func (m *GetResponse_SignedUrls) Reset() { *m = GetResponse_SignedUrls{} } |
| func (m *GetResponse_SignedUrls) String() string { return proto.CompactTextString(m) } |
| func (*GetResponse_SignedUrls) ProtoMessage() {} |
| func (*GetResponse_SignedUrls) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } |
| |
| func (m *GetResponse_SignedUrls) GetExpiration() *google_protobuf.Timestamp { |
| if m != nil { |
| return m.Expiration |
| } |
| return nil |
| } |
| |
| func (m *GetResponse_SignedUrls) GetStream() string { |
| if m != nil { |
| return m.Stream |
| } |
| return "" |
| } |
| |
| func (m *GetResponse_SignedUrls) GetIndex() string { |
| if m != nil { |
| return m.Index |
| } |
| return "" |
| } |
| |
| // QueryRequest is the request structure for the user Query endpoint. |
| type QueryRequest struct { |
| // The request project to request. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The query parameter. |
| // |
| // The path expression may substitute a glob ("*") for a specific path |
| // component. That is, any stream that matches the remaining structure qualifies |
| // regardless of its value in that specific positional field. |
| // |
| // An unbounded wildcard may appear as a component at the end of both the |
| // prefix and name query components. "**" matches all remaining components. |
| // |
| // If the supplied path query does not contain a path separator ("+"), it will |
| // be treated as if the prefix is "**". |
| // |
| // Examples: |
| // - Empty ("") will return all streams. |
| // - **/+/** will return all streams. |
| // - foo/bar/** will return all streams with the "foo/bar" prefix. |
| // - foo/bar/**/+/baz will return all streams beginning with the "foo/bar" |
| // prefix and named "baz" (e.g., "foo/bar/qux/lol/+/baz") |
| // - foo/bar/+/** will return all streams with a "foo/bar" prefix. |
| // - foo/*/+/baz will return all streams with a two-component prefix whose |
| // first value is "foo" and whose name is "baz". |
| // - foo/bar will return all streams whose name is "foo/bar". |
| // - */* will return all streams with two-component names. |
| Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` |
| // If true, returns that the streams' full state is returned instead of just |
| // its Path. |
| State bool `protobuf:"varint,3,opt,name=state" json:"state,omitempty"` |
| // If true, causes the requested state to be returned as serialized protobuf |
| // data instead of deserialized JSON structures. |
| Proto bool `protobuf:"varint,4,opt,name=proto" json:"proto,omitempty"` |
| // Next, if not empty, indicates that this query should continue at the point |
| // where the previous query left off. |
| Next string `protobuf:"bytes,5,opt,name=next" json:"next,omitempty"` |
| // MaxResults is the maximum number of query results to return. |
| // |
| // If MaxResults is zero, no upper bound will be indicated. However, the |
| // returned result count is still be subject to internal constraints. |
| MaxResults int32 `protobuf:"varint,6,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` |
| // ContentType, if not empty, restricts results to streams with the supplied |
| // content type. |
| ContentType string `protobuf:"bytes,10,opt,name=content_type,json=contentType" json:"content_type,omitempty"` |
| StreamType *QueryRequest_StreamTypeFilter `protobuf:"bytes,11,opt,name=stream_type,json=streamType" json:"stream_type,omitempty"` |
| // Newer restricts results to streams created after the specified date. |
| Newer *google_protobuf.Timestamp `protobuf:"bytes,12,opt,name=newer" json:"newer,omitempty"` |
| // Older restricts results to streams created before the specified date. |
| Older *google_protobuf.Timestamp `protobuf:"bytes,13,opt,name=older" json:"older,omitempty"` |
| // If not empty, constrains the results to those whose protobuf version string |
| // matches the supplied version. |
| ProtoVersion string `protobuf:"bytes,14,opt,name=proto_version,json=protoVersion" json:"proto_version,omitempty"` |
| // Tags is the set of tags to constrain the query with. |
| // |
| // A Tag entry may either be: |
| // - A key/value query, in which case the results are constrained by logs |
| // whose tag includes that key/value pair. |
| // - A key with an missing (nil) value, in which case the results are |
| // constraints by logs that have that tag key, regardless of its value. |
| Tags map[string]string `protobuf:"bytes,15,rep,name=tags" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` |
| // Purged restricts the query to streams that have or haven't been purged. |
| Purged QueryRequest_Trinary `protobuf:"varint,16,opt,name=purged,enum=logdog.QueryRequest_Trinary" json:"purged,omitempty"` |
| } |
| |
| func (m *QueryRequest) Reset() { *m = QueryRequest{} } |
| func (m *QueryRequest) String() string { return proto.CompactTextString(m) } |
| func (*QueryRequest) ProtoMessage() {} |
| func (*QueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } |
| |
| func (m *QueryRequest) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *QueryRequest) GetPath() string { |
| if m != nil { |
| return m.Path |
| } |
| return "" |
| } |
| |
| func (m *QueryRequest) GetState() bool { |
| if m != nil { |
| return m.State |
| } |
| return false |
| } |
| |
| func (m *QueryRequest) GetProto() bool { |
| if m != nil { |
| return m.Proto |
| } |
| return false |
| } |
| |
| func (m *QueryRequest) GetNext() string { |
| if m != nil { |
| return m.Next |
| } |
| return "" |
| } |
| |
| func (m *QueryRequest) GetMaxResults() int32 { |
| if m != nil { |
| return m.MaxResults |
| } |
| return 0 |
| } |
| |
| func (m *QueryRequest) GetContentType() string { |
| if m != nil { |
| return m.ContentType |
| } |
| return "" |
| } |
| |
| func (m *QueryRequest) GetStreamType() *QueryRequest_StreamTypeFilter { |
| if m != nil { |
| return m.StreamType |
| } |
| return nil |
| } |
| |
| func (m *QueryRequest) GetNewer() *google_protobuf.Timestamp { |
| if m != nil { |
| return m.Newer |
| } |
| return nil |
| } |
| |
| func (m *QueryRequest) GetOlder() *google_protobuf.Timestamp { |
| if m != nil { |
| return m.Older |
| } |
| return nil |
| } |
| |
| func (m *QueryRequest) GetProtoVersion() string { |
| if m != nil { |
| return m.ProtoVersion |
| } |
| return "" |
| } |
| |
| func (m *QueryRequest) GetTags() map[string]string { |
| if m != nil { |
| return m.Tags |
| } |
| return nil |
| } |
| |
| func (m *QueryRequest) GetPurged() QueryRequest_Trinary { |
| if m != nil { |
| return m.Purged |
| } |
| return QueryRequest_BOTH |
| } |
| |
| // The stream type to filter on. |
| type QueryRequest_StreamTypeFilter struct { |
| // The StreamType value to filter on. |
| Value logpb.StreamType `protobuf:"varint,1,opt,name=value,enum=logpb.StreamType" json:"value,omitempty"` |
| } |
| |
| func (m *QueryRequest_StreamTypeFilter) Reset() { *m = QueryRequest_StreamTypeFilter{} } |
| func (m *QueryRequest_StreamTypeFilter) String() string { return proto.CompactTextString(m) } |
| func (*QueryRequest_StreamTypeFilter) ProtoMessage() {} |
| func (*QueryRequest_StreamTypeFilter) Descriptor() ([]byte, []int) { |
| return fileDescriptor0, []int{3, 0} |
| } |
| |
| func (m *QueryRequest_StreamTypeFilter) GetValue() logpb.StreamType { |
| if m != nil { |
| return m.Value |
| } |
| return logpb.StreamType_TEXT |
| } |
| |
| // QueryResponse is the response structure for the user Query endpoint. |
| type QueryResponse struct { |
| // Project is the project name that all responses belong to. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The list of streams that were identified as the result of the query. |
| Streams []*QueryResponse_Stream `protobuf:"bytes,2,rep,name=streams" json:"streams,omitempty"` |
| // If not empty, indicates that there are more query results available. |
| // These results can be requested by repeating the Query request with the |
| // same Path field and supplying this value in the Next field. |
| Next string `protobuf:"bytes,3,opt,name=next" json:"next,omitempty"` |
| } |
| |
| func (m *QueryResponse) Reset() { *m = QueryResponse{} } |
| func (m *QueryResponse) String() string { return proto.CompactTextString(m) } |
| func (*QueryResponse) ProtoMessage() {} |
| func (*QueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } |
| |
| func (m *QueryResponse) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *QueryResponse) GetStreams() []*QueryResponse_Stream { |
| if m != nil { |
| return m.Streams |
| } |
| return nil |
| } |
| |
| func (m *QueryResponse) GetNext() string { |
| if m != nil { |
| return m.Next |
| } |
| return "" |
| } |
| |
| // Stream represents a single query response stream. |
| type QueryResponse_Stream struct { |
| // Path is the log stream path. |
| Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` |
| // State is the log stream descriptor and state for this stream. |
| // |
| // It can be requested by setting the request's State field to true. If the |
| // Proto field is true, the State's Descriptor field will not be included. |
| State *LogStreamState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` |
| // The JSON-packed log stream descriptor protobuf. |
| // |
| // A Descriptor entry corresponds to the Path with the same index. |
| // |
| // If the query request's State field is set, the descriptor will be |
| // populated. If the Proto field is false, Descriptor will be populated; |
| // otherwise, DescriptorProto will be populated with the serialized descriptor |
| // protobuf. |
| Desc *logpb.LogStreamDescriptor `protobuf:"bytes,3,opt,name=desc" json:"desc,omitempty"` |
| // The serialized log stream Descriptor protobuf. |
| DescProto []byte `protobuf:"bytes,4,opt,name=desc_proto,json=descProto,proto3" json:"desc_proto,omitempty"` |
| } |
| |
| func (m *QueryResponse_Stream) Reset() { *m = QueryResponse_Stream{} } |
| func (m *QueryResponse_Stream) String() string { return proto.CompactTextString(m) } |
| func (*QueryResponse_Stream) ProtoMessage() {} |
| func (*QueryResponse_Stream) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } |
| |
| func (m *QueryResponse_Stream) GetPath() string { |
| if m != nil { |
| return m.Path |
| } |
| return "" |
| } |
| |
| func (m *QueryResponse_Stream) GetState() *LogStreamState { |
| if m != nil { |
| return m.State |
| } |
| return nil |
| } |
| |
| func (m *QueryResponse_Stream) GetDesc() *logpb.LogStreamDescriptor { |
| if m != nil { |
| return m.Desc |
| } |
| return nil |
| } |
| |
| func (m *QueryResponse_Stream) GetDescProto() []byte { |
| if m != nil { |
| return m.DescProto |
| } |
| return nil |
| } |
| |
| // ListRequest is the request structure for the user List endpoint. |
| // |
| // The List endpoint enables a directory-tree style traversal of the project |
| // and log stream space. |
| // |
| // For example, if project "myproj" had streams "a/+/baz", a listing would |
| // return: |
| // - Request: project="", path="", Response: {myproj} (Project names) |
| // - Request: project="myproj", path="", Response: {a} (Path components) |
| // - Request: project="myproj", path="a", Response: {+} (Path component) |
| // - Request: project="myproj", path="a/+", Response: {baz} (Stream component) |
| type ListRequest struct { |
| // The project to query. |
| // |
| // If this is empty, the list results will show all projects that the user can |
| // access. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The path base to query. |
| // |
| // For example, log streams: |
| // - foo/bar/+/baz |
| // - foo/+/qux |
| // |
| // A query to path_base "foo" will return "bar" and "+", both path |
| // components. |
| PathBase string `protobuf:"bytes,2,opt,name=path_base,json=pathBase" json:"path_base,omitempty"` |
| // State, if true, returns that the streams' full state instead of just its |
| // Path. |
| State bool `protobuf:"varint,3,opt,name=state" json:"state,omitempty"` |
| // If not empty, indicates that this query should continue at the point where |
| // the previous query left off. |
| Next string `protobuf:"bytes,4,opt,name=next" json:"next,omitempty"` |
| // If true, will return only streams. Otherwise, intermediate path components |
| // will also be returned. |
| StreamOnly bool `protobuf:"varint,5,opt,name=stream_only,json=streamOnly" json:"stream_only,omitempty"` |
| // If true, indicates that purged streams should show up in the listing. It is |
| // an error if a non-admin user requests this option. |
| IncludePurged bool `protobuf:"varint,6,opt,name=include_purged,json=includePurged" json:"include_purged,omitempty"` |
| // Offset, if >= 0, instructs the list operation to skip the supplied number |
| // of results. This can be used for pagination. |
| Offset int32 `protobuf:"varint,7,opt,name=offset" json:"offset,omitempty"` |
| // The maximum number of componts to return. |
| // |
| // If <= 0, no upper bound will be indicated. However, the returned result |
| // count is still be subject to internal constraints. |
| MaxResults int32 `protobuf:"varint,8,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` |
| } |
| |
| func (m *ListRequest) Reset() { *m = ListRequest{} } |
| func (m *ListRequest) String() string { return proto.CompactTextString(m) } |
| func (*ListRequest) ProtoMessage() {} |
| func (*ListRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } |
| |
| func (m *ListRequest) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *ListRequest) GetPathBase() string { |
| if m != nil { |
| return m.PathBase |
| } |
| return "" |
| } |
| |
| func (m *ListRequest) GetState() bool { |
| if m != nil { |
| return m.State |
| } |
| return false |
| } |
| |
| func (m *ListRequest) GetNext() string { |
| if m != nil { |
| return m.Next |
| } |
| return "" |
| } |
| |
| func (m *ListRequest) GetStreamOnly() bool { |
| if m != nil { |
| return m.StreamOnly |
| } |
| return false |
| } |
| |
| func (m *ListRequest) GetIncludePurged() bool { |
| if m != nil { |
| return m.IncludePurged |
| } |
| return false |
| } |
| |
| func (m *ListRequest) GetOffset() int32 { |
| if m != nil { |
| return m.Offset |
| } |
| return 0 |
| } |
| |
| func (m *ListRequest) GetMaxResults() int32 { |
| if m != nil { |
| return m.MaxResults |
| } |
| return 0 |
| } |
| |
| // ListResponse is the response structure for the user List endpoint. |
| type ListResponse struct { |
| // The project that the streams belong to. |
| // |
| // If the request was for the project tier of the list hierarchy, this will |
| // be empty, and the components list will contain project elements. |
| Project string `protobuf:"bytes,1,opt,name=project" json:"project,omitempty"` |
| // The hierarchy base that was requested. |
| PathBase string `protobuf:"bytes,2,opt,name=path_base,json=pathBase" json:"path_base,omitempty"` |
| // If not empty, indicates that there are more list results available. |
| // These results can be requested by repeating the List request with the |
| // same Path field and supplying this value in the Next field. |
| Next string `protobuf:"bytes,3,opt,name=next" json:"next,omitempty"` |
| Components []*ListResponse_Component `protobuf:"bytes,4,rep,name=components" json:"components,omitempty"` |
| } |
| |
| func (m *ListResponse) Reset() { *m = ListResponse{} } |
| func (m *ListResponse) String() string { return proto.CompactTextString(m) } |
| func (*ListResponse) ProtoMessage() {} |
| func (*ListResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } |
| |
| func (m *ListResponse) GetProject() string { |
| if m != nil { |
| return m.Project |
| } |
| return "" |
| } |
| |
| func (m *ListResponse) GetPathBase() string { |
| if m != nil { |
| return m.PathBase |
| } |
| return "" |
| } |
| |
| func (m *ListResponse) GetNext() string { |
| if m != nil { |
| return m.Next |
| } |
| return "" |
| } |
| |
| func (m *ListResponse) GetComponents() []*ListResponse_Component { |
| if m != nil { |
| return m.Components |
| } |
| return nil |
| } |
| |
| // The set of listed stream components. |
| type ListResponse_Component struct { |
| // Name is the name of this path component. When combined with the |
| // response Base, this will form the full stream path. |
| Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` |
| // The type of the component. |
| Type ListResponse_Component_Type `protobuf:"varint,2,opt,name=type,enum=logdog.ListResponse_Component_Type" json:"type,omitempty"` |
| // State is the log stream descriptor and state for this stream. It will |
| // only be filled if this is a STREAM component. |
| // |
| // It can be requested by setting the request's State field to true. If the |
| // Proto field is true, the State's Descriptor field will not be included. |
| State *LogStreamState `protobuf:"bytes,3,opt,name=state" json:"state,omitempty"` |
| // Descriptor is the JSON-packed log stream descriptor protobuf. It will |
| // only be filled if this is a STREAM component. |
| // |
| // A Descriptor entry corresponds to the Path with the same index. |
| // |
| // If the list request's State field is set, the descriptor will be |
| // populated. |
| Desc *logpb.LogStreamDescriptor `protobuf:"bytes,4,opt,name=desc" json:"desc,omitempty"` |
| } |
| |
| func (m *ListResponse_Component) Reset() { *m = ListResponse_Component{} } |
| func (m *ListResponse_Component) String() string { return proto.CompactTextString(m) } |
| func (*ListResponse_Component) ProtoMessage() {} |
| func (*ListResponse_Component) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } |
| |
| func (m *ListResponse_Component) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *ListResponse_Component) GetType() ListResponse_Component_Type { |
| if m != nil { |
| return m.Type |
| } |
| return ListResponse_Component_PATH |
| } |
| |
| func (m *ListResponse_Component) GetState() *LogStreamState { |
| if m != nil { |
| return m.State |
| } |
| return nil |
| } |
| |
| func (m *ListResponse_Component) GetDesc() *logpb.LogStreamDescriptor { |
| if m != nil { |
| return m.Desc |
| } |
| return nil |
| } |
| |
| func init() { |
| proto.RegisterType((*GetRequest)(nil), "logdog.GetRequest") |
| proto.RegisterType((*GetRequest_SignURLRequest)(nil), "logdog.GetRequest.SignURLRequest") |
| proto.RegisterType((*TailRequest)(nil), "logdog.TailRequest") |
| proto.RegisterType((*GetResponse)(nil), "logdog.GetResponse") |
| proto.RegisterType((*GetResponse_SignedUrls)(nil), "logdog.GetResponse.SignedUrls") |
| proto.RegisterType((*QueryRequest)(nil), "logdog.QueryRequest") |
| proto.RegisterType((*QueryRequest_StreamTypeFilter)(nil), "logdog.QueryRequest.StreamTypeFilter") |
| proto.RegisterType((*QueryResponse)(nil), "logdog.QueryResponse") |
| proto.RegisterType((*QueryResponse_Stream)(nil), "logdog.QueryResponse.Stream") |
| proto.RegisterType((*ListRequest)(nil), "logdog.ListRequest") |
| proto.RegisterType((*ListResponse)(nil), "logdog.ListResponse") |
| proto.RegisterType((*ListResponse_Component)(nil), "logdog.ListResponse.Component") |
| proto.RegisterEnum("logdog.QueryRequest_Trinary", QueryRequest_Trinary_name, QueryRequest_Trinary_value) |
| proto.RegisterEnum("logdog.ListResponse_Component_Type", ListResponse_Component_Type_name, ListResponse_Component_Type_value) |
| } |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ context.Context |
| var _ grpc.ClientConn |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the grpc package it is being compiled against. |
| const _ = grpc.SupportPackageIsVersion4 |
| |
| // Client API for Logs service |
| |
| type LogsClient interface { |
| // Get returns state and log data for a single log stream. |
| Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) |
| // Tail returns the last log in the log stream at the time of the request. |
| Tail(ctx context.Context, in *TailRequest, opts ...grpc.CallOption) (*GetResponse, error) |
| // Query returns log stream paths that match the requested query. |
| Query(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) |
| // List returns log stream paths rooted under the path hierarchy. |
| List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) |
| } |
| type logsPRPCClient struct { |
| client *prpc.Client |
| } |
| |
| func NewLogsPRPCClient(client *prpc.Client) LogsClient { |
| return &logsPRPCClient{client} |
| } |
| |
| func (c *logsPRPCClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) { |
| out := new(GetResponse) |
| err := c.client.Call(ctx, "logdog.Logs", "Get", in, out, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsPRPCClient) Tail(ctx context.Context, in *TailRequest, opts ...grpc.CallOption) (*GetResponse, error) { |
| out := new(GetResponse) |
| err := c.client.Call(ctx, "logdog.Logs", "Tail", in, out, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsPRPCClient) Query(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) { |
| out := new(QueryResponse) |
| err := c.client.Call(ctx, "logdog.Logs", "Query", in, out, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsPRPCClient) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) { |
| out := new(ListResponse) |
| err := c.client.Call(ctx, "logdog.Logs", "List", in, out, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| type logsClient struct { |
| cc *grpc.ClientConn |
| } |
| |
| func NewLogsClient(cc *grpc.ClientConn) LogsClient { |
| return &logsClient{cc} |
| } |
| |
| func (c *logsClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) { |
| out := new(GetResponse) |
| err := grpc.Invoke(ctx, "/logdog.Logs/Get", in, out, c.cc, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsClient) Tail(ctx context.Context, in *TailRequest, opts ...grpc.CallOption) (*GetResponse, error) { |
| out := new(GetResponse) |
| err := grpc.Invoke(ctx, "/logdog.Logs/Tail", in, out, c.cc, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsClient) Query(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) { |
| out := new(QueryResponse) |
| err := grpc.Invoke(ctx, "/logdog.Logs/Query", in, out, c.cc, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| func (c *logsClient) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) { |
| out := new(ListResponse) |
| err := grpc.Invoke(ctx, "/logdog.Logs/List", in, out, c.cc, opts...) |
| if err != nil { |
| return nil, err |
| } |
| return out, nil |
| } |
| |
| // Server API for Logs service |
| |
| type LogsServer interface { |
| // Get returns state and log data for a single log stream. |
| Get(context.Context, *GetRequest) (*GetResponse, error) |
| // Tail returns the last log in the log stream at the time of the request. |
| Tail(context.Context, *TailRequest) (*GetResponse, error) |
| // Query returns log stream paths that match the requested query. |
| Query(context.Context, *QueryRequest) (*QueryResponse, error) |
| // List returns log stream paths rooted under the path hierarchy. |
| List(context.Context, *ListRequest) (*ListResponse, error) |
| } |
| |
| func RegisterLogsServer(s prpc.Registrar, srv LogsServer) { |
| s.RegisterService(&_Logs_serviceDesc, srv) |
| } |
| |
| func _Logs_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { |
| in := new(GetRequest) |
| if err := dec(in); err != nil { |
| return nil, err |
| } |
| if interceptor == nil { |
| return srv.(LogsServer).Get(ctx, in) |
| } |
| info := &grpc.UnaryServerInfo{ |
| Server: srv, |
| FullMethod: "/logdog.Logs/Get", |
| } |
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { |
| return srv.(LogsServer).Get(ctx, req.(*GetRequest)) |
| } |
| return interceptor(ctx, in, info, handler) |
| } |
| |
| func _Logs_Tail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { |
| in := new(TailRequest) |
| if err := dec(in); err != nil { |
| return nil, err |
| } |
| if interceptor == nil { |
| return srv.(LogsServer).Tail(ctx, in) |
| } |
| info := &grpc.UnaryServerInfo{ |
| Server: srv, |
| FullMethod: "/logdog.Logs/Tail", |
| } |
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { |
| return srv.(LogsServer).Tail(ctx, req.(*TailRequest)) |
| } |
| return interceptor(ctx, in, info, handler) |
| } |
| |
| func _Logs_Query_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { |
| in := new(QueryRequest) |
| if err := dec(in); err != nil { |
| return nil, err |
| } |
| if interceptor == nil { |
| return srv.(LogsServer).Query(ctx, in) |
| } |
| info := &grpc.UnaryServerInfo{ |
| Server: srv, |
| FullMethod: "/logdog.Logs/Query", |
| } |
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { |
| return srv.(LogsServer).Query(ctx, req.(*QueryRequest)) |
| } |
| return interceptor(ctx, in, info, handler) |
| } |
| |
| func _Logs_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { |
| in := new(ListRequest) |
| if err := dec(in); err != nil { |
| return nil, err |
| } |
| if interceptor == nil { |
| return srv.(LogsServer).List(ctx, in) |
| } |
| info := &grpc.UnaryServerInfo{ |
| Server: srv, |
| FullMethod: "/logdog.Logs/List", |
| } |
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { |
| return srv.(LogsServer).List(ctx, req.(*ListRequest)) |
| } |
| return interceptor(ctx, in, info, handler) |
| } |
| |
| var _Logs_serviceDesc = grpc.ServiceDesc{ |
| ServiceName: "logdog.Logs", |
| HandlerType: (*LogsServer)(nil), |
| Methods: []grpc.MethodDesc{ |
| { |
| MethodName: "Get", |
| Handler: _Logs_Get_Handler, |
| }, |
| { |
| MethodName: "Tail", |
| Handler: _Logs_Tail_Handler, |
| }, |
| { |
| MethodName: "Query", |
| Handler: _Logs_Query_Handler, |
| }, |
| { |
| MethodName: "List", |
| Handler: _Logs_List_Handler, |
| }, |
| }, |
| Streams: []grpc.StreamDesc{}, |
| Metadata: "github.com/luci/luci-go/logdog/api/endpoints/coordinator/logs/v1/logs.proto", |
| } |
| |
| func init() { |
| proto.RegisterFile("github.com/luci/luci-go/logdog/api/endpoints/coordinator/logs/v1/logs.proto", fileDescriptor0) |
| } |
| |
| var fileDescriptor0 = []byte{ |
| // 1130 bytes of a gzipped FileDescriptorProto |
| 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xef, 0x8e, 0xdb, 0x44, |
| 0x10, 0xc7, 0x89, 0xf3, 0x6f, 0x9c, 0xbb, 0x86, 0xa5, 0x54, 0xc6, 0xa5, 0x6d, 0x9a, 0x52, 0x11, |
| 0x24, 0x70, 0xda, 0x50, 0x28, 0x2a, 0x12, 0xa8, 0xbd, 0x5e, 0xcb, 0x9f, 0x83, 0xbb, 0x6e, 0x52, |
| 0x24, 0x3e, 0x45, 0x4e, 0xb2, 0xe7, 0x1a, 0x9c, 0x5d, 0xe3, 0x5d, 0x1f, 0x97, 0x67, 0xe0, 0x13, |
| 0x9f, 0x10, 0x8f, 0xc5, 0x23, 0x20, 0x1e, 0x80, 0x27, 0x40, 0x42, 0x3b, 0x6b, 0xc7, 0x69, 0x1a, |
| 0x7a, 0x45, 0x94, 0x2f, 0x49, 0x66, 0xe6, 0x37, 0xbb, 0x3b, 0xbf, 0x99, 0xdf, 0x6e, 0xe0, 0xcb, |
| 0x30, 0x52, 0x4f, 0xb2, 0xa9, 0x3f, 0x13, 0x8b, 0x41, 0x9c, 0xcd, 0x22, 0xfc, 0x78, 0x2f, 0x14, |
| 0x83, 0x58, 0x84, 0x73, 0x11, 0x0e, 0x82, 0x24, 0x1a, 0x30, 0x3e, 0x4f, 0x44, 0xc4, 0x95, 0x1c, |
| 0xcc, 0x84, 0x48, 0xe7, 0x11, 0x0f, 0x94, 0x48, 0x35, 0x40, 0x0e, 0x4e, 0x6e, 0xe2, 0xb7, 0x9f, |
| 0xa4, 0x42, 0x09, 0x52, 0x37, 0x49, 0xde, 0xc1, 0x7f, 0x5e, 0x54, 0xaa, 0x40, 0x31, 0xb3, 0xaa, |
| 0x37, 0x7c, 0x81, 0xd5, 0x62, 0x11, 0x26, 0x53, 0xfd, 0x99, 0xe7, 0x5c, 0x09, 0x85, 0x08, 0x63, |
| 0x36, 0x40, 0x6b, 0x9a, 0x1d, 0x0f, 0x54, 0xb4, 0x60, 0x52, 0x05, 0x8b, 0x24, 0x07, 0x5c, 0xde, |
| 0x04, 0xcc, 0xb3, 0x34, 0x50, 0x91, 0xe0, 0x26, 0xde, 0xfb, 0xa9, 0x0a, 0xf0, 0x90, 0x29, 0xca, |
| 0x7e, 0xc8, 0x98, 0x54, 0xc4, 0x85, 0x46, 0x92, 0x8a, 0xef, 0xd8, 0x4c, 0xb9, 0x56, 0xd7, 0xea, |
| 0xb7, 0x68, 0x61, 0x12, 0x02, 0x76, 0x12, 0xa8, 0x27, 0x6e, 0x05, 0xdd, 0xf8, 0x9b, 0x9c, 0x87, |
| 0x1a, 0x16, 0xe0, 0x56, 0xbb, 0x56, 0xbf, 0x49, 0x8d, 0xa1, 0xbd, 0x11, 0x9f, 0xb3, 0x53, 0xd7, |
| 0xee, 0x5a, 0xfd, 0x2a, 0x35, 0x06, 0xb9, 0x04, 0x30, 0x5d, 0x2a, 0x36, 0x99, 0x89, 0x8c, 0x2b, |
| 0xb7, 0xd6, 0xb5, 0xfa, 0x35, 0xda, 0xd2, 0x9e, 0x3d, 0xed, 0x20, 0x17, 0xa1, 0x15, 0x8b, 0x30, |
| 0x8f, 0xd6, 0x31, 0xda, 0x8c, 0x45, 0x68, 0x82, 0xd7, 0x61, 0x97, 0x0b, 0x3e, 0x99, 0x09, 0xae, |
| 0xa2, 0x30, 0x13, 0x99, 0x74, 0x1b, 0xb8, 0xe1, 0x0e, 0x17, 0x7c, 0x6f, 0xe5, 0x24, 0x9f, 0xc3, |
| 0xb9, 0x90, 0xa9, 0x89, 0x8c, 0x42, 0xce, 0xe6, 0x93, 0x2c, 0x8d, 0xa5, 0xdb, 0xec, 0x5a, 0x7d, |
| 0x67, 0x78, 0xd5, 0x37, 0x14, 0xfa, 0x65, 0xa5, 0xfe, 0x28, 0x0a, 0xf9, 0x63, 0x7a, 0x90, 0x9b, |
| 0x74, 0x27, 0x64, 0x6a, 0x84, 0x89, 0x8f, 0xd3, 0x58, 0x7a, 0x19, 0xec, 0x3e, 0x0d, 0x20, 0x1f, |
| 0x40, 0x33, 0x8e, 0x8e, 0x99, 0xe6, 0x17, 0xa9, 0x71, 0x86, 0x6f, 0xf8, 0x86, 0x5b, 0xbf, 0xe0, |
| 0xd6, 0xbf, 0x9f, 0x73, 0x4b, 0x57, 0x50, 0x72, 0x01, 0xea, 0x52, 0xa5, 0x2c, 0x58, 0x20, 0x71, |
| 0x4d, 0x9a, 0x5b, 0x25, 0x49, 0x39, 0x75, 0x68, 0xf4, 0x1e, 0x81, 0x33, 0x0e, 0xa2, 0xf8, 0x25, |
| 0x76, 0xa3, 0xf7, 0x47, 0x05, 0x1c, 0x2c, 0x5b, 0x26, 0x82, 0x4b, 0xf6, 0x9c, 0x35, 0xdf, 0x2d, |
| 0xf2, 0x2b, 0x58, 0xde, 0x85, 0x82, 0xb4, 0x03, 0x11, 0x8e, 0xf0, 0xd0, 0x23, 0x1d, 0x2d, 0xba, |
| 0xec, 0x83, 0x3d, 0x67, 0x72, 0x86, 0x9b, 0x39, 0x43, 0xcf, 0xc7, 0xc9, 0x2c, 0xb1, 0xf7, 0x99, |
| 0x9c, 0xa5, 0x51, 0xa2, 0x44, 0x4a, 0x11, 0x47, 0xae, 0x81, 0xad, 0x87, 0xde, 0xb5, 0xbb, 0xd5, |
| 0xbe, 0x33, 0x3c, 0x57, 0xe2, 0xf7, 0xb9, 0x4a, 0x97, 0x14, 0x83, 0xe4, 0x53, 0x70, 0xd6, 0xbb, |
| 0x57, 0xc3, 0xb5, 0x2f, 0x3f, 0xd5, 0x3d, 0x53, 0x86, 0x5f, 0xf6, 0x8a, 0x82, 0x2c, 0xfb, 0x76, |
| 0x02, 0x50, 0x46, 0xc8, 0x1d, 0x00, 0x76, 0x9a, 0x44, 0xa6, 0x29, 0x79, 0xd7, 0xbc, 0x67, 0xba, |
| 0x36, 0x2e, 0x24, 0x43, 0xd7, 0xd0, 0x1b, 0x8d, 0x6b, 0x6d, 0x6f, 0x5c, 0xab, 0x68, 0xdc, 0x2f, |
| 0x35, 0x68, 0x3f, 0xca, 0x58, 0xba, 0x7c, 0xc9, 0x42, 0xc2, 0x43, 0xa2, 0x90, 0x9a, 0xd4, 0x18, |
| 0x3a, 0x9f, 0xb3, 0x53, 0x23, 0xa1, 0x16, 0xc5, 0xdf, 0xe4, 0x0a, 0x38, 0x8b, 0xe0, 0x74, 0x92, |
| 0x32, 0x99, 0xc5, 0x4a, 0xe6, 0xfa, 0x81, 0x45, 0x70, 0x4a, 0x8d, 0x87, 0x5c, 0x85, 0xb6, 0x56, |
| 0x0f, 0xe3, 0x6a, 0xa2, 0x96, 0x09, 0x73, 0x01, 0x93, 0x9d, 0xdc, 0x37, 0x5e, 0x26, 0x8c, 0x3c, |
| 0x00, 0xc7, 0x94, 0x68, 0x10, 0x0e, 0xb2, 0x75, 0xbd, 0xe0, 0x7e, 0xbd, 0x38, 0xdf, 0xb4, 0x58, |
| 0x67, 0x3d, 0x88, 0x62, 0xc5, 0x52, 0x0a, 0x72, 0xe5, 0x21, 0x37, 0xa0, 0xc6, 0xd9, 0x8f, 0x2c, |
| 0x75, 0xdb, 0x67, 0xf2, 0x6d, 0x80, 0x3a, 0x43, 0xc4, 0x73, 0x96, 0xba, 0x3b, 0x67, 0x67, 0x20, |
| 0x90, 0x5c, 0x83, 0x1d, 0x0c, 0x4e, 0x4e, 0x58, 0x2a, 0x75, 0x6f, 0x77, 0xb1, 0x9e, 0x36, 0x3a, |
| 0xbf, 0x31, 0x3e, 0x32, 0x04, 0x5b, 0x05, 0xa1, 0x74, 0xcf, 0xe1, 0xc4, 0x5d, 0xde, 0x5a, 0xc9, |
| 0x38, 0x08, 0x65, 0x3e, 0x80, 0x1a, 0x4b, 0x6e, 0x41, 0x3d, 0xc9, 0xd2, 0x90, 0xcd, 0xdd, 0x4e, |
| 0xd7, 0xea, 0xef, 0x0e, 0xdf, 0xdc, 0x9e, 0x95, 0x46, 0x3c, 0x48, 0x97, 0x34, 0xc7, 0x7a, 0x1f, |
| 0x43, 0x67, 0x93, 0x12, 0xf2, 0x36, 0xd4, 0x4e, 0x82, 0x38, 0x33, 0x97, 0xc5, 0xee, 0xf0, 0xd5, |
| 0x7c, 0xe0, 0x4b, 0x1c, 0x35, 0x71, 0xef, 0x36, 0xb4, 0x56, 0xa7, 0x20, 0x1d, 0xa8, 0x7e, 0xcf, |
| 0x96, 0xf9, 0xc8, 0xe8, 0x9f, 0x7a, 0x08, 0xcc, 0x3a, 0x66, 0x5e, 0x8c, 0x71, 0xa7, 0xf2, 0x91, |
| 0xd5, 0x7b, 0x0b, 0x1a, 0xf9, 0x41, 0x48, 0x13, 0xec, 0x7b, 0x87, 0xe3, 0xcf, 0x3a, 0xaf, 0x90, |
| 0x06, 0x54, 0xbf, 0xdd, 0x1f, 0x75, 0x2c, 0x52, 0x87, 0xca, 0xd7, 0x87, 0x9d, 0x4a, 0xef, 0xe7, |
| 0x0a, 0xec, 0xe4, 0x87, 0x3f, 0xf3, 0x06, 0xf8, 0x10, 0x1a, 0xa6, 0x91, 0xd2, 0xad, 0x20, 0x69, |
| 0x9b, 0xe5, 0x17, 0xe2, 0x43, 0x10, 0x2d, 0xc0, 0xab, 0x91, 0xac, 0x96, 0x23, 0xe9, 0xfd, 0x6a, |
| 0x41, 0xdd, 0xe0, 0x56, 0x13, 0x6f, 0xad, 0x4d, 0xfc, 0xff, 0x7b, 0xd9, 0x5c, 0x02, 0xd0, 0xdf, |
| 0x93, 0x52, 0x3e, 0x6d, 0xda, 0xd2, 0x9e, 0x23, 0x7c, 0xf4, 0xfe, 0xb4, 0xc0, 0x39, 0x88, 0xe4, |
| 0x0b, 0xbc, 0x7a, 0x17, 0xa1, 0xa5, 0x8f, 0x3b, 0x99, 0x06, 0xb2, 0xe8, 0x40, 0x53, 0x3b, 0xee, |
| 0x05, 0x92, 0xfd, 0x83, 0x6a, 0x0b, 0x32, 0xec, 0xa7, 0xf5, 0x99, 0x6b, 0x4b, 0xf0, 0x78, 0x89, |
| 0xd2, 0x6d, 0x16, 0xa2, 0x39, 0xe4, 0xf1, 0x52, 0xbf, 0x70, 0x11, 0x9f, 0xc5, 0xd9, 0x9c, 0x4d, |
| 0xf2, 0xf9, 0xab, 0x9b, 0x17, 0x2e, 0xf7, 0x1e, 0xa1, 0x53, 0x5f, 0x4a, 0xe2, 0xf8, 0x58, 0x32, |
| 0x85, 0x0f, 0x60, 0x8d, 0xe6, 0xd6, 0xa6, 0xfe, 0x9b, 0x9b, 0xfa, 0xef, 0xfd, 0x55, 0x81, 0xb6, |
| 0xa9, 0xf8, 0xcc, 0x21, 0x78, 0x6e, 0xc9, 0x5b, 0x3a, 0x4d, 0x3e, 0x01, 0x98, 0x89, 0x45, 0x22, |
| 0x38, 0xe3, 0xaa, 0xb8, 0xdf, 0x57, 0x6a, 0x5b, 0xdf, 0xd4, 0xdf, 0x2b, 0x60, 0x74, 0x2d, 0xc3, |
| 0xfb, 0xdd, 0x82, 0xd6, 0x2a, 0x82, 0x3b, 0x04, 0xf9, 0x1b, 0xab, 0x77, 0x08, 0x16, 0x8c, 0xdc, |
| 0x06, 0x1b, 0xef, 0xa4, 0x0a, 0x4a, 0xe9, 0xda, 0xf3, 0xd7, 0xf6, 0x51, 0x5c, 0x98, 0x50, 0x4e, |
| 0x59, 0xf5, 0xdf, 0x4c, 0x99, 0xfd, 0x62, 0x53, 0xd6, 0x7b, 0x07, 0x6c, 0xbc, 0xf1, 0x9a, 0x60, |
| 0x1f, 0xdd, 0x45, 0xf5, 0x01, 0xd4, 0x47, 0x63, 0xba, 0x7f, 0xf7, 0xab, 0x8e, 0x45, 0x1c, 0x68, |
| 0x1c, 0xd1, 0xc3, 0x2f, 0xf6, 0xf7, 0xc6, 0x9d, 0xca, 0xf0, 0x37, 0x0b, 0xec, 0x03, 0xfd, 0xc2, |
| 0xf9, 0x50, 0x7d, 0xc8, 0x14, 0x21, 0xcf, 0xfe, 0x23, 0xf1, 0x5e, 0xdb, 0xf2, 0xce, 0x91, 0x1b, |
| 0x60, 0xeb, 0x7f, 0x04, 0x64, 0x15, 0x5c, 0xfb, 0x7f, 0xb0, 0x3d, 0xe3, 0x16, 0xd4, 0x50, 0xad, |
| 0xe4, 0xfc, 0xb6, 0xbb, 0xcb, 0x7b, 0x7d, 0xab, 0xa4, 0xc9, 0x4d, 0xb0, 0x35, 0x9d, 0xe5, 0x3e, |
| 0x6b, 0xfa, 0xf0, 0xce, 0x6f, 0x63, 0x7c, 0x5a, 0x47, 0x75, 0xbd, 0xff, 0x77, 0x00, 0x00, 0x00, |
| 0xff, 0xff, 0x92, 0xcb, 0xcc, 0xa4, 0x5b, 0x0b, 0x00, 0x00, |
| } |