diff --git a/cmd/immuadmin/command/database.go b/cmd/immuadmin/command/database.go index 9769c0fd01..16ec2d6eb7 100644 --- a/cmd/immuadmin/command/database.go +++ b/cmd/immuadmin/command/database.go @@ -38,14 +38,14 @@ func addDbUpdateFlags(c *cobra.Command) { c.Flags().Bool("replication-is-replica", false, "set database as a replica") c.Flags().Bool("replication-sync-enabled", false, "enable synchronous replication") c.Flags().Uint32("replication-sync-acks", 0, "set a minimum number of replica acknowledgements required before transactions can be committed") - c.Flags().String("replication-master-database", "", "set master database to be replicated") - c.Flags().String("replication-master-address", "", "set master address") - c.Flags().Uint32("replication-master-port", 0, "set master port") - c.Flags().String("replication-follower-username", "", "set username used for replication") - c.Flags().String("replication-follower-password", "", "set password used for replication") + c.Flags().String("replication-primary-database", "", "set primary database to be replicated") + c.Flags().String("replication-primary-host", "", "set primary database host") + c.Flags().Uint32("replication-primary-port", 0, "set primary database port") + c.Flags().String("replication-primary-username", "", "set username used for replication to connect to the primary database") + c.Flags().String("replication-primary-password", "", "set password used for replication to connect to the primary database") c.Flags().Uint32("replication-prefetch-tx-buffer-size", uint32(replication.DefaultPrefetchTxBufferSize), "maximum number of prefeched transactions") c.Flags().Uint32("replication-commit-concurrency", uint32(replication.DefaultReplicationCommitConcurrency), "number of concurrent replications") - c.Flags().Bool("replication-allow-tx-discarding", replication.DefaultAllowTxDiscarding, "allow precommitted transactions to be discarded if the follower diverges from the master") + c.Flags().Bool("replication-allow-tx-discarding", replication.DefaultAllowTxDiscarding, "allow precommitted transactions to be discarded if the replica diverges from the primary") c.Flags().Uint32("write-tx-header-version", 1, "set write tx header version (use 0 for compatibility with immudb 1.1, 1 for immudb 1.2+)") c.Flags().Uint32("max-commit-concurrency", store.DefaultMaxConcurrency, "set the maximum commit concurrency") c.Flags().Duration("sync-frequency", store.DefaultSyncFrequency, "set the fsync frequency during commit process") @@ -53,9 +53,18 @@ func addDbUpdateFlags(c *cobra.Command) { c.Flags().Uint32("read-tx-pool-size", database.DefaultReadTxPoolSize, "set transaction read pool size (used for reading transaction objects)") c.Flags().Bool("autoload", true, "enable database autoloading") + flagNameMapping := map[string]string{ + "replication-enabled": "replication-is-replica", + "replication-follower-username": "replication-primary-username", + "replication-follower-password": "replication-primary-password", + "replication-master-database": "replication-primary-database", + "replication-master-address": "replication-primary-host", + "replication-master-port": "replication-primary-port", + } + c.Flags().SetNormalizeFunc(func(f *pflag.FlagSet, name string) pflag.NormalizedName { - if name == "replication-enabled" { - name = "replication-is-replica" + if newName, ok := flagNameMapping[name]; ok { + name = newName } return pflag.NormalizedName(name) }) @@ -390,27 +399,27 @@ func prepareDatabaseNullableSettings(flags *pflag.FlagSet) (*schema.DatabaseNull return nil, err } - ret.ReplicationSettings.MasterDatabase, err = condString("replication-master-database") + ret.ReplicationSettings.PrimaryDatabase, err = condString("replication-primary-database") if err != nil { return nil, err } - ret.ReplicationSettings.MasterAddress, err = condString("replication-master-address") + ret.ReplicationSettings.PrimaryHost, err = condString("replication-primary-host") if err != nil { return nil, err } - ret.ReplicationSettings.MasterPort, err = condUInt32("replication-master-port") + ret.ReplicationSettings.PrimaryPort, err = condUInt32("replication-primary-port") if err != nil { return nil, err } - ret.ReplicationSettings.FollowerUsername, err = condString("replication-follower-username") + ret.ReplicationSettings.PrimaryUsername, err = condString("replication-primary-username") if err != nil { return nil, err } - ret.ReplicationSettings.FollowerPassword, err = condString("replication-follower-password") + ret.ReplicationSettings.PrimaryPassword, err = condString("replication-primary-password") if err != nil { return nil, err } diff --git a/cmd/immuadmin/command/hot_backup.go b/cmd/immuadmin/command/hot_backup.go index 9956142eea..bd8012e312 100644 --- a/cmd/immuadmin/command/hot_backup.go +++ b/cmd/immuadmin/command/hot_backup.go @@ -541,7 +541,7 @@ func (cl *commandlineHotBck) useDb(name string, replica bool) (uint64, []byte, e } func (cl *commandlineHotBck) createDb(name string) error { - err := cl.immuClient.CreateDatabase(cl.context, &schema.DatabaseSettings{DatabaseName: name, Replica: true, MasterDatabase: "dummy"}) + err := cl.immuClient.CreateDatabase(cl.context, &schema.DatabaseSettings{DatabaseName: name, Replica: true, PrimaryDatabase: "dummy"}) if err != nil { return err } diff --git a/cmd/immudb/command/init.go b/cmd/immudb/command/init.go index c8fb3a404f..1cd734a95d 100644 --- a/cmd/immudb/command/init.go +++ b/cmd/immudb/command/init.go @@ -36,13 +36,13 @@ func (cl *Commandline) setupFlags(cmd *cobra.Command, options *server.Options) { cmd.Flags().Bool("replication-is-replica", false, "set systemdb and defaultdb as replica") cmd.Flags().Bool("replication-sync-enabled", false, "enable synchronous replication") cmd.Flags().Int("replication-sync-acks", 0, "set a minimum number of replica acknowledgements required before transactions can be committed") - cmd.Flags().String("replication-master-address", "", "master address (if replica=true)") - cmd.Flags().Int("replication-master-port", 3322, "master port (if replica=true)") - cmd.Flags().String("replication-follower-username", "", "username used for replication of systemdb and defaultdb") - cmd.Flags().String("replication-follower-password", "", "password used for replication of systemdb and defaultdb") + cmd.Flags().String("replication-primary-host", "", "primary database host (if replica=true)") + cmd.Flags().Int("replication-primary-port", 3322, "primary database port (if replica=true)") + cmd.Flags().String("replication-primary-username", "", "username in the primary database used for replication of systemdb and defaultdb") + cmd.Flags().String("replication-primary-password", "", "password in the primary database used for replication of systemdb and defaultdb") cmd.Flags().Int("replication-prefetch-tx-buffer-size", options.ReplicationOptions.PrefetchTxBufferSize, "maximum number of prefeched transactions") cmd.Flags().Int("replication-commit-concurrency", options.ReplicationOptions.ReplicationCommitConcurrency, "number of concurrent replications") - cmd.Flags().Bool("replication-allow-tx-discarding", replication.DefaultAllowTxDiscarding, "allow precommitted transactions to be discarded if the follower diverges from the master") + cmd.Flags().Bool("replication-allow-tx-discarding", replication.DefaultAllowTxDiscarding, "allow precommitted transactions to be discarded if the replica diverges from the primary") cmd.PersistentFlags().StringVar(&cl.config.CfgFn, "config", "", "config file (default path are configs or $HOME. Default filename is immudb.toml)") cmd.Flags().String("pidfile", options.Pidfile, "pid path with filename e.g. /var/run/immudb.pid") @@ -84,9 +84,18 @@ func (cl *Commandline) setupFlags(cmd *cobra.Command, options *server.Options) { cmd.Flags().Duration("sessions-guard-check-interval", 1*time.Minute, "sessions guard check interval") cmd.Flags().MarkHidden("sessions-guard-check-interval") + flagNameMapping := map[string]string{ + "replication-enabled": "replication-is-replica", + "replication-follower-username": "replication-primary-username", + "replication-follower-password": "replication-primary-password", + "replication-master-database": "replication-primary-database", + "replication-master-address": "replication-primary-host", + "replication-master-port": "replication-primary-port", + } + cmd.Flags().SetNormalizeFunc(func(f *pflag.FlagSet, name string) pflag.NormalizedName { - if name == "replication-enabled" { - name = "replication-is-replica" + if newName, ok := flagNameMapping[name]; ok { + name = newName } return pflag.NormalizedName(name) }) diff --git a/cmd/immudb/command/parse_options.go b/cmd/immudb/command/parse_options.go index 40fc9d56bc..3da6c74acf 100644 --- a/cmd/immudb/command/parse_options.go +++ b/cmd/immudb/command/parse_options.go @@ -36,10 +36,10 @@ func parseOptions() (options *server.Options, err error) { if replicationOptions.IsReplica { replicationOptions. - WithMasterAddress(viper.GetString("replication-master-address")). - WithMasterPort(viper.GetInt("replication-master-port")). - WithFollowerUsername(viper.GetString("replication-follower-username")). - WithFollowerPassword(viper.GetString("replication-follower-password")). + WithPrimaryHost(viper.GetString("replication-primary-host")). + WithPrimaryPort(viper.GetInt("replication-primary-port")). + WithPrimaryUsername(viper.GetString("replication-primary-username")). + WithPrimaryPassword(viper.GetString("replication-primary-password")). WithPrefetchTxBufferSize(viper.GetInt("replication-prefetch-tx-buffer-size")). WithReplicationCommitConcurrency(viper.GetInt("replication-commit-concurrency")). WithAllowTxDiscarding(viper.GetBool("replication-allow-tx-discarding")) diff --git a/embedded/store/immustore_test.go b/embedded/store/immustore_test.go index 3b7b5b684f..64b5cfb31b 100644 --- a/embedded/store/immustore_test.go +++ b/embedded/store/immustore_test.go @@ -2293,11 +2293,11 @@ func TestUncommittedTxOverwriting(t *testing.T) { } func TestExportAndReplicateTx(t *testing.T) { - masterDir := t.TempDir() + primaryDir := t.TempDir() - masterStore, err := Open(masterDir, DefaultOptions()) + primaryStore, err := Open(primaryDir, DefaultOptions()) require.NoError(t, err) - defer immustoreClose(t, masterStore) + defer immustoreClose(t, primaryStore) replicaDir := t.TempDir() @@ -2305,7 +2305,7 @@ func TestExportAndReplicateTx(t *testing.T) { require.NoError(t, err) defer immustoreClose(t, replicaStore) - tx, err := masterStore.NewWriteOnlyTx() + tx, err := primaryStore.NewWriteOnlyTx() require.NoError(t, err) tx.WithMetadata(NewTxMetadata()) @@ -2317,9 +2317,9 @@ func TestExportAndReplicateTx(t *testing.T) { require.NoError(t, err) require.NotNil(t, hdr) - txholder := tempTxHolder(t, masterStore) + txholder := tempTxHolder(t, primaryStore) - etx, err := masterStore.ExportTx(1, false, txholder) + etx, err := primaryStore.ExportTx(1, false, txholder) require.NoError(t, err) rhdr, err := replicaStore.ReplicateTx(etx, false) @@ -2334,11 +2334,11 @@ func TestExportAndReplicateTx(t *testing.T) { } func TestExportAndReplicateTxCornerCases(t *testing.T) { - masterDir := t.TempDir() + primaryDir := t.TempDir() - masterStore, err := Open(masterDir, DefaultOptions()) + primaryStore, err := Open(primaryDir, DefaultOptions()) require.NoError(t, err) - defer immustoreClose(t, masterStore) + defer immustoreClose(t, primaryStore) replicaDir := t.TempDir() @@ -2346,7 +2346,7 @@ func TestExportAndReplicateTxCornerCases(t *testing.T) { require.NoError(t, err) defer immustoreClose(t, replicaStore) - tx, err := masterStore.NewWriteOnlyTx() + tx, err := primaryStore.NewWriteOnlyTx() require.NoError(t, err) tx.WithMetadata(NewTxMetadata()) @@ -2358,10 +2358,10 @@ func TestExportAndReplicateTxCornerCases(t *testing.T) { require.NoError(t, err) require.NotNil(t, hdr) - txholder := tempTxHolder(t, masterStore) + txholder := tempTxHolder(t, primaryStore) t.Run("prevent replicating broken data", func(t *testing.T) { - etx, err := masterStore.ExportTx(1, false, txholder) + etx, err := primaryStore.ExportTx(1, false, txholder) require.NoError(t, err) for i := range etx { @@ -2392,11 +2392,11 @@ func TestExportAndReplicateTxCornerCases(t *testing.T) { } func TestExportAndReplicateTxSimultaneousWriters(t *testing.T) { - masterDir := t.TempDir() + primaryDir := t.TempDir() - masterStore, err := Open(masterDir, DefaultOptions()) + primaryStore, err := Open(primaryDir, DefaultOptions()) require.NoError(t, err) - defer immustoreClose(t, masterStore) + defer immustoreClose(t, primaryStore) replicaDir := t.TempDir() @@ -2409,7 +2409,7 @@ func TestExportAndReplicateTxSimultaneousWriters(t *testing.T) { for i := 0; i < txCount; i++ { t.Run(fmt.Sprintf("tx: %d", i), func(t *testing.T) { - tx, err := masterStore.NewWriteOnlyTx() + tx, err := primaryStore.NewWriteOnlyTx() require.NoError(t, err) tx.WithMetadata(NewTxMetadata()) @@ -2422,7 +2422,7 @@ func TestExportAndReplicateTxSimultaneousWriters(t *testing.T) { require.NotNil(t, hdr) txholder := tempTxHolder(t, replicaStore) - etx, err := masterStore.ExportTx(hdr.ID, false, txholder) + etx, err := primaryStore.ExportTx(hdr.ID, false, txholder) require.NoError(t, err) // Replicate the same transactions concurrently, only one must succeed @@ -2452,11 +2452,11 @@ func TestExportAndReplicateTxSimultaneousWriters(t *testing.T) { } func TestExportAndReplicateTxDisorderedReplication(t *testing.T) { - masterDir := t.TempDir() + primaryDir := t.TempDir() - masterStore, err := Open(masterDir, DefaultOptions()) + primaryStore, err := Open(primaryDir, DefaultOptions()) require.NoError(t, err) - defer immustoreClose(t, masterStore) + defer immustoreClose(t, primaryStore) replicaDir := t.TempDir() @@ -2472,7 +2472,7 @@ func TestExportAndReplicateTxDisorderedReplication(t *testing.T) { txholder := tempTxHolder(t, replicaStore) for i := 0; i < txCount; i++ { - tx, err := masterStore.NewWriteOnlyTx() + tx, err := primaryStore.NewWriteOnlyTx() require.NoError(t, err) tx.WithMetadata(NewTxMetadata()) @@ -2484,7 +2484,7 @@ func TestExportAndReplicateTxDisorderedReplication(t *testing.T) { require.NoError(t, err) require.NotNil(t, hdr) - etx, err := masterStore.ExportTx(hdr.ID, false, txholder) + etx, err := primaryStore.ExportTx(hdr.ID, false, txholder) require.NoError(t, err) etxs <- etx diff --git a/pkg/api/schema/docs.md b/pkg/api/schema/docs.md index 20faba7a2f..3ea59c5f5e 100644 --- a/pkg/api/schema/docs.md +++ b/pkg/api/schema/docs.md @@ -42,7 +42,6 @@ - [ExportTxRequest](#immudb.schema.ExportTxRequest) - [FlushIndexRequest](#immudb.schema.FlushIndexRequest) - [FlushIndexResponse](#immudb.schema.FlushIndexResponse) - - [FollowerState](#immudb.schema.FollowerState) - [HealthResponse](#immudb.schema.HealthResponse) - [HistoryRequest](#immudb.schema.HistoryRequest) - [ImmutableState](#immudb.schema.ImmutableState) @@ -79,6 +78,7 @@ - [Precondition.KeyNotModifiedAfterTXPrecondition](#immudb.schema.Precondition.KeyNotModifiedAfterTXPrecondition) - [Reference](#immudb.schema.Reference) - [ReferenceRequest](#immudb.schema.ReferenceRequest) + - [ReplicaState](#immudb.schema.ReplicaState) - [ReplicationNullableSettings](#immudb.schema.ReplicationNullableSettings) - [RetryInfo](#immudb.schema.RetryInfo) - [Row](#immudb.schema.Row) @@ -461,11 +461,11 @@ DEPRECATED | ----- | ---- | ----- | ----------- | | databaseName | [string](#string) | | Name of the database | | replica | [bool](#bool) | | If set to true, this database is replicating another database | -| masterDatabase | [string](#string) | | Name of the database to replicate | -| masterAddress | [string](#string) | | Hostname of the immudb instance with database to replicate | -| masterPort | [uint32](#uint32) | | Port of the immudb instance with database to replicate | -| followerUsername | [string](#string) | | Username of the user with read access of the database to replicate | -| followerPassword | [string](#string) | | Password of the user with read access of the database to replicate | +| primaryDatabase | [string](#string) | | Name of the database to replicate | +| primaryHost | [string](#string) | | Hostname of the immudb instance with database to replicate | +| primaryPort | [uint32](#uint32) | | Port of the immudb instance with database to replicate | +| primaryUsername | [string](#string) | | Username of the user with read access of the database to replicate | +| primaryPassword | [string](#string) | | Password of the user with read access of the database to replicate | | fileSize | [uint32](#uint32) | | Size of files stored on disk | | maxKeyLen | [uint32](#uint32) | | Maximum length of keys | | maxValueLen | [uint32](#uint32) | | Maximum length of values | @@ -744,7 +744,7 @@ DualProof contains inclusion and consistency proofs for dual Merkle-Tree + L | ----- | ---- | ----- | ----------- | | tx | [uint64](#uint64) | | Id of transaction to export | | allowPreCommitted | [bool](#bool) | | If set to true, non-committed transactions can be exported | -| followerState | [FollowerState](#immudb.schema.FollowerState) | | Used on synchronous replication to notify the master about follower state | +| replicaState | [ReplicaState](#immudb.schema.ReplicaState) | | Used on synchronous replication to notify the primary about replica state | @@ -782,25 +782,6 @@ DualProof contains inclusion and consistency proofs for dual Merkle-Tree + L - - -### FollowerState - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| UUID | [string](#string) | | | -| committedTxID | [uint64](#uint64) | | | -| committedAlh | [bytes](#bytes) | | | -| precommittedTxID | [uint64](#uint64) | | | -| precommittedAlh | [bytes](#bytes) | | | - - - - - - ### HealthResponse @@ -1399,6 +1380,25 @@ Only succeed if given key was not modified after given transaction + + +### ReplicaState + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| UUID | [string](#string) | | | +| committedTxID | [uint64](#uint64) | | | +| committedAlh | [bytes](#bytes) | | | +| precommittedTxID | [uint64](#uint64) | | | +| precommittedAlh | [bytes](#bytes) | | | + + + + + + ### ReplicationNullableSettings @@ -1408,16 +1408,16 @@ Only succeed if given key was not modified after given transaction | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | replica | [NullableBool](#immudb.schema.NullableBool) | | If set to true, this database is replicating another database | -| masterDatabase | [NullableString](#immudb.schema.NullableString) | | Name of the database to replicate | -| masterAddress | [NullableString](#immudb.schema.NullableString) | | Hostname of the immudb instance with database to replicate | -| masterPort | [NullableUint32](#immudb.schema.NullableUint32) | | Port of the immudb instance with database to replicate | -| followerUsername | [NullableString](#immudb.schema.NullableString) | | Username of the user with read access of the database to replicate | -| followerPassword | [NullableString](#immudb.schema.NullableString) | | Password of the user with read access of the database to replicate | +| primaryDatabase | [NullableString](#immudb.schema.NullableString) | | Name of the database to replicate | +| primaryHost | [NullableString](#immudb.schema.NullableString) | | Hostname of the immudb instance with database to replicate | +| primaryPort | [NullableUint32](#immudb.schema.NullableUint32) | | Port of the immudb instance with database to replicate | +| primaryUsername | [NullableString](#immudb.schema.NullableString) | | Username of the user with read access of the database to replicate | +| primaryPassword | [NullableString](#immudb.schema.NullableString) | | Password of the user with read access of the database to replicate | | syncReplication | [NullableBool](#immudb.schema.NullableBool) | | Enable synchronous replication | | syncAcks | [NullableUint32](#immudb.schema.NullableUint32) | | Number of confirmations from synchronous replicas required to commit a transaction | | prefetchTxBufferSize | [NullableUint32](#immudb.schema.NullableUint32) | | Maximum number of prefetched transactions | | replicationCommitConcurrency | [NullableUint32](#immudb.schema.NullableUint32) | | Number of concurrent replications | -| AllowTxDiscarding | [NullableBool](#immudb.schema.NullableBool) | | Allow precommitted transactions to be discarded if the follower diverges from the master | +| AllowTxDiscarding | [NullableBool](#immudb.schema.NullableBool) | | Allow precommitted transactions to be discarded if the replica diverges from the primary | diff --git a/pkg/api/schema/schema.pb.go b/pkg/api/schema/schema.pb.go index 4d09827160..7c5397a07c 100644 --- a/pkg/api/schema/schema.pb.go +++ b/pkg/api/schema/schema.pb.go @@ -4442,8 +4442,8 @@ type ExportTxRequest struct { Tx uint64 `protobuf:"varint,1,opt,name=tx,proto3" json:"tx,omitempty"` // If set to true, non-committed transactions can be exported AllowPreCommitted bool `protobuf:"varint,2,opt,name=allowPreCommitted,proto3" json:"allowPreCommitted,omitempty"` - // Used on synchronous replication to notify the master about follower state - FollowerState *FollowerState `protobuf:"bytes,3,opt,name=followerState,proto3" json:"followerState,omitempty"` + // Used on synchronous replication to notify the primary about replica state + ReplicaState *ReplicaState `protobuf:"bytes,3,opt,name=replicaState,proto3" json:"replicaState,omitempty"` } func (x *ExportTxRequest) Reset() { @@ -4492,14 +4492,14 @@ func (x *ExportTxRequest) GetAllowPreCommitted() bool { return false } -func (x *ExportTxRequest) GetFollowerState() *FollowerState { +func (x *ExportTxRequest) GetReplicaState() *ReplicaState { if x != nil { - return x.FollowerState + return x.ReplicaState } return nil } -type FollowerState struct { +type ReplicaState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -4511,8 +4511,8 @@ type FollowerState struct { PrecommittedAlh []byte `protobuf:"bytes,5,opt,name=precommittedAlh,proto3" json:"precommittedAlh,omitempty"` } -func (x *FollowerState) Reset() { - *x = FollowerState{} +func (x *ReplicaState) Reset() { + *x = ReplicaState{} if protoimpl.UnsafeEnabled { mi := &file_schema_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4520,13 +4520,13 @@ func (x *FollowerState) Reset() { } } -func (x *FollowerState) String() string { +func (x *ReplicaState) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FollowerState) ProtoMessage() {} +func (*ReplicaState) ProtoMessage() {} -func (x *FollowerState) ProtoReflect() protoreflect.Message { +func (x *ReplicaState) ProtoReflect() protoreflect.Message { mi := &file_schema_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4538,40 +4538,40 @@ func (x *FollowerState) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FollowerState.ProtoReflect.Descriptor instead. -func (*FollowerState) Descriptor() ([]byte, []int) { +// Deprecated: Use ReplicaState.ProtoReflect.Descriptor instead. +func (*ReplicaState) Descriptor() ([]byte, []int) { return file_schema_proto_rawDescGZIP(), []int{62} } -func (x *FollowerState) GetUUID() string { +func (x *ReplicaState) GetUUID() string { if x != nil { return x.UUID } return "" } -func (x *FollowerState) GetCommittedTxID() uint64 { +func (x *ReplicaState) GetCommittedTxID() uint64 { if x != nil { return x.CommittedTxID } return 0 } -func (x *FollowerState) GetCommittedAlh() []byte { +func (x *ReplicaState) GetCommittedAlh() []byte { if x != nil { return x.CommittedAlh } return nil } -func (x *FollowerState) GetPrecommittedTxID() uint64 { +func (x *ReplicaState) GetPrecommittedTxID() uint64 { if x != nil { return x.PrecommittedTxID } return 0 } -func (x *FollowerState) GetPrecommittedAlh() []byte { +func (x *ReplicaState) GetPrecommittedAlh() []byte { if x != nil { return x.PrecommittedAlh } @@ -4636,15 +4636,15 @@ type DatabaseSettings struct { // If set to true, this database is replicating another database Replica bool `protobuf:"varint,2,opt,name=replica,proto3" json:"replica,omitempty"` // Name of the database to replicate - MasterDatabase string `protobuf:"bytes,3,opt,name=masterDatabase,proto3" json:"masterDatabase,omitempty"` + PrimaryDatabase string `protobuf:"bytes,3,opt,name=primaryDatabase,proto3" json:"primaryDatabase,omitempty"` // Hostname of the immudb instance with database to replicate - MasterAddress string `protobuf:"bytes,4,opt,name=masterAddress,proto3" json:"masterAddress,omitempty"` + PrimaryHost string `protobuf:"bytes,4,opt,name=primaryHost,proto3" json:"primaryHost,omitempty"` // Port of the immudb instance with database to replicate - MasterPort uint32 `protobuf:"varint,5,opt,name=masterPort,proto3" json:"masterPort,omitempty"` + PrimaryPort uint32 `protobuf:"varint,5,opt,name=primaryPort,proto3" json:"primaryPort,omitempty"` // Username of the user with read access of the database to replicate - FollowerUsername string `protobuf:"bytes,6,opt,name=followerUsername,proto3" json:"followerUsername,omitempty"` + PrimaryUsername string `protobuf:"bytes,6,opt,name=primaryUsername,proto3" json:"primaryUsername,omitempty"` // Password of the user with read access of the database to replicate - FollowerPassword string `protobuf:"bytes,7,opt,name=followerPassword,proto3" json:"followerPassword,omitempty"` + PrimaryPassword string `protobuf:"bytes,7,opt,name=primaryPassword,proto3" json:"primaryPassword,omitempty"` // Size of files stored on disk FileSize uint32 `protobuf:"varint,8,opt,name=fileSize,proto3" json:"fileSize,omitempty"` // Maximum length of keys @@ -4703,37 +4703,37 @@ func (x *DatabaseSettings) GetReplica() bool { return false } -func (x *DatabaseSettings) GetMasterDatabase() string { +func (x *DatabaseSettings) GetPrimaryDatabase() string { if x != nil { - return x.MasterDatabase + return x.PrimaryDatabase } return "" } -func (x *DatabaseSettings) GetMasterAddress() string { +func (x *DatabaseSettings) GetPrimaryHost() string { if x != nil { - return x.MasterAddress + return x.PrimaryHost } return "" } -func (x *DatabaseSettings) GetMasterPort() uint32 { +func (x *DatabaseSettings) GetPrimaryPort() uint32 { if x != nil { - return x.MasterPort + return x.PrimaryPort } return 0 } -func (x *DatabaseSettings) GetFollowerUsername() string { +func (x *DatabaseSettings) GetPrimaryUsername() string { if x != nil { - return x.FollowerUsername + return x.PrimaryUsername } return "" } -func (x *DatabaseSettings) GetFollowerPassword() string { +func (x *DatabaseSettings) GetPrimaryPassword() string { if x != nil { - return x.FollowerPassword + return x.PrimaryPassword } return "" } @@ -5615,15 +5615,15 @@ type ReplicationNullableSettings struct { // If set to true, this database is replicating another database Replica *NullableBool `protobuf:"bytes,1,opt,name=replica,proto3" json:"replica,omitempty"` // Name of the database to replicate - MasterDatabase *NullableString `protobuf:"bytes,2,opt,name=masterDatabase,proto3" json:"masterDatabase,omitempty"` + PrimaryDatabase *NullableString `protobuf:"bytes,2,opt,name=primaryDatabase,proto3" json:"primaryDatabase,omitempty"` // Hostname of the immudb instance with database to replicate - MasterAddress *NullableString `protobuf:"bytes,3,opt,name=masterAddress,proto3" json:"masterAddress,omitempty"` + PrimaryHost *NullableString `protobuf:"bytes,3,opt,name=primaryHost,proto3" json:"primaryHost,omitempty"` // Port of the immudb instance with database to replicate - MasterPort *NullableUint32 `protobuf:"bytes,4,opt,name=masterPort,proto3" json:"masterPort,omitempty"` + PrimaryPort *NullableUint32 `protobuf:"bytes,4,opt,name=primaryPort,proto3" json:"primaryPort,omitempty"` // Username of the user with read access of the database to replicate - FollowerUsername *NullableString `protobuf:"bytes,5,opt,name=followerUsername,proto3" json:"followerUsername,omitempty"` + PrimaryUsername *NullableString `protobuf:"bytes,5,opt,name=primaryUsername,proto3" json:"primaryUsername,omitempty"` // Password of the user with read access of the database to replicate - FollowerPassword *NullableString `protobuf:"bytes,6,opt,name=followerPassword,proto3" json:"followerPassword,omitempty"` + PrimaryPassword *NullableString `protobuf:"bytes,6,opt,name=primaryPassword,proto3" json:"primaryPassword,omitempty"` // Enable synchronous replication SyncReplication *NullableBool `protobuf:"bytes,7,opt,name=syncReplication,proto3" json:"syncReplication,omitempty"` // Number of confirmations from synchronous replicas required to commit a transaction @@ -5632,7 +5632,7 @@ type ReplicationNullableSettings struct { PrefetchTxBufferSize *NullableUint32 `protobuf:"bytes,9,opt,name=prefetchTxBufferSize,proto3" json:"prefetchTxBufferSize,omitempty"` // Number of concurrent replications ReplicationCommitConcurrency *NullableUint32 `protobuf:"bytes,10,opt,name=replicationCommitConcurrency,proto3" json:"replicationCommitConcurrency,omitempty"` - // Allow precommitted transactions to be discarded if the follower diverges from the master + // Allow precommitted transactions to be discarded if the replica diverges from the primary AllowTxDiscarding *NullableBool `protobuf:"bytes,11,opt,name=AllowTxDiscarding,proto3" json:"AllowTxDiscarding,omitempty"` } @@ -5675,37 +5675,37 @@ func (x *ReplicationNullableSettings) GetReplica() *NullableBool { return nil } -func (x *ReplicationNullableSettings) GetMasterDatabase() *NullableString { +func (x *ReplicationNullableSettings) GetPrimaryDatabase() *NullableString { if x != nil { - return x.MasterDatabase + return x.PrimaryDatabase } return nil } -func (x *ReplicationNullableSettings) GetMasterAddress() *NullableString { +func (x *ReplicationNullableSettings) GetPrimaryHost() *NullableString { if x != nil { - return x.MasterAddress + return x.PrimaryHost } return nil } -func (x *ReplicationNullableSettings) GetMasterPort() *NullableUint32 { +func (x *ReplicationNullableSettings) GetPrimaryPort() *NullableUint32 { if x != nil { - return x.MasterPort + return x.PrimaryPort } return nil } -func (x *ReplicationNullableSettings) GetFollowerUsername() *NullableString { +func (x *ReplicationNullableSettings) GetPrimaryUsername() *NullableString { if x != nil { - return x.FollowerUsername + return x.PrimaryUsername } return nil } -func (x *ReplicationNullableSettings) GetFollowerPassword() *NullableString { +func (x *ReplicationNullableSettings) GetPrimaryPassword() *NullableString { if x != nil { - return x.FollowerPassword + return x.PrimaryPassword } return nil } @@ -8767,1031 +8767,1031 @@ var file_schema_proto_rawDesc = []byte{ 0x61, 0x69, 0x74, 0x22, 0x2d, 0x0a, 0x06, 0x54, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, 0x03, 0x74, - 0x78, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, + 0x78, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0d, 0x46, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x24, - 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x54, 0x78, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x41, 0x6c, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x54, 0x78, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x70, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x22, 0x2e, - 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc4, - 0x03, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x2a, 0x0a, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4c, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x66, 0x4e, 0x6f, - 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, - 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x16, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, 0x22, 0x78, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, + 0x74, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, + 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x64, 0x41, 0x6c, 0x68, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, + 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x44, + 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x41, 0x6c, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x6c, 0x68, 0x22, 0x2e, 0x0a, 0x08, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc0, 0x03, 0x0a, 0x10, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x0a, + 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, + 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x78, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, + 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, + 0x2c, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x92, 0x01, + 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0x79, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x45, 0x78, 0x69, 0x73, 0x74, 0x65, 0x64, 0x22, 0x78, + 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x79, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2c, 0x0a, 0x14, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8a, 0x0b, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x5c, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x39, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, - 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, - 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, - 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, - 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x6e, 0x67, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7b, + 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x26, 0x0a, 0x0e, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, + 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x75, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x2c, 0x0a, 0x14, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, + 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8a, + 0x0b, 0x0a, 0x18, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5c, 0x0a, 0x13, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x66, 0x69, 0x6c, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, + 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x4c, 0x65, + 0x6e, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x65, 0x6e, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, + 0x65, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x43, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, - 0x49, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, 0x74, 0x78, - 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x52, 0x0e, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x76, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, - 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x76, 0x4c, - 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x4f, 0x0a, 0x13, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, - 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x13, 0x74, 0x78, - 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, - 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, + 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, + 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x4f, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x12, 0x45, 0x0a, 0x0e, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x74, 0x78, 0x4c, 0x6f, 0x67, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x76, 0x4c, 0x6f, + 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x76, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, + 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x13, 0x74, 0x78, 0x4c, 0x6f, + 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x52, 0x13, 0x74, 0x78, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, + 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x51, + 0x0a, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x14, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, + 0x52, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x45, 0x0a, 0x0e, 0x72, 0x65, + 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, - 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, - 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x52, 0x14, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x61, 0x75, 0x74, - 0x6f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, + 0x32, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x0d, 0x73, + 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x47, 0x0a, 0x0f, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x48, 0x54, 0x4e, 0x75, + 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, + 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xb4, 0x06, 0x0a, 0x1b, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0x45, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x69, 0x7a, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x54, - 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x73, 0x79, 0x6e, - 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x44, 0x0a, - 0x0b, 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x41, 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x61, 0x68, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x22, 0xb8, 0x06, 0x0a, 0x1b, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x0e, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x43, 0x0a, 0x0d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0b, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x47, 0x0a, + 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, + 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x45, 0x0a, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0a, 0x6d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x49, 0x0a, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, + 0x6b, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, + 0x73, 0x12, 0x51, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x49, 0x0a, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x14, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x61, 0x0a, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x72, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x45, 0x0a, 0x0f, 0x73, - 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x52, 0x0f, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, 0x73, 0x18, 0x08, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x54, 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, + 0x11, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x22, 0xfb, 0x07, 0x0a, 0x15, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x45, 0x0a, 0x0e, + 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x6b, 0x73, 0x12, 0x51, 0x0a, - 0x14, 0x70, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, + 0x74, 0x33, 0x32, 0x52, 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, + 0x6f, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x14, 0x70, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x54, 0x78, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x61, 0x0a, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x11, 0x41, 0x6c, 0x6c, - 0x6f, 0x77, 0x54, 0x78, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xfb, - 0x07, 0x0a, 0x15, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x45, 0x0a, 0x0e, 0x66, 0x6c, 0x75, 0x73, - 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, 0x6e, + 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x52, 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, + 0x66, 0x74, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x15, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, + 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x55, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, + 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x0e, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, - 0x43, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, + 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x57, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, + 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, + 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0f, 0x66, + 0x6c, 0x75, 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x52, 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4a, 0x0a, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x11, 0x63, + 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x22, 0xa3, 0x01, 0x0a, 0x13, 0x41, 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, + 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, + 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x47, 0x0a, + 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x12, 0x6d, - 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x6f, - 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x12, 0x72, 0x65, - 0x6e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x12, 0x45, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, - 0x6c, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, - 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x15, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x16, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x16, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, - 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x52, 0x18, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x6f, 0x67, - 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x57, - 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, - 0x65, 0x6e, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x17, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4d, 0x61, 0x78, 0x4f, 0x70, 0x65, 0x6e, - 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, - 0x0f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x4a, 0x0a, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, - 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0xa3, 0x01, 0x0a, - 0x13, 0x41, 0x48, 0x54, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x63, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x47, 0x0a, 0x0f, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, - 0x7a, 0x65, 0x22, 0x31, 0x0a, 0x13, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x55, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x34, - 0x0a, 0x16, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x31, 0x0a, 0x13, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, - 0x59, 0x0a, 0x11, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x22, 0x30, 0x0a, 0x12, 0x46, 0x6c, - 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x05, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x70, - 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, - 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x70, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, - 0x61, 0x74, 0x54, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x81, - 0x01, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x71, - 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, - 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, - 0x54, 0x78, 0x22, 0x79, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, - 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x74, 0x78, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x07, - 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x0c, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x12, 0x45, 0x0a, 0x0e, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, - 0x4b, 0x49, 0x44, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x50, 0x4b, 0x49, 0x44, - 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, - 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, - 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, - 0x79, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x0a, - 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x1a, - 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x28, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4a, - 0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x14, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x09, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x56, 0x32, 0x22, 0x5b, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x12, 0x41, 0x0a, 0x09, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, - 0x87, 0x01, 0x0a, 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x22, 0x21, 0x0a, 0x05, 0x43, 0x68, 0x75, - 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x4e, 0x0a, 0x12, - 0x55, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x12, 0x1e, 0x0a, 0x0a, - 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x22, 0x6d, 0x0a, 0x0e, - 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, - 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, 0x7c, 0x0a, 0x0f, 0x53, - 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, - 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x75, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x65, 0x75, 0x73, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x4f, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, - 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x14, 0x4c, 0x6f, 0x61, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, + 0x15, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x34, 0x0a, + 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x11, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x6c, 0x65, 0x61, + 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x11, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x22, 0x30, + 0x0a, 0x12, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x22, 0x25, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x33, 0x0a, 0x08, 0x70, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x70, 0x6b, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x54, 0x78, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x61, 0x74, 0x54, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x54, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, + 0x54, 0x78, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, + 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x0d, 0x73, 0x71, 0x6c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, + 0x54, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x53, + 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, 0x22, 0x79, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x74, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x56, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x87, 0x07, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x73, 0x71, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3f, 0x0a, + 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, + 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x12, 0x45, + 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x50, 0x4b, 0x49, 0x44, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, + 0x50, 0x4b, 0x49, 0x44, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x12, 0x57, + 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x49, 0x64, + 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0c, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x79, 0x49, 0x64, + 0x12, 0x51, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, 0x49, 0x64, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, 0x79, + 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, 0x42, + 0x79, 0x49, 0x64, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x49, 0x64, 0x73, 0x42, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x4c, 0x65, 0x6e, + 0x42, 0x79, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x28, 0x0a, 0x10, 0x55, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4d, + 0x0a, 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x22, 0x17, 0x0a, + 0x15, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x56, 0x32, 0x22, 0x5b, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, + 0x12, 0x41, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x22, 0x21, 0x0a, + 0x05, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x22, 0x4e, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x78, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x78, + 0x22, 0x6d, 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x73, 0x71, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6e, 0x6f, 0x57, 0x61, 0x69, 0x74, 0x22, + 0x7c, 0x0a, 0x0f, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x73, 0x71, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x75, 0x73, 0x65, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x72, 0x65, 0x75, 0x73, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x4f, 0x0a, + 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, + 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, + 0x0a, 0x0d, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x2f, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x22, 0xdd, + 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, + 0x78, 0x12, 0x2f, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x6f, 0x77, 0x73, 0x12, 0x5c, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x4c, 0x61, 0x73, + 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, + 0x4b, 0x73, 0x12, 0x5f, 0x0a, 0x10, 0x66, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x46, 0x69, 0x72, 0x73, + 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x66, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, + 0x50, 0x4b, 0x73, 0x1a, 0x5b, 0x0a, 0x14, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x65, 0x64, 0x50, 0x4b, 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, 0x2d, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x5c, 0x0a, 0x15, 0x46, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, + 0x64, 0x50, 0x4b, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x0d, 0x53, 0x51, - 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x03, 0x74, - 0x78, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x52, 0x03, 0x74, 0x78, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x22, 0xdd, 0x03, 0x0a, 0x0e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x12, 0x2f, 0x0a, - 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, - 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, - 0x12, 0x5c, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x50, 0x4b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6c, - 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x12, 0x5f, - 0x0a, 0x10, 0x66, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, - 0x4b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 0x73, 0x1a, - 0x5b, 0x0a, 0x14, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, - 0x4b, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x15, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x50, 0x4b, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x0e, 0x53, 0x51, - 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x07, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x26, 0x0a, - 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x52, - 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x50, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x18, - 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x08, 0x53, 0x51, - 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x01, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x01, 0x6e, 0x12, 0x0e, 0x0a, 0x01, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x01, 0x73, 0x12, 0x0e, 0x0a, 0x01, 0x62, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x10, 0x0a, 0x02, 0x62, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x02, 0x62, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x74, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x02, 0x74, 0x73, 0x42, 0x07, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x39, 0x0a, 0x0c, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x22, 0x35, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x35, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x22, 0x21, - 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x63, - 0x6b, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x2a, - 0x4b, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x10, 0x00, 0x12, - 0x0f, 0x0a, 0x0b, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x44, 0x49, 0x47, 0x45, 0x53, 0x54, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x41, 0x57, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, - 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x10, 0x03, 0x2a, 0x29, 0x0a, 0x10, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, - 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x06, 0x54, 0x78, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x10, 0x02, 0x32, 0xea, 0x32, - 0x0a, 0x0b, 0x49, 0x6d, 0x6d, 0x75, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, - 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x12, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x58, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x22, - 0x05, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x0e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x10, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3a, - 0x01, 0x2a, 0x12, 0x6c, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, - 0x73, 0x65, 0x74, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x3a, 0x01, 0x2a, - 0x12, 0x4a, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, + 0x0a, 0x0e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x12, 0x26, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0x30, 0x0a, 0x06, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x50, 0x0a, 0x03, 0x52, + 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x99, 0x01, + 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x75, + 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x01, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x01, 0x6e, 0x12, 0x0e, 0x0a, 0x01, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x01, 0x73, 0x12, 0x0e, 0x0a, 0x01, + 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x10, 0x0a, 0x02, + 0x62, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x02, 0x62, 0x73, 0x12, 0x10, + 0x0a, 0x02, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x02, 0x74, 0x73, + 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x39, 0x0a, 0x0c, 0x4e, 0x65, 0x77, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, + 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x35, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x35, 0x0a, 0x09, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x75, + 0x73, 0x65, 0x22, 0x21, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x63, 0x6b, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x79, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x64, 0x65, 0x6c, 0x61, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x2a, 0x4b, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, + 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x44, 0x49, 0x47, 0x45, + 0x53, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x41, 0x57, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x10, 0x03, + 0x2a, 0x29, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x06, 0x54, + 0x78, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, + 0x79, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, + 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x65, 0x61, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x10, + 0x02, 0x32, 0xea, 0x32, 0x0a, 0x0b, 0x49, 0x6d, 0x6d, 0x75, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x50, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x10, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0a, 0x22, 0x05, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, + 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x20, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x75, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x6c, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x74, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, + 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, + 0x12, 0x4a, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4a, 0x0a, 0x10, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x56, 0x0a, 0x0b, + 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, + 0x69, 0x76, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x56, 0x0a, 0x0b, 0x4f, 0x70, 0x65, 0x6e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x40, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x12, 0x1b, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, + 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x22, 0x00, 0x12, 0x3c, + 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, + 0x54, 0x78, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, + 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x12, 0x44, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, + 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0a, 0x54, 0x78, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x00, 0x12, 0x5d, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4e, 0x65, 0x77, 0x54, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x64, 0x53, 0x51, 0x4c, 0x54, 0x78, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x08, 0x52, 0x6f, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x54, 0x78, 0x53, 0x51, - 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4d, - 0x0a, 0x0a, 0x54, 0x78, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x5d, 0x0a, - 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x19, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x06, 0x2f, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, 0x4f, 0x0a, 0x06, - 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x15, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0c, 0x22, 0x07, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x4d, 0x0a, - 0x03, 0x53, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, - 0x22, 0x07, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x0d, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x23, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, - 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x4d, - 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, - 0x2f, 0x64, 0x62, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x73, 0x0a, - 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x12, 0x23, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x64, 0x62, - 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x74, 0x3a, - 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, + 0x22, 0x06, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x02, 0x62, 0x00, + 0x12, 0x4f, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x15, 0x88, 0x02, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x07, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, + 0x2a, 0x12, 0x4d, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x12, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x07, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x3a, 0x01, 0x2a, + 0x12, 0x70, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, + 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x54, 0x78, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x64, 0x62, + 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x3a, + 0x01, 0x2a, 0x12, 0x4d, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x6b, 0x65, 0x79, + 0x7d, 0x12, 0x73, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, + 0x65, 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, + 0x12, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, + 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x15, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x12, 0x56, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, + 0x2f, 0x67, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x59, 0x0a, 0x07, 0x45, 0x78, + 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x16, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x61, + 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x4f, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, + 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x73, + 0x63, 0x61, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4b, 0x65, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x64, + 0x62, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, + 0x12, 0x53, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x4a, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x79, 0x49, 0x64, 0x12, + 0x18, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x22, 0x13, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x78, 0x2f, 0x7b, 0x74, 0x78, + 0x7d, 0x12, 0x73, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x78, 0x42, 0x79, 0x49, 0x64, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, + 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, + 0x78, 0x2f, 0x7b, 0x74, 0x78, 0x7d, 0x12, 0x50, 0x0a, 0x06, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, + 0x12, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, - 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, - 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x56, - 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, - 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x67, 0x65, 0x74, - 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x59, 0x0a, 0x07, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, - 0x6c, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x3a, 0x01, - 0x2a, 0x12, 0x4f, 0x0a, 0x04, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x13, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x63, 0x61, 0x6e, 0x3a, - 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x12, 0x53, 0x0a, 0x08, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x78, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x06, 0x2f, + 0x64, 0x62, 0x2f, 0x74, 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3a, + 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, + 0x55, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, 0x68, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x14, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x6c, - 0x6c, 0x12, 0x4a, 0x0a, 0x06, 0x54, 0x78, 0x42, 0x79, 0x49, 0x64, 0x12, 0x18, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, - 0x12, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x78, 0x2f, 0x7b, 0x74, 0x78, 0x7d, 0x12, 0x73, 0x0a, - 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x42, 0x79, 0x49, - 0x64, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, + 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x92, 0x41, 0x02, 0x62, 0x00, + 0x12, 0x5d, 0x0a, 0x0c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, + 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, + 0x65, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x22, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x29, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x22, 0x1b, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x50, 0x0a, 0x04, 0x5a, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x13, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x61, 0x64, 0x64, + 0x3a, 0x01, 0x2a, 0x12, 0x73, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x5a, 0x41, 0x64, 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, 0x2f, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x74, 0x78, 0x2f, 0x7b, 0x74, - 0x78, 0x7d, 0x12, 0x50, 0x0a, 0x06, 0x54, 0x78, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1c, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x53, - 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x06, 0x2f, 0x64, 0x62, 0x2f, 0x74, - 0x78, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, - 0x2f, 0x64, 0x62, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x6b, - 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, 0x55, 0x0a, 0x06, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x92, 0x41, 0x02, - 0x62, 0x00, 0x12, 0x68, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x64, 0x62, - 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, 0x5d, 0x0a, 0x0c, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, + 0x22, 0x13, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x2f, 0x7a, 0x61, 0x64, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x53, 0x0a, 0x05, 0x5a, 0x53, 0x63, 0x61, + 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, + 0x09, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x73, 0x63, 0x61, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x5b, 0x0a, + 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x18, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, + 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x12, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x88, 0x02, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x77, 0x69, 0x74, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, + 0x22, 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x3a, + 0x01, 0x2a, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x01, 0x2a, + 0x12, 0x74, 0x0a, 0x0e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, + 0x64, 0x62, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x0c, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x64, 0x62, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x92, 0x41, 0x02, 0x62, 0x00, 0x12, 0x65, 0x0a, 0x0c, 0x53, - 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, - 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, - 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, - 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x50, 0x0a, - 0x04, 0x5a, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x7a, 0x61, 0x64, 0x64, 0x3a, 0x01, 0x2a, 0x12, - 0x73, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, 0x64, - 0x64, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5a, 0x41, 0x64, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x78, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x64, - 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x7a, 0x61, 0x64, - 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x53, 0x0a, 0x05, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1b, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x53, - 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, 0x45, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x64, 0x62, - 0x2f, 0x7a, 0x73, 0x63, 0x61, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x88, 0x02, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, + 0x2a, 0x12, 0x75, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x32, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, + 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, + 0x73, 0x74, 0x2f, 0x76, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x1a, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x55, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, 0x2f, 0x75, + 0x73, 0x65, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0x63, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x88, 0x02, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x57, 0x69, 0x74, 0x68, 0x12, 0x1f, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1c, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x22, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x77, 0x69, 0x74, 0x68, - 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x64, - 0x62, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x6c, - 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4c, - 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, - 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0e, - 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3a, - 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x63, 0x0a, 0x0c, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, + 0x0d, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x3a, 0x01, + 0x2a, 0x12, 0x6a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, - 0x22, 0x08, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, - 0x0e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x32, 0x12, - 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x56, 0x32, 0x1a, 0x25, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x22, 0x16, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, - 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x1a, 0x1f, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x73, 0x65, 0x2f, 0x7b, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x63, 0x0a, - 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, - 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x1a, 0x1f, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x22, 0x1a, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x64, + 0x62, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x88, 0x02, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x64, 0x62, - 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x69, - 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x1a, 0x88, - 0x02, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x64, - 0x62, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, 0x32, 0x3a, 0x01, 0x2a, - 0x12, 0x69, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, - 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x64, 0x62, - 0x2f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x58, 0x0a, 0x0c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, - 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, + 0x22, 0x0f, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x76, + 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x69, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x20, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, + 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x58, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x09, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x47, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x09, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, + 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x13, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, + 0x65, 0x74, 0x12, 0x23, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, + 0x01, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, + 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1b, + 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x00, 0x28, 0x01, 0x12, + 0x42, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, + 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, + 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x44, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x53, 0x63, + 0x61, 0x6e, 0x12, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, + 0x63, 0x41, 0x6c, 0x6c, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x12, 0x23, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x54, 0x78, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, - 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x1b, 0x2e, 0x69, 0x6d, 0x6d, - 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x78, 0x22, 0x00, 0x28, 0x01, 0x12, 0x42, 0x0a, 0x0a, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6d, 0x6d, 0x75, - 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, - 0x44, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1b, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x5a, - 0x53, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, - 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, - 0x42, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x65, 0x63, 0x41, 0x6c, 0x6c, - 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, - 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x12, - 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x0b, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x78, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, - 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x1a, 0x17, - 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, - 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, 0x5e, 0x0a, 0x07, 0x53, - 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x64, 0x62, - 0x2f, 0x73, 0x71, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x08, 0x53, - 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, + 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x40, 0x0a, + 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x78, 0x12, 0x14, 0x2e, 0x69, + 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x1a, 0x17, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x54, 0x78, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x12, + 0x5e, 0x0a, 0x07, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, + 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, + 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x45, 0x78, 0x65, + 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, + 0x0b, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x3a, 0x01, 0x2a, 0x12, + 0x62, 0x0a, 0x08, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, + 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x3a, 0x01, 0x2a, 0x12, 0x5b, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, + 0x12, 0x0e, 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, + 0x12, 0x5b, 0x0a, 0x0d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x14, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, - 0x2f, 0x64, 0x62, 0x2f, 0x73, 0x71, 0x6c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0x12, - 0x5b, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x64, - 0x62, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x0d, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x64, 0x62, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x10, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x12, 0x26, 0x2e, - 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, - 0x22, 0x15, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x2f, 0x73, 0x71, 0x6c, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x8b, 0x03, 0x5a, 0x2b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x6e, 0x6f, - 0x74, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x92, 0x41, 0xda, 0x02, 0x12, 0xee, - 0x01, 0x0a, 0x0f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x20, 0x52, 0x45, 0x53, 0x54, 0x20, 0x41, - 0x50, 0x49, 0x12, 0xda, 0x01, 0x3c, 0x62, 0x3e, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x41, 0x4e, - 0x54, 0x3c, 0x2f, 0x62, 0x3e, 0x3a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, - 0x3e, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x61, 0x66, 0x65, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x63, - 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x6b, 0x65, 0x79, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x69, - 0x6c, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x65, 0x74, - 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, - 0x65, 0x3e, 0x73, 0x61, 0x66, 0x65, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x2e, 0x5a, - 0x59, 0x0a, 0x57, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x4d, 0x08, 0x02, 0x12, - 0x38, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, - 0x72, 0x20, 0x3c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3e, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a, 0x0a, 0x06, - 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, + 0x2f, 0x64, 0x62, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, + 0x10, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, 0x65, + 0x74, 0x12, 0x26, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6d, 0x6d, 0x75, + 0x64, 0x62, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x51, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x20, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x64, 0x62, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x71, 0x6c, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x8b, + 0x03, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x92, 0x41, + 0xda, 0x02, 0x12, 0xee, 0x01, 0x0a, 0x0f, 0x69, 0x6d, 0x6d, 0x75, 0x64, 0x62, 0x20, 0x52, 0x45, + 0x53, 0x54, 0x20, 0x41, 0x50, 0x49, 0x12, 0xda, 0x01, 0x3c, 0x62, 0x3e, 0x49, 0x4d, 0x50, 0x4f, + 0x52, 0x54, 0x41, 0x4e, 0x54, 0x3c, 0x2f, 0x62, 0x3e, 0x3a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x3c, + 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x61, 0x66, 0x65, 0x67, 0x65, + 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, + 0x65, 0x36, 0x34, 0x2d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, + 0x6b, 0x65, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, + 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, + 0x3e, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x73, 0x61, 0x66, 0x65, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, + 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x20, 0x3c, 0x75, 0x3e, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2d, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x75, 0x3e, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x2e, 0x5a, 0x59, 0x0a, 0x57, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, + 0x4d, 0x08, 0x02, 0x12, 0x38, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x3a, 0x20, 0x42, + 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x3c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3e, 0x1a, 0x0d, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, + 0x0a, 0x0a, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9874,7 +9874,7 @@ var file_schema_proto_goTypes = []interface{}{ (*TxScanRequest)(nil), // 62: immudb.schema.TxScanRequest (*TxList)(nil), // 63: immudb.schema.TxList (*ExportTxRequest)(nil), // 64: immudb.schema.ExportTxRequest - (*FollowerState)(nil), // 65: immudb.schema.FollowerState + (*ReplicaState)(nil), // 65: immudb.schema.ReplicaState (*Database)(nil), // 66: immudb.schema.Database (*DatabaseSettings)(nil), // 67: immudb.schema.DatabaseSettings (*CreateDatabaseRequest)(nil), // 68: immudb.schema.CreateDatabaseRequest @@ -9993,7 +9993,7 @@ var file_schema_proto_depIdxs = []int32{ 59, // 48: immudb.schema.VerifiableTxRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec 59, // 49: immudb.schema.TxScanRequest.entriesSpec:type_name -> immudb.schema.EntriesSpec 33, // 50: immudb.schema.TxList.txs:type_name -> immudb.schema.Tx - 65, // 51: immudb.schema.ExportTxRequest.followerState:type_name -> immudb.schema.FollowerState + 65, // 51: immudb.schema.ExportTxRequest.replicaState:type_name -> immudb.schema.ReplicaState 80, // 52: immudb.schema.CreateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings 80, // 53: immudb.schema.CreateDatabaseResponse.settings:type_name -> immudb.schema.DatabaseNullableSettings 80, // 54: immudb.schema.UpdateDatabaseRequest.settings:type_name -> immudb.schema.DatabaseNullableSettings @@ -10019,11 +10019,11 @@ var file_schema_proto_depIdxs = []int32{ 74, // 74: immudb.schema.DatabaseNullableSettings.writeBufferSize:type_name -> immudb.schema.NullableUint32 83, // 75: immudb.schema.DatabaseNullableSettings.ahtSettings:type_name -> immudb.schema.AHTNullableSettings 77, // 76: immudb.schema.ReplicationNullableSettings.replica:type_name -> immudb.schema.NullableBool - 78, // 77: immudb.schema.ReplicationNullableSettings.masterDatabase:type_name -> immudb.schema.NullableString - 78, // 78: immudb.schema.ReplicationNullableSettings.masterAddress:type_name -> immudb.schema.NullableString - 74, // 79: immudb.schema.ReplicationNullableSettings.masterPort:type_name -> immudb.schema.NullableUint32 - 78, // 80: immudb.schema.ReplicationNullableSettings.followerUsername:type_name -> immudb.schema.NullableString - 78, // 81: immudb.schema.ReplicationNullableSettings.followerPassword:type_name -> immudb.schema.NullableString + 78, // 77: immudb.schema.ReplicationNullableSettings.primaryDatabase:type_name -> immudb.schema.NullableString + 78, // 78: immudb.schema.ReplicationNullableSettings.primaryHost:type_name -> immudb.schema.NullableString + 74, // 79: immudb.schema.ReplicationNullableSettings.primaryPort:type_name -> immudb.schema.NullableUint32 + 78, // 80: immudb.schema.ReplicationNullableSettings.primaryUsername:type_name -> immudb.schema.NullableString + 78, // 81: immudb.schema.ReplicationNullableSettings.primaryPassword:type_name -> immudb.schema.NullableString 77, // 82: immudb.schema.ReplicationNullableSettings.syncReplication:type_name -> immudb.schema.NullableBool 74, // 83: immudb.schema.ReplicationNullableSettings.syncAcks:type_name -> immudb.schema.NullableUint32 74, // 84: immudb.schema.ReplicationNullableSettings.prefetchTxBufferSize:type_name -> immudb.schema.NullableUint32 @@ -10970,7 +10970,7 @@ func file_schema_proto_init() { } } file_schema_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FollowerState); i { + switch v := v.(*ReplicaState); i { case 0: return &v.state case 1: diff --git a/pkg/api/schema/schema.proto b/pkg/api/schema/schema.proto index ce5f307722..13f4628ad7 100644 --- a/pkg/api/schema/schema.proto +++ b/pkg/api/schema/schema.proto @@ -824,11 +824,11 @@ message ExportTxRequest { uint64 tx = 1; // If set to true, non-committed transactions can be exported bool allowPreCommitted = 2; - // Used on synchronous replication to notify the master about follower state - FollowerState followerState = 3; + // Used on synchronous replication to notify the primary about replica state + ReplicaState replicaState = 3; } -message FollowerState { +message ReplicaState { string UUID = 1; uint64 committedTxID = 2; bytes committedAlh = 3; @@ -849,19 +849,19 @@ message DatabaseSettings { bool replica = 2; // Name of the database to replicate - string masterDatabase = 3; + string primaryDatabase = 3; // Hostname of the immudb instance with database to replicate - string masterAddress = 4; + string primaryHost = 4; // Port of the immudb instance with database to replicate - uint32 masterPort = 5; + uint32 primaryPort = 5; // Username of the user with read access of the database to replicate - string followerUsername = 6; + string primaryUsername = 6; // Password of the user with read access of the database to replicate - string followerPassword = 7; + string primaryPassword = 7; // Size of files stored on disk uint32 fileSize = 8; @@ -1016,19 +1016,19 @@ message ReplicationNullableSettings { NullableBool replica = 1; // Name of the database to replicate - NullableString masterDatabase = 2; + NullableString primaryDatabase = 2; // Hostname of the immudb instance with database to replicate - NullableString masterAddress = 3; + NullableString primaryHost = 3; // Port of the immudb instance with database to replicate - NullableUint32 masterPort = 4; + NullableUint32 primaryPort = 4; // Username of the user with read access of the database to replicate - NullableString followerUsername = 5; + NullableString primaryUsername = 5; // Password of the user with read access of the database to replicate - NullableString followerPassword = 6; + NullableString primaryPassword = 6; // Enable synchronous replication NullableBool syncReplication = 7; @@ -1042,7 +1042,7 @@ message ReplicationNullableSettings { // Number of concurrent replications NullableUint32 replicationCommitConcurrency = 10; - // Allow precommitted transactions to be discarded if the follower diverges from the master + // Allow precommitted transactions to be discarded if the replica diverges from the primary NullableBool AllowTxDiscarding = 11; } diff --git a/pkg/api/schema/schema.swagger.json b/pkg/api/schema/schema.swagger.json index 136af06bcc..4e029b2801 100644 --- a/pkg/api/schema/schema.swagger.json +++ b/pkg/api/schema/schema.swagger.json @@ -2101,24 +2101,24 @@ "type": "boolean", "title": "If set to true, this database is replicating another database" }, - "masterDatabase": { + "primaryDatabase": { "type": "string", "title": "Name of the database to replicate" }, - "masterAddress": { + "primaryHost": { "type": "string", "title": "Hostname of the immudb instance with database to replicate" }, - "masterPort": { + "primaryPort": { "type": "integer", "format": "int64", "title": "Port of the immudb instance with database to replicate" }, - "followerUsername": { + "primaryUsername": { "type": "string", "title": "Username of the user with read access of the database to replicate" }, - "followerPassword": { + "primaryPassword": { "type": "string", "title": "Password of the user with read access of the database to replicate" }, @@ -2405,30 +2405,6 @@ } } }, - "schemaFollowerState": { - "type": "object", - "properties": { - "UUID": { - "type": "string" - }, - "committedTxID": { - "type": "string", - "format": "uint64" - }, - "committedAlh": { - "type": "string", - "format": "byte" - }, - "precommittedTxID": { - "type": "string", - "format": "uint64" - }, - "precommittedAlh": { - "type": "string", - "format": "byte" - } - } - }, "schemaHealthResponse": { "type": "object", "properties": { @@ -2939,6 +2915,30 @@ } } }, + "schemaReplicaState": { + "type": "object", + "properties": { + "UUID": { + "type": "string" + }, + "committedTxID": { + "type": "string", + "format": "uint64" + }, + "committedAlh": { + "type": "string", + "format": "byte" + }, + "precommittedTxID": { + "type": "string", + "format": "uint64" + }, + "precommittedAlh": { + "type": "string", + "format": "byte" + } + } + }, "schemaReplicationNullableSettings": { "type": "object", "properties": { @@ -2946,23 +2946,23 @@ "$ref": "#/definitions/schemaNullableBool", "title": "If set to true, this database is replicating another database" }, - "masterDatabase": { + "primaryDatabase": { "$ref": "#/definitions/schemaNullableString", "title": "Name of the database to replicate" }, - "masterAddress": { + "primaryHost": { "$ref": "#/definitions/schemaNullableString", "title": "Hostname of the immudb instance with database to replicate" }, - "masterPort": { + "primaryPort": { "$ref": "#/definitions/schemaNullableUint32", "title": "Port of the immudb instance with database to replicate" }, - "followerUsername": { + "primaryUsername": { "$ref": "#/definitions/schemaNullableString", "title": "Username of the user with read access of the database to replicate" }, - "followerPassword": { + "primaryPassword": { "$ref": "#/definitions/schemaNullableString", "title": "Password of the user with read access of the database to replicate" }, @@ -2984,7 +2984,7 @@ }, "AllowTxDiscarding": { "$ref": "#/definitions/schemaNullableBool", - "title": "Allow precommitted transactions to be discarded if the follower diverges from the master" + "title": "Allow precommitted transactions to be discarded if the replica diverges from the primary" } } }, diff --git a/pkg/database/database.go b/pkg/database/database.go index f7998b1127..95971acd18 100644 --- a/pkg/database/database.go +++ b/pkg/database/database.go @@ -48,7 +48,7 @@ var ErrIllegalArguments = store.ErrIllegalArguments var ErrIllegalState = store.ErrIllegalState var ErrIsReplica = errors.New("database is read-only because it's a replica") var ErrNotReplica = errors.New("database is NOT a replica") -var ErrFollowerDivergedFromMaster = errors.New("follower diverged from master") +var ErrReplicaDivergedFromPrimary = errors.New("replica diverged from primary") var ErrInvalidRevision = errors.New("invalid key revision number") type DB interface { @@ -141,7 +141,7 @@ type DB interface { type uuid = string -type followerState struct { +type replicaState struct { precommittedTxID uint64 precommittedAlh [sha256.Size]byte } @@ -166,8 +166,8 @@ type db struct { txPool store.TxPool - followerStates map[uuid]*followerState - followerStatesMutex sync.Mutex + replicaStates map[uuid]*replicaState + replicaStatesMutex sync.Mutex } // OpenDB Opens an existing Database from disk @@ -178,19 +178,19 @@ func OpenDB(dbName string, multidbHandler sql.MultiDBHandler, op *Options, log l log.Infof("Opening database '%s' {replica = %v}...", dbName, op.replica) - var followerStates map[uuid]*followerState - // follower states are only managed in master with synchronous replication + var replicaStates map[uuid]*replicaState + // replica states are only managed in primary with synchronous replication if !op.replica && op.syncAcks > 0 { - followerStates = make(map[uuid]*followerState, op.syncAcks) + replicaStates = make(map[uuid]*replicaState, op.syncAcks) } dbi := &db{ - Logger: log, - options: op, - name: dbName, - followerStates: followerStates, - maxResultSize: MaxKeyScanLimit, - mutex: &instrumentedRWMutex{}, + Logger: log, + options: op, + name: dbName, + replicaStates: replicaStates, + maxResultSize: MaxKeyScanLimit, + mutex: &instrumentedRWMutex{}, } dbDir := dbi.Path() @@ -288,19 +288,19 @@ func NewDB(dbName string, multidbHandler sql.MultiDBHandler, op *Options, log lo log.Infof("Creating database '%s' {replica = %v}...", dbName, op.replica) - var followerStates map[uuid]*followerState - // follower states are only managed in master with synchronous replication + var replicaStates map[uuid]*replicaState + // replica states are only managed in primary with synchronous replication if !op.replica && op.syncAcks > 0 { - followerStates = make(map[uuid]*followerState, op.syncAcks) + replicaStates = make(map[uuid]*replicaState, op.syncAcks) } dbi := &db{ - Logger: log, - options: op, - name: dbName, - followerStates: followerStates, - maxResultSize: MaxKeyScanLimit, - mutex: &instrumentedRWMutex{}, + Logger: log, + options: op, + name: dbName, + replicaStates: replicaStates, + maxResultSize: MaxKeyScanLimit, + mutex: &instrumentedRWMutex{}, } dbDir := filepath.Join(op.GetDBRootPath(), dbName) @@ -1171,57 +1171,57 @@ func (d *db) serializeTx(tx *store.Tx, spec *schema.EntriesSpec, snap *store.Sna return stx, nil } -func (d *db) mayUpdateFollowerState(committedTxID uint64, newFollowerState *schema.FollowerState) error { - d.followerStatesMutex.Lock() - defer d.followerStatesMutex.Unlock() +func (d *db) mayUpdateReplicaState(committedTxID uint64, newReplicaState *schema.ReplicaState) error { + d.replicaStatesMutex.Lock() + defer d.replicaStatesMutex.Unlock() - // clean up followerStates - // it's safe to remove up to latest tx committed in master - for uuid, st := range d.followerStates { + // clean up replicaStates + // it's safe to remove up to latest tx committed in primary + for uuid, st := range d.replicaStates { if st.precommittedTxID <= committedTxID { - delete(d.followerStates, uuid) + delete(d.replicaStates, uuid) } } - if newFollowerState.PrecommittedTxID <= committedTxID { - // as far as the master is concerned, nothing really new has happened + if newReplicaState.PrecommittedTxID <= committedTxID { + // as far as the primary is concerned, nothing really new has happened return nil } - newFollowerAlh := schema.DigestFromProto(newFollowerState.PrecommittedAlh) + newReplicaAlh := schema.DigestFromProto(newReplicaState.PrecommittedAlh) - followerSt, ok := d.followerStates[newFollowerState.UUID] + replicaSt, ok := d.replicaStates[newReplicaState.UUID] if ok { - if newFollowerState.PrecommittedTxID < followerSt.precommittedTxID { - return fmt.Errorf("%w: the newly informed follower state lags behind the previously informed one", ErrIllegalArguments) + if newReplicaState.PrecommittedTxID < replicaSt.precommittedTxID { + return fmt.Errorf("%w: the newly informed replica state lags behind the previously informed one", ErrIllegalArguments) } - if newFollowerState.PrecommittedTxID == followerSt.precommittedTxID { - // as of the last informed follower status update, nothing has changed + if newReplicaState.PrecommittedTxID == replicaSt.precommittedTxID { + // as of the last informed replica status update, nothing has changed return nil } - // actual replication progress is informed by the follower - followerSt.precommittedTxID = newFollowerState.PrecommittedTxID - followerSt.precommittedAlh = newFollowerAlh + // actual replication progress is informed by the replica + replicaSt.precommittedTxID = newReplicaState.PrecommittedTxID + replicaSt.precommittedAlh = newReplicaAlh } else { - // follower informs first replication state - d.followerStates[newFollowerState.UUID] = &followerState{ - precommittedTxID: newFollowerState.PrecommittedTxID, - precommittedAlh: newFollowerAlh, + // replica informs first replication state + d.replicaStates[newReplicaState.UUID] = &replicaState{ + precommittedTxID: newReplicaState.PrecommittedTxID, + precommittedAlh: newReplicaAlh, } } - // check up to which tx enough followers ack replication and it's safe to commit + // check up to which tx enough replicas ack replication and it's safe to commit mayCommitUpToTxID := uint64(0) - if len(d.followerStates) > 0 { + if len(d.replicaStates) > 0 { mayCommitUpToTxID = math.MaxUint64 } allowances := 0 - // we may clean up followerStates from those who are lagging behind commit - for _, st := range d.followerStates { + // we may clean up replicaStates from those who are lagging behind commit + for _, st := range d.replicaStates { if st.precommittedTxID < mayCommitUpToTxID { mayCommitUpToTxID = st.precommittedTxID } @@ -1244,8 +1244,8 @@ func (d *db) ExportTxByID(req *schema.ExportTxRequest) (txbs []byte, mayCommitUp return nil, 0, mayCommitUpToAlh, ErrIllegalArguments } - if d.followerStates == nil && req.FollowerState != nil { - return nil, 0, mayCommitUpToAlh, fmt.Errorf("%w: follower state was NOT expected", ErrIllegalState) + if d.replicaStates == nil && req.ReplicaState != nil { + return nil, 0, mayCommitUpToAlh, fmt.Errorf("%w: replica state was NOT expected", ErrIllegalState) } tx, err := d.allocTx() @@ -1257,70 +1257,70 @@ func (d *db) ExportTxByID(req *schema.ExportTxRequest) (txbs []byte, mayCommitUp committedTxID, committedAlh := d.st.CommittedAlh() preCommittedTxID, _ := d.st.PrecommittedAlh() - if req.FollowerState != nil { - if req.FollowerState.CommittedTxID > 0 { - // validate follower commit state - if req.FollowerState.CommittedTxID > committedTxID { + if req.ReplicaState != nil { + if req.ReplicaState.CommittedTxID > 0 { + // validate replica commit state + if req.ReplicaState.CommittedTxID > committedTxID { return nil, committedTxID, committedAlh, - fmt.Errorf("%w: follower commit state diverged from master's", ErrFollowerDivergedFromMaster) + fmt.Errorf("%w: replica commit state diverged from primary's", ErrReplicaDivergedFromPrimary) } - expectedFollowerCommitHdr, err := d.st.ReadTxHeader(req.FollowerState.CommittedTxID, false) + expectedReplicaCommitHdr, err := d.st.ReadTxHeader(req.ReplicaState.CommittedTxID, false) if err != nil { return nil, committedTxID, committedAlh, err } - followerCommittedAlh := schema.DigestFromProto(req.FollowerState.CommittedAlh) + replicaCommittedAlh := schema.DigestFromProto(req.ReplicaState.CommittedAlh) - if expectedFollowerCommitHdr.Alh() != followerCommittedAlh { - return nil, expectedFollowerCommitHdr.ID, expectedFollowerCommitHdr.Alh(), - fmt.Errorf("%w: follower commit state diverged from master's", ErrFollowerDivergedFromMaster) + if expectedReplicaCommitHdr.Alh() != replicaCommittedAlh { + return nil, expectedReplicaCommitHdr.ID, expectedReplicaCommitHdr.Alh(), + fmt.Errorf("%w: replica commit state diverged from primary's", ErrReplicaDivergedFromPrimary) } } - if req.FollowerState.PrecommittedTxID > 0 { - // validate follower precommit state - if req.FollowerState.PrecommittedTxID > preCommittedTxID { + if req.ReplicaState.PrecommittedTxID > 0 { + // validate replica precommit state + if req.ReplicaState.PrecommittedTxID > preCommittedTxID { return nil, committedTxID, committedAlh, - fmt.Errorf("%w: follower precommit state diverged from master's", ErrFollowerDivergedFromMaster) + fmt.Errorf("%w: replica precommit state diverged from primary's", ErrReplicaDivergedFromPrimary) } - expectedFollowerPrecommitHdr, err := d.st.ReadTxHeader(req.FollowerState.PrecommittedTxID, true) + expectedReplicaPrecommitHdr, err := d.st.ReadTxHeader(req.ReplicaState.PrecommittedTxID, true) if err != nil { return nil, committedTxID, committedAlh, err } - followerPreCommittedAlh := schema.DigestFromProto(req.FollowerState.PrecommittedAlh) + replicaPreCommittedAlh := schema.DigestFromProto(req.ReplicaState.PrecommittedAlh) - if expectedFollowerPrecommitHdr.Alh() != followerPreCommittedAlh { - return nil, expectedFollowerPrecommitHdr.ID, expectedFollowerPrecommitHdr.Alh(), - fmt.Errorf("%w: follower precommit state diverged from master's", ErrFollowerDivergedFromMaster) + if expectedReplicaPrecommitHdr.Alh() != replicaPreCommittedAlh { + return nil, expectedReplicaPrecommitHdr.ID, expectedReplicaPrecommitHdr.Alh(), + fmt.Errorf("%w: replica precommit state diverged from primary's", ErrReplicaDivergedFromPrimary) } - // master will provide commit state to the follower so it can commit pre-committed transactions - if req.FollowerState.PrecommittedTxID < committedTxID { - // if follower is behind current commit state in master - // return the alh up to the point known by the follower. - // That way the follower is able to validate is following the right master. - mayCommitUpToTxID = req.FollowerState.PrecommittedTxID - mayCommitUpToAlh = followerPreCommittedAlh + // primary will provide commit state to the replica so it can commit pre-committed transactions + if req.ReplicaState.PrecommittedTxID < committedTxID { + // if replica is behind current commit state in primary + // return the alh up to the point known by the replica. + // That way the replica is able to validate is following the right primary. + mayCommitUpToTxID = req.ReplicaState.PrecommittedTxID + mayCommitUpToAlh = replicaPreCommittedAlh } else { mayCommitUpToTxID = committedTxID mayCommitUpToAlh = committedAlh } } - err = d.mayUpdateFollowerState(committedTxID, req.FollowerState) + err = d.mayUpdateReplicaState(committedTxID, req.ReplicaState) if err != nil { return nil, mayCommitUpToTxID, mayCommitUpToAlh, err } } - // it might be the case master will commit some txs (even there could be inmem-precommitted txs) + // it might be the case primary will commit some txs (even there could be inmem-precommitted txs) // current timeout it's not a special value but at least a relative one - // note: master might also be waiting ack from any follower (even this follower may do progress) + // note: primary might also be waiting ack from any replica (even this primary may do progress) - // TODO: under some circustances, follower might not be able to do further progress until master + // TODO: under some circumstances, replica might not be able to do further progress until primary // has made changes, such wait doesn't need to have a timeout, reducing networking and CPU utilization ctx, cancel := context.WithTimeout(context.Background(), d.options.storeOpts.SyncFrequency*4) defer cancel() @@ -1357,7 +1357,7 @@ func (d *db) ReplicateTx(exportedTx []byte) (*schema.TxHeader, error) { return schema.TxHeaderToProto(hdr), nil } -// AllowCommitUpto is used by followers to commit transactions once committed in master +// AllowCommitUpto is used by replicas to commit transactions once committed in primary func (d *db) AllowCommitUpto(txID uint64, alh [sha256.Size]byte) error { d.mutex.RLock() defer d.mutex.RUnlock() @@ -1366,13 +1366,13 @@ func (d *db) AllowCommitUpto(txID uint64, alh [sha256.Size]byte) error { return ErrNotReplica } - // follower pre-committed state must be consistent with master + // replica pre-committed state must be consistent with primary committedTxID, committedAlh := d.st.CommittedAlh() // handling a particular case in an optimized manner if committedTxID == txID { if committedAlh != alh { - return fmt.Errorf("%w: follower commit state diverged from master's", ErrIllegalState) + return fmt.Errorf("%w: replica commit state diverged from primary's", ErrIllegalState) } return nil } @@ -1383,7 +1383,7 @@ func (d *db) AllowCommitUpto(txID uint64, alh [sha256.Size]byte) error { } if hdr.Alh() != alh { - return fmt.Errorf("%w: follower commit state diverged from master's", ErrIllegalState) + return fmt.Errorf("%w: replica commit state diverged from primary's", ErrIllegalState) } return d.st.AllowCommitUpto(txID) @@ -1668,17 +1668,17 @@ func (d *db) AsReplica(asReplica, syncReplication bool, syncAcks int) { d.mutex.Lock() defer d.mutex.Unlock() - d.followerStatesMutex.Lock() - defer d.followerStatesMutex.Unlock() + d.replicaStatesMutex.Lock() + defer d.replicaStatesMutex.Unlock() d.options.replica = asReplica d.options.syncAcks = syncAcks d.options.syncReplication = syncReplication if asReplica { - d.followerStates = nil + d.replicaStates = nil } else if syncAcks > 0 { - d.followerStates = make(map[uuid]*followerState, syncAcks) + d.replicaStates = make(map[uuid]*replicaState, syncAcks) } d.st.SetExternalCommitAllowance(syncReplication) diff --git a/pkg/integration/client_test.go b/pkg/integration/client_test.go index 242a48d60e..37f1030620 100644 --- a/pkg/integration/client_test.go +++ b/pkg/integration/client_test.go @@ -492,9 +492,9 @@ func TestReplica(t *testing.T) { _, client, ctx := setupTestServerAndClient(t) err := client.CreateDatabase(ctx, &schema.DatabaseSettings{ - DatabaseName: "db1", - Replica: true, - MasterDatabase: "defaultdb", + DatabaseName: "db1", + Replica: true, + PrimaryDatabase: "defaultdb", }) require.NoError(t, err) diff --git a/pkg/integration/follower_replication_test.go b/pkg/integration/follower_replication_test.go index ddcbe4d32d..c82a1d420f 100644 --- a/pkg/integration/follower_replication_test.go +++ b/pkg/integration/follower_replication_test.go @@ -33,68 +33,68 @@ import ( ) func TestReplication(t *testing.T) { - //init master server - masterDir := t.TempDir() + //init primary server + primaryDir := t.TempDir() - masterServerOpts := server.DefaultOptions(). + primaryServerOpts := server.DefaultOptions(). WithMetricsServer(false). WithWebServer(false). WithPgsqlServer(false). WithPort(0). - WithDir(masterDir) + WithDir(primaryDir) - masterServer := server.DefaultServer().WithOptions(masterServerOpts).(*server.ImmuServer) + primaryServer := server.DefaultServer().WithOptions(primaryServerOpts).(*server.ImmuServer) - err := masterServer.Initialize() + err := primaryServer.Initialize() require.NoError(t, err) - //init follower server - followerDir := t.TempDir() + //init replica server + replicaDir := t.TempDir() - followerServerOpts := server.DefaultOptions(). + replicaServerOpts := server.DefaultOptions(). WithMetricsServer(false). WithWebServer(false). WithPgsqlServer(false). WithPort(0). - WithDir(followerDir) + WithDir(replicaDir) - followerServer := server.DefaultServer().WithOptions(followerServerOpts).(*server.ImmuServer) + replicaServer := server.DefaultServer().WithOptions(replicaServerOpts).(*server.ImmuServer) - err = followerServer.Initialize() + err = replicaServer.Initialize() require.NoError(t, err) go func() { - masterServer.Start() + primaryServer.Start() }() go func() { - followerServer.Start() + replicaServer.Start() }() time.Sleep(1 * time.Second) defer func() { - masterServer.Stop() + primaryServer.Stop() time.Sleep(1 * time.Second) - followerServer.Stop() + replicaServer.Stop() }() - // init master client - masterPort := masterServer.Listener.Addr().(*net.TCPAddr).Port - masterClient, err := ic.NewImmuClient(ic.DefaultOptions().WithPort(masterPort)) + // init primary client + primaryPort := primaryServer.Listener.Addr().(*net.TCPAddr).Port + primaryClient, err := ic.NewImmuClient(ic.DefaultOptions().WithPort(primaryPort)) require.NoError(t, err) - require.NotNil(t, masterClient) + require.NotNil(t, primaryClient) - mlr, err := masterClient.Login(context.TODO(), []byte(`immudb`), []byte(`immudb`)) + mlr, err := primaryClient.Login(context.TODO(), []byte(`immudb`), []byte(`immudb`)) require.NoError(t, err) mmd := metadata.Pairs("authorization", mlr.Token) - mctx := metadata.NewOutgoingContext(context.Background(), mmd) + pctx := metadata.NewOutgoingContext(context.Background(), mmd) - // create database as masterdb in master server - _, err = masterClient.CreateDatabaseV2(mctx, "masterdb", &schema.DatabaseNullableSettings{ + // create database as primarydb in primary server + _, err = primaryClient.CreateDatabaseV2(pctx, "primarydb", &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ SyncReplication: &schema.NullableBool{Value: true}, SyncAcks: &schema.NullableUint32{Value: 1}, @@ -102,188 +102,188 @@ func TestReplication(t *testing.T) { }) require.NoError(t, err) - mdb, err := masterClient.UseDatabase(mctx, &schema.Database{DatabaseName: "masterdb"}) + mdb, err := primaryClient.UseDatabase(pctx, &schema.Database{DatabaseName: "primarydb"}) require.NoError(t, err) require.NotNil(t, mdb) mmd = metadata.Pairs("authorization", mdb.Token) - mctx = metadata.NewOutgoingContext(context.Background(), mmd) + pctx = metadata.NewOutgoingContext(context.Background(), mmd) - err = masterClient.CreateUser(mctx, []byte("follower"), []byte("follower1Pwd!"), auth.PermissionAdmin, "masterdb") + err = primaryClient.CreateUser(pctx, []byte("replicator"), []byte("replicator1Pwd!"), auth.PermissionAdmin, "primarydb") require.NoError(t, err) - err = masterClient.SetActiveUser(mctx, &schema.SetActiveUserRequest{Active: true, Username: "follower"}) + err = primaryClient.SetActiveUser(pctx, &schema.SetActiveUserRequest{Active: true, Username: "replicator"}) require.NoError(t, err) - // init follower client - followerPort := followerServer.Listener.Addr().(*net.TCPAddr).Port - followerClient, err := ic.NewImmuClient(ic.DefaultOptions().WithPort(followerPort)) + // init replica client + replicaPort := replicaServer.Listener.Addr().(*net.TCPAddr).Port + replicaClient, err := ic.NewImmuClient(ic.DefaultOptions().WithPort(replicaPort)) require.NoError(t, err) - require.NotNil(t, followerClient) + require.NotNil(t, replicaClient) - flr, err := followerClient.Login(context.TODO(), []byte(`immudb`), []byte(`immudb`)) + flr, err := replicaClient.Login(context.TODO(), []byte(`immudb`), []byte(`immudb`)) require.NoError(t, err) fmd := metadata.Pairs("authorization", flr.Token) - fctx := metadata.NewOutgoingContext(context.Background(), fmd) + rctx := metadata.NewOutgoingContext(context.Background(), fmd) - // create database as replica in follower server - _, err = followerClient.CreateDatabaseV2(fctx, "replicadb", &schema.DatabaseNullableSettings{ + // create database as replica in replica server + _, err = replicaClient.CreateDatabaseV2(rctx, "replicadb", &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ - Replica: &schema.NullableBool{Value: true}, - SyncReplication: &schema.NullableBool{Value: true}, - MasterDatabase: &schema.NullableString{Value: "masterdb"}, - MasterAddress: &schema.NullableString{Value: "127.0.0.1"}, - MasterPort: &schema.NullableUint32{Value: uint32(masterPort)}, - FollowerUsername: &schema.NullableString{Value: "follower"}, - FollowerPassword: &schema.NullableString{Value: "wrongPassword"}, + Replica: &schema.NullableBool{Value: true}, + SyncReplication: &schema.NullableBool{Value: true}, + PrimaryDatabase: &schema.NullableString{Value: "primarydb"}, + PrimaryHost: &schema.NullableString{Value: "127.0.0.1"}, + PrimaryPort: &schema.NullableUint32{Value: uint32(primaryPort)}, + PrimaryUsername: &schema.NullableString{Value: "replicator"}, + PrimaryPassword: &schema.NullableString{Value: "wrongPassword"}, }, }) require.NoError(t, err) time.Sleep(1 * time.Second) - _, err = followerClient.UpdateDatabaseV2(fctx, "replicadb", &schema.DatabaseNullableSettings{ + _, err = replicaClient.UpdateDatabaseV2(rctx, "replicadb", &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ - FollowerPassword: &schema.NullableString{Value: "follower1Pwd!"}, + PrimaryPassword: &schema.NullableString{Value: "replicator1Pwd!"}, }, }) require.NoError(t, err) - fdb, err := followerClient.UseDatabase(fctx, &schema.Database{DatabaseName: "replicadb"}) + fdb, err := replicaClient.UseDatabase(rctx, &schema.Database{DatabaseName: "replicadb"}) require.NoError(t, err) require.NotNil(t, fdb) fmd = metadata.Pairs("authorization", fdb.Token) - fctx = metadata.NewOutgoingContext(context.Background(), fmd) + rctx = metadata.NewOutgoingContext(context.Background(), fmd) t.Run("key1 should not exist", func(t *testing.T) { - _, err = followerClient.Get(fctx, []byte("key1")) + _, err = replicaClient.Get(rctx, []byte("key1")) require.Error(t, err) require.Contains(t, err.Error(), "key not found") }) - _, err = masterClient.Set(mctx, []byte("key1"), []byte("value1")) + _, err = primaryClient.Set(pctx, []byte("key1"), []byte("value1")) require.NoError(t, err) - _, err = masterClient.Set(mctx, []byte("key2"), []byte("value2")) + _, err = primaryClient.Set(pctx, []byte("key2"), []byte("value2")) require.NoError(t, err) time.Sleep(1 * time.Second) - t.Run("key1 should exist in replicadb@follower", func(t *testing.T) { - _, err = followerClient.Get(fctx, []byte("key1")) + t.Run("key1 should exist in replicadb@replica", func(t *testing.T) { + _, err = replicaClient.Get(rctx, []byte("key1")) require.NoError(t, err) }) - fdb, err = followerClient.UseDatabase(fctx, &schema.Database{DatabaseName: "defaultdb"}) + fdb, err = replicaClient.UseDatabase(rctx, &schema.Database{DatabaseName: "defaultdb"}) require.NoError(t, err) require.NotNil(t, fdb) fmd = metadata.Pairs("authorization", fdb.Token) - fctx = metadata.NewOutgoingContext(context.Background(), fmd) + rctx = metadata.NewOutgoingContext(context.Background(), fmd) - t.Run("key1 should not exist in defaultdb@follower", func(t *testing.T) { - _, err = followerClient.Get(fctx, []byte("key1")) + t.Run("key1 should not exist in defaultdb@replica", func(t *testing.T) { + _, err = replicaClient.Get(rctx, []byte("key1")) require.Contains(t, err.Error(), "key not found") }) } func TestSystemDBAndDefaultDBReplication(t *testing.T) { - //init master server - masterDir, err := ioutil.TempDir("", "master-data") + // init primary server + primaryDir, err := ioutil.TempDir("", "primary-data") require.NoError(t, err) - defer os.RemoveAll(masterDir) + defer os.RemoveAll(primaryDir) - masterServerOpts := server.DefaultOptions(). + primaryServerOpts := server.DefaultOptions(). WithMetricsServer(false). WithWebServer(false). WithPgsqlServer(false). WithPort(0). - WithDir(masterDir) + WithDir(primaryDir) - masterServer := server.DefaultServer().WithOptions(masterServerOpts).(*server.ImmuServer) + primaryServer := server.DefaultServer().WithOptions(primaryServerOpts).(*server.ImmuServer) - err = masterServer.Initialize() + err = primaryServer.Initialize() require.NoError(t, err) go func() { - masterServer.Start() + primaryServer.Start() }() time.Sleep(1 * time.Second) - defer masterServer.Stop() + defer primaryServer.Stop() - // init master client - masterPort := masterServer.Listener.Addr().(*net.TCPAddr).Port - masterClient := ic.NewClient().WithOptions(ic.DefaultOptions().WithPort(masterPort)) - require.NotNil(t, masterClient) + // init primary client + primaryPort := primaryServer.Listener.Addr().(*net.TCPAddr).Port + primaryClient := ic.NewClient().WithOptions(ic.DefaultOptions().WithPort(primaryPort)) + require.NotNil(t, primaryClient) - err = masterClient.OpenSession(context.Background(), []byte(`immudb`), []byte(`immudb`), "defaultdb") + err = primaryClient.OpenSession(context.Background(), []byte(`immudb`), []byte(`immudb`), "defaultdb") require.NoError(t, err) - defer masterClient.CloseSession(context.Background()) + defer primaryClient.CloseSession(context.Background()) - //init follower server - followerDir, err := ioutil.TempDir("", "follower-data") + // init replica server + replicaDir, err := ioutil.TempDir("", "replica-data") require.NoError(t, err) - defer os.RemoveAll(followerDir) + defer os.RemoveAll(replicaDir) replicationOpts := &server.ReplicationOptions{ IsReplica: true, - MasterAddress: "127.0.0.1", - MasterPort: masterPort, - FollowerUsername: "immudb", - FollowerPassword: "immudb", + PrimaryHost: "127.0.0.1", + PrimaryPort: primaryPort, + PrimaryUsername: "immudb", + PrimaryPassword: "immudb", PrefetchTxBufferSize: 100, ReplicationCommitConcurrency: 1, } - followerServerOpts := server.DefaultOptions(). + replicaServerOpts := server.DefaultOptions(). WithMetricsServer(false). WithWebServer(false). WithPgsqlServer(false). WithPort(0). - WithDir(followerDir). + WithDir(replicaDir). WithReplicationOptions(replicationOpts) - followerServer := server.DefaultServer().WithOptions(followerServerOpts).(*server.ImmuServer) + replicaServer := server.DefaultServer().WithOptions(replicaServerOpts).(*server.ImmuServer) - err = followerServer.Initialize() + err = replicaServer.Initialize() require.NoError(t, err) go func() { - followerServer.Start() + replicaServer.Start() }() time.Sleep(1 * time.Second) - defer followerServer.Stop() + defer replicaServer.Stop() - // init follower client - followerPort := followerServer.Listener.Addr().(*net.TCPAddr).Port - followerClient := ic.NewClient().WithOptions(ic.DefaultOptions().WithPort(followerPort)) - require.NotNil(t, followerClient) + // init replica client + replicaPort := replicaServer.Listener.Addr().(*net.TCPAddr).Port + replicaClient := ic.NewClient().WithOptions(ic.DefaultOptions().WithPort(replicaPort)) + require.NotNil(t, replicaClient) - err = followerClient.OpenSession(context.Background(), []byte(`immudb`), []byte(`immudb`), "defaultdb") + err = replicaClient.OpenSession(context.Background(), []byte(`immudb`), []byte(`immudb`), "defaultdb") require.NoError(t, err) - defer followerClient.CloseSession(context.Background()) + defer replicaClient.CloseSession(context.Background()) t.Run("key1 should not exist", func(t *testing.T) { - _, err = followerClient.Get(context.Background(), []byte("key1")) + _, err = replicaClient.Get(context.Background(), []byte("key1")) require.Error(t, err) require.Contains(t, err.Error(), "key not found") }) - _, err = masterClient.Set(context.Background(), []byte("key1"), []byte("value1")) + _, err = primaryClient.Set(context.Background(), []byte("key1"), []byte("value1")) require.NoError(t, err) time.Sleep(1 * time.Second) - t.Run("key1 should exist in replicateddb@follower", func(t *testing.T) { - _, err = followerClient.Get(context.Background(), []byte("key1")) + t.Run("key1 should exist in replicateddb@replica", func(t *testing.T) { + _, err = replicaClient.Get(context.Background(), []byte("key1")) require.NoError(t, err) }) - _, err = followerClient.Set(context.Background(), []byte("key2"), []byte("value2")) + _, err = replicaClient.Set(context.Background(), []byte("key2"), []byte("value2")) require.Contains(t, err.Error(), "database is read-only because it's a replica") } diff --git a/pkg/integration/replication/suite.go b/pkg/integration/replication/suite.go index 1b21c1c1f3..3e3ad3ba2d 100644 --- a/pkg/integration/replication/suite.go +++ b/pkg/integration/replication/suite.go @@ -16,10 +16,10 @@ import ( ) const ( - masterDBName = "masterdb" + primaryDBName = "primarydb" replicaDBName = "replicadb" - replicaUsername = "follower" - replicaPassword = "follower1Pwd!" + primaryUsername = "replicator" + primaryPassword = "replicator1Pwd!" ) // TestServer is an abstract representation of a TestServer @@ -48,89 +48,89 @@ type baseReplicationTestSuite struct { mu sync.Mutex // server settings - master TestServer - masterDBName string - masterRunning bool + primary TestServer + primaryDBName string + primaryRunning bool - followers []TestServer - followersDBName []string - followersRunning []bool + replicas []TestServer + replicasDBName []string + replicasRunning []bool clientStateDir string } -func (suite *baseReplicationTestSuite) GetFollowersCount() int { +func (suite *baseReplicationTestSuite) GetReplicasCount() int { suite.mu.Lock() defer suite.mu.Unlock() - return len(suite.followers) + return len(suite.replicas) } -func (suite *baseReplicationTestSuite) AddFollower(sync bool) int { +func (suite *baseReplicationTestSuite) AddReplica(sync bool) int { suite.mu.Lock() defer suite.mu.Unlock() - follower := suite.srvProvider.AddServer(suite.T()) + replica := suite.srvProvider.AddServer(suite.T()) - followerNum := len(suite.followers) - suite.followers = append(suite.followers, follower) - suite.followersDBName = append(suite.followersDBName, replicaDBName) - suite.followersRunning = append(suite.followersRunning, true) + replicaNum := len(suite.replicas) + suite.replicas = append(suite.replicas, replica) + suite.replicasDBName = append(suite.replicasDBName, replicaDBName) + suite.replicasRunning = append(suite.replicasRunning, true) - fctx, followerClient, cleanup := suite.internalClientFor(follower, client.DefaultDB) + rctx, replicaClient, cleanup := suite.internalClientFor(replica, client.DefaultDB) defer cleanup() - masterHost, masterPort := suite.master.Address(suite.T()) + primaryHost, primaryPort := suite.primary.Address(suite.T()) settings := &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ - Replica: &schema.NullableBool{Value: true}, - SyncReplication: &schema.NullableBool{Value: sync}, - MasterDatabase: &schema.NullableString{Value: suite.masterDBName}, - MasterAddress: &schema.NullableString{Value: masterHost}, - MasterPort: &schema.NullableUint32{Value: uint32(masterPort)}, - FollowerUsername: &schema.NullableString{Value: replicaUsername}, - FollowerPassword: &schema.NullableString{Value: replicaPassword}, + Replica: &schema.NullableBool{Value: true}, + SyncReplication: &schema.NullableBool{Value: sync}, + PrimaryDatabase: &schema.NullableString{Value: suite.primaryDBName}, + PrimaryHost: &schema.NullableString{Value: primaryHost}, + PrimaryPort: &schema.NullableUint32{Value: uint32(primaryPort)}, + PrimaryUsername: &schema.NullableString{Value: primaryUsername}, + PrimaryPassword: &schema.NullableString{Value: primaryPassword}, }, } - // init database on the follower to replicate - _, err := followerClient.CreateDatabaseV2(fctx, replicaDBName, settings) + // init database on the replica to replicate + _, err := replicaClient.CreateDatabaseV2(rctx, replicaDBName, settings) require.NoError(suite.T(), err) - return followerNum + return replicaNum } -func (suite *baseReplicationTestSuite) StopFollower(followerNum int) { +func (suite *baseReplicationTestSuite) StopReplica(replicaNum int) { suite.mu.Lock() defer suite.mu.Unlock() - f := suite.followers[followerNum] + f := suite.replicas[replicaNum] f.Shutdown(suite.T()) - suite.followersRunning[followerNum] = false + suite.replicasRunning[replicaNum] = false } -func (suite *baseReplicationTestSuite) StartFollower(followerNum int) { +func (suite *baseReplicationTestSuite) StartReplica(replicaNum int) { suite.mu.Lock() defer suite.mu.Unlock() - f := suite.followers[followerNum] + f := suite.replicas[replicaNum] f.Start(suite.T()) - suite.followersRunning[followerNum] = true + suite.replicasRunning[replicaNum] = true } -func (suite *baseReplicationTestSuite) PromoteFollower(followerNum, syncAcks int) { +func (suite *baseReplicationTestSuite) PromoteReplica(replicaNum, syncAcks int) { suite.mu.Lock() defer suite.mu.Unlock() - // set follower as new master and current master as follower - suite.master, suite.followers[followerNum] = suite.followers[followerNum], suite.master - suite.masterDBName, suite.followersDBName[followerNum] = suite.followersDBName[followerNum], suite.masterDBName + // set replica as new primary and current primary as replica + suite.primary, suite.replicas[replicaNum] = suite.replicas[replicaNum], suite.primary + suite.primaryDBName, suite.replicasDBName[replicaNum] = suite.replicasDBName[replicaNum], suite.primaryDBName - mctx, mClient, cleanup := suite.internalClientFor(suite.master, suite.masterDBName) + mctx, mClient, cleanup := suite.internalClientFor(suite.primary, suite.primaryDBName) defer cleanup() - _, err := mClient.UpdateDatabaseV2(mctx, suite.masterDBName, &schema.DatabaseNullableSettings{ + _, err := mClient.UpdateDatabaseV2(mctx, suite.primaryDBName, &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ Replica: &schema.NullableBool{Value: false}, SyncReplication: &schema.NullableBool{Value: syncAcks > 0}, @@ -139,45 +139,45 @@ func (suite *baseReplicationTestSuite) PromoteFollower(followerNum, syncAcks int }) require.NoError(suite.T(), err) - mdb, err := mClient.UseDatabase(mctx, &schema.Database{DatabaseName: suite.masterDBName}) + mdb, err := mClient.UseDatabase(mctx, &schema.Database{DatabaseName: suite.primaryDBName}) require.NoError(suite.T(), err) require.NotNil(suite.T(), mdb) - err = mClient.CreateUser(mctx, []byte(replicaUsername), []byte(replicaPassword), auth.PermissionAdmin, suite.masterDBName) + err = mClient.CreateUser(mctx, []byte(primaryUsername), []byte(primaryPassword), auth.PermissionAdmin, suite.primaryDBName) require.NoError(suite.T(), err) - err = mClient.SetActiveUser(mctx, &schema.SetActiveUserRequest{Active: true, Username: replicaUsername}) + err = mClient.SetActiveUser(mctx, &schema.SetActiveUserRequest{Active: true, Username: primaryUsername}) require.NoError(suite.T(), err) - host, port := suite.master.Address(suite.T()) + host, port := suite.primary.Address(suite.T()) - for i, _ := range suite.followers { - ctx, client, cleanup := suite.internalClientFor(suite.followers[i], suite.followersDBName[i]) + for i, _ := range suite.replicas { + ctx, client, cleanup := suite.internalClientFor(suite.replicas[i], suite.replicasDBName[i]) defer cleanup() - _, err = client.UpdateDatabaseV2(ctx, suite.followersDBName[i], &schema.DatabaseNullableSettings{ + _, err = client.UpdateDatabaseV2(ctx, suite.replicasDBName[i], &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ - Replica: &schema.NullableBool{Value: true}, - MasterAddress: &schema.NullableString{Value: host}, - MasterPort: &schema.NullableUint32{Value: uint32(port)}, - MasterDatabase: &schema.NullableString{Value: suite.masterDBName}, - FollowerUsername: &schema.NullableString{Value: replicaUsername}, - FollowerPassword: &schema.NullableString{Value: replicaPassword}, + Replica: &schema.NullableBool{Value: true}, + PrimaryHost: &schema.NullableString{Value: host}, + PrimaryPort: &schema.NullableUint32{Value: uint32(port)}, + PrimaryDatabase: &schema.NullableString{Value: suite.primaryDBName}, + PrimaryUsername: &schema.NullableString{Value: primaryUsername}, + PrimaryPassword: &schema.NullableString{Value: primaryPassword}, }, }) require.NoError(suite.T(), err) } } -func (suite *baseReplicationTestSuite) StartMaster(syncAcks int) { +func (suite *baseReplicationTestSuite) StartPrimary(syncAcks int) { suite.mu.Lock() defer suite.mu.Unlock() - require.Nil(suite.T(), suite.master) + require.Nil(suite.T(), suite.primary) srv := suite.srvProvider.AddServer(suite.T()) - suite.master = srv + suite.primary = srv mctx, client, cleanup := suite.internalClientFor(srv, client.DefaultDB) defer cleanup() @@ -191,40 +191,40 @@ func (suite *baseReplicationTestSuite) StartMaster(syncAcks int) { } } - _, err := client.CreateDatabaseV2(mctx, suite.masterDBName, settings) + _, err := client.CreateDatabaseV2(mctx, suite.primaryDBName, settings) require.NoError(suite.T(), err) - mdb, err := client.UseDatabase(mctx, &schema.Database{DatabaseName: suite.masterDBName}) + mdb, err := client.UseDatabase(mctx, &schema.Database{DatabaseName: suite.primaryDBName}) require.NoError(suite.T(), err) require.NotNil(suite.T(), mdb) - err = client.CreateUser(mctx, []byte(replicaUsername), []byte(replicaPassword), auth.PermissionAdmin, suite.masterDBName) + err = client.CreateUser(mctx, []byte(primaryUsername), []byte(primaryPassword), auth.PermissionAdmin, suite.primaryDBName) require.NoError(suite.T(), err) - err = client.SetActiveUser(mctx, &schema.SetActiveUserRequest{Active: true, Username: replicaUsername}) + err = client.SetActiveUser(mctx, &schema.SetActiveUserRequest{Active: true, Username: primaryUsername}) require.NoError(suite.T(), err) - suite.masterRunning = true + suite.primaryRunning = true } -func (suite *baseReplicationTestSuite) StopMaster() { +func (suite *baseReplicationTestSuite) StopPrimary() { suite.mu.Lock() defer suite.mu.Unlock() - require.NotNil(suite.T(), suite.master) + require.NotNil(suite.T(), suite.primary) - suite.master.Shutdown(suite.T()) - suite.masterRunning = false + suite.primary.Shutdown(suite.T()) + suite.primaryRunning = false } -func (suite *baseReplicationTestSuite) RestartMaster() { - suite.StopMaster() +func (suite *baseReplicationTestSuite) RestartPrimary() { + suite.StopPrimary() suite.mu.Lock() defer suite.mu.Unlock() - suite.master.Start(suite.T()) - suite.masterRunning = true + suite.primary.Start(suite.T()) + suite.primaryRunning = true } func (suite *baseReplicationTestSuite) internalClientFor(srv TestServer, dbName string) (context.Context, client.ImmuClient, func()) { @@ -249,18 +249,18 @@ func (suite *baseReplicationTestSuite) internalClientFor(srv TestServer, dbName return context.Background(), c, func() { c.CloseSession(context.Background()) } } -func (suite *baseReplicationTestSuite) ClientForMaster() (mctx context.Context, client client.ImmuClient, cleanup func()) { +func (suite *baseReplicationTestSuite) ClientForPrimary() (mctx context.Context, client client.ImmuClient, cleanup func()) { suite.mu.Lock() defer suite.mu.Unlock() - return suite.internalClientFor(suite.master, suite.masterDBName) + return suite.internalClientFor(suite.primary, suite.primaryDBName) } -func (suite *baseReplicationTestSuite) ClientForReplica(replicaNum int) (fctx context.Context, client client.ImmuClient, cleanup func()) { +func (suite *baseReplicationTestSuite) ClientForReplica(replicaNum int) (rctx context.Context, client client.ImmuClient, cleanup func()) { suite.mu.Lock() defer suite.mu.Unlock() - return suite.internalClientFor(suite.followers[replicaNum], suite.followersDBName[replicaNum]) + return suite.internalClientFor(suite.replicas[replicaNum], suite.replicasDBName[replicaNum]) } func (suite *baseReplicationTestSuite) WaitForCommittedTx( @@ -288,9 +288,9 @@ func (suite *baseReplicationTestSuite) WaitForCommittedTx( } func (suite *baseReplicationTestSuite) SetupCluster(syncReplicas, syncAcks, asyncReplicas int) { - suite.masterDBName = masterDBName + suite.primaryDBName = primaryDBName - suite.StartMaster(syncAcks) + suite.StartPrimary(syncAcks) wg := sync.WaitGroup{} @@ -298,7 +298,7 @@ func (suite *baseReplicationTestSuite) SetupCluster(syncReplicas, syncAcks, asyn wg.Add(1) go func() { defer wg.Done() - suite.AddFollower(true) + suite.AddReplica(true) }() } @@ -306,7 +306,7 @@ func (suite *baseReplicationTestSuite) SetupCluster(syncReplicas, syncAcks, asyn wg.Add(1) go func() { defer wg.Done() - suite.AddFollower(false) + suite.AddReplica(false) }() } @@ -314,11 +314,11 @@ func (suite *baseReplicationTestSuite) SetupCluster(syncReplicas, syncAcks, asyn } func (suite *baseReplicationTestSuite) ValidateClusterSetup() { - uuids := make(map[string]struct{}, 1+suite.GetFollowersCount()) + uuids := make(map[string]struct{}, 1+suite.GetReplicasCount()) - uuids[suite.master.UUID(suite.T()).String()] = struct{}{} + uuids[suite.primary.UUID(suite.T()).String()] = struct{}{} - for _, f := range suite.followers { + for _, f := range suite.replicas { uuid := f.UUID(suite.T()).String() if _, ok := uuids[uuid]; ok { @@ -346,18 +346,18 @@ func (suite *baseReplicationTestSuite) TearDownTest() { suite.mu.Lock() defer suite.mu.Unlock() - // stop followers - for i, srv := range suite.followers { - if suite.followersRunning[i] { + // stop replicas + for i, srv := range suite.replicas { + if suite.replicasRunning[i] { srv.Shutdown(suite.T()) } } - suite.followers = []TestServer{} + suite.replicas = []TestServer{} - // stop master - if suite.master != nil { - suite.master.Shutdown(suite.T()) - suite.master = nil + // stop primary + if suite.primary != nil { + suite.primary.Shutdown(suite.T()) + suite.primary = nil } - suite.master = nil + suite.primary = nil } diff --git a/pkg/integration/replication/synchronous_replication_test.go b/pkg/integration/replication/synchronous_replication_test.go index 771bd38a9f..46d8de2309 100644 --- a/pkg/integration/replication/synchronous_replication_test.go +++ b/pkg/integration/replication/synchronous_replication_test.go @@ -13,23 +13,23 @@ import ( "github.com/stretchr/testify/suite" ) -type SyncTestSuiteMasterToAllFollowers struct { +type SyncTestSuitePrimaryToAllReplicas struct { baseReplicationTestSuite } -func TestSyncTestSuiteMasterToAllFollowers(t *testing.T) { - suite.Run(t, &SyncTestSuiteMasterToAllFollowers{}) +func TestSyncTestSuitePrimaryToAllReplicas(t *testing.T) { + suite.Run(t, &SyncTestSuitePrimaryToAllReplicas{}) } // this function executes before the test suite begins execution -func (suite *SyncTestSuiteMasterToAllFollowers) SetupTest() { +func (suite *SyncTestSuitePrimaryToAllReplicas) SetupTest() { suite.baseReplicationTestSuite.SetupTest() suite.SetupCluster(2, 2, 0) suite.ValidateClusterSetup() } -func (suite *SyncTestSuiteMasterToAllFollowers) TestSyncFromMasterToAllFollowers() { - ctx, client, cleanup := suite.ClientForMaster() +func (suite *SyncTestSuitePrimaryToAllReplicas) TestSyncFromPrimaryToAllReplicas() { + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() tx1, err := client.Set(ctx, []byte("key1"), []byte("value1")) @@ -38,14 +38,14 @@ func (suite *SyncTestSuiteMasterToAllFollowers) TestSyncFromMasterToAllFollowers tx2, err := client.Set(ctx, []byte("key2"), []byte("value2")) require.NoError(suite.T(), err) - for i := 0; i < suite.GetFollowersCount(); i++ { + for i := 0; i < suite.GetReplicasCount(); i++ { suite.Run(fmt.Sprintf("test replica %d", i), func() { ctx, client, cleanup := suite.ClientForReplica(i) defer cleanup() // Tests are flaky because it takes time to commit the // precommitted TX, so this function just ensures the state - // is in sync between master and follower + // is in sync between primary and replica suite.WaitForCommittedTx(ctx, client, tx2.Id, time.Duration(3)*time.Second) val, err := client.GetAt(ctx, []byte("key1"), tx1.Id) @@ -59,26 +59,26 @@ func (suite *SyncTestSuiteMasterToAllFollowers) TestSyncFromMasterToAllFollowers } } -type SyncTestSuiteMasterRestart struct { +type SyncTestSuitePrimaryRestart struct { baseReplicationTestSuite } -func TestSyncTestSuiteMasterRestart(t *testing.T) { - suite.Run(t, &SyncTestSuiteMasterRestart{}) +func TestSyncTestSuitePrimaryRestart(t *testing.T) { + suite.Run(t, &SyncTestSuitePrimaryRestart{}) } // this function executes before the test suite begins execution -func (suite *SyncTestSuiteMasterRestart) SetupTest() { +func (suite *SyncTestSuitePrimaryRestart) SetupTest() { suite.baseReplicationTestSuite.SetupTest() suite.SetupCluster(2, 2, 0) suite.ValidateClusterSetup() } -func (suite *SyncTestSuiteMasterRestart) TestMasterRestart() { +func (suite *SyncTestSuitePrimaryRestart) TestPrimaryRestart() { var txBeforeRestart *schema.TxHeader suite.Run("commit before restarting primary", func() { - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() tx, err := client.Set(ctx, []byte("key-before-restart"), []byte("value-before-restart")) @@ -87,23 +87,23 @@ func (suite *SyncTestSuiteMasterRestart) TestMasterRestart() { txBeforeRestart = tx }) - suite.RestartMaster() + suite.RestartPrimary() - suite.Run("commit after restarting master", func() { - ctx, client, cleanup := suite.ClientForMaster() + suite.Run("commit after restarting primary", func() { + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() tx, err := client.Set(ctx, []byte("key3"), []byte("value3")) require.NoError(suite.T(), err) - for i := 0; i < suite.GetFollowersCount(); i++ { - suite.Run(fmt.Sprintf("check follower %d", i), func() { + for i := 0; i < suite.GetReplicasCount(); i++ { + suite.Run(fmt.Sprintf("check replica %d", i), func() { ctx, client, cleanup := suite.ClientForReplica(i) defer cleanup() // Tests are flaky because it takes time to commit the // precommitted TX, so this function just ensures the state - // is in sync between master and follower + // is in sync between primary and replica suite.WaitForCommittedTx(ctx, client, tx.Id, 30*time.Second) // Longer time since replica must reestablish connection to the primary val, err := client.GetAt(ctx, []byte("key3"), tx.Id) @@ -133,42 +133,42 @@ func (suite *SyncTestSuitePrecommitStateSync) SetupTest() { suite.ValidateClusterSetup() } -// TestPrecommitStateSync checks if the precommit state at master -// and its followers are in sync during synchronous replication +// TestPrecommitStateSync checks if the precommit state at primary +// and its replicas are in sync during synchronous replication func (suite *SyncTestSuitePrecommitStateSync) TestPrecommitStateSync() { var ( - masterState *schema.ImmutableState - err error - startCh = make(chan bool) + primaryState *schema.ImmutableState + err error + startCh = make(chan bool) ) - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() // Create goroutines for client waiting to query the state - // of the followers. This is initialised before to avoid - // spending time initialising the follower client for faster + // of the replicas. This is initialized before to avoid + // spending time initializing the replica client for faster // state access var wg sync.WaitGroup - for i := 0; i < suite.GetFollowersCount(); i++ { + for i := 0; i < suite.GetReplicasCount(); i++ { wg.Add(1) - go func(followerID int) { + go func(replicaID int) { defer wg.Done() - ctx, client, cleanup := suite.ClientForReplica(followerID) + ctx, client, cleanup := suite.ClientForReplica(replicaID) defer cleanup() <-startCh - suite.Run(fmt.Sprintf("test replica sync state %d", followerID), func() { + suite.Run(fmt.Sprintf("test replica sync state %d", replicaID), func() { state, err := client.CurrentState(ctx) require.NoError(suite.T(), err) - suite.Require().Equal(state.PrecommittedTxId, masterState.TxId) - suite.Require().Equal(state.PrecommittedTxHash, masterState.TxHash) + suite.Require().Equal(state.PrecommittedTxId, primaryState.TxId) + suite.Require().Equal(state.PrecommittedTxHash, primaryState.TxHash) }) }(i) } - // add multiple keys to make update the master's state quickly + // add multiple keys to make update the primary's state quickly for i := 10; i < 30; i++ { key := fmt.Sprintf("key%d", i) value := fmt.Sprintf("value%d", i) @@ -176,8 +176,8 @@ func (suite *SyncTestSuitePrecommitStateSync) TestPrecommitStateSync() { require.NoError(suite.T(), err) } - // get the current precommit txn id state of master - masterState, err = client.CurrentState(ctx) + // get the current precommit txn id state of primary + primaryState, err = client.CurrentState(ctx) require.NoError(suite.T(), err) // close will unblock all goroutines @@ -186,30 +186,30 @@ func (suite *SyncTestSuitePrecommitStateSync) TestPrecommitStateSync() { wg.Wait() } -type SyncTestMinimumFollowersSuite struct { +type SyncTestMinimumReplicasSuite struct { baseReplicationTestSuite } -func TestSyncTestMinimumFollowersSuite(t *testing.T) { - suite.Run(t, &SyncTestMinimumFollowersSuite{}) +func TestSyncTestMinimumReplicasSuite(t *testing.T) { + suite.Run(t, &SyncTestMinimumReplicasSuite{}) } // this function executes before the test suite begins execution -func (suite *SyncTestMinimumFollowersSuite) SetupTest() { +func (suite *SyncTestMinimumReplicasSuite) SetupTest() { suite.baseReplicationTestSuite.SetupTest() suite.SetupCluster(4, 2, 0) suite.ValidateClusterSetup() } -// TestMinimumFollowers ensures the primary can operate as long as the minimum +// TestMinimumReplicas ensures the primary can operate as long as the minimum // number of replicas send their confirmations -func (suite *SyncTestMinimumFollowersSuite) TestMinimumFollowers() { +func (suite *SyncTestMinimumReplicasSuite) TestMinimumReplicas() { - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() suite.Run("should commit successfully without one replica", func() { - suite.StopFollower(0) + suite.StopReplica(0) ctxTimeout, cancel := context.WithTimeout(ctx, time.Second) defer cancel() @@ -219,7 +219,7 @@ func (suite *SyncTestMinimumFollowersSuite) TestMinimumFollowers() { }) suite.Run("should commit successfully without two replicas", func() { - suite.StopFollower(1) + suite.StopReplica(1) ctxTimeout, cancel := context.WithTimeout(ctx, time.Second) defer cancel() @@ -229,7 +229,7 @@ func (suite *SyncTestMinimumFollowersSuite) TestMinimumFollowers() { }) suite.Run("should not commit without three replicas", func() { - suite.StopFollower(2) + suite.StopReplica(2) ctxTimeout, cancel := context.WithTimeout(ctx, time.Second) defer cancel() @@ -240,7 +240,7 @@ func (suite *SyncTestMinimumFollowersSuite) TestMinimumFollowers() { }) suite.Run("should commit again once first replica is back online", func() { - suite.StartFollower(0) + suite.StartReplica(0) ctxTimeout, cancel := context.WithTimeout(ctx, time.Second) defer cancel() @@ -250,11 +250,11 @@ func (suite *SyncTestMinimumFollowersSuite) TestMinimumFollowers() { }) suite.Run("should recover with all replicas replaced", func() { - suite.StopFollower(0) - suite.StopFollower(3) + suite.StopReplica(0) + suite.StopReplica(3) - suite.AddFollower(true) - suite.AddFollower(true) + suite.AddReplica(true) + suite.AddReplica(true) ctxTimeout, cancel := context.WithTimeout(ctx, time.Second) defer cancel() @@ -304,9 +304,9 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { const parallelWriters = 30 const samplingTime = time.Second * 5 - // Stop the follower, we don't replicate any transactions to it now + // Stop the replica, we don't replicate any transactions to it now // but we can still commit using the second replica - suite.StopFollower(0) + suite.StopReplica(0) var txWritten uint64 @@ -323,7 +323,7 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { go func(i int) { defer wgFinish.Done() - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() // Wait for the start signal @@ -365,10 +365,10 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { suite.Run("Ensure replica can recover in reasonable amount of time", func() { - // Stop the second follower, now the DB is locked - suite.StopFollower(1) + // Stop the second replica, now the DB is locked + suite.StopReplica(1) - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() state, err := client.CurrentState(ctx) @@ -377,23 +377,23 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { // Check if we can recover the cluster and perform write within the double the amount of time // that was needed for initial sampling. The replica that was initially stopped and now - // started has the same amount of transaction to grab from master as the other one + // started has the same amount of transaction to grab from primary as the other one // which should take the same amount of time as the initial write period or less // (since the primary is not persisting data this time). ctxTimeout, cancel := context.WithTimeout(ctx, samplingTime*2) defer cancel() - suite.StartFollower(0) // 1 down + suite.StartReplica(0) // 1 down tx, err = client.Set(ctxTimeout, []byte("key-after-recovery"), []byte("value-after-recovery")) suite.NoError(err) }) suite.Run("Ensure the data is readable from replicas", func() { - suite.StartFollower(1) + suite.StartReplica(1) suite.Run("primary", func() { - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() val, err := client.GetAt(ctx, []byte("key-after-recovery"), tx.Id) @@ -401,7 +401,7 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { suite.Equal([]byte("value-after-recovery"), val.Value) }) - for i := 0; i < suite.GetFollowersCount(); i++ { + for i := 0; i < suite.GetReplicasCount(); i++ { suite.Run(fmt.Sprintf("replica %d", i), func() { ctx, client, cleanup := suite.ClientForReplica(i) defer cleanup() @@ -417,21 +417,21 @@ func (suite *SyncTestRecoverySpeedSuite) TestReplicaRecoverySpeed() { } -type SyncTestWithAsyncFollowersSuite struct { +type SyncTestWithAsyncReplicaSuite struct { baseReplicationTestSuite } -func TestSyncTestWithAsyncFollowersSuite(t *testing.T) { - suite.Run(t, &SyncTestWithAsyncFollowersSuite{}) +func TestSyncTestWithAsyncReplicaSuite(t *testing.T) { + suite.Run(t, &SyncTestWithAsyncReplicaSuite{}) } -func (suite *SyncTestWithAsyncFollowersSuite) SetupTest() { +func (suite *SyncTestWithAsyncReplicaSuite) SetupTest() { suite.baseReplicationTestSuite.SetupTest() suite.SetupCluster(2, 1, 1) suite.ValidateClusterSetup() } -func (suite *SyncTestWithAsyncFollowersSuite) TestSyncReplicationAlongWithAsyncFollowers() { +func (suite *SyncTestWithAsyncReplicaSuite) TestSyncReplicationAlongWithAsyncReplicas() { const parallelWriters = 30 const samplingTime = time.Second * 5 @@ -450,7 +450,7 @@ func (suite *SyncTestWithAsyncFollowersSuite) TestSyncReplicationAlongWithAsyncF go func(i int) { defer wgFinish.Done() - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() // Wait for the start signal @@ -488,14 +488,14 @@ func (suite *SyncTestWithAsyncFollowersSuite) TestSyncReplicationAlongWithAsyncF }) suite.Run("Ensure the data is available in all the replicas", func() { - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() state, err := client.CurrentState(ctx) suite.Require().NoError(err) suite.Require().Greater(state.TxId, txWritten, "Ensure enough TXs were written") - for i := 0; i < suite.GetFollowersCount(); i++ { + for i := 0; i < suite.GetReplicasCount(); i++ { suite.Run(fmt.Sprintf("replica %d", i), func() { ctx, client, cleanup := suite.ClientForReplica(i) defer cleanup() @@ -507,65 +507,65 @@ func (suite *SyncTestWithAsyncFollowersSuite) TestSyncReplicationAlongWithAsyncF } -type SyncTestChangingMasterSuite struct { +type SyncTestChangingPrimarySuite struct { baseReplicationTestSuite } -func TestSyncTestChangingMasterSuite(t *testing.T) { - suite.Run(t, &SyncTestChangingMasterSuite{}) +func TestSyncTestChangingPrimarySuite(t *testing.T) { + suite.Run(t, &SyncTestChangingPrimarySuite{}) } -func (suite *SyncTestChangingMasterSuite) SetupTest() { +func (suite *SyncTestChangingPrimarySuite) SetupTest() { suite.baseReplicationTestSuite.SetupTest() suite.SetupCluster(2, 2, 0) suite.ValidateClusterSetup() } -func (suite *SyncTestChangingMasterSuite) TestSyncTestChangingMasterSuite() { - var txBeforeChangingMaster *schema.TxHeader +func (suite *SyncTestChangingPrimarySuite) TestSyncTestChangingPrimarySuite() { + var txBeforeChangingPrimary *schema.TxHeader suite.Run("commit before changing primary", func() { - ctx, client, cleanup := suite.ClientForMaster() + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() - tx, err := client.Set(ctx, []byte("key-before-master-change"), []byte("value-before-master-change")) + tx, err := client.Set(ctx, []byte("key-before-primary-change"), []byte("value-before-primary-change")) require.NoError(suite.T(), err) - txBeforeChangingMaster = tx + txBeforeChangingPrimary = tx }) - // it's possible to promote any replica as new master because ack from all replicas is required by master - // ensure the replica to be promoted is up to date with master's commit state + // it's possible to promote any replica as new primary because ack from all replicas is required by primary + // ensure the replica to be promoted is up to date with primary's commit state ctx, client, cleanup := suite.ClientForReplica(1) - suite.WaitForCommittedTx(ctx, client, txBeforeChangingMaster.Id, 1*time.Second) + suite.WaitForCommittedTx(ctx, client, txBeforeChangingPrimary.Id, 1*time.Second) cleanup() - suite.PromoteFollower(1, 1) + suite.PromoteReplica(1, 1) - suite.Run("commit after changing master", func() { - ctx, client, cleanup := suite.ClientForMaster() + suite.Run("commit after changing primary", func() { + ctx, client, cleanup := suite.ClientForPrimary() defer cleanup() - tx, err := client.Set(ctx, []byte("key-after-master-change"), []byte("value-after-master-change")) + tx, err := client.Set(ctx, []byte("key-after-primary-change"), []byte("value-after-primary-change")) require.NoError(suite.T(), err) - for i := 0; i < suite.GetFollowersCount(); i++ { - suite.Run(fmt.Sprintf("check follower %d", i), func() { + for i := 0; i < suite.GetReplicasCount(); i++ { + suite.Run(fmt.Sprintf("check replica %d", i), func() { ctx, client, cleanup := suite.ClientForReplica(i) defer cleanup() // Tests are flaky because it takes time to commit the // precommitted TX, so this function just ensures the state - // is in sync between master and follower + // is in sync between primary and replica suite.WaitForCommittedTx(ctx, client, tx.Id, 30*time.Second) // Longer time since replica must reestablish connection to the primary - val, err := client.GetAt(ctx, []byte("key-before-master-change"), txBeforeChangingMaster.Id) + val, err := client.GetAt(ctx, []byte("key-before-primary-change"), txBeforeChangingPrimary.Id) require.NoError(suite.T(), err) - require.Equal(suite.T(), []byte("value-before-master-change"), val.Value) + require.Equal(suite.T(), []byte("value-before-primary-change"), val.Value) - val, err = client.GetAt(ctx, []byte("key-after-master-change"), tx.Id) + val, err = client.GetAt(ctx, []byte("key-after-primary-change"), tx.Id) require.NoError(suite.T(), err) - require.Equal(suite.T(), []byte("value-after-master-change"), val.Value) + require.Equal(suite.T(), []byte("value-after-primary-change"), val.Value) }) } }) diff --git a/pkg/integration/stream/stream_replication_test.go b/pkg/integration/stream/stream_replication_test.go index f407602ac1..3aa32bbe8c 100644 --- a/pkg/integration/stream/stream_replication_test.go +++ b/pkg/integration/stream/stream_replication_test.go @@ -52,9 +52,9 @@ func TestImmuClient_ExportAndReplicateTx(t *testing.T) { ctx := metadata.NewOutgoingContext(context.Background(), md) err = client.CreateDatabase(ctx, &schema.DatabaseSettings{ - DatabaseName: "replicateddb", - Replica: true, - MasterDatabase: "defaultdb", + DatabaseName: "replicateddb", + Replica: true, + PrimaryDatabase: "defaultdb", }) require.NoError(t, err) diff --git a/pkg/replication/options.go b/pkg/replication/options.go index b80d1ac7a7..825d52b615 100644 --- a/pkg/replication/options.go +++ b/pkg/replication/options.go @@ -24,11 +24,11 @@ const DefaultReplicationCommitConcurrency int = 10 const DefaultAllowTxDiscarding = false type Options struct { - masterDatabase string - masterAddress string - masterPort int - followerUsername string - followerPassword string + primaryDatabase string + primaryHost string + primaryPort int + primaryUsername string + primaryPassword string streamChunkSize int @@ -65,33 +65,33 @@ func (opts *Options) Valid() bool { opts.delayer != nil } -// WithMasterDatabase sets the source database name -func (o *Options) WithMasterDatabase(masterDatabase string) *Options { - o.masterDatabase = masterDatabase +// WithPrimaryDatabase sets the source database name +func (o *Options) WithPrimaryDatabase(primaryDatabase string) *Options { + o.primaryDatabase = primaryDatabase return o } -// WithMasterAddress sets the source database address -func (o *Options) WithMasterAddress(masterAddress string) *Options { - o.masterAddress = masterAddress +// WithPrimaryHost sets the source database address +func (o *Options) WithPrimaryHost(primaryHost string) *Options { + o.primaryHost = primaryHost return o } -// WithMasterPort sets the source database port -func (o *Options) WithMasterPort(masterPort int) *Options { - o.masterPort = masterPort +// WithPrimaryPort sets the source database port +func (o *Options) WithPrimaryPort(primaryPort int) *Options { + o.primaryPort = primaryPort return o } -// WithFollowerUsername sets username used for replication -func (o *Options) WithFollowerUsername(followerUsername string) *Options { - o.followerUsername = followerUsername +// WithPrimaryUsername sets username used for replication +func (o *Options) WithPrimaryUsername(primaryUsername string) *Options { + o.primaryUsername = primaryUsername return o } -// WithFollowerPassword sets password used for replication -func (o *Options) WithFollowerPassword(followerPassword string) *Options { - o.followerPassword = followerPassword +// WithPrimaryPassword sets password used for replication +func (o *Options) WithPrimaryPassword(primaryPassword string) *Options { + o.primaryPassword = primaryPassword return o } diff --git a/pkg/replication/options_test.go b/pkg/replication/options_test.go index a82cef2626..d5038b360f 100644 --- a/pkg/replication/options_test.go +++ b/pkg/replication/options_test.go @@ -34,22 +34,22 @@ func TestOptions(t *testing.T) { retryJitter: 0.1, } - opts.WithMasterDatabase("defaultdb"). - WithMasterAddress("127.0.0.1"). - WithMasterPort(3322). - WithFollowerUsername("immudbUsr"). - WithFollowerPassword("immdubPwd"). + opts.WithPrimaryDatabase("defaultdb"). + WithPrimaryHost("127.0.0.1"). + WithPrimaryPort(3322). + WithPrimaryUsername("immudbUsr"). + WithPrimaryPassword("immdubPwd"). WithStreamChunkSize(DefaultChunkSize). WithPrefetchTxBufferSize(DefaultPrefetchTxBufferSize). WithReplicationCommitConcurrency(DefaultReplicationCommitConcurrency). WithAllowTxDiscarding(true). WithDelayer(delayer) - require.Equal(t, "defaultdb", opts.masterDatabase) - require.Equal(t, "127.0.0.1", opts.masterAddress) - require.Equal(t, 3322, opts.masterPort) - require.Equal(t, "immudbUsr", opts.followerUsername) - require.Equal(t, "immdubPwd", opts.followerPassword) + require.Equal(t, "defaultdb", opts.primaryDatabase) + require.Equal(t, "127.0.0.1", opts.primaryHost) + require.Equal(t, 3322, opts.primaryPort) + require.Equal(t, "immudbUsr", opts.primaryUsername) + require.Equal(t, "immdubPwd", opts.primaryPassword) require.Equal(t, DefaultChunkSize, opts.streamChunkSize) require.Equal(t, DefaultPrefetchTxBufferSize, opts.prefetchTxBufferSize) require.Equal(t, DefaultReplicationCommitConcurrency, opts.replicationCommitConcurrency) diff --git a/pkg/replication/replicator.go b/pkg/replication/replicator.go index 56d8400833..916d20c848 100644 --- a/pkg/replication/replicator.go +++ b/pkg/replication/replicator.go @@ -38,8 +38,8 @@ import ( var ErrIllegalArguments = errors.New("illegal arguments") var ErrAlreadyRunning = errors.New("already running") var ErrAlreadyStopped = errors.New("already stopped") -var ErrFollowerDivergedFromMaster = errors.New("follower diverged from master") -var ErrNoSynchronousReplicationOnMaster = errors.New("master is not running with synchronous replication") +var ErrReplicaDivergedFromPrimary = errors.New("replica diverged from primary") +var ErrNoSynchronousReplicationOnPrimary = errors.New("primary is not running with synchronous replication") var ErrInvalidReplicationMetadata = errors.New("invalid replication metadata retrieved") type prefetchTxEntry struct { @@ -53,7 +53,7 @@ type TxReplicator struct { db database.DB opts *Options - _masterDB string // just a string denoting master database i.e. db@address:port + _primaryDB string // just a string denoting primary database i.e. db@host:port logger logger.Logger @@ -91,7 +91,7 @@ func NewTxReplicator(uuid xid.ID, db database.DB, opts *Options, logger logger.L db: db, opts: opts, logger: logger, - _masterDB: fullAddress(opts.masterDatabase, opts.masterAddress, opts.masterPort), + _primaryDB: fullAddress(opts.primaryDatabase, opts.primaryHost, opts.primaryPort), streamSrvFactory: stream.NewStreamServiceFactory(opts.streamChunkSize), prefetchTxBuffer: make(chan prefetchTxEntry, opts.prefetchTxBufferSize), replicationConcurrency: opts.replicationCommitConcurrency, @@ -110,7 +110,7 @@ func (txr *TxReplicator) handleError(err error) (terminate bool) { return false } - if errors.Is(err, ErrAlreadyStopped) || errors.Is(err, ErrFollowerDivergedFromMaster) { + if errors.Is(err, ErrAlreadyStopped) || errors.Is(err, ErrReplicaDivergedFromPrimary) { return true } @@ -118,7 +118,7 @@ func (txr *TxReplicator) handleError(err error) (terminate bool) { txr.logger.Infof("Replication error on database '%s' from '%s' (%d consecutive failures). Reason: %s", txr.db.GetName(), - txr._masterDB, + txr._primaryDB, txr.consecutiveFailures, err.Error()) @@ -147,14 +147,14 @@ func (txr *TxReplicator) Start() error { return ErrAlreadyRunning } - txr.logger.Infof("Initializing replication from '%s' to '%s'...", txr._masterDB, txr.db.GetName()) + txr.logger.Infof("Initializing replication from '%s' to '%s'...", txr._primaryDB, txr.db.GetName()) txr.context, txr.cancelFunc = context.WithCancel(context.Background()) txr.running = true go func() { - txr.logger.Infof("Replication for '%s' started fetching transaction from '%s'...", txr.db.GetName(), txr._masterDB) + txr.logger.Infof("Replication for '%s' started fetching transaction from '%s'...", txr.db.GetName(), txr._primaryDB) var err error @@ -165,9 +165,9 @@ func (txr *TxReplicator) Start() error { } } - txr.logger.Infof("Replication for '%s' stopped fetching transaction from '%s'", txr.db.GetName(), txr._masterDB) + txr.logger.Infof("Replication for '%s' stopped fetching transaction from '%s'", txr.db.GetName(), txr._primaryDB) - if errors.Is(err, ErrFollowerDivergedFromMaster) { + if errors.Is(err, ErrReplicaDivergedFromPrimary) { txr.Stop() } }() @@ -189,7 +189,7 @@ func (txr *TxReplicator) Start() error { }() } - txr.logger.Infof("Replication from '%s' to '%s' successfully initialized", txr._masterDB, txr.db.GetName()) + txr.logger.Infof("Replication from '%s' to '%s' successfully initialized", txr._primaryDB, txr.db.GetName()) return nil } @@ -215,7 +215,7 @@ func (txr *TxReplicator) replicateSingleTx(data []byte) bool { break // transaction successfully replicated } - txr.logger.Infof("Failed to replicate transaction from '%s' to '%s'. Reason: %s", txr._masterDB, txr.db.GetName(), err.Error()) + txr.logger.Infof("Failed to replicate transaction from '%s' to '%s'. Reason: %s", txr._primaryDB, txr.db.GetName(), err.Error()) consecutiveFailures++ @@ -249,22 +249,22 @@ func fullAddress(db, address string, port int) string { func (txr *TxReplicator) connect() error { txr.logger.Infof("Connecting to '%s':'%d' for database '%s'...", - txr.opts.masterAddress, - txr.opts.masterPort, + txr.opts.primaryHost, + txr.opts.primaryPort, txr.db.GetName()) - opts := client.DefaultOptions().WithAddress(txr.opts.masterAddress).WithPort(txr.opts.masterPort) + opts := client.DefaultOptions().WithAddress(txr.opts.primaryHost).WithPort(txr.opts.primaryPort) txr.client = client.NewClient().WithOptions(opts) err := txr.client.OpenSession( - txr.context, []byte(txr.opts.followerUsername), []byte(txr.opts.followerPassword), txr.opts.masterDatabase) + txr.context, []byte(txr.opts.primaryUsername), []byte(txr.opts.primaryPassword), txr.opts.primaryDatabase) if err != nil { return err } txr.logger.Infof("Connection to '%s':'%d' for database '%s' successfully established", - txr.opts.masterAddress, - txr.opts.masterPort, + txr.opts.primaryHost, + txr.opts.primaryPort, txr.db.GetName()) return nil @@ -275,13 +275,13 @@ func (txr *TxReplicator) disconnect() { return } - txr.logger.Infof("Disconnecting from '%s':'%d' for database '%s'...", txr.opts.masterAddress, txr.opts.masterPort, txr.db.GetName()) + txr.logger.Infof("Disconnecting from '%s':'%d' for database '%s'...", txr.opts.primaryHost, txr.opts.primaryPort, txr.db.GetName()) txr.client.CloseSession(txr.context) txr.client = nil - txr.logger.Infof("Disconnected from '%s':'%d' for database '%s'", txr.opts.masterAddress, txr.opts.masterPort, txr.db.GetName()) + txr.logger.Infof("Disconnected from '%s':'%d' for database '%s'", txr.opts.primaryHost, txr.opts.primaryPort, txr.db.GetName()) } func (txr *TxReplicator) fetchNextTx() error { @@ -312,10 +312,10 @@ func (txr *TxReplicator) fetchNextTx() error { nextTx := txr.lastTx + 1 - var state *schema.FollowerState + var state *schema.ReplicaState if syncReplicationEnabled { - state = &schema.FollowerState{ + state = &schema.ReplicaState{ UUID: txr.uuid.String(), CommittedTxID: commitState.TxId, CommittedAlh: commitState.TxHash, @@ -326,7 +326,7 @@ func (txr *TxReplicator) fetchNextTx() error { exportTxStream, err := txr.client.ExportTx(txr.context, &schema.ExportTxRequest{ Tx: nextTx, - FollowerState: state, + ReplicaState: state, AllowPreCommitted: syncReplicationEnabled, }) if err != nil { @@ -337,16 +337,16 @@ func (txr *TxReplicator) fetchNextTx() error { etx, err := receiver.ReadFully() if err != nil && !errors.Is(err, io.EOF) { - if strings.Contains(err.Error(), "follower commit state diverged from master's") { - txr.logger.Errorf("follower commit state at '%s' diverged from master's", txr.db.GetName()) - return ErrFollowerDivergedFromMaster + if strings.Contains(err.Error(), "commit state diverged from") { + txr.logger.Errorf("replica commit state at '%s' diverged from primary's", txr.db.GetName()) + return ErrReplicaDivergedFromPrimary } - if strings.Contains(err.Error(), "follower precommit state diverged from master's") { + if strings.Contains(err.Error(), "precommit state diverged from") { if !txr.allowTxDiscarding { - txr.logger.Errorf("follower precommit state at '%s' diverged from master's", txr.db.GetName()) - return ErrFollowerDivergedFromMaster + txr.logger.Errorf("replica precommit state at '%s' diverged from primary's", txr.db.GetName()) + return ErrReplicaDivergedFromPrimary } txr.logger.Infof("discarding precommit txs since %d from '%s'. Reason: %s", nextTx, txr.db.GetName(), err.Error()) @@ -372,7 +372,7 @@ func (txr *TxReplicator) fetchNextTx() error { if len(md.Get("may-commit-up-to-txid-bin")) == 0 || len(md.Get("may-commit-up-to-alh-bin")) == 0 || len(md.Get("committed-txid-bin")) == 0 { - return ErrNoSynchronousReplicationOnMaster + return ErrNoSynchronousReplicationOnPrimary } if len(md.Get("may-commit-up-to-txid-bin")[0]) != 8 || @@ -393,9 +393,9 @@ func (txr *TxReplicator) fetchNextTx() error { if mayCommitUpToTxID > commitState.TxId { err = txr.db.AllowCommitUpto(mayCommitUpToTxID, mayCommitUpToAlh) if err != nil { - if strings.Contains(err.Error(), "follower commit state diverged from master's") { - txr.logger.Errorf("follower commit state at '%s' diverged from master's", txr.db.GetName()) - return ErrFollowerDivergedFromMaster + if strings.Contains(err.Error(), "commit state diverged from") { + txr.logger.Errorf("replica commit state at '%s' diverged from primary's", txr.db.GetName()) + return ErrReplicaDivergedFromPrimary } return err @@ -404,7 +404,7 @@ func (txr *TxReplicator) fetchNextTx() error { } if len(etx) > 0 { - // in some cases the transaction is not provided but only the master commit state + // in some cases the transaction is not provided but only the primary commit state txr.prefetchTxBuffer <- prefetchTxEntry{ data: etx, addedAt: time.Now(), diff --git a/pkg/replication/replicator_test.go b/pkg/replication/replicator_test.go index f0ef1f0e9f..13688e95cc 100644 --- a/pkg/replication/replicator_test.go +++ b/pkg/replication/replicator_test.go @@ -36,11 +36,11 @@ func TestReplication(t *testing.T) { require.ErrorIs(t, err, ErrIllegalArguments) rOpts := DefaultOptions(). - WithMasterDatabase("defaultdb"). - WithMasterAddress("127.0.0.1"). - WithMasterPort(3322). - WithFollowerUsername("immudb"). - WithFollowerPassword("immudb"). + WithPrimaryDatabase("defaultdb"). + WithPrimaryHost("127.0.0.1"). + WithPrimaryPort(3322). + WithPrimaryUsername("immudb"). + WithPrimaryPassword("immudb"). WithStreamChunkSize(DefaultChunkSize) logger := logger.NewSimpleLogger("logger", os.Stdout) diff --git a/pkg/server/db_options.go b/pkg/server/db_options.go index 7771b97e78..e9e6d7772b 100644 --- a/pkg/server/db_options.go +++ b/pkg/server/db_options.go @@ -37,14 +37,14 @@ type dbOptions struct { synced bool // currently a global immudb instance option SyncFrequency Milliseconds `json:"syncFrequency"` // ms - // replication options + // replication options (field names must be kept for backwards compatibility) Replica bool `json:"replica"` SyncReplication bool `json:"syncReplication"` - MasterDatabase string `json:"masterDatabase"` - MasterAddress string `json:"masterAddress"` - MasterPort int `json:"masterPort"` - FollowerUsername string `json:"followerUsername"` - FollowerPassword string `json:"followerPassword"` + PrimaryDatabase string `json:"masterDatabase"` + PrimaryHost string `json:"masterAddress"` + PrimaryPort int `json:"masterPort"` + PrimaryUsername string `json:"followerUsername"` + PrimaryPassword string `json:"followerPassword"` SyncAcks int `json:"syncAcks"` PrefetchTxBufferSize int `json:"prefetchTxBufferSize"` ReplicationCommitConcurrency int `json:"replicationCommitConcurrency"` @@ -160,11 +160,11 @@ func (s *ImmuServer) defaultDBOptions(dbName string) *dbOptions { dbOpts.SyncReplication = repOpts.SyncReplication if dbOpts.Replica { - dbOpts.MasterDatabase = dbOpts.Database // replica of systemdb and defaultdb must have the same name as in master - dbOpts.MasterAddress = repOpts.MasterAddress - dbOpts.MasterPort = repOpts.MasterPort - dbOpts.FollowerUsername = repOpts.FollowerUsername - dbOpts.FollowerPassword = repOpts.FollowerPassword + dbOpts.PrimaryDatabase = dbOpts.Database // replica of systemdb and defaultdb must have the same name as in primary + dbOpts.PrimaryHost = repOpts.PrimaryHost + dbOpts.PrimaryPort = repOpts.PrimaryPort + dbOpts.PrimaryUsername = repOpts.PrimaryUsername + dbOpts.PrimaryPassword = repOpts.PrimaryPassword dbOpts.PrefetchTxBufferSize = repOpts.PrefetchTxBufferSize dbOpts.ReplicationCommitConcurrency = repOpts.ReplicationCommitConcurrency dbOpts.AllowTxDiscarding = repOpts.AllowTxDiscarding @@ -271,11 +271,11 @@ func (opts *dbOptions) databaseNullableSettings() *schema.DatabaseNullableSettin ReplicationSettings: &schema.ReplicationNullableSettings{ Replica: &schema.NullableBool{Value: opts.Replica}, SyncReplication: &schema.NullableBool{Value: opts.SyncReplication}, - MasterDatabase: &schema.NullableString{Value: opts.MasterDatabase}, - MasterAddress: &schema.NullableString{Value: opts.MasterAddress}, - MasterPort: &schema.NullableUint32{Value: uint32(opts.MasterPort)}, - FollowerUsername: &schema.NullableString{Value: opts.FollowerUsername}, - FollowerPassword: &schema.NullableString{Value: opts.FollowerPassword}, + PrimaryDatabase: &schema.NullableString{Value: opts.PrimaryDatabase}, + PrimaryHost: &schema.NullableString{Value: opts.PrimaryHost}, + PrimaryPort: &schema.NullableUint32{Value: uint32(opts.PrimaryPort)}, + PrimaryUsername: &schema.NullableString{Value: opts.PrimaryUsername}, + PrimaryPassword: &schema.NullableString{Value: opts.PrimaryPassword}, SyncAcks: &schema.NullableUint32{Value: uint32(opts.SyncAcks)}, PrefetchTxBufferSize: &schema.NullableUint32{Value: uint32(opts.PrefetchTxBufferSize)}, ReplicationCommitConcurrency: &schema.NullableUint32{Value: uint32(opts.ReplicationCommitConcurrency)}, @@ -346,12 +346,12 @@ func dbSettingsToDBNullableSettings(settings *schema.DatabaseSettings) *schema.D } repSettings := &schema.ReplicationNullableSettings{ - Replica: &schema.NullableBool{Value: settings.Replica}, - MasterDatabase: &schema.NullableString{Value: settings.MasterDatabase}, - MasterAddress: &schema.NullableString{Value: settings.MasterAddress}, - MasterPort: &schema.NullableUint32{Value: settings.MasterPort}, - FollowerUsername: &schema.NullableString{Value: settings.FollowerUsername}, - FollowerPassword: &schema.NullableString{Value: settings.FollowerPassword}, + Replica: &schema.NullableBool{Value: settings.Replica}, + PrimaryDatabase: &schema.NullableString{Value: settings.PrimaryDatabase}, + PrimaryHost: &schema.NullableString{Value: settings.PrimaryHost}, + PrimaryPort: &schema.NullableUint32{Value: settings.PrimaryPort}, + PrimaryUsername: &schema.NullableString{Value: settings.PrimaryUsername}, + PrimaryPassword: &schema.NullableString{Value: settings.PrimaryPassword}, } if !settings.Replica { @@ -422,30 +422,30 @@ func (s *ImmuServer) overwriteWith(opts *dbOptions, settings *schema.DatabaseNul } else if opts.Replica { opts.SyncAcks = 0 } - if rs.MasterDatabase != nil { - opts.MasterDatabase = rs.MasterDatabase.Value + if rs.PrimaryDatabase != nil { + opts.PrimaryDatabase = rs.PrimaryDatabase.Value } else if !opts.Replica { - opts.MasterDatabase = "" + opts.PrimaryDatabase = "" } - if rs.MasterAddress != nil { - opts.MasterAddress = rs.MasterAddress.Value + if rs.PrimaryHost != nil { + opts.PrimaryHost = rs.PrimaryHost.Value } else if !opts.Replica { - opts.MasterAddress = "" + opts.PrimaryHost = "" } - if rs.MasterPort != nil { - opts.MasterPort = int(rs.MasterPort.Value) + if rs.PrimaryPort != nil { + opts.PrimaryPort = int(rs.PrimaryPort.Value) } else if !opts.Replica { - opts.MasterPort = 0 + opts.PrimaryPort = 0 } - if rs.FollowerUsername != nil { - opts.FollowerUsername = rs.FollowerUsername.Value + if rs.PrimaryUsername != nil { + opts.PrimaryUsername = rs.PrimaryUsername.Value } else if !opts.Replica { - opts.FollowerUsername = "" + opts.PrimaryUsername = "" } - if rs.FollowerPassword != nil { - opts.FollowerPassword = rs.FollowerPassword.Value + if rs.PrimaryPassword != nil { + opts.PrimaryPassword = rs.PrimaryPassword.Value } else if !opts.Replica { - opts.FollowerPassword = "" + opts.PrimaryPassword = "" } if rs.PrefetchTxBufferSize != nil { opts.PrefetchTxBufferSize = int(rs.PrefetchTxBufferSize.Value) @@ -623,67 +623,67 @@ func (opts *dbOptions) Validate() error { } else { if opts.SyncAcks < 0 { return fmt.Errorf( - "%w: invalid value for replication option SyncAcks on master database '%s'", + "%w: invalid value for replication option SyncAcks on primary database '%s'", ErrIllegalArguments, opts.Database) } - if opts.MasterDatabase != "" { + if opts.PrimaryDatabase != "" { return fmt.Errorf( - "%w: invalid value for replication option MasterDatabase on master database '%s'", + "%w: invalid value for replication option PrimaryDatabase on primary database '%s'", ErrIllegalArguments, opts.Database) } - if opts.MasterAddress != "" { + if opts.PrimaryHost != "" { return fmt.Errorf( - "%w: invalid value for replication option MasterAddress on master database '%s'", + "%w: invalid value for replication option PrimaryHost on primary database '%s'", ErrIllegalArguments, opts.Database) } - if opts.MasterPort > 0 { + if opts.PrimaryPort > 0 { return fmt.Errorf( - "%w: invalid value for replication option MasterPort on master database '%s'", + "%w: invalid value for replication option PrimaryPort on primary database '%s'", ErrIllegalArguments, opts.Database) } - if opts.FollowerUsername != "" { + if opts.PrimaryUsername != "" { return fmt.Errorf( - "%w: invalid value for replication option FollowerUsername on master database '%s'", + "%w: invalid value for replication option PrimaryUsername on primary database '%s'", ErrIllegalArguments, opts.Database) } - if opts.FollowerPassword != "" { + if opts.PrimaryPassword != "" { return fmt.Errorf( - "%w: invalid value for replication option FollowerPassword on master database '%s'", + "%w: invalid value for replication option PrimaryPassword on primary database '%s'", ErrIllegalArguments, opts.Database) } if opts.PrefetchTxBufferSize > 0 { return fmt.Errorf( - "%w: invalid value for replication option PrefetchTxBufferSize on master database '%s'", + "%w: invalid value for replication option PrefetchTxBufferSize on primary database '%s'", ErrIllegalArguments, opts.Database) } if opts.ReplicationCommitConcurrency > 0 { return fmt.Errorf( - "%w: invalid value for replication option ReplicationCommitConcurrency on master database '%s'", + "%w: invalid value for replication option ReplicationCommitConcurrency on primary database '%s'", ErrIllegalArguments, opts.Database) } if opts.AllowTxDiscarding { return fmt.Errorf( - "%w: invalid value for replication option AllowTxDiscarding on master database '%s'", + "%w: invalid value for replication option AllowTxDiscarding on primary database '%s'", ErrIllegalArguments, opts.Database) } if opts.SyncReplication && opts.SyncAcks == 0 { return fmt.Errorf( - "%w: invalid replication options for master database '%s'. It is necessary to have at least one sync follower", + "%w: invalid replication options for primary database '%s'. It is necessary to have at least one sync replica", ErrIllegalArguments, opts.Database) } if !opts.SyncReplication && opts.SyncAcks > 0 { return fmt.Errorf( - "%w: invalid replication options for master database '%s'. SyncAcks should be set to 0", + "%w: invalid replication options for primary database '%s'. SyncAcks should be set to 0", ErrIllegalArguments, opts.Database) } } @@ -700,9 +700,9 @@ func (opts *dbOptions) Validate() error { func (opts *dbOptions) isReplicatorRequired() bool { return opts.Replica && - opts.MasterDatabase != "" && - opts.MasterAddress != "" && - opts.MasterPort > 0 + opts.PrimaryDatabase != "" && + opts.PrimaryHost != "" && + opts.PrimaryPort > 0 } func (s *ImmuServer) saveDBOptions(options *dbOptions) error { diff --git a/pkg/server/db_options_test.go b/pkg/server/db_options_test.go index 970254e67b..2d71385f44 100644 --- a/pkg/server/db_options_test.go +++ b/pkg/server/db_options_test.go @@ -69,7 +69,7 @@ func TestReplicaOptions(t *testing.T) { require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) } -func TestMasterOptions(t *testing.T) { +func TestPrimaryOptions(t *testing.T) { dir, err := ioutil.TempDir("", "server_test") require.NoError(t, err) defer os.RemoveAll(dir) @@ -100,19 +100,19 @@ func TestMasterOptions(t *testing.T) { opts.PrefetchTxBufferSize = 100 require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) - opts.FollowerPassword = "follower-pwd" + opts.PrimaryPassword = "primary-pwd" require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) - opts.FollowerUsername = "follower-username" + opts.PrimaryUsername = "primary-username" require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) - opts.MasterPort = 3323 + opts.PrimaryPort = 3323 require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) - opts.MasterAddress = "localhost" + opts.PrimaryHost = "localhost" require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) - opts.MasterDatabase = "masterdb" + opts.PrimaryDatabase = "primarydb" require.ErrorIs(t, opts.Validate(), ErrIllegalArguments) opts.SyncAcks = -1 diff --git a/pkg/server/options.go b/pkg/server/options.go index 1fecbc6d16..54a54fa8f6 100644 --- a/pkg/server/options.go +++ b/pkg/server/options.go @@ -87,10 +87,10 @@ type ReplicationOptions struct { IsReplica bool SyncReplication bool SyncAcks int // only if !IsReplica && SyncReplication - MasterAddress string // only if IsReplica - MasterPort int // only if IsReplica - FollowerUsername string // only if IsReplica - FollowerPassword string // only if IsReplica + PrimaryHost string // only if IsReplica + PrimaryPort int // only if IsReplica + PrimaryUsername string // only if IsReplica + PrimaryPassword string // only if IsReplica PrefetchTxBufferSize int // only if IsReplica ReplicationCommitConcurrency int // only if IsReplica AllowTxDiscarding bool // only if IsReplica @@ -276,7 +276,7 @@ func (o *Options) String() string { } if isReplica { - opts = append(opts, rightPad("Replica of", fmt.Sprintf("%s:%d", repOpts.MasterAddress, repOpts.MasterPort))) + opts = append(opts, rightPad("Replica of", fmt.Sprintf("%s:%d", repOpts.PrimaryHost, repOpts.PrimaryPort))) } if o.Config != "" { @@ -504,23 +504,23 @@ func (opts *ReplicationOptions) WithSyncAcks(syncAcks int) *ReplicationOptions { return opts } -func (opts *ReplicationOptions) WithMasterAddress(masterAddress string) *ReplicationOptions { - opts.MasterAddress = masterAddress +func (opts *ReplicationOptions) WithPrimaryHost(primaryHost string) *ReplicationOptions { + opts.PrimaryHost = primaryHost return opts } -func (opts *ReplicationOptions) WithMasterPort(masterPort int) *ReplicationOptions { - opts.MasterPort = masterPort +func (opts *ReplicationOptions) WithPrimaryPort(primaryPort int) *ReplicationOptions { + opts.PrimaryPort = primaryPort return opts } -func (opts *ReplicationOptions) WithFollowerUsername(followerUsername string) *ReplicationOptions { - opts.FollowerUsername = followerUsername +func (opts *ReplicationOptions) WithPrimaryUsername(primaryUsername string) *ReplicationOptions { + opts.PrimaryUsername = primaryUsername return opts } -func (opts *ReplicationOptions) WithFollowerPassword(followerPassword string) *ReplicationOptions { - opts.FollowerPassword = followerPassword +func (opts *ReplicationOptions) WithPrimaryPassword(primaryPassword string) *ReplicationOptions { + opts.PrimaryPassword = primaryPassword return opts } diff --git a/pkg/server/options_test.go b/pkg/server/options_test.go index fee5b03373..50d8602e3b 100644 --- a/pkg/server/options_test.go +++ b/pkg/server/options_test.go @@ -67,10 +67,10 @@ func TestReplicationOptions(t *testing.T) { WithIsReplica(true). WithSyncReplication(false). WithSyncAcks(0). - WithMasterAddress("localhost"). - WithMasterPort(3322). - WithFollowerUsername("follower-user"). - WithFollowerPassword("follower-pwd"). + WithPrimaryHost("localhost"). + WithPrimaryPort(3322). + WithPrimaryUsername("primary-user"). + WithPrimaryPassword("primary-pwd"). WithPrefetchTxBufferSize(100). WithReplicationCommitConcurrency(5). WithAllowTxDiscarding(true) @@ -78,15 +78,15 @@ func TestReplicationOptions(t *testing.T) { require.True(t, repOpts.IsReplica) require.False(t, repOpts.SyncReplication) require.Zero(t, repOpts.SyncAcks) - require.Equal(t, "localhost", repOpts.MasterAddress) - require.Equal(t, 3322, repOpts.MasterPort) - require.Equal(t, "follower-user", repOpts.FollowerUsername) - require.Equal(t, "follower-pwd", repOpts.FollowerPassword) + require.Equal(t, "localhost", repOpts.PrimaryHost) + require.Equal(t, 3322, repOpts.PrimaryPort) + require.Equal(t, "primary-user", repOpts.PrimaryUsername) + require.Equal(t, "primary-pwd", repOpts.PrimaryPassword) require.Equal(t, 100, repOpts.PrefetchTxBufferSize) require.Equal(t, 5, repOpts.ReplicationCommitConcurrency) require.True(t, repOpts.AllowTxDiscarding) - // master-related settings + // primary-related settings repOpts. WithIsReplica(false). WithSyncReplication(true). diff --git a/pkg/server/server.go b/pkg/server/server.go index 94c89c0660..b4f0b99c0f 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -633,11 +633,11 @@ func (s *ImmuServer) startReplicationFor(db database.DB, dbOpts *dbOptions) erro defer s.replicationMutex.Unlock() replicatorOpts := replication.DefaultOptions(). - WithMasterDatabase(dbOpts.MasterDatabase). - WithMasterAddress(dbOpts.MasterAddress). - WithMasterPort(dbOpts.MasterPort). - WithFollowerUsername(dbOpts.FollowerUsername). - WithFollowerPassword(dbOpts.FollowerPassword). + WithPrimaryDatabase(dbOpts.PrimaryDatabase). + WithPrimaryHost(dbOpts.PrimaryHost). + WithPrimaryPort(dbOpts.PrimaryPort). + WithPrimaryUsername(dbOpts.PrimaryUsername). + WithPrimaryPassword(dbOpts.PrimaryPassword). WithPrefetchTxBufferSize(dbOpts.PrefetchTxBufferSize). WithReplicationCommitConcurrency(dbOpts.ReplicationCommitConcurrency). WithAllowTxDiscarding(dbOpts.AllowTxDiscarding). @@ -1253,20 +1253,20 @@ func (s *ImmuServer) GetDatabaseSettings(ctx context.Context, _ *empty.Empty) (* if res.Settings.ReplicationSettings.Replica != nil { ret.Replica = res.Settings.ReplicationSettings.Replica.Value } - if res.Settings.ReplicationSettings.MasterDatabase != nil { - ret.MasterDatabase = res.Settings.ReplicationSettings.MasterDatabase.Value + if res.Settings.ReplicationSettings.PrimaryDatabase != nil { + ret.PrimaryDatabase = res.Settings.ReplicationSettings.PrimaryDatabase.Value } - if res.Settings.ReplicationSettings.MasterAddress != nil { - ret.MasterAddress = res.Settings.ReplicationSettings.MasterAddress.Value + if res.Settings.ReplicationSettings.PrimaryHost != nil { + ret.PrimaryHost = res.Settings.ReplicationSettings.PrimaryHost.Value } - if res.Settings.ReplicationSettings.MasterPort != nil { - ret.MasterPort = res.Settings.ReplicationSettings.MasterPort.Value + if res.Settings.ReplicationSettings.PrimaryPort != nil { + ret.PrimaryPort = res.Settings.ReplicationSettings.PrimaryPort.Value } - if res.Settings.ReplicationSettings.FollowerUsername != nil { - ret.FollowerUsername = res.Settings.ReplicationSettings.FollowerUsername.Value + if res.Settings.ReplicationSettings.PrimaryUsername != nil { + ret.PrimaryUsername = res.Settings.ReplicationSettings.PrimaryUsername.Value } - if res.Settings.ReplicationSettings.FollowerPassword != nil { - ret.FollowerPassword = res.Settings.ReplicationSettings.FollowerPassword.Value + if res.Settings.ReplicationSettings.PrimaryPassword != nil { + ret.PrimaryPassword = res.Settings.ReplicationSettings.PrimaryPassword.Value } } diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go index 979a13363a..faa0d9c769 100644 --- a/pkg/server/server_test.go +++ b/pkg/server/server_test.go @@ -385,9 +385,9 @@ func TestServerCreateDatabase(t *testing.T) { require.Equal(t, ErrIllegalArguments, err) dbSettings := &schema.DatabaseSettings{ - DatabaseName: "lisbon", - Replica: false, - MasterDatabase: "masterdb", + DatabaseName: "lisbon", + Replica: false, + PrimaryDatabase: "primarydb", } _, err = s.CreateDatabaseWith(ctx, dbSettings) require.ErrorIs(t, err, ErrIllegalArguments) @@ -548,15 +548,15 @@ func TestServerUpdateDatabaseAuthEnabled(t *testing.T) { require.Equal(t, database.ErrDatabaseNotExists, err) newdb := &schema.DatabaseSettings{ - DatabaseName: "lisbon", - Replica: true, - MasterDatabase: "defaultdb", + DatabaseName: "lisbon", + Replica: true, + PrimaryDatabase: "defaultdb", } _, err = s.CreateDatabaseWith(ctx, newdb) require.NoError(t, err) newdb.Replica = false - newdb.MasterDatabase = "" + newdb.PrimaryDatabase = "" _, err = s.UpdateDatabase(ctx, newdb) require.NoError(t, err) @@ -629,8 +629,8 @@ func TestServerUpdateDatabaseV2AuthEnabled(t *testing.T) { Name: "lisbon", Settings: &schema.DatabaseNullableSettings{ ReplicationSettings: &schema.ReplicationNullableSettings{ - Replica: &schema.NullableBool{Value: true}, - MasterDatabase: &schema.NullableString{Value: "defaultdb"}, + Replica: &schema.NullableBool{Value: true}, + PrimaryDatabase: &schema.NullableString{Value: "defaultdb"}, }, }, IfNotExists: true, diff --git a/pkg/server/stream_replication.go b/pkg/server/stream_replication.go index d032b39825..de884a687c 100644 --- a/pkg/server/stream_replication.go +++ b/pkg/server/stream_replication.go @@ -37,7 +37,7 @@ func (s *ImmuServer) ExportTx(req *schema.ExportTxRequest, txsServer schema.Immu txbs, mayCommitUpToTxID, mayCommitUpToAlh, err := db.ExportTxByID(req) defer func() { - if req.FollowerState != nil { + if req.ReplicaState != nil { var bMayCommitUpToTxID [8]byte binary.BigEndian.PutUint64(bMayCommitUpToTxID[:], mayCommitUpToTxID)