diff --git a/cmd/query/main.go b/cmd/query/main.go index 00cbe0ee..27935a2a 100644 --- a/cmd/query/main.go +++ b/cmd/query/main.go @@ -48,6 +48,7 @@ Example: } log.Debugf("Query: %s\n", query.String()) + res, err := conn.Traversal(context.Background(), query) if err != nil { log.Errorf("Traversal error: %s", err) diff --git a/conformance/tests/ot_serverfunc.py b/conformance/tests/ot_serverfunc.py new file mode 100644 index 00000000..39cef18a --- /dev/null +++ b/conformance/tests/ot_serverfunc.py @@ -0,0 +1,42 @@ +def test_flatmap(man): + attr_len_func = """ + function attr_len(x, args) { + x["skin_colors_len"] = x["skin_colors"].length; + x["hair_colors_len"] = x["hair_colors"].length; + x["eye_colors_len"] = x["eye_colors"].length; + return [x] + } + """ + + errors = [] + + G = man.setGraph("swapi") + + count = 0 + q = G.query().V().hasLabel("Species").flatMap("attr_len", attr_len_func, {}) + for row in q: + count += 1 + if row["data"]["skin_colors_len"] != len(row["data"]["skin_colors"]): + errors.append("count function not correct") + if count != 5: + errors.append("Incorrect row count returned: %d != 5" % (count)) + return errors + + +def test_command_line_args(man): + func = """ + function AddObj(x, args) { + for (var k in args){ + x[k]= args[k] + } + return [x] + } + """ + + errors = [] + G = man.setGraph("swapi") + q = G.query().V().hasLabel("Species").flatMap("AddObj", func, {"OtherSpecies":["Sullustan", "RathStar", "Bith"]}) + for row in q: + if "OtherSpecies" not in row['data'] or not all(species in row['data']["OtherSpecies"] for species in ["Sullustan", "RathStar", "Bith"]): + errors.append("Appended items '{'OtherSpecies':['Sullustan', 'RathStar', 'Bith']}' Not Present in row") + return errors diff --git a/engine/core/processors_func.go b/engine/core/processors_func.go new file mode 100644 index 00000000..c6e17269 --- /dev/null +++ b/engine/core/processors_func.go @@ -0,0 +1,85 @@ +package core + +import ( + "context" + + "github.com/bmeg/grip/gdbi" + "github.com/bmeg/grip/log" + "github.com/dop251/goja" +) + +// LookupVerts starts query by looking on vertices +type FlatMap struct { + Source string + Func_name string + Args map[string]any +} + +// Process LookupVerts +func (fm *FlatMap) Process(ctx context.Context, man gdbi.Manager, in gdbi.InPipe, out gdbi.OutPipe) context.Context { + + vm := goja.New() + + // Add support for console.log for debugging purposes + console := vm.NewObject() + _ = console.Set("log", func(call goja.FunctionCall) goja.Value { + args := make([]any, len(call.Arguments)) + for i, arg := range call.Arguments { + args[i] = arg.Export() + } + log.Infof("JS log: %v", args...) + return goja.Undefined() + }) + _ = vm.Set("console", console) + + _, err := vm.RunString(fm.Source) + if err != nil { + log.Errorf("User function compile error: %s", err) + } + + jobj := vm.Get(fm.Func_name) + if jobj == nil { + log.Errorf("User Function not found: %s", fm.Func_name) + } + + jfunc, ok := goja.AssertFunction(jobj) + if !ok { + log.Errorf("Defined object not function: %#v", jobj) + } + go func() { + defer close(out) + for t := range in { + if t.IsSignal() { + out <- t + continue + } + if jfunc != nil { + src := t.GetCurrent().Get() + data := src.ToDict() + dataObj := vm.ToValue(data) + + argsObj := vm.ToValue(fm.Args) + + fout, err := jfunc(goja.Null(), dataObj, argsObj) + + if err == nil { + o := fout.Export() + if oList, ok := o.([]any); ok { + for _, od := range oList { + if om, ok := od.(map[string]any); ok { + d := gdbi.DataElement{} + d.FromDict(om) + d.ID = src.ID + d.Label = src.Label + out <- t.AddCurrent(&d) + } + } + } + } else { + log.Errorf("Function error: %s", err) + } + } + } + }() + return ctx +} diff --git a/engine/core/statement_compiler.go b/engine/core/statement_compiler.go index 65941181..b5792a9e 100644 --- a/engine/core/statement_compiler.go +++ b/engine/core/statement_compiler.go @@ -225,6 +225,10 @@ func (sc *DefaultStmtCompiler) Aggregate(stmt *gripql.GraphStatement_Aggregate, return &aggregate{stmt.Aggregate.Aggregations}, nil } +func (sc *DefaultStmtCompiler) FlatMap(stmt *gripql.GraphStatement_FlatMap, ps *gdbi.State) (gdbi.Processor, error) { + return &FlatMap{Source: stmt.FlatMap.Source, Func_name: stmt.FlatMap.Function, Args: stmt.FlatMap.Args.AsMap()}, nil +} + func (sc *DefaultStmtCompiler) Custom(gs *gripql.GraphStatement, ps *gdbi.State) (gdbi.Processor, error) { switch stmt := gs.GetStatement().(type) { diff --git a/gdbi/pipeline.go b/gdbi/pipeline.go index 0aae8cca..d6de64ad 100644 --- a/gdbi/pipeline.go +++ b/gdbi/pipeline.go @@ -83,5 +83,7 @@ type StatementCompiler interface { Fields(gs *gripql.GraphStatement_Fields, ps *State) (Processor, error) Aggregate(gs *gripql.GraphStatement_Aggregate, ps *State) (Processor, error) + FlatMap(gs *gripql.GraphStatement_FlatMap, ps *State) (Processor, error) + Custom(gs *gripql.GraphStatement, ps *State) (Processor, error) } diff --git a/gdbi/statement_processor.go b/gdbi/statement_processor.go index 59c20888..b3518e34 100644 --- a/gdbi/statement_processor.go +++ b/gdbi/statement_processor.go @@ -224,6 +224,9 @@ func StatementProcessor( case *gripql.GraphStatement_Unwind: return sc.Unwind(stmt, ps) + case *gripql.GraphStatement_FlatMap: + return sc.FlatMap(stmt, ps) + case *gripql.GraphStatement_Fields: if ps.LastType != VertexData && ps.LastType != EdgeData { return nil, fmt.Errorf(`"fields" statement is only valid for edge or vertex types not: %s`, ps.LastType.String()) diff --git a/gripql/gripql.pb.go b/gripql/gripql.pb.go index cc3e9625..c0d40b2e 100644 --- a/gripql/gripql.pb.go +++ b/gripql/gripql.pb.go @@ -411,6 +411,7 @@ type GraphStatement struct { // *GraphStatement_Pivot // *GraphStatement_Fields // *GraphStatement_Unwind + // *GraphStatement_FlatMap // *GraphStatement_Count // *GraphStatement_Aggregate // *GraphStatement_Render @@ -636,6 +637,13 @@ func (x *GraphStatement) GetUnwind() string { return "" } +func (x *GraphStatement) GetFlatMap() *Code { + if x, ok := x.GetStatement().(*GraphStatement_FlatMap); ok { + return x.FlatMap + } + return nil +} + func (x *GraphStatement) GetCount() string { if x, ok := x.GetStatement().(*GraphStatement_Count); ok { return x.Count @@ -796,6 +804,10 @@ type GraphStatement_Unwind struct { Unwind string `protobuf:"bytes,51,opt,name=unwind,proto3,oneof"` } +type GraphStatement_FlatMap struct { + FlatMap *Code `protobuf:"bytes,53,opt,name=flat_map,json=flatMap,proto3,oneof"` +} + type GraphStatement_Count struct { Count string `protobuf:"bytes,60,opt,name=count,proto3,oneof"` } @@ -878,6 +890,8 @@ func (*GraphStatement_Fields) isGraphStatement_Statement() {} func (*GraphStatement_Unwind) isGraphStatement_Statement() {} +func (*GraphStatement_FlatMap) isGraphStatement_Statement() {} + func (*GraphStatement_Count) isGraphStatement_Statement() {} func (*GraphStatement_Aggregate) isGraphStatement_Statement() {} @@ -2408,6 +2422,69 @@ func (x *ExtendQuery) GetQuery() []*GraphStatement { return nil } +type Code struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Function string `protobuf:"bytes,1,opt,name=function,proto3" json:"function,omitempty"` + Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` + Args *structpb.Struct `protobuf:"bytes,3,opt,name=args,proto3" json:"args,omitempty"` +} + +func (x *Code) Reset() { + *x = Code{} + if protoimpl.UnsafeEnabled { + mi := &file_gripql_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Code) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Code) ProtoMessage() {} + +func (x *Code) ProtoReflect() protoreflect.Message { + mi := &file_gripql_proto_msgTypes[27] + 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 Code.ProtoReflect.Descriptor instead. +func (*Code) Descriptor() ([]byte, []int) { + return file_gripql_proto_rawDescGZIP(), []int{27} +} + +func (x *Code) GetFunction() string { + if x != nil { + return x.Function + } + return "" +} + +func (x *Code) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *Code) GetArgs() *structpb.Struct { + if x != nil { + return x.Args + } + return nil +} + type JobStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2424,7 +2501,7 @@ type JobStatus struct { func (x *JobStatus) Reset() { *x = JobStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[27] + mi := &file_gripql_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2437,7 +2514,7 @@ func (x *JobStatus) String() string { func (*JobStatus) ProtoMessage() {} func (x *JobStatus) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[27] + mi := &file_gripql_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2450,7 +2527,7 @@ func (x *JobStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use JobStatus.ProtoReflect.Descriptor instead. func (*JobStatus) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{27} + return file_gripql_proto_rawDescGZIP(), []int{28} } func (x *JobStatus) GetId() string { @@ -2506,7 +2583,7 @@ type EditResult struct { func (x *EditResult) Reset() { *x = EditResult{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[28] + mi := &file_gripql_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2519,7 +2596,7 @@ func (x *EditResult) String() string { func (*EditResult) ProtoMessage() {} func (x *EditResult) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[28] + mi := &file_gripql_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2532,7 +2609,7 @@ func (x *EditResult) ProtoReflect() protoreflect.Message { // Deprecated: Use EditResult.ProtoReflect.Descriptor instead. func (*EditResult) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{28} + return file_gripql_proto_rawDescGZIP(), []int{29} } func (x *EditResult) GetId() string { @@ -2554,7 +2631,7 @@ type BulkEditResult struct { func (x *BulkEditResult) Reset() { *x = BulkEditResult{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[29] + mi := &file_gripql_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2567,7 +2644,7 @@ func (x *BulkEditResult) String() string { func (*BulkEditResult) ProtoMessage() {} func (x *BulkEditResult) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[29] + mi := &file_gripql_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2580,7 +2657,7 @@ func (x *BulkEditResult) ProtoReflect() protoreflect.Message { // Deprecated: Use BulkEditResult.ProtoReflect.Descriptor instead. func (*BulkEditResult) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{29} + return file_gripql_proto_rawDescGZIP(), []int{30} } func (x *BulkEditResult) GetInsertCount() int32 { @@ -2609,7 +2686,7 @@ type BulkJsonEditResult struct { func (x *BulkJsonEditResult) Reset() { *x = BulkJsonEditResult{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[30] + mi := &file_gripql_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2622,7 +2699,7 @@ func (x *BulkJsonEditResult) String() string { func (*BulkJsonEditResult) ProtoMessage() {} func (x *BulkJsonEditResult) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[30] + mi := &file_gripql_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2635,7 +2712,7 @@ func (x *BulkJsonEditResult) ProtoReflect() protoreflect.Message { // Deprecated: Use BulkJsonEditResult.ProtoReflect.Descriptor instead. func (*BulkJsonEditResult) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{30} + return file_gripql_proto_rawDescGZIP(), []int{31} } func (x *BulkJsonEditResult) GetInsertCount() int32 { @@ -2665,7 +2742,7 @@ type GraphElement struct { func (x *GraphElement) Reset() { *x = GraphElement{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[31] + mi := &file_gripql_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2678,7 +2755,7 @@ func (x *GraphElement) String() string { func (*GraphElement) ProtoMessage() {} func (x *GraphElement) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[31] + mi := &file_gripql_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2691,7 +2768,7 @@ func (x *GraphElement) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphElement.ProtoReflect.Descriptor instead. func (*GraphElement) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{31} + return file_gripql_proto_rawDescGZIP(), []int{32} } func (x *GraphElement) GetGraph() string { @@ -2726,7 +2803,7 @@ type GraphID struct { func (x *GraphID) Reset() { *x = GraphID{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[32] + mi := &file_gripql_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2739,7 +2816,7 @@ func (x *GraphID) String() string { func (*GraphID) ProtoMessage() {} func (x *GraphID) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[32] + mi := &file_gripql_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2752,7 +2829,7 @@ func (x *GraphID) ProtoReflect() protoreflect.Message { // Deprecated: Use GraphID.ProtoReflect.Descriptor instead. func (*GraphID) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{32} + return file_gripql_proto_rawDescGZIP(), []int{33} } func (x *GraphID) GetGraph() string { @@ -2774,7 +2851,7 @@ type ElementID struct { func (x *ElementID) Reset() { *x = ElementID{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[33] + mi := &file_gripql_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2787,7 +2864,7 @@ func (x *ElementID) String() string { func (*ElementID) ProtoMessage() {} func (x *ElementID) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[33] + mi := &file_gripql_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2800,7 +2877,7 @@ func (x *ElementID) ProtoReflect() protoreflect.Message { // Deprecated: Use ElementID.ProtoReflect.Descriptor instead. func (*ElementID) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{33} + return file_gripql_proto_rawDescGZIP(), []int{34} } func (x *ElementID) GetGraph() string { @@ -2830,7 +2907,7 @@ type IndexID struct { func (x *IndexID) Reset() { *x = IndexID{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[34] + mi := &file_gripql_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2843,7 +2920,7 @@ func (x *IndexID) String() string { func (*IndexID) ProtoMessage() {} func (x *IndexID) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[34] + mi := &file_gripql_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2856,7 +2933,7 @@ func (x *IndexID) ProtoReflect() protoreflect.Message { // Deprecated: Use IndexID.ProtoReflect.Descriptor instead. func (*IndexID) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{34} + return file_gripql_proto_rawDescGZIP(), []int{35} } func (x *IndexID) GetGraph() string { @@ -2891,7 +2968,7 @@ type Timestamp struct { func (x *Timestamp) Reset() { *x = Timestamp{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[35] + mi := &file_gripql_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2904,7 +2981,7 @@ func (x *Timestamp) String() string { func (*Timestamp) ProtoMessage() {} func (x *Timestamp) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[35] + mi := &file_gripql_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2917,7 +2994,7 @@ func (x *Timestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use Timestamp.ProtoReflect.Descriptor instead. func (*Timestamp) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{35} + return file_gripql_proto_rawDescGZIP(), []int{36} } func (x *Timestamp) GetTimestamp() string { @@ -2936,7 +3013,7 @@ type Empty struct { func (x *Empty) Reset() { *x = Empty{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[36] + mi := &file_gripql_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2949,7 +3026,7 @@ func (x *Empty) String() string { func (*Empty) ProtoMessage() {} func (x *Empty) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[36] + mi := &file_gripql_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2962,7 +3039,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message { // Deprecated: Use Empty.ProtoReflect.Descriptor instead. func (*Empty) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{36} + return file_gripql_proto_rawDescGZIP(), []int{37} } type ListGraphsResponse struct { @@ -2976,7 +3053,7 @@ type ListGraphsResponse struct { func (x *ListGraphsResponse) Reset() { *x = ListGraphsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[37] + mi := &file_gripql_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2989,7 +3066,7 @@ func (x *ListGraphsResponse) String() string { func (*ListGraphsResponse) ProtoMessage() {} func (x *ListGraphsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[37] + mi := &file_gripql_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3002,7 +3079,7 @@ func (x *ListGraphsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGraphsResponse.ProtoReflect.Descriptor instead. func (*ListGraphsResponse) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{37} + return file_gripql_proto_rawDescGZIP(), []int{38} } func (x *ListGraphsResponse) GetGraphs() []string { @@ -3023,7 +3100,7 @@ type ListIndicesResponse struct { func (x *ListIndicesResponse) Reset() { *x = ListIndicesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[38] + mi := &file_gripql_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3036,7 +3113,7 @@ func (x *ListIndicesResponse) String() string { func (*ListIndicesResponse) ProtoMessage() {} func (x *ListIndicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[38] + mi := &file_gripql_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3049,7 +3126,7 @@ func (x *ListIndicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListIndicesResponse.ProtoReflect.Descriptor instead. func (*ListIndicesResponse) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{38} + return file_gripql_proto_rawDescGZIP(), []int{39} } func (x *ListIndicesResponse) GetIndices() []*IndexID { @@ -3071,7 +3148,7 @@ type ListLabelsResponse struct { func (x *ListLabelsResponse) Reset() { *x = ListLabelsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[39] + mi := &file_gripql_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3084,7 +3161,7 @@ func (x *ListLabelsResponse) String() string { func (*ListLabelsResponse) ProtoMessage() {} func (x *ListLabelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[39] + mi := &file_gripql_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3097,7 +3174,7 @@ func (x *ListLabelsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLabelsResponse.ProtoReflect.Descriptor instead. func (*ListLabelsResponse) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{39} + return file_gripql_proto_rawDescGZIP(), []int{40} } func (x *ListLabelsResponse) GetVertexLabels() []string { @@ -3128,7 +3205,7 @@ type TableInfo struct { func (x *TableInfo) Reset() { *x = TableInfo{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[40] + mi := &file_gripql_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3141,7 +3218,7 @@ func (x *TableInfo) String() string { func (*TableInfo) ProtoMessage() {} func (x *TableInfo) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[40] + mi := &file_gripql_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3154,7 +3231,7 @@ func (x *TableInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TableInfo.ProtoReflect.Descriptor instead. func (*TableInfo) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{40} + return file_gripql_proto_rawDescGZIP(), []int{41} } func (x *TableInfo) GetSource() string { @@ -3198,7 +3275,7 @@ type DeleteData struct { func (x *DeleteData) Reset() { *x = DeleteData{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[41] + mi := &file_gripql_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3211,7 +3288,7 @@ func (x *DeleteData) String() string { func (*DeleteData) ProtoMessage() {} func (x *DeleteData) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[41] + mi := &file_gripql_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3224,7 +3301,7 @@ func (x *DeleteData) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteData.ProtoReflect.Descriptor instead. func (*DeleteData) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{41} + return file_gripql_proto_rawDescGZIP(), []int{42} } func (x *DeleteData) GetGraph() string { @@ -3261,7 +3338,7 @@ type RawJson struct { func (x *RawJson) Reset() { *x = RawJson{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[42] + mi := &file_gripql_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3274,7 +3351,7 @@ func (x *RawJson) String() string { func (*RawJson) ProtoMessage() {} func (x *RawJson) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[42] + mi := &file_gripql_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3287,7 +3364,7 @@ func (x *RawJson) ProtoReflect() protoreflect.Message { // Deprecated: Use RawJson.ProtoReflect.Descriptor instead. func (*RawJson) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{42} + return file_gripql_proto_rawDescGZIP(), []int{43} } func (x *RawJson) GetGraph() string { @@ -3324,7 +3401,7 @@ type PluginConfig struct { func (x *PluginConfig) Reset() { *x = PluginConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[43] + mi := &file_gripql_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3337,7 +3414,7 @@ func (x *PluginConfig) String() string { func (*PluginConfig) ProtoMessage() {} func (x *PluginConfig) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[43] + mi := &file_gripql_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3350,7 +3427,7 @@ func (x *PluginConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginConfig.ProtoReflect.Descriptor instead. func (*PluginConfig) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{43} + return file_gripql_proto_rawDescGZIP(), []int{44} } func (x *PluginConfig) GetName() string { @@ -3386,7 +3463,7 @@ type PluginStatus struct { func (x *PluginStatus) Reset() { *x = PluginStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[44] + mi := &file_gripql_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3399,7 +3476,7 @@ func (x *PluginStatus) String() string { func (*PluginStatus) ProtoMessage() {} func (x *PluginStatus) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[44] + mi := &file_gripql_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3412,7 +3489,7 @@ func (x *PluginStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginStatus.ProtoReflect.Descriptor instead. func (*PluginStatus) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{44} + return file_gripql_proto_rawDescGZIP(), []int{45} } func (x *PluginStatus) GetName() string { @@ -3440,7 +3517,7 @@ type ListDriversResponse struct { func (x *ListDriversResponse) Reset() { *x = ListDriversResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[45] + mi := &file_gripql_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3453,7 +3530,7 @@ func (x *ListDriversResponse) String() string { func (*ListDriversResponse) ProtoMessage() {} func (x *ListDriversResponse) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[45] + mi := &file_gripql_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3466,7 +3543,7 @@ func (x *ListDriversResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListDriversResponse.ProtoReflect.Descriptor instead. func (*ListDriversResponse) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{45} + return file_gripql_proto_rawDescGZIP(), []int{46} } func (x *ListDriversResponse) GetDrivers() []string { @@ -3487,7 +3564,7 @@ type ListPluginsResponse struct { func (x *ListPluginsResponse) Reset() { *x = ListPluginsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gripql_proto_msgTypes[46] + mi := &file_gripql_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3500,7 +3577,7 @@ func (x *ListPluginsResponse) String() string { func (*ListPluginsResponse) ProtoMessage() {} func (x *ListPluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gripql_proto_msgTypes[46] + mi := &file_gripql_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3513,7 +3590,7 @@ func (x *ListPluginsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPluginsResponse.ProtoReflect.Descriptor instead. func (*ListPluginsResponse) Descriptor() ([]byte, []int) { - return file_gripql_proto_rawDescGZIP(), []int{46} + return file_gripql_proto_rawDescGZIP(), []int{47} } func (x *ListPluginsResponse) GetPlugins() []string { @@ -3546,7 +3623,7 @@ var file_gripql_proto_rawDesc = []byte{ 0x65, 0x72, 0x79, 0x22, 0x38, 0x0a, 0x08, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0xcc, 0x0b, + 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0xf7, 0x0b, 0x0a, 0x0e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, @@ -3619,497 +3696,506 @@ var file_gripql_proto_rawDesc = []byte{ 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x06, 0x75, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x18, 0x33, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x77, 0x69, 0x6e, 0x64, 0x12, - 0x16, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x48, 0x00, 0x52, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, - 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, - 0x30, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x14, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x46, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x18, - 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, - 0x75, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x03, 0x73, - 0x65, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x31, 0x0a, 0x09, - 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, - 0x0b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x31, 0x0a, 0x05, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x74, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x22, - 0x62, 0x0a, 0x13, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x35, 0x0a, 0x0c, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a, 0x0c, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xef, 0x02, 0x0a, 0x09, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x04, - 0x74, 0x65, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x3f, 0x0a, 0x0a, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x69, 0x6c, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x09, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x05, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2d, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0d, 0x0a, - 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, - 0x54, 0x65, 0x72, 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x49, 0x0a, 0x15, 0x50, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x08, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x48, 0x0a, 0x14, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x28, - 0x0a, 0x10, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x27, 0x0a, 0x0f, 0x54, 0x79, 0x70, 0x65, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x22, 0x12, 0x0a, 0x10, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, - 0x65, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, - 0x0a, 0x16, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4c, 0x0a, 0x11, - 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, - 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xda, 0x01, 0x0a, 0x0d, 0x48, - 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, - 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x64, 0x12, 0x2b, 0x0a, 0x02, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, - 0x2e, 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, - 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, - 0x6e, 0x6f, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, - 0x48, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x7f, 0x0a, 0x0c, 0x48, 0x61, 0x73, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x29, 0x0a, 0x08, 0x66, 0x6c, 0x61, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x35, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x48, + 0x00, 0x52, 0x07, 0x66, 0x6c, 0x61, 0x74, 0x4d, 0x61, 0x70, 0x12, 0x16, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, + 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x09, 0x61, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x04, 0x4a, 0x75, 0x6d, 0x70, - 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x35, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65, - 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x65, 0x6d, 0x69, 0x74, 0x22, - 0x45, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x33, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5d, 0x0a, 0x06, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x2b, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7f, 0x0a, 0x04, 0x45, 0x64, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x67, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, - 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, - 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x2b, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa7, 0x02, 0x0a, 0x0b, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, - 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x48, 0x00, 0x52, 0x06, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x04, 0x65, 0x64, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x61, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, - 0x00, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x30, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x48, 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x08, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, - 0x62, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x68, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x72, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x12, 0x2c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x22, 0xbb, 0x01, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, 0x6f, - 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0x1c, 0x0a, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x54, 0x0a, - 0x0e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x12, 0x42, 0x75, 0x6c, 0x6b, 0x4a, 0x73, 0x6f, 0x6e, 0x45, - 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x0c, 0x47, 0x72, 0x61, 0x70, 0x68, 0x45, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x26, 0x0a, 0x06, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x06, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x12, 0x20, 0x0a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x04, - 0x65, 0x64, 0x67, 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x31, 0x0a, 0x09, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x07, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x29, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x0a, 0x12, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x22, 0x40, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x44, - 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x5a, 0x0a, 0x12, 0x4c, 0x69, 0x73, - 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x6d, 0x61, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x69, 0x6e, - 0x6b, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x6b, 0x4d, - 0x61, 0x70, 0x1a, 0x3a, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x54, - 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x64, 0x67, 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x07, 0x52, 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x04, + 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x46, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, + 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, 0x75, 0x6d, 0x70, 0x48, 0x00, + 0x52, 0x04, 0x6a, 0x75, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x48, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x53, 0x65, 0x74, + 0x48, 0x00, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x09, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x31, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x22, 0x62, 0x0a, 0x13, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x35, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x45, + 0x0a, 0x0c, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, + 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xef, 0x02, 0x0a, 0x09, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x54, + 0x65, 0x72, 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x3f, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, 0x54, 0x65, 0x72, 0x6d, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x22, 0x49, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x6c, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x01, 0x52, 0x08, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0x48, 0x0a, 0x14, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x41, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x28, 0x0a, 0x10, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x22, 0x27, 0x0a, 0x0f, 0x54, 0x79, 0x70, 0x65, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x12, 0x0a, 0x10, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x47, 0x0a, 0x09, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x53, 0x74, 0x65, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x16, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4c, 0x0a, 0x11, 0x48, 0x61, 0x73, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, + 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xda, 0x01, 0x0a, 0x0d, 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x61, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, + 0x73, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x03, 0x61, 0x6e, 0x64, 0x12, 0x2b, 0x0a, 0x02, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x45, + 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x02, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x03, 0x6e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x6e, 0x6f, 0x74, 0x12, 0x34, + 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x7f, 0x0a, 0x0c, 0x48, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x04, 0x4a, 0x75, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x61, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x12, + 0x35, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x48, 0x61, 0x73, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x65, 0x6d, 0x69, 0x74, 0x22, 0x45, 0x0a, 0x03, 0x53, 0x65, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x33, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5d, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7f, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa7, 0x02, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x12, 0x22, 0x0a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, + 0x65, 0x64, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x30, 0x0a, 0x08, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x22, 0x68, 0x0a, 0x0b, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x72, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x2c, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x67, 0x0a, 0x04, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x26, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, + 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x22, 0x1c, 0x0a, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x54, 0x0a, 0x0e, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x12, 0x42, 0x75, 0x6c, 0x6b, 0x4a, + 0x73, 0x6f, 0x6e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x0c, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x26, + 0x0a, 0x06, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x06, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, + 0x67, 0x65, 0x52, 0x04, 0x65, 0x64, 0x67, 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x31, 0x0a, 0x09, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4b, 0x0a, 0x07, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x29, 0x0a, 0x09, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x22, 0x40, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x49, 0x44, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x5a, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x64, 0x67, 0x65, + 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, + 0x64, 0x67, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x09, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x6c, + 0x69, 0x6e, 0x6b, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6c, + 0x69, 0x6e, 0x6b, 0x4d, 0x61, 0x70, 0x1a, 0x3a, 0x0a, 0x0c, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x61, + 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x54, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x36, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, - 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2b, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xaf, 0x01, 0x0a, 0x0c, - 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, - 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2f, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x22, 0x2f, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2a, 0xa2, 0x01, 0x0a, 0x09, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x06, - 0x0a, 0x02, 0x45, 0x51, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x51, 0x10, 0x02, 0x12, - 0x06, 0x0a, 0x02, 0x47, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x54, 0x45, 0x10, 0x04, - 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x54, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x54, 0x45, 0x10, - 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x49, 0x44, 0x45, 0x10, 0x07, 0x12, 0x0b, 0x0a, - 0x07, 0x4f, 0x55, 0x54, 0x53, 0x49, 0x44, 0x45, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x45, - 0x54, 0x57, 0x45, 0x45, 0x4e, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, 0x54, 0x48, 0x49, - 0x4e, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x10, 0x0b, - 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x0c, 0x2a, 0x49, - 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x51, 0x55, - 0x45, 0x55, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x4f, 0x0a, 0x09, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, - 0x0b, 0x0a, 0x07, 0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, - 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x50, 0x10, 0x04, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x05, 0x32, 0xcf, 0x06, 0x0a, 0x05, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x5a, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x6c, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x30, 0x01, - 0x12, 0x55, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x11, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, - 0x1a, 0x0e, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x4f, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x45, 0x64, - 0x67, 0x65, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, - 0x64, 0x67, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x65, - 0x64, 0x67, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x57, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x23, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, - 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x4d, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x0f, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, - 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x22, 0x20, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0f, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, - 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x22, 0x21, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x4a, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x12, - 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x5c, 0x0a, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x1b, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x07, 0x52, 0x61, 0x77, + 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x36, 0x0a, 0x0a, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x41, 0x72, + 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xaf, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x38, 0x0a, 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2f, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x22, 0x2f, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2a, 0xa2, 0x01, + 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x11, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, + 0x51, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x47, + 0x54, 0x45, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x54, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, + 0x4c, 0x54, 0x45, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x49, 0x44, 0x45, 0x10, + 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x55, 0x54, 0x53, 0x49, 0x44, 0x45, 0x10, 0x08, 0x12, 0x0b, + 0x0a, 0x07, 0x42, 0x45, 0x54, 0x57, 0x45, 0x45, 0x4e, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x57, + 0x49, 0x54, 0x48, 0x49, 0x4e, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x49, 0x54, 0x48, 0x4f, + 0x55, 0x54, 0x10, 0x0b, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, + 0x10, 0x0c, 0x2a, 0x49, 0x0a, 0x08, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0a, + 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, + 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, + 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x4f, 0x0a, + 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, + 0x50, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x05, 0x32, 0xcf, + 0x06, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x5a, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x69, 0x70, + 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x30, 0x01, 0x12, 0x55, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x0e, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x4f, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x67, 0x72, 0x69, 0x70, + 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, + 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x7d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x57, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0f, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x11, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4d, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x49, 0x44, 0x1a, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x49, 0x44, 0x1a, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x4a, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x73, 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x12, 0x5c, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, + 0x44, 0x1a, 0x1b, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x5a, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x0f, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x1a, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5a, 0x0a, 0x0a, 0x4c, - 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x1a, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, + 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x43, 0x0a, 0x0a, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, + 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, + 0x6c, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x11, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x30, 0x01, + 0x32, 0xed, 0x04, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x50, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, + 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x12, 0x4e, 0x0a, 0x08, 0x4c, 0x69, + 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x0a, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, + 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x11, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, + 0x62, 0x2d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x09, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, + 0x71, 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x22, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, + 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x51, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x10, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x1a, 0x11, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0x59, 0x0a, 0x07, 0x56, 0x69, 0x65, 0x77, 0x4a, 0x6f, 0x62, 0x12, 0x10, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, + 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, + 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x30, 0x01, 0x12, 0x60, + 0x0a, 0x09, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x67, 0x72, + 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, + 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x30, 0x01, + 0x32, 0xa7, 0x0a, 0x0a, 0x04, 0x45, 0x64, 0x69, 0x74, 0x12, 0x5f, 0x0a, 0x09, 0x41, 0x64, 0x64, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x12, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x06, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x59, 0x0a, 0x07, 0x41, 0x64, + 0x64, 0x45, 0x64, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x72, + 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x22, 0x16, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, + 0x2f, 0x65, 0x64, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, + 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x45, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, + 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x11, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x28, 0x01, 0x12, 0x50, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, 0x52, 0x61, + 0x77, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x52, 0x61, 0x77, 0x4a, 0x73, + 0x6f, 0x6e, 0x1a, 0x1a, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x42, 0x75, 0x6c, 0x6b, + 0x4a, 0x73, 0x6f, 0x6e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x13, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x61, 0x77, 0x4a, + 0x73, 0x6f, 0x6e, 0x28, 0x01, 0x12, 0x4a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x49, 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x43, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, - 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x30, 0x01, 0x32, 0xed, 0x04, 0x0a, - 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x50, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x12, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x1a, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x4a, 0x6f, 0x62, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, - 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x12, 0x4e, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, - 0x62, 0x73, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x49, 0x44, 0x1a, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, + 0x7d, 0x12, 0x4d, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, + 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, - 0x2f, 0x6a, 0x6f, 0x62, 0x30, 0x01, 0x12, 0x5e, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x27, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2d, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x30, 0x01, 0x12, 0x54, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4a, 0x6f, 0x62, 0x12, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4a, - 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x2a, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x51, 0x0a, 0x06, - 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x10, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x22, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0x59, 0x0a, 0x07, 0x56, 0x69, 0x65, 0x77, 0x4a, 0x6f, 0x62, 0x12, 0x10, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x1a, 0x13, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, - 0x6a, 0x6f, 0x62, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x09, 0x52, 0x65, - 0x73, 0x75, 0x6d, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x13, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, - 0x6a, 0x6f, 0x62, 0x2d, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x30, 0x01, 0x32, 0xa7, 0x0a, 0x0a, - 0x04, 0x45, 0x64, 0x69, 0x74, 0x12, 0x5f, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x28, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x06, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x22, 0x18, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, - 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x59, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x45, 0x64, 0x67, - 0x65, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, - 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x65, 0x64, 0x67, 0x65, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x65, 0x64, 0x67, - 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, 0x12, 0x14, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x42, 0x75, 0x6c, 0x6b, - 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0b, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x28, 0x01, 0x12, - 0x50, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, 0x52, 0x61, 0x77, 0x12, 0x0f, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x52, 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, 0x1a, 0x1a, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4a, 0x73, 0x6f, 0x6e, - 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0d, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, 0x28, - 0x01, 0x12, 0x4a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x12, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x12, 0x4d, 0x0a, - 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x0f, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x12, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x12, 0x4a, 0x0a, 0x0a, - 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x12, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x2a, 0x09, 0x2f, - 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x5c, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, + 0x12, 0x4a, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x12, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, + 0x2a, 0x2a, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x5c, 0x0a, 0x0c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x12, 0x11, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x1a, + 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x58, 0x0a, 0x0a, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x45, 0x64, 0x67, 0x65, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x58, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x45, 0x64, 0x67, 0x65, 0x12, 0x11, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, - 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x5b, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x0f, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x44, 0x1a, 0x12, 0x2e, + 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x5b, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, + 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, + 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x7d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2f, 0x7b, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x7d, 0x12, 0x63, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, + 0x44, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2f, 0x7b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x7d, 0x12, 0x53, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, + 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5d, 0x0a, 0x0d, 0x41, + 0x64, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x0f, 0x2e, 0x67, + 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x52, 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, + 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2f, 0x7b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x7d, 0x12, 0x63, 0x0a, - 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x0f, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x44, 0x1a, 0x12, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x2f, 0x7b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x7d, 0x12, 0x53, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, - 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x1a, 0x12, - 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, - 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, - 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5d, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x4a, 0x73, - 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, - 0x6c, 0x2e, 0x52, 0x61, 0x77, 0x4a, 0x73, 0x6f, 0x6e, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x27, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x57, 0x0a, 0x0c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, - 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, - 0x55, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0d, 0x2e, - 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x1a, 0x12, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x6d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x32, 0x82, 0x02, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x12, 0x57, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x50, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, - 0x71, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x4d, 0x0a, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x0d, 0x2e, 0x67, - 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x67, 0x72, - 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, - 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x4d, 0x0a, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x0d, 0x2e, 0x67, 0x72, - 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x67, 0x72, 0x69, - 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, - 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x42, 0x1d, 0x5a, 0x1b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6d, 0x65, 0x67, 0x2f, 0x67, - 0x72, 0x69, 0x70, 0x2f, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6a, 0x73, 0x6f, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x57, 0x0a, 0x0c, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x0f, 0x2e, 0x67, 0x72, 0x69, + 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x49, 0x44, 0x1a, 0x0d, 0x2e, 0x67, 0x72, + 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2d, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, + 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x7d, 0x2f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x32, 0x82, 0x02, 0x0a, 0x09, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x57, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, + 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x14, 0x2e, + 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0x4d, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, + 0x12, 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x1b, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x12, 0x4d, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, + 0x0d, 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, + 0x2e, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x42, + 0x1d, 0x5a, 0x1b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6d, + 0x65, 0x67, 0x2f, 0x67, 0x72, 0x69, 0x70, 0x2f, 0x67, 0x72, 0x69, 0x70, 0x71, 0x6c, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4125,7 +4211,7 @@ func file_gripql_proto_rawDescGZIP() []byte { } var file_gripql_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_gripql_proto_msgTypes = make([]protoimpl.MessageInfo, 49) +var file_gripql_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_gripql_proto_goTypes = []any{ (Condition)(0), // 0: gripql.Condition (JobState)(0), // 1: gripql.JobState @@ -4157,173 +4243,176 @@ var file_gripql_proto_goTypes = []any{ (*QueryResult)(nil), // 27: gripql.QueryResult (*QueryJob)(nil), // 28: gripql.QueryJob (*ExtendQuery)(nil), // 29: gripql.ExtendQuery - (*JobStatus)(nil), // 30: gripql.JobStatus - (*EditResult)(nil), // 31: gripql.EditResult - (*BulkEditResult)(nil), // 32: gripql.BulkEditResult - (*BulkJsonEditResult)(nil), // 33: gripql.BulkJsonEditResult - (*GraphElement)(nil), // 34: gripql.GraphElement - (*GraphID)(nil), // 35: gripql.GraphID - (*ElementID)(nil), // 36: gripql.ElementID - (*IndexID)(nil), // 37: gripql.IndexID - (*Timestamp)(nil), // 38: gripql.Timestamp - (*Empty)(nil), // 39: gripql.Empty - (*ListGraphsResponse)(nil), // 40: gripql.ListGraphsResponse - (*ListIndicesResponse)(nil), // 41: gripql.ListIndicesResponse - (*ListLabelsResponse)(nil), // 42: gripql.ListLabelsResponse - (*TableInfo)(nil), // 43: gripql.TableInfo - (*DeleteData)(nil), // 44: gripql.DeleteData - (*RawJson)(nil), // 45: gripql.RawJson - (*PluginConfig)(nil), // 46: gripql.PluginConfig - (*PluginStatus)(nil), // 47: gripql.PluginStatus - (*ListDriversResponse)(nil), // 48: gripql.ListDriversResponse - (*ListPluginsResponse)(nil), // 49: gripql.ListPluginsResponse - nil, // 50: gripql.TableInfo.LinkMapEntry - nil, // 51: gripql.PluginConfig.ConfigEntry - (*structpb.ListValue)(nil), // 52: google.protobuf.ListValue - (*structpb.Value)(nil), // 53: google.protobuf.Value - (*structpb.Struct)(nil), // 54: google.protobuf.Struct + (*Code)(nil), // 30: gripql.Code + (*JobStatus)(nil), // 31: gripql.JobStatus + (*EditResult)(nil), // 32: gripql.EditResult + (*BulkEditResult)(nil), // 33: gripql.BulkEditResult + (*BulkJsonEditResult)(nil), // 34: gripql.BulkJsonEditResult + (*GraphElement)(nil), // 35: gripql.GraphElement + (*GraphID)(nil), // 36: gripql.GraphID + (*ElementID)(nil), // 37: gripql.ElementID + (*IndexID)(nil), // 38: gripql.IndexID + (*Timestamp)(nil), // 39: gripql.Timestamp + (*Empty)(nil), // 40: gripql.Empty + (*ListGraphsResponse)(nil), // 41: gripql.ListGraphsResponse + (*ListIndicesResponse)(nil), // 42: gripql.ListIndicesResponse + (*ListLabelsResponse)(nil), // 43: gripql.ListLabelsResponse + (*TableInfo)(nil), // 44: gripql.TableInfo + (*DeleteData)(nil), // 45: gripql.DeleteData + (*RawJson)(nil), // 46: gripql.RawJson + (*PluginConfig)(nil), // 47: gripql.PluginConfig + (*PluginStatus)(nil), // 48: gripql.PluginStatus + (*ListDriversResponse)(nil), // 49: gripql.ListDriversResponse + (*ListPluginsResponse)(nil), // 50: gripql.ListPluginsResponse + nil, // 51: gripql.TableInfo.LinkMapEntry + nil, // 52: gripql.PluginConfig.ConfigEntry + (*structpb.ListValue)(nil), // 53: google.protobuf.ListValue + (*structpb.Value)(nil), // 54: google.protobuf.Value + (*structpb.Struct)(nil), // 55: google.protobuf.Struct } var file_gripql_proto_depIdxs = []int32{ 25, // 0: gripql.Graph.vertices:type_name -> gripql.Vertex 26, // 1: gripql.Graph.edges:type_name -> gripql.Edge 6, // 2: gripql.GraphQuery.query:type_name -> gripql.GraphStatement 6, // 3: gripql.QuerySet.query:type_name -> gripql.GraphStatement - 52, // 4: gripql.GraphStatement.v:type_name -> google.protobuf.ListValue - 52, // 5: gripql.GraphStatement.e:type_name -> google.protobuf.ListValue - 52, // 6: gripql.GraphStatement.in:type_name -> google.protobuf.ListValue - 52, // 7: gripql.GraphStatement.out:type_name -> google.protobuf.ListValue - 52, // 8: gripql.GraphStatement.both:type_name -> google.protobuf.ListValue - 52, // 9: gripql.GraphStatement.in_e:type_name -> google.protobuf.ListValue - 52, // 10: gripql.GraphStatement.out_e:type_name -> google.protobuf.ListValue - 52, // 11: gripql.GraphStatement.both_e:type_name -> google.protobuf.ListValue - 52, // 12: gripql.GraphStatement.in_null:type_name -> google.protobuf.ListValue - 52, // 13: gripql.GraphStatement.out_null:type_name -> google.protobuf.ListValue - 52, // 14: gripql.GraphStatement.in_e_null:type_name -> google.protobuf.ListValue - 52, // 15: gripql.GraphStatement.out_e_null:type_name -> google.protobuf.ListValue + 53, // 4: gripql.GraphStatement.v:type_name -> google.protobuf.ListValue + 53, // 5: gripql.GraphStatement.e:type_name -> google.protobuf.ListValue + 53, // 6: gripql.GraphStatement.in:type_name -> google.protobuf.ListValue + 53, // 7: gripql.GraphStatement.out:type_name -> google.protobuf.ListValue + 53, // 8: gripql.GraphStatement.both:type_name -> google.protobuf.ListValue + 53, // 9: gripql.GraphStatement.in_e:type_name -> google.protobuf.ListValue + 53, // 10: gripql.GraphStatement.out_e:type_name -> google.protobuf.ListValue + 53, // 11: gripql.GraphStatement.both_e:type_name -> google.protobuf.ListValue + 53, // 12: gripql.GraphStatement.in_null:type_name -> google.protobuf.ListValue + 53, // 13: gripql.GraphStatement.out_null:type_name -> google.protobuf.ListValue + 53, // 14: gripql.GraphStatement.in_e_null:type_name -> google.protobuf.ListValue + 53, // 15: gripql.GraphStatement.out_e_null:type_name -> google.protobuf.ListValue 7, // 16: gripql.GraphStatement.range:type_name -> gripql.Range 20, // 17: gripql.GraphStatement.has:type_name -> gripql.HasExpression - 52, // 18: gripql.GraphStatement.has_label:type_name -> google.protobuf.ListValue - 52, // 19: gripql.GraphStatement.has_key:type_name -> google.protobuf.ListValue - 52, // 20: gripql.GraphStatement.has_id:type_name -> google.protobuf.ListValue - 52, // 21: gripql.GraphStatement.distinct:type_name -> google.protobuf.ListValue + 53, // 18: gripql.GraphStatement.has_label:type_name -> google.protobuf.ListValue + 53, // 19: gripql.GraphStatement.has_key:type_name -> google.protobuf.ListValue + 53, // 20: gripql.GraphStatement.has_id:type_name -> google.protobuf.ListValue + 53, // 21: gripql.GraphStatement.distinct:type_name -> google.protobuf.ListValue 17, // 22: gripql.GraphStatement.pivot:type_name -> gripql.PivotStep - 52, // 23: gripql.GraphStatement.fields:type_name -> google.protobuf.ListValue - 9, // 24: gripql.GraphStatement.aggregate:type_name -> gripql.Aggregations - 53, // 25: gripql.GraphStatement.render:type_name -> google.protobuf.Value - 52, // 26: gripql.GraphStatement.path:type_name -> google.protobuf.ListValue - 22, // 27: gripql.GraphStatement.jump:type_name -> gripql.Jump - 23, // 28: gripql.GraphStatement.set:type_name -> gripql.Set - 24, // 29: gripql.GraphStatement.increment:type_name -> gripql.Increment - 10, // 30: gripql.AggregationsRequest.aggregations:type_name -> gripql.Aggregate - 10, // 31: gripql.Aggregations.aggregations:type_name -> gripql.Aggregate - 11, // 32: gripql.Aggregate.term:type_name -> gripql.TermAggregation - 12, // 33: gripql.Aggregate.percentile:type_name -> gripql.PercentileAggregation - 13, // 34: gripql.Aggregate.histogram:type_name -> gripql.HistogramAggregation - 14, // 35: gripql.Aggregate.field:type_name -> gripql.FieldAggregation - 15, // 36: gripql.Aggregate.type:type_name -> gripql.TypeAggregation - 16, // 37: gripql.Aggregate.count:type_name -> gripql.CountAggregation - 53, // 38: gripql.NamedAggregationResult.key:type_name -> google.protobuf.Value - 20, // 39: gripql.HasExpressionList.expressions:type_name -> gripql.HasExpression - 19, // 40: gripql.HasExpression.and:type_name -> gripql.HasExpressionList - 19, // 41: gripql.HasExpression.or:type_name -> gripql.HasExpressionList - 20, // 42: gripql.HasExpression.not:type_name -> gripql.HasExpression - 21, // 43: gripql.HasExpression.condition:type_name -> gripql.HasCondition - 53, // 44: gripql.HasCondition.value:type_name -> google.protobuf.Value - 0, // 45: gripql.HasCondition.condition:type_name -> gripql.Condition - 20, // 46: gripql.Jump.expression:type_name -> gripql.HasExpression - 53, // 47: gripql.Set.value:type_name -> google.protobuf.Value - 54, // 48: gripql.Vertex.data:type_name -> google.protobuf.Struct - 54, // 49: gripql.Edge.data:type_name -> google.protobuf.Struct - 25, // 50: gripql.QueryResult.vertex:type_name -> gripql.Vertex - 26, // 51: gripql.QueryResult.edge:type_name -> gripql.Edge - 18, // 52: gripql.QueryResult.aggregations:type_name -> gripql.NamedAggregationResult - 53, // 53: gripql.QueryResult.render:type_name -> google.protobuf.Value - 52, // 54: gripql.QueryResult.path:type_name -> google.protobuf.ListValue - 6, // 55: gripql.ExtendQuery.query:type_name -> gripql.GraphStatement - 1, // 56: gripql.JobStatus.state:type_name -> gripql.JobState - 6, // 57: gripql.JobStatus.query:type_name -> gripql.GraphStatement - 25, // 58: gripql.GraphElement.vertex:type_name -> gripql.Vertex - 26, // 59: gripql.GraphElement.edge:type_name -> gripql.Edge - 37, // 60: gripql.ListIndicesResponse.indices:type_name -> gripql.IndexID - 50, // 61: gripql.TableInfo.link_map:type_name -> gripql.TableInfo.LinkMapEntry - 54, // 62: gripql.RawJson.extra_args:type_name -> google.protobuf.Struct - 54, // 63: gripql.RawJson.data:type_name -> google.protobuf.Struct - 51, // 64: gripql.PluginConfig.config:type_name -> gripql.PluginConfig.ConfigEntry - 4, // 65: gripql.Query.Traversal:input_type -> gripql.GraphQuery - 36, // 66: gripql.Query.GetVertex:input_type -> gripql.ElementID - 36, // 67: gripql.Query.GetEdge:input_type -> gripql.ElementID - 35, // 68: gripql.Query.GetTimestamp:input_type -> gripql.GraphID - 35, // 69: gripql.Query.GetSchema:input_type -> gripql.GraphID - 35, // 70: gripql.Query.GetMapping:input_type -> gripql.GraphID - 39, // 71: gripql.Query.ListGraphs:input_type -> gripql.Empty - 35, // 72: gripql.Query.ListIndices:input_type -> gripql.GraphID - 35, // 73: gripql.Query.ListLabels:input_type -> gripql.GraphID - 39, // 74: gripql.Query.ListTables:input_type -> gripql.Empty - 4, // 75: gripql.Job.Submit:input_type -> gripql.GraphQuery - 35, // 76: gripql.Job.ListJobs:input_type -> gripql.GraphID - 4, // 77: gripql.Job.SearchJobs:input_type -> gripql.GraphQuery - 28, // 78: gripql.Job.DeleteJob:input_type -> gripql.QueryJob - 28, // 79: gripql.Job.GetJob:input_type -> gripql.QueryJob - 28, // 80: gripql.Job.ViewJob:input_type -> gripql.QueryJob - 29, // 81: gripql.Job.ResumeJob:input_type -> gripql.ExtendQuery - 34, // 82: gripql.Edit.AddVertex:input_type -> gripql.GraphElement - 34, // 83: gripql.Edit.AddEdge:input_type -> gripql.GraphElement - 34, // 84: gripql.Edit.BulkAdd:input_type -> gripql.GraphElement - 45, // 85: gripql.Edit.BulkAddRaw:input_type -> gripql.RawJson - 35, // 86: gripql.Edit.AddGraph:input_type -> gripql.GraphID - 35, // 87: gripql.Edit.DeleteGraph:input_type -> gripql.GraphID - 44, // 88: gripql.Edit.BulkDelete:input_type -> gripql.DeleteData - 36, // 89: gripql.Edit.DeleteVertex:input_type -> gripql.ElementID - 36, // 90: gripql.Edit.DeleteEdge:input_type -> gripql.ElementID - 37, // 91: gripql.Edit.AddIndex:input_type -> gripql.IndexID - 37, // 92: gripql.Edit.DeleteIndex:input_type -> gripql.IndexID - 3, // 93: gripql.Edit.AddSchema:input_type -> gripql.Graph - 45, // 94: gripql.Edit.AddJsonSchema:input_type -> gripql.RawJson - 35, // 95: gripql.Edit.SampleSchema:input_type -> gripql.GraphID - 3, // 96: gripql.Edit.AddMapping:input_type -> gripql.Graph - 46, // 97: gripql.Configure.StartPlugin:input_type -> gripql.PluginConfig - 39, // 98: gripql.Configure.ListPlugins:input_type -> gripql.Empty - 39, // 99: gripql.Configure.ListDrivers:input_type -> gripql.Empty - 27, // 100: gripql.Query.Traversal:output_type -> gripql.QueryResult - 25, // 101: gripql.Query.GetVertex:output_type -> gripql.Vertex - 26, // 102: gripql.Query.GetEdge:output_type -> gripql.Edge - 38, // 103: gripql.Query.GetTimestamp:output_type -> gripql.Timestamp - 3, // 104: gripql.Query.GetSchema:output_type -> gripql.Graph - 3, // 105: gripql.Query.GetMapping:output_type -> gripql.Graph - 40, // 106: gripql.Query.ListGraphs:output_type -> gripql.ListGraphsResponse - 41, // 107: gripql.Query.ListIndices:output_type -> gripql.ListIndicesResponse - 42, // 108: gripql.Query.ListLabels:output_type -> gripql.ListLabelsResponse - 43, // 109: gripql.Query.ListTables:output_type -> gripql.TableInfo - 28, // 110: gripql.Job.Submit:output_type -> gripql.QueryJob - 28, // 111: gripql.Job.ListJobs:output_type -> gripql.QueryJob - 30, // 112: gripql.Job.SearchJobs:output_type -> gripql.JobStatus - 30, // 113: gripql.Job.DeleteJob:output_type -> gripql.JobStatus - 30, // 114: gripql.Job.GetJob:output_type -> gripql.JobStatus - 27, // 115: gripql.Job.ViewJob:output_type -> gripql.QueryResult - 27, // 116: gripql.Job.ResumeJob:output_type -> gripql.QueryResult - 31, // 117: gripql.Edit.AddVertex:output_type -> gripql.EditResult - 31, // 118: gripql.Edit.AddEdge:output_type -> gripql.EditResult - 32, // 119: gripql.Edit.BulkAdd:output_type -> gripql.BulkEditResult - 33, // 120: gripql.Edit.BulkAddRaw:output_type -> gripql.BulkJsonEditResult - 31, // 121: gripql.Edit.AddGraph:output_type -> gripql.EditResult - 31, // 122: gripql.Edit.DeleteGraph:output_type -> gripql.EditResult - 31, // 123: gripql.Edit.BulkDelete:output_type -> gripql.EditResult - 31, // 124: gripql.Edit.DeleteVertex:output_type -> gripql.EditResult - 31, // 125: gripql.Edit.DeleteEdge:output_type -> gripql.EditResult - 31, // 126: gripql.Edit.AddIndex:output_type -> gripql.EditResult - 31, // 127: gripql.Edit.DeleteIndex:output_type -> gripql.EditResult - 31, // 128: gripql.Edit.AddSchema:output_type -> gripql.EditResult - 31, // 129: gripql.Edit.AddJsonSchema:output_type -> gripql.EditResult - 3, // 130: gripql.Edit.SampleSchema:output_type -> gripql.Graph - 31, // 131: gripql.Edit.AddMapping:output_type -> gripql.EditResult - 47, // 132: gripql.Configure.StartPlugin:output_type -> gripql.PluginStatus - 49, // 133: gripql.Configure.ListPlugins:output_type -> gripql.ListPluginsResponse - 48, // 134: gripql.Configure.ListDrivers:output_type -> gripql.ListDriversResponse - 100, // [100:135] is the sub-list for method output_type - 65, // [65:100] 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 + 53, // 23: gripql.GraphStatement.fields:type_name -> google.protobuf.ListValue + 30, // 24: gripql.GraphStatement.flat_map:type_name -> gripql.Code + 9, // 25: gripql.GraphStatement.aggregate:type_name -> gripql.Aggregations + 54, // 26: gripql.GraphStatement.render:type_name -> google.protobuf.Value + 53, // 27: gripql.GraphStatement.path:type_name -> google.protobuf.ListValue + 22, // 28: gripql.GraphStatement.jump:type_name -> gripql.Jump + 23, // 29: gripql.GraphStatement.set:type_name -> gripql.Set + 24, // 30: gripql.GraphStatement.increment:type_name -> gripql.Increment + 10, // 31: gripql.AggregationsRequest.aggregations:type_name -> gripql.Aggregate + 10, // 32: gripql.Aggregations.aggregations:type_name -> gripql.Aggregate + 11, // 33: gripql.Aggregate.term:type_name -> gripql.TermAggregation + 12, // 34: gripql.Aggregate.percentile:type_name -> gripql.PercentileAggregation + 13, // 35: gripql.Aggregate.histogram:type_name -> gripql.HistogramAggregation + 14, // 36: gripql.Aggregate.field:type_name -> gripql.FieldAggregation + 15, // 37: gripql.Aggregate.type:type_name -> gripql.TypeAggregation + 16, // 38: gripql.Aggregate.count:type_name -> gripql.CountAggregation + 54, // 39: gripql.NamedAggregationResult.key:type_name -> google.protobuf.Value + 20, // 40: gripql.HasExpressionList.expressions:type_name -> gripql.HasExpression + 19, // 41: gripql.HasExpression.and:type_name -> gripql.HasExpressionList + 19, // 42: gripql.HasExpression.or:type_name -> gripql.HasExpressionList + 20, // 43: gripql.HasExpression.not:type_name -> gripql.HasExpression + 21, // 44: gripql.HasExpression.condition:type_name -> gripql.HasCondition + 54, // 45: gripql.HasCondition.value:type_name -> google.protobuf.Value + 0, // 46: gripql.HasCondition.condition:type_name -> gripql.Condition + 20, // 47: gripql.Jump.expression:type_name -> gripql.HasExpression + 54, // 48: gripql.Set.value:type_name -> google.protobuf.Value + 55, // 49: gripql.Vertex.data:type_name -> google.protobuf.Struct + 55, // 50: gripql.Edge.data:type_name -> google.protobuf.Struct + 25, // 51: gripql.QueryResult.vertex:type_name -> gripql.Vertex + 26, // 52: gripql.QueryResult.edge:type_name -> gripql.Edge + 18, // 53: gripql.QueryResult.aggregations:type_name -> gripql.NamedAggregationResult + 54, // 54: gripql.QueryResult.render:type_name -> google.protobuf.Value + 53, // 55: gripql.QueryResult.path:type_name -> google.protobuf.ListValue + 6, // 56: gripql.ExtendQuery.query:type_name -> gripql.GraphStatement + 55, // 57: gripql.Code.args:type_name -> google.protobuf.Struct + 1, // 58: gripql.JobStatus.state:type_name -> gripql.JobState + 6, // 59: gripql.JobStatus.query:type_name -> gripql.GraphStatement + 25, // 60: gripql.GraphElement.vertex:type_name -> gripql.Vertex + 26, // 61: gripql.GraphElement.edge:type_name -> gripql.Edge + 38, // 62: gripql.ListIndicesResponse.indices:type_name -> gripql.IndexID + 51, // 63: gripql.TableInfo.link_map:type_name -> gripql.TableInfo.LinkMapEntry + 55, // 64: gripql.RawJson.extra_args:type_name -> google.protobuf.Struct + 55, // 65: gripql.RawJson.data:type_name -> google.protobuf.Struct + 52, // 66: gripql.PluginConfig.config:type_name -> gripql.PluginConfig.ConfigEntry + 4, // 67: gripql.Query.Traversal:input_type -> gripql.GraphQuery + 37, // 68: gripql.Query.GetVertex:input_type -> gripql.ElementID + 37, // 69: gripql.Query.GetEdge:input_type -> gripql.ElementID + 36, // 70: gripql.Query.GetTimestamp:input_type -> gripql.GraphID + 36, // 71: gripql.Query.GetSchema:input_type -> gripql.GraphID + 36, // 72: gripql.Query.GetMapping:input_type -> gripql.GraphID + 40, // 73: gripql.Query.ListGraphs:input_type -> gripql.Empty + 36, // 74: gripql.Query.ListIndices:input_type -> gripql.GraphID + 36, // 75: gripql.Query.ListLabels:input_type -> gripql.GraphID + 40, // 76: gripql.Query.ListTables:input_type -> gripql.Empty + 4, // 77: gripql.Job.Submit:input_type -> gripql.GraphQuery + 36, // 78: gripql.Job.ListJobs:input_type -> gripql.GraphID + 4, // 79: gripql.Job.SearchJobs:input_type -> gripql.GraphQuery + 28, // 80: gripql.Job.DeleteJob:input_type -> gripql.QueryJob + 28, // 81: gripql.Job.GetJob:input_type -> gripql.QueryJob + 28, // 82: gripql.Job.ViewJob:input_type -> gripql.QueryJob + 29, // 83: gripql.Job.ResumeJob:input_type -> gripql.ExtendQuery + 35, // 84: gripql.Edit.AddVertex:input_type -> gripql.GraphElement + 35, // 85: gripql.Edit.AddEdge:input_type -> gripql.GraphElement + 35, // 86: gripql.Edit.BulkAdd:input_type -> gripql.GraphElement + 46, // 87: gripql.Edit.BulkAddRaw:input_type -> gripql.RawJson + 36, // 88: gripql.Edit.AddGraph:input_type -> gripql.GraphID + 36, // 89: gripql.Edit.DeleteGraph:input_type -> gripql.GraphID + 45, // 90: gripql.Edit.BulkDelete:input_type -> gripql.DeleteData + 37, // 91: gripql.Edit.DeleteVertex:input_type -> gripql.ElementID + 37, // 92: gripql.Edit.DeleteEdge:input_type -> gripql.ElementID + 38, // 93: gripql.Edit.AddIndex:input_type -> gripql.IndexID + 38, // 94: gripql.Edit.DeleteIndex:input_type -> gripql.IndexID + 3, // 95: gripql.Edit.AddSchema:input_type -> gripql.Graph + 46, // 96: gripql.Edit.AddJsonSchema:input_type -> gripql.RawJson + 36, // 97: gripql.Edit.SampleSchema:input_type -> gripql.GraphID + 3, // 98: gripql.Edit.AddMapping:input_type -> gripql.Graph + 47, // 99: gripql.Configure.StartPlugin:input_type -> gripql.PluginConfig + 40, // 100: gripql.Configure.ListPlugins:input_type -> gripql.Empty + 40, // 101: gripql.Configure.ListDrivers:input_type -> gripql.Empty + 27, // 102: gripql.Query.Traversal:output_type -> gripql.QueryResult + 25, // 103: gripql.Query.GetVertex:output_type -> gripql.Vertex + 26, // 104: gripql.Query.GetEdge:output_type -> gripql.Edge + 39, // 105: gripql.Query.GetTimestamp:output_type -> gripql.Timestamp + 3, // 106: gripql.Query.GetSchema:output_type -> gripql.Graph + 3, // 107: gripql.Query.GetMapping:output_type -> gripql.Graph + 41, // 108: gripql.Query.ListGraphs:output_type -> gripql.ListGraphsResponse + 42, // 109: gripql.Query.ListIndices:output_type -> gripql.ListIndicesResponse + 43, // 110: gripql.Query.ListLabels:output_type -> gripql.ListLabelsResponse + 44, // 111: gripql.Query.ListTables:output_type -> gripql.TableInfo + 28, // 112: gripql.Job.Submit:output_type -> gripql.QueryJob + 28, // 113: gripql.Job.ListJobs:output_type -> gripql.QueryJob + 31, // 114: gripql.Job.SearchJobs:output_type -> gripql.JobStatus + 31, // 115: gripql.Job.DeleteJob:output_type -> gripql.JobStatus + 31, // 116: gripql.Job.GetJob:output_type -> gripql.JobStatus + 27, // 117: gripql.Job.ViewJob:output_type -> gripql.QueryResult + 27, // 118: gripql.Job.ResumeJob:output_type -> gripql.QueryResult + 32, // 119: gripql.Edit.AddVertex:output_type -> gripql.EditResult + 32, // 120: gripql.Edit.AddEdge:output_type -> gripql.EditResult + 33, // 121: gripql.Edit.BulkAdd:output_type -> gripql.BulkEditResult + 34, // 122: gripql.Edit.BulkAddRaw:output_type -> gripql.BulkJsonEditResult + 32, // 123: gripql.Edit.AddGraph:output_type -> gripql.EditResult + 32, // 124: gripql.Edit.DeleteGraph:output_type -> gripql.EditResult + 32, // 125: gripql.Edit.BulkDelete:output_type -> gripql.EditResult + 32, // 126: gripql.Edit.DeleteVertex:output_type -> gripql.EditResult + 32, // 127: gripql.Edit.DeleteEdge:output_type -> gripql.EditResult + 32, // 128: gripql.Edit.AddIndex:output_type -> gripql.EditResult + 32, // 129: gripql.Edit.DeleteIndex:output_type -> gripql.EditResult + 32, // 130: gripql.Edit.AddSchema:output_type -> gripql.EditResult + 32, // 131: gripql.Edit.AddJsonSchema:output_type -> gripql.EditResult + 3, // 132: gripql.Edit.SampleSchema:output_type -> gripql.Graph + 32, // 133: gripql.Edit.AddMapping:output_type -> gripql.EditResult + 48, // 134: gripql.Configure.StartPlugin:output_type -> gripql.PluginStatus + 50, // 135: gripql.Configure.ListPlugins:output_type -> gripql.ListPluginsResponse + 49, // 136: gripql.Configure.ListDrivers:output_type -> gripql.ListDriversResponse + 102, // [102:137] is the sub-list for method output_type + 67, // [67:102] is the sub-list for method input_type + 67, // [67:67] is the sub-list for extension type_name + 67, // [67:67] is the sub-list for extension extendee + 0, // [0:67] is the sub-list for field type_name } func init() { file_gripql_proto_init() } @@ -4657,7 +4746,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*JobStatus); i { + switch v := v.(*Code); i { case 0: return &v.state case 1: @@ -4669,7 +4758,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*EditResult); i { + switch v := v.(*JobStatus); i { case 0: return &v.state case 1: @@ -4681,7 +4770,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*BulkEditResult); i { + switch v := v.(*EditResult); i { case 0: return &v.state case 1: @@ -4693,7 +4782,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*BulkJsonEditResult); i { + switch v := v.(*BulkEditResult); i { case 0: return &v.state case 1: @@ -4705,7 +4794,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*GraphElement); i { + switch v := v.(*BulkJsonEditResult); i { case 0: return &v.state case 1: @@ -4717,7 +4806,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*GraphID); i { + switch v := v.(*GraphElement); i { case 0: return &v.state case 1: @@ -4729,7 +4818,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*ElementID); i { + switch v := v.(*GraphID); i { case 0: return &v.state case 1: @@ -4741,7 +4830,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*IndexID); i { + switch v := v.(*ElementID); i { case 0: return &v.state case 1: @@ -4753,7 +4842,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*Timestamp); i { + switch v := v.(*IndexID); i { case 0: return &v.state case 1: @@ -4765,7 +4854,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*Empty); i { + switch v := v.(*Timestamp); i { case 0: return &v.state case 1: @@ -4777,7 +4866,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*ListGraphsResponse); i { + switch v := v.(*Empty); i { case 0: return &v.state case 1: @@ -4789,7 +4878,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*ListIndicesResponse); i { + switch v := v.(*ListGraphsResponse); i { case 0: return &v.state case 1: @@ -4801,7 +4890,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*ListLabelsResponse); i { + switch v := v.(*ListIndicesResponse); i { case 0: return &v.state case 1: @@ -4813,7 +4902,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*TableInfo); i { + switch v := v.(*ListLabelsResponse); i { case 0: return &v.state case 1: @@ -4825,7 +4914,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*DeleteData); i { + switch v := v.(*TableInfo); i { case 0: return &v.state case 1: @@ -4837,7 +4926,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*RawJson); i { + switch v := v.(*DeleteData); i { case 0: return &v.state case 1: @@ -4849,7 +4938,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*PluginConfig); i { + switch v := v.(*RawJson); i { case 0: return &v.state case 1: @@ -4861,7 +4950,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*PluginStatus); i { + switch v := v.(*PluginConfig); i { case 0: return &v.state case 1: @@ -4873,7 +4962,7 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*ListDriversResponse); i { + switch v := v.(*PluginStatus); i { case 0: return &v.state case 1: @@ -4885,6 +4974,18 @@ func file_gripql_proto_init() { } } file_gripql_proto_msgTypes[46].Exporter = func(v any, i int) any { + switch v := v.(*ListDriversResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gripql_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*ListPluginsResponse); i { case 0: return &v.state @@ -4923,6 +5024,7 @@ func file_gripql_proto_init() { (*GraphStatement_Pivot)(nil), (*GraphStatement_Fields)(nil), (*GraphStatement_Unwind)(nil), + (*GraphStatement_FlatMap)(nil), (*GraphStatement_Count)(nil), (*GraphStatement_Aggregate)(nil), (*GraphStatement_Render)(nil), @@ -4960,7 +5062,7 @@ func file_gripql_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gripql_proto_rawDesc, NumEnums: 3, - NumMessages: 49, + NumMessages: 50, NumExtensions: 0, NumServices: 4, }, diff --git a/gripql/gripql.proto b/gripql/gripql.proto index 05808b14..a732d042 100644 --- a/gripql/gripql.proto +++ b/gripql/gripql.proto @@ -55,6 +55,8 @@ message GraphStatement { google.protobuf.ListValue fields = 50; string unwind = 51; + Code flat_map = 53; + string count = 60; Aggregations aggregate = 61; google.protobuf.Value render = 62; @@ -219,6 +221,12 @@ message ExtendQuery { repeated GraphStatement query = 3; } +message Code { + string function = 1; + string source = 2; + google.protobuf.Struct args = 3; +} + enum JobState { QUEUED = 0; RUNNING = 1; diff --git a/gripql/inspect/inspect.go b/gripql/inspect/inspect.go index 54883422..c2964c9f 100644 --- a/gripql/inspect/inspect.go +++ b/gripql/inspect/inspect.go @@ -52,7 +52,9 @@ func PipelineSteps(stmts []*gripql.GraphStatement) []string { *gripql.GraphStatement_Range, *gripql.GraphStatement_Aggregate, *gripql.GraphStatement_Render, *gripql.GraphStatement_Fields, *gripql.GraphStatement_Unwind, *gripql.GraphStatement_Path, *gripql.GraphStatement_Set, *gripql.GraphStatement_Increment, - *gripql.GraphStatement_Mark, *gripql.GraphStatement_Jump, *gripql.GraphStatement_Pivot: + *gripql.GraphStatement_Mark, *gripql.GraphStatement_Jump, *gripql.GraphStatement_Pivot, + *gripql.GraphStatement_FlatMap: + case *gripql.GraphStatement_LookupVertsIndex, *gripql.GraphStatement_EngineCustom: default: log.Errorf("Unknown Graph Statement: %T", gs.GetStatement()) diff --git a/gripql/javascript/gripql.js b/gripql/javascript/gripql.js index fc67651b..ea544eaf 100644 --- a/gripql/javascript/gripql.js +++ b/gripql/javascript/gripql.js @@ -1,9 +1,9 @@ function process(val) { if (!val) { val = [] - } else if (typeof val == "string" || typeof val == "number") { - val = [val] - } else if (!Array.isArray(val)) { + } else if (typeof val == "string" || typeof val == "number") { + val = [val] + } else if (!Array.isArray(val)) { throw "not something we know how to process into an array" } return val @@ -13,214 +13,217 @@ function resume() { return query() } -function query(client=null) { +function query(client = null) { return { query: [], client: client, - V: function(id) { - this.query.push({'v': process(id)}) + V: function (id) { + this.query.push({ 'v': process(id) }) return this }, - E: function(id) { - this.query.push({'e': process(id)}) + E: function (id) { + this.query.push({ 'e': process(id) }) return this }, - out: function(label) { - this.query.push({'out': process(label)}) + out: function (label) { + this.query.push({ 'out': process(label) }) return this }, - outNull: function(label) { - this.query.push({'outNull': process(label)}) + outNull: function (label) { + this.query.push({ 'outNull': process(label) }) return this }, - in_: function(label) { - this.query.push({'in': process(label)}) + in_: function (label) { + this.query.push({ 'in': process(label) }) return this }, - inNull: function(label) { - this.query.push({'inNull': process(label)}) + inNull: function (label) { + this.query.push({ 'inNull': process(label) }) return this }, - both: function(label) { - this.query.push({'both': process(label)}) + both: function (label) { + this.query.push({ 'both': process(label) }) return this }, - outV: function(label) { - this.query.push({'outV': process(label)}) + outV: function (label) { + this.query.push({ 'outV': process(label) }) return this }, - inV: function(label) { - this.query.push({'inV': process(label)}) + inV: function (label) { + this.query.push({ 'inV': process(label) }) return this }, - bothV: function(label) { - this.query.push({'bothV': process(label)}) + bothV: function (label) { + this.query.push({ 'bothV': process(label) }) return this }, - outE: function(label) { - this.query.push({'outE': process(label)}) + outE: function (label) { + this.query.push({ 'outE': process(label) }) return this }, - outENull: function(label) { - this.query.push({'outENull': process(label)}) + outENull: function (label) { + this.query.push({ 'outENull': process(label) }) return this }, - inE: function(label) { - this.query.push({'inE': process(label)}) + inE: function (label) { + this.query.push({ 'inE': process(label) }) return this }, - inENull: function(label) { - this.query.push({'inENull': process(label)}) + inENull: function (label) { + this.query.push({ 'inENull': process(label) }) return this }, - bothE: function(label) { - this.query.push({'bothE': process(label)}) + bothE: function (label) { + this.query.push({ 'bothE': process(label) }) return this }, - as_: function(name) { - this.query.push({'as': name}) + as_: function (name) { + this.query.push({ 'as': name }) return this }, - select: function(name) { - this.query.push({'select': name}) + select: function (name) { + this.query.push({ 'select': name }) return this }, - limit: function(n) { - this.query.push({'limit': n}) + limit: function (n) { + this.query.push({ 'limit': n }) return this }, - skip: function(n) { - this.query.push({'skip': n}) + skip: function (n) { + this.query.push({ 'skip': n }) return this }, - range: function(start, stop) { - this.query.push({'range': {'start': start, 'stop': stop}}) + range: function (start, stop) { + this.query.push({ 'range': { 'start': start, 'stop': stop } }) return this }, - count: function() { - this.query.push({'count': ''}) + count: function () { + this.query.push({ 'count': '' }) return this }, - distinct: function(val) { - this.query.push({'distinct': process(val)}) + distinct: function (val) { + this.query.push({ 'distinct': process(val) }) return this }, - fields: function(fields) { - this.query.push({'fields': fields}) + fields: function (fields) { + this.query.push({ 'fields': fields }) return this }, - render: function(r) { - this.query.push({'render': r}) + render: function (r) { + this.query.push({ 'render': r }) return this }, - has: function(expression) { - this.query.push({'has': expression}) + has: function (expression) { + this.query.push({ 'has': expression }) return this }, - hasLabel: function(label) { - this.query.push({'hasLabel': process(label)}) + hasLabel: function (label) { + this.query.push({ 'hasLabel': process(label) }) return this }, - hasId: function(id) { - this.query.push({'hasId': process(id)}) + hasId: function (id) { + this.query.push({ 'hasId': process(id) }) return this }, - hasKey: function(key) { - this.query.push({'hasKey': process(key)}) + hasKey: function (key) { + this.query.push({ 'hasKey': process(key) }) return this }, - set: function(key, value) { - this.query.push({'set':{'key':key, 'value':value}}) + set: function (key, value) { + this.query.push({ 'set': { 'key': key, 'value': value } }) return this }, - increment: function(key, value) { - this.query.push({'increment':{'key':key, 'value':value}}) + increment: function (key, value) { + this.query.push({ 'increment': { 'key': key, 'value': value } }) return this }, - jump: function(mark, expression, emit) { - this.query.push({"jump": {"mark":mark, "expression" : expression, "emit":emit}}) + jump: function (mark, expression, emit) { + this.query.push({ "jump": { "mark": mark, "expression": expression, "emit": emit } }) return this }, - mark: function(name){ - this.query.push({"mark": name}) + mark: function (name) { + this.query.push({ "mark": name }) return this }, - aggregate: function() { - this.query.push({'aggregate': {'aggregations': Array.prototype.slice.call(arguments)}}) + aggregate: function () { + this.query.push({ 'aggregate': { 'aggregations': Array.prototype.slice.call(arguments) } }) return this }, - toList: function() { - return this.client.toList( {"query": this.query} ) + toList: function () { + return this.client.toList({ "query": this.query }) + }, + flatMap: function (fname, source, args) { + this.query.push({ "flat_map": { "function": fname, "source": source, "args": args } }) } } } // Where operators function and_() { - return {'and': {'expressions': Array.prototype.slice.call(arguments)}} + return { 'and': { 'expressions': Array.prototype.slice.call(arguments) } } } function or_() { - return {'or': {'expressions': Array.prototype.slice.call(arguments)}} + return { 'or': { 'expressions': Array.prototype.slice.call(arguments) } } } function not_(expression) { - return {'not': expression} + return { 'not': expression } } function eq(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'EQ'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'EQ' } } } function neq(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'NEQ'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'NEQ' } } } function gt(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'GT'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'GT' } } } function gte(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'GTE'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'GTE' } } } function lt(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'LT'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'LT' } } } function lte(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'LTE'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'LTE' } } } function inside(key, values) { - return {'condition': {'key': key, 'value': process(values), 'condition': 'INSIDE'}} + return { 'condition': { 'key': key, 'value': process(values), 'condition': 'INSIDE' } } } function outside(key, values) { - return {'condition': {'key': key, 'value': process(values), 'condition': 'OUTSIDE'}} + return { 'condition': { 'key': key, 'value': process(values), 'condition': 'OUTSIDE' } } } function between(key, values) { - return {'condition': {'key': key, 'value': process(values), 'condition': 'BETWEEN'}} + return { 'condition': { 'key': key, 'value': process(values), 'condition': 'BETWEEN' } } } function within(key, values) { - return {'condition': {'key': key, 'value': process(values), 'condition': 'WITHIN'}} + return { 'condition': { 'key': key, 'value': process(values), 'condition': 'WITHIN' } } } function without(key, values) { - return {'condition': {'key': key, 'value': process(values), 'condition': 'WITHOUT'}} + return { 'condition': { 'key': key, 'value': process(values), 'condition': 'WITHOUT' } } } function contains(key, value) { - return {'condition': {'key': key, 'value': value, 'condition': 'CONTAINS'}} + return { 'condition': { 'key': key, 'value': value, 'condition': 'CONTAINS' } } } // Aggregation builders function term(name, field, size) { agg = { "name": name, - "term": {"field": field} + "term": { "field": field } } if (size) { if (typeof size != "number") { @@ -238,7 +241,7 @@ function percentile(name, field, percents) { percents = process(percents) } - if (!percents.every(function(x){ return typeof x == "number" })) { + if (!percents.every(function (x) { return typeof x == "number" })) { throw "percents expected to be an array of numbers" } @@ -271,34 +274,34 @@ function count(name) { } } -function field(name, field){ - return { - "name": name, - "field": { +function field(name, field) { + return { + "name": name, + "field": { "field": field } - } + } } gripql = { - "lt" : lt, - "gt" : gt, - "lte" : lte, - "gte" : gte, - "eq" : eq, + "lt": lt, + "gt": gt, + "lte": lte, + "gte": gte, + "eq": eq, "without": without, - "within" : within, - "inside" : inside, - "field" : field, - "count" : count, + "within": within, + "inside": inside, + "field": field, + "count": count, "histogram": histogram, "percentile": percentile, } function V(id) { - return query().V(id) + return query().V(id) } function E(id) { - return query().E(id) + return query().E(id) } diff --git a/gripql/python/gripql/query.py b/gripql/python/gripql/query.py index b9e8f1bc..9a1d12d9 100644 --- a/gripql/python/gripql/query.py +++ b/gripql/python/gripql/query.py @@ -330,6 +330,9 @@ def aggregate(self, aggregations): aggregations = _wrap_dict_value(aggregations) return self.__append({"aggregate": {"aggregations": aggregations}}) + def flatMap(self, fname, source, args): + return self.__append({"flat_map": {"function":fname, "source":source, "args": args}}) + def to_json(self): """ Return the query as a JSON string. diff --git a/gripql/query.go b/gripql/query.go index dd99e420..d1b9e3af 100644 --- a/gripql/query.go +++ b/gripql/query.go @@ -208,6 +208,10 @@ func (q *Query) Unwind(path string) *Query { return q.with(&GraphStatement{Statement: &GraphStatement_Unwind{Unwind: path}}) } +func (q *Query) FlatMap(code *Code) *Query { + return q.with(&GraphStatement{Statement: &GraphStatement_FlatMap{FlatMap: code}}) +} + func (q *Query) String() string { parts := []string{} add := func(name string, x ...string) { @@ -297,6 +301,15 @@ func (q *Query) String() string { case *GraphStatement_Aggregate: add("Aggregate") + case *GraphStatement_Unwind: + add("Unwind", stmt.Unwind) + + case *GraphStatement_Pivot: + add("Pivot", fmt.Sprintf("%s", stmt.Pivot.Id), fmt.Sprintf("%s", stmt.Pivot.Field), fmt.Sprintf("%s", stmt.Pivot.Value)) + + case *GraphStatement_FlatMap: + add("FlatMap", fmt.Sprintf("%s", stmt.FlatMap.Function), fmt.Sprintf("%s", stmt.FlatMap.Source), fmt.Sprintf("%s", stmt.FlatMap.Args.String())) + case *GraphStatement_Render: jtxt, err := protojson.Marshal(stmt.Render) if err != nil { diff --git a/mongo/compile.go b/mongo/compile.go index 78b80bb5..184ff4ad 100644 --- a/mongo/compile.go +++ b/mongo/compile.go @@ -65,7 +65,7 @@ func (comp *Compiler) Compile(stmts []*gripql.GraphStatement, opts *gdbi.Compile for _, gs := range stmts { switch gs.GetStatement().(type) { case *gripql.GraphStatement_Jump, *gripql.GraphStatement_Set, - *gripql.GraphStatement_Increment: + *gripql.GraphStatement_Increment, *gripql.GraphStatement_FlatMap: unsupportedOps = true } }