From 2bf9b4da363b77b8210dcc26dde380572af71596 Mon Sep 17 00:00:00 2001 From: Perfect Makanju Date: Mon, 2 Nov 2020 15:58:51 +0100 Subject: [PATCH 1/4] Feature: Implement Partial Text Search with SQLitee --- app/app.go | 8 +- core/search/engines.go | 14 +++ core/search/model.go | 28 +++++ core/search/sqlite/model.go | 13 +++ core/search/sqlite/options.go | 15 +++ core/search/sqlite/sqlite.go | 139 +++++++++++++++++++++++ core/search/sqlite/sqlite_test.go | 121 ++++++++++++++++++++ core/store/store.go | 11 +- core/textile/client.go | 28 ++++- core/textile/mailbox_test.go | 4 +- core/textile/model/model.go | 17 ++- core/textile/model/search.go | 164 ++++------------------------ core/textile/sync/synchronizer.go | 1 + core/textile/sync/task-executors.go | 7 +- core/util/paths.go | 21 ++++ go.mod | 3 + go.sum | 11 ++ mocks/FilesSearchEngine.go | 89 +++++++++++++++ 18 files changed, 536 insertions(+), 158 deletions(-) create mode 100644 core/search/engines.go create mode 100644 core/search/model.go create mode 100644 core/search/sqlite/model.go create mode 100644 core/search/sqlite/options.go create mode 100644 core/search/sqlite/sqlite.go create mode 100644 core/search/sqlite/sqlite_test.go create mode 100644 core/util/paths.go create mode 100644 mocks/FilesSearchEngine.go diff --git a/app/app.go b/app/app.go index bb225968..77af84b6 100644 --- a/app/app.go +++ b/app/app.go @@ -7,6 +7,8 @@ import ( "os/signal" "syscall" + "github.com/FleekHQ/space-daemon/core/search/sqlite" + "github.com/FleekHQ/space-daemon/core" "github.com/FleekHQ/space-daemon/grpc" @@ -119,9 +121,13 @@ func (a *App) Start(ctx context.Context) error { hubAuth := hub.New(appStore, kc, a.cfg) + // setup files search engine + searchEngine := sqlite.NewSearchEngine(sqlite.WithDBPath(a.cfg.GetString(config.SpaceStorePath, ""))) + a.Run("SqliteSearchEngine", searchEngine) + // setup textile client uc := textile.CreateUserClient(a.cfg.GetString(config.TextileHubTarget, "")) - textileClient := textile.NewClient(appStore, kc, hubAuth, uc, nil) + textileClient := textile.NewClient(appStore, kc, hubAuth, uc, nil, searchEngine) err = a.RunAsync("TextileClient", textileClient, func() error { return textileClient.Start(ctx, a.cfg) }) diff --git a/core/search/engines.go b/core/search/engines.go new file mode 100644 index 00000000..af98753d --- /dev/null +++ b/core/search/engines.go @@ -0,0 +1,14 @@ +package search + +import ( + "context" +) + +// Represents Search Engines for File and Folders +// Can be used for indexing and querying of File/Folders +type FilesSearchEngine interface { + Start() error + InsertFileData(ctx context.Context, data *InsertIndexRecord) (*IndexRecord, error) + DeleteFileData(ctx context.Context, data *DeleteIndexRecord) error + QueryFileData(ctx context.Context, query string, limit int) ([]*IndexRecord, error) +} diff --git a/core/search/model.go b/core/search/model.go new file mode 100644 index 00000000..ea390b07 --- /dev/null +++ b/core/search/model.go @@ -0,0 +1,28 @@ +package search + +type IndexRecord struct { + Id string + ItemName string + ItemExtension string + ItemPath string + ItemType string + // Metadata here + BucketSlug string + DbId string +} + +type InsertIndexRecord struct { + ItemName string + ItemExtension string + ItemPath string + ItemType string + BucketSlug string + DbId string +} + +type DeleteIndexRecord struct { + ItemName string + ItemPath string + BucketSlug string + DbId string // DbId is only required for shared content +} diff --git a/core/search/sqlite/model.go b/core/search/sqlite/model.go new file mode 100644 index 00000000..67024a2f --- /dev/null +++ b/core/search/sqlite/model.go @@ -0,0 +1,13 @@ +package sqlite + +import "gorm.io/gorm" + +type SearchIndexRecord struct { + gorm.Model + ItemName string `gorm:"index:idx_name_path_bucket,unique"` + ItemExtension string `gorm:"size:10"` + ItemPath string `gorm:"index:idx_name_path_bucket,unique"` + ItemType string + BucketSlug string `gorm:"index:idx_name_path_bucket,unique"` + DbId string `gorm:"index"` +} diff --git a/core/search/sqlite/options.go b/core/search/sqlite/options.go new file mode 100644 index 00000000..787a9fa4 --- /dev/null +++ b/core/search/sqlite/options.go @@ -0,0 +1,15 @@ +package sqlite + +import "gorm.io/gorm/logger" + +func WithDBPath(path string) Option { + return func(o *sqliteSearchOption) { + o.dbPath = path + } +} + +func WithLogLevel(level logger.LogLevel) Option { + return func(o *sqliteSearchOption) { + o.logLevel = level + } +} diff --git a/core/search/sqlite/sqlite.go b/core/search/sqlite/sqlite.go new file mode 100644 index 00000000..74669c5b --- /dev/null +++ b/core/search/sqlite/sqlite.go @@ -0,0 +1,139 @@ +package sqlite + +import ( + "context" + "fmt" + "os" + "strconv" + "strings" + + "gorm.io/gorm/logger" + + "github.com/FleekHQ/space-daemon/core/search" + + "github.com/pkg/errors" + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +const DbFileName = "filesIndex.db" + +type sqliteSearchOption struct { + dbPath string + logLevel logger.LogLevel +} + +type Option func(o *sqliteSearchOption) + +// sqliteFilesSearchEngine is a files search engine that is backed by sqlite +type sqliteFilesSearchEngine struct { + db *gorm.DB + opts sqliteSearchOption +} + +// Creates a new SQLite backed search engine for files and folders +func NewSearchEngine(opts ...Option) *sqliteFilesSearchEngine { + searchOptions := sqliteSearchOption{ + dbPath: fmt.Sprintf("~%c.fleek-space", os.PathSeparator), + } + + for _, opt := range opts { + opt(&searchOptions) + } + + return &sqliteFilesSearchEngine{ + db: nil, + opts: searchOptions, + } +} + +func (s *sqliteFilesSearchEngine) Start() error { + dsn := fmt.Sprintf("%s%c%s", s.opts.dbPath, os.PathSeparator, DbFileName) + if db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{ + Logger: logger.Default.LogMode(s.opts.logLevel), + }); err != nil { + return errors.Wrap(err, "failed to open database") + } else { + s.db = db + } + + return s.db.AutoMigrate(&SearchIndexRecord{}) +} + +func (s *sqliteFilesSearchEngine) InsertFileData(ctx context.Context, data *search.InsertIndexRecord) (*search.IndexRecord, error) { + record := SearchIndexRecord{ + ItemName: data.ItemName, + ItemExtension: data.ItemExtension, + ItemPath: data.ItemPath, + ItemType: data.ItemPath, + BucketSlug: data.BucketSlug, + DbId: data.DbId, + } + result := s.db.Create(&record) + + if result.Error != nil { + if strings.Contains(result.Error.Error(), "UNIQUE constraint failed") { + return nil, errors.New("a similar file has already been inserted") + } + return nil, result.Error + } + + return modelToIndexRecord(&record), nil +} + +func (s *sqliteFilesSearchEngine) DeleteFileData(ctx context.Context, data *search.DeleteIndexRecord) error { + stmt := s.db.Where( + "item_name = ? AND item_path = ? AND bucket_slug = ?", + data.ItemName, + data.ItemPath, + data.BucketSlug, + ) + if data.DbId != "" { + stmt = stmt.Where("dbId = ?", data.DbId) + } + + result := stmt.Delete(&SearchIndexRecord{}) + + return result.Error +} + +func (s *sqliteFilesSearchEngine) QueryFileData(ctx context.Context, query string, limit int) ([]*search.IndexRecord, error) { + var records []*SearchIndexRecord + result := s.db.Where( + "item_name LIKE ? OR item_extension = ?", + "%"+query+"%", + query, + ).Limit(limit).Find(&records) + + if result.Error != nil { + return nil, result.Error + } + + searchResults := make([]*search.IndexRecord, len(records)) + for i, record := range records { + searchResults[i] = modelToIndexRecord(record) + } + + return searchResults, nil +} + +func (s *sqliteFilesSearchEngine) Shutdown() error { + db, err := s.db.DB() + if err != nil { + return err + } + + return db.Close() +} + +func modelToIndexRecord(model *SearchIndexRecord) *search.IndexRecord { + return &search.IndexRecord{ + Id: strconv.Itoa(int(model.ID)), + ItemName: model.ItemName, + ItemExtension: model.ItemExtension, + ItemPath: model.ItemPath, + ItemType: model.ItemType, + BucketSlug: model.BucketSlug, + DbId: model.DbId, + } +} diff --git a/core/search/sqlite/sqlite_test.go b/core/search/sqlite/sqlite_test.go new file mode 100644 index 00000000..df9f8f75 --- /dev/null +++ b/core/search/sqlite/sqlite_test.go @@ -0,0 +1,121 @@ +package sqlite + +import ( + "context" + "io/ioutil" + "os" + "testing" + + "github.com/FleekHQ/space-daemon/core/search" + + "gotest.tools/assert" +) + +func setupEngine(t *testing.T) (*sqliteFilesSearchEngine, context.Context) { + dbPath, err := ioutil.TempDir("", "testDb-*") + assert.NilError(t, err, "failed to create db path") + + engine := NewSearchEngine(WithDBPath(dbPath)) + assert.NilError(t, engine.Start(), "database failed to initialize") + + cleanup := func() { + _ = engine.Shutdown() + _ = os.RemoveAll(dbPath) + } + + t.Cleanup(cleanup) + + return engine, context.Background() +} + +func TestSqliteFilesSearchEngine_Insert_And_Query(t *testing.T) { + engine, ctx := setupEngine(t) + insertRecord(t, ctx, engine, &search.InsertIndexRecord{ + ItemName: "new content.pdf", + ItemExtension: "pdf", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + insertRecord(t, ctx, engine, &search.InsertIndexRecord{ + ItemName: "second-content.txt", + ItemExtension: "txt", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + + queryResult, err := engine.QueryFileData(ctx, "pdf", 20) + assert.NilError(t, err, "failed to query file data") + assert.Equal(t, 1, len(queryResult), "not enough results returned from query") + + assert.Equal(t, "new content.pdf", queryResult[0].ItemName, "search query result incorrect") +} + +func TestInserting_DuplicateRecords_Fail(t *testing.T) { + engine, ctx := setupEngine(t) + insertRecord(t, ctx, engine, &search.InsertIndexRecord{ + ItemName: "new content.pdf", + ItemExtension: "pdf", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + // try inserting duplicate records should fail + _, err := engine.InsertFileData(ctx, &search.InsertIndexRecord{ + ItemName: "new content.pdf", + ItemExtension: "pdf", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + assert.Error(t, err, "a similar file has already been inserted") +} + +func TestSqliteFilesSearchEngine_Delete_And_Query(t *testing.T) { + engine, ctx := setupEngine(t) + insertRecord(t, ctx, engine, &search.InsertIndexRecord{ + ItemName: "new content.pdf", + ItemExtension: "pdf", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + insertRecord(t, ctx, engine, &search.InsertIndexRecord{ + ItemName: "second-content.txt", + ItemExtension: "txt", + ItemPath: "/new", + ItemType: "FILE", + BucketSlug: "personal", + DbId: "", + }) + + err := engine.DeleteFileData(ctx, &search.DeleteIndexRecord{ + ItemName: "new content.pdf", + ItemPath: "/new", + BucketSlug: "personal", + }) + assert.NilError(t, err, "deleting file data failed") + + queryResult, err := engine.QueryFileData(ctx, "content", 20) + assert.NilError(t, err, "failed to query file data") + assert.Equal(t, 1, len(queryResult), "too much result returned") + + // only second content should exist in search engine + assert.Equal(t, "second-content.txt", queryResult[0].ItemName, "search query result incorrect") +} + +func insertRecord( + t *testing.T, + ctx context.Context, + engine search.FilesSearchEngine, + record *search.InsertIndexRecord, +) { + _, err := engine.InsertFileData(ctx, record) + assert.NilError(t, err, "failed to insert file data") +} diff --git a/core/store/store.go b/core/store/store.go index 55c7feac..8d70d120 100644 --- a/core/store/store.go +++ b/core/store/store.go @@ -7,12 +7,13 @@ import ( "runtime" s "strings" + "github.com/FleekHQ/space-daemon/core/util" + "github.com/FleekHQ/space-daemon/core" "github.com/FleekHQ/space-daemon/log" badger "github.com/dgraph-io/badger" - homedir "github.com/mitchellh/go-homedir" ) const DefaultRootDir = "~/.fleek-space" @@ -72,12 +73,8 @@ func (store *store) Open() error { return nil } - rootDir := s.Join([]string{store.rootDir, BadgerFileName}, "/") - - if home, err := homedir.Dir(); err == nil { - // If the root directory contains ~, we replace it with the actual home directory - rootDir = s.Replace(rootDir, "~", home, -1) - } else { + rootDir, err := util.ResolvePath(s.Join([]string{store.rootDir, BadgerFileName}, "/")) + if err != nil { return err } diff --git a/core/textile/client.go b/core/textile/client.go index ddc5a7a1..18628bac 100644 --- a/core/textile/client.go +++ b/core/textile/client.go @@ -9,6 +9,8 @@ import ( "sync" "time" + "github.com/FleekHQ/space-daemon/core/search" + "github.com/FleekHQ/space-daemon/config" httpapi "github.com/ipfs/go-ipfs-http-client" iface "github.com/ipfs/interface-go-ipfs-core" @@ -47,6 +49,7 @@ type textileClient struct { bucketsClient *bucketsClient.Client mb Mailbox hb *bucketsClient.Client + filesSearchEngine search.FilesSearchEngine isRunning bool isInitialized bool isSyncInitialized bool @@ -73,7 +76,14 @@ type textileClient struct { } // Creates a new Textile Client -func NewClient(store db.Store, kc keychain.Keychain, hubAuth hub.HubAuth, uc UsersClient, mb Mailbox) *textileClient { +func NewClient( + store db.Store, + kc keychain.Keychain, + hubAuth hub.HubAuth, + uc UsersClient, + mb Mailbox, + search search.FilesSearchEngine, +) *textileClient { return &textileClient{ store: store, kc: kc, @@ -103,6 +113,7 @@ func NewClient(store db.Store, kc keychain.Keychain, hubAuth hub.HubAuth, uc Use dbListeners: make(map[string]Listener), shouldForceRestore: false, healthcheckMutex: &sync.Mutex{}, + filesSearchEngine: search, } } @@ -402,7 +413,7 @@ func (tc *textileClient) initialize(ctx context.Context) error { } if err = tc.initSearchIndex(ctx); err != nil { - log.Error("Error initializing users search index", err) + log.Error("Error initializing files search index", err) return err } @@ -559,7 +570,18 @@ func (tc *textileClient) RemoveKeys(ctx context.Context) error { } func (tc *textileClient) GetModel() model.Model { - return model.New(tc.store, tc.kc, tc.threads, tc.ht, tc.hubAuth, tc.cfg, tc.netc, tc.hnetc, tc.shouldForceRestore) + return model.New( + tc.store, + tc.kc, + tc.threads, + tc.ht, + tc.hubAuth, + tc.cfg, + tc.netc, + tc.hnetc, + tc.shouldForceRestore, + tc.filesSearchEngine, + ) } func (tc *textileClient) getSecureBucketsClient(baseClient *bucketsClient.Client) *SecureBucketClient { diff --git a/core/textile/mailbox_test.go b/core/textile/mailbox_test.go index 76441ef1..0f0e9453 100644 --- a/core/textile/mailbox_test.go +++ b/core/textile/mailbox_test.go @@ -18,6 +18,7 @@ var ( mockPrivKey crypto.PrivKey mockMb *mocks.Mailbox mockHubAuth *mocks.HubAuth + mockSearch *mocks.FilesSearchEngine ) type TearDown func() @@ -28,7 +29,8 @@ func initTestMailbox(t *testing.T) (tc.Client, TearDown) { mockHubAuth = new(mocks.HubAuth) mockUc = new(mocks.UsersClient) mockMb = new(mocks.Mailbox) - client := tc.NewClient(st, mockKc, mockHubAuth, mockUc, mockMb) + mockSearch = new(mocks.FilesSearchEngine) + client := tc.NewClient(st, mockKc, mockHubAuth, mockUc, mockMb, mockSearch) mockPubKeyHex := "67730a6678566ead5911d71304854daddb1fe98a396551a4be01de65da01f3a9" mockPrivKeyHex := "dd55f8921f90fdf31c6ef9ad86bd90605602fd7d32dc8ea66ab72deb6a82821c67730a6678566ead5911d71304854daddb1fe98a396551a4be01de65da01f3a9" diff --git a/core/textile/model/model.go b/core/textile/model/model.go index 000e6b7e..a4b46c7d 100644 --- a/core/textile/model/model.go +++ b/core/textile/model/model.go @@ -3,6 +3,8 @@ package model import ( "context" + "github.com/FleekHQ/space-daemon/core/search" + "github.com/FleekHQ/space-daemon/config" "github.com/FleekHQ/space-daemon/core/keychain" "github.com/FleekHQ/space-daemon/core/space/domain" @@ -27,6 +29,7 @@ type model struct { hnetc *nc.Client ht *threadsClient.Client shouldForceRestore bool + fsearch search.FilesSearchEngine } type Model interface { @@ -73,7 +76,18 @@ type Model interface { DeleteSearchIndexRecord(ctx context.Context, name, path, bucketSlug, dbId string) error } -func New(st store.Store, kc keychain.Keychain, threads *threadsClient.Client, ht *threadsClient.Client, hubAuth hub.HubAuth, cfg config.Config, netc *nc.Client, hnetc *nc.Client, shouldForceRestore bool) *model { +func New( + st store.Store, + kc keychain.Keychain, + threads *threadsClient.Client, + ht *threadsClient.Client, + hubAuth hub.HubAuth, + cfg config.Config, + netc *nc.Client, + hnetc *nc.Client, + shouldForceRestore bool, + search search.FilesSearchEngine, +) *model { return &model{ st: st, kc: kc, @@ -84,6 +98,7 @@ func New(st store.Store, kc keychain.Keychain, threads *threadsClient.Client, ht hnetc: hnetc, ht: ht, shouldForceRestore: shouldForceRestore, + fsearch: search, } } diff --git a/core/textile/model/search.go b/core/textile/model/search.go index fab58cdb..3b7001bd 100644 --- a/core/textile/model/search.go +++ b/core/textile/model/search.go @@ -5,83 +5,24 @@ import ( "path" "strings" - "github.com/textileio/go-threads/core/thread" - "github.com/textileio/go-threads/util" - - "github.com/pkg/errors" - "github.com/textileio/go-threads/db" + "github.com/FleekHQ/space-daemon/core/search" "github.com/FleekHQ/space-daemon/log" - "github.com/textileio/go-threads/api/client" - core "github.com/textileio/go-threads/core/db" ) type SearchItemType string const ( - FileItem SearchItemType = "FILE" - DirectoryItem SearchItemType = "DIRECTORY" + FileItem SearchItemType = "FILE" + DirectoryItem SearchItemType = "DIRECTORY" + DefaultSearchResultLimit int = 20 ) -type SearchIndexRecord struct { - ID core.InstanceID `json:"_id"` - ItemName string `json:"itemName"` - ItemExtension string `json:"itemExtension"` - ItemPath string `json:"itemPath"` - ItemType string `json:"itemType"` // currently either FILE/DIRECTORY - // Metadata here - BucketSlug string `json:"bucketSlug"` - DbId string `json:"dbId"` -} - -const searchIndexModelName = "SearchIndexMetadata" +type SearchIndexRecord search.IndexRecord func (m *model) InitSearchIndexCollection(ctx context.Context) error { log.Debug("Model.InitSearchIndexCollection: Initializing db") - _, err := m.initSearchModel(ctx) - return err -} - -func (m *model) initSearchModel(ctx context.Context) (*thread.ID, error) { - metaCtx, dbId, err := m.getMetaThreadContext(ctx) - if err != nil || dbId == nil { - return nil, err - } - - _, err = m.threads.GetCollectionInfo(metaCtx, *dbId, searchIndexModelName) - if err == nil { - // collection already exists - return dbId, nil - } - - // create search collection - if err := m.threads.NewCollection(metaCtx, *dbId, db.CollectionConfig{ - Name: searchIndexModelName, - Schema: util.SchemaFromInstance(&SearchIndexRecord{}, false), - Indexes: []db.Index{ - { - Path: "itemName", - Unique: false, - }, - { - Path: "itemPath", - Unique: false, - }, - { - Path: "itemType", - Unique: false, - }, - { - Path: "itemExtension", - Unique: false, - }, - }, - }); err != nil { - log.Warn("Creating Search collection failed", "error:"+err.Error()) - return nil, err - } - - return dbId, nil + return m.fsearch.Start() } func (m *model) UpdateSearchIndexRecord( @@ -91,97 +32,40 @@ func (m *model) UpdateSearchIndexRecord( bucketSlug, dbId string, ) (*SearchIndexRecord, error) { log.Debug("Model.UpdateSearchIndexRecord: Initializing db") - metaCtx, metaDbID, err := m.initBucketModel(ctx) - if err != nil || metaDbID == nil { - return nil, err - } - - // if record already exists avoid duplication - query := db.Where("itemName").Eq(name).And("itemPath").Eq(itemPath).And("bucketSlug").Eq(bucketSlug) - if dbId != "" { - query = query.And("dbId").Eq(dbId) - } - existingRecords, err := m.threads.Find(metaCtx, *metaDbID, searchIndexModelName, query, &SearchIndexRecord{}) - if err == nil && len(existingRecords.([]*SearchIndexRecord)) > 0 { - return existingRecords.([]*SearchIndexRecord)[0], nil - } - - newInstance := &SearchIndexRecord{ - ID: "", + if instance, err := m.fsearch.InsertFileData(ctx, &search.InsertIndexRecord{ ItemName: name, ItemExtension: strings.Replace(path.Ext(name), ".", "", -1), ItemPath: itemPath, ItemType: string(itemType), - DbId: dbId, BucketSlug: bucketSlug, - } - - instances := client.Instances{newInstance} - log.Debug("Model.UpdateSearchIndexRecord: Creating instance") - - res, err := m.threads.Create(metaCtx, *metaDbID, searchIndexModelName, instances) - if err != nil { + DbId: dbId, + }); err != nil { return nil, err + } else { + return (*SearchIndexRecord)(instance), nil } - log.Debug("Model.UpdateSearchIndexRecord: Instance creation successful", "instanceId:"+newInstance.ID.String()) - - id := res[0] - return &SearchIndexRecord{ - ID: core.InstanceID(id), - ItemName: newInstance.ItemName, - ItemPath: newInstance.ItemPath, - ItemType: newInstance.ItemType, - BucketSlug: newInstance.BucketSlug, - DbId: newInstance.DbId, - }, nil } func (m *model) QuerySearchIndex(ctx context.Context, query string) ([]*SearchIndexRecord, error) { - metaCtx, metaDbID, err := m.initBucketModel(ctx) - if err != nil || metaDbID == nil { + res, err := m.fsearch.QueryFileData(ctx, query, DefaultSearchResultLimit) + if err != nil { return nil, err } - log.Debug("Model.QuerySearchIndex: start search", "query:"+query) - res, err := m.threads.Find( - metaCtx, - *metaDbID, - searchIndexModelName, - db.Where("itemName").Eq(query).Or(db.Where("itemExtension").Eq(query)).LimitTo(20), - &SearchIndexRecord{}, - ) - if err != nil { - return nil, errors.Wrap(err, "search query failed") + result := make([]*SearchIndexRecord, len(res)) + for i, item := range res { + result[i] = (*SearchIndexRecord)(item) } - return res.([]*SearchIndexRecord), nil + return result, nil } -// DeleteSearchIndexRecords updates the search index by deleting records that match the name and path. +// DeleteSearchIndexRecords updates the fsearch index by deleting records that match the name and path. func (m *model) DeleteSearchIndexRecord(ctx context.Context, name, path, bucketSlug, dbId string) error { - metaCtx, metaDbID, err := m.initBucketModel(ctx) - if err != nil || metaDbID == nil { - return err - } - - query := db.Where("itemName").Eq(name).And("itemPath").Eq(path).And("bucketSlug").Eq(bucketSlug) - if dbId != "" { - query = query.And("dbId").Eq(dbId) - } - - res, err := m.threads.Find(metaCtx, *metaDbID, searchIndexModelName, query, &SearchIndexRecord{}) - if err != nil { - return err - } - records := res.([]*SearchIndexRecord) - if len(records) == 0 { - return nil - } - - var instanceIds []string - for _, record := range records { - instanceIds = append(instanceIds, record.ID.String()) - } - - return m.threads.Delete(metaCtx, *metaDbID, searchIndexModelName, instanceIds) + return m.fsearch.DeleteFileData(ctx, &search.DeleteIndexRecord{ + ItemName: name, + ItemPath: path, + BucketSlug: bucketSlug, + DbId: dbId, + }) } diff --git a/core/textile/sync/synchronizer.go b/core/textile/sync/synchronizer.go index d3c3a7cf..e9bfdaa7 100644 --- a/core/textile/sync/synchronizer.go +++ b/core/textile/sync/synchronizer.go @@ -164,6 +164,7 @@ func (s *synchronizer) NotifyBucketStartup(bucket string) { func (s *synchronizer) NotifyIndexItemAdded(bucket, path, dbId string) { t := newTask(addIndexItemTask, []string{bucket, path, dbId}) t.Parallelizable = true + t.MaxRetries = 2 s.enqueueTask(t, s.taskQueue) s.notifySyncNeeded() diff --git a/core/textile/sync/task-executors.go b/core/textile/sync/task-executors.go index 719f7381..91de6b3e 100644 --- a/core/textile/sync/task-executors.go +++ b/core/textile/sync/task-executors.go @@ -53,13 +53,10 @@ func (s *synchronizer) processAddItem(ctx context.Context, task *Task) error { pft := newTask(pinFileTask, []string{bucket, path}) s.enqueueTask(pft, s.filePinningQueue) - - indexTask := newTask(addIndexItemTask, []string{bucket, path, ""}) - indexTask.Parallelizable = true - s.enqueueTask(indexTask, s.taskQueue) - s.notifySyncNeeded() + s.NotifyIndexItemAdded(bucket, path, "") + return nil } diff --git a/core/util/paths.go b/core/util/paths.go new file mode 100644 index 00000000..4bd17099 --- /dev/null +++ b/core/util/paths.go @@ -0,0 +1,21 @@ +package util + +import ( + s "strings" + + "github.com/mitchellh/go-homedir" +) + +// ResolvePath resolves a path into its full qualified path +// alias like `~` is expanded based on the current user +func ResolvePath(path string) (string, error) { + fullPath := path + if home, err := homedir.Dir(); err == nil { + // If the path contains ~, we replace it with the actual home directory + fullPath = s.Replace(path, "~", home, -1) + } else { + return "", err + } + + return fullPath, nil +} diff --git a/go.mod b/go.mod index 642ba295..09be11e7 100644 --- a/go.mod +++ b/go.mod @@ -62,5 +62,8 @@ require ( google.golang.org/grpc v1.31.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.3.0 // indirect + gorm.io/driver/sqlite v1.1.3 + gorm.io/gorm v1.20.5 + gotest.tools v2.2.0+incompatible grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 ) diff --git a/go.sum b/go.sum index 945e6f9e..1e806953 100644 --- a/go.sum +++ b/go.sum @@ -977,6 +977,10 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.7.0 h1:qJ7piXPrjP3mDrfHf5ATkxfLix8ANs226vpo0aACOn0= github.com/jhump/protoreflect v1.7.0/go.mod h1:RZkzh7Hi9J7qT/sPlWnJ/UwZqCJvciFxKDA0UCeltSM= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= @@ -1481,6 +1485,8 @@ github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.14.3 h1:j7a/xn1U6TKA/PHHxqZuzh64CdtRc7rU9M+AvkOl5bA= +github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -2587,6 +2593,11 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/sqlite v1.1.3 h1:BYfdVuZB5He/u9dt4qDpZqiqDJ6KhPqs5QUqsr/Eeuc= +gorm.io/driver/sqlite v1.1.3/go.mod h1:AKDgRWk8lcSQSw+9kxCJnX/yySj8G3rdwYlU57cB45c= +gorm.io/gorm v1.20.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.20.5 h1:g3tpSF9kggASzReK+Z3dYei1IJODLqNUbOjSuCczY8g= +gorm.io/gorm v1.20.5/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E= diff --git a/mocks/FilesSearchEngine.go b/mocks/FilesSearchEngine.go new file mode 100644 index 00000000..8d7700a2 --- /dev/null +++ b/mocks/FilesSearchEngine.go @@ -0,0 +1,89 @@ +// Code generated by mockery v2.0.3. DO NOT EDIT. + +package mocks + +import ( + context "context" + + search "github.com/FleekHQ/space-daemon/core/search" + mock "github.com/stretchr/testify/mock" +) + +// FilesSearchEngine is an autogenerated mock type for the FilesSearchEngine type +type FilesSearchEngine struct { + mock.Mock +} + +// DeleteFileData provides a mock function with given fields: ctx, data +func (_m *FilesSearchEngine) DeleteFileData(ctx context.Context, data *search.DeleteIndexRecord) error { + ret := _m.Called(ctx, data) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *search.DeleteIndexRecord) error); ok { + r0 = rf(ctx, data) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// InsertFileData provides a mock function with given fields: ctx, data +func (_m *FilesSearchEngine) InsertFileData(ctx context.Context, data *search.InsertIndexRecord) (*search.IndexRecord, error) { + ret := _m.Called(ctx, data) + + var r0 *search.IndexRecord + if rf, ok := ret.Get(0).(func(context.Context, *search.InsertIndexRecord) *search.IndexRecord); ok { + r0 = rf(ctx, data) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*search.IndexRecord) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *search.InsertIndexRecord) error); ok { + r1 = rf(ctx, data) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// QueryFileData provides a mock function with given fields: ctx, query, limit +func (_m *FilesSearchEngine) QueryFileData(ctx context.Context, query string, limit int) ([]*search.IndexRecord, error) { + ret := _m.Called(ctx, query, limit) + + var r0 []*search.IndexRecord + if rf, ok := ret.Get(0).(func(context.Context, string, int) []*search.IndexRecord); ok { + r0 = rf(ctx, query, limit) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*search.IndexRecord) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, int) error); ok { + r1 = rf(ctx, query, limit) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Start provides a mock function with given fields: +func (_m *FilesSearchEngine) Start() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} From 12defc51f33d4a8e7ade81d17ed4806cdc2db44c Mon Sep 17 00:00:00 2001 From: Daniel Merrill Date: Wed, 4 Nov 2020 17:57:28 -0300 Subject: [PATCH 2/4] Fix file subscription events (#235) --- core/events/events.go | 18 +- core/textile/sync/restore.go | 11 +- core/textile/sync/task-executors.go | 35 +- core/textile/utils/utils.go | 29 ++ grpc/handlers.go | 35 +- grpc/pb/space.pb.go | 667 +++++++++++++++------------- grpc/pb/space.pb.gw.go | 1 + grpc/proto/space.proto | 7 + swagger/ui/space.swagger.json | 9 +- 9 files changed, 472 insertions(+), 340 deletions(-) diff --git a/core/events/events.go b/core/events/events.go index 88093fc1..8cc37c35 100644 --- a/core/events/events.go +++ b/core/events/events.go @@ -1,8 +1,6 @@ package events -import ( - "os" -) +import "github.com/FleekHQ/space-daemon/core/space/domain" // These file defines events that daemon can propagate through all layers @@ -25,18 +23,14 @@ const ( ) type FileEvent struct { - Path string - Bucket string - Info os.FileInfo - Type FileEventType + Info domain.FileInfo + Type FileEventType } -func NewFileEvent(path, bucket string, eventType FileEventType, info os.FileInfo) FileEvent { +func NewFileEvent(info domain.FileInfo, eventType FileEventType) FileEvent { return FileEvent{ - Path: path, - Bucket: bucket, - Type: eventType, - Info: info, + Info: info, + Type: eventType, } } diff --git a/core/textile/sync/restore.go b/core/textile/sync/restore.go index 2ee7bf11..3f36f93c 100644 --- a/core/textile/sync/restore.go +++ b/core/textile/sync/restore.go @@ -5,7 +5,9 @@ import ( "github.com/FleekHQ/space-daemon/core/events" "github.com/FleekHQ/space-daemon/core/textile/bucket" + "github.com/FleekHQ/space-daemon/core/textile/utils" "github.com/FleekHQ/space-daemon/log" + api_buckets_pb "github.com/textileio/textile/v2/api/buckets/pb" ) // return the targetBucket if path is newer there, srcBucket otherwise @@ -58,8 +60,13 @@ func (s *synchronizer) restoreBucket(ctx context.Context, bucketSlug string) err } } - if s.eventNotifier != nil { - s.eventNotifier.SendFileEvent(events.NewFileEvent(itemPath, bucketSlug, events.FileRestoring, nil)) + item, err := mirrorBucket.ListDirectory(ctx, itemPath) + if s.eventNotifier != nil && err == nil { + info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), itemPath) + info.BackedUp = true + info.LocallyAvailable = exists + info.RestoreInProgress = true + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestoring)) } s.NotifyFileRestore(bucketSlug, itemPath) diff --git a/core/textile/sync/task-executors.go b/core/textile/sync/task-executors.go index 719f7381..c8af09ff 100644 --- a/core/textile/sync/task-executors.go +++ b/core/textile/sync/task-executors.go @@ -11,6 +11,7 @@ import ( "golang.org/x/sync/errgroup" "github.com/FleekHQ/space-daemon/core/textile/model" + api_buckets_pb "github.com/textileio/textile/v2/api/buckets/pb" "github.com/FleekHQ/space-daemon/log" @@ -47,8 +48,17 @@ func (s *synchronizer) processAddItem(ctx context.Context, task *Task) error { } } - if s.eventNotifier != nil { - s.eventNotifier.SendFileEvent(events.NewFileEvent(path, bucket, events.FileBackupInProgress, nil)) + localBucket, err := s.getBucket(ctx, bucket) + if err != nil { + return err + } + + item, err := localBucket.ListDirectory(ctx, path) + if s.eventNotifier != nil && err == nil { + info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) + info.LocallyAvailable = true + info.BackupInProgress = true + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupInProgress)) } pft := newTask(pinFileTask, []string{bucket, path}) @@ -102,8 +112,17 @@ func (s *synchronizer) processPinFile(ctx context.Context, task *Task) error { s.setMirrorFileBackup(ctx, path, bucket, false) - if s.eventNotifier != nil { - s.eventNotifier.SendFileEvent(events.NewFileEvent(path, bucket, events.FileBackupReady, nil)) + localBucket, err := s.getBucket(ctx, bucket) + if err != nil { + return err + } + + item, err := localBucket.ListDirectory(ctx, path) + if s.eventNotifier != nil && err == nil { + info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) + info.LocallyAvailable = true + info.BackedUp = true + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupReady)) } return nil @@ -256,8 +275,12 @@ func (s *synchronizer) processRestoreFile(ctx context.Context, task *Task) error return err } - if s.eventNotifier != nil { - s.eventNotifier.SendFileEvent(events.NewFileEvent(path, bucket, events.FileRestored, nil)) + item, err := mirrorBucket.ListDirectory(ctx, path) + if s.eventNotifier != nil && err == nil { + info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) + info.LocallyAvailable = true + info.BackedUp = true + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestored)) } return err diff --git a/core/textile/utils/utils.go b/core/textile/utils/utils.go index d9aea854..b4b95763 100644 --- a/core/textile/utils/utils.go +++ b/core/textile/utils/utils.go @@ -9,9 +9,13 @@ import ( "encoding/hex" "errors" "path/filepath" + "strconv" + "strings" + "time" "github.com/FleekHQ/space-daemon/config" "github.com/FleekHQ/space-daemon/core/keychain" + "github.com/FleekHQ/space-daemon/core/space/domain" "github.com/FleekHQ/space-daemon/core/store" "github.com/FleekHQ/space-daemon/core/textile/hub" "github.com/FleekHQ/space-daemon/log" @@ -20,6 +24,7 @@ import ( "github.com/textileio/go-threads/core/thread" "github.com/textileio/go-threads/db" nc "github.com/textileio/go-threads/net/api/client" + bucketsproto "github.com/textileio/textile/v2/api/buckets/pb" "github.com/textileio/textile/v2/api/common" "github.com/textileio/textile/v2/cmd" "golang.org/x/crypto/pbkdf2" @@ -286,3 +291,27 @@ func successfulThreadCreation(st store.Store, dbID *thread.ID, dbIDInBytes, stor return dbID, nil } + +func MapDirEntryToFileInfo(entry bucketsproto.ListPathResponse, itemPath string) domain.FileInfo { + item := entry.Item + info := domain.FileInfo{ + DirEntry: domain.DirEntry{ + Path: itemPath, + IsDir: item.IsDir, + Name: item.Name, + SizeInBytes: strconv.FormatInt(item.Size, 10), + FileExtension: strings.Replace(filepath.Ext(item.Name), ".", "", -1), + // FIXME: real created at needed + Created: time.Unix(0, item.Metadata.UpdatedAt).Format(time.RFC3339), + Updated: time.Unix(0, item.Metadata.UpdatedAt).Format(time.RFC3339), + Members: []domain.Member{}, + }, + IpfsHash: item.Cid, + BackedUp: false, + LocallyAvailable: false, + BackupInProgress: false, + RestoreInProgress: false, + } + + return info +} diff --git a/grpc/handlers.go b/grpc/handlers.go index 37f22c0c..842eb6f1 100644 --- a/grpc/handlers.go +++ b/grpc/handlers.go @@ -21,11 +21,44 @@ func (srv *grpcServer) sendFileEvent(event *pb.FileEventResponse) { } func (srv *grpcServer) SendFileEvent(event events.FileEvent) { - pe := &pb.FileEventResponse{} + dirEntries := mapFileInfoToDirectoryEntry([]domain.FileInfo{event.Info}) + entry := dirEntries[0] + + pe := &pb.FileEventResponse{ + Type: mapFileEventToPb(event.Type), + Entry: entry, + } srv.sendFileEvent(pe) } +func mapFileEventToPb(eventType events.FileEventType) pb.EventType { + switch eventType { + case events.FileAdded: + return pb.EventType_ENTRY_ADDED + case events.FileDeleted: + return pb.EventType_ENTRY_DELETED + case events.FileUpdated: + return pb.EventType_ENTRY_UPDATED + case events.FileBackupInProgress: + return pb.EventType_ENTRY_BACKUP_IN_PROGRESS + case events.FileBackupReady: + return pb.EventType_ENTRY_BACKUP_READY + case events.FileRestoring: + return pb.EventType_ENTRY_RESTORE_IN_PROGRESS + case events.FileRestored: + return pb.EventType_ENTRY_RESTORE_READY + case events.FolderAdded: + return pb.EventType_FOLDER_ADDED + case events.FolderDeleted: + return pb.EventType_FOLDER_DELETED + case events.FolderUpdated: + return pb.EventType_FOLDER_UPDATED + default: + return pb.EventType_ENTRY_ADDED + } +} + func (srv *grpcServer) sendTextileEvent(event *pb.TextileEventResponse) { if srv.txlEventStream != nil { log.Info("sending events to client") diff --git a/grpc/pb/space.pb.go b/grpc/pb/space.pb.go index 6058174f..6f64bbcd 100644 --- a/grpc/pb/space.pb.go +++ b/grpc/pb/space.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.7.1 +// protoc v3.12.2 // source: space.proto package pb @@ -34,9 +34,16 @@ const _ = proto.ProtoPackageIsVersion4 type EventType int32 const ( - EventType_ENTRY_ADDED EventType = 0 - EventType_ENTRY_DELETED EventType = 1 - EventType_ENTRY_UPDATED EventType = 2 + EventType_ENTRY_ADDED EventType = 0 + EventType_ENTRY_DELETED EventType = 1 + EventType_ENTRY_UPDATED EventType = 2 + EventType_ENTRY_BACKUP_IN_PROGRESS EventType = 3 + EventType_ENTRY_BACKUP_READY EventType = 4 + EventType_ENTRY_RESTORE_IN_PROGRESS EventType = 5 + EventType_ENTRY_RESTORE_READY EventType = 6 + EventType_FOLDER_ADDED EventType = 7 + EventType_FOLDER_DELETED EventType = 8 + EventType_FOLDER_UPDATED EventType = 9 ) // Enum value maps for EventType. @@ -45,11 +52,25 @@ var ( 0: "ENTRY_ADDED", 1: "ENTRY_DELETED", 2: "ENTRY_UPDATED", + 3: "ENTRY_BACKUP_IN_PROGRESS", + 4: "ENTRY_BACKUP_READY", + 5: "ENTRY_RESTORE_IN_PROGRESS", + 6: "ENTRY_RESTORE_READY", + 7: "FOLDER_ADDED", + 8: "FOLDER_DELETED", + 9: "FOLDER_UPDATED", } EventType_value = map[string]int32{ - "ENTRY_ADDED": 0, - "ENTRY_DELETED": 1, - "ENTRY_UPDATED": 2, + "ENTRY_ADDED": 0, + "ENTRY_DELETED": 1, + "ENTRY_UPDATED": 2, + "ENTRY_BACKUP_IN_PROGRESS": 3, + "ENTRY_BACKUP_READY": 4, + "ENTRY_RESTORE_IN_PROGRESS": 5, + "ENTRY_RESTORE_READY": 6, + "FOLDER_ADDED": 7, + "FOLDER_DELETED": 8, + "FOLDER_UPDATED": 9, } ) @@ -5215,322 +5236,332 @@ var file_space_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x2a, 0x42, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, - 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x55, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x41, 0x47, 0x45, 0x41, - 0x4c, 0x45, 0x52, 0x54, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x59, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x10, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, - 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0xca, 0x25, 0x0a, 0x08, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x41, 0x70, 0x69, 0x12, 0x6d, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, - 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x63, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1d, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, - 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, - 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x75, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, - 0x6e, 0x69, 0x63, 0x12, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, - 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x6d, 0x6e, 0x65, - 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x9b, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, - 0x6e, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, - 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, + 0x73, 0x2a, 0xea, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, + 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, + 0x53, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x42, 0x41, + 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, + 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x49, 0x4e, + 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x45, + 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x41, + 0x44, 0x59, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x41, + 0x44, 0x44, 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x4f, + 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x09, 0x2a, 0x55, + 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, + 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x41, 0x47, 0x45, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x10, 0x02, 0x12, + 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, + 0x50, 0x4c, 0x59, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, + 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, + 0x10, 0x02, 0x32, 0xca, 0x25, 0x0a, 0x08, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, 0x70, 0x69, 0x12, + 0x6d, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x63, + 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, + 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x1f, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, + 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, + 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, + 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x9b, + 0x01, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, + 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, - 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x72, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, - 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x50, 0x61, 0x69, 0x72, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x80, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, - 0x61, 0x69, 0x72, 0x57, 0x69, 0x74, 0x68, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, - 0x73, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x61, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 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, 0x18, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x66, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, + 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, + 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x0d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1b, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, + 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x57, 0x69, 0x74, 0x68, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, + 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x61, 0x0a, 0x0c, 0x47, + 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x5f, + 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6c, - 0x65, 0x69, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x0c, 0x54, 0x78, 0x6c, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, - 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x30, - 0x01, 0x12, 0x56, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, - 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, - 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, - 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x12, 0x6b, 0x0a, 0x0e, 0x4f, 0x70, - 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, - 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x53, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, - 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x63, 0x0a, 0x0c, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, - 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x5a, 0x0a, 0x0f, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x44, - 0x72, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, - 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, - 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 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, 0x18, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, - 0x76, 0x31, 0x2f, 0x66, 0x75, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, - 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, - 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, - 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, - 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, - 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, - 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x3a, - 0x01, 0x2a, 0x12, 0x7a, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x86, - 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, - 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, - 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x12, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, - 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, - 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, - 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0b, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, - 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x01, 0x2a, - 0x12, 0x8c, 0x01, 0x0a, 0x16, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, - 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, - 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, - 0x91, 0x01, 0x0a, 0x15, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, - 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x7d, - 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, + 0x6f, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 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, 0x1c, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x69, 0x6e, 0x66, 0x6f, 0x30, 0x01, + 0x12, 0x68, 0x0a, 0x0c, 0x54, 0x78, 0x6c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x54, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x74, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x08, 0x4f, 0x70, + 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, + 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x3a, + 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x24, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, + 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x3a, + 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, + 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, + 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, + 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, + 0x68, 0x4d, 0x65, 0x12, 0x6b, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x12, 0x53, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x63, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x0f, 0x54, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x66, + 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, 0x75, 0x73, + 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, - 0x12, 0x59, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, - 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, - 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x6e, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7b, 0x0a, 0x10, 0x52, - 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x49, 0x44, 0x7d, - 0x2f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, - 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, - 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x12, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, - 0x2a, 0x12, 0x5a, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x7a, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x7e, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, - 0x74, 0x68, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x73, + 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x73, 0x65, + 0x12, 0x5f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x3a, 0x01, + 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, + 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, + 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, + 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, + 0x17, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, + 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, + 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, + 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, + 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, + 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x7a, 0x0a, 0x12, 0x54, + 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, + 0x65, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, + 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, + 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, + 0x74, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, + 0x12, 0x90, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, + 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x26, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, + 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x3a, 0x01, 0x2a, + 0x12, 0x67, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x18, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x16, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x15, 0x48, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x1a, 0x53, 0x65, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, - 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, - 0x65, 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, - 0x6e, 0x41, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x15, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 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, 0x20, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x12, 0x6e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7b, 0x0a, 0x10, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x01, + 0x2a, 0x12, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x12, 0x54, + 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, + 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, + 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, + 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, + 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, + 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x7a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x21, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, + 0x31, 0x2f, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x12, 0x7e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, + 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x12, 0x23, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, + 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, + 0x74, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, + 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, + 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x3a, 0x01, 0x2a, 0x12, + 0x5e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x19, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x42, + 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/grpc/pb/space.pb.gw.go b/grpc/pb/space.pb.gw.go index 99aba87d..cc1de5e0 100644 --- a/grpc/pb/space.pb.gw.go +++ b/grpc/pb/space.pb.gw.go @@ -1448,6 +1448,7 @@ func local_request_SpaceApi_SearchFiles_0(ctx context.Context, marshaler runtime // RegisterSpaceApiHandlerServer registers the http handlers for service SpaceApi to "mux". // UnaryRPC :call SpaceApiServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterSpaceApiHandlerFromEndpoint instead. func RegisterSpaceApiHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SpaceApiServer) error { mux.Handle("GET", pattern_SpaceApi_ListDirectories_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { diff --git a/grpc/proto/space.proto b/grpc/proto/space.proto index a34f2ac7..2b8d8fd1 100644 --- a/grpc/proto/space.proto +++ b/grpc/proto/space.proto @@ -467,6 +467,13 @@ enum EventType { ENTRY_ADDED = 0; ENTRY_DELETED = 1; ENTRY_UPDATED = 2; + ENTRY_BACKUP_IN_PROGRESS = 3; + ENTRY_BACKUP_READY = 4; + ENTRY_RESTORE_IN_PROGRESS = 5; + ENTRY_RESTORE_READY = 6; + FOLDER_ADDED = 7; + FOLDER_DELETED = 8; + FOLDER_UPDATED = 9; } message FileEventResponse { diff --git a/swagger/ui/space.swagger.json b/swagger/ui/space.swagger.json index 12967b59..4d60426b 100644 --- a/swagger/ui/space.swagger.json +++ b/swagger/ui/space.swagger.json @@ -1616,7 +1616,14 @@ "enum": [ "ENTRY_ADDED", "ENTRY_DELETED", - "ENTRY_UPDATED" + "ENTRY_UPDATED", + "ENTRY_BACKUP_IN_PROGRESS", + "ENTRY_BACKUP_READY", + "ENTRY_RESTORE_IN_PROGRESS", + "ENTRY_RESTORE_READY", + "FOLDER_ADDED", + "FOLDER_DELETED", + "FOLDER_UPDATED" ], "default": "ENTRY_ADDED" }, From df8f9daa0a630c3461b82a04bf3d2784daf559e2 Mon Sep 17 00:00:00 2001 From: Daniel Merrill Date: Thu, 5 Nov 2020 12:27:29 -0300 Subject: [PATCH 3/4] Remove file info stream and add more info to file events (#236) --- core/events/events.go | 14 +- core/textile/sync/restore.go | 7 +- core/textile/sync/task-executors.go | 19 +- grpc/grpc.go | 1 - grpc/handlers.go | 23 +- grpc/pb/space.pb.go | 2052 +++++++++++++-------------- grpc/pb/space.pb.gw.go | 48 - grpc/proto/space.proto | 13 +- swagger/ui/space.swagger.json | 46 +- 9 files changed, 1006 insertions(+), 1217 deletions(-) diff --git a/core/events/events.go b/core/events/events.go index 8cc37c35..1ea92a4b 100644 --- a/core/events/events.go +++ b/core/events/events.go @@ -23,14 +23,18 @@ const ( ) type FileEvent struct { - Info domain.FileInfo - Type FileEventType + Info domain.FileInfo + Type FileEventType + Bucket string + DbID string } -func NewFileEvent(info domain.FileInfo, eventType FileEventType) FileEvent { +func NewFileEvent(info domain.FileInfo, eventType FileEventType, bucket, dbID string) FileEvent { return FileEvent{ - Info: info, - Type: eventType, + Info: info, + Type: eventType, + Bucket: bucket, + DbID: dbID, } } diff --git a/core/textile/sync/restore.go b/core/textile/sync/restore.go index 3f36f93c..2edd1349 100644 --- a/core/textile/sync/restore.go +++ b/core/textile/sync/restore.go @@ -60,13 +60,18 @@ func (s *synchronizer) restoreBucket(ctx context.Context, bucketSlug string) err } } + bucketModel, err := s.model.FindBucket(ctx, bucketSlug) + if err != nil { + return err + } + item, err := mirrorBucket.ListDirectory(ctx, itemPath) if s.eventNotifier != nil && err == nil { info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), itemPath) info.BackedUp = true info.LocallyAvailable = exists info.RestoreInProgress = true - s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestoring)) + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestoring, bucketSlug, bucketModel.DbID)) } s.NotifyFileRestore(bucketSlug, itemPath) diff --git a/core/textile/sync/task-executors.go b/core/textile/sync/task-executors.go index c8af09ff..3bde7557 100644 --- a/core/textile/sync/task-executors.go +++ b/core/textile/sync/task-executors.go @@ -5,7 +5,6 @@ import ( "encoding/hex" "errors" - "fmt" "path" "golang.org/x/sync/errgroup" @@ -58,7 +57,7 @@ func (s *synchronizer) processAddItem(ctx context.Context, task *Task) error { info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) info.LocallyAvailable = true info.BackupInProgress = true - s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupInProgress)) + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupInProgress, bucket, bucketModel.DbID)) } pft := newTask(pinFileTask, []string{bucket, path}) @@ -117,12 +116,17 @@ func (s *synchronizer) processPinFile(ctx context.Context, task *Task) error { return err } + bucketModel, err := s.model.FindBucket(ctx, bucket) + if err != nil { + return err + } + item, err := localBucket.ListDirectory(ctx, path) if s.eventNotifier != nil && err == nil { info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) info.LocallyAvailable = true info.BackedUp = true - s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupReady)) + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileBackupReady, bucket, bucketModel.DbID)) } return nil @@ -240,8 +244,6 @@ func (s *synchronizer) processBucketRestoreTask(ctx context.Context, task *Task) } func (s *synchronizer) processRestoreFile(ctx context.Context, task *Task) error { - log.Debug(fmt.Sprintf("processRestoreFile: 1")) - if err := checkTaskType(task, restoreFileTask); err != nil { return err } @@ -275,12 +277,17 @@ func (s *synchronizer) processRestoreFile(ctx context.Context, task *Task) error return err } + bucketModel, err := s.model.FindBucket(ctx, bucket) + if err != nil { + return err + } + item, err := mirrorBucket.ListDirectory(ctx, path) if s.eventNotifier != nil && err == nil { info := utils.MapDirEntryToFileInfo(api_buckets_pb.ListPathResponse(*item), path) info.LocallyAvailable = true info.BackedUp = true - s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestored)) + s.eventNotifier.SendFileEvent(events.NewFileEvent(info, events.FileRestored, bucket, bucketModel.DbID)) } return err diff --git a/grpc/grpc.go b/grpc/grpc.go index cfb2c60a..7051d94e 100644 --- a/grpc/grpc.go +++ b/grpc/grpc.go @@ -48,7 +48,6 @@ type grpcServer struct { fc *fuse.Controller // TODO: see if we need to clean this up by gc or handle an array fileEventStream pb.SpaceApi_SubscribeServer - fileInfoStream pb.SpaceApi_FileInfoSubscribeServer txlEventStream pb.SpaceApi_TxlSubscribeServer notificationEventStream pb.SpaceApi_NotificationSubscribeServer isStarted bool diff --git a/grpc/handlers.go b/grpc/handlers.go index 842eb6f1..4727b9fc 100644 --- a/grpc/handlers.go +++ b/grpc/handlers.go @@ -25,8 +25,10 @@ func (srv *grpcServer) SendFileEvent(event events.FileEvent) { entry := dirEntries[0] pe := &pb.FileEventResponse{ - Type: mapFileEventToPb(event.Type), - Entry: entry, + Type: mapFileEventToPb(event.Type), + Entry: entry, + Bucket: event.Bucket, + DbId: event.DbID, } srv.sendFileEvent(pe) @@ -178,23 +180,6 @@ func (srv *grpcServer) TxlSubscribe(empty *empty.Empty, stream pb.SpaceApi_TxlSu return nil } -func (srv *grpcServer) FileInfoSubscribe(empty *empty.Empty, stream pb.SpaceApi_FileInfoSubscribeServer) error { - srv.registerFileInfoStream(stream) - // waits until request is done - select { - case <-stream.Context().Done(): - break - } - // clean up stream - srv.registerFileInfoStream(nil) - log.Info("closing stream") - return nil -} - -func (srv *grpcServer) registerFileInfoStream(stream pb.SpaceApi_FileInfoSubscribeServer) { - srv.fileInfoStream = stream -} - func (srv *grpcServer) registerTxlStream(stream pb.SpaceApi_TxlSubscribeServer) { srv.txlEventStream = stream } diff --git a/grpc/pb/space.pb.go b/grpc/pb/space.pb.go index 6f64bbcd..737b2df9 100644 --- a/grpc/pb/space.pb.go +++ b/grpc/pb/space.pb.go @@ -1874,8 +1874,10 @@ type FileEventResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type EventType `protobuf:"varint,1,opt,name=type,proto3,enum=space.EventType" json:"type,omitempty"` - Entry *ListDirectoryEntry `protobuf:"bytes,2,opt,name=entry,proto3" json:"entry,omitempty"` + Type EventType `protobuf:"varint,1,opt,name=type,proto3,enum=space.EventType" json:"type,omitempty"` + Entry *ListDirectoryEntry `protobuf:"bytes,2,opt,name=entry,proto3" json:"entry,omitempty"` + Bucket string `protobuf:"bytes,3,opt,name=bucket,proto3" json:"bucket,omitempty"` + DbId string `protobuf:"bytes,4,opt,name=dbId,proto3" json:"dbId,omitempty"` } func (x *FileEventResponse) Reset() { @@ -1924,51 +1926,18 @@ func (x *FileEventResponse) GetEntry() *ListDirectoryEntry { return nil } -type FileInfoEventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - File *ListDirectoryEntry `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` -} - -func (x *FileInfoEventResponse) Reset() { - *x = FileInfoEventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileInfoEventResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileInfoEventResponse) ProtoMessage() {} - -func (x *FileInfoEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *FileEventResponse) GetBucket() string { + if x != nil { + return x.Bucket } - return mi.MessageOf(x) -} - -// Deprecated: Use FileInfoEventResponse.ProtoReflect.Descriptor instead. -func (*FileInfoEventResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{31} + return "" } -func (x *FileInfoEventResponse) GetFile() *ListDirectoryEntry { +func (x *FileEventResponse) GetDbId() string { if x != nil { - return x.File + return x.DbId } - return nil + return "" } type TextileEventResponse struct { @@ -1982,7 +1951,7 @@ type TextileEventResponse struct { func (x *TextileEventResponse) Reset() { *x = TextileEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[32] + mi := &file_space_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1995,7 +1964,7 @@ func (x *TextileEventResponse) String() string { func (*TextileEventResponse) ProtoMessage() {} func (x *TextileEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[32] + mi := &file_space_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2008,7 +1977,7 @@ func (x *TextileEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TextileEventResponse.ProtoReflect.Descriptor instead. func (*TextileEventResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{32} + return file_space_proto_rawDescGZIP(), []int{31} } func (x *TextileEventResponse) GetBucket() string { @@ -2031,7 +2000,7 @@ type OpenFileRequest struct { func (x *OpenFileRequest) Reset() { *x = OpenFileRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[33] + mi := &file_space_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2013,7 @@ func (x *OpenFileRequest) String() string { func (*OpenFileRequest) ProtoMessage() {} func (x *OpenFileRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[33] + mi := &file_space_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2026,7 @@ func (x *OpenFileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenFileRequest.ProtoReflect.Descriptor instead. func (*OpenFileRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{33} + return file_space_proto_rawDescGZIP(), []int{32} } func (x *OpenFileRequest) GetPath() string { @@ -2092,7 +2061,7 @@ type OpenFileResponse struct { func (x *OpenFileResponse) Reset() { *x = OpenFileResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[34] + mi := &file_space_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2105,7 +2074,7 @@ func (x *OpenFileResponse) String() string { func (*OpenFileResponse) ProtoMessage() {} func (x *OpenFileResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[34] + mi := &file_space_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2118,7 +2087,7 @@ func (x *OpenFileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenFileResponse.ProtoReflect.Descriptor instead. func (*OpenFileResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{34} + return file_space_proto_rawDescGZIP(), []int{33} } func (x *OpenFileResponse) GetLocation() string { @@ -2141,7 +2110,7 @@ type OpenPublicFileRequest struct { func (x *OpenPublicFileRequest) Reset() { *x = OpenPublicFileRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[35] + mi := &file_space_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2123,7 @@ func (x *OpenPublicFileRequest) String() string { func (*OpenPublicFileRequest) ProtoMessage() {} func (x *OpenPublicFileRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[35] + mi := &file_space_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2136,7 @@ func (x *OpenPublicFileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenPublicFileRequest.ProtoReflect.Descriptor instead. func (*OpenPublicFileRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{35} + return file_space_proto_rawDescGZIP(), []int{34} } func (x *OpenPublicFileRequest) GetFileCid() string { @@ -2202,7 +2171,7 @@ type OpenPublicFileResponse struct { func (x *OpenPublicFileResponse) Reset() { *x = OpenPublicFileResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[36] + mi := &file_space_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2215,7 +2184,7 @@ func (x *OpenPublicFileResponse) String() string { func (*OpenPublicFileResponse) ProtoMessage() {} func (x *OpenPublicFileResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[36] + mi := &file_space_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2228,7 +2197,7 @@ func (x *OpenPublicFileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenPublicFileResponse.ProtoReflect.Descriptor instead. func (*OpenPublicFileResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{36} + return file_space_proto_rawDescGZIP(), []int{35} } func (x *OpenPublicFileResponse) GetLocation() string { @@ -2254,7 +2223,7 @@ type AddItemsRequest struct { func (x *AddItemsRequest) Reset() { *x = AddItemsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[37] + mi := &file_space_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2267,7 +2236,7 @@ func (x *AddItemsRequest) String() string { func (*AddItemsRequest) ProtoMessage() {} func (x *AddItemsRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[37] + mi := &file_space_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2280,7 +2249,7 @@ func (x *AddItemsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddItemsRequest.ProtoReflect.Descriptor instead. func (*AddItemsRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{37} + return file_space_proto_rawDescGZIP(), []int{36} } func (x *AddItemsRequest) GetSourcePaths() []string { @@ -2317,7 +2286,7 @@ type AddItemResult struct { func (x *AddItemResult) Reset() { *x = AddItemResult{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[38] + mi := &file_space_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2330,7 +2299,7 @@ func (x *AddItemResult) String() string { func (*AddItemResult) ProtoMessage() {} func (x *AddItemResult) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[38] + mi := &file_space_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2343,7 +2312,7 @@ func (x *AddItemResult) ProtoReflect() protoreflect.Message { // Deprecated: Use AddItemResult.ProtoReflect.Descriptor instead. func (*AddItemResult) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{38} + return file_space_proto_rawDescGZIP(), []int{37} } func (x *AddItemResult) GetSourcePath() string { @@ -2382,7 +2351,7 @@ type AddItemsResponse struct { func (x *AddItemsResponse) Reset() { *x = AddItemsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[39] + mi := &file_space_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2395,7 +2364,7 @@ func (x *AddItemsResponse) String() string { func (*AddItemsResponse) ProtoMessage() {} func (x *AddItemsResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[39] + mi := &file_space_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2408,7 +2377,7 @@ func (x *AddItemsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddItemsResponse.ProtoReflect.Descriptor instead. func (*AddItemsResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{39} + return file_space_proto_rawDescGZIP(), []int{38} } func (x *AddItemsResponse) GetResult() *AddItemResult { @@ -2460,7 +2429,7 @@ type CreateFolderRequest struct { func (x *CreateFolderRequest) Reset() { *x = CreateFolderRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[40] + mi := &file_space_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2473,7 +2442,7 @@ func (x *CreateFolderRequest) String() string { func (*CreateFolderRequest) ProtoMessage() {} func (x *CreateFolderRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[40] + mi := &file_space_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2486,7 +2455,7 @@ func (x *CreateFolderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFolderRequest.ProtoReflect.Descriptor instead. func (*CreateFolderRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{40} + return file_space_proto_rawDescGZIP(), []int{39} } func (x *CreateFolderRequest) GetPath() string { @@ -2513,7 +2482,7 @@ type CreateFolderResponse struct { func (x *CreateFolderResponse) Reset() { *x = CreateFolderResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[41] + mi := &file_space_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2526,7 +2495,7 @@ func (x *CreateFolderResponse) String() string { func (*CreateFolderResponse) ProtoMessage() {} func (x *CreateFolderResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[41] + mi := &file_space_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2539,7 +2508,7 @@ func (x *CreateFolderResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFolderResponse.ProtoReflect.Descriptor instead. func (*CreateFolderResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{41} + return file_space_proto_rawDescGZIP(), []int{40} } type BackupKeysByPassphraseRequest struct { @@ -2554,7 +2523,7 @@ type BackupKeysByPassphraseRequest struct { func (x *BackupKeysByPassphraseRequest) Reset() { *x = BackupKeysByPassphraseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[42] + mi := &file_space_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2567,7 +2536,7 @@ func (x *BackupKeysByPassphraseRequest) String() string { func (*BackupKeysByPassphraseRequest) ProtoMessage() {} func (x *BackupKeysByPassphraseRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[42] + mi := &file_space_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2580,7 +2549,7 @@ func (x *BackupKeysByPassphraseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupKeysByPassphraseRequest.ProtoReflect.Descriptor instead. func (*BackupKeysByPassphraseRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{42} + return file_space_proto_rawDescGZIP(), []int{41} } func (x *BackupKeysByPassphraseRequest) GetUuid() string { @@ -2606,7 +2575,7 @@ type BackupKeysByPassphraseResponse struct { func (x *BackupKeysByPassphraseResponse) Reset() { *x = BackupKeysByPassphraseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[43] + mi := &file_space_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2619,7 +2588,7 @@ func (x *BackupKeysByPassphraseResponse) String() string { func (*BackupKeysByPassphraseResponse) ProtoMessage() {} func (x *BackupKeysByPassphraseResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[43] + mi := &file_space_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2632,7 +2601,7 @@ func (x *BackupKeysByPassphraseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupKeysByPassphraseResponse.ProtoReflect.Descriptor instead. func (*BackupKeysByPassphraseResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{43} + return file_space_proto_rawDescGZIP(), []int{42} } type RecoverKeysByPassphraseRequest struct { @@ -2647,7 +2616,7 @@ type RecoverKeysByPassphraseRequest struct { func (x *RecoverKeysByPassphraseRequest) Reset() { *x = RecoverKeysByPassphraseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[44] + mi := &file_space_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2660,7 +2629,7 @@ func (x *RecoverKeysByPassphraseRequest) String() string { func (*RecoverKeysByPassphraseRequest) ProtoMessage() {} func (x *RecoverKeysByPassphraseRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[44] + mi := &file_space_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2673,7 +2642,7 @@ func (x *RecoverKeysByPassphraseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverKeysByPassphraseRequest.ProtoReflect.Descriptor instead. func (*RecoverKeysByPassphraseRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{44} + return file_space_proto_rawDescGZIP(), []int{43} } func (x *RecoverKeysByPassphraseRequest) GetUuid() string { @@ -2699,7 +2668,7 @@ type RecoverKeysByPassphraseResponse struct { func (x *RecoverKeysByPassphraseResponse) Reset() { *x = RecoverKeysByPassphraseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[45] + mi := &file_space_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2712,7 +2681,7 @@ func (x *RecoverKeysByPassphraseResponse) String() string { func (*RecoverKeysByPassphraseResponse) ProtoMessage() {} func (x *RecoverKeysByPassphraseResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[45] + mi := &file_space_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2725,7 +2694,7 @@ func (x *RecoverKeysByPassphraseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverKeysByPassphraseResponse.ProtoReflect.Descriptor instead. func (*RecoverKeysByPassphraseResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{45} + return file_space_proto_rawDescGZIP(), []int{44} } type TestKeysPassphraseRequest struct { @@ -2740,7 +2709,7 @@ type TestKeysPassphraseRequest struct { func (x *TestKeysPassphraseRequest) Reset() { *x = TestKeysPassphraseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[46] + mi := &file_space_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2753,7 +2722,7 @@ func (x *TestKeysPassphraseRequest) String() string { func (*TestKeysPassphraseRequest) ProtoMessage() {} func (x *TestKeysPassphraseRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[46] + mi := &file_space_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2766,7 +2735,7 @@ func (x *TestKeysPassphraseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TestKeysPassphraseRequest.ProtoReflect.Descriptor instead. func (*TestKeysPassphraseRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{46} + return file_space_proto_rawDescGZIP(), []int{45} } func (x *TestKeysPassphraseRequest) GetUuid() string { @@ -2792,7 +2761,7 @@ type TestKeysPassphraseResponse struct { func (x *TestKeysPassphraseResponse) Reset() { *x = TestKeysPassphraseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[47] + mi := &file_space_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2805,7 +2774,7 @@ func (x *TestKeysPassphraseResponse) String() string { func (*TestKeysPassphraseResponse) ProtoMessage() {} func (x *TestKeysPassphraseResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[47] + mi := &file_space_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2818,7 +2787,7 @@ func (x *TestKeysPassphraseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TestKeysPassphraseResponse.ProtoReflect.Descriptor instead. func (*TestKeysPassphraseResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{47} + return file_space_proto_rawDescGZIP(), []int{46} } type ThreadInfo struct { @@ -2833,7 +2802,7 @@ type ThreadInfo struct { func (x *ThreadInfo) Reset() { *x = ThreadInfo{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[48] + mi := &file_space_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2846,7 +2815,7 @@ func (x *ThreadInfo) String() string { func (*ThreadInfo) ProtoMessage() {} func (x *ThreadInfo) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[48] + mi := &file_space_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2859,7 +2828,7 @@ func (x *ThreadInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ThreadInfo.ProtoReflect.Descriptor instead. func (*ThreadInfo) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{48} + return file_space_proto_rawDescGZIP(), []int{47} } func (x *ThreadInfo) GetAddresses() []string { @@ -2887,7 +2856,7 @@ type ShareBucketRequest struct { func (x *ShareBucketRequest) Reset() { *x = ShareBucketRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[49] + mi := &file_space_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2900,7 +2869,7 @@ func (x *ShareBucketRequest) String() string { func (*ShareBucketRequest) ProtoMessage() {} func (x *ShareBucketRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[49] + mi := &file_space_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2913,7 +2882,7 @@ func (x *ShareBucketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShareBucketRequest.ProtoReflect.Descriptor instead. func (*ShareBucketRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{49} + return file_space_proto_rawDescGZIP(), []int{48} } func (x *ShareBucketRequest) GetBucket() string { @@ -2934,7 +2903,7 @@ type ShareBucketResponse struct { func (x *ShareBucketResponse) Reset() { *x = ShareBucketResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[50] + mi := &file_space_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2947,7 +2916,7 @@ func (x *ShareBucketResponse) String() string { func (*ShareBucketResponse) ProtoMessage() {} func (x *ShareBucketResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[50] + mi := &file_space_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2960,7 +2929,7 @@ func (x *ShareBucketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShareBucketResponse.ProtoReflect.Descriptor instead. func (*ShareBucketResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{50} + return file_space_proto_rawDescGZIP(), []int{49} } func (x *ShareBucketResponse) GetThreadinfo() *ThreadInfo { @@ -2982,7 +2951,7 @@ type JoinBucketRequest struct { func (x *JoinBucketRequest) Reset() { *x = JoinBucketRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[51] + mi := &file_space_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2995,7 +2964,7 @@ func (x *JoinBucketRequest) String() string { func (*JoinBucketRequest) ProtoMessage() {} func (x *JoinBucketRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[51] + mi := &file_space_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3008,7 +2977,7 @@ func (x *JoinBucketRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JoinBucketRequest.ProtoReflect.Descriptor instead. func (*JoinBucketRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{51} + return file_space_proto_rawDescGZIP(), []int{50} } func (x *JoinBucketRequest) GetThreadinfo() *ThreadInfo { @@ -3036,7 +3005,7 @@ type JoinBucketResponse struct { func (x *JoinBucketResponse) Reset() { *x = JoinBucketResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[52] + mi := &file_space_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3049,7 +3018,7 @@ func (x *JoinBucketResponse) String() string { func (*JoinBucketResponse) ProtoMessage() {} func (x *JoinBucketResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[52] + mi := &file_space_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3062,7 +3031,7 @@ func (x *JoinBucketResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JoinBucketResponse.ProtoReflect.Descriptor instead. func (*JoinBucketResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{52} + return file_space_proto_rawDescGZIP(), []int{51} } func (x *JoinBucketResponse) GetResult() bool { @@ -3084,7 +3053,7 @@ type ShareFilesViaPublicKeyRequest struct { func (x *ShareFilesViaPublicKeyRequest) Reset() { *x = ShareFilesViaPublicKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[53] + mi := &file_space_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3097,7 +3066,7 @@ func (x *ShareFilesViaPublicKeyRequest) String() string { func (*ShareFilesViaPublicKeyRequest) ProtoMessage() {} func (x *ShareFilesViaPublicKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[53] + mi := &file_space_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3110,7 +3079,7 @@ func (x *ShareFilesViaPublicKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShareFilesViaPublicKeyRequest.ProtoReflect.Descriptor instead. func (*ShareFilesViaPublicKeyRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{53} + return file_space_proto_rawDescGZIP(), []int{52} } func (x *ShareFilesViaPublicKeyRequest) GetPublicKeys() []string { @@ -3140,7 +3109,7 @@ type FullPath struct { func (x *FullPath) Reset() { *x = FullPath{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[54] + mi := &file_space_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3153,7 +3122,7 @@ func (x *FullPath) String() string { func (*FullPath) ProtoMessage() {} func (x *FullPath) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[54] + mi := &file_space_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3166,7 +3135,7 @@ func (x *FullPath) ProtoReflect() protoreflect.Message { // Deprecated: Use FullPath.ProtoReflect.Descriptor instead. func (*FullPath) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{54} + return file_space_proto_rawDescGZIP(), []int{53} } func (x *FullPath) GetDbId() string { @@ -3199,7 +3168,7 @@ type ShareFilesViaPublicKeyResponse struct { func (x *ShareFilesViaPublicKeyResponse) Reset() { *x = ShareFilesViaPublicKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[55] + mi := &file_space_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3212,7 +3181,7 @@ func (x *ShareFilesViaPublicKeyResponse) String() string { func (*ShareFilesViaPublicKeyResponse) ProtoMessage() {} func (x *ShareFilesViaPublicKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[55] + mi := &file_space_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3225,7 +3194,7 @@ func (x *ShareFilesViaPublicKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ShareFilesViaPublicKeyResponse.ProtoReflect.Descriptor instead. func (*ShareFilesViaPublicKeyResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{55} + return file_space_proto_rawDescGZIP(), []int{54} } type GeneratePublicFileLinkRequest struct { @@ -3244,7 +3213,7 @@ type GeneratePublicFileLinkRequest struct { func (x *GeneratePublicFileLinkRequest) Reset() { *x = GeneratePublicFileLinkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[56] + mi := &file_space_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3257,7 +3226,7 @@ func (x *GeneratePublicFileLinkRequest) String() string { func (*GeneratePublicFileLinkRequest) ProtoMessage() {} func (x *GeneratePublicFileLinkRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[56] + mi := &file_space_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3270,7 +3239,7 @@ func (x *GeneratePublicFileLinkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GeneratePublicFileLinkRequest.ProtoReflect.Descriptor instead. func (*GeneratePublicFileLinkRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{56} + return file_space_proto_rawDescGZIP(), []int{55} } func (x *GeneratePublicFileLinkRequest) GetBucket() string { @@ -3313,7 +3282,7 @@ type GeneratePublicFileLinkResponse struct { func (x *GeneratePublicFileLinkResponse) Reset() { *x = GeneratePublicFileLinkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[57] + mi := &file_space_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3326,7 +3295,7 @@ func (x *GeneratePublicFileLinkResponse) String() string { func (*GeneratePublicFileLinkResponse) ProtoMessage() {} func (x *GeneratePublicFileLinkResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[57] + mi := &file_space_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3339,7 +3308,7 @@ func (x *GeneratePublicFileLinkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GeneratePublicFileLinkResponse.ProtoReflect.Descriptor instead. func (*GeneratePublicFileLinkResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{57} + return file_space_proto_rawDescGZIP(), []int{56} } func (x *GeneratePublicFileLinkResponse) GetLink() string { @@ -3367,7 +3336,7 @@ type ToggleFuseRequest struct { func (x *ToggleFuseRequest) Reset() { *x = ToggleFuseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[58] + mi := &file_space_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3380,7 +3349,7 @@ func (x *ToggleFuseRequest) String() string { func (*ToggleFuseRequest) ProtoMessage() {} func (x *ToggleFuseRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[58] + mi := &file_space_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3393,7 +3362,7 @@ func (x *ToggleFuseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ToggleFuseRequest.ProtoReflect.Descriptor instead. func (*ToggleFuseRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{58} + return file_space_proto_rawDescGZIP(), []int{57} } func (x *ToggleFuseRequest) GetMountDrive() bool { @@ -3414,7 +3383,7 @@ type FuseDriveResponse struct { func (x *FuseDriveResponse) Reset() { *x = FuseDriveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[59] + mi := &file_space_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3427,7 +3396,7 @@ func (x *FuseDriveResponse) String() string { func (*FuseDriveResponse) ProtoMessage() {} func (x *FuseDriveResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[59] + mi := &file_space_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3440,7 +3409,7 @@ func (x *FuseDriveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FuseDriveResponse.ProtoReflect.Descriptor instead. func (*FuseDriveResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{59} + return file_space_proto_rawDescGZIP(), []int{58} } func (x *FuseDriveResponse) GetFuseDriveMounted() bool { @@ -3459,7 +3428,7 @@ type ListBucketsRequest struct { func (x *ListBucketsRequest) Reset() { *x = ListBucketsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[60] + mi := &file_space_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3472,7 +3441,7 @@ func (x *ListBucketsRequest) String() string { func (*ListBucketsRequest) ProtoMessage() {} func (x *ListBucketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[60] + mi := &file_space_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3485,7 +3454,7 @@ func (x *ListBucketsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBucketsRequest.ProtoReflect.Descriptor instead. func (*ListBucketsRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{60} + return file_space_proto_rawDescGZIP(), []int{59} } type ListBucketsResponse struct { @@ -3499,7 +3468,7 @@ type ListBucketsResponse struct { func (x *ListBucketsResponse) Reset() { *x = ListBucketsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[61] + mi := &file_space_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3512,7 +3481,7 @@ func (x *ListBucketsResponse) String() string { func (*ListBucketsResponse) ProtoMessage() {} func (x *ListBucketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[61] + mi := &file_space_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3525,7 +3494,7 @@ func (x *ListBucketsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBucketsResponse.ProtoReflect.Descriptor instead. func (*ListBucketsResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{61} + return file_space_proto_rawDescGZIP(), []int{60} } func (x *ListBucketsResponse) GetBuckets() []*Bucket { @@ -3549,7 +3518,7 @@ type Invitation struct { func (x *Invitation) Reset() { *x = Invitation{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[62] + mi := &file_space_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3562,7 +3531,7 @@ func (x *Invitation) String() string { func (*Invitation) ProtoMessage() {} func (x *Invitation) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[62] + mi := &file_space_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3575,7 +3544,7 @@ func (x *Invitation) ProtoReflect() protoreflect.Message { // Deprecated: Use Invitation.ProtoReflect.Descriptor instead. func (*Invitation) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{62} + return file_space_proto_rawDescGZIP(), []int{61} } func (x *Invitation) GetInviterPublicKey() string { @@ -3619,7 +3588,7 @@ type UsageAlert struct { func (x *UsageAlert) Reset() { *x = UsageAlert{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[63] + mi := &file_space_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3632,7 +3601,7 @@ func (x *UsageAlert) String() string { func (*UsageAlert) ProtoMessage() {} func (x *UsageAlert) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[63] + mi := &file_space_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3614,7 @@ func (x *UsageAlert) ProtoReflect() protoreflect.Message { // Deprecated: Use UsageAlert.ProtoReflect.Descriptor instead. func (*UsageAlert) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{63} + return file_space_proto_rawDescGZIP(), []int{62} } func (x *UsageAlert) GetUsed() int64 { @@ -3680,7 +3649,7 @@ type InvitationAccept struct { func (x *InvitationAccept) Reset() { *x = InvitationAccept{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[64] + mi := &file_space_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3693,7 +3662,7 @@ func (x *InvitationAccept) String() string { func (*InvitationAccept) ProtoMessage() {} func (x *InvitationAccept) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[64] + mi := &file_space_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3706,7 +3675,7 @@ func (x *InvitationAccept) ProtoReflect() protoreflect.Message { // Deprecated: Use InvitationAccept.ProtoReflect.Descriptor instead. func (*InvitationAccept) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{64} + return file_space_proto_rawDescGZIP(), []int{63} } func (x *InvitationAccept) GetInvitationID() string { @@ -3737,7 +3706,7 @@ type Notification struct { func (x *Notification) Reset() { *x = Notification{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[65] + mi := &file_space_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3750,7 +3719,7 @@ func (x *Notification) String() string { func (*Notification) ProtoMessage() {} func (x *Notification) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[65] + mi := &file_space_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3763,7 +3732,7 @@ func (x *Notification) ProtoReflect() protoreflect.Message { // Deprecated: Use Notification.ProtoReflect.Descriptor instead. func (*Notification) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{65} + return file_space_proto_rawDescGZIP(), []int{64} } func (x *Notification) GetID() string { @@ -3870,7 +3839,7 @@ type HandleFilesInvitationRequest struct { func (x *HandleFilesInvitationRequest) Reset() { *x = HandleFilesInvitationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[66] + mi := &file_space_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3883,7 +3852,7 @@ func (x *HandleFilesInvitationRequest) String() string { func (*HandleFilesInvitationRequest) ProtoMessage() {} func (x *HandleFilesInvitationRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[66] + mi := &file_space_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3896,7 +3865,7 @@ func (x *HandleFilesInvitationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleFilesInvitationRequest.ProtoReflect.Descriptor instead. func (*HandleFilesInvitationRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{66} + return file_space_proto_rawDescGZIP(), []int{65} } func (x *HandleFilesInvitationRequest) GetInvitationID() string { @@ -3922,7 +3891,7 @@ type HandleFilesInvitationResponse struct { func (x *HandleFilesInvitationResponse) Reset() { *x = HandleFilesInvitationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[67] + mi := &file_space_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3935,7 +3904,7 @@ func (x *HandleFilesInvitationResponse) String() string { func (*HandleFilesInvitationResponse) ProtoMessage() {} func (x *HandleFilesInvitationResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[67] + mi := &file_space_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3948,7 +3917,7 @@ func (x *HandleFilesInvitationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HandleFilesInvitationResponse.ProtoReflect.Descriptor instead. func (*HandleFilesInvitationResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{67} + return file_space_proto_rawDescGZIP(), []int{66} } type NotificationEventResponse struct { @@ -3962,7 +3931,7 @@ type NotificationEventResponse struct { func (x *NotificationEventResponse) Reset() { *x = NotificationEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[68] + mi := &file_space_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3975,7 +3944,7 @@ func (x *NotificationEventResponse) String() string { func (*NotificationEventResponse) ProtoMessage() {} func (x *NotificationEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[68] + mi := &file_space_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3988,7 +3957,7 @@ func (x *NotificationEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotificationEventResponse.ProtoReflect.Descriptor instead. func (*NotificationEventResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{68} + return file_space_proto_rawDescGZIP(), []int{67} } func (x *NotificationEventResponse) GetNotification() *Notification { @@ -4010,7 +3979,7 @@ type GetNotificationsRequest struct { func (x *GetNotificationsRequest) Reset() { *x = GetNotificationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[69] + mi := &file_space_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4023,7 +3992,7 @@ func (x *GetNotificationsRequest) String() string { func (*GetNotificationsRequest) ProtoMessage() {} func (x *GetNotificationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[69] + mi := &file_space_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4036,7 +4005,7 @@ func (x *GetNotificationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNotificationsRequest.ProtoReflect.Descriptor instead. func (*GetNotificationsRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{69} + return file_space_proto_rawDescGZIP(), []int{68} } func (x *GetNotificationsRequest) GetSeek() string { @@ -4066,7 +4035,7 @@ type GetNotificationsResponse struct { func (x *GetNotificationsResponse) Reset() { *x = GetNotificationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[70] + mi := &file_space_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4079,7 +4048,7 @@ func (x *GetNotificationsResponse) String() string { func (*GetNotificationsResponse) ProtoMessage() {} func (x *GetNotificationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[70] + mi := &file_space_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4092,7 +4061,7 @@ func (x *GetNotificationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNotificationsResponse.ProtoReflect.Descriptor instead. func (*GetNotificationsResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{70} + return file_space_proto_rawDescGZIP(), []int{69} } func (x *GetNotificationsResponse) GetNotifications() []*Notification { @@ -4127,7 +4096,7 @@ type ReadNotificationRequest struct { func (x *ReadNotificationRequest) Reset() { *x = ReadNotificationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[71] + mi := &file_space_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4140,7 +4109,7 @@ func (x *ReadNotificationRequest) String() string { func (*ReadNotificationRequest) ProtoMessage() {} func (x *ReadNotificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[71] + mi := &file_space_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4153,7 +4122,7 @@ func (x *ReadNotificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadNotificationRequest.ProtoReflect.Descriptor instead. func (*ReadNotificationRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{71} + return file_space_proto_rawDescGZIP(), []int{70} } func (x *ReadNotificationRequest) GetID() string { @@ -4172,7 +4141,7 @@ type ReadNotificationResponse struct { func (x *ReadNotificationResponse) Reset() { *x = ReadNotificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[72] + mi := &file_space_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4185,7 +4154,7 @@ func (x *ReadNotificationResponse) String() string { func (*ReadNotificationResponse) ProtoMessage() {} func (x *ReadNotificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[72] + mi := &file_space_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4198,7 +4167,7 @@ func (x *ReadNotificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadNotificationResponse.ProtoReflect.Descriptor instead. func (*ReadNotificationResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{72} + return file_space_proto_rawDescGZIP(), []int{71} } type GetPublicKeyRequest struct { @@ -4210,7 +4179,7 @@ type GetPublicKeyRequest struct { func (x *GetPublicKeyRequest) Reset() { *x = GetPublicKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[73] + mi := &file_space_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4223,7 +4192,7 @@ func (x *GetPublicKeyRequest) String() string { func (*GetPublicKeyRequest) ProtoMessage() {} func (x *GetPublicKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[73] + mi := &file_space_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4236,7 +4205,7 @@ func (x *GetPublicKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPublicKeyRequest.ProtoReflect.Descriptor instead. func (*GetPublicKeyRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{73} + return file_space_proto_rawDescGZIP(), []int{72} } type GetPublicKeyResponse struct { @@ -4251,7 +4220,7 @@ type GetPublicKeyResponse struct { func (x *GetPublicKeyResponse) Reset() { *x = GetPublicKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[74] + mi := &file_space_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4264,7 +4233,7 @@ func (x *GetPublicKeyResponse) String() string { func (*GetPublicKeyResponse) ProtoMessage() {} func (x *GetPublicKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[74] + mi := &file_space_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4277,7 +4246,7 @@ func (x *GetPublicKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPublicKeyResponse.ProtoReflect.Descriptor instead. func (*GetPublicKeyResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{74} + return file_space_proto_rawDescGZIP(), []int{73} } func (x *GetPublicKeyResponse) GetPublicKey() string { @@ -4298,7 +4267,7 @@ type RecoverKeysByLocalBackupRequest struct { func (x *RecoverKeysByLocalBackupRequest) Reset() { *x = RecoverKeysByLocalBackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[75] + mi := &file_space_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4311,7 +4280,7 @@ func (x *RecoverKeysByLocalBackupRequest) String() string { func (*RecoverKeysByLocalBackupRequest) ProtoMessage() {} func (x *RecoverKeysByLocalBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[75] + mi := &file_space_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4324,7 +4293,7 @@ func (x *RecoverKeysByLocalBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverKeysByLocalBackupRequest.ProtoReflect.Descriptor instead. func (*RecoverKeysByLocalBackupRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{75} + return file_space_proto_rawDescGZIP(), []int{74} } func (x *RecoverKeysByLocalBackupRequest) GetPathToKeyBackup() string { @@ -4343,7 +4312,7 @@ type RecoverKeysByLocalBackupResponse struct { func (x *RecoverKeysByLocalBackupResponse) Reset() { *x = RecoverKeysByLocalBackupResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[76] + mi := &file_space_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4356,7 +4325,7 @@ func (x *RecoverKeysByLocalBackupResponse) String() string { func (*RecoverKeysByLocalBackupResponse) ProtoMessage() {} func (x *RecoverKeysByLocalBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[76] + mi := &file_space_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4369,7 +4338,7 @@ func (x *RecoverKeysByLocalBackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RecoverKeysByLocalBackupResponse.ProtoReflect.Descriptor instead. func (*RecoverKeysByLocalBackupResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{76} + return file_space_proto_rawDescGZIP(), []int{75} } type CreateLocalKeysBackupRequest struct { @@ -4384,7 +4353,7 @@ type CreateLocalKeysBackupRequest struct { func (x *CreateLocalKeysBackupRequest) Reset() { *x = CreateLocalKeysBackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[77] + mi := &file_space_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4397,7 +4366,7 @@ func (x *CreateLocalKeysBackupRequest) String() string { func (*CreateLocalKeysBackupRequest) ProtoMessage() {} func (x *CreateLocalKeysBackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[77] + mi := &file_space_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4410,7 +4379,7 @@ func (x *CreateLocalKeysBackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateLocalKeysBackupRequest.ProtoReflect.Descriptor instead. func (*CreateLocalKeysBackupRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{77} + return file_space_proto_rawDescGZIP(), []int{76} } func (x *CreateLocalKeysBackupRequest) GetPathToKeyBackup() string { @@ -4429,7 +4398,7 @@ type CreateLocalKeysBackupResponse struct { func (x *CreateLocalKeysBackupResponse) Reset() { *x = CreateLocalKeysBackupResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[78] + mi := &file_space_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4442,7 +4411,7 @@ func (x *CreateLocalKeysBackupResponse) String() string { func (*CreateLocalKeysBackupResponse) ProtoMessage() {} func (x *CreateLocalKeysBackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[78] + mi := &file_space_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4455,7 +4424,7 @@ func (x *CreateLocalKeysBackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateLocalKeysBackupResponse.ProtoReflect.Descriptor instead. func (*CreateLocalKeysBackupResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{78} + return file_space_proto_rawDescGZIP(), []int{77} } type DeleteAccountRequest struct { @@ -4467,7 +4436,7 @@ type DeleteAccountRequest struct { func (x *DeleteAccountRequest) Reset() { *x = DeleteAccountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[79] + mi := &file_space_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4480,7 +4449,7 @@ func (x *DeleteAccountRequest) String() string { func (*DeleteAccountRequest) ProtoMessage() {} func (x *DeleteAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[79] + mi := &file_space_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4493,7 +4462,7 @@ func (x *DeleteAccountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccountRequest.ProtoReflect.Descriptor instead. func (*DeleteAccountRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{79} + return file_space_proto_rawDescGZIP(), []int{78} } type DeleteAccountResponse struct { @@ -4505,7 +4474,7 @@ type DeleteAccountResponse struct { func (x *DeleteAccountResponse) Reset() { *x = DeleteAccountResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[80] + mi := &file_space_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4518,7 +4487,7 @@ func (x *DeleteAccountResponse) String() string { func (*DeleteAccountResponse) ProtoMessage() {} func (x *DeleteAccountResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[80] + mi := &file_space_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4531,7 +4500,7 @@ func (x *DeleteAccountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccountResponse.ProtoReflect.Descriptor instead. func (*DeleteAccountResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{80} + return file_space_proto_rawDescGZIP(), []int{79} } type DeleteKeyPairRequest struct { @@ -4543,7 +4512,7 @@ type DeleteKeyPairRequest struct { func (x *DeleteKeyPairRequest) Reset() { *x = DeleteKeyPairRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[81] + mi := &file_space_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4556,7 +4525,7 @@ func (x *DeleteKeyPairRequest) String() string { func (*DeleteKeyPairRequest) ProtoMessage() {} func (x *DeleteKeyPairRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[81] + mi := &file_space_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4569,7 +4538,7 @@ func (x *DeleteKeyPairRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteKeyPairRequest.ProtoReflect.Descriptor instead. func (*DeleteKeyPairRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{81} + return file_space_proto_rawDescGZIP(), []int{80} } type DeleteKeyPairResponse struct { @@ -4581,7 +4550,7 @@ type DeleteKeyPairResponse struct { func (x *DeleteKeyPairResponse) Reset() { *x = DeleteKeyPairResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[82] + mi := &file_space_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4594,7 +4563,7 @@ func (x *DeleteKeyPairResponse) String() string { func (*DeleteKeyPairResponse) ProtoMessage() {} func (x *DeleteKeyPairResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[82] + mi := &file_space_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4607,7 +4576,7 @@ func (x *DeleteKeyPairResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteKeyPairResponse.ProtoReflect.Descriptor instead. func (*DeleteKeyPairResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{82} + return file_space_proto_rawDescGZIP(), []int{81} } type GetAPISessionTokensRequest struct { @@ -4619,7 +4588,7 @@ type GetAPISessionTokensRequest struct { func (x *GetAPISessionTokensRequest) Reset() { *x = GetAPISessionTokensRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[83] + mi := &file_space_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4632,7 +4601,7 @@ func (x *GetAPISessionTokensRequest) String() string { func (*GetAPISessionTokensRequest) ProtoMessage() {} func (x *GetAPISessionTokensRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[83] + mi := &file_space_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4645,7 +4614,7 @@ func (x *GetAPISessionTokensRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAPISessionTokensRequest.ProtoReflect.Descriptor instead. func (*GetAPISessionTokensRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{83} + return file_space_proto_rawDescGZIP(), []int{82} } type GetAPISessionTokensResponse struct { @@ -4660,7 +4629,7 @@ type GetAPISessionTokensResponse struct { func (x *GetAPISessionTokensResponse) Reset() { *x = GetAPISessionTokensResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[84] + mi := &file_space_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4673,7 +4642,7 @@ func (x *GetAPISessionTokensResponse) String() string { func (*GetAPISessionTokensResponse) ProtoMessage() {} func (x *GetAPISessionTokensResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[84] + mi := &file_space_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4686,7 +4655,7 @@ func (x *GetAPISessionTokensResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAPISessionTokensResponse.ProtoReflect.Descriptor instead. func (*GetAPISessionTokensResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{84} + return file_space_proto_rawDescGZIP(), []int{83} } func (x *GetAPISessionTokensResponse) GetHubToken() string { @@ -4712,7 +4681,7 @@ type GetRecentlySharedWithRequest struct { func (x *GetRecentlySharedWithRequest) Reset() { *x = GetRecentlySharedWithRequest{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[85] + mi := &file_space_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4725,7 +4694,7 @@ func (x *GetRecentlySharedWithRequest) String() string { func (*GetRecentlySharedWithRequest) ProtoMessage() {} func (x *GetRecentlySharedWithRequest) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[85] + mi := &file_space_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4738,7 +4707,7 @@ func (x *GetRecentlySharedWithRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRecentlySharedWithRequest.ProtoReflect.Descriptor instead. func (*GetRecentlySharedWithRequest) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{85} + return file_space_proto_rawDescGZIP(), []int{84} } type GetRecentlySharedWithResponse struct { @@ -4752,7 +4721,7 @@ type GetRecentlySharedWithResponse struct { func (x *GetRecentlySharedWithResponse) Reset() { *x = GetRecentlySharedWithResponse{} if protoimpl.UnsafeEnabled { - mi := &file_space_proto_msgTypes[86] + mi := &file_space_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4765,7 +4734,7 @@ func (x *GetRecentlySharedWithResponse) String() string { func (*GetRecentlySharedWithResponse) ProtoMessage() {} func (x *GetRecentlySharedWithResponse) ProtoReflect() protoreflect.Message { - mi := &file_space_proto_msgTypes[86] + mi := &file_space_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4778,7 +4747,7 @@ func (x *GetRecentlySharedWithResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRecentlySharedWithResponse.ProtoReflect.Descriptor instead. func (*GetRecentlySharedWithResponse) Descriptor() ([]byte, []int) { - return file_space_proto_rawDescGZIP(), []int{86} + return file_space_proto_rawDescGZIP(), []int{85} } func (x *GetRecentlySharedWithResponse) GetMembers() []*FileMember { @@ -4974,594 +4943,586 @@ var file_space_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x22, 0x23, 0x0a, 0x21, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x2f, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x22, 0x46, 0x0a, 0x15, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2e, 0x0a, 0x14, 0x54, 0x65, 0x78, 0x74, - 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x51, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x6e, - 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x10, 0x4f, - 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x69, 0x0a, 0x15, 0x4f, - 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x69, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6b, 0x0a, 0x0f, - 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x0d, 0x41, 0x64, 0x64, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0xd0, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, - 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x2f, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, 0x22, 0x2e, 0x0a, + 0x14, 0x54, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x51, 0x0a, + 0x0f, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, + 0x22, 0x2e, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x69, 0x0a, 0x15, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, + 0x65, 0x43, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, + 0x43, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x16, 0x4f, + 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x6b, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x65, + 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xd0, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x1d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, + 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, + 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, + 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x1e, 0x52, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, + 0x22, 0x21, 0x0a, 0x1f, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, + 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x19, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, + 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, + 0x72, 0x61, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, + 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3c, 0x0a, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x2c, 0x0a, 0x12, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x48, + 0x0a, 0x13, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x5e, 0x0a, 0x11, 0x4a, 0x6f, 0x69, 0x6e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, + 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x12, 0x4a, 0x6f, 0x69, 0x6e, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x66, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, + 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x4a, + 0x0a, 0x08, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, - 0x0a, 0x1d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, - 0x61, 0x73, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, - 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x1e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, - 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, - 0x0a, 0x19, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, - 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x22, - 0x1c, 0x0a, 0x1a, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x0a, - 0x0a, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x2c, 0x0a, 0x12, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x48, 0x0a, 0x13, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, - 0x6e, 0x66, 0x6f, 0x22, 0x5e, 0x0a, 0x11, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0a, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x12, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x66, 0x0a, 0x1d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, - 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, - 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x4a, 0x0a, 0x08, 0x46, 0x75, 0x6c, - 0x6c, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x62, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x62, 0x49, 0x64, 0x22, - 0x4e, 0x0a, 0x1e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x69, 0x64, 0x22, - 0x33, 0x0a, 0x11, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x72, 0x69, - 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, - 0x72, 0x69, 0x76, 0x65, 0x22, 0x3f, 0x0a, 0x11, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x75, 0x73, - 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x66, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x0a, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x69, - 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x52, - 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x50, 0x0a, 0x0a, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x10, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xfb, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x12, 0x3d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x61, - 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x10, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x2b, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x64, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x41, - 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x5a, 0x0a, 0x1c, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x22, 0x1f, - 0x0a, 0x1d, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x54, 0x0a, 0x19, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x73, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, - 0x41, 0x74, 0x22, 0x29, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x22, 0x1a, 0x0a, - 0x18, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x34, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x4b, 0x0a, 0x1f, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x61, 0x74, - 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x22, 0x22, 0x0a, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, - 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, - 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x22, 0x1f, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x75, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x75, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x24, 0x0a, - 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, - 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, - 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x2a, 0xea, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, - 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x42, 0x41, - 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, - 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x49, 0x4e, - 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x45, - 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x41, - 0x44, 0x59, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x41, - 0x44, 0x44, 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x4f, - 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x09, 0x2a, 0x55, - 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, - 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x41, 0x47, 0x45, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, - 0x50, 0x4c, 0x59, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, - 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, - 0x10, 0x02, 0x32, 0xca, 0x25, 0x0a, 0x08, 0x53, 0x70, 0x61, 0x63, 0x65, 0x41, 0x70, 0x69, 0x12, - 0x6d, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x63, - 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, - 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x1f, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, - 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, - 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x9b, - 0x01, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, - 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x27, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, - 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, - 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1b, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, - 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, - 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x57, 0x69, 0x74, 0x68, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, - 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x61, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x5f, - 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, - 0x6f, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 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, 0x1c, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x69, 0x6e, 0x66, 0x6f, 0x30, 0x01, - 0x12, 0x68, 0x0a, 0x0c, 0x54, 0x78, 0x6c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x20, 0x0a, 0x1e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x01, 0x0a, + 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, + 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, + 0x61, 0x74, 0x68, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x64, 0x62, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x1e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, + 0x6c, 0x65, 0x43, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, + 0x65, 0x43, 0x69, 0x64, 0x22, 0x33, 0x0a, 0x11, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, + 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x22, 0x3f, 0x0a, 0x11, 0x46, 0x75, 0x73, + 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, + 0x0a, 0x10, 0x66, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x66, 0x75, 0x73, 0x65, 0x44, 0x72, + 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x3e, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, + 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6c, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x52, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, + 0x50, 0x0a, 0x0a, 0x55, 0x73, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x36, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xfb, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x41, 0x6c, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x48, 0x00, + 0x52, 0x0a, 0x75, 0x73, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x45, 0x0a, 0x10, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x48, + 0x00, 0x52, 0x10, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x61, 0x64, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x72, 0x65, 0x61, 0x64, 0x41, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5a, 0x0a, 0x1c, 0x48, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x19, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x17, 0x47, 0x65, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, + 0x95, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, + 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, + 0x65, 0x65, 0x6e, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x61, 0x73, + 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x22, 0x29, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x49, 0x44, 0x22, 0x1a, 0x0a, 0x18, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x4b, 0x0a, 0x1f, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, + 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, + 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0x22, 0x0a, 0x20, 0x52, 0x65, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x0a, 0x1c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, + 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4b, 0x65, 0x79, + 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x22, 0x1f, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, + 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x50, + 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x75, 0x62, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x75, 0x62, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2a, 0xea, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x41, 0x44, + 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x44, + 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x4e, 0x54, 0x52, + 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x45, + 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x5f, 0x50, + 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x54, + 0x52, 0x59, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, + 0x04, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, + 0x52, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, + 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4f, 0x4c, + 0x44, 0x45, 0x52, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x46, + 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, + 0x12, 0x0a, 0x0e, 0x46, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x09, 0x2a, 0x55, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x41, 0x47, 0x45, 0x41, 0x4c, 0x45, + 0x52, 0x54, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x59, 0x10, 0x03, 0x2a, 0x3b, 0x0a, 0x10, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, + 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4a, + 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0xd9, 0x24, 0x0a, 0x08, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x41, 0x70, 0x69, 0x12, 0x6d, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, + 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, + 0x61, 0x6c, 0x6c, 0x12, 0x63, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, + 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, + 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x75, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, + 0x63, 0x12, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x64, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, + 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, + 0x6e, 0x69, 0x63, 0x12, 0x9b, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, + 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, + 0x63, 0x12, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, + 0x6e, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, + 0x72, 0x56, 0x69, 0x61, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, + 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x3a, 0x01, + 0x2a, 0x12, 0x6a, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, + 0x69, 0x72, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x50, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, + 0x69, 0x72, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, + 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, + 0x72, 0x57, 0x69, 0x74, 0x68, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x69, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, + 0x12, 0x61, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x54, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x74, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x08, 0x4f, 0x70, - 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, - 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x3a, - 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x24, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x3a, - 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, - 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, - 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, + 0x6c, 0x65, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x0c, 0x54, 0x78, 0x6c, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 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, 0x1b, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x65, 0x30, 0x01, 0x12, 0x56, + 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, + 0x6b, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, + 0x6c, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x4c, + 0x69, 0x6e, 0x6b, 0x3a, 0x01, 0x2a, 0x12, 0x7f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, - 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, - 0x68, 0x4d, 0x65, 0x12, 0x6b, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x12, 0x53, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x63, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x0f, 0x54, 0x6f, - 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x66, - 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x46, 0x75, 0x73, - 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x73, - 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x75, 0x73, 0x65, - 0x12, 0x5f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, - 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x24, 0x2e, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, - 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, - 0x17, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, - 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, + 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, + 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x12, 0x6b, 0x0a, 0x0e, 0x4f, 0x70, 0x65, 0x6e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, + 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x12, 0x53, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x63, 0x0a, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5a, + 0x0a, 0x0f, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x12, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, + 0x46, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, + 0x76, 0x31, 0x2f, 0x66, 0x75, 0x73, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x58, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x46, 0x75, 0x73, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, + 0x66, 0x75, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x88, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, + 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, - 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, - 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x7a, 0x0a, 0x12, 0x54, - 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, - 0x65, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, - 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, - 0x74, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, - 0x12, 0x90, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, - 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x26, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, - 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x3a, 0x01, 0x2a, - 0x12, 0x67, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x18, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x31, - 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, 0x16, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, 0x15, 0x48, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, 0x15, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 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, 0x20, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x12, 0x6e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7b, 0x0a, 0x10, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x01, - 0x2a, 0x12, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x70, 0x0a, 0x12, 0x54, - 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x67, 0x67, - 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, - 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x7b, 0x0a, - 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x2f, - 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, 0x2a, + 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, + 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, + 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, + 0x61, 0x73, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, + 0x7a, 0x0a, 0x12, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, + 0x68, 0x72, 0x61, 0x73, 0x65, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x65, + 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x15, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4b, 0x65, + 0x79, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x12, 0x26, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x42, 0x79, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x73, 0x2f, 0x72, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x12, 0x6b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0a, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, + 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, + 0x0a, 0x16, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x56, 0x69, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x56, 0x69, 0x61, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x91, 0x01, 0x0a, + 0x15, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0x7b, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 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, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x59, 0x0a, + 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, + 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x6e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7b, 0x0a, 0x10, 0x52, 0x65, 0x61, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x65, + 0x61, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, 0x12, + 0x70, 0x0a, 0x12, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x3a, 0x01, + 0x2a, 0x12, 0x7b, 0x0a, 0x13, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x5a, + 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x31, - 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x7a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x21, 0x2e, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, 0x53, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x12, 0x7e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, - 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x12, 0x23, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, - 0x74, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, - 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, - 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x3a, 0x01, 0x2a, 0x12, - 0x5e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x19, - 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x42, - 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, + 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x12, 0x7a, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x50, 0x49, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x50, 0x49, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x7e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, + 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x12, + 0x23, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x6e, + 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, + 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x57, 0x69, + 0x74, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, + 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, + 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, + 0x41, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, + 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -5577,7 +5538,7 @@ func file_space_proto_rawDescGZIP() []byte { } var file_space_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_space_proto_msgTypes = make([]protoimpl.MessageInfo, 87) +var file_space_proto_msgTypes = make([]protoimpl.MessageInfo, 86) var file_space_proto_goTypes = []interface{}{ (EventType)(0), // 0: space.EventType (NotificationType)(0), // 1: space.NotificationType @@ -5613,63 +5574,62 @@ var file_space_proto_goTypes = []interface{}{ (*RestoreKeyPairViaMnemonicRequest)(nil), // 31: space.RestoreKeyPairViaMnemonicRequest (*RestoreKeyPairViaMnemonicResponse)(nil), // 32: space.RestoreKeyPairViaMnemonicResponse (*FileEventResponse)(nil), // 33: space.FileEventResponse - (*FileInfoEventResponse)(nil), // 34: space.FileInfoEventResponse - (*TextileEventResponse)(nil), // 35: space.TextileEventResponse - (*OpenFileRequest)(nil), // 36: space.OpenFileRequest - (*OpenFileResponse)(nil), // 37: space.OpenFileResponse - (*OpenPublicFileRequest)(nil), // 38: space.OpenPublicFileRequest - (*OpenPublicFileResponse)(nil), // 39: space.OpenPublicFileResponse - (*AddItemsRequest)(nil), // 40: space.AddItemsRequest - (*AddItemResult)(nil), // 41: space.AddItemResult - (*AddItemsResponse)(nil), // 42: space.AddItemsResponse - (*CreateFolderRequest)(nil), // 43: space.CreateFolderRequest - (*CreateFolderResponse)(nil), // 44: space.CreateFolderResponse - (*BackupKeysByPassphraseRequest)(nil), // 45: space.BackupKeysByPassphraseRequest - (*BackupKeysByPassphraseResponse)(nil), // 46: space.BackupKeysByPassphraseResponse - (*RecoverKeysByPassphraseRequest)(nil), // 47: space.RecoverKeysByPassphraseRequest - (*RecoverKeysByPassphraseResponse)(nil), // 48: space.RecoverKeysByPassphraseResponse - (*TestKeysPassphraseRequest)(nil), // 49: space.TestKeysPassphraseRequest - (*TestKeysPassphraseResponse)(nil), // 50: space.TestKeysPassphraseResponse - (*ThreadInfo)(nil), // 51: space.ThreadInfo - (*ShareBucketRequest)(nil), // 52: space.ShareBucketRequest - (*ShareBucketResponse)(nil), // 53: space.ShareBucketResponse - (*JoinBucketRequest)(nil), // 54: space.JoinBucketRequest - (*JoinBucketResponse)(nil), // 55: space.JoinBucketResponse - (*ShareFilesViaPublicKeyRequest)(nil), // 56: space.ShareFilesViaPublicKeyRequest - (*FullPath)(nil), // 57: space.FullPath - (*ShareFilesViaPublicKeyResponse)(nil), // 58: space.ShareFilesViaPublicKeyResponse - (*GeneratePublicFileLinkRequest)(nil), // 59: space.GeneratePublicFileLinkRequest - (*GeneratePublicFileLinkResponse)(nil), // 60: space.GeneratePublicFileLinkResponse - (*ToggleFuseRequest)(nil), // 61: space.ToggleFuseRequest - (*FuseDriveResponse)(nil), // 62: space.FuseDriveResponse - (*ListBucketsRequest)(nil), // 63: space.ListBucketsRequest - (*ListBucketsResponse)(nil), // 64: space.ListBucketsResponse - (*Invitation)(nil), // 65: space.Invitation - (*UsageAlert)(nil), // 66: space.UsageAlert - (*InvitationAccept)(nil), // 67: space.InvitationAccept - (*Notification)(nil), // 68: space.Notification - (*HandleFilesInvitationRequest)(nil), // 69: space.HandleFilesInvitationRequest - (*HandleFilesInvitationResponse)(nil), // 70: space.HandleFilesInvitationResponse - (*NotificationEventResponse)(nil), // 71: space.NotificationEventResponse - (*GetNotificationsRequest)(nil), // 72: space.GetNotificationsRequest - (*GetNotificationsResponse)(nil), // 73: space.GetNotificationsResponse - (*ReadNotificationRequest)(nil), // 74: space.ReadNotificationRequest - (*ReadNotificationResponse)(nil), // 75: space.ReadNotificationResponse - (*GetPublicKeyRequest)(nil), // 76: space.GetPublicKeyRequest - (*GetPublicKeyResponse)(nil), // 77: space.GetPublicKeyResponse - (*RecoverKeysByLocalBackupRequest)(nil), // 78: space.RecoverKeysByLocalBackupRequest - (*RecoverKeysByLocalBackupResponse)(nil), // 79: space.RecoverKeysByLocalBackupResponse - (*CreateLocalKeysBackupRequest)(nil), // 80: space.CreateLocalKeysBackupRequest - (*CreateLocalKeysBackupResponse)(nil), // 81: space.CreateLocalKeysBackupResponse - (*DeleteAccountRequest)(nil), // 82: space.DeleteAccountRequest - (*DeleteAccountResponse)(nil), // 83: space.DeleteAccountResponse - (*DeleteKeyPairRequest)(nil), // 84: space.DeleteKeyPairRequest - (*DeleteKeyPairResponse)(nil), // 85: space.DeleteKeyPairResponse - (*GetAPISessionTokensRequest)(nil), // 86: space.GetAPISessionTokensRequest - (*GetAPISessionTokensResponse)(nil), // 87: space.GetAPISessionTokensResponse - (*GetRecentlySharedWithRequest)(nil), // 88: space.GetRecentlySharedWithRequest - (*GetRecentlySharedWithResponse)(nil), // 89: space.GetRecentlySharedWithResponse - (*empty.Empty)(nil), // 90: google.protobuf.Empty + (*TextileEventResponse)(nil), // 34: space.TextileEventResponse + (*OpenFileRequest)(nil), // 35: space.OpenFileRequest + (*OpenFileResponse)(nil), // 36: space.OpenFileResponse + (*OpenPublicFileRequest)(nil), // 37: space.OpenPublicFileRequest + (*OpenPublicFileResponse)(nil), // 38: space.OpenPublicFileResponse + (*AddItemsRequest)(nil), // 39: space.AddItemsRequest + (*AddItemResult)(nil), // 40: space.AddItemResult + (*AddItemsResponse)(nil), // 41: space.AddItemsResponse + (*CreateFolderRequest)(nil), // 42: space.CreateFolderRequest + (*CreateFolderResponse)(nil), // 43: space.CreateFolderResponse + (*BackupKeysByPassphraseRequest)(nil), // 44: space.BackupKeysByPassphraseRequest + (*BackupKeysByPassphraseResponse)(nil), // 45: space.BackupKeysByPassphraseResponse + (*RecoverKeysByPassphraseRequest)(nil), // 46: space.RecoverKeysByPassphraseRequest + (*RecoverKeysByPassphraseResponse)(nil), // 47: space.RecoverKeysByPassphraseResponse + (*TestKeysPassphraseRequest)(nil), // 48: space.TestKeysPassphraseRequest + (*TestKeysPassphraseResponse)(nil), // 49: space.TestKeysPassphraseResponse + (*ThreadInfo)(nil), // 50: space.ThreadInfo + (*ShareBucketRequest)(nil), // 51: space.ShareBucketRequest + (*ShareBucketResponse)(nil), // 52: space.ShareBucketResponse + (*JoinBucketRequest)(nil), // 53: space.JoinBucketRequest + (*JoinBucketResponse)(nil), // 54: space.JoinBucketResponse + (*ShareFilesViaPublicKeyRequest)(nil), // 55: space.ShareFilesViaPublicKeyRequest + (*FullPath)(nil), // 56: space.FullPath + (*ShareFilesViaPublicKeyResponse)(nil), // 57: space.ShareFilesViaPublicKeyResponse + (*GeneratePublicFileLinkRequest)(nil), // 58: space.GeneratePublicFileLinkRequest + (*GeneratePublicFileLinkResponse)(nil), // 59: space.GeneratePublicFileLinkResponse + (*ToggleFuseRequest)(nil), // 60: space.ToggleFuseRequest + (*FuseDriveResponse)(nil), // 61: space.FuseDriveResponse + (*ListBucketsRequest)(nil), // 62: space.ListBucketsRequest + (*ListBucketsResponse)(nil), // 63: space.ListBucketsResponse + (*Invitation)(nil), // 64: space.Invitation + (*UsageAlert)(nil), // 65: space.UsageAlert + (*InvitationAccept)(nil), // 66: space.InvitationAccept + (*Notification)(nil), // 67: space.Notification + (*HandleFilesInvitationRequest)(nil), // 68: space.HandleFilesInvitationRequest + (*HandleFilesInvitationResponse)(nil), // 69: space.HandleFilesInvitationResponse + (*NotificationEventResponse)(nil), // 70: space.NotificationEventResponse + (*GetNotificationsRequest)(nil), // 71: space.GetNotificationsRequest + (*GetNotificationsResponse)(nil), // 72: space.GetNotificationsResponse + (*ReadNotificationRequest)(nil), // 73: space.ReadNotificationRequest + (*ReadNotificationResponse)(nil), // 74: space.ReadNotificationResponse + (*GetPublicKeyRequest)(nil), // 75: space.GetPublicKeyRequest + (*GetPublicKeyResponse)(nil), // 76: space.GetPublicKeyResponse + (*RecoverKeysByLocalBackupRequest)(nil), // 77: space.RecoverKeysByLocalBackupRequest + (*RecoverKeysByLocalBackupResponse)(nil), // 78: space.RecoverKeysByLocalBackupResponse + (*CreateLocalKeysBackupRequest)(nil), // 79: space.CreateLocalKeysBackupRequest + (*CreateLocalKeysBackupResponse)(nil), // 80: space.CreateLocalKeysBackupResponse + (*DeleteAccountRequest)(nil), // 81: space.DeleteAccountRequest + (*DeleteAccountResponse)(nil), // 82: space.DeleteAccountResponse + (*DeleteKeyPairRequest)(nil), // 83: space.DeleteKeyPairRequest + (*DeleteKeyPairResponse)(nil), // 84: space.DeleteKeyPairResponse + (*GetAPISessionTokensRequest)(nil), // 85: space.GetAPISessionTokensRequest + (*GetAPISessionTokensResponse)(nil), // 86: space.GetAPISessionTokensResponse + (*GetRecentlySharedWithRequest)(nil), // 87: space.GetRecentlySharedWithRequest + (*GetRecentlySharedWithResponse)(nil), // 88: space.GetRecentlySharedWithResponse + (*empty.Empty)(nil), // 89: google.protobuf.Empty } var file_space_proto_depIdxs = []int32{ 5, // 0: space.SearchFilesResponse.entries:type_name -> space.SearchFilesDirectoryEntry @@ -5683,108 +5643,105 @@ var file_space_proto_depIdxs = []int32{ 25, // 8: space.CreateBucketResponse.bucket:type_name -> space.Bucket 0, // 9: space.FileEventResponse.type:type_name -> space.EventType 18, // 10: space.FileEventResponse.entry:type_name -> space.ListDirectoryEntry - 18, // 11: space.FileInfoEventResponse.file:type_name -> space.ListDirectoryEntry - 41, // 12: space.AddItemsResponse.result:type_name -> space.AddItemResult - 51, // 13: space.ShareBucketResponse.threadinfo:type_name -> space.ThreadInfo - 51, // 14: space.JoinBucketRequest.threadinfo:type_name -> space.ThreadInfo - 57, // 15: space.ShareFilesViaPublicKeyRequest.paths:type_name -> space.FullPath - 25, // 16: space.ListBucketsResponse.buckets:type_name -> space.Bucket - 2, // 17: space.Invitation.status:type_name -> space.InvitationStatus - 57, // 18: space.Invitation.itemPaths:type_name -> space.FullPath - 65, // 19: space.Notification.invitationValue:type_name -> space.Invitation - 66, // 20: space.Notification.usageAlert:type_name -> space.UsageAlert - 67, // 21: space.Notification.invitationAccept:type_name -> space.InvitationAccept - 1, // 22: space.Notification.type:type_name -> space.NotificationType - 68, // 23: space.NotificationEventResponse.notification:type_name -> space.Notification - 68, // 24: space.GetNotificationsResponse.notifications:type_name -> space.Notification - 17, // 25: space.GetRecentlySharedWithResponse.members:type_name -> space.FileMember - 16, // 26: space.SpaceApi.ListDirectories:input_type -> space.ListDirectoriesRequest - 21, // 27: space.SpaceApi.ListDirectory:input_type -> space.ListDirectoryRequest - 27, // 28: space.SpaceApi.GenerateKeyPair:input_type -> space.GenerateKeyPairRequest - 29, // 29: space.SpaceApi.GetStoredMnemonic:input_type -> space.GetStoredMnemonicRequest - 31, // 30: space.SpaceApi.RestoreKeyPairViaMnemonic:input_type -> space.RestoreKeyPairViaMnemonicRequest - 84, // 31: space.SpaceApi.DeleteKeyPair:input_type -> space.DeleteKeyPairRequest - 27, // 32: space.SpaceApi.GenerateKeyPairWithForce:input_type -> space.GenerateKeyPairRequest - 76, // 33: space.SpaceApi.GetPublicKey:input_type -> space.GetPublicKeyRequest - 90, // 34: space.SpaceApi.Subscribe:input_type -> google.protobuf.Empty - 90, // 35: space.SpaceApi.FileInfoSubscribe:input_type -> google.protobuf.Empty - 90, // 36: space.SpaceApi.TxlSubscribe:input_type -> google.protobuf.Empty - 36, // 37: space.SpaceApi.OpenFile:input_type -> space.OpenFileRequest - 59, // 38: space.SpaceApi.GeneratePublicFileLink:input_type -> space.GeneratePublicFileLinkRequest - 8, // 39: space.SpaceApi.GetSharedWithMeFiles:input_type -> space.GetSharedWithMeFilesRequest - 38, // 40: space.SpaceApi.OpenPublicFile:input_type -> space.OpenPublicFileRequest - 40, // 41: space.SpaceApi.AddItems:input_type -> space.AddItemsRequest - 43, // 42: space.SpaceApi.CreateFolder:input_type -> space.CreateFolderRequest - 61, // 43: space.SpaceApi.ToggleFuseDrive:input_type -> space.ToggleFuseRequest - 90, // 44: space.SpaceApi.GetFuseDriveStatus:input_type -> google.protobuf.Empty - 23, // 45: space.SpaceApi.CreateBucket:input_type -> space.CreateBucketRequest - 45, // 46: space.SpaceApi.BackupKeysByPassphrase:input_type -> space.BackupKeysByPassphraseRequest - 47, // 47: space.SpaceApi.RecoverKeysByPassphrase:input_type -> space.RecoverKeysByPassphraseRequest - 49, // 48: space.SpaceApi.TestKeysPassphrase:input_type -> space.TestKeysPassphraseRequest - 80, // 49: space.SpaceApi.CreateLocalKeysBackup:input_type -> space.CreateLocalKeysBackupRequest - 78, // 50: space.SpaceApi.RecoverKeysByLocalBackup:input_type -> space.RecoverKeysByLocalBackupRequest - 52, // 51: space.SpaceApi.ShareBucket:input_type -> space.ShareBucketRequest - 54, // 52: space.SpaceApi.JoinBucket:input_type -> space.JoinBucketRequest - 56, // 53: space.SpaceApi.ShareFilesViaPublicKey:input_type -> space.ShareFilesViaPublicKeyRequest - 69, // 54: space.SpaceApi.HandleFilesInvitation:input_type -> space.HandleFilesInvitationRequest - 90, // 55: space.SpaceApi.NotificationSubscribe:input_type -> google.protobuf.Empty - 63, // 56: space.SpaceApi.ListBuckets:input_type -> space.ListBucketsRequest - 72, // 57: space.SpaceApi.GetNotifications:input_type -> space.GetNotificationsRequest - 74, // 58: space.SpaceApi.ReadNotification:input_type -> space.ReadNotificationRequest - 82, // 59: space.SpaceApi.DeleteAccount:input_type -> space.DeleteAccountRequest - 12, // 60: space.SpaceApi.ToggleBucketBackup:input_type -> space.ToggleBucketBackupRequest - 14, // 61: space.SpaceApi.BucketBackupRestore:input_type -> space.BucketBackupRestoreRequest - 10, // 62: space.SpaceApi.GetUsageInfo:input_type -> space.GetUsageInfoRequest - 86, // 63: space.SpaceApi.GetAPISessionTokens:input_type -> space.GetAPISessionTokensRequest - 88, // 64: space.SpaceApi.GetRecentlySharedWith:input_type -> space.GetRecentlySharedWithRequest - 6, // 65: space.SpaceApi.SetNotificationsLastSeenAt:input_type -> space.SetNotificationsLastSeenAtRequest - 3, // 66: space.SpaceApi.SearchFiles:input_type -> space.SearchFilesRequest - 20, // 67: space.SpaceApi.ListDirectories:output_type -> space.ListDirectoriesResponse - 22, // 68: space.SpaceApi.ListDirectory:output_type -> space.ListDirectoryResponse - 28, // 69: space.SpaceApi.GenerateKeyPair:output_type -> space.GenerateKeyPairResponse - 30, // 70: space.SpaceApi.GetStoredMnemonic:output_type -> space.GetStoredMnemonicResponse - 32, // 71: space.SpaceApi.RestoreKeyPairViaMnemonic:output_type -> space.RestoreKeyPairViaMnemonicResponse - 85, // 72: space.SpaceApi.DeleteKeyPair:output_type -> space.DeleteKeyPairResponse - 28, // 73: space.SpaceApi.GenerateKeyPairWithForce:output_type -> space.GenerateKeyPairResponse - 77, // 74: space.SpaceApi.GetPublicKey:output_type -> space.GetPublicKeyResponse - 33, // 75: space.SpaceApi.Subscribe:output_type -> space.FileEventResponse - 34, // 76: space.SpaceApi.FileInfoSubscribe:output_type -> space.FileInfoEventResponse - 35, // 77: space.SpaceApi.TxlSubscribe:output_type -> space.TextileEventResponse - 37, // 78: space.SpaceApi.OpenFile:output_type -> space.OpenFileResponse - 60, // 79: space.SpaceApi.GeneratePublicFileLink:output_type -> space.GeneratePublicFileLinkResponse - 9, // 80: space.SpaceApi.GetSharedWithMeFiles:output_type -> space.GetSharedWithMeFilesResponse - 39, // 81: space.SpaceApi.OpenPublicFile:output_type -> space.OpenPublicFileResponse - 42, // 82: space.SpaceApi.AddItems:output_type -> space.AddItemsResponse - 44, // 83: space.SpaceApi.CreateFolder:output_type -> space.CreateFolderResponse - 62, // 84: space.SpaceApi.ToggleFuseDrive:output_type -> space.FuseDriveResponse - 62, // 85: space.SpaceApi.GetFuseDriveStatus:output_type -> space.FuseDriveResponse - 26, // 86: space.SpaceApi.CreateBucket:output_type -> space.CreateBucketResponse - 46, // 87: space.SpaceApi.BackupKeysByPassphrase:output_type -> space.BackupKeysByPassphraseResponse - 48, // 88: space.SpaceApi.RecoverKeysByPassphrase:output_type -> space.RecoverKeysByPassphraseResponse - 50, // 89: space.SpaceApi.TestKeysPassphrase:output_type -> space.TestKeysPassphraseResponse - 81, // 90: space.SpaceApi.CreateLocalKeysBackup:output_type -> space.CreateLocalKeysBackupResponse - 79, // 91: space.SpaceApi.RecoverKeysByLocalBackup:output_type -> space.RecoverKeysByLocalBackupResponse - 53, // 92: space.SpaceApi.ShareBucket:output_type -> space.ShareBucketResponse - 55, // 93: space.SpaceApi.JoinBucket:output_type -> space.JoinBucketResponse - 58, // 94: space.SpaceApi.ShareFilesViaPublicKey:output_type -> space.ShareFilesViaPublicKeyResponse - 70, // 95: space.SpaceApi.HandleFilesInvitation:output_type -> space.HandleFilesInvitationResponse - 71, // 96: space.SpaceApi.NotificationSubscribe:output_type -> space.NotificationEventResponse - 64, // 97: space.SpaceApi.ListBuckets:output_type -> space.ListBucketsResponse - 73, // 98: space.SpaceApi.GetNotifications:output_type -> space.GetNotificationsResponse - 75, // 99: space.SpaceApi.ReadNotification:output_type -> space.ReadNotificationResponse - 83, // 100: space.SpaceApi.DeleteAccount:output_type -> space.DeleteAccountResponse - 13, // 101: space.SpaceApi.ToggleBucketBackup:output_type -> space.ToggleBucketBackupResponse - 15, // 102: space.SpaceApi.BucketBackupRestore:output_type -> space.BucketBackupRestoreResponse - 11, // 103: space.SpaceApi.GetUsageInfo:output_type -> space.GetUsageInfoResponse - 87, // 104: space.SpaceApi.GetAPISessionTokens:output_type -> space.GetAPISessionTokensResponse - 89, // 105: space.SpaceApi.GetRecentlySharedWith:output_type -> space.GetRecentlySharedWithResponse - 7, // 106: space.SpaceApi.SetNotificationsLastSeenAt:output_type -> space.SetNotificationsLastSeenAtResponse - 4, // 107: space.SpaceApi.SearchFiles:output_type -> space.SearchFilesResponse - 67, // [67:108] is the sub-list for method output_type - 26, // [26:67] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 40, // 11: space.AddItemsResponse.result:type_name -> space.AddItemResult + 50, // 12: space.ShareBucketResponse.threadinfo:type_name -> space.ThreadInfo + 50, // 13: space.JoinBucketRequest.threadinfo:type_name -> space.ThreadInfo + 56, // 14: space.ShareFilesViaPublicKeyRequest.paths:type_name -> space.FullPath + 25, // 15: space.ListBucketsResponse.buckets:type_name -> space.Bucket + 2, // 16: space.Invitation.status:type_name -> space.InvitationStatus + 56, // 17: space.Invitation.itemPaths:type_name -> space.FullPath + 64, // 18: space.Notification.invitationValue:type_name -> space.Invitation + 65, // 19: space.Notification.usageAlert:type_name -> space.UsageAlert + 66, // 20: space.Notification.invitationAccept:type_name -> space.InvitationAccept + 1, // 21: space.Notification.type:type_name -> space.NotificationType + 67, // 22: space.NotificationEventResponse.notification:type_name -> space.Notification + 67, // 23: space.GetNotificationsResponse.notifications:type_name -> space.Notification + 17, // 24: space.GetRecentlySharedWithResponse.members:type_name -> space.FileMember + 16, // 25: space.SpaceApi.ListDirectories:input_type -> space.ListDirectoriesRequest + 21, // 26: space.SpaceApi.ListDirectory:input_type -> space.ListDirectoryRequest + 27, // 27: space.SpaceApi.GenerateKeyPair:input_type -> space.GenerateKeyPairRequest + 29, // 28: space.SpaceApi.GetStoredMnemonic:input_type -> space.GetStoredMnemonicRequest + 31, // 29: space.SpaceApi.RestoreKeyPairViaMnemonic:input_type -> space.RestoreKeyPairViaMnemonicRequest + 83, // 30: space.SpaceApi.DeleteKeyPair:input_type -> space.DeleteKeyPairRequest + 27, // 31: space.SpaceApi.GenerateKeyPairWithForce:input_type -> space.GenerateKeyPairRequest + 75, // 32: space.SpaceApi.GetPublicKey:input_type -> space.GetPublicKeyRequest + 89, // 33: space.SpaceApi.Subscribe:input_type -> google.protobuf.Empty + 89, // 34: space.SpaceApi.TxlSubscribe:input_type -> google.protobuf.Empty + 35, // 35: space.SpaceApi.OpenFile:input_type -> space.OpenFileRequest + 58, // 36: space.SpaceApi.GeneratePublicFileLink:input_type -> space.GeneratePublicFileLinkRequest + 8, // 37: space.SpaceApi.GetSharedWithMeFiles:input_type -> space.GetSharedWithMeFilesRequest + 37, // 38: space.SpaceApi.OpenPublicFile:input_type -> space.OpenPublicFileRequest + 39, // 39: space.SpaceApi.AddItems:input_type -> space.AddItemsRequest + 42, // 40: space.SpaceApi.CreateFolder:input_type -> space.CreateFolderRequest + 60, // 41: space.SpaceApi.ToggleFuseDrive:input_type -> space.ToggleFuseRequest + 89, // 42: space.SpaceApi.GetFuseDriveStatus:input_type -> google.protobuf.Empty + 23, // 43: space.SpaceApi.CreateBucket:input_type -> space.CreateBucketRequest + 44, // 44: space.SpaceApi.BackupKeysByPassphrase:input_type -> space.BackupKeysByPassphraseRequest + 46, // 45: space.SpaceApi.RecoverKeysByPassphrase:input_type -> space.RecoverKeysByPassphraseRequest + 48, // 46: space.SpaceApi.TestKeysPassphrase:input_type -> space.TestKeysPassphraseRequest + 79, // 47: space.SpaceApi.CreateLocalKeysBackup:input_type -> space.CreateLocalKeysBackupRequest + 77, // 48: space.SpaceApi.RecoverKeysByLocalBackup:input_type -> space.RecoverKeysByLocalBackupRequest + 51, // 49: space.SpaceApi.ShareBucket:input_type -> space.ShareBucketRequest + 53, // 50: space.SpaceApi.JoinBucket:input_type -> space.JoinBucketRequest + 55, // 51: space.SpaceApi.ShareFilesViaPublicKey:input_type -> space.ShareFilesViaPublicKeyRequest + 68, // 52: space.SpaceApi.HandleFilesInvitation:input_type -> space.HandleFilesInvitationRequest + 89, // 53: space.SpaceApi.NotificationSubscribe:input_type -> google.protobuf.Empty + 62, // 54: space.SpaceApi.ListBuckets:input_type -> space.ListBucketsRequest + 71, // 55: space.SpaceApi.GetNotifications:input_type -> space.GetNotificationsRequest + 73, // 56: space.SpaceApi.ReadNotification:input_type -> space.ReadNotificationRequest + 81, // 57: space.SpaceApi.DeleteAccount:input_type -> space.DeleteAccountRequest + 12, // 58: space.SpaceApi.ToggleBucketBackup:input_type -> space.ToggleBucketBackupRequest + 14, // 59: space.SpaceApi.BucketBackupRestore:input_type -> space.BucketBackupRestoreRequest + 10, // 60: space.SpaceApi.GetUsageInfo:input_type -> space.GetUsageInfoRequest + 85, // 61: space.SpaceApi.GetAPISessionTokens:input_type -> space.GetAPISessionTokensRequest + 87, // 62: space.SpaceApi.GetRecentlySharedWith:input_type -> space.GetRecentlySharedWithRequest + 6, // 63: space.SpaceApi.SetNotificationsLastSeenAt:input_type -> space.SetNotificationsLastSeenAtRequest + 3, // 64: space.SpaceApi.SearchFiles:input_type -> space.SearchFilesRequest + 20, // 65: space.SpaceApi.ListDirectories:output_type -> space.ListDirectoriesResponse + 22, // 66: space.SpaceApi.ListDirectory:output_type -> space.ListDirectoryResponse + 28, // 67: space.SpaceApi.GenerateKeyPair:output_type -> space.GenerateKeyPairResponse + 30, // 68: space.SpaceApi.GetStoredMnemonic:output_type -> space.GetStoredMnemonicResponse + 32, // 69: space.SpaceApi.RestoreKeyPairViaMnemonic:output_type -> space.RestoreKeyPairViaMnemonicResponse + 84, // 70: space.SpaceApi.DeleteKeyPair:output_type -> space.DeleteKeyPairResponse + 28, // 71: space.SpaceApi.GenerateKeyPairWithForce:output_type -> space.GenerateKeyPairResponse + 76, // 72: space.SpaceApi.GetPublicKey:output_type -> space.GetPublicKeyResponse + 33, // 73: space.SpaceApi.Subscribe:output_type -> space.FileEventResponse + 34, // 74: space.SpaceApi.TxlSubscribe:output_type -> space.TextileEventResponse + 36, // 75: space.SpaceApi.OpenFile:output_type -> space.OpenFileResponse + 59, // 76: space.SpaceApi.GeneratePublicFileLink:output_type -> space.GeneratePublicFileLinkResponse + 9, // 77: space.SpaceApi.GetSharedWithMeFiles:output_type -> space.GetSharedWithMeFilesResponse + 38, // 78: space.SpaceApi.OpenPublicFile:output_type -> space.OpenPublicFileResponse + 41, // 79: space.SpaceApi.AddItems:output_type -> space.AddItemsResponse + 43, // 80: space.SpaceApi.CreateFolder:output_type -> space.CreateFolderResponse + 61, // 81: space.SpaceApi.ToggleFuseDrive:output_type -> space.FuseDriveResponse + 61, // 82: space.SpaceApi.GetFuseDriveStatus:output_type -> space.FuseDriveResponse + 26, // 83: space.SpaceApi.CreateBucket:output_type -> space.CreateBucketResponse + 45, // 84: space.SpaceApi.BackupKeysByPassphrase:output_type -> space.BackupKeysByPassphraseResponse + 47, // 85: space.SpaceApi.RecoverKeysByPassphrase:output_type -> space.RecoverKeysByPassphraseResponse + 49, // 86: space.SpaceApi.TestKeysPassphrase:output_type -> space.TestKeysPassphraseResponse + 80, // 87: space.SpaceApi.CreateLocalKeysBackup:output_type -> space.CreateLocalKeysBackupResponse + 78, // 88: space.SpaceApi.RecoverKeysByLocalBackup:output_type -> space.RecoverKeysByLocalBackupResponse + 52, // 89: space.SpaceApi.ShareBucket:output_type -> space.ShareBucketResponse + 54, // 90: space.SpaceApi.JoinBucket:output_type -> space.JoinBucketResponse + 57, // 91: space.SpaceApi.ShareFilesViaPublicKey:output_type -> space.ShareFilesViaPublicKeyResponse + 69, // 92: space.SpaceApi.HandleFilesInvitation:output_type -> space.HandleFilesInvitationResponse + 70, // 93: space.SpaceApi.NotificationSubscribe:output_type -> space.NotificationEventResponse + 63, // 94: space.SpaceApi.ListBuckets:output_type -> space.ListBucketsResponse + 72, // 95: space.SpaceApi.GetNotifications:output_type -> space.GetNotificationsResponse + 74, // 96: space.SpaceApi.ReadNotification:output_type -> space.ReadNotificationResponse + 82, // 97: space.SpaceApi.DeleteAccount:output_type -> space.DeleteAccountResponse + 13, // 98: space.SpaceApi.ToggleBucketBackup:output_type -> space.ToggleBucketBackupResponse + 15, // 99: space.SpaceApi.BucketBackupRestore:output_type -> space.BucketBackupRestoreResponse + 11, // 100: space.SpaceApi.GetUsageInfo:output_type -> space.GetUsageInfoResponse + 86, // 101: space.SpaceApi.GetAPISessionTokens:output_type -> space.GetAPISessionTokensResponse + 88, // 102: space.SpaceApi.GetRecentlySharedWith:output_type -> space.GetRecentlySharedWithResponse + 7, // 103: space.SpaceApi.SetNotificationsLastSeenAt:output_type -> space.SetNotificationsLastSeenAtResponse + 4, // 104: space.SpaceApi.SearchFiles:output_type -> space.SearchFilesResponse + 65, // [65:105] is the sub-list for method output_type + 25, // [25:65] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_space_proto_init() } @@ -6166,18 +6123,6 @@ func file_space_proto_init() { } } file_space_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileInfoEventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_space_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TextileEventResponse); i { case 0: return &v.state @@ -6189,7 +6134,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpenFileRequest); i { case 0: return &v.state @@ -6201,7 +6146,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpenFileResponse); i { case 0: return &v.state @@ -6213,7 +6158,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpenPublicFileRequest); i { case 0: return &v.state @@ -6225,7 +6170,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpenPublicFileResponse); i { case 0: return &v.state @@ -6237,7 +6182,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddItemsRequest); i { case 0: return &v.state @@ -6249,7 +6194,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddItemResult); i { case 0: return &v.state @@ -6261,7 +6206,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddItemsResponse); i { case 0: return &v.state @@ -6273,7 +6218,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateFolderRequest); i { case 0: return &v.state @@ -6285,7 +6230,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateFolderResponse); i { case 0: return &v.state @@ -6297,7 +6242,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupKeysByPassphraseRequest); i { case 0: return &v.state @@ -6309,7 +6254,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupKeysByPassphraseResponse); i { case 0: return &v.state @@ -6321,7 +6266,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RecoverKeysByPassphraseRequest); i { case 0: return &v.state @@ -6333,7 +6278,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RecoverKeysByPassphraseResponse); i { case 0: return &v.state @@ -6345,7 +6290,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestKeysPassphraseRequest); i { case 0: return &v.state @@ -6357,7 +6302,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TestKeysPassphraseResponse); i { case 0: return &v.state @@ -6369,7 +6314,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ThreadInfo); i { case 0: return &v.state @@ -6381,7 +6326,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShareBucketRequest); i { case 0: return &v.state @@ -6393,7 +6338,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShareBucketResponse); i { case 0: return &v.state @@ -6405,7 +6350,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JoinBucketRequest); i { case 0: return &v.state @@ -6417,7 +6362,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JoinBucketResponse); i { case 0: return &v.state @@ -6429,7 +6374,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShareFilesViaPublicKeyRequest); i { case 0: return &v.state @@ -6441,7 +6386,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FullPath); i { case 0: return &v.state @@ -6453,7 +6398,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShareFilesViaPublicKeyResponse); i { case 0: return &v.state @@ -6465,7 +6410,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GeneratePublicFileLinkRequest); i { case 0: return &v.state @@ -6477,7 +6422,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GeneratePublicFileLinkResponse); i { case 0: return &v.state @@ -6489,7 +6434,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ToggleFuseRequest); i { case 0: return &v.state @@ -6501,7 +6446,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FuseDriveResponse); i { case 0: return &v.state @@ -6513,7 +6458,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBucketsRequest); i { case 0: return &v.state @@ -6525,7 +6470,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListBucketsResponse); i { case 0: return &v.state @@ -6537,7 +6482,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Invitation); i { case 0: return &v.state @@ -6549,7 +6494,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UsageAlert); i { case 0: return &v.state @@ -6561,7 +6506,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InvitationAccept); i { case 0: return &v.state @@ -6573,7 +6518,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Notification); i { case 0: return &v.state @@ -6585,7 +6530,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HandleFilesInvitationRequest); i { case 0: return &v.state @@ -6597,7 +6542,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HandleFilesInvitationResponse); i { case 0: return &v.state @@ -6609,7 +6554,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NotificationEventResponse); i { case 0: return &v.state @@ -6621,7 +6566,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNotificationsRequest); i { case 0: return &v.state @@ -6633,7 +6578,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNotificationsResponse); i { case 0: return &v.state @@ -6645,7 +6590,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadNotificationRequest); i { case 0: return &v.state @@ -6657,7 +6602,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadNotificationResponse); i { case 0: return &v.state @@ -6669,7 +6614,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetPublicKeyRequest); i { case 0: return &v.state @@ -6681,7 +6626,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetPublicKeyResponse); i { case 0: return &v.state @@ -6693,7 +6638,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RecoverKeysByLocalBackupRequest); i { case 0: return &v.state @@ -6705,7 +6650,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RecoverKeysByLocalBackupResponse); i { case 0: return &v.state @@ -6717,7 +6662,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateLocalKeysBackupRequest); i { case 0: return &v.state @@ -6729,7 +6674,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateLocalKeysBackupResponse); i { case 0: return &v.state @@ -6741,7 +6686,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteAccountRequest); i { case 0: return &v.state @@ -6753,7 +6698,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteAccountResponse); i { case 0: return &v.state @@ -6765,7 +6710,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteKeyPairRequest); i { case 0: return &v.state @@ -6777,7 +6722,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteKeyPairResponse); i { case 0: return &v.state @@ -6789,7 +6734,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAPISessionTokensRequest); i { case 0: return &v.state @@ -6801,7 +6746,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAPISessionTokensResponse); i { case 0: return &v.state @@ -6813,7 +6758,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRecentlySharedWithRequest); i { case 0: return &v.state @@ -6825,7 +6770,7 @@ func file_space_proto_init() { return nil } } - file_space_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_space_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRecentlySharedWithResponse); i { case 0: return &v.state @@ -6838,7 +6783,7 @@ func file_space_proto_init() { } } } - file_space_proto_msgTypes[65].OneofWrappers = []interface{}{ + file_space_proto_msgTypes[64].OneofWrappers = []interface{}{ (*Notification_InvitationValue)(nil), (*Notification_UsageAlert)(nil), (*Notification_InvitationAccept)(nil), @@ -6849,7 +6794,7 @@ func file_space_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_space_proto_rawDesc, NumEnums: 3, - NumMessages: 87, + NumMessages: 86, NumExtensions: 0, NumServices: 1, }, @@ -6894,8 +6839,6 @@ type SpaceApiClient interface { GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) // Subscribe to file events. This streams responses to the caller Subscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_SubscribeClient, error) - // Subscribe to file info events. This streams responses to the caller - FileInfoSubscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_FileInfoSubscribeClient, error) // Subscribe to textile events. This streams responses to the caller TxlSubscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_TxlSubscribeClient, error) // Open a file in the daemon. @@ -7063,40 +7006,8 @@ func (x *spaceApiSubscribeClient) Recv() (*FileEventResponse, error) { return m, nil } -func (c *spaceApiClient) FileInfoSubscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_FileInfoSubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[1], "/space.SpaceApi/FileInfoSubscribe", opts...) - if err != nil { - return nil, err - } - x := &spaceApiFileInfoSubscribeClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type SpaceApi_FileInfoSubscribeClient interface { - Recv() (*FileInfoEventResponse, error) - grpc.ClientStream -} - -type spaceApiFileInfoSubscribeClient struct { - grpc.ClientStream -} - -func (x *spaceApiFileInfoSubscribeClient) Recv() (*FileInfoEventResponse, error) { - m := new(FileInfoEventResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - func (c *spaceApiClient) TxlSubscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_TxlSubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[2], "/space.SpaceApi/TxlSubscribe", opts...) + stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[1], "/space.SpaceApi/TxlSubscribe", opts...) if err != nil { return nil, err } @@ -7164,7 +7075,7 @@ func (c *spaceApiClient) OpenPublicFile(ctx context.Context, in *OpenPublicFileR } func (c *spaceApiClient) AddItems(ctx context.Context, in *AddItemsRequest, opts ...grpc.CallOption) (SpaceApi_AddItemsClient, error) { - stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[3], "/space.SpaceApi/AddItems", opts...) + stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[2], "/space.SpaceApi/AddItems", opts...) if err != nil { return nil, err } @@ -7313,7 +7224,7 @@ func (c *spaceApiClient) HandleFilesInvitation(ctx context.Context, in *HandleFi } func (c *spaceApiClient) NotificationSubscribe(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (SpaceApi_NotificationSubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[4], "/space.SpaceApi/NotificationSubscribe", opts...) + stream, err := c.cc.NewStream(ctx, &_SpaceApi_serviceDesc.Streams[3], "/space.SpaceApi/NotificationSubscribe", opts...) if err != nil { return nil, err } @@ -7463,8 +7374,6 @@ type SpaceApiServer interface { GetPublicKey(context.Context, *GetPublicKeyRequest) (*GetPublicKeyResponse, error) // Subscribe to file events. This streams responses to the caller Subscribe(*empty.Empty, SpaceApi_SubscribeServer) error - // Subscribe to file info events. This streams responses to the caller - FileInfoSubscribe(*empty.Empty, SpaceApi_FileInfoSubscribeServer) error // Subscribe to textile events. This streams responses to the caller TxlSubscribe(*empty.Empty, SpaceApi_TxlSubscribeServer) error // Open a file in the daemon. @@ -7551,9 +7460,6 @@ func (*UnimplementedSpaceApiServer) GetPublicKey(context.Context, *GetPublicKeyR func (*UnimplementedSpaceApiServer) Subscribe(*empty.Empty, SpaceApi_SubscribeServer) error { return status.Errorf(codes.Unimplemented, "method Subscribe not implemented") } -func (*UnimplementedSpaceApiServer) FileInfoSubscribe(*empty.Empty, SpaceApi_FileInfoSubscribeServer) error { - return status.Errorf(codes.Unimplemented, "method FileInfoSubscribe not implemented") -} func (*UnimplementedSpaceApiServer) TxlSubscribe(*empty.Empty, SpaceApi_TxlSubscribeServer) error { return status.Errorf(codes.Unimplemented, "method TxlSubscribe not implemented") } @@ -7817,27 +7723,6 @@ func (x *spaceApiSubscribeServer) Send(m *FileEventResponse) error { return x.ServerStream.SendMsg(m) } -func _SpaceApi_FileInfoSubscribe_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(empty.Empty) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(SpaceApiServer).FileInfoSubscribe(m, &spaceApiFileInfoSubscribeServer{stream}) -} - -type SpaceApi_FileInfoSubscribeServer interface { - Send(*FileInfoEventResponse) error - grpc.ServerStream -} - -type spaceApiFileInfoSubscribeServer struct { - grpc.ServerStream -} - -func (x *spaceApiFileInfoSubscribeServer) Send(m *FileInfoEventResponse) error { - return x.ServerStream.SendMsg(m) -} - func _SpaceApi_TxlSubscribe_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(empty.Empty) if err := stream.RecvMsg(m); err != nil { @@ -8560,11 +8445,6 @@ var _SpaceApi_serviceDesc = grpc.ServiceDesc{ Handler: _SpaceApi_Subscribe_Handler, ServerStreams: true, }, - { - StreamName: "FileInfoSubscribe", - Handler: _SpaceApi_FileInfoSubscribe_Handler, - ServerStreams: true, - }, { StreamName: "TxlSubscribe", Handler: _SpaceApi_TxlSubscribe_Handler, diff --git a/grpc/pb/space.pb.gw.go b/grpc/pb/space.pb.gw.go index cc1de5e0..607c0cfc 100644 --- a/grpc/pb/space.pb.gw.go +++ b/grpc/pb/space.pb.gw.go @@ -309,23 +309,6 @@ func request_SpaceApi_Subscribe_0(ctx context.Context, marshaler runtime.Marshal } -func request_SpaceApi_FileInfoSubscribe_0(ctx context.Context, marshaler runtime.Marshaler, client SpaceApiClient, req *http.Request, pathParams map[string]string) (SpaceApi_FileInfoSubscribeClient, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - stream, err := client.FileInfoSubscribe(ctx, &protoReq) - if err != nil { - return nil, metadata, err - } - header, err := stream.Header() - if err != nil { - return nil, metadata, err - } - metadata.HeaderMD = header - return stream, metadata, nil - -} - func request_SpaceApi_TxlSubscribe_0(ctx context.Context, marshaler runtime.Marshaler, client SpaceApiClient, req *http.Request, pathParams map[string]string) (SpaceApi_TxlSubscribeClient, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -1618,13 +1601,6 @@ func RegisterSpaceApiHandlerServer(ctx context.Context, mux *runtime.ServeMux, s return }) - mux.Handle("GET", pattern_SpaceApi_FileInfoSubscribe_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - }) - mux.Handle("GET", pattern_SpaceApi_TxlSubscribe_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -2427,26 +2403,6 @@ func RegisterSpaceApiHandlerClient(ctx context.Context, mux *runtime.ServeMux, c }) - mux.Handle("GET", pattern_SpaceApi_FileInfoSubscribe_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SpaceApi_FileInfoSubscribe_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SpaceApi_FileInfoSubscribe_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_SpaceApi_TxlSubscribe_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3089,8 +3045,6 @@ var ( pattern_SpaceApi_Subscribe_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "subscriptions", "file"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_SpaceApi_FileInfoSubscribe_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "subscriptions", "fileinfo"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_SpaceApi_TxlSubscribe_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "subscriptions", "textile"}, "", runtime.AssumeColonVerbOpt(true))) pattern_SpaceApi_OpenFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "files", "open"}, "", runtime.AssumeColonVerbOpt(true))) @@ -3173,8 +3127,6 @@ var ( forward_SpaceApi_Subscribe_0 = runtime.ForwardResponseStream - forward_SpaceApi_FileInfoSubscribe_0 = runtime.ForwardResponseStream - forward_SpaceApi_TxlSubscribe_0 = runtime.ForwardResponseStream forward_SpaceApi_OpenFile_0 = runtime.ForwardResponseMessage diff --git a/grpc/proto/space.proto b/grpc/proto/space.proto index 2b8d8fd1..e60d5a36 100644 --- a/grpc/proto/space.proto +++ b/grpc/proto/space.proto @@ -80,13 +80,6 @@ service SpaceApi { }; } - // Subscribe to file info events. This streams responses to the caller - rpc FileInfoSubscribe(google.protobuf.Empty) returns (stream FileInfoEventResponse) { - option (google.api.http) = { - get: "/v1/subscriptions/fileinfo" - }; - } - // Subscribe to textile events. This streams responses to the caller rpc TxlSubscribe(google.protobuf.Empty) returns (stream TextileEventResponse) { option (google.api.http) = { @@ -479,10 +472,8 @@ enum EventType { message FileEventResponse { EventType type = 1; ListDirectoryEntry entry = 2; -} - -message FileInfoEventResponse { - ListDirectoryEntry file = 1; + string bucket = 3; + string dbId = 4; } message TextileEventResponse { diff --git a/swagger/ui/space.swagger.json b/swagger/ui/space.swagger.json index 4d60426b..89d80a19 100644 --- a/swagger/ui/space.swagger.json +++ b/swagger/ui/space.swagger.json @@ -1235,38 +1235,6 @@ ] } }, - "/v1/subscriptions/fileinfo": { - "get": { - "summary": "Subscribe to file info events. This streams responses to the caller", - "operationId": "SpaceApi_FileInfoSubscribe", - "responses": { - "200": { - "description": "A successful response.(streaming responses)", - "schema": { - "type": "object", - "properties": { - "result": { - "$ref": "#/definitions/spaceFileInfoEventResponse" - }, - "error": { - "$ref": "#/definitions/runtimeStreamError" - } - }, - "title": "Stream result of spaceFileInfoEventResponse" - } - }, - "default": { - "description": "An unexpected error response", - "schema": { - "$ref": "#/definitions/runtimeError" - } - } - }, - "tags": [ - "SpaceApi" - ] - } - }, "/v1/subscriptions/notification": { "get": { "operationId": "SpaceApi_NotificationSubscribe", @@ -1635,14 +1603,12 @@ }, "entry": { "$ref": "#/definitions/spaceListDirectoryEntry" - } - } - }, - "spaceFileInfoEventResponse": { - "type": "object", - "properties": { - "file": { - "$ref": "#/definitions/spaceListDirectoryEntry" + }, + "bucket": { + "type": "string" + }, + "dbId": { + "type": "string" } } }, From d5ac86fd58c157c851fed89354aef19a072e4ad8 Mon Sep 17 00:00:00 2001 From: maurycy <5383+maurycy@users.noreply.github.com> Date: Thu, 5 Nov 2020 23:39:19 +0100 Subject: [PATCH 4/4] sqlite: use usr.HomeDir --- config/map_config.go | 6 +++++- core/search/sqlite/sqlite.go | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/config/map_config.go b/config/map_config.go index e4c3cf99..5aa1a8fe 100644 --- a/config/map_config.go +++ b/config/map_config.go @@ -2,6 +2,8 @@ package config import ( "os" + "os/user" + "path/filepath" "github.com/FleekHQ/space-daemon/core/env" ) @@ -17,8 +19,10 @@ func NewMap(envVal env.SpaceEnv, flags *Flags) Config { configInt := make(map[string]int) configBool := make(map[string]bool) + usr, _ := user.Current() + // default values - configStr[SpaceStorePath] = "~/.fleek-space" + configStr[SpaceStorePath] = filepath.Join(usr.HomeDir, ".fleek-space") configStr[MountFuseDrive] = "false" configStr[FuseDriveName] = "Space" configInt[SpaceServerPort] = 9999 diff --git a/core/search/sqlite/sqlite.go b/core/search/sqlite/sqlite.go index 74669c5b..d2e1c657 100644 --- a/core/search/sqlite/sqlite.go +++ b/core/search/sqlite/sqlite.go @@ -2,8 +2,8 @@ package sqlite import ( "context" - "fmt" - "os" + "os/user" + "path/filepath" "strconv" "strings" @@ -33,8 +33,10 @@ type sqliteFilesSearchEngine struct { // Creates a new SQLite backed search engine for files and folders func NewSearchEngine(opts ...Option) *sqliteFilesSearchEngine { + usr, _ := user.Current() + searchOptions := sqliteSearchOption{ - dbPath: fmt.Sprintf("~%c.fleek-space", os.PathSeparator), + dbPath: filepath.Join(usr.HomeDir, ".fleek-space"), } for _, opt := range opts { @@ -48,7 +50,8 @@ func NewSearchEngine(opts ...Option) *sqliteFilesSearchEngine { } func (s *sqliteFilesSearchEngine) Start() error { - dsn := fmt.Sprintf("%s%c%s", s.opts.dbPath, os.PathSeparator, DbFileName) + dsn := filepath.Join(s.opts.dbPath, DbFileName) + if db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(s.opts.logLevel), }); err != nil {