diff --git a/api/admin.proto b/api/admin.proto
index 6d9ed503..5cbab7e1 100644
--- a/api/admin.proto
+++ b/api/admin.proto
@@ -221,6 +221,19 @@ message FeedConfig {
// If unspecified, defaults to 5 seconds.
optional int64 periodic_update_period_ms = 10;
+ // For feeds with a `PERIODIC` scheduling policy, the offset.
+ //
+ // The periodic schedulers for all of a system's realtime feeds are started at the same time.
+ // For each feed, the offset is the amount of time to wait before performing the first update.
+ // The idea is to provide each realtime feed with a different offset so that updates for
+ // for different feeds happen at different times.
+ // This makes Transiter less bursty, and also reduces the chances
+ // of conflicts between concurrent feed updates.
+ //
+ // If unspecified, the offsets are chosen so that the feeds are evently spaced out.
+ // This algorithm currently assumes that the feed periods are all the same.
+ optional int64 periodic_update_offset_ms = 15;
+
// Deprecated: use `periodic_update_period_ms` instead.
optional double update_period_s = 4 [deprecated = true];
diff --git a/docs/src/api/admin.md b/docs/src/api/admin.md
index 68d3775c..a4db44a9 100644
--- a/docs/src/api/admin.md
+++ b/docs/src/api/admin.md
@@ -345,6 +345,7 @@ No fields.
| scheduling_policy | [FeedConfig.SchedulingPolicy](admin.md#FeedConfig.SchedulingPolicy) | The scheduling policy to use for this feed.
If unspecified, it takes the value `DEFAULT``.
| update_strategy | [FeedConfig.SchedulingPolicy](admin.md#FeedConfig.SchedulingPolicy) | Deprecated: use `scheduling_policy` instead.
| periodic_update_period_ms | int64 | For feeds with a `PERIODIC` scheduling policy, the update period.
If unspecified, defaults to 5 seconds.
+| periodic_update_offset_ms | int64 | For feeds with a `PERIODIC` scheduling policy, the offset.
The periodic schedulers for all of a system's realtime feeds are started at the same time. For each feed, the offset is the amount of time to wait before performing the first update. The idea is to provide each realtime feed with a different offset so that updates for for different feeds happen at different times. This makes Transiter less bursty, and also reduces the chances of conflicts between concurrent feed updates.
If unspecified, the offsets are chosen so that the feeds are evently spaced out. This algorithm currently assumes that the feed periods are all the same.
| update_period_s | double | Deprecated: use `periodic_update_period_ms` instead.
| daily_update_time | string | For feeds with a `DAILY` scheduling policy, the time of day in the form HH:MM at which to perform an update.
If unspecified, defaults to 03:00 for the first feed in the system, 03:10 for the second feed, and so on. The idea of the default is to run at night when the system is either quiet or not running. The staggering is to avoid updates stepping on each other, and to spread out the load.
| daily_update_timezone | string | For feeds with a `DAILY` scheduling policy, the timezone for the time of day specified in the `daily_update_time`.
If empty, a default is provided as follows. The scheduler lists the agencies for the system in order of ID and uses the first valid timezone it finds. Given the GTFS static specification this should always work. Moreover, all agencies should have the same timezone so listing in order of ID shouldn't matter. But in reality it may not work. If there is no valid agency timezones, the scheduler will log a warning and fall back to UTC.
diff --git a/internal/gen/api/admin.pb.go b/internal/gen/api/admin.pb.go
index eb947745..9cec5a47 100644
--- a/internal/gen/api/admin.pb.go
+++ b/internal/gen/api/admin.pb.go
@@ -819,6 +819,21 @@ type FeedConfig struct {
//
// If unspecified, defaults to 5 seconds.
PeriodicUpdatePeriodMs *int64 `protobuf:"varint,10,opt,name=periodic_update_period_ms,json=periodicUpdatePeriodMs,proto3,oneof" json:"periodic_update_period_ms,omitempty"`
+ // For feeds with a `PERIODIC` scheduling policy, the offset.
+ //
+ // The periodic schedulers for all of a system's realtime feeds are started at the same time.
+ // For each feed, the offset is the amount of time to wait before performing the first update.
+ // The idea is to provide each realtime feed with a different offset so that updates for
+ //
+ // for different feeds happen at different times.
+ //
+ // This makes Transiter less bursty, and also reduces the chances
+ //
+ // of conflicts between concurrent feed updates.
+ //
+ // If unspecified, the offsets are chosen so that the feeds are evently spaced out.
+ // This algorithm currently assumes that the feed periods are all the same.
+ PeriodicUpdateOffsetMs *int64 `protobuf:"varint,15,opt,name=periodic_update_offset_ms,json=periodicUpdateOffsetMs,proto3,oneof" json:"periodic_update_offset_ms,omitempty"`
// Deprecated: use `periodic_update_period_ms` instead.
//
// Deprecated: Marked as deprecated in api/admin.proto.
@@ -941,6 +956,13 @@ func (x *FeedConfig) GetPeriodicUpdatePeriodMs() int64 {
return 0
}
+func (x *FeedConfig) GetPeriodicUpdateOffsetMs() int64 {
+ if x != nil && x.PeriodicUpdateOffsetMs != nil {
+ return *x.PeriodicUpdateOffsetMs
+ }
+ return 0
+}
+
// Deprecated: Marked as deprecated in api/admin.proto.
func (x *FeedConfig) GetUpdatePeriodS() float64 {
if x != nil && x.UpdatePeriodS != nil {
@@ -2083,7 +2105,7 @@ var file_api_admin_proto_rawDesc = []byte{
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x11, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70,
- 0x73, 0x22, 0xbf, 0x07, 0x0a, 0x0a, 0x46, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x73, 0x22, 0x9d, 0x08, 0x0a, 0x0a, 0x46, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x18, 0x08,
@@ -2109,9 +2131,13 @@ var file_api_admin_proto_rawDesc = []byte{
0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x48,
0x02, 0x52, 0x16, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x0f,
+ 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x19,
+ 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
+ 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x48,
+ 0x03, 0x52, 0x16, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x0f,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x02, 0x18, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64,
+ 0x04, 0x20, 0x01, 0x28, 0x01, 0x42, 0x02, 0x18, 0x01, 0x48, 0x04, 0x52, 0x0d, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a,
0x11, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x61, 0x69, 0x6c, 0x79, 0x55,
@@ -2121,7 +2147,7 @@ var file_api_admin_proto_rawDesc = []byte{
0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a,
0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12,
0x31, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
- 0x75, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x10, 0x72,
+ 0x75, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x05, 0x52, 0x10, 0x72,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x88,
0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65,
0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x43,
@@ -2140,267 +2166,269 @@ var file_api_admin_proto_rawDesc = []byte{
0x73, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66,
0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x70,
0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70,
- 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x42, 0x15, 0x0a, 0x13,
- 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
- 0x5f, 0x6d, 0x73, 0x22, 0x9f, 0x09, 0x0a, 0x13, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c,
- 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x65,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e,
+ 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x70, 0x65, 0x72,
+ 0x69, 0x6f, 0x64, 0x69, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x66,
+ 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x72,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6d,
+ 0x73, 0x22, 0x9f, 0x09, 0x0a, 0x13, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69,
+ 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x47,
+ 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x12, 0x6e, 0x79, 0x63, 0x74, 0x5f,
+ 0x74, 0x72, 0x69, 0x70, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69,
+ 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74, 0x54, 0x72,
+ 0x69, 0x70, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x79,
+ 0x63, 0x74, 0x54, 0x72, 0x69, 0x70, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01,
+ 0x01, 0x12, 0x5b, 0x0a, 0x13, 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73,
+ 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x12, 0x6e, 0x79, 0x63,
- 0x74, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c,
- 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74,
- 0x54, 0x72, 0x69, 0x70, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x10,
- 0x6e, 0x79, 0x63, 0x74, 0x54, 0x72, 0x69, 0x70, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x88, 0x01, 0x01, 0x12, 0x5b, 0x0a, 0x13, 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x65, 0x72,
- 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x26, 0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x4f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74,
- 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x01, 0x52, 0x11, 0x6e, 0x79, 0x63, 0x74,
- 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01,
- 0x12, 0x36, 0x0a, 0x17, 0x72, 0x65, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x74, 0x6f,
- 0x70, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x15, 0x72, 0x65, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6f, 0x70, 0x53,
- 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x6f, 0x6e, 0x6c, 0x79,
- 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x65, 0x6e,
- 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x6f, 0x6e,
- 0x6c, 0x79, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x45, 0x6e, 0x74,
- 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0xa8, 0x01, 0x0a, 0x10, 0x4e, 0x79, 0x63, 0x74, 0x54, 0x72,
- 0x69, 0x70, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x66, 0x69,
- 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x75, 0x6e, 0x61, 0x73, 0x73,
- 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x1a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x55, 0x6e,
- 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x73, 0x12, 0x51, 0x0a,
- 0x26, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x69,
- 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x62,
- 0x75, 0x73, 0x68, 0x77, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x70,
- 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x50, 0x6c, 0x61,
- 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x49, 0x6e, 0x42, 0x75, 0x73, 0x68, 0x77, 0x69, 0x63, 0x6b,
- 0x1a, 0xef, 0x03, 0x0a, 0x11, 0x4e, 0x79, 0x63, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x65, 0x6c, 0x65, 0x76, 0x61,
- 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x64, 0x65, 0x64, 0x75, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c,
- 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74,
- 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6c,
- 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x64, 0x75,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52,
- 0x21, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x01, 0x52, 0x11, 0x6e, 0x79, 0x63, 0x74, 0x41, 0x6c,
+ 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36,
+ 0x0a, 0x17, 0x72, 0x65, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f,
+ 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x15, 0x72, 0x65, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x71,
+ 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x6f, 0x6e, 0x6c, 0x79,
+ 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x1a, 0xa8, 0x01, 0x0a, 0x10, 0x4e, 0x79, 0x63, 0x74, 0x54, 0x72, 0x69, 0x70,
+ 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x75, 0x6e, 0x61, 0x73, 0x73, 0x69, 0x67,
+ 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x1a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6c, 0x65, 0x55, 0x6e, 0x61, 0x73,
+ 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x73, 0x12, 0x51, 0x0a, 0x26, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x5f,
+ 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x73,
+ 0x68, 0x77, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x21, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x4d, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x74, 0x66,
+ 0x6f, 0x72, 0x6d, 0x73, 0x49, 0x6e, 0x42, 0x75, 0x73, 0x68, 0x77, 0x69, 0x63, 0x6b, 0x1a, 0xef,
+ 0x03, 0x0a, 0x11, 0x4e, 0x79, 0x63, 0x74, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f,
+ 0x72, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x47, 0x74, 0x66, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69,
+ 0x6d, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x79, 0x63, 0x74, 0x41, 0x6c,
+ 0x65, 0x72, 0x74, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6c, 0x65, 0x76,
+ 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x64, 0x75, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x21, 0x65,
+ 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44, 0x65, 0x64,
+ 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x12, 0x55, 0x0a, 0x28, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x6c, 0x65,
+ 0x72, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x75, 0x73, 0x69, 0x6e, 0x67,
+ 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x23, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72,
+ 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x21, 0x73, 0x6b, 0x69, 0x70, 0x5f,
+ 0x74, 0x69, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x1d, 0x73, 0x6b, 0x69, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x4e, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74,
+ 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x5f, 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x64,
+ 0x64, 0x4e, 0x79, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x71, 0x0a,
+ 0x21, 0x45, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x44,
0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x12, 0x55, 0x0a, 0x28, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61,
- 0x6c, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x75, 0x73, 0x69,
- 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x23, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c,
- 0x65, 0x72, 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x53,
- 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x21, 0x73, 0x6b, 0x69,
- 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x5f,
- 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x73, 0x6b, 0x69, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x64, 0x4e, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x65,
- 0x72, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x5f, 0x6e, 0x79, 0x63, 0x74, 0x5f,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f,
- 0x61, 0x64, 0x64, 0x4e, 0x79, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
- 0x71, 0x0a, 0x21, 0x45, 0x6c, 0x65, 0x76, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74,
- 0x73, 0x44, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x44, 0x55, 0x50,
- 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x45,
- 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x53, 0x54, 0x41,
- 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x45, 0x44, 0x55, 0x50, 0x4c,
- 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58,
- 0x10, 0x02, 0x22, 0x52, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12,
- 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x10,
- 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x50, 0x53, 0x10,
- 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x53,
- 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x42, 0x55, 0x53, 0x5f, 0x54,
- 0x52, 0x49, 0x50, 0x53, 0x10, 0x03, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6e, 0x79, 0x63, 0x74, 0x5f,
- 0x74, 0x72, 0x69, 0x70, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x16, 0x0a,
- 0x14, 0x5f, 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb8, 0x04, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
- 0x65, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09,
- 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52,
- 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0e, 0x73, 0x74,
- 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x43,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, 0xbf, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74,
- 0x69, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x13, 0x73, 0x74, 0x61,
- 0x72, 0x74, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73,
- 0x45, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2f,
- 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74,
- 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x0f, 0x73, 0x74, 0x61,
- 0x72, 0x74, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12,
- 0x2f, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x5f,
- 0x74, 0x68, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x0f, 0x65, 0x6e,
- 0x64, 0x73, 0x45, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01,
- 0x12, 0x2b, 0x0a, 0x0f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74,
- 0x68, 0x61, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x65, 0x6e, 0x64,
- 0x73, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a,
- 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x79,
- 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x65, 0x61, 0x72,
- 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x74,
- 0x61, 0x72, 0x74, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42,
- 0x14, 0x0a, 0x12, 0x5f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72,
- 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x6c,
- 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12,
- 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x41, 0x4c, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x42, 0x11, 0x0a,
- 0x0f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x22, 0x49, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
- 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x65, 0x65, 0x64, 0x49, 0x64, 0x22, 0x82, 0x07, 0x0a, 0x0a,
- 0x46, 0x65, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74,
- 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
- 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x66,
- 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41,
- 0x74, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f,
- 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03,
- 0x48, 0x01, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79,
- 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61,
- 0x64, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01,
- 0x28, 0x03, 0x48, 0x02, 0x52, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x61,
- 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x70, 0x61,
- 0x72, 0x73, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x16,
- 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x4c, 0x61, 0x74,
- 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x17,
- 0x20, 0x01, 0x28, 0x03, 0x48, 0x04, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61,
- 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x46, 0x65, 0x65,
- 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
- 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x48, 0x05,
- 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88,
- 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61,
- 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
- 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x65, 0x72,
- 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x07, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x88, 0x01, 0x01, 0x22, 0xf8, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
- 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07,
- 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44,
- 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45,
- 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x44, 0x4f,
- 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x15,
- 0x0a, 0x11, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x46,
- 0x45, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f,
- 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x46, 0x45, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e,
- 0x46, 0x49, 0x47, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f,
- 0x50, 0x41, 0x52, 0x53, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x08, 0x12, 0x17, 0x0a,
- 0x13, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x45,
- 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44,
- 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
- 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e,
- 0x4f, 0x57, 0x4e, 0x5f, 0x46, 0x45, 0x45, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x0b, 0x42,
- 0x11, 0x0a, 0x0f, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f,
- 0x6d, 0x73, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x74,
- 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x64, 0x6f, 0x77, 0x6e,
- 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42,
- 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63,
- 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
- 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0f, 0x0a,
- 0x0d, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x10,
- 0x0a, 0x0e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x22, 0x3f, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65,
- 0x70, 0x6c, 0x79, 0x12, 0x2c, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
- 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb7,
- 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x66, 0x65,
- 0x65, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x47, 0x65, 0x74, 0x53,
- 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
- 0x70, 0x6c, 0x79, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x52, 0x05, 0x66, 0x65, 0x65, 0x64, 0x73, 0x1a,
- 0xe6, 0x01, 0x0a, 0x04, 0x46, 0x65, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x79, 0x73, 0x74,
- 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x79, 0x73,
- 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f,
- 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x46, 0x65, 0x65,
- 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e,
- 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x66, 0x75, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73,
- 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63,
- 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c,
- 0x79, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65,
- 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75,
- 0x6c, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c,
- 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2f,
- 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x70,
- 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22,
- 0x31, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76,
- 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76,
- 0x65, 0x6c, 0x22, 0x12, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65,
- 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x32, 0xdf, 0x05, 0x0a, 0x05, 0x41, 0x64, 0x6d, 0x69, 0x6e,
- 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e,
- 0x66, 0x69, 0x67, 0x12, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x53,
- 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x23, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x73,
- 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
- 0x12, 0x74, 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4f, 0x72, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1d, 0x2e, 0x49, 0x6e, 0x73, 0x74,
- 0x61, 0x6c, 0x6c, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65,
- 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61,
- 0x6c, 0x6c, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
- 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a,
- 0x1a, 0x14, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74,
- 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x56, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53,
- 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79,
- 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65,
- 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x60,
- 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x12, 0x12, 0x2e, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x10, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70,
- 0x6c, 0x79, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x24, 0x2f, 0x73, 0x79, 0x73,
- 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d,
- 0x2f, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2f, 0x7b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x7d,
- 0x12, 0x5e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65,
- 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
- 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x12, 0x82, 0xd3,
- 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72,
- 0x12, 0x52, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c,
- 0x65, 0x72, 0x12, 0x16, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75,
- 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x52, 0x65, 0x73,
- 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79,
- 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x0a, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64,
- 0x75, 0x6c, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65,
- 0x76, 0x65, 0x6c, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65,
- 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f,
- 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x11, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x6c, 0x6f, 0x67, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x48,
- 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x13, 0x2e,
- 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c,
- 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x1a, 0x09, 0x2f,
- 0x6c, 0x6f, 0x67, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68,
- 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x66, 0x65, 0x6e,
- 0x6e, 0x65, 0x6c, 0x6c, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x65, 0x72, 0x2f, 0x61,
- 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x63, 0x79, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x44, 0x55, 0x50, 0x4c, 0x49,
+ 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x45, 0x44, 0x55,
+ 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49,
+ 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x45, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43,
+ 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x10, 0x02,
+ 0x22, 0x52, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a,
+ 0x0c, 0x4e, 0x4f, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12,
+ 0x0e, 0x0a, 0x0a, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x50, 0x53, 0x10, 0x01, 0x12,
+ 0x0f, 0x0a, 0x0b, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x53, 0x10, 0x02,
+ 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x59, 0x43, 0x54, 0x5f, 0x42, 0x55, 0x53, 0x5f, 0x54, 0x52, 0x49,
+ 0x50, 0x53, 0x10, 0x03, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x74, 0x72,
+ 0x69, 0x70, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f,
+ 0x6e, 0x79, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x22, 0xb8, 0x04, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d,
+ 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68,
+ 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x74,
+ 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74,
+ 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, 0xbf, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63,
+ 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x45, 0x61,
+ 0x72, 0x6c, 0x69, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61,
+ 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x73, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a,
+ 0x11, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x74, 0x68,
+ 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x73,
+ 0x45, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2b,
+ 0x0a, 0x0f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61,
+ 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x03, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x73, 0x4c,
+ 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x64,
+ 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x42,
+ 0x16, 0x0a, 0x14, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69,
+ 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x74, 0x61, 0x72,
+ 0x74, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x14, 0x0a,
+ 0x12, 0x5f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x74,
+ 0x68, 0x61, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x6e, 0x64, 0x73, 0x5f, 0x6c, 0x61, 0x74,
+ 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0c, 0x0a,
+ 0x08, 0x52, 0x45, 0x41, 0x4c, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f,
+ 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x49,
+ 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x64,
+ 0x12, 0x17, 0x0a, 0x07, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x66, 0x65, 0x65, 0x64, 0x49, 0x64, 0x22, 0x82, 0x07, 0x0a, 0x0a, 0x46, 0x65,
+ 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64,
+ 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x4d, 0x73, 0x12, 0x29, 0x0a, 0x0e, 0x66, 0x69, 0x6e,
+ 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x03, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x4d,
+ 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x61,
+ 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01,
+ 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x73,
+ 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x13, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
+ 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03,
+ 0x48, 0x02, 0x52, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x61, 0x74, 0x65,
+ 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01,
+ 0x28, 0x03, 0x48, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x6e,
+ 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x18, 0x17, 0x20, 0x01,
+ 0x28, 0x03, 0x48, 0x04, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x74, 0x65,
+ 0x6e, 0x63, 0x79, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
+ 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x48, 0x05, 0x52, 0x0d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01,
+ 0x12, 0x26, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68,
+ 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48,
+ 0x07, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88,
+ 0x01, 0x01, 0x22, 0xf8, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a,
+ 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55,
+ 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54,
+ 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10,
+ 0x03, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e,
+ 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11,
+ 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x46, 0x45, 0x45,
+ 0x44, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49, 0x4e,
+ 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x46, 0x45, 0x45, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49,
+ 0x47, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x50, 0x41,
+ 0x52, 0x53, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x46,
+ 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x52, 0x52,
+ 0x4f, 0x52, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x49,
+ 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12,
+ 0x1c, 0x0a, 0x18, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
+ 0x4e, 0x5f, 0x46, 0x45, 0x45, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x0b, 0x42, 0x11, 0x0a,
+ 0x0f, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x6d, 0x73,
+ 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e,
+ 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f,
+ 0x61, 0x64, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x13, 0x0a,
+ 0x11, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f,
+ 0x6d, 0x73, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x61,
+ 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0f, 0x0a, 0x0d, 0x5f,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x10, 0x0a, 0x0e,
+ 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3f,
+ 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c,
+ 0x79, 0x12, 0x2c, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x52, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22,
+ 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb7, 0x02, 0x0a,
+ 0x17, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x66, 0x65, 0x65, 0x64,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68,
+ 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c,
+ 0x79, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x52, 0x05, 0x66, 0x65, 0x65, 0x64, 0x73, 0x1a, 0xe6, 0x01,
+ 0x0a, 0x04, 0x46, 0x65, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
+ 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x46, 0x65, 0x65, 0x64, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x66, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75,
+ 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f,
+ 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73,
+ 0x68, 0x65, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x75, 0x72,
+ 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x52,
+ 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53,
+ 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
+ 0x15, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
+ 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67,
+ 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2f, 0x0a, 0x10,
+ 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x79,
+ 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x31, 0x0a,
+ 0x12, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+ 0x22, 0x12, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52,
+ 0x65, 0x70, 0x6c, 0x79, 0x32, 0xdf, 0x05, 0x0a, 0x05, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x5e,
+ 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x12, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x53, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+ 0x1d, 0x12, 0x1b, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x74,
+ 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1d, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
+ 0x6c, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+ 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65,
+ 0x70, 0x6c, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x1a, 0x14,
+ 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
+ 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x56, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c,
+ 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+ 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x60, 0x0a, 0x0a,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x12, 0x12, 0x2e, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10,
+ 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79,
+ 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x24, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x73, 0x2f, 0x7b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x66,
+ 0x65, 0x65, 0x64, 0x73, 0x2f, 0x7b, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5e,
+ 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75,
+ 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x52,
+ 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72,
+ 0x12, 0x16, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
+ 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74,
+ 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x12,
+ 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x0a, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c,
+ 0x65, 0x72, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65,
+ 0x6c, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c,
+ 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+ 0x0b, 0x12, 0x09, 0x2f, 0x6c, 0x6f, 0x67, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x48, 0x0a, 0x0b,
+ 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x13, 0x2e, 0x53, 0x65,
+ 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x11, 0x2e, 0x53, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65,
+ 0x70, 0x6c, 0x79, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x1a, 0x09, 0x2f, 0x6c, 0x6f,
+ 0x67, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x66, 0x65, 0x6e, 0x6e, 0x65,
+ 0x6c, 0x6c, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/internal/scheduler/scheduler.go b/internal/scheduler/scheduler.go
index 621eaa70..6ebf0b8b 100644
--- a/internal/scheduler/scheduler.go
+++ b/internal/scheduler/scheduler.go
@@ -143,10 +143,10 @@ func (s *DefaultScheduler) runWithClock(ctx context.Context, public api.PublicSe
if err != nil {
return fmt.Errorf("failed to list get agencies for system %s during scheduler reset: %w", systemID, err)
}
+ NormalizeSchedulingPolicies(logger, systemResp.Feeds, agenciesResp.Agencies)
var feeds []*api.FeedConfig
- for i, feed := range systemResp.Feeds {
+ for _, feed := range systemResp.Feeds {
logger := logger.With(slog.String("feed_id", feed.GetId()))
- NormalizeSchedulingPolicy(logger, feed, i, agenciesResp.Agencies)
logger.DebugCtx(ctx, fmt.Sprintf("normalized feed config: %+v", feed))
if feed.GetSchedulingPolicy() == api.FeedConfig_NONE {
continue
@@ -339,7 +339,9 @@ func (fs *feedScheduler) run(ctx context.Context, admin api.AdminServer, clock c
tz, _ := time.LoadLocation(feedConfig.GetDailyUpdateTimezone())
t = ticker.NewDaily(clock, hour, minute, tz)
case api.FeedConfig_PERIODIC:
- t = ticker.NewPeriodic(clock, time.Duration(feedConfig.GetPeriodicUpdatePeriodMs())*time.Millisecond)
+ t = ticker.NewPeriodic(clock,
+ time.Duration(feedConfig.GetPeriodicUpdatePeriodMs())*time.Millisecond,
+ time.Duration(feedConfig.GetPeriodicUpdateOffsetMs())*time.Millisecond)
default:
panic(fmt.Sprintf("feed scheduler can't be started with scheduling policy %s", feedConfig.GetSchedulingPolicy()))
}
@@ -434,74 +436,90 @@ func newMsg[Req any, Resp any](req Req) msg[Req, Resp] {
}
}
-// NormalizeSchedulingPolicy normalizes the scheduling policy fields in the feed config.
+// NormalizeSchedulingPolicies normalizes the feed scheduling policies in the provided feed configurations.
//
-// After this function runs the following guarantees are in place:
+// After this function runs the following guarantees are in place for each feed:
//
// - The scheduling policy is NONE, PERIODIC or DAILY.
// In particular, the DEFAULT strategy does not appear.
//
// - If the scheduling policy is PERIODIC,
-// the `periodic_update_period_ms` field has a valid value.
+// the `periodic_update_period_ms` and `periodic_update_offset_ms` fields have a valid values.
//
// - If the scheduling policy is DAILY,
// the `daily_update_time` and `daily_update_timezone` fields have valid values.
// For the timezone field, this means the field contains a timezone that the current OS recognizes.
-func NormalizeSchedulingPolicy(logger *slog.Logger, feedConfig *api.FeedConfig, position int, agencies []*api.Agency) {
- update.NormalizeFeedConfig(feedConfig)
- if feedConfig.SchedulingPolicy == api.FeedConfig_DEFAULT {
- if feedConfig.Type == update.GtfsRealtime {
- feedConfig.SchedulingPolicy = api.FeedConfig_PERIODIC
- } else {
- feedConfig.SchedulingPolicy = api.FeedConfig_DAILY
- }
- }
- switch feedConfig.SchedulingPolicy {
- case api.FeedConfig_PERIODIC:
- if feedConfig.PeriodicUpdatePeriodMs == nil {
- p := int64(5000)
- //lint:ignore SA1019 this is where we apply the deprecation logic!
- if updatePeriodS := feedConfig.GetUpdatePeriodS(); updatePeriodS != 0 {
- p = int64(updatePeriodS * 1000)
+func NormalizeSchedulingPolicies(logger *slog.Logger, feedConfigs []*api.FeedConfig, agencies []*api.Agency) {
+ var numPeriodicFeeds int64
+ for _, feedConfig := range feedConfigs {
+ update.NormalizeFeedConfig(feedConfig)
+ if feedConfig.SchedulingPolicy == api.FeedConfig_DEFAULT {
+ if feedConfig.Type == update.GtfsRealtime {
+ feedConfig.SchedulingPolicy = api.FeedConfig_PERIODIC
+ } else {
+ feedConfig.SchedulingPolicy = api.FeedConfig_DAILY
}
- feedConfig.PeriodicUpdatePeriodMs = &p
}
- case api.FeedConfig_DAILY:
- // We check if the provided time is valid
- if _, _, ok := parseDailyUpdateTime(feedConfig.GetDailyUpdateTime()); !ok {
- logger.Error("could not parse provided time %q; will fall back to default", feedConfig.GetDailyUpdateTime())
- feedConfig.DailyUpdateTime = ""
- }
- // Then, if there is no time provided we populate a default
- if feedConfig.GetDailyUpdateTime() == "" {
- mins := 3*60 + 10*position
- feedConfig.DailyUpdateTime = fmt.Sprintf("%02d:%02d", mins/60, mins%60)
+ if feedConfig.GetSchedulingPolicy() == api.FeedConfig_PERIODIC {
+ numPeriodicFeeds++
}
+ }
+ var periodicPosition int64
+ var dailyPosition int64
+ for _, feedConfig := range feedConfigs {
+ switch feedConfig.SchedulingPolicy {
+ case api.FeedConfig_PERIODIC:
+ if feedConfig.PeriodicUpdatePeriodMs == nil {
+ p := int64(5000)
+ //lint:ignore SA1019 this is where we apply the deprecation logic!
+ if updatePeriodS := feedConfig.GetUpdatePeriodS(); updatePeriodS != 0 {
+ p = int64(updatePeriodS * 1000)
+ }
+ feedConfig.PeriodicUpdatePeriodMs = &p
+ }
+ if feedConfig.PeriodicUpdateOffsetMs == nil {
+ o := feedConfig.GetPeriodicUpdatePeriodMs() * periodicPosition / numPeriodicFeeds
+ feedConfig.PeriodicUpdateOffsetMs = &o
+ }
+ periodicPosition++
+ case api.FeedConfig_DAILY:
+ // We check if the provided time is valid
+ if _, _, ok := parseDailyUpdateTime(feedConfig.GetDailyUpdateTime()); !ok {
+ logger.Error("could not parse provided time %q; will fall back to default", feedConfig.GetDailyUpdateTime())
+ feedConfig.DailyUpdateTime = ""
+ }
+ // Then, if there is no time provided we populate a default
+ if feedConfig.GetDailyUpdateTime() == "" {
+ mins := 3*60 + 20*dailyPosition
+ feedConfig.DailyUpdateTime = fmt.Sprintf("%02d:%02d", mins/60, mins%60)
+ }
- // We check if the provided timezone is valid
- if tz := feedConfig.GetDailyUpdateTimezone(); tz != "" {
- if _, err := time.LoadLocation(tz); err != nil {
- logger.Error("could not parse provided timezone %q; will fall back to default", tz)
- feedConfig.DailyUpdateTimezone = ""
+ // We check if the provided timezone is valid
+ if tz := feedConfig.GetDailyUpdateTimezone(); tz != "" {
+ if _, err := time.LoadLocation(tz); err != nil {
+ logger.Error("could not parse provided timezone %q; will fall back to default", tz)
+ feedConfig.DailyUpdateTimezone = ""
+ }
}
- }
- // Then, if there is no timezone set we populate a default
- if feedConfig.GetDailyUpdateTimezone() == "" {
- var tz string
- for _, agency := range agencies {
- candidateTz := agency.GetTimezone()
- if candidateTz == "" {
- continue
+ // Then, if there is no timezone set we populate a default
+ if feedConfig.GetDailyUpdateTimezone() == "" {
+ var tz string
+ for _, agency := range agencies {
+ candidateTz := agency.GetTimezone()
+ if candidateTz == "" {
+ continue
+ }
+ if _, err := time.LoadLocation(candidateTz); err == nil {
+ tz = candidateTz
+ break
+ }
}
- if _, err := time.LoadLocation(candidateTz); err == nil {
- tz = candidateTz
- break
+ if tz == "" {
+ tz = time.UTC.String()
}
+ feedConfig.DailyUpdateTimezone = tz
}
- if tz == "" {
- tz = time.UTC.String()
- }
- feedConfig.DailyUpdateTimezone = tz
+ dailyPosition++
}
}
}
diff --git a/internal/scheduler/ticker/ticker.go b/internal/scheduler/ticker/ticker.go
index 72be11d1..2f111eec 100644
--- a/internal/scheduler/ticker/ticker.go
+++ b/internal/scheduler/ticker/ticker.go
@@ -2,7 +2,6 @@
package ticker
import (
- "math/rand"
"time"
"github.com/benbjohnson/clock"
@@ -26,13 +25,13 @@ type periodicTicker struct {
// This ticker ticks at a given period like the standard library's ticker, but has an additional feature.
// Before sending the first tick it waits a random duration of time (but no more than the period).
// This means that ticks are smoothed out across different tickers started at the same time.
-func NewPeriodic(clock clock.Clock, period time.Duration) Ticker {
+func NewPeriodic(clock clock.Clock, period, offset time.Duration) Ticker {
t := periodicTicker{
c: make(chan time.Time),
stopC: make(chan chan struct{}),
}
initComplete := make(chan struct{})
- go t.run(clock, period, initComplete)
+ go t.run(clock, period, offset, initComplete)
<-initComplete
return &t
}
@@ -48,9 +47,11 @@ func (t *periodicTicker) Stop() {
<-reply
}
-func (t *periodicTicker) run(clock clock.Clock, period time.Duration, initComplete chan struct{}) {
- rand := rand.New(rand.NewSource(clock.Now().UnixNano()))
- tickerPeriod := time.Duration(float64(period) * rand.Float64())
+func (t *periodicTicker) run(clock clock.Clock, period, offset time.Duration, initComplete chan struct{}) {
+ if offset <= 0 {
+ offset = period
+ }
+ tickerPeriod := offset
base := clock.Ticker(tickerPeriod)
initComplete <- struct{}{}
for {