Repository: kythe/kythe
Pull request #4995 (2021-07-28 17:33:17)

Implement extends_overrides.

shahms: /gcbrun
shahms: Trivial clang-format change for lint failures:
```
diff --git a/kythe/proto/pipeline.proto b/kythe/proto/pipeline.proto
index 4f1aae706..476f70a51 100644
--- a/kythe/proto/pipeline.proto
+++ b/kythe/proto/pipeline.proto
@@ -55,6 +55,7 @@ message DecorationPiece {
     kythe.proto.schema.Node node = 4;
     Definition definition = 5;
     kythe.proto.common.Diagnostic diagnostic = 6;
-    kythe.proto.serving.xrefs.FileDecorations.TargetOverride target_override = 7;
+    kythe.proto.serving.xrefs.FileDecorations.TargetOverride target_override =
+        7;
   }
 }
```
schroederc: /gcbrun

Patch:
diff --git a/kythe/go/serving/pipeline/beam.go b/kythe/go/serving/pipeline/beam.go
index 072e7a7bc..08d5bd85a 100644
--- a/kythe/go/serving/pipeline/beam.go
+++ b/kythe/go/serving/pipeline/beam.go
@@ -73,6 +73,8 @@ func init() {
 	beam.RegisterFunction(nodeToDocs)
 	beam.RegisterFunction(nodeToEdges)
 	beam.RegisterFunction(nodeToReverseEdges)
+	beam.RegisterFunction(overriddenToDecor)
+	beam.RegisterFunction(overridingToFile)
 	beam.RegisterFunction(parseMarkedSource)
 	beam.RegisterFunction(refToCallsite)
 	beam.RegisterFunction(refToCrossRef)
@@ -419,10 +421,57 @@ func (k *KytheBeam) decorationPieces(s beam.Scope) beam.PCollection {
 		beam.CoGroupByKey(s, beam.ParDo(s, moveSourceToKey, bareNodes), targets))
 	defs := beam.ParDo(s, defToDecorPiece,
 		beam.CoGroupByKey(s, k.directDefinitions(), targets))
-	// TODO(schroederc): overrides
+	overrides := k.overrides(targets)
 	decorDiagnostics := k.diagnostics()
 
-	return beam.Flatten(s, decor, files, targetNodes, defs, decorDiagnostics)
+	return beam.Flatten(s, decor, files, targetNodes, defs, decorDiagnostics, overrides)
+}
+
+func (k *KytheBeam) overrides(targets beam.PCollection) beam.PCollection {
+	s := k.s.Scope("Overrides")
+	overriddenToEdge := beam.Seq(s, k.Nodes(), &nodes.Filter{IncludeEdges: []string{edges.Overrides, edges.Extends, edges.OverridesTransitive, edges.Satisfies}}, nodeToEdges)
+	overridingToDecor := beam.ParDo(s, overriddenToDecor, beam.CoGroupByKey(s, k.directDefinitions(), overriddenToEdge))
+	return beam.ParDo(s, overridingToFile, beam.CoGroupByKey(s, targets, overridingToDecor))
+}
+
+func overriddenToDecor(overridden *spb.VName, overriddenAnchors func(**srvpb.ExpandedAnchor) bool, edgeStream func(**scpb.Edge) bool, emit func(*spb.VName, *ppb.DecorationPiece)) {
+	var overriddenAnchor *srvpb.ExpandedAnchor
+	var e *scpb.Edge
+	if !overriddenAnchors(&overriddenAnchor) {
+		return
+	}
+	for edgeStream(&e) {
+		var kind srvpb.FileDecorations_Override_Kind
+		edgeKindString := schema.EdgeKindString(e.GetKytheKind())
+		if edges.IsVariant(edgeKindString, edges.Overrides) {
+			kind = srvpb.FileDecorations_Override_OVERRIDES
+		} else if edges.IsVariant(edgeKindString, edges.Extends) || edges.IsVariant(edgeKindString, edges.Satisfies) {
+			kind = srvpb.FileDecorations_Override_EXTENDS
+		} else {
+			continue
+		}
+		emit(e.Source, &ppb.DecorationPiece{
+			Piece: &ppb.DecorationPiece_TargetOverride{
+				TargetOverride: &xspb.FileDecorations_TargetOverride{
+					Overriding:           e.Source,
+					Overridden:           e.Target,
+					Kind:                 kind,
+					OverridingDefinition: overriddenAnchor,
+				},
+			},
+		})
+	}
+}
+
+func overridingToFile(target *spb.VName, files func(**spb.VName) bool, overrides func(**ppb.DecorationPiece) bool, emit func(*spb.VName, *ppb.DecorationPiece)) {
+	var file *spb.VName
+	if !files(&file) {
+		return
+	}
+	var override *ppb.DecorationPiece
+	for overrides(&override) {
+		emit(file, override)
+	}
 }
 
 func (k *KytheBeam) diagnostics() beam.PCollection {
@@ -580,6 +629,13 @@ func (c *combineDecorPieces) AddInput(accum *srvpb.FileDecorations, p *ppb.Decor
 		})
 	case *ppb.DecorationPiece_Diagnostic:
 		accum.Diagnostic = append(accum.Diagnostic, p.Diagnostic)
+	case *ppb.DecorationPiece_TargetOverride:
+		accum.TargetOverride = append(accum.TargetOverride, &srvpb.FileDecorations_Override{
+			Overriding:           kytheuri.ToString(p.TargetOverride.Overriding),
+			Overridden:           kytheuri.ToString(p.TargetOverride.Overridden),
+			OverriddenDefinition: p.TargetOverride.OverridingDefinition.Ticket,
+			Kind:                 p.TargetOverride.Kind,
+		})
 	default:
 		panic(fmt.Errorf("unhandled DecorationPiece: %T", p))
 	}
diff --git a/kythe/go/serving/pipeline/encoding.go b/kythe/go/serving/pipeline/encoding.go
index acf7a2ac3..30072399c 100644
--- a/kythe/go/serving/pipeline/encoding.go
+++ b/kythe/go/serving/pipeline/encoding.go
@@ -96,12 +96,27 @@ func encodeDecorPiece(file *spb.VName, p *ppb.DecorationPiece, emit func([]byte,
 		return encodeDecorDef(file, p.Definition, emit)
 	case *ppb.DecorationPiece_Diagnostic:
 		return encodeDecorDiagnostic(file, p.Diagnostic, emit)
+	case *ppb.DecorationPiece_TargetOverride:
+		return encodeDecorTargetOverride(file, p.TargetOverride, emit)
 	default:
-		// TODO(schroederc): add overrides
 		return fmt.Errorf("unknown DecorationPiece: %T", p)
 	}
 }
 
+func encodeDecorTargetOverride(file *spb.VName, o *xspb.FileDecorations_TargetOverride, emit func([]byte, []byte)) error {
+	e, err := columnar.EncodeDecorationsEntry(columnar.DecorationsKeyPrefix, &xspb.FileDecorations{
+		File: file,
+		Entry: &xspb.FileDecorations_TargetOverride_{
+			TargetOverride: o,
+		},
+	})
+	if err != nil {
+		return err
+	}
+	emit(e.Key, e.Value)
+	return nil
+}
+
 func encodeDecorFile(file *spb.VName, f *srvpb.File, emit func([]byte, []byte)) error {
 	// Emit FileDecorations Index
 	e, err := columnar.EncodeDecorationsEntry(columnar.DecorationsKeyPrefix, &xspb.FileDecorations{
diff --git a/kythe/go/serving/xrefs/columnar.go b/kythe/go/serving/xrefs/columnar.go
index 3fe2c6d19..5bc6bb9fe 100644
--- a/kythe/go/serving/xrefs/columnar.go
+++ b/kythe/go/serving/xrefs/columnar.go
@@ -41,6 +41,7 @@ import (
 
 	cpb "kythe.io/kythe/proto/common_go_proto"
 	scpb "kythe.io/kythe/proto/schema_go_proto"
+	"kythe.io/kythe/proto/serving_go_proto"
 	xpb "kythe.io/kythe/proto/xref_go_proto"
 	xspb "kythe.io/kythe/proto/xref_serving_go_proto"
 )
@@ -126,6 +127,7 @@ func (c *ColumnarTable) Decorations(ctx context.Context, req *xpb.DecorationsReq
 	var norm *span.Normalizer                                          // span normalizer for references
 	refsByTarget := make(map[string][]*xpb.DecorationsReply_Reference) // target -> set<Reference>
 	defs := stringset.New()                                            // set<needed definition tickets>
+	reply.ExtendsOverrides = make(map[string]*xpb.DecorationsReply_Overrides)
 	buildConfigs := stringset.New(req.BuildConfig...)
 	patterns := xrefs.ConvertFilters(req.Filter)
 	emitSnippets := req.Snippets != xpb.SnippetsKind_NONE
@@ -216,7 +218,27 @@ func (c *ColumnarTable) Decorations(ctx context.Context, req *xpb.DecorationsReq
 			refsByTarget[ref.TargetTicket] = append(refsByTarget[ref.TargetTicket], ref)
 			reply.Reference = append(reply.Reference, ref)
 		case *xspb.FileDecorations_TargetOverride_:
-			// TODO(schroederc): handle
+			overridingTicket := kytheuri.ToString(e.TargetOverride.Overriding)
+			t, ok := reply.ExtendsOverrides[overridingTicket]
+			if !ok {
+				t = &xpb.DecorationsReply_Overrides{}
+				reply.ExtendsOverrides[overridingTicket] = t
+			}
+			var kind xpb.DecorationsReply_Override_Kind
+			switch e.TargetOverride.Kind {
+			case serving_go_proto.FileDecorations_Override_OVERRIDES:
+				kind = xpb.DecorationsReply_Override_OVERRIDES
+			case serving_go_proto.FileDecorations_Override_EXTENDS:
+				kind = xpb.DecorationsReply_Override_EXTENDS
+			}
+			t.Override = append(t.Override, &xpb.DecorationsReply_Override{
+				Target:           kytheuri.ToString(e.TargetOverride.Overridden),
+				Kind:             kind,
+				TargetDefinition: e.TargetOverride.OverridingDefinition.Ticket,
+			})
+			if req.TargetDefinitions {
+				reply.DefinitionLocations[e.TargetOverride.OverridingDefinition.Ticket] = a2a(e.TargetOverride.OverridingDefinition, nil, false).Anchor
+			}
 		case *xspb.FileDecorations_TargetNode_:
 			if len(patterns) == 0 {
 				// TODO(schroederc): seek to next group
diff --git a/kythe/go/serving/xrefs/columnar/columnar_encoding.go b/kythe/go/serving/xrefs/columnar/columnar_encoding.go
index c85a013f0..4e3701050 100644
--- a/kythe/go/serving/xrefs/columnar/columnar_encoding.go
+++ b/kythe/go/serving/xrefs/columnar/columnar_encoding.go
@@ -136,7 +136,7 @@ func encodeDecorTargetOverride(prefix []byte, file *spb.VName, to *xspb.FileDeco
 	if err != nil {
 		return nil, err
 	}
-	val, err := proto.Marshal(&xspb.FileDecorations_TargetOverride{})
+	val, err := proto.Marshal(to)
 	if err != nil {
 		return nil, err
 	}
@@ -295,13 +295,13 @@ func decodeDecorTargetOverride(file *spb.VName, key string, val []byte) (*xspb.F
 	} else if key != "" {
 		return nil, fmt.Errorf("unexpected TargetOverride key suffix: %q", key)
 	}
+	var to xspb.FileDecorations_TargetOverride
+	if err = proto.Unmarshal(val, &to); err != nil {
+		return nil, err
+	}
 	return &xspb.FileDecorations{
-		File: file,
-		Entry: &xspb.FileDecorations_TargetOverride_{&xspb.FileDecorations_TargetOverride{
-			Kind:       xspb.FileDecorations_TargetOverride_Kind(kind),
-			Overridden: &overridden,
-			Overriding: &overriding,
-		}},
+		File:  file,
+		Entry: &xspb.FileDecorations_TargetOverride_{&to},
 	}, nil
 }
 
diff --git a/kythe/go/util/schema/edges/edges.go b/kythe/go/util/schema/edges/edges.go
index 9838f2a9b..1236c7549 100644
--- a/kythe/go/util/schema/edges/edges.go
+++ b/kythe/go/util/schema/edges/edges.go
@@ -42,6 +42,7 @@ const (
 	Generates               = Prefix + "generates"
 	Named                   = Prefix + "named"
 	Overrides               = Prefix + "overrides"
+	OverridesTransitive     = Prefix + "overrides/transitive"
 	Param                   = Prefix + "param"
 	Satisfies               = Prefix + "satisfies"
 	Typed                   = Prefix + "typed"
diff --git a/kythe/proto/BUILD b/kythe/proto/BUILD
index d3da8bf02..22bcadb89 100644
--- a/kythe/proto/BUILD
+++ b/kythe/proto/BUILD
@@ -640,6 +640,7 @@ proto_library(
         ":schema_proto",
         ":serving_proto",
         ":storage_proto",
+        ":xref_serving_proto",
     ],
 )
 
@@ -650,6 +651,7 @@ go_kythe_proto(
         ":schema_go_proto",
         ":serving_go_proto",
         ":storage_go_proto",
+        ":xref_serving_go_proto",
     ],
 )
 
diff --git a/kythe/proto/pipeline.proto b/kythe/proto/pipeline.proto
index 36e6898f1..476f70a51 100644
--- a/kythe/proto/pipeline.proto
+++ b/kythe/proto/pipeline.proto
@@ -25,6 +25,7 @@ import "kythe/proto/common.proto";
 import "kythe/proto/schema.proto";
 import "kythe/proto/serving.proto";
 import "kythe/proto/storage.proto";
+import "kythe/proto/xref_serving.proto";
 
 message Reference {
   kythe.proto.VName source = 1;
@@ -54,6 +55,7 @@ message DecorationPiece {
     kythe.proto.schema.Node node = 4;
     Definition definition = 5;
     kythe.proto.common.Diagnostic diagnostic = 6;
-    // TODO(schroederc): overrides
+    kythe.proto.serving.xrefs.FileDecorations.TargetOverride target_override =
+        7;
   }
 }
diff --git a/kythe/proto/pipeline_go_proto/pipeline.pb.go b/kythe/proto/pipeline_go_proto/pipeline.pb.go
index eb8c6a60a..ccbc2ac51 100644
--- a/kythe/proto/pipeline_go_proto/pipeline.pb.go
+++ b/kythe/proto/pipeline_go_proto/pipeline.pb.go
@@ -14,6 +14,7 @@ import (
 	schema_go_proto "kythe.io/kythe/proto/schema_go_proto"
 	serving_go_proto "kythe.io/kythe/proto/serving_go_proto"
 	storage_go_proto "kythe.io/kythe/proto/storage_go_proto"
+	xref_serving_go_proto "kythe.io/kythe/proto/xref_serving_go_proto"
 	reflect "reflect"
 	sync "sync"
 )
@@ -145,6 +146,7 @@ type DecorationPiece struct {
 	//	*DecorationPiece_Node
 	//	*DecorationPiece_Definition_
 	//	*DecorationPiece_Diagnostic
+	//	*DecorationPiece_TargetOverride
 	Piece isDecorationPiece_Piece `protobuf_oneof:"piece"`
 }
 
@@ -229,6 +231,13 @@ func (x *DecorationPiece) GetDiagnostic() *common_go_proto.Diagnostic {
 	return nil
 }
 
+func (x *DecorationPiece) GetTargetOverride() *xref_serving_go_proto.FileDecorations_TargetOverride {
+	if x, ok := x.GetPiece().(*DecorationPiece_TargetOverride); ok {
+		return x.TargetOverride
+	}
+	return nil
+}
+
 type isDecorationPiece_Piece interface {
 	isDecorationPiece_Piece()
 }
@@ -253,6 +262,10 @@ type DecorationPiece_Diagnostic struct {
 	Diagnostic *common_go_proto.Diagnostic `protobuf:"bytes,6,opt,name=diagnostic,proto3,oneof"`
 }
 
+type DecorationPiece_TargetOverride struct {
+	TargetOverride *xref_serving_go_proto.FileDecorations_TargetOverride `protobuf:"bytes,7,opt,name=target_override,json=targetOverride,proto3,oneof"`
+}
+
 func (*DecorationPiece_File) isDecorationPiece_Piece() {}
 
 func (*DecorationPiece_Reference) isDecorationPiece_Piece() {}
@@ -263,6 +276,8 @@ func (*DecorationPiece_Definition_) isDecorationPiece_Piece() {}
 
 func (*DecorationPiece_Diagnostic) isDecorationPiece_Piece() {}
 
+func (*DecorationPiece_TargetOverride) isDecorationPiece_Piece() {}
+
 type DecorationPiece_Definition struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -330,7 +345,9 @@ var file_kythe_proto_pipeline_proto_rawDesc = []byte{
 	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2f, 0x70, 0x72,
 	0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 	0x6f, 0x1a, 0x19, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73,
-	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x02, 0x0a,
+	0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6b, 0x79,
+	0x74, 0x68, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x72, 0x65, 0x66, 0x5f, 0x73,
+	0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x02, 0x0a,
 	0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x6f,
 	0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74,
 	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06,
@@ -347,7 +364,7 @@ var file_kythe_proto_pipeline_proto_rawDesc = []byte{
 	0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65,
 	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70,
-	0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x81, 0x04, 0x0a, 0x0f, 0x44, 0x65,
+	0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xe7, 0x04, 0x0a, 0x0f, 0x44, 0x65,
 	0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x32, 0x0a,
 	0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
 	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
@@ -371,19 +388,26 @@ var file_kythe_proto_pipeline_proto_rawDesc = []byte{
 	0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6b, 0x79,
 	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
 	0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x48, 0x00, 0x52, 0x0a, 0x64,
-	0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x1a, 0x79, 0x0a, 0x0a, 0x44, 0x65, 0x66,
-	0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12,
-	0x43, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64,
-	0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x42, 0x34, 0x0a,
-	0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
-	0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x5a, 0x11, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x64, 0x0a, 0x0f, 0x74, 0x61, 0x72,
+	0x67, 0x65, 0x74, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x46,
+	0x69, 0x6c, 0x65, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x48, 0x00, 0x52,
+	0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x1a,
+	0x79, 0x0a, 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a,
+	0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79,
+	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52,
+	0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e,
+	0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x0a,
+	0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x70, 0x69,
+	0x65, 0x63, 0x65, 0x42, 0x34, 0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x11, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65,
+	0x5f, 0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var (
@@ -400,15 +424,16 @@ func file_kythe_proto_pipeline_proto_rawDescGZIP() []byte {
 
 var file_kythe_proto_pipeline_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
 var file_kythe_proto_pipeline_proto_goTypes = []interface{}{
-	(*Reference)(nil),                       // 0: kythe.proto.pipeline.Reference
-	(*DecorationPiece)(nil),                 // 1: kythe.proto.pipeline.DecorationPiece
-	(*DecorationPiece_Definition)(nil),      // 2: kythe.proto.pipeline.DecorationPiece.Definition
-	(*storage_go_proto.VName)(nil),          // 3: kythe.proto.VName
-	(schema_go_proto.EdgeKind)(0),           // 4: kythe.proto.schema.EdgeKind
-	(*serving_go_proto.ExpandedAnchor)(nil), // 5: kythe.proto.serving.ExpandedAnchor
-	(*serving_go_proto.File)(nil),           // 6: kythe.proto.serving.File
-	(*schema_go_proto.Node)(nil),            // 7: kythe.proto.schema.Node
-	(*common_go_proto.Diagnostic)(nil),      // 8: kythe.proto.common.Diagnostic
+	(*Reference)(nil),                                            // 0: kythe.proto.pipeline.Reference
+	(*DecorationPiece)(nil),                                      // 1: kythe.proto.pipeline.DecorationPiece
+	(*DecorationPiece_Definition)(nil),                           // 2: kythe.proto.pipeline.DecorationPiece.Definition
+	(*storage_go_proto.VName)(nil),                               // 3: kythe.proto.VName
+	(schema_go_proto.EdgeKind)(0),                                // 4: kythe.proto.schema.EdgeKind
+	(*serving_go_proto.ExpandedAnchor)(nil),                      // 5: kythe.proto.serving.ExpandedAnchor
+	(*serving_go_proto.File)(nil),                                // 6: kythe.proto.serving.File
+	(*schema_go_proto.Node)(nil),                                 // 7: kythe.proto.schema.Node
+	(*common_go_proto.Diagnostic)(nil),                           // 8: kythe.proto.common.Diagnostic
+	(*xref_serving_go_proto.FileDecorations_TargetOverride)(nil), // 9: kythe.proto.serving.xrefs.FileDecorations.TargetOverride
 }
 var file_kythe_proto_pipeline_proto_depIdxs = []int32{
 	3,  // 0: kythe.proto.pipeline.Reference.source:type_name -> kythe.proto.VName
@@ -421,13 +446,14 @@ var file_kythe_proto_pipeline_proto_depIdxs = []int32{
 	7,  // 7: kythe.proto.pipeline.DecorationPiece.node:type_name -> kythe.proto.schema.Node
 	2,  // 8: kythe.proto.pipeline.DecorationPiece.definition:type_name -> kythe.proto.pipeline.DecorationPiece.Definition
 	8,  // 9: kythe.proto.pipeline.DecorationPiece.diagnostic:type_name -> kythe.proto.common.Diagnostic
-	3,  // 10: kythe.proto.pipeline.DecorationPiece.Definition.node:type_name -> kythe.proto.VName
-	5,  // 11: kythe.proto.pipeline.DecorationPiece.Definition.definition:type_name -> kythe.proto.serving.ExpandedAnchor
-	12, // [12:12] is the sub-list for method output_type
-	12, // [12:12] is the sub-list for method input_type
-	12, // [12:12] is the sub-list for extension type_name
-	12, // [12:12] is the sub-list for extension extendee
-	0,  // [0:12] is the sub-list for field type_name
+	9,  // 10: kythe.proto.pipeline.DecorationPiece.target_override:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetOverride
+	3,  // 11: kythe.proto.pipeline.DecorationPiece.Definition.node:type_name -> kythe.proto.VName
+	5,  // 12: kythe.proto.pipeline.DecorationPiece.Definition.definition:type_name -> kythe.proto.serving.ExpandedAnchor
+	13, // [13:13] is the sub-list for method output_type
+	13, // [13:13] is the sub-list for method input_type
+	13, // [13:13] is the sub-list for extension type_name
+	13, // [13:13] is the sub-list for extension extendee
+	0,  // [0:13] is the sub-list for field type_name
 }
 
 func init() { file_kythe_proto_pipeline_proto_init() }
@@ -483,6 +509,7 @@ func file_kythe_proto_pipeline_proto_init() {
 		(*DecorationPiece_Node)(nil),
 		(*DecorationPiece_Definition_)(nil),
 		(*DecorationPiece_Diagnostic)(nil),
+		(*DecorationPiece_TargetOverride)(nil),
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
diff --git a/kythe/proto/xref_serving.proto b/kythe/proto/xref_serving.proto
index a3cf935d6..4f6860a9e 100644
--- a/kythe/proto/xref_serving.proto
+++ b/kythe/proto/xref_serving.proto
@@ -88,17 +88,12 @@ message FileDecorations {
   //
   // Columnar key: 20-target-kind-override
   message TargetOverride {
-    enum Kind {
-      UNKNOWN = 0;
-      OVERRIDES = 1;
-      EXTENDS = 2;
-    }
-
     // File decorations target node marked as overridden.
     kythe.proto.VName overridden = 1;
-    Kind kind = 2;
+    kythe.proto.serving.FileDecorations.Override.Kind kind = 2;
     // Node that overrides the file decoration target node.
     kythe.proto.VName overriding = 3;
+    kythe.proto.serving.ExpandedAnchor overriding_definition = 4;
   }
 
   // File decorations target node.
diff --git a/kythe/proto/xref_serving_go_proto/xref_serving.pb.go b/kythe/proto/xref_serving_go_proto/xref_serving.pb.go
index eef3d672b..b3b66a02b 100644
--- a/kythe/proto/xref_serving_go_proto/xref_serving.pb.go
+++ b/kythe/proto/xref_serving_go_proto/xref_serving.pb.go
@@ -29,55 +29,6 @@ const (
 // of the legacy proto package is being used.
 const _ = proto.ProtoPackageIsVersion4
 
-type FileDecorations_TargetOverride_Kind int32
-
-const (
-	FileDecorations_TargetOverride_UNKNOWN   FileDecorations_TargetOverride_Kind = 0
-	FileDecorations_TargetOverride_OVERRIDES FileDecorations_TargetOverride_Kind = 1
-	FileDecorations_TargetOverride_EXTENDS   FileDecorations_TargetOverride_Kind = 2
-)
-
-// Enum value maps for FileDecorations_TargetOverride_Kind.
-var (
-	FileDecorations_TargetOverride_Kind_name = map[int32]string{
-		0: "UNKNOWN",
-		1: "OVERRIDES",
-		2: "EXTENDS",
-	}
-	FileDecorations_TargetOverride_Kind_value = map[string]int32{
-		"UNKNOWN":   0,
-		"OVERRIDES": 1,
-		"EXTENDS":   2,
-	}
-)
-
-func (x FileDecorations_TargetOverride_Kind) Enum() *FileDecorations_TargetOverride_Kind {
-	p := new(FileDecorations_TargetOverride_Kind)
-	*p = x
-	return p
-}
-
-func (x FileDecorations_TargetOverride_Kind) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (FileDecorations_TargetOverride_Kind) Descriptor() protoreflect.EnumDescriptor {
-	return file_kythe_proto_xref_serving_proto_enumTypes[0].Descriptor()
-}
-
-func (FileDecorations_TargetOverride_Kind) Type() protoreflect.EnumType {
-	return &file_kythe_proto_xref_serving_proto_enumTypes[0]
-}
-
-func (x FileDecorations_TargetOverride_Kind) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use FileDecorations_TargetOverride_Kind.Descriptor instead.
-func (FileDecorations_TargetOverride_Kind) EnumDescriptor() ([]byte, []int) {
-	return file_kythe_proto_xref_serving_proto_rawDescGZIP(), []int{0, 3, 0}
-}
-
 type CrossReferences_Callsite_Kind int32
 
 const (
@@ -111,11 +62,11 @@ func (x CrossReferences_Callsite_Kind) String() string {
 }
 
 func (CrossReferences_Callsite_Kind) Descriptor() protoreflect.EnumDescriptor {
-	return file_kythe_proto_xref_serving_proto_enumTypes[1].Descriptor()
+	return file_kythe_proto_xref_serving_proto_enumTypes[0].Descriptor()
 }
 
 func (CrossReferences_Callsite_Kind) Type() protoreflect.EnumType {
-	return &file_kythe_proto_xref_serving_proto_enumTypes[1]
+	return &file_kythe_proto_xref_serving_proto_enumTypes[0]
 }
 
 func (x CrossReferences_Callsite_Kind) Number() protoreflect.EnumNumber {
@@ -698,9 +649,10 @@ type FileDecorations_TargetOverride struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Overridden *storage_go_proto.VName             `protobuf:"bytes,1,opt,name=overridden,proto3" json:"overridden,omitempty"`
-	Kind       FileDecorations_TargetOverride_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=kythe.proto.serving.xrefs.FileDecorations_TargetOverride_Kind" json:"kind,omitempty"`
-	Overriding *storage_go_proto.VName             `protobuf:"bytes,3,opt,name=overriding,proto3" json:"overriding,omitempty"`
+	Overridden           *storage_go_proto.VName                        `protobuf:"bytes,1,opt,name=overridden,proto3" json:"overridden,omitempty"`
+	Kind                 serving_go_proto.FileDecorations_Override_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=kythe.proto.serving.FileDecorations_Override_Kind" json:"kind,omitempty"`
+	Overriding           *storage_go_proto.VName                        `protobuf:"bytes,3,opt,name=overriding,proto3" json:"overriding,omitempty"`
+	OverridingDefinition *serving_go_proto.ExpandedAnchor               `protobuf:"bytes,4,opt,name=overriding_definition,json=overridingDefinition,proto3" json:"overriding_definition,omitempty"`
 }
 
 func (x *FileDecorations_TargetOverride) Reset() {
@@ -742,11 +694,11 @@ func (x *FileDecorations_TargetOverride) GetOverridden() *storage_go_proto.VName
 	return nil
 }
 
-func (x *FileDecorations_TargetOverride) GetKind() FileDecorations_TargetOverride_Kind {
+func (x *FileDecorations_TargetOverride) GetKind() serving_go_proto.FileDecorations_Override_Kind {
 	if x != nil {
 		return x.Kind
 	}
-	return FileDecorations_TargetOverride_UNKNOWN
+	return serving_go_proto.FileDecorations_Override_OVERRIDES
 }
 
 func (x *FileDecorations_TargetOverride) GetOverriding() *storage_go_proto.VName {
@@ -756,6 +708,13 @@ func (x *FileDecorations_TargetOverride) GetOverriding() *storage_go_proto.VName
 	return nil
 }
 
+func (x *FileDecorations_TargetOverride) GetOverridingDefinition() *serving_go_proto.ExpandedAnchor {
+	if x != nil {
+		return x.OverridingDefinition
+	}
+	return nil
+}
+
 type FileDecorations_TargetNode struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1503,7 +1462,7 @@ var file_kythe_proto_xref_serving_proto_rawDesc = []byte{
 	0x19, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x65, 0x72,
 	0x76, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x6b, 0x79, 0x74, 0x68,
 	0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x0f, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf4, 0x0f, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65,
 	0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x69, 0x6c,
 	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c,
@@ -1582,174 +1541,176 @@ var file_kythe_proto_xref_serving_proto_rawDesc = []byte{
 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67,
 	0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
 	0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43,
-	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xfd, 0x01,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0x9a, 0x02,
 	0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
 	0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69,
-	0x64, 0x64, 0x65, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x46,
-	0x69, 0x6c, 0x65, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54,
-	0x61, 0x72, 0x67, 0x65, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x2e, 0x4b, 0x69,
-	0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x76, 0x65, 0x72,
-	0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b,
-	0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65,
-	0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x04,
-	0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
-	0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45, 0x53, 0x10, 0x01,
-	0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x53, 0x10, 0x02, 0x1a, 0x3a, 0x0a,
-	0x0a, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x6e,
-	0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6b, 0x79, 0x74, 0x68,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e,
-	0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x72, 0x0a, 0x10, 0x54, 0x61, 0x72,
-	0x67, 0x65, 0x74, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a,
-	0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
-	0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d,
-	0x65, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x64, 0x65, 0x66,
-	0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
-	0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d,
-	0x65, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x55, 0x0a,
-	0x12, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61,
-	0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x81, 0x01, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
-	0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
-	0x65, 0x12, 0x45, 0x0a, 0x0d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61,
-	0x72, 0x6b, 0x65, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b,
-	0x65, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x4c, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x67,
-	0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x3e, 0x0a, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f,
-	0x73, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6b, 0x79, 0x74,
-	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
-	0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67,
-	0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22,
-	0xcc, 0x0e, 0x0a, 0x0f, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
-	0x63, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
-	0x48, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30,
+	0x64, 0x64, 0x65, 0x6e, 0x12, 0x46, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0e, 0x32, 0x32, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x63,
+	0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+	0x65, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x0a,
+	0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56,
+	0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67,
+	0x12, 0x58, 0x0a, 0x15, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64,
+	0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e,
+	0x63, 0x68, 0x6f, 0x72, 0x52, 0x14, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67,
+	0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3a, 0x0a, 0x0a, 0x54, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
+	0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x72, 0x0a, 0x10, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
+	0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74,
+	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06,
+	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74,
+	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a,
+	0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x55, 0x0a, 0x12, 0x44, 0x65,
+	0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65,
+	0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x1a, 0x81, 0x01, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x2e,
+	0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56,
+	0x4e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x45,
+	0x0a, 0x0d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65,
+	0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x4c, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73,
+	0x74, 0x69, 0x63, 0x12, 0x3e, 0x0a, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69,
+	0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x61,
+	0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73,
+	0x74, 0x69, 0x63, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xcc, 0x0e, 0x0a,
+	0x0f, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
+	0x12, 0x2a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56,
+	0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x05,
+	0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6b, 0x79,
+	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
+	0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66,
+	0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x48, 0x00, 0x52,
+	0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x54, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+	0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6b, 0x79, 0x74, 0x68,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e,
+	0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72,
+	0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48,
+	0x00, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x08,
+	0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33,
 	0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72,
 	0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73,
-	0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
-	0x48, 0x00, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x54, 0x0a, 0x09, 0x72, 0x65, 0x66,
-	0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6b,
-	0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
-	0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65,
-	0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
-	0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12,
-	0x51, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x33, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72,
-	0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65,
-	0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43,
-	0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x43,
-	0x61, 0x6c, 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12,
-	0x51, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x33, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72,
-	0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x61,
-	0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69,
-	0x74, 0x65, 0x12, 0x5b, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f,
-	0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78,
-	0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
-	0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65,
-	0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12,
-	0x64, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
-	0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78,
-	0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
-	0x6e, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
-	0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e,
-	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xaf, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
-	0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
-	0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65,
-	0x6d, 0x61, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a,
-	0x0d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x64,
-	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x77, 0x69,
-	0x74, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x6d, 0x65,
-	0x72, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x1a, 0xb8, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65,
-	0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x5f, 0x6b,
-	0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6b, 0x79, 0x74, 0x68,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45,
-	0x64, 0x67, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x4b, 0x69, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f,
-	0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65,
-	0x6e, 0x65, 0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79,
-	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
-	0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72,
-	0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69,
-	0x6e, 0x64, 0x1a, 0xd2, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x26, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
-	0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d,
-	0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6b, 0x79, 0x74, 0x68, 0x65,
-	0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6b, 0x79,
-	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
-	0x2e, 0x45, 0x64, 0x67, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x79, 0x74,
-	0x68, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69,
-	0x63, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b,
-	0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f,
-	0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6f, 0x72,
-	0x64, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x42,
-	0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xbc, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6c, 0x6c,
-	0x65, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3f,
-	0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41,
-	0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x45, 0x0a, 0x0d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b,
-	0x65, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64,
-	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0xf4, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x6c, 0x6c, 0x73,
-	0x69, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12,
-	0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64,
-	0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x12, 0x4c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38,
+	0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x4b, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x31, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73,
+	0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x6c, 0x6c,
+	0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x08,
+	0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33,
 	0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72,
 	0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73,
 	0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x73,
-	0x69, 0x74, 0x65, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x2d,
-	0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
-	0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12,
-	0x0c, 0x0a, 0x08, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45, 0x10, 0x02, 0x1a, 0x3b, 0x0a,
-	0x0b, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x04,
+	0x69, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65, 0x12,
+	0x5b, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66,
+	0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x73, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52,
+	0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x64, 0x0a, 0x0f,
+	0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x78, 0x72, 0x65, 0x66,
+	0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x73, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x48, 0x00, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
+	0x6f, 0x6e, 0x1a, 0xaf, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2c, 0x0a, 0x04,
 	0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6b, 0x79, 0x74,
 	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e,
-	0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x79, 0x0a, 0x0e, 0x4e, 0x6f,
-	0x64, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04,
+	0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x6d, 0x61,
+	0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x12, 0x31, 0x0a, 0x0a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x6d, 0x65, 0x72, 0x67, 0x65,
+	0x57, 0x69, 0x74, 0x68, 0x1a, 0xb8, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+	0x63, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x64, 0x67, 0x65,
+	0x4b, 0x69, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x4b, 0x69, 0x6e,
+	0x64, 0x12, 0x23, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6b, 0x69, 0x6e,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72,
+	0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45,
+	0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a,
+	0xd2, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04,
 	0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74,
 	0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04,
-	0x6e, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70,
-	0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x38,
-	0x0a, 0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
-	0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x5a, 0x15, 0x78, 0x72, 0x65, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f,
-	0x67, 0x6f, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6e, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x5f, 0x6b, 0x69,
+	0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x64,
+	0x67, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x4b,
+	0x69, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6b,
+	0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x67, 0x65, 0x6e,
+	0x65, 0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x69,
+	0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x69, 0x6e,
+	0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x42, 0x06, 0x0a, 0x04,
+	0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xbc, 0x01, 0x0a, 0x06, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12,
+	0x2a, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e,
+	0x61, 0x6d, 0x65, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x08, 0x6c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
+	0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76,
+	0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63, 0x68,
+	0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x0d,
+	0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x53, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x1a, 0xf4, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65,
+	0x12, 0x2a, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56,
+	0x4e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x08,
+	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23,
+	0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72,
+	0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x41, 0x6e, 0x63,
+	0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a,
+	0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x6b, 0x79,
+	0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
+	0x67, 0x2e, 0x78, 0x72, 0x65, 0x66, 0x73, 0x2e, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x52, 0x65, 0x66,
+	0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x69, 0x74, 0x65,
+	0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x2d, 0x0a, 0x04, 0x4b,
+	0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
+	0x12, 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
+	0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45, 0x10, 0x02, 0x1a, 0x3b, 0x0a, 0x0b, 0x52, 0x65,
+	0x6c, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x64,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x6f, 0x64,
+	0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x79, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x44,
+	0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x04, 0x6e, 0x6f, 0x64,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64,
+	0x65, 0x12, 0x3f, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64,
+	0x65, 0x64, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x38, 0x0a, 0x1f, 0x63,
+	0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
+	0x6c, 0x73, 0x2e, 0x6b, 0x79, 0x74, 0x68, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x15,
+	0x78, 0x72, 0x65, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x67, 0x6f, 0x5f,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1764,88 +1725,89 @@ func file_kythe_proto_xref_serving_proto_rawDescGZIP() []byte {
 	return file_kythe_proto_xref_serving_proto_rawDescData
 }
 
-var file_kythe_proto_xref_serving_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_kythe_proto_xref_serving_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
 var file_kythe_proto_xref_serving_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
 var file_kythe_proto_xref_serving_proto_goTypes = []interface{}{
-	(FileDecorations_TargetOverride_Kind)(0),   // 0: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.Kind
-	(CrossReferences_Callsite_Kind)(0),         // 1: kythe.proto.serving.xrefs.CrossReferences.Callsite.Kind
-	(*FileDecorations)(nil),                    // 2: kythe.proto.serving.xrefs.FileDecorations
-	(*CrossReferences)(nil),                    // 3: kythe.proto.serving.xrefs.CrossReferences
-	(*FileDecorations_Index)(nil),              // 4: kythe.proto.serving.xrefs.FileDecorations.Index
-	(*FileDecorations_Text)(nil),               // 5: kythe.proto.serving.xrefs.FileDecorations.Text
-	(*FileDecorations_Target)(nil),             // 6: kythe.proto.serving.xrefs.FileDecorations.Target
-	(*FileDecorations_TargetOverride)(nil),     // 7: kythe.proto.serving.xrefs.FileDecorations.TargetOverride
-	(*FileDecorations_TargetNode)(nil),         // 8: kythe.proto.serving.xrefs.FileDecorations.TargetNode
-	(*FileDecorations_TargetDefinition)(nil),   // 9: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition
-	(*FileDecorations_DefinitionLocation)(nil), // 10: kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation
-	(*FileDecorations_Override)(nil),           // 11: kythe.proto.serving.xrefs.FileDecorations.Override
-	(*FileDecorations_Diagnostic)(nil),         // 12: kythe.proto.serving.xrefs.FileDecorations.Diagnostic
-	(*CrossReferences_Index)(nil),              // 13: kythe.proto.serving.xrefs.CrossReferences.Index
-	(*CrossReferences_Reference)(nil),          // 14: kythe.proto.serving.xrefs.CrossReferences.Reference
-	(*CrossReferences_Relation)(nil),           // 15: kythe.proto.serving.xrefs.CrossReferences.Relation
-	(*CrossReferences_Caller)(nil),             // 16: kythe.proto.serving.xrefs.CrossReferences.Caller
-	(*CrossReferences_Callsite)(nil),           // 17: kythe.proto.serving.xrefs.CrossReferences.Callsite
-	(*CrossReferences_RelatedNode)(nil),        // 18: kythe.proto.serving.xrefs.CrossReferences.RelatedNode
-	(*CrossReferences_NodeDefinition)(nil),     // 19: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition
-	(*storage_go_proto.VName)(nil),             // 20: kythe.proto.VName
-	(schema_go_proto.EdgeKind)(0),              // 21: kythe.proto.schema.EdgeKind
-	(*schema_go_proto.Node)(nil),               // 22: kythe.proto.schema.Node
-	(*serving_go_proto.ExpandedAnchor)(nil),    // 23: kythe.proto.serving.ExpandedAnchor
-	(*common_go_proto.MarkedSource)(nil),       // 24: kythe.proto.common.MarkedSource
-	(*common_go_proto.Diagnostic)(nil),         // 25: kythe.proto.common.Diagnostic
+	(CrossReferences_Callsite_Kind)(0),                  // 0: kythe.proto.serving.xrefs.CrossReferences.Callsite.Kind
+	(*FileDecorations)(nil),                             // 1: kythe.proto.serving.xrefs.FileDecorations
+	(*CrossReferences)(nil),                             // 2: kythe.proto.serving.xrefs.CrossReferences
+	(*FileDecorations_Index)(nil),                       // 3: kythe.proto.serving.xrefs.FileDecorations.Index
+	(*FileDecorations_Text)(nil),                        // 4: kythe.proto.serving.xrefs.FileDecorations.Text
+	(*FileDecorations_Target)(nil),                      // 5: kythe.proto.serving.xrefs.FileDecorations.Target
+	(*FileDecorations_TargetOverride)(nil),              // 6: kythe.proto.serving.xrefs.FileDecorations.TargetOverride
+	(*FileDecorations_TargetNode)(nil),                  // 7: kythe.proto.serving.xrefs.FileDecorations.TargetNode
+	(*FileDecorations_TargetDefinition)(nil),            // 8: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition
+	(*FileDecorations_DefinitionLocation)(nil),          // 9: kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation
+	(*FileDecorations_Override)(nil),                    // 10: kythe.proto.serving.xrefs.FileDecorations.Override
+	(*FileDecorations_Diagnostic)(nil),                  // 11: kythe.proto.serving.xrefs.FileDecorations.Diagnostic
+	(*CrossReferences_Index)(nil),                       // 12: kythe.proto.serving.xrefs.CrossReferences.Index
+	(*CrossReferences_Reference)(nil),                   // 13: kythe.proto.serving.xrefs.CrossReferences.Reference
+	(*CrossReferences_Relation)(nil),                    // 14: kythe.proto.serving.xrefs.CrossReferences.Relation
+	(*CrossReferences_Caller)(nil),                      // 15: kythe.proto.serving.xrefs.CrossReferences.Caller
+	(*CrossReferences_Callsite)(nil),                    // 16: kythe.proto.serving.xrefs.CrossReferences.Callsite
+	(*CrossReferences_RelatedNode)(nil),                 // 17: kythe.proto.serving.xrefs.CrossReferences.RelatedNode
+	(*CrossReferences_NodeDefinition)(nil),              // 18: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition
+	(*storage_go_proto.VName)(nil),                      // 19: kythe.proto.VName
+	(schema_go_proto.EdgeKind)(0),                       // 20: kythe.proto.schema.EdgeKind
+	(serving_go_proto.FileDecorations_Override_Kind)(0), // 21: kythe.proto.serving.FileDecorations.Override.Kind
+	(*serving_go_proto.ExpandedAnchor)(nil),             // 22: kythe.proto.serving.ExpandedAnchor
+	(*schema_go_proto.Node)(nil),                        // 23: kythe.proto.schema.Node
+	(*common_go_proto.MarkedSource)(nil),                // 24: kythe.proto.common.MarkedSource
+	(*common_go_proto.Diagnostic)(nil),                  // 25: kythe.proto.common.Diagnostic
 }
 var file_kythe_proto_xref_serving_proto_depIdxs = []int32{
-	20, // 0: kythe.proto.serving.xrefs.FileDecorations.file:type_name -> kythe.proto.VName
-	4,  // 1: kythe.proto.serving.xrefs.FileDecorations.index:type_name -> kythe.proto.serving.xrefs.FileDecorations.Index
-	5,  // 2: kythe.proto.serving.xrefs.FileDecorations.text:type_name -> kythe.proto.serving.xrefs.FileDecorations.Text
-	6,  // 3: kythe.proto.serving.xrefs.FileDecorations.target:type_name -> kythe.proto.serving.xrefs.FileDecorations.Target
-	7,  // 4: kythe.proto.serving.xrefs.FileDecorations.target_override:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetOverride
-	8,  // 5: kythe.proto.serving.xrefs.FileDecorations.target_node:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetNode
-	9,  // 6: kythe.proto.serving.xrefs.FileDecorations.target_definition:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetDefinition
-	10, // 7: kythe.proto.serving.xrefs.FileDecorations.definition_location:type_name -> kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation
-	11, // 8: kythe.proto.serving.xrefs.FileDecorations.override:type_name -> kythe.proto.serving.xrefs.FileDecorations.Override
-	12, // 9: kythe.proto.serving.xrefs.FileDecorations.diagnostic:type_name -> kythe.proto.serving.xrefs.FileDecorations.Diagnostic
-	20, // 10: kythe.proto.serving.xrefs.CrossReferences.source:type_name -> kythe.proto.VName
-	13, // 11: kythe.proto.serving.xrefs.CrossReferences.index:type_name -> kythe.proto.serving.xrefs.CrossReferences.Index
-	14, // 12: kythe.proto.serving.xrefs.CrossReferences.reference:type_name -> kythe.proto.serving.xrefs.CrossReferences.Reference
-	15, // 13: kythe.proto.serving.xrefs.CrossReferences.relation:type_name -> kythe.proto.serving.xrefs.CrossReferences.Relation
-	16, // 14: kythe.proto.serving.xrefs.CrossReferences.caller:type_name -> kythe.proto.serving.xrefs.CrossReferences.Caller
-	17, // 15: kythe.proto.serving.xrefs.CrossReferences.callsite:type_name -> kythe.proto.serving.xrefs.CrossReferences.Callsite
-	18, // 16: kythe.proto.serving.xrefs.CrossReferences.related_node:type_name -> kythe.proto.serving.xrefs.CrossReferences.RelatedNode
-	19, // 17: kythe.proto.serving.xrefs.CrossReferences.node_definition:type_name -> kythe.proto.serving.xrefs.CrossReferences.NodeDefinition
-	21, // 18: kythe.proto.serving.xrefs.FileDecorations.Target.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
-	20, // 19: kythe.proto.serving.xrefs.FileDecorations.Target.target:type_name -> kythe.proto.VName
-	20, // 20: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.overridden:type_name -> kythe.proto.VName
-	0,  // 21: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.kind:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetOverride.Kind
-	20, // 22: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.overriding:type_name -> kythe.proto.VName
-	22, // 23: kythe.proto.serving.xrefs.FileDecorations.TargetNode.node:type_name -> kythe.proto.schema.Node
-	20, // 24: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition.target:type_name -> kythe.proto.VName
-	20, // 25: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition.definition:type_name -> kythe.proto.VName
-	23, // 26: kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation.location:type_name -> kythe.proto.serving.ExpandedAnchor
-	20, // 27: kythe.proto.serving.xrefs.FileDecorations.Override.override:type_name -> kythe.proto.VName
-	24, // 28: kythe.proto.serving.xrefs.FileDecorations.Override.marked_source:type_name -> kythe.proto.common.MarkedSource
-	25, // 29: kythe.proto.serving.xrefs.FileDecorations.Diagnostic.diagnostic:type_name -> kythe.proto.common.Diagnostic
-	22, // 30: kythe.proto.serving.xrefs.CrossReferences.Index.node:type_name -> kythe.proto.schema.Node
-	24, // 31: kythe.proto.serving.xrefs.CrossReferences.Index.marked_source:type_name -> kythe.proto.common.MarkedSource
-	20, // 32: kythe.proto.serving.xrefs.CrossReferences.Index.merge_with:type_name -> kythe.proto.VName
-	21, // 33: kythe.proto.serving.xrefs.CrossReferences.Reference.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
-	23, // 34: kythe.proto.serving.xrefs.CrossReferences.Reference.location:type_name -> kythe.proto.serving.ExpandedAnchor
-	20, // 35: kythe.proto.serving.xrefs.CrossReferences.Relation.node:type_name -> kythe.proto.VName
-	21, // 36: kythe.proto.serving.xrefs.CrossReferences.Relation.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
-	20, // 37: kythe.proto.serving.xrefs.CrossReferences.Caller.caller:type_name -> kythe.proto.VName
-	23, // 38: kythe.proto.serving.xrefs.CrossReferences.Caller.location:type_name -> kythe.proto.serving.ExpandedAnchor
-	24, // 39: kythe.proto.serving.xrefs.CrossReferences.Caller.marked_source:type_name -> kythe.proto.common.MarkedSource
-	20, // 40: kythe.proto.serving.xrefs.CrossReferences.Callsite.caller:type_name -> kythe.proto.VName
-	23, // 41: kythe.proto.serving.xrefs.CrossReferences.Callsite.location:type_name -> kythe.proto.serving.ExpandedAnchor
-	1,  // 42: kythe.proto.serving.xrefs.CrossReferences.Callsite.kind:type_name -> kythe.proto.serving.xrefs.CrossReferences.Callsite.Kind
-	22, // 43: kythe.proto.serving.xrefs.CrossReferences.RelatedNode.node:type_name -> kythe.proto.schema.Node
-	20, // 44: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition.node:type_name -> kythe.proto.VName
-	23, // 45: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition.location:type_name -> kythe.proto.serving.ExpandedAnchor
-	46, // [46:46] is the sub-list for method output_type
-	46, // [46:46] is the sub-list for method input_type
-	46, // [46:46] is the sub-list for extension type_name
-	46, // [46:46] is the sub-list for extension extendee
-	0,  // [0:46] is the sub-list for field type_name
+	19, // 0: kythe.proto.serving.xrefs.FileDecorations.file:type_name -> kythe.proto.VName
+	3,  // 1: kythe.proto.serving.xrefs.FileDecorations.index:type_name -> kythe.proto.serving.xrefs.FileDecorations.Index
+	4,  // 2: kythe.proto.serving.xrefs.FileDecorations.text:type_name -> kythe.proto.serving.xrefs.FileDecorations.Text
+	5,  // 3: kythe.proto.serving.xrefs.FileDecorations.target:type_name -> kythe.proto.serving.xrefs.FileDecorations.Target
+	6,  // 4: kythe.proto.serving.xrefs.FileDecorations.target_override:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetOverride
+	7,  // 5: kythe.proto.serving.xrefs.FileDecorations.target_node:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetNode
+	8,  // 6: kythe.proto.serving.xrefs.FileDecorations.target_definition:type_name -> kythe.proto.serving.xrefs.FileDecorations.TargetDefinition
+	9,  // 7: kythe.proto.serving.xrefs.FileDecorations.definition_location:type_name -> kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation
+	10, // 8: kythe.proto.serving.xrefs.FileDecorations.override:type_name -> kythe.proto.serving.xrefs.FileDecorations.Override
+	11, // 9: kythe.proto.serving.xrefs.FileDecorations.diagnostic:type_name -> kythe.proto.serving.xrefs.FileDecorations.Diagnostic
+	19, // 10: kythe.proto.serving.xrefs.CrossReferences.source:type_name -> kythe.proto.VName
+	12, // 11: kythe.proto.serving.xrefs.CrossReferences.index:type_name -> kythe.proto.serving.xrefs.CrossReferences.Index
+	13, // 12: kythe.proto.serving.xrefs.CrossReferences.reference:type_name -> kythe.proto.serving.xrefs.CrossReferences.Reference
+	14, // 13: kythe.proto.serving.xrefs.CrossReferences.relation:type_name -> kythe.proto.serving.xrefs.CrossReferences.Relation
+	15, // 14: kythe.proto.serving.xrefs.CrossReferences.caller:type_name -> kythe.proto.serving.xrefs.CrossReferences.Caller
+	16, // 15: kythe.proto.serving.xrefs.CrossReferences.callsite:type_name -> kythe.proto.serving.xrefs.CrossReferences.Callsite
+	17, // 16: kythe.proto.serving.xrefs.CrossReferences.related_node:type_name -> kythe.proto.serving.xrefs.CrossReferences.RelatedNode
+	18, // 17: kythe.proto.serving.xrefs.CrossReferences.node_definition:type_name -> kythe.proto.serving.xrefs.CrossReferences.NodeDefinition
+	20, // 18: kythe.proto.serving.xrefs.FileDecorations.Target.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
+	19, // 19: kythe.proto.serving.xrefs.FileDecorations.Target.target:type_name -> kythe.proto.VName
+	19, // 20: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.overridden:type_name -> kythe.proto.VName
+	21, // 21: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.kind:type_name -> kythe.proto.serving.FileDecorations.Override.Kind
+	19, // 22: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.overriding:type_name -> kythe.proto.VName
+	22, // 23: kythe.proto.serving.xrefs.FileDecorations.TargetOverride.overriding_definition:type_name -> kythe.proto.serving.ExpandedAnchor
+	23, // 24: kythe.proto.serving.xrefs.FileDecorations.TargetNode.node:type_name -> kythe.proto.schema.Node
+	19, // 25: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition.target:type_name -> kythe.proto.VName
+	19, // 26: kythe.proto.serving.xrefs.FileDecorations.TargetDefinition.definition:type_name -> kythe.proto.VName
+	22, // 27: kythe.proto.serving.xrefs.FileDecorations.DefinitionLocation.location:type_name -> kythe.proto.serving.ExpandedAnchor
+	19, // 28: kythe.proto.serving.xrefs.FileDecorations.Override.override:type_name -> kythe.proto.VName
+	24, // 29: kythe.proto.serving.xrefs.FileDecorations.Override.marked_source:type_name -> kythe.proto.common.MarkedSource
+	25, // 30: kythe.proto.serving.xrefs.FileDecorations.Diagnostic.diagnostic:type_name -> kythe.proto.common.Diagnostic
+	23, // 31: kythe.proto.serving.xrefs.CrossReferences.Index.node:type_name -> kythe.proto.schema.Node
+	24, // 32: kythe.proto.serving.xrefs.CrossReferences.Index.marked_source:type_name -> kythe.proto.common.MarkedSource
+	19, // 33: kythe.proto.serving.xrefs.CrossReferences.Index.merge_with:type_name -> kythe.proto.VName
+	20, // 34: kythe.proto.serving.xrefs.CrossReferences.Reference.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
+	22, // 35: kythe.proto.serving.xrefs.CrossReferences.Reference.location:type_name -> kythe.proto.serving.ExpandedAnchor
+	19, // 36: kythe.proto.serving.xrefs.CrossReferences.Relation.node:type_name -> kythe.proto.VName
+	20, // 37: kythe.proto.serving.xrefs.CrossReferences.Relation.kythe_kind:type_name -> kythe.proto.schema.EdgeKind
+	19, // 38: kythe.proto.serving.xrefs.CrossReferences.Caller.caller:type_name -> kythe.proto.VName
+	22, // 39: kythe.proto.serving.xrefs.CrossReferences.Caller.location:type_name -> kythe.proto.serving.ExpandedAnchor
+	24, // 40: kythe.proto.serving.xrefs.CrossReferences.Caller.marked_source:type_name -> kythe.proto.common.MarkedSource
+	19, // 41: kythe.proto.serving.xrefs.CrossReferences.Callsite.caller:type_name -> kythe.proto.VName
+	22, // 42: kythe.proto.serving.xrefs.CrossReferences.Callsite.location:type_name -> kythe.proto.serving.ExpandedAnchor
+	0,  // 43: kythe.proto.serving.xrefs.CrossReferences.Callsite.kind:type_name -> kythe.proto.serving.xrefs.CrossReferences.Callsite.Kind
+	23, // 44: kythe.proto.serving.xrefs.CrossReferences.RelatedNode.node:type_name -> kythe.proto.schema.Node
+	19, // 45: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition.node:type_name -> kythe.proto.VName
+	22, // 46: kythe.proto.serving.xrefs.CrossReferences.NodeDefinition.location:type_name -> kythe.proto.serving.ExpandedAnchor
+	47, // [47:47] is the sub-list for method output_type
+	47, // [47:47] is the sub-list for method input_type
+	47, // [47:47] is the sub-list for extension type_name
+	47, // [47:47] is the sub-list for extension extendee
+	0,  // [0:47] is the sub-list for field type_name
 }
 
 func init() { file_kythe_proto_xref_serving_proto_init() }
@@ -2108,7 +2070,7 @@ func file_kythe_proto_xref_serving_proto_init() {
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_kythe_proto_xref_serving_proto_rawDesc,
-			NumEnums:      2,
+			NumEnums:      1,
 			NumMessages:   18,
 			NumExtensions: 0,
 			NumServices:   0,


Test patch:
diff --git a/kythe/go/serving/pipeline/beam_test.go b/kythe/go/serving/pipeline/beam_test.go
index cc63a63bb..4de8c9405 100644
--- a/kythe/go/serving/pipeline/beam_test.go
+++ b/kythe/go/serving/pipeline/beam_test.go
@@ -451,6 +451,119 @@ func TestDecorations_targetDefinition(t *testing.T) {
 	}
 }
 
+func TestDecorations_overrides(t *testing.T) {
+	testNodes := []*scpb.Node{{
+		Source: &spb.VName{Path: "path"},
+		Kind:   &scpb.Node_KytheKind{scpb.NodeKind_FILE},
+		Fact: []*scpb.Fact{{
+			Name:  &scpb.Fact_KytheName{scpb.FactName_TEXT},
+			Value: []byte("some text\n"),
+		}},
+	}, {
+		Source: &spb.VName{Path: "path2", Signature: "def1"},
+		Kind:   &scpb.Node_KytheKind{scpb.NodeKind_ANCHOR},
+		Fact: []*scpb.Fact{{
+			Name:  &scpb.Fact_KytheName{scpb.FactName_LOC_START},
+			Value: []byte("5"),
+		}, {
+			Name:  &scpb.Fact_KytheName{scpb.FactName_LOC_END},
+			Value: []byte("8"),
+		}},
+		Edge: []*scpb.Edge{{
+			Kind:   &scpb.Edge_KytheKind{scpb.EdgeKind_DEFINES_BINDING},
+			Target: &spb.VName{Signature: "node1"},
+		}},
+	}, {
+		Source: &spb.VName{Path: "path2", Signature: "def2"},
+		Kind:   &scpb.Node_KytheKind{scpb.NodeKind_ANCHOR},
+		Fact: []*scpb.Fact{{
+			Name:  &scpb.Fact_KytheName{scpb.FactName_LOC_START},
+			Value: []byte("4"),
+		}, {
+			Name:  &scpb.Fact_KytheName{scpb.FactName_LOC_END},
+			Value: []byte("7"),
+		}},
+		Edge: []*scpb.Edge{{
+			Kind:   &scpb.Edge_KytheKind{scpb.EdgeKind_DEFINES_BINDING},
+			Target: &spb.VName{Signature: "node2"},
+		}},
+	}, {
+		Source: &spb.VName{Signature: "node2"},
+		Kind:   &scpb.Node_KytheKind{scpb.NodeKind_FUNCTION},
+		Edge: []*scpb.Edge{{
+			Kind:   &scpb.Edge_KytheKind{scpb.EdgeKind_OVERRIDES},
+			Target: &spb.VName{Signature: "node1"},
+		}},
+	}, {
+		Source: &spb.VName{Path: "path2"},
+		Kind:   &scpb.Node_KytheKind{scpb.NodeKind_FILE},
+		Fact: []*scpb.Fact{{
+			Name:  &scpb.Fact_KytheName{scpb.FactName_TEXT},
+			Value: []byte("some def\n"),
+		}},
+	}}
+
+	expected := []*srvpb.FileDecorations{{
+		File: &srvpb.File{Text: []byte("some def\n")},
+		Decoration: []*srvpb.FileDecorations_Decoration{{
+			Anchor:           &srvpb.RawAnchor{StartOffset: 4, EndOffset: 7},
+			Kind:             "/kythe/edge/defines/binding",
+			Target:           "kythe:#node2",
+			TargetDefinition: "kythe:?path=path2#def2",
+		}, {
+			Anchor:           &srvpb.RawAnchor{StartOffset: 5, EndOffset: 8},
+			Kind:             "/kythe/edge/defines/binding",
+			Target:           "kythe:#node1",
+			TargetDefinition: "kythe:?path=path2#def1",
+		}},
+		Target: []*srvpb.Node{{
+			Ticket: "kythe:#node2",
+			Fact:   []*cpb.Fact{{Name: "/kythe/node/kind", Value: []byte("function")}},
+		}},
+		TargetDefinitions: []*srvpb.ExpandedAnchor{{
+			Ticket: "kythe:?path=path2#def1",
+			Text:   "def",
+			Span: &cpb.Span{
+				Start: &cpb.Point{ByteOffset: 5, LineNumber: 1, ColumnOffset: 5},
+				End:   &cpb.Point{ByteOffset: 8, LineNumber: 1, ColumnOffset: 8},
+			},
+			Snippet: "some def",
+			SnippetSpan: &cpb.Span{
+				Start: &cpb.Point{LineNumber: 1},
+				End:   &cpb.Point{ByteOffset: 8, LineNumber: 1, ColumnOffset: 8},
+			},
+		}, {
+			Ticket: "kythe:?path=path2#def2",
+			Text:   " de",
+			Span: &cpb.Span{
+				Start: &cpb.Point{ByteOffset: 4, LineNumber: 1, ColumnOffset: 4},
+				End:   &cpb.Point{ByteOffset: 7, LineNumber: 1, ColumnOffset: 7},
+			},
+			Snippet: "some def",
+			SnippetSpan: &cpb.Span{
+				Start: &cpb.Point{LineNumber: 1},
+				End:   &cpb.Point{ByteOffset: 8, LineNumber: 1, ColumnOffset: 8},
+			},
+		}},
+		TargetOverride: []*srvpb.FileDecorations_Override{{
+			Overriding:           "kythe:#node2",
+			Overridden:           "kythe:#node1",
+			OverriddenDefinition: "kythe:?path=path2#def1",
+		}},
+	}, {
+		File: &srvpb.File{Text: []byte("some text\n")},
+	}}
+
+	p, s, nodes := ptest.CreateList(testNodes)
+	decor := FromNodes(s, nodes).Decorations()
+	debug.Print(s, decor)
+	passert.Equals(s, beam.DropKey(s, decor), beam.CreateList(s, expected))
+
+	if err := ptest.Run(p); err != nil {
+		t.Fatalf("Pipeline error: %+v", err)
+	}
+}
+
 func TestCrossReferences(t *testing.T) {
 	testNodes := []*scpb.Node{{
 		Source: &spb.VName{Signature: "node1"},
diff --git a/kythe/go/serving/xrefs/columnar/columnar_test.go b/kythe/go/serving/xrefs/columnar/columnar_test.go
index 5e2dc04d5..961689f39 100644
--- a/kythe/go/serving/xrefs/columnar/columnar_test.go
+++ b/kythe/go/serving/xrefs/columnar/columnar_test.go
@@ -61,7 +61,7 @@ func TestDecorationsEncodingRoundtrip(t *testing.T) {
 	}, {
 		File: file,
 		Entry: &xspb.FileDecorations_TargetOverride_{&xspb.FileDecorations_TargetOverride{
-			Kind:       xspb.FileDecorations_TargetOverride_EXTENDS,
+			Kind:       srvpb.FileDecorations_Override_EXTENDS,
 			Overridden: &spb.VName{Signature: "overridden"},
 			Overriding: &spb.VName{Signature: "overriding"},
 		}},