Commit f6cbb261 by Kyle Brandt Committed by GitHub

BackendPlugin: Change QueryData response format (#23234)

* BackendPlugin: (wip) change response format
goes with https://github.com/grafana/grafana-plugin-sdk-go/pull/109

* fix error mapping in wrapper

* latest of my sdk branch

* latest of my sdk branch

* TransformWrapper fixes

* latest of sdk branch (removes extra meta)

* add metadata in wrappers

* also set error string

* sdk: v0.35.0
parent afd8ffde
......@@ -30,7 +30,7 @@ require (
github.com/gorilla/websocket v1.4.1
github.com/gosimple/slug v1.4.2
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-sdk-go v0.33.0
github.com/grafana/grafana-plugin-sdk-go v0.35.0
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd
github.com/hashicorp/go-plugin v1.0.1
github.com/hashicorp/go-version v1.1.0
......
......@@ -128,8 +128,8 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ=
github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To=
github.com/grafana/grafana-plugin-sdk-go v0.33.0 h1:+eFcOV/KioHTTRNimENZeajlkw31B+m92RNRShooPEQ=
github.com/grafana/grafana-plugin-sdk-go v0.33.0/go.mod h1:4rVPIvfv7SzFC0AA/8T5tmDRxIsrvDJOF9p4SrQGS1M=
github.com/grafana/grafana-plugin-sdk-go v0.35.0 h1:IxNaNq8hN3ShQ804FURFOd1ehbKOmFROztY+8vohhW8=
github.com/grafana/grafana-plugin-sdk-go v0.35.0/go.mod h1:zX/Zz/HYDAkL1NxffOZeixqPqIVVoCTWI2AuFy4J+V4=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE=
......@@ -180,6 +180,7 @@ github.com/linkedin/goavro/v2 v2.9.7 h1:Vd++Rb/RKcmNJjM0HP/JJFMEWa21eUBVKPYlKehO
github.com/linkedin/goavro/v2 v2.9.7/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de/go.mod h1:3q8WtuPQsoRbatJuy3nvq/hRSvuBJrHHr+ybPPiNvHQ=
github.com/lunny/nodb v0.0.0-20160621015157-fc1ef06ad4af/go.mod h1:Cqz6pqow14VObJ7peltM+2n3PWOz7yTrfUuGbVFkzN0=
github.com/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
github.com/mattetti/filebuffer v1.0.0 h1:ixTvQ0JjBTwWbdpDZ98lLrydo7KRi8xNRIi5RFszsbY=
github.com/mattetti/filebuffer v1.0.0/go.mod h1:X6nyAIge2JGVmuJt2MFCqmHrb/5IHiphfHtot0s5cnI=
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
......
......@@ -2,12 +2,13 @@ package wrapper
import (
"context"
"fmt"
"time"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/plugins/backendplugin"
"github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/tsdb"
......@@ -81,12 +82,24 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS
return nil, err
}
return &tsdb.Response{
Results: map[string]*tsdb.QueryResult{
"": {
Dataframes: pbRes.Frames,
Meta: simplejson.NewFromAny(pbRes.Metadata),
},
},
}, nil
tR := &tsdb.Response{
Results: make(map[string]*tsdb.QueryResult, len(pbRes.Responses)),
}
for refID, pRes := range pbRes.Responses {
qr := &tsdb.QueryResult{
RefId: refID,
Dataframes: pRes.Frames,
}
if len(pRes.JsonMeta) != 0 {
qr.Meta = simplejson.NewFromAny(pRes.JsonMeta)
}
if pRes.Error != "" {
qr.Error = fmt.Errorf(pRes.Error)
qr.ErrorString = pRes.Error
}
tR.Results[refID] = qr
}
return tR, nil
}
......@@ -103,14 +103,25 @@ func (tw *TransformWrapper) Transform(ctx context.Context, query *tsdb.TsdbQuery
return nil, err
}
return &tsdb.Response{
Results: map[string]*tsdb.QueryResult{
"": {
Dataframes: pbRes.Frames,
Meta: simplejson.NewFromAny(pbRes.Metadata),
},
},
}, nil
tR := &tsdb.Response{
Results: make(map[string]*tsdb.QueryResult, len(pbRes.Responses)),
}
for refID, res := range pbRes.Responses {
tRes := &tsdb.QueryResult{
RefId: refID,
Dataframes: res.Frames,
}
if len(res.JsonMeta) != 0 {
tRes.Meta = simplejson.NewFromAny(res.JsonMeta)
}
if res.Error != "" {
tRes.Error = fmt.Errorf(res.Error)
tRes.ErrorString = res.Error
}
tR.Results[refID] = tRes
}
return tR, nil
}
type transformCallback struct {
......@@ -168,18 +179,16 @@ func (s *transformCallback) QueryData(ctx context.Context, req *pluginv2.QueryDa
}
// Convert tsdb results (map) to plugin-model/datasource (slice) results.
// Only error, tsdb.Series, and encoded Dataframes responses are mapped.
encodedFrames := [][]byte{}
responses := make(map[string]*pluginv2.DataResponse, len(tsdbRes.Results))
for refID, res := range tsdbRes.Results {
pRes := &pluginv2.DataResponse{}
if res.Error != nil {
// TODO add Errors property to Frame
encodedFrames = append(encodedFrames, nil)
continue
pRes.Error = res.Error.Error()
}
if res.Dataframes != nil {
encodedFrames = append(encodedFrames, res.Dataframes...)
pRes.Frames = res.Dataframes
responses[refID] = pRes
continue
}
......@@ -193,8 +202,18 @@ func (s *transformCallback) QueryData(ctx context.Context, req *pluginv2.QueryDa
if err != nil {
return nil, err
}
encodedFrames = append(encodedFrames, encFrame)
pRes.Frames = append(pRes.Frames, encFrame)
}
if res.Meta != nil {
b, err := res.Meta.MarshalJSON()
if err != nil {
s.logger.Error("failed to marhsal json metadata", err)
}
pRes.JsonMeta = b
}
return &pluginv2.QueryDataResponse{Frames: encodedFrames}, nil
responses[refID] = pRes
}
return &pluginv2.QueryDataResponse{
Responses: responses,
}, nil
}
......@@ -657,7 +657,7 @@ func UnmarshalArrow(b []byte) (*Frame, error) {
if metaAsString, ok := getMDKey("meta", metaData); ok {
var err error
frame.Meta, err = QueryResultMetaFromJSON(metaAsString)
frame.Meta, err = FrameMetaFromJSON(metaAsString)
if err != nil {
return nil, err
}
......@@ -692,3 +692,29 @@ func toJSONString(val interface{}) (string, error) {
}
return string(b), nil
}
// BytesSliceToFrames decodes a slice of encoded Arrow frames to a slice of *Frame.
func BytesSliceToFrames(bFrames [][]byte) ([]*Frame, error) {
frames := make([]*Frame, len(bFrames))
var err error
for i, encodedFrame := range bFrames {
frames[i], err = UnmarshalArrow(encodedFrame)
if err != nil {
return nil, err
}
}
return frames, nil
}
// FramesToBytesSlice encodes a slice of Frames into a slice of []byte.
func FramesToBytesSlice(frames []*Frame) ([][]byte, error) {
bs := make([][]byte, len(frames))
var err error
for i, frame := range frames {
bs[i], err = MarshalArrow(frame)
if err != nil {
return nil, err
}
}
return bs, nil
}
......@@ -28,7 +28,7 @@ type Frame struct {
Fields []*Field
RefID string
Meta *QueryResultMeta
Meta *FrameMeta
Warnings []Warning
}
......@@ -263,29 +263,13 @@ func FrameTestCompareOptions() []cmp.Option {
if x == nil && y == nil {
return true
}
if y == nil {
if math.IsNaN(float64(*x)) {
return true
}
if math.IsInf(float64(*x), 1) {
return true
if y == nil && x != nil || y != nil && x == nil {
return false
}
if math.IsInf(float64(*x), -1) {
return true
}
}
if x == nil {
if math.IsNaN(float64(*y)) {
return true
}
if math.IsInf(float64(*y), 1) {
return true
}
if math.IsInf(float64(*y), -1) {
return true
}
}
return *x == *y
return (math.IsNaN(float64(*x)) && math.IsNaN(float64(*y))) ||
(math.IsInf(float64(*x), 1) && math.IsInf(float64(*y), 1)) ||
(math.IsInf(float64(*x), -1) && math.IsInf(float64(*y), -1)) ||
*x == *y
})
f64s := cmp.Comparer(func(x, y float64) bool {
return (math.IsNaN(x) && math.IsNaN(y)) ||
......@@ -297,29 +281,13 @@ func FrameTestCompareOptions() []cmp.Option {
if x == nil && y == nil {
return true
}
if y == nil {
if math.IsNaN(float64(*x)) {
return true
}
if math.IsInf(float64(*x), 1) {
return true
}
if math.IsInf(float64(*x), -1) {
return true
}
if y == nil && x != nil || y != nil && x == nil {
return false
}
if x == nil {
if math.IsNaN(float64(*y)) {
return true
}
if math.IsInf(float64(*y), 1) {
return true
}
if math.IsInf(float64(*y), -1) {
return true
}
}
return *x == *y
return (math.IsNaN(float64(*x)) && math.IsNaN(float64(*y))) ||
(math.IsInf(float64(*x), 1) && math.IsInf(float64(*y), 1)) ||
(math.IsInf(float64(*x), -1) && math.IsInf(float64(*y), -1)) ||
*x == *y
})
f32s := cmp.Comparer(func(x, y float32) bool {
return (math.IsNaN(float64(x)) && math.IsNaN(float64(y))) ||
......@@ -369,6 +337,8 @@ func (f *Frame) StringTable(maxFields, maxRows int) (string, error) {
sb := &strings.Builder{}
sb.WriteString(fmt.Sprintf("Name: %v\n", f.Name))
sb.WriteString(fmt.Sprintf("Dimensions: %v Fields by %v Rows\n", len(f.Fields), rowLen))
table := tablewriter.NewWriter(sb)
// table formatting options
......@@ -377,9 +347,6 @@ func (f *Frame) StringTable(maxFields, maxRows int) (string, error) {
table.SetAutoWrapText(false)
table.SetAlignment(tablewriter.ALIGN_LEFT)
// (caption is below the table)
table.SetCaption(true, fmt.Sprintf("Field Count: %v\nRow Count: %v", len(f.Fields), rowLen))
// set table headers
headers := make([]string, width)
for colIdx, field := range f.Fields {
......
......@@ -2,24 +2,24 @@ package data
import "encoding/json"
// QueryResultMeta matches:
// FrameMeta matches:
// https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L11
// NOTE -- in javascript this can accept any `[key: string]: any;` however
// this interface only exposes the values we want to be exposed
type QueryResultMeta struct {
// Used in Explore for highlighting
SearchWords []string `json:"searchWords,omitempty"`
// Used in Explore to show limit applied to search result
Limit int64 `json:"limit,omitempty"`
type FrameMeta struct {
// Datasource specific values
Custom map[string]interface{} `json:"custom,omitempty"`
// Stats is TODO
Stats interface{} `json:"stats,omitempty"`
// Notices is TODO
Notices interface{} `json:"notices,omitempty"`
}
// QueryResultMetaFromJSON creates a QueryResultMeta from a json string
func QueryResultMetaFromJSON(jsonStr string) (*QueryResultMeta, error) {
var m QueryResultMeta
// FrameMetaFromJSON creates a QueryResultMeta from a json string
func FrameMetaFromJSON(jsonStr string) (*FrameMeta, error) {
var m FrameMeta
err := json.Unmarshal([]byte(jsonStr), &m)
if err != nil {
return nil, err
......
......@@ -49,7 +49,7 @@ func (x CheckHealthResponse_HealthStatus) String() string {
}
func (CheckHealthResponse_HealthStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13, 0}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{14, 0}
}
type DataSourceConfig struct {
......@@ -677,11 +677,8 @@ func (m *QueryDataRequest) GetQueries() []*DataQuery {
}
type QueryDataResponse struct {
// Arrow encoded DataFrames
// Each frame encodes its own: Errors, meta, and refId
Frames [][]byte `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"`
// Additional response metadata
Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Map of refId to response
Responses map[string]*DataResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
......@@ -712,16 +709,66 @@ func (m *QueryDataResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_QueryDataResponse proto.InternalMessageInfo
func (m *QueryDataResponse) GetFrames() [][]byte {
func (m *QueryDataResponse) GetResponses() map[string]*DataResponse {
if m != nil {
return m.Responses
}
return nil
}
type DataResponse struct {
// Arrow encoded DataFrames
// Frame has its own meta, warnings, and repeats refId
Frames [][]byte `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"`
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
JsonMeta []byte `protobuf:"bytes,3,opt,name=jsonMeta,proto3" json:"jsonMeta,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DataResponse) Reset() { *m = DataResponse{} }
func (m *DataResponse) String() string { return proto.CompactTextString(m) }
func (*DataResponse) ProtoMessage() {}
func (*DataResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10}
}
func (m *DataResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DataResponse.Unmarshal(m, b)
}
func (m *DataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DataResponse.Marshal(b, m, deterministic)
}
func (m *DataResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_DataResponse.Merge(m, src)
}
func (m *DataResponse) XXX_Size() int {
return xxx_messageInfo_DataResponse.Size(m)
}
func (m *DataResponse) XXX_DiscardUnknown() {
xxx_messageInfo_DataResponse.DiscardUnknown(m)
}
var xxx_messageInfo_DataResponse proto.InternalMessageInfo
func (m *DataResponse) GetFrames() [][]byte {
if m != nil {
return m.Frames
}
return nil
}
func (m *QueryDataResponse) GetMetadata() map[string]string {
func (m *DataResponse) GetError() string {
if m != nil {
return m.Error
}
return ""
}
func (m *DataResponse) GetJsonMeta() []byte {
if m != nil {
return m.Metadata
return m.JsonMeta
}
return nil
}
......@@ -736,7 +783,7 @@ func (m *CollectMetricsRequest) Reset() { *m = CollectMetricsRequest{} }
func (m *CollectMetricsRequest) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsRequest) ProtoMessage() {}
func (*CollectMetricsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{10}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11}
}
func (m *CollectMetricsRequest) XXX_Unmarshal(b []byte) error {
......@@ -768,7 +815,7 @@ func (m *CollectMetricsResponse) Reset() { *m = CollectMetricsResponse{}
func (m *CollectMetricsResponse) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsResponse) ProtoMessage() {}
func (*CollectMetricsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12}
}
func (m *CollectMetricsResponse) XXX_Unmarshal(b []byte) error {
......@@ -807,7 +854,7 @@ func (m *CollectMetricsResponse_Payload) Reset() { *m = CollectMetricsRe
func (m *CollectMetricsResponse_Payload) String() string { return proto.CompactTextString(m) }
func (*CollectMetricsResponse_Payload) ProtoMessage() {}
func (*CollectMetricsResponse_Payload) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{11, 0}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12, 0}
}
func (m *CollectMetricsResponse_Payload) XXX_Unmarshal(b []byte) error {
......@@ -846,7 +893,7 @@ func (m *CheckHealthRequest) Reset() { *m = CheckHealthRequest{} }
func (m *CheckHealthRequest) String() string { return proto.CompactTextString(m) }
func (*CheckHealthRequest) ProtoMessage() {}
func (*CheckHealthRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{12}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13}
}
func (m *CheckHealthRequest) XXX_Unmarshal(b []byte) error {
......@@ -887,7 +934,7 @@ func (m *CheckHealthResponse) Reset() { *m = CheckHealthResponse{} }
func (m *CheckHealthResponse) String() string { return proto.CompactTextString(m) }
func (*CheckHealthResponse) ProtoMessage() {}
func (*CheckHealthResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{13}
return fileDescriptor_5ab9ba5b8d8b2ba5, []int{14}
}
func (m *CheckHealthResponse) XXX_Unmarshal(b []byte) error {
......@@ -946,7 +993,8 @@ func init() {
proto.RegisterType((*QueryDataRequest)(nil), "pluginv2.QueryDataRequest")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.QueryDataRequest.HeadersEntry")
proto.RegisterType((*QueryDataResponse)(nil), "pluginv2.QueryDataResponse")
proto.RegisterMapType((map[string]string)(nil), "pluginv2.QueryDataResponse.MetadataEntry")
proto.RegisterMapType((map[string]*DataResponse)(nil), "pluginv2.QueryDataResponse.ResponsesEntry")
proto.RegisterType((*DataResponse)(nil), "pluginv2.DataResponse")
proto.RegisterType((*CollectMetricsRequest)(nil), "pluginv2.CollectMetricsRequest")
proto.RegisterType((*CollectMetricsResponse)(nil), "pluginv2.CollectMetricsResponse")
proto.RegisterType((*CollectMetricsResponse_Payload)(nil), "pluginv2.CollectMetricsResponse.Payload")
......@@ -957,77 +1005,79 @@ func init() {
func init() { proto.RegisterFile("backend.proto", fileDescriptor_5ab9ba5b8d8b2ba5) }
var fileDescriptor_5ab9ba5b8d8b2ba5 = []byte{
// 1115 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x2e, 0x49, 0xfd, 0x71, 0xa4, 0x18, 0xea, 0x5a, 0x71, 0x08, 0x35, 0x49, 0x05, 0x22, 0x40,
0x95, 0x14, 0x15, 0x5a, 0xe5, 0xd0, 0x22, 0x39, 0xc5, 0x96, 0x0a, 0xc7, 0x8e, 0x7f, 0xba, 0x8a,
0x51, 0x20, 0x45, 0x0f, 0x2b, 0x72, 0x2d, 0xb1, 0xe6, 0x8f, 0xcc, 0x5d, 0x1a, 0xf5, 0x03, 0x14,
0x7d, 0x81, 0x3e, 0x47, 0xfa, 0x14, 0x3d, 0xf5, 0xd8, 0x43, 0x5f, 0xa7, 0xd8, 0xe5, 0x52, 0x24,
0x6d, 0xc9, 0x46, 0x5b, 0xe7, 0xb6, 0x33, 0x9c, 0x9d, 0x9d, 0xf9, 0xe6, 0x9b, 0xcf, 0x32, 0xdc,
0x9b, 0x12, 0xe7, 0x8c, 0x86, 0xee, 0x60, 0x11, 0x47, 0x3c, 0x42, 0x8d, 0x85, 0x9f, 0xcc, 0xbc,
0xf0, 0x62, 0x68, 0xff, 0x69, 0x40, 0x7b, 0x44, 0x38, 0x99, 0x44, 0x49, 0xec, 0xd0, 0x9d, 0x28,
0x3c, 0xf5, 0x66, 0x68, 0x03, 0x74, 0xcf, 0xb5, 0xb4, 0x9e, 0xd6, 0x37, 0xb0, 0xee, 0xb9, 0x08,
0x41, 0x25, 0x24, 0x01, 0xb5, 0xf4, 0x9e, 0xd6, 0x37, 0xb1, 0x3c, 0xa3, 0x36, 0x18, 0x49, 0xec,
0x5b, 0x86, 0x74, 0x89, 0xa3, 0x88, 0x4a, 0x18, 0x8d, 0xad, 0x4a, 0x1a, 0x25, 0xce, 0xa8, 0x0b,
0x0d, 0x97, 0x70, 0x32, 0x25, 0x8c, 0x5a, 0x55, 0xe9, 0x5f, 0xda, 0xe8, 0x19, 0xb4, 0xa7, 0x84,
0x79, 0xce, 0xab, 0x84, 0xcf, 0xc7, 0x21, 0x99, 0xfa, 0xd4, 0xb5, 0x6a, 0x3d, 0xad, 0xdf, 0xc0,
0xd7, 0xfc, 0xe8, 0x89, 0xe8, 0x40, 0xf9, 0x4e, 0xc4, 0x23, 0x75, 0x99, 0xac, 0xec, 0x14, 0xaf,
0xfd, 0xc4, 0xa2, 0x50, 0xf4, 0x63, 0x35, 0x7a, 0x5a, 0xbf, 0x85, 0x97, 0x36, 0x3a, 0x87, 0x07,
0x2e, 0x75, 0xe2, 0xcb, 0x05, 0xa7, 0xee, 0x84, 0x3a, 0x49, 0x4c, 0xf7, 0xb2, 0x50, 0xb3, 0x67,
0xf4, 0x9b, 0xc3, 0xaf, 0x07, 0x19, 0x28, 0x83, 0xab, 0x80, 0x0c, 0x46, 0xab, 0x6f, 0x8e, 0x43,
0x1e, 0x5f, 0xe2, 0x75, 0x79, 0x45, 0xd1, 0x3e, 0x61, 0xfc, 0x64, 0xe1, 0x12, 0x4e, 0xdd, 0x83,
0x89, 0x05, 0x12, 0xd1, 0xb2, 0xb3, 0xbb, 0x07, 0x0f, 0x6f, 0x4a, 0x2f, 0x80, 0x3e, 0xa3, 0x97,
0x72, 0x1a, 0x26, 0x16, 0x47, 0xd4, 0x81, 0xea, 0x05, 0xf1, 0x93, 0x6c, 0x1e, 0xa9, 0xf1, 0x42,
0xff, 0x46, 0xb3, 0x7f, 0x31, 0xa0, 0x75, 0x2c, 0xbb, 0x50, 0x93, 0xec, 0x40, 0x35, 0x8a, 0x67,
0xaf, 0xb3, 0x61, 0xa6, 0x86, 0xc0, 0x29, 0xed, 0xf5, 0xb5, 0xab, 0x72, 0x2c, 0xed, 0x12, 0x86,
0xc6, 0x15, 0x0c, 0x83, 0xf5, 0x18, 0x56, 0x24, 0x86, 0xcf, 0x73, 0x0c, 0x8b, 0x65, 0xdc, 0x15,
0x7e, 0xd5, 0x15, 0xf8, 0xa1, 0x6f, 0xa1, 0x2d, 0x28, 0xc5, 0x0a, 0xf3, 0x92, 0x34, 0x6a, 0x0e,
0xbb, 0xeb, 0x27, 0x8a, 0xaf, 0xdd, 0xb9, 0xd3, 0x39, 0xbc, 0x83, 0x8a, 0x24, 0x64, 0x07, 0xaa,
0x7e, 0x34, 0xf3, 0x42, 0x75, 0x2b, 0x35, 0x56, 0xae, 0x53, 0x07, 0xaa, 0x34, 0x20, 0x5e, 0xb6,
0x50, 0xa9, 0x21, 0x22, 0xe3, 0xc8, 0xa7, 0xd9, 0x4a, 0x89, 0xb3, 0xfd, 0x04, 0x60, 0xc2, 0x63,
0x2f, 0x9c, 0xbd, 0xf1, 0x18, 0x47, 0x5b, 0x50, 0x93, 0xcf, 0x32, 0x4b, 0xeb, 0x19, 0x7d, 0x13,
0x2b, 0xcb, 0xfe, 0x4b, 0x87, 0xcd, 0x1d, 0xe2, 0xfb, 0x98, 0xa6, 0x4d, 0x62, 0x7a, 0x9e, 0x50,
0xc6, 0xd1, 0x00, 0x6a, 0x4e, 0x8a, 0x91, 0x26, 0x31, 0xda, 0x5a, 0x3d, 0x31, 0xac, 0xa2, 0x90,
0xad, 0x96, 0x5a, 0x97, 0xd1, 0x1b, 0x79, 0xb4, 0xe8, 0x4f, 0x2d, 0x39, 0x82, 0xca, 0x82, 0xf0,
0xb9, 0x2a, 0x5d, 0x9e, 0x45, 0x5d, 0x01, 0xe5, 0xf3, 0xc8, 0x55, 0xb5, 0x2b, 0x2b, 0x93, 0x8d,
0x6a, 0x2e, 0x1b, 0x23, 0xa8, 0xcf, 0x29, 0x71, 0x69, 0xcc, 0xac, 0x9a, 0x24, 0xd1, 0xb3, 0xfc,
0x91, 0x15, 0x1d, 0x0c, 0x76, 0xd3, 0xe0, 0x94, 0x3b, 0xd9, 0x55, 0x51, 0xc3, 0x34, 0x72, 0x2f,
0xa5, 0x2e, 0xb4, 0xb0, 0x3c, 0x77, 0x8f, 0xa1, 0x55, 0x0c, 0x5e, 0x31, 0xc1, 0x67, 0xc5, 0x09,
0x36, 0x87, 0x9d, 0xfc, 0xe5, 0x1c, 0xe2, 0xe2, 0x5c, 0xff, 0xd6, 0xa0, 0x53, 0xae, 0x89, 0x2d,
0xa2, 0x90, 0x51, 0xf1, 0xbc, 0x13, 0xb9, 0x54, 0xe6, 0xae, 0x62, 0x79, 0x46, 0xe3, 0xbc, 0x31,
0x5d, 0x36, 0xf6, 0xf9, 0xba, 0xc6, 0xd2, 0x24, 0xb7, 0x74, 0x66, 0x7c, 0xd0, 0xce, 0xf6, 0xc1,
0x7c, 0xeb, 0x05, 0x14, 0x93, 0x70, 0x46, 0x51, 0x0f, 0x9a, 0xa7, 0x71, 0x14, 0x8c, 0x17, 0x91,
0x33, 0x3f, 0x98, 0x28, 0xed, 0x28, 0xba, 0xd0, 0x43, 0x30, 0x79, 0x94, 0x7d, 0xd7, 0xe5, 0xf7,
0xdc, 0x61, 0xbf, 0xd7, 0xc0, 0x14, 0x8b, 0xf3, 0x5d, 0x42, 0x63, 0xb9, 0x26, 0x31, 0x3d, 0x55,
0x1a, 0x64, 0xe2, 0xd4, 0x10, 0xcb, 0x1d, 0x90, 0x9f, 0x45, 0xd4, 0x71, 0xe4, 0x85, 0x9c, 0xa9,
0x2c, 0x65, 0x27, 0x7a, 0x0c, 0xe0, 0x85, 0x9c, 0xc6, 0x17, 0xc4, 0x3f, 0x98, 0x48, 0x08, 0x0c,
0x5c, 0xf0, 0xa0, 0xaf, 0xc0, 0xe4, 0x59, 0xd9, 0x92, 0x69, 0xcd, 0xe1, 0x66, 0xde, 0xea, 0xb2,
0x23, 0x9c, 0x47, 0x09, 0x3c, 0x85, 0xa0, 0x49, 0x0a, 0xb6, 0xb0, 0x3c, 0xdb, 0xbf, 0xe9, 0xd0,
0x96, 0xc5, 0x8a, 0xa7, 0x3f, 0xe4, 0xaa, 0xbc, 0xca, 0x39, 0x61, 0x48, 0x4e, 0x7c, 0x96, 0x87,
0x5d, 0x2d, 0x60, 0x0d, 0x1f, 0xbe, 0x80, 0xfa, 0x79, 0x42, 0x63, 0x8f, 0x32, 0x25, 0xba, 0x9b,
0x65, 0x99, 0x93, 0x69, 0x70, 0x16, 0xd3, 0x7d, 0x71, 0x2b, 0x55, 0xd6, 0xcb, 0xd8, 0xef, 0x1a,
0x7c, 0x5c, 0xa8, 0x4a, 0x71, 0x7d, 0x0b, 0x6a, 0xa7, 0x31, 0x09, 0x94, 0xe4, 0xb4, 0xb0, 0xb2,
0xd0, 0x18, 0x1a, 0x01, 0xe5, 0x44, 0x08, 0xab, 0x22, 0xfc, 0xd3, 0x95, 0xcd, 0x29, 0xb6, 0x1f,
0xa8, 0xd8, 0xb4, 0xbd, 0xe5, 0xd5, 0xee, 0x4b, 0xb8, 0x57, 0xfa, 0xf4, 0xaf, 0x2a, 0x7e, 0x00,
0xf7, 0x77, 0x22, 0xdf, 0xa7, 0x0e, 0x3f, 0xa0, 0x3c, 0xf6, 0x1c, 0xa6, 0xb0, 0xb4, 0x7f, 0xd5,
0x60, 0xeb, 0xea, 0x17, 0xd5, 0xcf, 0x36, 0xd4, 0x83, 0xd4, 0xa5, 0x06, 0xdd, 0x2f, 0xec, 0xe9,
0xca, 0x2b, 0x83, 0x63, 0x72, 0xe9, 0x47, 0xc4, 0xc5, 0xd9, 0xc5, 0xee, 0x53, 0xa8, 0x2b, 0x9f,
0xa0, 0xec, 0x22, 0x8e, 0x84, 0xdc, 0xd1, 0x24, 0xcd, 0xd8, 0xc2, 0x05, 0x8f, 0x3d, 0x02, 0xb4,
0x33, 0xa7, 0xce, 0xd9, 0x2e, 0x25, 0x3e, 0x9f, 0xff, 0x47, 0xb2, 0xd9, 0x7f, 0x68, 0xb0, 0x59,
0x4a, 0xb3, 0x6c, 0xa6, 0xc6, 0x38, 0xe1, 0xea, 0xe5, 0x8d, 0x92, 0x98, 0x5e, 0x0f, 0x1f, 0xa4,
0xe6, 0x44, 0xde, 0xc0, 0xea, 0x26, 0xb2, 0x04, 0x20, 0x8c, 0x91, 0x59, 0x06, 0x70, 0x66, 0x0a,
0x61, 0x90, 0x3f, 0x06, 0x28, 0x27, 0x9e, 0xcf, 0x94, 0x24, 0x15, 0x5d, 0xf6, 0x40, 0xd2, 0x6d,
0x99, 0x13, 0x35, 0xa1, 0x7e, 0x72, 0xb8, 0x7f, 0x78, 0xf4, 0xfd, 0x61, 0xfb, 0x23, 0x54, 0x03,
0xfd, 0x68, 0xbf, 0xad, 0x21, 0x13, 0xaa, 0x63, 0x8c, 0x8f, 0x70, 0x5b, 0x1f, 0xfe, 0x00, 0x8d,
0x4c, 0x07, 0xd1, 0x11, 0xb4, 0x8a, 0xba, 0x88, 0x1e, 0xdd, 0xf8, 0x87, 0xa0, 0xfb, 0xf8, 0x66,
0x39, 0xfd, 0x52, 0x1b, 0xbe, 0x81, 0x8a, 0xfc, 0x21, 0x31, 0x02, 0x73, 0xc9, 0x3f, 0xd4, 0x5d,
0xbf, 0x71, 0xdd, 0x4f, 0x6e, 0x20, 0xec, 0xf0, 0xbd, 0x06, 0xcd, 0x91, 0x47, 0x66, 0x61, 0xc4,
0xb8, 0xe7, 0x30, 0xb4, 0x07, 0xcd, 0x02, 0xa4, 0xe8, 0xe1, 0x1a, 0xa4, 0xd3, 0xcc, 0x8f, 0x6e,
0x9c, 0x03, 0x9a, 0xc0, 0x46, 0x99, 0x6a, 0xe8, 0xd3, 0xf5, 0x24, 0x4c, 0x33, 0xf6, 0x6e, 0x63,
0xe9, 0xf0, 0x04, 0xcc, 0xb7, 0x31, 0x09, 0xd9, 0x69, 0x14, 0x07, 0x68, 0x17, 0xee, 0x2d, 0x8d,
0xff, 0x87, 0xc3, 0x8f, 0x70, 0xbf, 0x94, 0x49, 0x80, 0xbf, 0x4d, 0x9c, 0xb3, 0xbb, 0x81, 0x79,
0xbb, 0xf5, 0x0e, 0x06, 0x2f, 0xb3, 0xef, 0xd3, 0x9a, 0xfc, 0x87, 0xe5, 0xf9, 0x3f, 0x01, 0x00,
0x00, 0xff, 0xff, 0xfc, 0xf3, 0x6d, 0x5e, 0xc1, 0x0c, 0x00, 0x00,
// 1144 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0xc6,
0x13, 0xff, 0x53, 0x9f, 0xe6, 0x48, 0x31, 0xf4, 0x5f, 0x2b, 0x8e, 0xa0, 0x26, 0xa9, 0x40, 0x04,
0xa8, 0x9a, 0xb6, 0x44, 0xab, 0x1c, 0x5a, 0xa4, 0xa7, 0xd8, 0x72, 0xe1, 0xd8, 0xf1, 0x47, 0x57,
0x36, 0x5a, 0xa4, 0xe8, 0x61, 0x45, 0xae, 0x25, 0xd6, 0x14, 0x57, 0xde, 0x5d, 0x1a, 0xf5, 0x03,
0x14, 0x7d, 0x81, 0x3e, 0x47, 0x2e, 0x7d, 0x86, 0x9e, 0x7a, 0xec, 0xa1, 0xaf, 0x53, 0xec, 0x72,
0x29, 0x92, 0xb6, 0x64, 0x03, 0xad, 0x73, 0x9b, 0x99, 0x9d, 0x9d, 0x9d, 0xf9, 0xcd, 0x6f, 0x86,
0x12, 0x3c, 0x18, 0x13, 0xef, 0x9c, 0x46, 0xbe, 0x3b, 0xe7, 0x4c, 0x32, 0xb4, 0x36, 0x0f, 0xe3,
0x49, 0x10, 0x5d, 0x0e, 0x9c, 0x3f, 0xcb, 0xd0, 0x1a, 0x12, 0x49, 0x46, 0x2c, 0xe6, 0x1e, 0xdd,
0x66, 0xd1, 0x59, 0x30, 0x41, 0xeb, 0x50, 0x0a, 0xfc, 0x8e, 0xd5, 0xb3, 0xfa, 0x65, 0x5c, 0x0a,
0x7c, 0x84, 0xa0, 0x12, 0x91, 0x19, 0xed, 0x94, 0x7a, 0x56, 0xdf, 0xc6, 0x5a, 0x46, 0x2d, 0x28,
0xc7, 0x3c, 0xec, 0x94, 0xb5, 0x49, 0x89, 0xca, 0x2b, 0x16, 0x94, 0x77, 0x2a, 0x89, 0x97, 0x92,
0x51, 0x17, 0xd6, 0x7c, 0x22, 0xc9, 0x98, 0x08, 0xda, 0xa9, 0x6a, 0xfb, 0x42, 0x47, 0xcf, 0xa1,
0x35, 0x26, 0x22, 0xf0, 0x5e, 0xc5, 0x72, 0xba, 0x13, 0x91, 0x71, 0x48, 0xfd, 0x4e, 0xad, 0x67,
0xf5, 0xd7, 0xf0, 0x0d, 0x3b, 0x7a, 0xa6, 0x2a, 0x30, 0xb6, 0x53, 0xf5, 0x48, 0x5d, 0x07, 0x2b,
0x1a, 0xd5, 0x6b, 0x3f, 0x09, 0x16, 0xa9, 0x7a, 0x3a, 0x6b, 0x3d, 0xab, 0xdf, 0xc4, 0x0b, 0x1d,
0x5d, 0xc0, 0x23, 0x9f, 0x7a, 0xfc, 0x6a, 0x2e, 0xa9, 0x3f, 0xa2, 0x5e, 0xcc, 0xe9, 0x5e, 0xea,
0x6a, 0xf7, 0xca, 0xfd, 0xc6, 0xe0, 0x4b, 0x37, 0x05, 0xc5, 0xbd, 0x0e, 0x88, 0x3b, 0x5c, 0x7e,
0x73, 0x27, 0x92, 0xfc, 0x0a, 0xaf, 0x8a, 0xab, 0x92, 0x0e, 0x89, 0x90, 0xa7, 0x73, 0x9f, 0x48,
0xea, 0x1f, 0x8c, 0x3a, 0xa0, 0x11, 0x2d, 0x1a, 0xbb, 0x7b, 0xf0, 0xf8, 0xb6, 0xf0, 0x0a, 0xe8,
0x73, 0x7a, 0xa5, 0xbb, 0x61, 0x63, 0x25, 0xa2, 0x36, 0x54, 0x2f, 0x49, 0x18, 0xa7, 0xfd, 0x48,
0x94, 0x97, 0xa5, 0xaf, 0x2c, 0xe7, 0x97, 0x32, 0x34, 0x8f, 0x75, 0x15, 0xa6, 0x93, 0x6d, 0xa8,
0x32, 0x3e, 0x79, 0x9d, 0x36, 0x33, 0x51, 0x14, 0x4e, 0x49, 0xad, 0xaf, 0x7d, 0x13, 0x63, 0xa1,
0x17, 0x30, 0x2c, 0x5f, 0xc3, 0x70, 0xb6, 0x1a, 0xc3, 0x8a, 0xc6, 0xf0, 0x45, 0x86, 0x61, 0x3e,
0x8d, 0xfb, 0xc2, 0xaf, 0xba, 0x04, 0x3f, 0xf4, 0x0d, 0xb4, 0x14, 0xa5, 0x44, 0xae, 0x5f, 0x9a,
0x46, 0x8d, 0x41, 0x77, 0x75, 0x47, 0xf1, 0x8d, 0x3b, 0xf7, 0xda, 0x87, 0xb7, 0x50, 0xd1, 0x84,
0x6c, 0x43, 0x35, 0x64, 0x93, 0x20, 0x32, 0xb7, 0x12, 0x65, 0xe9, 0x38, 0xb5, 0xa1, 0x4a, 0x67,
0x24, 0x48, 0x07, 0x2a, 0x51, 0x94, 0x27, 0x67, 0x21, 0x4d, 0x47, 0x4a, 0xc9, 0xce, 0x33, 0x80,
0x91, 0xe4, 0x41, 0x34, 0x79, 0x13, 0x08, 0x89, 0x36, 0xa1, 0xa6, 0x9f, 0x15, 0x1d, 0xab, 0x57,
0xee, 0xdb, 0xd8, 0x68, 0xce, 0x5f, 0x25, 0xd8, 0xd8, 0x26, 0x61, 0x88, 0x69, 0x52, 0x24, 0xa6,
0x17, 0x31, 0x15, 0x12, 0xb9, 0x50, 0xf3, 0x12, 0x8c, 0x2c, 0x8d, 0xd1, 0xe6, 0xf2, 0x8e, 0x61,
0xe3, 0x85, 0x1c, 0x33, 0xd4, 0x25, 0xed, 0xbd, 0x9e, 0x79, 0xab, 0xfa, 0xcc, 0x90, 0x23, 0xa8,
0xcc, 0x89, 0x9c, 0x9a, 0xd4, 0xb5, 0xac, 0xf2, 0x9a, 0x51, 0x39, 0x65, 0xbe, 0xc9, 0xdd, 0x68,
0xe9, 0xda, 0xa8, 0x66, 0x6b, 0x63, 0x08, 0xf5, 0x29, 0x25, 0x3e, 0xe5, 0xa2, 0x53, 0xd3, 0x24,
0x7a, 0x9e, 0x3d, 0xb2, 0xa4, 0x02, 0x77, 0x37, 0x71, 0x4e, 0xb8, 0x93, 0x5e, 0x55, 0x39, 0x8c,
0x99, 0x7f, 0xa5, 0xf7, 0x42, 0x13, 0x6b, 0xb9, 0x7b, 0x0c, 0xcd, 0xbc, 0xf3, 0x92, 0x0e, 0x3e,
0xcf, 0x77, 0xb0, 0x31, 0x68, 0x67, 0x2f, 0x67, 0x10, 0xe7, 0xfb, 0xfa, 0xb7, 0x05, 0xed, 0x62,
0x4e, 0x62, 0xce, 0x22, 0x41, 0xd5, 0xf3, 0x1e, 0xf3, 0xa9, 0x8e, 0x5d, 0xc5, 0x5a, 0x46, 0x3b,
0x59, 0x61, 0x25, 0x5d, 0xd8, 0x27, 0xab, 0x0a, 0x4b, 0x82, 0xdc, 0x51, 0x59, 0xf9, 0xbd, 0x56,
0xb6, 0x0f, 0xf6, 0x49, 0x30, 0xa3, 0x98, 0x44, 0x13, 0x8a, 0x7a, 0xd0, 0x38, 0xe3, 0x6c, 0xb6,
0x33, 0x67, 0xde, 0xf4, 0x60, 0x64, 0x76, 0x47, 0xde, 0x84, 0x1e, 0x83, 0x2d, 0x59, 0x7a, 0x5e,
0xd2, 0xe7, 0x99, 0xc1, 0x79, 0x67, 0x81, 0xad, 0x06, 0xe7, 0xdb, 0x98, 0x72, 0x3d, 0x26, 0x9c,
0x9e, 0x99, 0x1d, 0x64, 0xe3, 0x44, 0x51, 0xc3, 0x3d, 0x23, 0x3f, 0x2b, 0xaf, 0x63, 0x16, 0x44,
0x52, 0x98, 0x28, 0x45, 0x23, 0x7a, 0x0a, 0x10, 0x44, 0x92, 0xf2, 0x4b, 0x12, 0x1e, 0x8c, 0x34,
0x04, 0x65, 0x9c, 0xb3, 0xa0, 0x2f, 0xc0, 0x96, 0x69, 0xda, 0x9a, 0x69, 0x8d, 0xc1, 0x46, 0x56,
0xea, 0xa2, 0x22, 0x9c, 0x79, 0x29, 0x3c, 0xd5, 0x42, 0xd3, 0x14, 0x6c, 0x62, 0x2d, 0x3b, 0xbf,
0x95, 0xa0, 0xa5, 0x93, 0x55, 0x4f, 0xbf, 0xcf, 0x51, 0x79, 0x95, 0x71, 0xa2, 0xac, 0x39, 0xf1,
0x51, 0xe6, 0x76, 0x3d, 0x81, 0x15, 0x7c, 0xf8, 0x0c, 0xea, 0x17, 0x31, 0xe5, 0x01, 0x15, 0x66,
0xe9, 0x6e, 0x14, 0xd7, 0x9c, 0x0e, 0x83, 0x53, 0x9f, 0xee, 0xcb, 0x3b, 0xa9, 0xb2, 0x7a, 0x8d,
0xfd, 0x6e, 0xc1, 0xff, 0x73, 0x59, 0x19, 0xae, 0xef, 0x82, 0xcd, 0x8d, 0x9c, 0x6c, 0x9d, 0xc2,
0xc8, 0xde, 0xf0, 0x77, 0x53, 0xc1, 0x14, 0x92, 0x5d, 0xee, 0x9e, 0xc0, 0x7a, 0xf1, 0x70, 0x49,
0x76, 0x9f, 0x16, 0x89, 0xbc, 0x59, 0x2c, 0x36, 0xbd, 0x9e, 0xcf, 0xfa, 0x7b, 0x68, 0x16, 0xf2,
0xdd, 0x84, 0xda, 0x19, 0x27, 0x33, 0x93, 0x6c, 0x13, 0x1b, 0x4d, 0xaf, 0x5c, 0xce, 0x19, 0x4f,
0xeb, 0xd6, 0x4a, 0xfa, 0xfd, 0x3b, 0xa0, 0xc5, 0xef, 0x9f, 0xd2, 0x9d, 0x47, 0xf0, 0x70, 0x9b,
0x85, 0x21, 0xf5, 0xe4, 0x01, 0x95, 0x3c, 0xf0, 0x84, 0xe9, 0x94, 0xf3, 0xab, 0x05, 0x9b, 0xd7,
0x4f, 0xcc, 0xeb, 0x5b, 0x50, 0x9f, 0x25, 0x26, 0x43, 0xa3, 0x7e, 0x6e, 0x0b, 0x2c, 0xbd, 0xe2,
0x1e, 0x93, 0xab, 0x90, 0x11, 0x1f, 0xa7, 0x17, 0xbb, 0x1f, 0x43, 0xdd, 0xd8, 0xd4, 0x40, 0xcc,
0x39, 0x53, 0xcb, 0x94, 0xc6, 0x49, 0xc4, 0x26, 0xce, 0x59, 0x9c, 0x21, 0xa0, 0xed, 0x29, 0xf5,
0xce, 0x77, 0x29, 0x09, 0xe5, 0xf4, 0x5f, 0x52, 0xd9, 0xf9, 0xc3, 0x82, 0x8d, 0x42, 0x98, 0x45,
0x31, 0x35, 0x21, 0x89, 0x34, 0x2f, 0xaf, 0x17, 0x56, 0xf5, 0x4d, 0x77, 0x37, 0x51, 0x47, 0xfa,
0x06, 0x36, 0x37, 0x51, 0x47, 0x01, 0x22, 0x04, 0x99, 0xa4, 0x84, 0x4b, 0x55, 0xb5, 0x76, 0xf4,
0x4f, 0x0d, 0x2a, 0x49, 0x10, 0x0a, 0x83, 0x7e, 0xde, 0xe4, 0xb8, 0x9a, 0xcc, 0x8b, 0x98, 0xa8,
0x01, 0xf5, 0xd3, 0xc3, 0xfd, 0xc3, 0xa3, 0xef, 0x0e, 0x5b, 0xff, 0x43, 0x35, 0x28, 0x1d, 0xed,
0xb7, 0x2c, 0x64, 0x43, 0x75, 0x07, 0xe3, 0x23, 0xdc, 0x2a, 0x0d, 0x7e, 0x80, 0xb5, 0x74, 0xcb,
0xa2, 0x23, 0x68, 0xe6, 0xb7, 0x2e, 0x7a, 0x72, 0xeb, 0x67, 0xa6, 0xfb, 0xf4, 0xf6, 0x65, 0xfd,
0xb9, 0x35, 0x78, 0x03, 0x15, 0xfd, 0x33, 0x65, 0x08, 0xf6, 0x82, 0xf4, 0xa8, 0xbb, 0x7a, 0x9e,
0xbb, 0x1f, 0xdc, 0x32, 0x25, 0x83, 0x77, 0x16, 0x34, 0x86, 0x01, 0x99, 0x44, 0x4c, 0xc8, 0xc0,
0x13, 0x68, 0x0f, 0x1a, 0x39, 0x48, 0xd1, 0xe3, 0x15, 0x48, 0x27, 0x91, 0x9f, 0xdc, 0xda, 0x07,
0x34, 0x82, 0xf5, 0x22, 0xd5, 0xd0, 0x87, 0xab, 0x49, 0x98, 0x44, 0xec, 0xdd, 0xc5, 0xd2, 0xc1,
0x29, 0xd8, 0x27, 0x9c, 0x44, 0xe2, 0x8c, 0xf1, 0x19, 0xda, 0x85, 0x07, 0x0b, 0xe5, 0xbf, 0xe1,
0xf0, 0x23, 0x3c, 0x2c, 0x44, 0x52, 0xe0, 0x6f, 0x11, 0xef, 0xfc, 0x7e, 0x60, 0xde, 0x6a, 0xbe,
0x05, 0xf7, 0xeb, 0xf4, 0x7c, 0x5c, 0xd3, 0x7f, 0x87, 0x5e, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff,
0x4e, 0x49, 0x76, 0x89, 0x1f, 0x0d, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
......
......@@ -142,7 +142,7 @@ github.com/gosimple/slug
# github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4
github.com/grafana/grafana-plugin-model/go/datasource
github.com/grafana/grafana-plugin-model/go/renderer
# github.com/grafana/grafana-plugin-sdk-go v0.33.0
# github.com/grafana/grafana-plugin-sdk-go v0.35.0
github.com/grafana/grafana-plugin-sdk-go/backend/grpcplugin
github.com/grafana/grafana-plugin-sdk-go/data
github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment