Repository: open-telemetry/opamp-go
Pull request #53 (2022-01-18 01:34:50)

Allow OpAMP server to request an agent restart or shutdown
* Adds ServerToAgentCommand to allow the server to request a restart or shutdown.
* Adds AcceptsRestartRequests to AgentCapabilities so that agents can indicate if they support restart.
* Adds OnCommand to the client Callbacks which is called when the server requests shutdown via the ServerToAgentCommand
* Moved client.CallbacksStruct to types.CallbacksStruct so that it could be used it in receiver_test.go without an import cycle.

linux-foundation-easycla[bot]: <a href="https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/9522512/424240089/53/#/?version=2"><img src="https://s3.amazonaws.com/cla-project-logo-prod/cla-not-signed.svg" alt="CLA Not Signed" align="left" height="28" width="328" ></a><br/><br /><ul><li><a href='https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/9522512/424240089/53/#/?version=2' target='_blank'>:x:</a> - Andy Keller The commit (f9920a92fae9be63653a353dddfb9fc5afeb7369) is not authorized under a signed CLA. <a href='https://api.easycla.lfx.linuxfoundation.org/v2/repository-provider/github/sign/9522512/424240089/53/#/?version=2' target='_blank'>Please click here to be authorized</a>. For further assistance with EasyCLA, <a href='https://jira.linuxfoundation.org/servicedesk/customer/portal/4' target='_blank'>please submit a support request ticket</a>.</li></ul>
andykellr: I was traveling and finally had a chance to refactor this PR to use a `ServerToAgentCommand`.
tigrannajaryan: > I was traveling and finally had a chance to refactor this PR to use a `ServerToAgentCommand`.

I think this is a reasonable approach. Can you please submit a PR against https://github.com/open-telemetry/opamp-spec and also make sure the change is visible/discussed in the next workgroup meeting? 
tigrannajaryan: @andykellr Please update this PR to only implement changes accepted in https://github.com/open-telemetry/opamp-spec/pull/64 for now.
andykellr: @tigrannajaryan I think this PR is ready to merge. Please let me know if any other changes are needed.

Patch:
diff --git a/client/callbacks.go b/client/callbacks.go
deleted file mode 100644
index 6e19eef..0000000
--- a/client/callbacks.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package client
-
-import (
-	"context"
-
-	"github.com/open-telemetry/opamp-go/client/types"
-	"github.com/open-telemetry/opamp-go/protobufs"
-)
-
-type CallbacksStruct struct {
-	OnConnectFunc       func()
-	OnConnectFailedFunc func(err error)
-	OnErrorFunc         func(err *protobufs.ServerErrorResponse)
-
-	OnRemoteConfigFunc func(
-		ctx context.Context,
-		remoteConfig *protobufs.AgentRemoteConfig,
-	) (effectiveConfig *protobufs.EffectiveConfig, configChanged bool, err error)
-
-	OnOpampConnectionSettingsFunc func(
-		ctx context.Context,
-		settings *protobufs.ConnectionSettings,
-	) error
-	OnOpampConnectionSettingsAcceptedFunc func(
-		settings *protobufs.ConnectionSettings,
-	)
-
-	OnOwnTelemetryConnectionSettingsFunc func(
-		ctx context.Context,
-		telemetryType types.OwnTelemetryType,
-		settings *protobufs.ConnectionSettings,
-	) error
-
-	OnOtherConnectionSettingsFunc func(
-		ctx context.Context,
-		name string,
-		settings *protobufs.ConnectionSettings,
-	) error
-
-	OnAddonsAvailableFunc       func(ctx context.Context, addons *protobufs.AddonsAvailable, syncer types.AddonSyncer) error
-	OnAgentPackageAvailableFunc func(addons *protobufs.AgentPackageAvailable, syncer types.AgentPackageSyncer) error
-}
-
-var _ types.Callbacks = (*CallbacksStruct)(nil)
-
-func (c CallbacksStruct) OnConnect() {
-	if c.OnConnectFunc != nil {
-		c.OnConnectFunc()
-	}
-}
-
-func (c CallbacksStruct) OnConnectFailed(err error) {
-	if c.OnConnectFailedFunc != nil {
-		c.OnConnectFailedFunc(err)
-	}
-}
-
-func (c CallbacksStruct) OnError(err *protobufs.ServerErrorResponse) {
-	if c.OnErrorFunc != nil {
-		c.OnErrorFunc(err)
-	}
-}
-
-func (c CallbacksStruct) OnRemoteConfig(
-	ctx context.Context,
-	remoteConfig *protobufs.AgentRemoteConfig,
-) (effectiveConfig *protobufs.EffectiveConfig, configChanged bool, err error) {
-	if c.OnRemoteConfigFunc != nil {
-		return c.OnRemoteConfigFunc(ctx, remoteConfig)
-	}
-	return nil, false, nil
-}
-
-func (c CallbacksStruct) OnOpampConnectionSettings(
-	ctx context.Context, settings *protobufs.ConnectionSettings,
-) error {
-	if c.OnOpampConnectionSettingsFunc != nil {
-		return c.OnOpampConnectionSettingsFunc(ctx, settings)
-	}
-	return nil
-}
-
-func (c CallbacksStruct) OnOpampConnectionSettingsAccepted(settings *protobufs.ConnectionSettings) {
-	if c.OnOpampConnectionSettingsAcceptedFunc != nil {
-		c.OnOpampConnectionSettingsAcceptedFunc(settings)
-	}
-}
-
-func (c CallbacksStruct) OnOwnTelemetryConnectionSettings(
-	ctx context.Context, telemetryType types.OwnTelemetryType,
-	settings *protobufs.ConnectionSettings,
-) error {
-	if c.OnOwnTelemetryConnectionSettingsFunc != nil {
-		return c.OnOwnTelemetryConnectionSettingsFunc(ctx, telemetryType, settings)
-	}
-	return nil
-}
-
-func (c CallbacksStruct) OnOtherConnectionSettings(
-	ctx context.Context, name string, settings *protobufs.ConnectionSettings,
-) error {
-	if c.OnOtherConnectionSettingsFunc != nil {
-		return c.OnOtherConnectionSettingsFunc(ctx, name, settings)
-	}
-	return nil
-}
-
-func (c CallbacksStruct) OnAddonsAvailable(
-	ctx context.Context,
-	addons *protobufs.AddonsAvailable,
-	syncer types.AddonSyncer,
-) error {
-	if c.OnAddonsAvailableFunc != nil {
-		return c.OnAddonsAvailableFunc(ctx, addons, syncer)
-	}
-	return nil
-}
-
-func (c CallbacksStruct) OnAgentPackageAvailable(
-	addons *protobufs.AgentPackageAvailable, syncer types.AgentPackageSyncer,
-) error {
-	if c.OnAgentPackageAvailableFunc != nil {
-		return c.OnAgentPackageAvailableFunc(addons, syncer)
-	}
-	return nil
-}
diff --git a/client/internal/receiver.go b/client/internal/receiver.go
index 42cda88..d88374c 100644
--- a/client/internal/receiver.go
+++ b/client/internal/receiver.go
@@ -61,6 +61,12 @@ func (r *Receiver) receiveMessage(msg *protobufs.ServerToAgent) error {
 
 func (r *Receiver) processReceivedMessage(ctx context.Context, msg *protobufs.ServerToAgent) {
 	if r.callbacks != nil {
+		// If a command message exists, other messages will be ignored
+		if msg.Command != nil {
+			r.rcvCommand(msg.Command)
+			return
+		}
+
 		reportStatus := r.rcvRemoteConfig(ctx, msg.RemoteConfig, msg.Flags)
 
 		r.rcvConnectionSettings(ctx, msg.ConnectionSettings)
@@ -168,3 +174,9 @@ func (r *Receiver) processErrorResponse(body *protobufs.ServerErrorResponse) {
 func (r *Receiver) rcvAddonsAvailable(addons *protobufs.AddonsAvailable) {
 	// TODO: implement this.
 }
+
+func (r *Receiver) rcvCommand(command *protobufs.ServerToAgentCommand) {
+	if command != nil {
+		r.callbacks.OnCommand(command)
+	}
+}
diff --git a/client/types/callbacks.go b/client/types/callbacks.go
index a51a6ba..7f91f4d 100644
--- a/client/types/callbacks.go
+++ b/client/types/callbacks.go
@@ -129,7 +129,137 @@ type Callbacks interface {
 	// syncer can be used to initiate syncing the package from the server.
 	OnAgentPackageAvailable(addons *protobufs.AgentPackageAvailable, syncer AgentPackageSyncer) error
 
+	// OnCommand is called when the server requests that the connected agent perform a command.
+	OnCommand(command *protobufs.ServerToAgentCommand) error
+
 	// For all methods that accept a context parameter the caller may cancel the
 	// context if processing takes too long. In that case the method should return
 	// as soon as possible with an error.
 }
+
+type CallbacksStruct struct {
+	OnConnectFunc       func()
+	OnConnectFailedFunc func(err error)
+	OnErrorFunc         func(err *protobufs.ServerErrorResponse)
+
+	OnRemoteConfigFunc func(
+		ctx context.Context,
+		remoteConfig *protobufs.AgentRemoteConfig,
+	) (effectiveConfig *protobufs.EffectiveConfig, configChanged bool, err error)
+
+	OnOpampConnectionSettingsFunc func(
+		ctx context.Context,
+		settings *protobufs.ConnectionSettings,
+	) error
+	OnOpampConnectionSettingsAcceptedFunc func(
+		settings *protobufs.ConnectionSettings,
+	)
+
+	OnOwnTelemetryConnectionSettingsFunc func(
+		ctx context.Context,
+		telemetryType OwnTelemetryType,
+		settings *protobufs.ConnectionSettings,
+	) error
+
+	OnOtherConnectionSettingsFunc func(
+		ctx context.Context,
+		name string,
+		settings *protobufs.ConnectionSettings,
+	) error
+
+	OnAddonsAvailableFunc       func(ctx context.Context, addons *protobufs.AddonsAvailable, syncer AddonSyncer) error
+	OnAgentPackageAvailableFunc func(addons *protobufs.AgentPackageAvailable, syncer AgentPackageSyncer) error
+
+	OnCommandFunc func(command *protobufs.ServerToAgentCommand) error
+}
+
+var _ Callbacks = (*CallbacksStruct)(nil)
+
+func (c CallbacksStruct) OnConnect() {
+	if c.OnConnectFunc != nil {
+		c.OnConnectFunc()
+	}
+}
+
+func (c CallbacksStruct) OnConnectFailed(err error) {
+	if c.OnConnectFailedFunc != nil {
+		c.OnConnectFailedFunc(err)
+	}
+}
+
+func (c CallbacksStruct) OnError(err *protobufs.ServerErrorResponse) {
+	if c.OnErrorFunc != nil {
+		c.OnErrorFunc(err)
+	}
+}
+
+func (c CallbacksStruct) OnRemoteConfig(
+	ctx context.Context,
+	remoteConfig *protobufs.AgentRemoteConfig,
+) (effectiveConfig *protobufs.EffectiveConfig, configChanged bool, err error) {
+	if c.OnRemoteConfigFunc != nil {
+		return c.OnRemoteConfigFunc(ctx, remoteConfig)
+	}
+	return nil, false, nil
+}
+
+func (c CallbacksStruct) OnOpampConnectionSettings(
+	ctx context.Context, settings *protobufs.ConnectionSettings,
+) error {
+	if c.OnOpampConnectionSettingsFunc != nil {
+		return c.OnOpampConnectionSettingsFunc(ctx, settings)
+	}
+	return nil
+}
+
+func (c CallbacksStruct) OnOpampConnectionSettingsAccepted(settings *protobufs.ConnectionSettings) {
+	if c.OnOpampConnectionSettingsAcceptedFunc != nil {
+		c.OnOpampConnectionSettingsAcceptedFunc(settings)
+	}
+}
+
+func (c CallbacksStruct) OnOwnTelemetryConnectionSettings(
+	ctx context.Context, telemetryType OwnTelemetryType,
+	settings *protobufs.ConnectionSettings,
+) error {
+	if c.OnOwnTelemetryConnectionSettingsFunc != nil {
+		return c.OnOwnTelemetryConnectionSettingsFunc(ctx, telemetryType, settings)
+	}
+	return nil
+}
+
+func (c CallbacksStruct) OnOtherConnectionSettings(
+	ctx context.Context, name string, settings *protobufs.ConnectionSettings,
+) error {
+	if c.OnOtherConnectionSettingsFunc != nil {
+		return c.OnOtherConnectionSettingsFunc(ctx, name, settings)
+	}
+	return nil
+}
+
+func (c CallbacksStruct) OnAddonsAvailable(
+	ctx context.Context,
+	addons *protobufs.AddonsAvailable,
+	syncer AddonSyncer,
+) error {
+	if c.OnAddonsAvailableFunc != nil {
+		return c.OnAddonsAvailableFunc(ctx, addons, syncer)
+	}
+	return nil
+}
+
+func (c CallbacksStruct) OnAgentPackageAvailable(
+	addons *protobufs.AgentPackageAvailable, syncer AgentPackageSyncer,
+) error {
+	if c.OnAgentPackageAvailableFunc != nil {
+		return c.OnAgentPackageAvailableFunc(addons, syncer)
+	}
+	return nil
+}
+
+func (c CallbacksStruct) OnCommand(command *protobufs.ServerToAgentCommand) error {
+	if c.OnCommandFunc != nil {
+		return c.OnCommandFunc(command)
+	}
+	return nil
+}
diff --git a/internal/examples/agent/agent/agent.go b/internal/examples/agent/agent/agent.go
index ba0889b..1023228 100644
--- a/internal/examples/agent/agent/agent.go
+++ b/internal/examples/agent/agent/agent.go
@@ -87,7 +87,7 @@ func (agent *Agent) start() error {
 		OpAMPServerURL:   "ws://127.0.0.1:4320/v1/opamp",
 		InstanceUid:      agent.instanceId.String(),
 		AgentDescription: agent.agentDescription,
-		Callbacks: client.CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnConnectFunc: func() {
 				agent.logger.Debugf("Connected to the server.")
 			},
diff --git a/internal/proto/opamp.proto b/internal/proto/opamp.proto
index a182ee3..6a07431 100644
--- a/internal/proto/opamp.proto
+++ b/internal/proto/opamp.proto
@@ -111,6 +111,11 @@ message ServerToAgent {
     // be omitted in subsequent ServerToAgent messages by setting it to
     // UnspecifiedServerCapability value.
     ServerCapabilities capabilities = 8;
+
+    // Allows the Server to instruct the agent to perform a command, e.g. RESTART. This field should not be specified
+    // with fields other than instance_uid and capabilities. If specified, other fields will be ignored and the command
+    // will be performed.
+    ServerToAgentCommand command = 10;
 }
 
 enum ServerCapabilities {
@@ -412,6 +417,17 @@ message AgentPackageAvailable {
     DownloadableFile file = 2;
 }
 
+// ServerToAgentCommand is sent from the server to the agent to request that the agent
+// perform a command.
+message ServerToAgentCommand {
+    enum CommandType {
+        // The agent should restart. This request will be ignored if the agent does not
+        // support restart.
+        Restart = 0;
+    }
+    CommandType type = 1;
+}
+
 ////////////////////////////////////////////////////////////////////////////////////
 // Status reporting
 
@@ -516,6 +532,8 @@ enum AgentCapabilities {
     // The Agent can accept connections settings for other destinations via
     // ConnectionSettingsOffers.other_connections field.
     AcceptsOtherConnectionSettings = 0x00000800;
+    // The Agent can accept restart requests.
+    AcceptsRestartCommand          = 0x00001000;
 
     // Add new capabilities here, continuing with the least significant unused bit.
 }
diff --git a/protobufs/opamp.pb.go b/protobufs/opamp.pb.go
index 034c85c..31079c1 100644
--- a/protobufs/opamp.pb.go
+++ b/protobufs/opamp.pb.go
@@ -148,6 +148,8 @@ const (
 	// The Agent can accept connections settings for other destinations via
 	// ConnectionSettingsOffers.other_connections field.
 	AgentCapabilities_AcceptsOtherConnectionSettings AgentCapabilities = 2048
+	// The Agent can accept restart requests.
+	AgentCapabilities_AcceptsRestartCommand AgentCapabilities = 4096
 )
 
 // Enum value maps for AgentCapabilities.
@@ -166,6 +168,7 @@ var (
 		512:  "ReportsOwnLogs",
 		1024: "AcceptsOpAMPConnectionSettings",
 		2048: "AcceptsOtherConnectionSettings",
+		4096: "AcceptsRestartCommand",
 	}
 	AgentCapabilities_value = map[string]int32{
 		"UnspecifiedAgentCapability":     0,
@@ -181,6 +184,7 @@ var (
 		"ReportsOwnLogs":                 512,
 		"AcceptsOpAMPConnectionSettings": 1024,
 		"AcceptsOtherConnectionSettings": 2048,
+		"AcceptsRestartCommand":          4096,
 	}
 )
 
@@ -368,6 +372,51 @@ func (ServerErrorResponse_Type) EnumDescriptor() ([]byte, []int) {
 	return file_opamp_proto_rawDescGZIP(), []int{11, 0}
 }
 
+type ServerToAgentCommand_CommandType int32
+
+const (
+	// The agent should restart. This request will be ignored if the agent does not
+	// support restart.
+	ServerToAgentCommand_Restart ServerToAgentCommand_CommandType = 0
+)
+
+// Enum value maps for ServerToAgentCommand_CommandType.
+var (
+	ServerToAgentCommand_CommandType_name = map[int32]string{
+		0: "Restart",
+	}
+	ServerToAgentCommand_CommandType_value = map[string]int32{
+		"Restart": 0,
+	}
+)
+
+func (x ServerToAgentCommand_CommandType) Enum() *ServerToAgentCommand_CommandType {
+	p := new(ServerToAgentCommand_CommandType)
+	*p = x
+	return p
+}
+
+func (x ServerToAgentCommand_CommandType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ServerToAgentCommand_CommandType) Descriptor() protoreflect.EnumDescriptor {
+	return file_opamp_proto_enumTypes[5].Descriptor()
+}
+
+func (ServerToAgentCommand_CommandType) Type() protoreflect.EnumType {
+	return &file_opamp_proto_enumTypes[5]
+}
+
+func (x ServerToAgentCommand_CommandType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ServerToAgentCommand_CommandType.Descriptor instead.
+func (ServerToAgentCommand_CommandType) EnumDescriptor() ([]byte, []int) {
+	return file_opamp_proto_rawDescGZIP(), []int{14, 0}
+}
+
 type RemoteConfigStatus_Status int32
 
 const (
@@ -405,11 +454,11 @@ func (x RemoteConfigStatus_Status) String() string {
 }
 
 func (RemoteConfigStatus_Status) Descriptor() protoreflect.EnumDescriptor {
-	return file_opamp_proto_enumTypes[5].Descriptor()
+	return file_opamp_proto_enumTypes[6].Descriptor()
 }
 
 func (RemoteConfigStatus_Status) Type() protoreflect.EnumType {
-	return &file_opamp_proto_enumTypes[5]
+	return &file_opamp_proto_enumTypes[6]
 }
 
 func (x RemoteConfigStatus_Status) Number() protoreflect.EnumNumber {
@@ -418,7 +467,7 @@ func (x RemoteConfigStatus_Status) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use RemoteConfigStatus_Status.Descriptor instead.
 func (RemoteConfigStatus_Status) EnumDescriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{17, 0}
+	return file_opamp_proto_rawDescGZIP(), []int{18, 0}
 }
 
 type AgentAddonStatus_Status int32
@@ -466,11 +515,11 @@ func (x AgentAddonStatus_Status) String() string {
 }
 
 func (AgentAddonStatus_Status) Descriptor() protoreflect.EnumDescriptor {
-	return file_opamp_proto_enumTypes[6].Descriptor()
+	return file_opamp_proto_enumTypes[7].Descriptor()
 }
 
 func (AgentAddonStatus_Status) Type() protoreflect.EnumType {
-	return &file_opamp_proto_enumTypes[6]
+	return &file_opamp_proto_enumTypes[7]
 }
 
 func (x AgentAddonStatus_Status) Number() protoreflect.EnumNumber {
@@ -479,7 +528,7 @@ func (x AgentAddonStatus_Status) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use AgentAddonStatus_Status.Descriptor instead.
 func (AgentAddonStatus_Status) EnumDescriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{19, 0}
+	return file_opamp_proto_rawDescGZIP(), []int{20, 0}
 }
 
 type AgentInstallStatus_Status int32
@@ -531,11 +580,11 @@ func (x AgentInstallStatus_Status) String() string {
 }
 
 func (AgentInstallStatus_Status) Descriptor() protoreflect.EnumDescriptor {
-	return file_opamp_proto_enumTypes[7].Descriptor()
+	return file_opamp_proto_enumTypes[8].Descriptor()
 }
 
 func (AgentInstallStatus_Status) Type() protoreflect.EnumType {
-	return &file_opamp_proto_enumTypes[7]
+	return &file_opamp_proto_enumTypes[8]
 }
 
 func (x AgentInstallStatus_Status) Number() protoreflect.EnumNumber {
@@ -544,7 +593,7 @@ func (x AgentInstallStatus_Status) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use AgentInstallStatus_Status.Descriptor instead.
 func (AgentInstallStatus_Status) EnumDescriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{20, 0}
+	return file_opamp_proto_rawDescGZIP(), []int{21, 0}
 }
 
 type AgentToServer struct {
@@ -720,6 +769,10 @@ type ServerToAgent struct {
 	// be omitted in subsequent ServerToAgent messages by setting it to
 	// UnspecifiedServerCapability value.
 	Capabilities ServerCapabilities `protobuf:"varint,8,opt,name=capabilities,proto3,enum=opamp.proto.ServerCapabilities" json:"capabilities,omitempty"`
+	// Allows the Server to instruct the agent to perform a command, e.g. RESTART. This field should not be specified
+	// with fields other than instance_uid and capabilities. If specified, other fields will be ignored and the command
+	// will be performed.
+	Command *ServerToAgentCommand `protobuf:"bytes,10,opt,name=command,proto3" json:"command,omitempty"`
 }
 
 func (x *ServerToAgent) Reset() {
@@ -810,6 +863,13 @@ func (x *ServerToAgent) GetCapabilities() ServerCapabilities {
 	return ServerCapabilities_UnspecifiedServerCapability
 }
 
+func (x *ServerToAgent) GetCommand() *ServerToAgentCommand {
+	if x != nil {
+		return x.Command
+	}
+	return nil
+}
+
 // The ConnectionSettings message is a collection of fields which comprise an
 // offer from the server to the agent to use the specified settings for a network
 // connection. It is not required that all fields in this message are specified.
@@ -1661,6 +1721,55 @@ func (x *AgentPackageAvailable) GetFile() *DownloadableFile {
 	return nil
 }
 
+// ServerToAgentCommand is sent from the server to the agent to request that the agent
+// perform a command.
+type ServerToAgentCommand struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Type ServerToAgentCommand_CommandType `protobuf:"varint,1,opt,name=type,proto3,enum=opamp.proto.ServerToAgentCommand_CommandType" json:"type,omitempty"`
+}
+
+func (x *ServerToAgentCommand) Reset() {
+	*x = ServerToAgentCommand{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opamp_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ServerToAgentCommand) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ServerToAgentCommand) ProtoMessage() {}
+
+func (x *ServerToAgentCommand) ProtoReflect() protoreflect.Message {
+	mi := &file_opamp_proto_msgTypes[14]
+	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 ServerToAgentCommand.ProtoReflect.Descriptor instead.
+func (*ServerToAgentCommand) Descriptor() ([]byte, []int) {
+	return file_opamp_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *ServerToAgentCommand) GetType() ServerToAgentCommand_CommandType {
+	if x != nil {
+		return x.Type
+	}
+	return ServerToAgentCommand_Restart
+}
+
 type AgentDescription struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1703,7 +1812,7 @@ type AgentDescription struct {
 func (x *AgentDescription) Reset() {
 	*x = AgentDescription{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[14]
+		mi := &file_opamp_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1716,7 +1825,7 @@ func (x *AgentDescription) String() string {
 func (*AgentDescription) ProtoMessage() {}
 
 func (x *AgentDescription) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[14]
+	mi := &file_opamp_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1729,7 +1838,7 @@ func (x *AgentDescription) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentDescription.ProtoReflect.Descriptor instead.
 func (*AgentDescription) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{14}
+	return file_opamp_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *AgentDescription) GetIdentifyingAttributes() []*KeyValue {
@@ -1779,7 +1888,7 @@ type StatusReport struct {
 func (x *StatusReport) Reset() {
 	*x = StatusReport{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[15]
+		mi := &file_opamp_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1792,7 +1901,7 @@ func (x *StatusReport) String() string {
 func (*StatusReport) ProtoMessage() {}
 
 func (x *StatusReport) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[15]
+	mi := &file_opamp_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1805,7 +1914,7 @@ func (x *StatusReport) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use StatusReport.ProtoReflect.Descriptor instead.
 func (*StatusReport) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{15}
+	return file_opamp_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *StatusReport) GetAgentDescription() *AgentDescription {
@@ -1860,7 +1969,7 @@ type EffectiveConfig struct {
 func (x *EffectiveConfig) Reset() {
 	*x = EffectiveConfig{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[16]
+		mi := &file_opamp_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1873,7 +1982,7 @@ func (x *EffectiveConfig) String() string {
 func (*EffectiveConfig) ProtoMessage() {}
 
 func (x *EffectiveConfig) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[16]
+	mi := &file_opamp_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1886,7 +1995,7 @@ func (x *EffectiveConfig) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use EffectiveConfig.ProtoReflect.Descriptor instead.
 func (*EffectiveConfig) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{16}
+	return file_opamp_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *EffectiveConfig) GetHash() []byte {
@@ -1920,7 +2029,7 @@ type RemoteConfigStatus struct {
 func (x *RemoteConfigStatus) Reset() {
 	*x = RemoteConfigStatus{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[17]
+		mi := &file_opamp_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1933,7 +2042,7 @@ func (x *RemoteConfigStatus) String() string {
 func (*RemoteConfigStatus) ProtoMessage() {}
 
 func (x *RemoteConfigStatus) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[17]
+	mi := &file_opamp_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1946,7 +2055,7 @@ func (x *RemoteConfigStatus) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RemoteConfigStatus.ProtoReflect.Descriptor instead.
 func (*RemoteConfigStatus) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{17}
+	return file_opamp_proto_rawDescGZIP(), []int{18}
 }
 
 func (x *RemoteConfigStatus) GetLastRemoteConfigHash() []byte {
@@ -1989,7 +2098,7 @@ type AgentAddonStatuses struct {
 func (x *AgentAddonStatuses) Reset() {
 	*x = AgentAddonStatuses{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[18]
+		mi := &file_opamp_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2002,7 +2111,7 @@ func (x *AgentAddonStatuses) String() string {
 func (*AgentAddonStatuses) ProtoMessage() {}
 
 func (x *AgentAddonStatuses) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[18]
+	mi := &file_opamp_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2015,7 +2124,7 @@ func (x *AgentAddonStatuses) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentAddonStatuses.ProtoReflect.Descriptor instead.
 func (*AgentAddonStatuses) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{18}
+	return file_opamp_proto_rawDescGZIP(), []int{19}
 }
 
 func (x *AgentAddonStatuses) GetAddons() map[string]*AgentAddonStatus {
@@ -2067,7 +2176,7 @@ type AgentAddonStatus struct {
 func (x *AgentAddonStatus) Reset() {
 	*x = AgentAddonStatus{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[19]
+		mi := &file_opamp_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2080,7 +2189,7 @@ func (x *AgentAddonStatus) String() string {
 func (*AgentAddonStatus) ProtoMessage() {}
 
 func (x *AgentAddonStatus) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[19]
+	mi := &file_opamp_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2093,7 +2202,7 @@ func (x *AgentAddonStatus) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentAddonStatus.ProtoReflect.Descriptor instead.
 func (*AgentAddonStatus) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{19}
+	return file_opamp_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *AgentAddonStatus) GetName() string {
@@ -2152,7 +2261,7 @@ type AgentInstallStatus struct {
 func (x *AgentInstallStatus) Reset() {
 	*x = AgentInstallStatus{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[20]
+		mi := &file_opamp_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2165,7 +2274,7 @@ func (x *AgentInstallStatus) String() string {
 func (*AgentInstallStatus) ProtoMessage() {}
 
 func (x *AgentInstallStatus) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[20]
+	mi := &file_opamp_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2178,7 +2287,7 @@ func (x *AgentInstallStatus) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentInstallStatus.ProtoReflect.Descriptor instead.
 func (*AgentInstallStatus) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{20}
+	return file_opamp_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *AgentInstallStatus) GetServerOfferedVersion() string {
@@ -2234,7 +2343,7 @@ type AgentRemoteConfig struct {
 func (x *AgentRemoteConfig) Reset() {
 	*x = AgentRemoteConfig{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[21]
+		mi := &file_opamp_proto_msgTypes[22]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2247,7 +2356,7 @@ func (x *AgentRemoteConfig) String() string {
 func (*AgentRemoteConfig) ProtoMessage() {}
 
 func (x *AgentRemoteConfig) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[21]
+	mi := &file_opamp_proto_msgTypes[22]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2260,7 +2369,7 @@ func (x *AgentRemoteConfig) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentRemoteConfig.ProtoReflect.Descriptor instead.
 func (*AgentRemoteConfig) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{21}
+	return file_opamp_proto_rawDescGZIP(), []int{22}
 }
 
 func (x *AgentRemoteConfig) GetConfig() *AgentConfigMap {
@@ -2293,7 +2402,7 @@ type AgentConfigMap struct {
 func (x *AgentConfigMap) Reset() {
 	*x = AgentConfigMap{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[22]
+		mi := &file_opamp_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2306,7 +2415,7 @@ func (x *AgentConfigMap) String() string {
 func (*AgentConfigMap) ProtoMessage() {}
 
 func (x *AgentConfigMap) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[22]
+	mi := &file_opamp_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2319,7 +2428,7 @@ func (x *AgentConfigMap) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentConfigMap.ProtoReflect.Descriptor instead.
 func (*AgentConfigMap) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{22}
+	return file_opamp_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *AgentConfigMap) GetConfigMap() map[string]*AgentConfigFile {
@@ -2345,7 +2454,7 @@ type AgentConfigFile struct {
 func (x *AgentConfigFile) Reset() {
 	*x = AgentConfigFile{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_opamp_proto_msgTypes[23]
+		mi := &file_opamp_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2358,7 +2467,7 @@ func (x *AgentConfigFile) String() string {
 func (*AgentConfigFile) ProtoMessage() {}
 
 func (x *AgentConfigFile) ProtoReflect() protoreflect.Message {
-	mi := &file_opamp_proto_msgTypes[23]
+	mi := &file_opamp_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2371,7 +2480,7 @@ func (x *AgentConfigFile) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AgentConfigFile.ProtoReflect.Descriptor instead.
 func (*AgentConfigFile) Descriptor() ([]byte, []int) {
-	return file_opamp_proto_rawDescGZIP(), []int{23}
+	return file_opamp_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *AgentConfigFile) GetBody() []byte {
@@ -2416,7 +2525,7 @@ var file_opamp_proto_rawDesc = []byte{
 	0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
 	0x63, 0x74, 0x52, 0x0f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e,
 	0x65, 0x63, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x63,
-	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0x8b, 0x05, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0xc8, 0x05, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65,
 	0x72, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74,
 	0x61, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
 	0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x69, 0x64, 0x12, 0x47, 0x0a, 0x0e, 0x65,
@@ -2452,303 +2561,316 @@ var file_opamp_proto_rawDesc = []byte{
 	0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
 	0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
 	0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
-	0x69, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x05, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x10,
-	0x46, 0x6c, 0x61, 0x67, 0x73, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
-	0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x66, 0x66, 0x65,
-	0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x01, 0x12, 0x15, 0x0a,
-	0x11, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x10, 0x02, 0x22, 0x97, 0x03, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x64,
-	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f,
-	0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69,
-	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e,
-	0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x14, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65,
-	0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25,
-	0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x64,
-	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x68,
-	0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f,
+	0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x74,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x22, 0x4f, 0x0a, 0x05, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x6c, 0x61,
+	0x67, 0x73, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x10, 0x00, 0x12,
+	0x19, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69,
+	0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x65,
+	0x70, 0x6f, 0x72, 0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10,
+	0x02, 0x22, 0x97, 0x03, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x64, 0x65, 0x73, 0x74,
+	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x68,
+	0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f,
 	0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65,
-	0x72, 0x73, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
-	0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
-	0x74, 0x65, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12,
-	0x3b, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25,
-	0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e,
-	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e,
-	0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x40, 0x0a, 0x05,
-	0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x05, 0x0a, 0x01, 0x5f, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16,
-	0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f,
-	0x69, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x78,
-	0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x10, 0x02, 0x22, 0x38,
-	0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x65, 0x61,
-	0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x61,
-	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52,
-	0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64,
-	0x65, 0x72, 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, 0x22, 0x74, 0x0a, 0x0e, 0x54, 0x4c,
-	0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
-	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x70,
-	0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0d,
-	0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x0c, 0x52, 0x0b, 0x63, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
-	0x22, 0xf3, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a,
-	0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73,
-	0x68, 0x12, 0x35, 0x0a, 0x05, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43,
-	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x73, 0x52, 0x05, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x12, 0x40, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x5f,
-	0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
+	0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70,
+	0x72, 0x6f, 0x78, 0x79, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69,
+	0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x68, 0x65, 0x61, 0x64,
+	0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x61, 0x6d,
+	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52,
+	0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a,
+	0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52,
+	0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x05,
+	0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70,
+	0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x46, 0x6c, 0x61,
+	0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x46, 0x6c, 0x61,
+	0x67, 0x73, 0x12, 0x05, 0x0a, 0x01, 0x5f, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x65, 0x73,
+	0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
+	0x53, 0x65, 0x74, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x6e,
+	0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x10, 0x02, 0x22, 0x38, 0x0a, 0x07, 0x48,
+	0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65,
+	0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x22, 0x74, 0x0a, 0x0e, 0x54, 0x4c, 0x53, 0x43, 0x65,
+	0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62,
+	0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76,
+	0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70,
+	0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x61, 0x5f,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c,
+	0x52, 0x0b, 0x63, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0xf3, 0x03,
+	0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74,
+	0x69, 0x6e, 0x67, 0x73, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61,
+	0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x35,
+	0x0a, 0x05, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
 	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e,
-	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a,
-	0x6f, 0x77, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x77,
-	0x6e, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
-	0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e,
-	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52,
-	0x09, 0x6f, 0x77, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x6f, 0x77,
-	0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f,
-	0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x6f,
-	0x77, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f,
-	0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x3b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
-	0x67, 0x73, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f,
-	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10,
-	0x6f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
-	0x1a, 0x64, 0x0a, 0x15, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61,
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05,
+	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x12, 0x40, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x5f, 0x6d, 0x65, 0x74,
+	0x72, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61,
 	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x6f, 0x6e,
-	0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x64,
-	0x64, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x61,
-	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x41,
-	0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f,
-	0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73,
-	0x48, 0x61, 0x73, 0x68, 0x1a, 0x56, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c,
-	0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x0e,
-	0x41, 0x64, 0x64, 0x6f, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31,
-	0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f,
-	0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
-	0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c,
-	0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
-	0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x76, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
-	0x64, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77,
-	0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c,
-	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12,
-	0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01,
-	0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
-	0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69,
-	0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x61, 0x6d,
-	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66,
-	0x6f, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x34,
-	0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77,
-	0x6e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
-	0x6c, 0x65, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22,
-	0x43, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17,
-	0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6e, 0x6f,
-	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x72,
-	0x65, 0x74, 0x72, 0x79, 0x41, 0x66, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63,
-	0x6f, 0x6e, 0x64, 0x73, 0x22, 0x64, 0x0a, 0x15, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63,
-	0x6b, 0x61, 0x67, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a,
-	0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
-	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65,
-	0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x10, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x4c, 0x0a, 0x16, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x61,
-	0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x15, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65,
-	0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79,
-	0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a,
-	0x1a, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67,
-	0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x65,
-	0x6e, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-	0x65, 0x73, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70,
-	0x6f, 0x72, 0x74, 0x12, 0x4a, 0x0a, 0x11, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d,
+	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a, 0x6f, 0x77, 0x6e,
+	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x5f, 0x74,
+	0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70,
+	0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x09, 0x6f, 0x77,
+	0x6e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x5f, 0x6c,
+	0x6f, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61, 0x6d,
+	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x4c,
+	0x6f, 0x67, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b,
+	0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x4f,
+	0x66, 0x66, 0x65, 0x72, 0x73, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6f, 0x74, 0x68,
+	0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x64, 0x0a,
+	0x15, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+	0x02, 0x38, 0x01, 0x22, 0xd3, 0x01, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x41, 0x76,
+	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x41, 0x76, 0x61, 0x69,
+	0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x52, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x6c, 0x6c,
+	0x5f, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73,
+	0x68, 0x1a, 0x56, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+	0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x41, 0x64, 0x64, 0x6f, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x0e, 0x41, 0x64, 0x64,
+	0x6f, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x66,
+	0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x61, 0x6d,
+	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64,
+	0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61,
+	0x73, 0x68, 0x22, 0x76, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62,
+	0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
+	0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x6f,
+	0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09,
+	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x25, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a,
+	0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61,
+	0x67, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00,
+	0x52, 0x09, 0x72, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x34, 0x0a, 0x04, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00,
+	0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0x01,
+	0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x10,
+	0x02, 0x42, 0x09, 0x0a, 0x07, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x43, 0x0a, 0x09,
+	0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17, 0x72, 0x65, 0x74,
+	0x72, 0x79, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63,
+	0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x72, 0x65, 0x74, 0x72,
+	0x79, 0x41, 0x66, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x73, 0x22, 0x64, 0x0a, 0x15, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67,
+	0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
+	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x69, 0x6c,
+	0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x75, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12,
+	0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e,
+	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76,
+	0x65, 0x72, 0x54, 0x6f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x22, 0x1a, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x10, 0x00, 0x22, 0xb5,
+	0x01, 0x0a, 0x10, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x16, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x69,
+	0x6e, 0x67, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x69, 0x64, 0x65, 0x6e,
+	0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x73, 0x12, 0x53, 0x0a, 0x1a, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+	0x79, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x6e, 0x6f,
+	0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x72,
+	0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x4a, 0x0a, 0x11, 0x61, 0x67, 0x65, 0x6e, 0x74,
+	0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x10, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x10, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
+	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x66, 0x66, 0x65,
+	0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x65, 0x66, 0x66,
+	0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x51, 0x0a, 0x14,
+	0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61,
+	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x12, 0x72, 0x65, 0x6d,
+	0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+	0x42, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
+	0x69, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x0f, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
 	0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65,
-	0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x61,
-	0x67, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x47, 0x0a, 0x10, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x61, 0x6d,
-	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
-	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69,
-	0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x51, 0x0a, 0x14, 0x72, 0x65, 0x6d, 0x6f,
-	0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43,
-	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x63,
-	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
-	0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22,
-	0x61, 0x0a, 0x0f, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66,
-	0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
-	0x5f, 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61,
-	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f,
-	0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d,
-	0x61, 0x70, 0x22, 0xe1, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6c, 0x61, 0x73,
-	0x74, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
-	0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74,
-	0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68,
-	0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
-	0x32, 0x26, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52,
-	0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65,
-	0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
-	0x0b, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08,
-	0x41, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61,
-	0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x12, 0x41, 0x67, 0x65, 0x6e, 0x74,
-	0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x43, 0x0a,
-	0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
-	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e,
-	0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x2e, 0x41,
-	0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x61, 0x64, 0x64, 0x6f,
-	0x6e, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f,
-	0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73,
-	0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x41, 0x64,
-	0x64, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x68, 0x1a, 0x58, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x6f,
-	0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x6f,
-	0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
-	0x38, 0x01, 0x22, 0xaf, 0x02, 0x0a, 0x10, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x6f,
-	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, 0x24, 0x0a, 0x0e, 0x61,
-	0x67, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0c, 0x52, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x48, 0x61, 0x73,
-	0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x65,
-	0x72, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x48, 0x61, 0x73,
-	0x68, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x09, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x22, 0xe1, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x74,
+	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x0a,
+	0x17, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14,
+	0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x48, 0x61, 0x73, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65,
+	0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x0a, 0x06, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x10, 0x00,
+	0x12, 0x0c, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0a,
+	0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x22, 0xf9, 0x01, 0x0a, 0x12, 0x41,
+	0x67, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65,
+	0x73, 0x12, 0x43, 0x0a, 0x06, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
 	0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
-	0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0d,
-	0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x00, 0x12, 0x12, 0x0a,
-	0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10,
-	0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x10,
-	0x02, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61, 0x69, 0x6c,
-	0x65, 0x64, 0x10, 0x03, 0x22, 0xb4, 0x02, 0x0a, 0x12, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e,
-	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x76, 0x65,
-	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x65,
-	0x72, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11,
-	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x48, 0x61, 0x73,
-	0x68, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
-	0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x12, 0x0d, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x00, 0x12,
-	0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12,
-	0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
-	0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4e, 0x6f, 0x50,
-	0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x22, 0x69, 0x0a, 0x11, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
-	0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x06, 0x63,
-	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
-	0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66,
-	0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x22, 0xb7, 0x01, 0x0a, 0x0e, 0x41, 0x67, 0x65, 0x6e, 0x74,
-	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x49, 0x0a, 0x0a, 0x63, 0x6f, 0x6e,
-	0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
-	0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e,
-	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x4d, 0x61, 0x70, 0x1a, 0x5a, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
-	0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
-	0x22, 0x48, 0x0a, 0x0f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46,
-	0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x2a, 0xfd, 0x01, 0x0a, 0x12, 0x53,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65,
-	0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
-	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
-	0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x53, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x52,
-	0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x02, 0x12, 0x1a, 0x0a,
-	0x16, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
-	0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x66, 0x66,
-	0x65, 0x72, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x41,
-	0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x10, 0x10, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x41, 0x67,
-	0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x20, 0x12, 0x1d, 0x0a, 0x19,
-	0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b,
-	0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x40, 0x12, 0x1d, 0x0a, 0x18, 0x4f,
-	0x66, 0x66, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x10, 0x80, 0x01, 0x2a, 0xed, 0x02, 0x0a, 0x11, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73,
-	0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x10, 0x00,
-	0x12, 0x11, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x52, 0x65,
-	0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16,
-	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
-	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65,
-	0x70, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x52,
-	0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x10, 0x10, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41,
-	0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x20, 0x12, 0x1d, 0x0a,
-	0x19, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63,
-	0x6b, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x40, 0x12, 0x15, 0x0a, 0x10,
-	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x77, 0x6e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73,
-	0x10, 0x80, 0x01, 0x12, 0x16, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x77,
-	0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x52,
-	0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x77, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x10, 0x80, 0x04,
-	0x12, 0x23, 0x0a, 0x1e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x4f, 0x70, 0x41, 0x4d, 0x50,
-	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
-	0x67, 0x73, 0x10, 0x80, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73,
-	0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x10, 0x80, 0x10, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69,
+	0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06,
+	0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64,
+	0x64, 0x6f, 0x6e, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x1b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x41,
+	0x6c, 0x6c, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x48, 0x61, 0x73, 0x68, 0x1a, 0x58, 0x0a, 0x0b,
+	0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+	0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f,
+	0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74,
+	0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x02, 0x0a, 0x10, 0x41, 0x67, 0x65, 0x6e, 0x74,
+	0x41, 0x64, 0x64, 0x6f, 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,
+	0x24, 0x0a, 0x0e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x68, 0x61, 0x73,
+	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x61,
+	0x73, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
+	0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65,
+	0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73,
+	0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x10,
+	0x00, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+	0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+	0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x03, 0x22, 0xb4, 0x02, 0x0a, 0x12, 0x41, 0x67, 0x65,
+	0x6e, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+	0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65,
+	0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x56, 0x65,
+	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
+	0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x65,
+	0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72,
+	0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, 0x06, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65,
+	0x64, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x6e,
+	0x67, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61,
+	0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
+	0x6c, 0x4e, 0x6f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x22,
+	0x69, 0x0a, 0x11, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61,
+	0x70, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x73, 0x68, 0x22, 0xb7, 0x01, 0x0a, 0x0e, 0x41,
+	0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x49, 0x0a,
+	0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+	0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x2e, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x63,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x1a, 0x5a, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 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, 0x32, 0x0a, 0x05,
+	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70,
+	0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x22, 0x48, 0x0a, 0x0f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
+	0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x2a, 0xfd,
+	0x01, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c,
+	0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69,
+	0x66, 0x69, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69,
+	0x6c, 0x69, 0x74, 0x79, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74,
+	0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x66, 0x66,
+	0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10,
+	0x02, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x45, 0x66, 0x66, 0x65,
+	0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x04, 0x12, 0x10, 0x0a,
+	0x0c, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x10, 0x08, 0x12,
+	0x17, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x10, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x66, 0x66, 0x65,
+	0x72, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10, 0x20,
+	0x12, 0x1d, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74,
+	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x40, 0x12,
+	0x1d, 0x0a, 0x18, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x10, 0x80, 0x01, 0x2a, 0x89,
+	0x03, 0x0a, 0x11, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x69, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+	0x69, 0x65, 0x64, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
+	0x74, 0x79, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x70,
+	0x74, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x02,
+	0x12, 0x1a, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x66, 0x66, 0x65, 0x63,
+	0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d,
+	0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73, 0x10, 0x08, 0x12,
+	0x17, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x41, 0x64, 0x64, 0x6f, 0x6e, 0x73,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x10, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65,
+	0x70, 0x74, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x10,
+	0x20, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x41, 0x67, 0x65, 0x6e,
+	0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x40,
+	0x12, 0x15, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x77, 0x6e, 0x54, 0x72,
+	0x61, 0x63, 0x65, 0x73, 0x10, 0x80, 0x01, 0x12, 0x16, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6f, 0x72,
+	0x74, 0x73, 0x4f, 0x77, 0x6e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x10, 0x80, 0x02, 0x12,
+	0x13, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x77, 0x6e, 0x4c, 0x6f, 0x67,
+	0x73, 0x10, 0x80, 0x04, 0x12, 0x23, 0x0a, 0x1e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x4f,
+	0x70, 0x41, 0x4d, 0x50, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
+	0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x10, 0x80, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x41, 0x63, 0x63,
+	0x65, 0x70, 0x74, 0x73, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
+	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x10, 0x80, 0x10, 0x12, 0x1a,
+	0x0a, 0x15, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x80, 0x20, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69,
 	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x74, 0x65,
 	0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2f, 0x6f, 0x70, 0x61, 0x6d, 0x70, 0x2d, 0x67, 0x6f,
 	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
@@ -2767,96 +2889,100 @@ func file_opamp_proto_rawDescGZIP() []byte {
 	return file_opamp_proto_rawDescData
 }
 
-var file_opamp_proto_enumTypes = make([]protoimpl.EnumInfo, 8)
-var file_opamp_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
+var file_opamp_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
+var file_opamp_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
 var file_opamp_proto_goTypes = []interface{}{
-	(ServerCapabilities)(0),          // 0: opamp.proto.ServerCapabilities
-	(AgentCapabilities)(0),           // 1: opamp.proto.AgentCapabilities
-	(ServerToAgent_Flags)(0),         // 2: opamp.proto.ServerToAgent.Flags
-	(ConnectionSettings_Flags)(0),    // 3: opamp.proto.ConnectionSettings.Flags
-	(ServerErrorResponse_Type)(0),    // 4: opamp.proto.ServerErrorResponse.Type
-	(RemoteConfigStatus_Status)(0),   // 5: opamp.proto.RemoteConfigStatus.Status
-	(AgentAddonStatus_Status)(0),     // 6: opamp.proto.AgentAddonStatus.Status
-	(AgentInstallStatus_Status)(0),   // 7: opamp.proto.AgentInstallStatus.Status
-	(*AgentToServer)(nil),            // 8: opamp.proto.AgentToServer
-	(*AgentDisconnect)(nil),          // 9: opamp.proto.AgentDisconnect
-	(*ServerToAgent)(nil),            // 10: opamp.proto.ServerToAgent
-	(*ConnectionSettings)(nil),       // 11: opamp.proto.ConnectionSettings
-	(*Headers)(nil),                  // 12: opamp.proto.Headers
-	(*Header)(nil),                   // 13: opamp.proto.Header
-	(*TLSCertificate)(nil),           // 14: opamp.proto.TLSCertificate
-	(*ConnectionSettingsOffers)(nil), // 15: opamp.proto.ConnectionSettingsOffers
-	(*AddonsAvailable)(nil),          // 16: opamp.proto.AddonsAvailable
-	(*AddonAvailable)(nil),           // 17: opamp.proto.AddonAvailable
-	(*DownloadableFile)(nil),         // 18: opamp.proto.DownloadableFile
-	(*ServerErrorResponse)(nil),      // 19: opamp.proto.ServerErrorResponse
-	(*RetryInfo)(nil),                // 20: opamp.proto.RetryInfo
-	(*AgentPackageAvailable)(nil),    // 21: opamp.proto.AgentPackageAvailable
-	(*AgentDescription)(nil),         // 22: opamp.proto.AgentDescription
-	(*StatusReport)(nil),             // 23: opamp.proto.StatusReport
-	(*EffectiveConfig)(nil),          // 24: opamp.proto.EffectiveConfig
-	(*RemoteConfigStatus)(nil),       // 25: opamp.proto.RemoteConfigStatus
-	(*AgentAddonStatuses)(nil),       // 26: opamp.proto.AgentAddonStatuses
-	(*AgentAddonStatus)(nil),         // 27: opamp.proto.AgentAddonStatus
-	(*AgentInstallStatus)(nil),       // 28: opamp.proto.AgentInstallStatus
-	(*AgentRemoteConfig)(nil),        // 29: opamp.proto.AgentRemoteConfig
-	(*AgentConfigMap)(nil),           // 30: opamp.proto.AgentConfigMap
-	(*AgentConfigFile)(nil),          // 31: opamp.proto.AgentConfigFile
-	nil,                              // 32: opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry
-	nil,                              // 33: opamp.proto.AddonsAvailable.AddonsEntry
-	nil,                              // 34: opamp.proto.AgentAddonStatuses.AddonsEntry
-	nil,                              // 35: opamp.proto.AgentConfigMap.ConfigMapEntry
-	(*KeyValue)(nil),                 // 36: opamp.proto.KeyValue
+	(ServerCapabilities)(0),               // 0: opamp.proto.ServerCapabilities
+	(AgentCapabilities)(0),                // 1: opamp.proto.AgentCapabilities
+	(ServerToAgent_Flags)(0),              // 2: opamp.proto.ServerToAgent.Flags
+	(ConnectionSettings_Flags)(0),         // 3: opamp.proto.ConnectionSettings.Flags
+	(ServerErrorResponse_Type)(0),         // 4: opamp.proto.ServerErrorResponse.Type
+	(ServerToAgentCommand_CommandType)(0), // 5: opamp.proto.ServerToAgentCommand.CommandType
+	(RemoteConfigStatus_Status)(0),        // 6: opamp.proto.RemoteConfigStatus.Status
+	(AgentAddonStatus_Status)(0),          // 7: opamp.proto.AgentAddonStatus.Status
+	(AgentInstallStatus_Status)(0),        // 8: opamp.proto.AgentInstallStatus.Status
+	(*AgentToServer)(nil),                 // 9: opamp.proto.AgentToServer
+	(*AgentDisconnect)(nil),               // 10: opamp.proto.AgentDisconnect
+	(*ServerToAgent)(nil),                 // 11: opamp.proto.ServerToAgent
+	(*ConnectionSettings)(nil),            // 12: opamp.proto.ConnectionSettings
+	(*Headers)(nil),                       // 13: opamp.proto.Headers
+	(*Header)(nil),                        // 14: opamp.proto.Header
+	(*TLSCertificate)(nil),                // 15: opamp.proto.TLSCertificate
+	(*ConnectionSettingsOffers)(nil),      // 16: opamp.proto.ConnectionSettingsOffers
+	(*AddonsAvailable)(nil),               // 17: opamp.proto.AddonsAvailable
+	(*AddonAvailable)(nil),                // 18: opamp.proto.AddonAvailable
+	(*DownloadableFile)(nil),              // 19: opamp.proto.DownloadableFile
+	(*ServerErrorResponse)(nil),           // 20: opamp.proto.ServerErrorResponse
+	(*RetryInfo)(nil),                     // 21: opamp.proto.RetryInfo
+	(*AgentPackageAvailable)(nil),         // 22: opamp.proto.AgentPackageAvailable
+	(*ServerToAgentCommand)(nil),          // 23: opamp.proto.ServerToAgentCommand
+	(*AgentDescription)(nil),              // 24: opamp.proto.AgentDescription
+	(*StatusReport)(nil),                  // 25: opamp.proto.StatusReport
+	(*EffectiveConfig)(nil),               // 26: opamp.proto.EffectiveConfig
+	(*RemoteConfigStatus)(nil),            // 27: opamp.proto.RemoteConfigStatus
+	(*AgentAddonStatuses)(nil),            // 28: opamp.proto.AgentAddonStatuses
+	(*AgentAddonStatus)(nil),              // 29: opamp.proto.AgentAddonStatus
+	(*AgentInstallStatus)(nil),            // 30: opamp.proto.AgentInstallStatus
+	(*AgentRemoteConfig)(nil),             // 31: opamp.proto.AgentRemoteConfig
+	(*AgentConfigMap)(nil),                // 32: opamp.proto.AgentConfigMap
+	(*AgentConfigFile)(nil),               // 33: opamp.proto.AgentConfigFile
+	nil,                                   // 34: opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry
+	nil,                                   // 35: opamp.proto.AddonsAvailable.AddonsEntry
+	nil,                                   // 36: opamp.proto.AgentAddonStatuses.AddonsEntry
+	nil,                                   // 37: opamp.proto.AgentConfigMap.ConfigMapEntry
+	(*KeyValue)(nil),                      // 38: opamp.proto.KeyValue
 }
 var file_opamp_proto_depIdxs = []int32{
-	23, // 0: opamp.proto.AgentToServer.status_report:type_name -> opamp.proto.StatusReport
-	26, // 1: opamp.proto.AgentToServer.addon_statuses:type_name -> opamp.proto.AgentAddonStatuses
-	28, // 2: opamp.proto.AgentToServer.agent_install_status:type_name -> opamp.proto.AgentInstallStatus
-	9,  // 3: opamp.proto.AgentToServer.agent_disconnect:type_name -> opamp.proto.AgentDisconnect
-	19, // 4: opamp.proto.ServerToAgent.error_response:type_name -> opamp.proto.ServerErrorResponse
-	29, // 5: opamp.proto.ServerToAgent.remote_config:type_name -> opamp.proto.AgentRemoteConfig
-	15, // 6: opamp.proto.ServerToAgent.connection_settings:type_name -> opamp.proto.ConnectionSettingsOffers
-	16, // 7: opamp.proto.ServerToAgent.addons_available:type_name -> opamp.proto.AddonsAvailable
-	21, // 8: opamp.proto.ServerToAgent.agent_package_available:type_name -> opamp.proto.AgentPackageAvailable
+	25, // 0: opamp.proto.AgentToServer.status_report:type_name -> opamp.proto.StatusReport
+	28, // 1: opamp.proto.AgentToServer.addon_statuses:type_name -> opamp.proto.AgentAddonStatuses
+	30, // 2: opamp.proto.AgentToServer.agent_install_status:type_name -> opamp.proto.AgentInstallStatus
+	10, // 3: opamp.proto.AgentToServer.agent_disconnect:type_name -> opamp.proto.AgentDisconnect
+	20, // 4: opamp.proto.ServerToAgent.error_response:type_name -> opamp.proto.ServerErrorResponse
+	31, // 5: opamp.proto.ServerToAgent.remote_config:type_name -> opamp.proto.AgentRemoteConfig
+	16, // 6: opamp.proto.ServerToAgent.connection_settings:type_name -> opamp.proto.ConnectionSettingsOffers
+	17, // 7: opamp.proto.ServerToAgent.addons_available:type_name -> opamp.proto.AddonsAvailable
+	22, // 8: opamp.proto.ServerToAgent.agent_package_available:type_name -> opamp.proto.AgentPackageAvailable
 	2,  // 9: opamp.proto.ServerToAgent.flags:type_name -> opamp.proto.ServerToAgent.Flags
 	0,  // 10: opamp.proto.ServerToAgent.capabilities:type_name -> opamp.proto.ServerCapabilities
-	12, // 11: opamp.proto.ConnectionSettings.headers:type_name -> opamp.proto.Headers
-	12, // 12: opamp.proto.ConnectionSettings.proxy_headers:type_name -> opamp.proto.Headers
-	14, // 13: opamp.proto.ConnectionSettings.certificate:type_name -> opamp.proto.TLSCertificate
-	3,  // 14: opamp.proto.ConnectionSettings.flags:type_name -> opamp.proto.ConnectionSettings.Flags
-	13, // 15: opamp.proto.Headers.headers:type_name -> opamp.proto.Header
-	11, // 16: opamp.proto.ConnectionSettingsOffers.opamp:type_name -> opamp.proto.ConnectionSettings
-	11, // 17: opamp.proto.ConnectionSettingsOffers.own_metrics:type_name -> opamp.proto.ConnectionSettings
-	11, // 18: opamp.proto.ConnectionSettingsOffers.own_traces:type_name -> opamp.proto.ConnectionSettings
-	11, // 19: opamp.proto.ConnectionSettingsOffers.own_logs:type_name -> opamp.proto.ConnectionSettings
-	32, // 20: opamp.proto.ConnectionSettingsOffers.other_connections:type_name -> opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry
-	33, // 21: opamp.proto.AddonsAvailable.addons:type_name -> opamp.proto.AddonsAvailable.AddonsEntry
-	18, // 22: opamp.proto.AddonAvailable.file:type_name -> opamp.proto.DownloadableFile
-	4,  // 23: opamp.proto.ServerErrorResponse.type:type_name -> opamp.proto.ServerErrorResponse.Type
-	20, // 24: opamp.proto.ServerErrorResponse.retry_info:type_name -> opamp.proto.RetryInfo
-	18, // 25: opamp.proto.AgentPackageAvailable.file:type_name -> opamp.proto.DownloadableFile
-	36, // 26: opamp.proto.AgentDescription.identifying_attributes:type_name -> opamp.proto.KeyValue
-	36, // 27: opamp.proto.AgentDescription.non_identifying_attributes:type_name -> opamp.proto.KeyValue
-	22, // 28: opamp.proto.StatusReport.agent_description:type_name -> opamp.proto.AgentDescription
-	24, // 29: opamp.proto.StatusReport.effective_config:type_name -> opamp.proto.EffectiveConfig
-	25, // 30: opamp.proto.StatusReport.remote_config_status:type_name -> opamp.proto.RemoteConfigStatus
-	1,  // 31: opamp.proto.StatusReport.capabilities:type_name -> opamp.proto.AgentCapabilities
-	30, // 32: opamp.proto.EffectiveConfig.config_map:type_name -> opamp.proto.AgentConfigMap
-	5,  // 33: opamp.proto.RemoteConfigStatus.status:type_name -> opamp.proto.RemoteConfigStatus.Status
-	34, // 34: opamp.proto.AgentAddonStatuses.addons:type_name -> opamp.proto.AgentAddonStatuses.AddonsEntry
-	6,  // 35: opamp.proto.AgentAddonStatus.status:type_name -> opamp.proto.AgentAddonStatus.Status
-	7,  // 36: opamp.proto.AgentInstallStatus.status:type_name -> opamp.proto.AgentInstallStatus.Status
-	30, // 37: opamp.proto.AgentRemoteConfig.config:type_name -> opamp.proto.AgentConfigMap
-	35, // 38: opamp.proto.AgentConfigMap.config_map:type_name -> opamp.proto.AgentConfigMap.ConfigMapEntry
-	11, // 39: opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry.value:type_name -> opamp.proto.ConnectionSettings
-	17, // 40: opamp.proto.AddonsAvailable.AddonsEntry.value:type_name -> opamp.proto.AddonAvailable
-	27, // 41: opamp.proto.AgentAddonStatuses.AddonsEntry.value:type_name -> opamp.proto.AgentAddonStatus
-	31, // 42: opamp.proto.AgentConfigMap.ConfigMapEntry.value:type_name -> opamp.proto.AgentConfigFile
-	43, // [43:43] is the sub-list for method output_type
-	43, // [43:43] is the sub-list for method input_type
-	43, // [43:43] is the sub-list for extension type_name
-	43, // [43:43] is the sub-list for extension extendee
-	0,  // [0:43] is the sub-list for field type_name
+	23, // 11: opamp.proto.ServerToAgent.command:type_name -> opamp.proto.ServerToAgentCommand
+	13, // 12: opamp.proto.ConnectionSettings.headers:type_name -> opamp.proto.Headers
+	13, // 13: opamp.proto.ConnectionSettings.proxy_headers:type_name -> opamp.proto.Headers
+	15, // 14: opamp.proto.ConnectionSettings.certificate:type_name -> opamp.proto.TLSCertificate
+	3,  // 15: opamp.proto.ConnectionSettings.flags:type_name -> opamp.proto.ConnectionSettings.Flags
+	14, // 16: opamp.proto.Headers.headers:type_name -> opamp.proto.Header
+	12, // 17: opamp.proto.ConnectionSettingsOffers.opamp:type_name -> opamp.proto.ConnectionSettings
+	12, // 18: opamp.proto.ConnectionSettingsOffers.own_metrics:type_name -> opamp.proto.ConnectionSettings
+	12, // 19: opamp.proto.ConnectionSettingsOffers.own_traces:type_name -> opamp.proto.ConnectionSettings
+	12, // 20: opamp.proto.ConnectionSettingsOffers.own_logs:type_name -> opamp.proto.ConnectionSettings
+	34, // 21: opamp.proto.ConnectionSettingsOffers.other_connections:type_name -> opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry
+	35, // 22: opamp.proto.AddonsAvailable.addons:type_name -> opamp.proto.AddonsAvailable.AddonsEntry
+	19, // 23: opamp.proto.AddonAvailable.file:type_name -> opamp.proto.DownloadableFile
+	4,  // 24: opamp.proto.ServerErrorResponse.type:type_name -> opamp.proto.ServerErrorResponse.Type
+	21, // 25: opamp.proto.ServerErrorResponse.retry_info:type_name -> opamp.proto.RetryInfo
+	19, // 26: opamp.proto.AgentPackageAvailable.file:type_name -> opamp.proto.DownloadableFile
+	5,  // 27: opamp.proto.ServerToAgentCommand.type:type_name -> opamp.proto.ServerToAgentCommand.CommandType
+	38, // 28: opamp.proto.AgentDescription.identifying_attributes:type_name -> opamp.proto.KeyValue
+	38, // 29: opamp.proto.AgentDescription.non_identifying_attributes:type_name -> opamp.proto.KeyValue
+	24, // 30: opamp.proto.StatusReport.agent_description:type_name -> opamp.proto.AgentDescription
+	26, // 31: opamp.proto.StatusReport.effective_config:type_name -> opamp.proto.EffectiveConfig
+	27, // 32: opamp.proto.StatusReport.remote_config_status:type_name -> opamp.proto.RemoteConfigStatus
+	1,  // 33: opamp.proto.StatusReport.capabilities:type_name -> opamp.proto.AgentCapabilities
+	32, // 34: opamp.proto.EffectiveConfig.config_map:type_name -> opamp.proto.AgentConfigMap
+	6,  // 35: opamp.proto.RemoteConfigStatus.status:type_name -> opamp.proto.RemoteConfigStatus.Status
+	36, // 36: opamp.proto.AgentAddonStatuses.addons:type_name -> opamp.proto.AgentAddonStatuses.AddonsEntry
+	7,  // 37: opamp.proto.AgentAddonStatus.status:type_name -> opamp.proto.AgentAddonStatus.Status
+	8,  // 38: opamp.proto.AgentInstallStatus.status:type_name -> opamp.proto.AgentInstallStatus.Status
+	32, // 39: opamp.proto.AgentRemoteConfig.config:type_name -> opamp.proto.AgentConfigMap
+	37, // 40: opamp.proto.AgentConfigMap.config_map:type_name -> opamp.proto.AgentConfigMap.ConfigMapEntry
+	12, // 41: opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntry.value:type_name -> opamp.proto.ConnectionSettings
+	18, // 42: opamp.proto.AddonsAvailable.AddonsEntry.value:type_name -> opamp.proto.AddonAvailable
+	29, // 43: opamp.proto.AgentAddonStatuses.AddonsEntry.value:type_name -> opamp.proto.AgentAddonStatus
+	33, // 44: opamp.proto.AgentConfigMap.ConfigMapEntry.value:type_name -> opamp.proto.AgentConfigFile
+	45, // [45:45] is the sub-list for method output_type
+	45, // [45:45] is the sub-list for method input_type
+	45, // [45:45] is the sub-list for extension type_name
+	45, // [45:45] is the sub-list for extension extendee
+	0,  // [0:45] is the sub-list for field type_name
 }
 
 func init() { file_opamp_proto_init() }
@@ -3035,7 +3161,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentDescription); i {
+			switch v := v.(*ServerToAgentCommand); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3047,7 +3173,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*StatusReport); i {
+			switch v := v.(*AgentDescription); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3059,7 +3185,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*EffectiveConfig); i {
+			switch v := v.(*StatusReport); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3071,7 +3197,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RemoteConfigStatus); i {
+			switch v := v.(*EffectiveConfig); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3083,7 +3209,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentAddonStatuses); i {
+			switch v := v.(*RemoteConfigStatus); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3095,7 +3221,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentAddonStatus); i {
+			switch v := v.(*AgentAddonStatuses); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3107,7 +3233,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentInstallStatus); i {
+			switch v := v.(*AgentAddonStatus); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3119,7 +3245,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentRemoteConfig); i {
+			switch v := v.(*AgentInstallStatus); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3131,7 +3257,7 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AgentConfigMap); i {
+			switch v := v.(*AgentRemoteConfig); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3143,6 +3269,18 @@ func file_opamp_proto_init() {
 			}
 		}
 		file_opamp_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AgentConfigMap); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_opamp_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*AgentConfigFile); i {
 			case 0:
 				return &v.state
@@ -3163,8 +3301,8 @@ func file_opamp_proto_init() {
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_opamp_proto_rawDesc,
-			NumEnums:      8,
-			NumMessages:   28,
+			NumEnums:      9,
+			NumMessages:   29,
 			NumExtensions: 0,
 			NumServices:   0,
 		},


Test patch:
diff --git a/client/clientimpl_test.go b/client/clientimpl_test.go
index 583f5b9..6f5c3d2 100644
--- a/client/clientimpl_test.go
+++ b/client/clientimpl_test.go
@@ -67,7 +67,7 @@ func TestConnectNoServer(t *testing.T) {
 func TestOnConnectFail(t *testing.T) {
 	var connectErr atomic.Value
 	settings := createNoServerSettings()
-	settings.Callbacks = CallbacksStruct{
+	settings.Callbacks = types.CallbacksStruct{
 		OnConnectFailedFunc: func(err error) {
 			connectErr.Store(err)
 		},
@@ -117,7 +117,7 @@ func TestConnectWithServer(t *testing.T) {
 	// Start a client.
 	var connected int64
 	settings := StartSettings{
-		Callbacks: CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnConnectFunc: func() {
 				atomic.StoreInt64(&connected, 1)
 			},
@@ -154,7 +154,7 @@ func TestConnectWithServer503(t *testing.T) {
 	var clientConnected int64
 	var connectErr atomic.Value
 	settings := StartSettings{
-		Callbacks: CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnConnectFunc: func() {
 				atomic.StoreInt64(&clientConnected, 1)
 				assert.Fail(t, "Client should not be able to connect")
@@ -217,7 +217,7 @@ func TestDisconnectByServer(t *testing.T) {
 	var connected int64
 	var connectErr atomic.Value
 	settings := StartSettings{
-		Callbacks: CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnConnectFunc: func() {
 				atomic.StoreInt64(&connected, 1)
 			},
@@ -266,7 +266,7 @@ func TestFirstStatusReport(t *testing.T) {
 	// Start a client.
 	var connected, remoteConfigReceived int64
 	settings := StartSettings{
-		Callbacks: CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnConnectFunc: func() {
 				atomic.AddInt64(&connected, 1)
 			},
@@ -472,7 +472,7 @@ func TestConnectionSettings(t *testing.T) {
 
 	// Start a client.
 	settings := StartSettings{
-		Callbacks: CallbacksStruct{
+		Callbacks: types.CallbacksStruct{
 			OnOpampConnectionSettingsFunc: func(
 				ctx context.Context, settings *protobufs.ConnectionSettings,
 			) error {
diff --git a/client/internal/receiver_test.go b/client/internal/receiver_test.go
new file mode 100644
index 0000000..e1b8064
--- /dev/null
+++ b/client/internal/receiver_test.go
@@ -0,0 +1,105 @@
+package internal
+
+import (
+	"context"
+	"fmt"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+
+	"github.com/open-telemetry/opamp-go/client/types"
+	"github.com/open-telemetry/opamp-go/protobufs"
+)
+
+type TestLogger struct {
+	*testing.T
+}
+
+func (logger TestLogger) Debugf(format string, v ...interface{}) {
+	logger.Logf(format, v...)
+}
+
+type commandAction int
+
+const (
+	none commandAction = iota
+	restart
+	unknown
+)
+
+func TestServerToAgentCommand(t *testing.T) {
+
+	tests := []struct {
+		command *protobufs.ServerToAgentCommand
+		action  commandAction
+		message string
+	}{
+		{
+			command: nil,
+			action:  none,
+			message: "No command should result in no action",
+		},
+		{
+			command: &protobufs.ServerToAgentCommand{
+				Type: protobufs.ServerToAgentCommand_Restart,
+			},
+			action:  restart,
+			message: "A Restart command should result in a restart",
+		},
+		{
+			command: &protobufs.ServerToAgentCommand{
+				Type: -1,
+			},
+			action:  unknown,
+			message: "An unknown command is still passed to the OnCommand callback",
+		},
+	}
+
+	for i, test := range tests {
+		t.Run(fmt.Sprint(i), func(t *testing.T) {
+			action := none
+
+			callbacks := types.CallbacksStruct{
+				OnCommandFunc: func(command *protobufs.ServerToAgentCommand) error {
+					switch command.Type {
+					case protobufs.ServerToAgentCommand_Restart:
+						action = restart
+					default:
+						action = unknown
+					}
+					return nil
+				},
+			}
+			receiver := NewReceiver(TestLogger{t}, callbacks, nil, nil)
+			receiver.processReceivedMessage(context.Background(), &protobufs.ServerToAgent{
+				Command: test.command,
+			})
+			assert.Equal(t, test.action, action, test.message)
+		})
+	}
+}
+
+func TestServerToAgentCommandExclusive(t *testing.T) {
+	calledCommand := false
+	calledRemoteConfig := false
+
+	callbacks := types.CallbacksStruct{
+		OnCommandFunc: func(command *protobufs.ServerToAgentCommand) error {
+			calledCommand = true
+			return nil
+		},
+		OnRemoteConfigFunc: func(ctx context.Context, remoteConfig *protobufs.AgentRemoteConfig) (effectiveConfig *protobufs.EffectiveConfig, configChanged bool, err error) {
+			calledRemoteConfig = true
+			return nil, false, nil
+		},
+	}
+	receiver := NewReceiver(TestLogger{t}, callbacks, nil, nil)
+	receiver.processReceivedMessage(context.Background(), &protobufs.ServerToAgent{
+		Command: &protobufs.ServerToAgentCommand{
+			Type: protobufs.ServerToAgentCommand_Restart,
+		},
+		RemoteConfig: &protobufs.AgentRemoteConfig{},
+	})
+	assert.Equal(t, true, calledCommand, "OnCommand should be called when a Command is specified")
+	assert.Equal(t, false, calledRemoteConfig, "OnRemoteConfig should not be called when a Command is specified")
+}