From ee41e30881c64e4cf883c7e19636703a85cc979c Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 12 Jan 2022 20:04:43 +0000 Subject: [PATCH] feat: extract node config from settings to individual tables (#2470) --- VERSION | 2 +- api/geth_backend.go | 25 +- appdatabase/database.go | 14 + appdatabase/migrations/bindata.go | 1222 +------------- .../migrations/sql/1640111208_dummy.up.sql | 6 + appdatabase/migrationsprevnodecfg/bindata.go | 1454 +++++++++++++++++ appdatabase/migrationsprevnodecfg/migrate.go | 19 + .../sql/0001_app.down.sql | 0 .../sql/0001_app.up.sql | 0 .../sql/0002_tokens.down.sql | 0 .../sql/0002_tokens.up.sql | 0 .../sql/0003_settings.down.sql | 0 .../sql/0003_settings.up.sql | 0 .../sql/0004_pending_stickers.down.sql | 0 .../sql/0004_pending_stickers.up.sql | 0 .../sql/0005_waku_mode.down.sql | 0 .../sql/0005_waku_mode.up.sql | 0 .../sql/0006_appearance.up.sql | 0 .../sql/0007_enable_waku_default.up.sql | 0 .../sql/0008_add_push_notifications.up.sql | 0 ...enable_sending_push_notifications.down.sql | 0 ...9_enable_sending_push_notifications.up.sql | 0 .../sql/0010_add_block_mentions.down.sql | 0 .../sql/0010_add_block_mentions.up.sql | 0 ...allow_webview_permission_requests.down.sql | 0 ...1_allow_webview_permission_requests.up.sql | 0 .../sql/0012_pending_transactions.down.sql | 0 .../sql/0012_pending_transactions.up.sql | 0 .../sql/0013_favourites.down.sql | 0 .../sql/0013_favourites.up.sql | 0 .../sql/0014_add_use_mailservers.down.sql | 0 .../sql/0014_add_use_mailservers.up.sql | 0 .../sql/0015_link_previews.down.sql | 0 .../sql/0015_link_previews.up.sql | 0 ...6_local_notifications_preferences.down.sql | 0 ...016_local_notifications_preferences.up.sql | 0 .../sql/0017_bookmarks.down.sql | 0 .../sql/0017_bookmarks.up.sql | 0 .../0018_profile_pictures_visibility.up.sql | 0 .../sql/0019_blocks_ranges_extra_data.up.sql | 0 .../sql/0020_metrics.up.sql | 0 .../sql/0021_add_session_id_to_metrics.up.sql | 0 .../sql/0022_pending_transfers.up.sql | 0 ...5_settings_anon_metrics_should_send.up.sql | 0 .../sql/1618395756_contacts_only.up.sql | 0 .../1622184614_add_default_sync_period.up.sql | 0 .../sql/1625872445_user_status.up.sql | 0 .../sql/1627983977_add_gif_to_settings.up.sql | 0 .../sql/1628580203_add_hidden_account.up.sql | 0 .../1629123384_add_id_to_app_metrics.up.sql | 0 ...853_add_opensea_enabled_to_settings.up.sql | 0 ...4455_create-saved_addresses-table.down.sql | 0 ...464455_create-saved_addresses-table.up.sql | 0 .../sql/1630485153_networks.down.sql | 0 .../sql/1630485153_networks.up.sql | 0 ...1632262444_profile_pictures_show_to.up.sql | 0 ...dd_telemetry_server_url_to_settings.up.sql | 0 .../sql/1635942154_add_backup_setting.up.sql | 0 ...1637745568_add_auto_message_setting.up.sql | 0 .../sql/1640111208_nodeconfig.up.sql | 233 +++ appdatabase/migrationsprevnodecfg/sql/doc.go | 3 + appdatabase/node_config_test.go | 323 ++++ multiaccounts/accounts/database.go | 45 +- multiaccounts/accounts/database_test.go | 10 - node/status_node_services.go | 33 +- nodecfg/node_config.go | 732 +++++++++ params/config.go | 68 +- rpc/client.go | 2 +- rpc/client_test.go | 7 +- rpc/network/network.go | 30 +- rpc/network/network_test.go | 3 +- services/accounts/settings.go | 10 + services/wallet/api.go | 6 +- wakuv2/config.go | 39 +- wakuv2/waku.go | 16 +- 75 files changed, 2934 insertions(+), 1368 deletions(-) create mode 100644 appdatabase/migrations/sql/1640111208_dummy.up.sql create mode 100644 appdatabase/migrationsprevnodecfg/bindata.go create mode 100644 appdatabase/migrationsprevnodecfg/migrate.go rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0001_app.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0001_app.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0002_tokens.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0002_tokens.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0003_settings.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0003_settings.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0004_pending_stickers.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0004_pending_stickers.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0005_waku_mode.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0005_waku_mode.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0006_appearance.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0007_enable_waku_default.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0008_add_push_notifications.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0009_enable_sending_push_notifications.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0009_enable_sending_push_notifications.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0010_add_block_mentions.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0010_add_block_mentions.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0011_allow_webview_permission_requests.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0011_allow_webview_permission_requests.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0012_pending_transactions.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0012_pending_transactions.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0013_favourites.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0013_favourites.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0014_add_use_mailservers.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0014_add_use_mailservers.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0015_link_previews.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0015_link_previews.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0016_local_notifications_preferences.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0016_local_notifications_preferences.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0017_bookmarks.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0017_bookmarks.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0018_profile_pictures_visibility.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0019_blocks_ranges_extra_data.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0020_metrics.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0021_add_session_id_to_metrics.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/0022_pending_transfers.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1618237885_settings_anon_metrics_should_send.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1618395756_contacts_only.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1622184614_add_default_sync_period.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1625872445_user_status.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1627983977_add_gif_to_settings.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1628580203_add_hidden_account.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1629123384_add_id_to_app_metrics.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1630401853_add_opensea_enabled_to_settings.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1630464455_create-saved_addresses-table.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1630464455_create-saved_addresses-table.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1630485153_networks.down.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1630485153_networks.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1632262444_profile_pictures_show_to.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1635942153_add_telemetry_server_url_to_settings.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1635942154_add_backup_setting.up.sql (100%) rename appdatabase/{migrations => migrationsprevnodecfg}/sql/1637745568_add_auto_message_setting.up.sql (100%) create mode 100644 appdatabase/migrationsprevnodecfg/sql/1640111208_nodeconfig.up.sql create mode 100644 appdatabase/migrationsprevnodecfg/sql/doc.go create mode 100644 appdatabase/node_config_test.go create mode 100644 nodecfg/node_config.go diff --git a/VERSION b/VERSION index 0ca871819..9188543ea 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.92.7 +0.93.0 diff --git a/api/geth_backend.go b/api/geth_backend.go index 52b554168..80ba95c6e 100644 --- a/api/geth_backend.go +++ b/api/geth_backend.go @@ -28,6 +28,7 @@ import ( "github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts/accounts" "github.com/status-im/status-go/node" + "github.com/status-im/status-go/nodecfg" "github.com/status-im/status-go/params" "github.com/status-im/status-go/rpc" "github.com/status-im/status-go/services/personal" @@ -338,19 +339,18 @@ func (b *GethStatusBackend) StartNodeWithKey(acc multiaccounts.Account, password return err } -func (b *GethStatusBackend) mergeConfig(nodecfg *params.NodeConfig) (*params.NodeConfig, error) { - var conf params.NodeConfig - accountDB := accounts.NewDB(b.appDB) - if err := accountDB.GetNodeConfig(&conf); err != nil { +func (b *GethStatusBackend) mergeConfig(n *params.NodeConfig) (*params.NodeConfig, error) { + conf, err := nodecfg.GetNodeConfig(b.appDB) + if err != nil { return nil, err } - // Overwrite db configuration - if err := mergo.Merge(&conf, nodecfg, mergo.WithOverride); err != nil { + // Overwrite db configuration (only adds new values) + if err := mergo.Merge(conf, n); err != nil { return nil, err } - if err := b.saveNodeConfig(&conf); err != nil { + if err := b.saveNodeConfig(conf); err != nil { return nil, err } @@ -660,9 +660,7 @@ func (b *GethStatusBackend) saveAccountsAndSettings(settings accounts.Settings, func (b *GethStatusBackend) loadNodeConfig() (*params.NodeConfig, error) { b.mu.Lock() defer b.mu.Unlock() - var conf params.NodeConfig - accountDB := accounts.NewDB(b.appDB) - err := accountDB.GetNodeConfig(&conf) + conf, err := nodecfg.GetNodeConfig(b.appDB) if err != nil { return nil, err } @@ -683,14 +681,13 @@ func (b *GethStatusBackend) loadNodeConfig() (*params.NodeConfig, error) { } conf.KeyStoreDir = filepath.Join(b.rootDataDir, conf.KeyStoreDir) - return &conf, nil + return conf, nil } -func (b *GethStatusBackend) saveNodeConfig(nodeCfg *params.NodeConfig) error { +func (b *GethStatusBackend) saveNodeConfig(n *params.NodeConfig) error { b.mu.Lock() defer b.mu.Unlock() - accountDB := accounts.NewDB(b.appDB) - err := accountDB.SaveSetting("node-config", nodeCfg) + err := nodecfg.SaveNodeConfig(b.appDB, n) if err != nil { return err } diff --git a/appdatabase/database.go b/appdatabase/database.go index f9b53e71c..c0fa76992 100644 --- a/appdatabase/database.go +++ b/appdatabase/database.go @@ -4,6 +4,8 @@ import ( "database/sql" "github.com/status-im/status-go/appdatabase/migrations" + migrationsprevnodecfg "github.com/status-im/status-go/appdatabase/migrationsprevnodecfg" + "github.com/status-im/status-go/nodecfg" "github.com/status-im/status-go/sqlite" ) @@ -13,6 +15,18 @@ func InitializeDB(path, password string) (*sql.DB, error) { if err != nil { return nil, err } + + err = migrationsprevnodecfg.Migrate(db) + if err != nil { + return nil, err + } + + // NodeConfig migration cannot be done with SQL + err = nodecfg.MigrateNodeConfig(db) + if err != nil { + return nil, err + } + err = migrations.Migrate(db) if err != nil { return nil, err diff --git a/appdatabase/migrations/bindata.go b/appdatabase/migrations/bindata.go index 0481ec10e..214257de6 100644 --- a/appdatabase/migrations/bindata.go +++ b/appdatabase/migrations/bindata.go @@ -1,58 +1,9 @@ -// Package migrations Code generated by go-bindata. (@generated) DO NOT EDIT. +// Code generated by go-bindata. // sources: -// 0001_app.down.sql -// 0001_app.up.sql -// 0002_tokens.down.sql -// 0002_tokens.up.sql -// 0003_settings.down.sql -// 0003_settings.up.sql -// 0004_pending_stickers.down.sql -// 0004_pending_stickers.up.sql -// 0005_waku_mode.down.sql -// 0005_waku_mode.up.sql -// 0006_appearance.up.sql -// 0007_enable_waku_default.up.sql -// 0008_add_push_notifications.up.sql -// 0009_enable_sending_push_notifications.down.sql -// 0009_enable_sending_push_notifications.up.sql -// 0010_add_block_mentions.down.sql -// 0010_add_block_mentions.up.sql -// 0011_allow_webview_permission_requests.down.sql -// 0011_allow_webview_permission_requests.up.sql -// 0012_pending_transactions.down.sql -// 0012_pending_transactions.up.sql -// 0013_favourites.down.sql -// 0013_favourites.up.sql -// 0014_add_use_mailservers.down.sql -// 0014_add_use_mailservers.up.sql -// 0015_link_previews.down.sql -// 0015_link_previews.up.sql -// 0016_local_notifications_preferences.down.sql -// 0016_local_notifications_preferences.up.sql -// 0017_bookmarks.down.sql -// 0017_bookmarks.up.sql -// 0018_profile_pictures_visibility.up.sql -// 0019_blocks_ranges_extra_data.up.sql -// 0020_metrics.up.sql -// 0021_add_session_id_to_metrics.up.sql -// 0022_pending_transfers.up.sql -// 1618237885_settings_anon_metrics_should_send.up.sql -// 1618395756_contacts_only.up.sql -// 1622184614_add_default_sync_period.up.sql -// 1625872445_user_status.up.sql -// 1627983977_add_gif_to_settings.up.sql -// 1628580203_add_hidden_account.up.sql -// 1629123384_add_id_to_app_metrics.up.sql -// 1630401853_add_opensea_enabled_to_settings.up.sql -// 1630464455_create-saved_addresses-table.down.sql -// 1630464455_create-saved_addresses-table.up.sql -// 1630485153_networks.down.sql -// 1630485153_networks.up.sql -// 1632262444_profile_pictures_show_to.up.sql -// 1635942153_add_telemetry_server_url_to_settings.up.sql -// 1635942154_add_backup_setting.up.sql -// 1637745568_add_auto_message_setting.up.sql +// 1640111208_dummy.up.sql // doc.go +// DO NOT EDIT! + package migrations import ( @@ -70,7 +21,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer @@ -78,7 +29,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("Read %q: %v", name, err) } if clErr != nil { return nil, err @@ -99,1072 +50,41 @@ type bindataFileInfo struct { modTime time.Time } -// Name return file name func (fi bindataFileInfo) Name() string { return fi.name } - -// Size return file size func (fi bindataFileInfo) Size() int64 { return fi.size } - -// Mode return file mode func (fi bindataFileInfo) Mode() os.FileMode { return fi.mode } - -// ModTime return file modify time func (fi bindataFileInfo) ModTime() time.Time { return fi.modTime } - -// IsDir return file whether a directory func (fi bindataFileInfo) IsDir() bool { - return fi.mode&os.ModeDir != 0 + return false } - -// Sys return file is sys mode func (fi bindataFileInfo) Sys() interface{} { return nil } -var __0001_appDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcd\xcb\xaa\xc2\x40\x0c\xc6\xf1\x7d\x9f\xa2\xef\xd1\xd5\x39\xb4\x0b\x41\x54\xc4\x85\xbb\x21\x4e\x63\x1b\x6c\x27\x63\x92\x7a\x79\x7b\x41\xf0\x32\xea\x6c\x7f\xf9\xf8\xa7\x5e\x2f\x57\xe5\xe6\xef\x7f\xde\x94\x8a\x66\x14\x3a\xad\x8a\x37\x04\xef\x79\x0a\x96\xe2\x4e\xf8\xac\x28\xbf\xd1\xf5\xa4\xc6\x72\x4d\x8e\x2d\xc4\x98\xce\x23\xca\x48\xaa\xc4\x21\x75\x13\x08\xba\xff\x8a\x0f\xec\x0f\x29\x8d\x40\x83\xa2\x9c\x3e\xa7\x2f\x77\x82\xc7\x09\xd5\x5c\x07\xcf\xe7\xb3\x45\xdd\x6c\x73\x1b\xe7\x7b\x30\x47\xad\xa3\xf6\x92\x6b\x1a\x47\xf2\xd9\x8f\xf7\xc0\x23\x29\x10\x3a\xd4\xaa\xb8\x05\x00\x00\xff\xff\xf6\xca\x86\xce\x64\x01\x00\x00") +var __1640111208_dummyUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xb1\x4e\x04\x31\x0c\x44\x7b\xbe\x62\x3a\x40\x22\x7f\x71\x57\x50\xc0\x4a\xe8\x44\x9f\x4b\x26\x1b\x8b\x5d\x1b\x62\xa3\xe5\xf3\x51\x44\x45\x73\x6e\x3d\xef\xcd\xa4\x84\xd3\x82\xd7\xe5\x82\xb7\xf3\xcb\xf2\x7e\xbe\x4b\x09\xe9\xd6\xcd\xc0\xa5\x8b\xa3\xc9\x46\x54\xa3\x43\x2d\xba\xe8\x3a\x3f\xcf\x71\xef\x28\x83\x39\x58\xe1\x86\xe8\xc4\x2e\xeb\xc8\x21\xa6\xf8\x50\x3b\x1c\x6d\xd8\x8e\xa3\x4b\xe9\xf0\xaf\xed\xcf\x13\x86\x62\x1a\xa2\xdf\x84\x8b\x16\x62\xda\xfe\xd3\x3d\x3b\xae\xa4\xc2\x3f\x37\x89\x59\x20\x8a\x38\x0c\x0f\x57\x36\x1b\x7c\x42\xd6\x8a\xdc\x82\x03\x6a\x95\xa5\xad\xe0\x4f\x8c\x5c\x26\xfe\x38\x85\x27\x9b\x63\x91\x6b\x45\xb1\x4a\x74\x0e\xfe\x06\x00\x00\xff\xff\x9b\xc1\xf3\x13\x02\x01\x00\x00") -func _0001_appDownSqlBytes() ([]byte, error) { +func _1640111208_dummyUpSqlBytes() ([]byte, error) { return bindataRead( - __0001_appDownSql, - "0001_app.down.sql", + __1640111208_dummyUpSql, + "1640111208_dummy.up.sql", ) } -func _0001_appDownSql() (*asset, error) { - bytes, err := _0001_appDownSqlBytes() +func _1640111208_dummyUpSql() (*asset, error) { + bytes, err := _1640111208_dummyUpSqlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "0001_app.down.sql", size: 356, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0001_appUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x4f\x73\xa2\x30\x14\xbf\xf3\x29\x72\xd4\x19\x2e\x7b\xee\x09\x35\x5a\x66\x29\xec\x22\x6e\xdb\x53\x26\x42\xc4\x8c\x40\xd2\x24\xd4\xfa\xed\x77\x02\x04\x50\x41\xeb\xce\xde\x4c\xde\xcb\xe3\xf7\xe7\xe5\xc5\x79\x08\x9d\x08\x82\xc8\x99\x79\x10\xb8\x4b\xe0\x07\x11\x80\x6f\xee\x3a\x5a\x03\x49\x94\xa2\x45\x2a\xc1\xc4\x52\x27\x4e\xc0\x1f\x27\x9c\x3f\x3b\x21\xf8\x15\xba\x2f\x4e\xf8\x0e\x7e\xc2\x77\xdb\xfa\xc4\x59\x49\xc0\xcc\x0b\x66\xd6\x14\xbc\xba\xd1\x73\xb0\x89\x40\x18\xbc\xba\x8b\x27\xcb\xba\x51\x1c\xc7\x31\x2b\x0b\xa5\x8b\xe3\x24\x11\x44\xca\xe1\xfa\x47\x9c\x65\x44\x81\x59\x10\x78\xd0\xf1\x6d\x2b\xde\xe3\xde\xaa\xc2\x15\xc1\xb7\xc8\xb6\xa4\x62\x02\xa7\x66\xc5\xcb\xed\x81\x9c\x2a\x5c\xb6\xc5\xb1\xda\x37\xfb\x05\xce\x4d\x4a\xcc\x32\x26\xcc\x6f\x41\xb0\x22\x09\xc2\x0a\x2c\x9c\x08\x46\xee\x0b\xac\xc0\xfa\x1b\xcf\xb3\xad\x92\x27\xa3\xd1\x71\xd6\x1b\xdf\xfd\xbd\x81\xc0\xf5\x17\xf0\x0d\x94\x05\xfd\x28\x09\xaa\xd9\x20\xc3\x38\xf0\x7b\x3a\xd4\xb1\x29\x78\x7d\x86\x21\x6c\x97\x4f\xb7\xca\x69\x31\x86\x8b\xe9\x48\x5b\xaa\x5a\xb4\x85\xea\x0a\x1d\x63\xd4\x9c\xba\x28\xd0\xc6\xbb\x32\xdd\xd6\x6d\x6f\xb7\x82\x1d\x25\x11\xda\x5b\x9a\x54\x0a\x9f\x7b\xda\x9a\xd0\xd3\x58\xd1\x9c\x48\x85\x73\x0e\x36\xeb\x95\xbb\xf2\xe1\x02\xcc\xdc\x95\xeb\x47\xb6\x95\x60\xce\x8d\xe5\x60\x01\x97\xce\xc6\x8b\xc0\x0e\x67\x92\xd8\xd6\x9e\x6a\xdf\x4f\x6e\x91\x90\x2f\xb0\xf1\xd7\xf5\x49\xd7\x8f\x1e\xeb\x46\x83\x18\x35\xf5\xc0\xc4\x6a\xb6\x90\x61\xd0\x41\x35\x39\x75\xeb\x2c\x83\x10\xba\x2b\x5f\x33\x9b\x74\x67\xa6\x20\x84\x4b\x18\x42\x7f\x0e\xbb\xea\x13\xbd\x1f\x68\x0e\x1e\x8c\x20\x98\x3b\xeb\xb9\xb3\x80\xd6\x1d\x35\x35\x7d\x2d\x65\xa7\x5a\x4f\xcc\xc7\x68\x72\x22\x72\x2a\x25\x65\x85\x2e\xa8\x0b\xa3\x21\x2f\xba\xb4\xcb\x48\x9f\x6c\x7b\xfc\x8c\x6b\x85\x76\x52\x6f\x0f\x53\xbd\x05\x50\x09\x5c\xc8\x5d\xdd\x3a\x05\x51\x47\x26\x0e\xda\x80\xd6\xd8\xba\x25\xfa\x5e\x60\xb9\x6f\x07\x47\xb7\x7d\x39\x52\xba\xc8\x36\x3b\xa0\x91\x43\xea\xab\x99\x17\x92\x14\x09\x11\x26\xc3\xb6\x04\x89\x09\xe5\xaa\x89\x66\x2c\x6d\x7e\x9d\x4d\xc5\xf3\x4f\x14\x65\xbe\x25\xe2\x1a\x6f\xaf\xcd\x47\x39\x65\x0c\x27\x24\xa9\x3a\xbe\x6d\xf7\x1f\xe7\xda\x77\xda\xd8\x0d\x55\xdb\x10\x3b\xef\xbc\x8c\xc5\x07\x79\x3b\xfd\xca\x25\xdb\x9a\x07\xfe\x3a\x0a\x1d\x0d\xab\x99\x34\xc6\x18\xc4\x89\x30\x13\xa7\xfa\xdd\x94\x36\xe3\x69\xa2\x6b\xb6\x1f\xe9\xbe\x3b\xbd\xd7\xe5\x35\xd2\xef\xda\x7e\xdb\xdf\x31\xf1\x5b\xef\xbf\x25\xf9\xd2\xf1\xd6\x83\x5a\xe4\x98\x73\x5a\xa4\x68\xc7\x84\x99\x9d\x48\x31\x54\x31\x18\xd4\xe4\x52\xf3\xc7\x75\x41\x02\x17\x29\xf9\x4f\xf2\xec\x04\xcb\x87\xc5\x51\xec\x72\xff\x1e\xbc\x1c\xd3\x4c\x12\xf1\x59\x5f\x59\x00\x00\xa0\xc9\xf0\x43\xae\x63\xd5\xb0\xb9\x06\xa5\x43\xe3\x90\x75\x94\x63\x29\x8f\x4c\x24\xdd\x9d\xd4\xbb\xbb\x8c\x10\x75\x75\xe2\xb1\x91\xd8\x11\x40\x82\x7c\x94\x44\x2a\x94\x62\x6e\xc8\xa4\x98\xd7\x72\xf5\x9f\x16\xb8\x82\x97\xf8\x74\x9e\x62\xf7\xb2\x06\x1f\x43\x1d\xa8\xde\xf1\xcb\x87\x66\x9c\x47\xfd\x82\x8f\x20\x47\x4d\x31\x44\x93\x2f\x7d\xb7\x47\x09\x36\x79\xdf\x36\x18\x29\xc6\x69\x6c\x94\xa9\x16\xe3\x4e\x37\xc5\xe5\xb9\x61\x19\x96\xca\xa0\x68\x35\xea\x8d\x38\x9d\x93\x50\x19\xb3\x4f\x22\x4e\x57\x4f\x7e\x73\x21\xab\x46\x22\x29\x53\x54\xff\x1b\x19\xce\xfa\xe7\x1e\xa8\x70\x1b\x9d\xda\x4b\xd7\xf7\x68\x94\x72\xc6\x8e\xa4\xa3\x57\xb7\x4d\xc3\xb1\x4e\xd8\xd3\x74\xdf\xcf\x50\xcc\xc4\xaf\xe1\xfe\x0d\x00\x00\xff\xff\xe8\x42\x77\x9b\x97\x0b\x00\x00") - -func _0001_appUpSqlBytes() ([]byte, error) { - return bindataRead( - __0001_appUpSql, - "0001_app.up.sql", - ) -} - -func _0001_appUpSql() (*asset, error) { - bytes, err := _0001_appUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0001_app.up.sql", size: 2967, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0002_tokensDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\xc9\xcf\x4e\xcd\x2b\xb6\xe6\x02\x04\x00\x00\xff\xff\xf0\xdb\x32\xa7\x13\x00\x00\x00") - -func _0002_tokensDownSqlBytes() ([]byte, error) { - return bindataRead( - __0002_tokensDownSql, - "0002_tokens.down.sql", - ) -} - -func _0002_tokensDownSql() (*asset, error) { - bytes, err := _0002_tokensDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0002_tokens.down.sql", size: 19, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0002_tokensUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8e\xcd\x6a\x85\x30\x10\x46\xf7\x79\x8a\x6f\x79\x05\xdf\xa0\xab\xa8\xa9\x0e\xb5\xb1\xc4\xb1\xea\xaa\x58\x93\x85\xf8\x13\x30\x42\xe9\xdb\x17\x4b\x4b\x2b\xdc\xed\x37\x67\x0e\x27\x35\x4a\xb2\x02\xcb\xa4\x54\xa0\x47\xe8\x8a\xa1\x3a\xaa\xb9\xc6\xe1\x67\xb7\x05\xdc\x04\x30\x58\xbb\xbb\x10\xf0\x2a\x4d\x5a\x48\xf3\x4d\xe9\xa6\x2c\x63\x01\x6c\xee\xf8\xf0\xfb\xfc\x36\x59\x34\xba\xa6\x5c\xab\x0c\x09\xe5\xa4\xf9\x8a\x0d\xab\x03\xab\xee\xba\x86\xcf\xf5\xdd\x2f\x77\xbd\xd6\x8d\xd3\x3a\x2c\xe1\xcf\x4a\x9a\xcf\xc3\xe8\x17\xbf\xff\xbe\x9c\xc3\x8b\xa1\x67\x69\x7a\x3c\xa9\x1e\xb7\x9f\xd4\xf8\x5f\x57\x24\x22\xb4\xc4\x45\xd5\x30\x4c\xd5\x52\xf6\x20\xc4\x57\x00\x00\x00\xff\xff\x73\xf3\x87\xe5\xf8\x00\x00\x00") - -func _0002_tokensUpSqlBytes() ([]byte, error) { - return bindataRead( - __0002_tokensUpSql, - "0002_tokens.up.sql", - ) -} - -func _0002_tokensUpSql() (*asset, error) { - bytes, err := _0002_tokensUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0002_tokens.up.sql", size: 248, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0003_settingsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\xca\xb1\x0a\xc2\x40\x0c\x06\xe0\x3d\x4f\xf1\x8f\x0a\xbe\x41\xa7\x5c\x1b\x69\xb0\x9a\x92\x46\x6b\x47\x87\x43\x04\x11\xe1\x4e\xc1\xb7\x77\x11\xd7\x8f\xaf\x73\x1b\x11\x9c\x06\x41\xc9\xb5\xde\x1e\xd7\xd2\x50\xeb\xc2\x21\x3f\xd6\x2d\x0e\x16\x90\xb3\x4e\x31\xfd\x13\x56\x04\xd4\xcf\x33\xe3\xc4\xde\xf6\xec\x18\x5d\xf7\xec\x0b\x76\xb2\x6c\x08\x78\x5f\xee\xaf\x8c\x34\x58\xa2\x35\x66\x8d\xde\x8e\x01\xb7\x59\xbb\x86\xe8\x1b\x00\x00\xff\xff\x49\x2e\x16\x6c\x76\x00\x00\x00") - -func _0003_settingsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0003_settingsDownSql, - "0003_settings.down.sql", - ) -} - -func _0003_settingsDownSql() (*asset, error) { - bytes, err := _0003_settingsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0003_settings.down.sql", size: 118, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0003_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x93\xbd\x6e\xdb\x30\x10\xc7\x77\x3f\x05\xb7\xb4\x40\x87\x66\x28\x50\x20\x93\x1c\xab\x89\x50\x57\x0a\x54\xb9\x41\xa6\x03\x4d\x9e\xad\x83\x29\x92\xe0\x51\x0e\xf4\xf6\x85\x1c\x45\x56\x53\xd9\x23\x79\xbf\xfb\xbe\xff\xaa\x2c\x9e\x44\x95\x2c\xd7\xa9\x60\x8c\x91\xec\x9e\xef\x16\xf7\x65\x9a\x54\xe9\x87\x6f\xf1\x69\x21\x84\xd4\x3a\x20\xb3\xf8\x93\x94\xf7\x8f\x49\x29\xf2\xa2\x12\xf9\x66\xbd\xfe\xb2\x10\x42\xd5\xd2\x31\x34\x4e\xa3\x58\x16\xc5\x3a\x4d\x72\xb1\x4a\x7f\x24\x9b\x75\x25\x76\xd2\x30\x9e\x98\x36\x04\xb4\xaa\x1b\x03\xbc\x13\x37\x2d\xeb\x9b\x33\x11\xc1\x62\x7c\x75\xe1\x30\x9f\xa9\xe5\xe8\x1a\xd8\x3a\x17\xad\xd3\xc8\x62\xb9\x2e\x96\x73\x06\x40\x2b\xb7\x06\xf5\x08\x68\xe9\x3d\xc3\xb5\x2e\x90\xfc\xed\xb7\xef\xb7\x1f\x99\xde\xb4\x33\x88\x71\xfa\x51\x93\x46\xa8\x5d\x83\x10\x9d\x33\x91\xfc\xe5\xc6\xc9\x72\x94\xc6\xc8\x48\xce\x02\xe9\xd9\xd4\x07\xec\xa0\xbd\x6c\x53\x32\x68\x38\xc5\xb1\x0a\xa7\xe0\xd4\xee\x25\x05\xd4\xe0\xac\xd8\xe4\xbf\xb3\x87\x3c\x5d\x89\x65\xf6\x90\xe5\xd5\x47\x88\xec\x7e\xea\x6f\x24\x47\x68\xbd\x96\x11\xf5\x9c\xab\x91\x11\x39\x82\xc6\x40\x47\xec\x23\xc4\xfa\x8c\x65\x79\x35\x76\xfc\xf5\x44\xbb\x3d\x18\x3c\xa2\x99\xa6\x68\x2c\x36\xce\x92\x9a\xfe\x59\xd9\xe0\x6c\xbf\xc3\xfa\xdf\x56\xfb\xaf\xc5\x69\x04\xe5\xec\x8e\xf6\xe3\x5a\xad\x8b\xb4\x23\x75\x9a\xee\x64\xe9\x97\x96\xe1\x6b\x17\xdd\x5b\x0f\xff\x85\xf7\x64\x2d\x6a\x68\x24\x19\xc6\x70\xc4\x70\xbe\x2e\x1f\x70\x87\xa1\x1f\xef\xb4\xec\xc1\x72\x24\x7c\x05\x1f\xe8\x28\x55\x77\x25\x73\xbb\x35\xa4\xe0\x80\xdd\x6c\xd7\x01\x1b\x6c\xb6\x18\x80\x3b\xab\xc8\xee\x41\xd5\x8e\xd4\x15\x3d\x31\xed\x6d\xcf\xf9\x3a\x48\x9e\x9f\x24\x47\x52\x07\x0c\x0c\x5e\xaa\x03\xc3\x70\x88\x13\x4d\x8c\x40\x40\xd5\x2b\xef\xfd\x7d\x06\x86\x62\x9c\x85\xc6\x6d\xc9\xe0\x28\xce\xcb\x75\x75\x36\xd6\x18\x49\x4d\x6f\x7d\xd4\x3a\xe9\x1b\xf1\x54\x66\xbf\x92\xf2\x45\xfc\x4c\x5f\x7a\x87\x96\x31\xf4\x53\x3d\x67\x7d\xed\xab\x8c\x10\x9c\x8b\x57\x05\x3b\x70\x8c\xfd\xfd\x82\x97\xcc\xd7\x56\x3f\xd0\x47\x62\xda\x9a\x5e\xb7\x07\xb4\x63\xdc\xc5\x67\xf1\x9c\x55\x8f\xc5\xa6\x12\x65\xf1\x9c\xad\xee\x16\x7f\x03\x00\x00\xff\xff\xa5\xa1\x7b\x78\x1f\x05\x00\x00") - -func _0003_settingsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0003_settingsUpSql, - "0003_settings.up.sql", - ) -} - -func _0003_settingsUpSql() (*asset, error) { - bytes, err := _0003_settingsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0003_settings.up.sql", size: 1311, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0004_pending_stickersDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") - -func _0004_pending_stickersDownSqlBytes() ([]byte, error) { - return bindataRead( - __0004_pending_stickersDownSql, - "0004_pending_stickers.down.sql", - ) -} - -func _0004_pending_stickersDownSql() (*asset, error) { - bytes, err := _0004_pending_stickersDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0004_pending_stickers.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0004_pending_stickersUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x2e\xc9\x4c\xce\x4e\x2d\x2a\x8e\x2f\x48\x4c\xce\x2e\x8e\x2f\x48\xcd\x4b\xc9\xcc\x4b\x57\x70\xf2\xf1\x77\xb2\xe6\x02\x04\x00\x00\xff\xff\xc9\xc1\xc2\xc6\x3d\x00\x00\x00") - -func _0004_pending_stickersUpSqlBytes() ([]byte, error) { - return bindataRead( - __0004_pending_stickersUpSql, - "0004_pending_stickers.up.sql", - ) -} - -func _0004_pending_stickersUpSql() (*asset, error) { - bytes, err := _0004_pending_stickersUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0004_pending_stickers.up.sql", size: 61, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0005_waku_modeDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") - -func _0005_waku_modeDownSqlBytes() ([]byte, error) { - return bindataRead( - __0005_waku_modeDownSql, - "0005_waku_mode.down.sql", - ) -} - -func _0005_waku_modeDownSql() (*asset, error) { - bytes, err := _0005_waku_modeDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0005_waku_mode.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0005_waku_modeUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x4f\xcc\x2e\x8d\x4f\xcd\x4b\x4c\xca\x49\x4d\x51\x70\xf2\xf7\xf7\x71\x75\xf4\x53\x70\x71\x75\x73\x0c\xf5\x09\x51\x48\x4b\xcc\x29\x4e\xb5\xe6\x22\xca\x8c\xa4\x9c\xfc\xfc\xdc\xf8\xb4\xcc\x9c\x92\xd4\xa2\xf8\xdc\xfc\x94\x54\x5c\xa6\x01\x02\x00\x00\xff\xff\x00\x97\x79\x75\x92\x00\x00\x00") - -func _0005_waku_modeUpSqlBytes() ([]byte, error) { - return bindataRead( - __0005_waku_modeUpSql, - "0005_waku_mode.up.sql", - ) -} - -func _0005_waku_modeUpSql() (*asset, error) { - bytes, err := _0005_waku_modeUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0005_waku_mode.up.sql", size: 146, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0006_appearanceUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x2c\x28\x48\x4d\x2c\x4a\xcc\x4b\x4e\x55\xf0\xf4\x0b\x51\xf0\xf3\x0f\x51\xf0\x0b\xf5\xf1\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x30\xb0\xe6\x02\x04\x00\x00\xff\xff\x0b\x18\x43\x21\x43\x00\x00\x00") - -func _0006_appearanceUpSqlBytes() ([]byte, error) { - return bindataRead( - __0006_appearanceUpSql, - "0006_appearance.up.sql", - ) -} - -func _0006_appearanceUpSql() (*asset, error) { - bytes, err := _0006_appearanceUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0006_appearance.up.sql", size: 67, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0007_enable_waku_defaultUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4f\xcc\x2e\x8d\x4f\xcd\x4b\x4c\xca\x49\x4d\x51\xb0\x55\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\xa7\x77\xcb\x82\x26\x00\x00\x00") - -func _0007_enable_waku_defaultUpSqlBytes() ([]byte, error) { - return bindataRead( - __0007_enable_waku_defaultUpSql, - "0007_enable_waku_default.up.sql", - ) -} - -func _0007_enable_waku_defaultUpSql() (*asset, error) { - bytes, err := _0007_enable_waku_defaultUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0007_enable_waku_default.up.sql", size: 38, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0008_add_push_notificationsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\xce\x51\x0e\x82\x30\x0c\x00\xd0\x7f\x4f\xd1\x7b\xf8\x35\x64\x7c\x55\x48\x70\x7c\x2f\x08\x45\x97\x40\x6b\xd6\x6a\xe2\xed\x3d\x80\x33\x9a\x78\x81\x97\xe7\x30\xf8\x1e\x82\xab\xd0\x83\x92\x59\xe2\x8b\x82\xab\x6b\x38\x74\x38\x1c\x5b\xc8\xb4\x89\x51\xbc\xdd\xf5\x1a\x59\x2c\x2d\x69\x1a\x2d\x09\x6b\x24\x1e\xcf\x2b\xcd\x50\x75\x1d\x7a\xd7\x42\xed\x1b\x37\x60\x80\xc6\xe1\xc9\xef\x77\xdf\x60\x25\x9e\x0b\xec\x1b\x17\xfa\xe1\x07\xad\xf0\x53\xca\x0f\xca\xff\x36\x0b\xf0\x92\x65\x8b\x93\xb0\x8d\x93\x69\x14\x5e\x9f\x9f\xf0\x57\x00\x00\x00\xff\xff\x30\xc0\x56\xbd\x5d\x01\x00\x00") - -func _0008_add_push_notificationsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0008_add_push_notificationsUpSql, - "0008_add_push_notifications.up.sql", - ) -} - -func _0008_add_push_notificationsUpSql() (*asset, error) { - bytes, err := _0008_add_push_notificationsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0008_add_push_notifications.up.sql", size: 349, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0009_enable_sending_push_notificationsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4e\xcd\x4b\x89\x2f\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x56\xb0\x55\x30\xb0\xe6\x02\x04\x00\x00\xff\xff\x57\x2d\xdb\x16\x31\x00\x00\x00") - -func _0009_enable_sending_push_notificationsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0009_enable_sending_push_notificationsDownSql, - "0009_enable_sending_push_notifications.down.sql", - ) -} - -func _0009_enable_sending_push_notificationsDownSql() (*asset, error) { - bytes, err := _0009_enable_sending_push_notificationsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0009_enable_sending_push_notifications.down.sql", size: 49, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0009_enable_sending_push_notificationsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4e\xcd\x4b\x89\x2f\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x56\xb0\x55\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\x60\x47\x19\x17\x31\x00\x00\x00") - -func _0009_enable_sending_push_notificationsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0009_enable_sending_push_notificationsUpSql, - "0009_enable_sending_push_notifications.up.sql", - ) -} - -func _0009_enable_sending_push_notificationsUpSql() (*asset, error) { - bytes, err := _0009_enable_sending_push_notificationsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0009_enable_sending_push_notifications.up.sql", size: 49, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0010_add_block_mentionsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x8e\x4f\xca\xc9\x4f\xce\x8e\xcf\x4d\xcd\x03\x73\x15\x9c\xfc\xfd\x7d\x5c\x1d\xfd\x14\x5c\x5c\xdd\x1c\x43\x7d\x42\x14\xdc\x1c\x7d\x82\x5d\xad\xb9\x00\x01\x00\x00\xff\xff\xa8\x45\x75\x3b\x53\x00\x00\x00") - -func _0010_add_block_mentionsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0010_add_block_mentionsDownSql, - "0010_add_block_mentions.down.sql", - ) -} - -func _0010_add_block_mentionsDownSql() (*asset, error) { - bytes, err := _0010_add_block_mentionsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0010_add_block_mentions.down.sql", size: 83, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0010_add_block_mentionsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x1c\xc7\x31\x0a\x42\x31\x0c\x06\xe0\xdd\x53\xfc\xf7\x70\xca\xb3\x79\x53\x7c\x05\x6d\xe7\xa2\xa5\x6a\x50\x53\x21\xf1\xfe\x82\xe3\x47\x52\xf8\x84\x42\x8b\x30\x7c\x44\xa8\xdd\x1d\x94\x12\x0e\x59\xea\x71\xc3\xe7\xeb\x8f\x66\x33\xf4\xa6\xfd\x12\x3a\xcd\xdb\xf5\x35\xfb\xb3\xbd\x87\xfd\x89\x25\x67\x61\xda\x90\x78\xa5\x2a\x05\x2b\xc9\x99\xf7\xbb\x5f\x00\x00\x00\xff\xff\x2b\x4e\x3f\xc5\x59\x00\x00\x00") - -func _0010_add_block_mentionsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0010_add_block_mentionsUpSql, - "0010_add_block_mentions.up.sql", - ) -} - -func _0010_add_block_mentionsUpSql() (*asset, error) { - bytes, err := _0010_add_block_mentionsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0010_add_block_mentions.up.sql", size: 89, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0011_allow_webview_permission_requestsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") - -func _0011_allow_webview_permission_requestsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0011_allow_webview_permission_requestsDownSql, - "0011_allow_webview_permission_requests.down.sql", - ) -} - -func _0011_allow_webview_permission_requestsDownSql() (*asset, error) { - bytes, err := _0011_allow_webview_permission_requestsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0011_allow_webview_permission_requests.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0011_allow_webview_permission_requestsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x41\x0e\x02\x21\x0c\x05\xd0\xab\xfc\x7b\xb8\xea\x48\x67\x55\x87\x44\x61\x4d\x34\x69\x4c\x13\x04\xa5\x28\xd7\xf7\x91\x24\xbe\x22\xd1\x26\x0c\xd7\x39\xad\x3d\x1d\x14\x02\xce\x51\xf2\xe5\xc0\xd2\xc7\xcf\x74\x95\x7b\xad\x7d\x95\xb7\x8e\x97\xb9\x5b\x6f\x65\xe8\xe7\xab\x3e\x1d\x5b\x8c\xc2\x74\x20\xf0\x4e\x59\x12\x76\x92\x1b\x9f\xfe\x01\x00\x00\xff\xff\xc8\x7d\x35\xfa\x58\x00\x00\x00") - -func _0011_allow_webview_permission_requestsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0011_allow_webview_permission_requestsUpSql, - "0011_allow_webview_permission_requests.up.sql", - ) -} - -func _0011_allow_webview_permission_requestsUpSql() (*asset, error) { - bytes, err := _0011_allow_webview_permission_requestsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0011_allow_webview_permission_requests.up.sql", size: 88, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0012_pending_transactionsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\x48\xcd\x4b\xc9\xcc\x4b\x8f\x2f\x29\x4a\xcc\x2b\x4e\x4c\x2e\xc9\xcc\xcf\x2b\xb6\xe6\x02\x04\x00\x00\xff\xff\x62\x4b\x2a\x6c\x21\x00\x00\x00") - -func _0012_pending_transactionsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0012_pending_transactionsDownSql, - "0012_pending_transactions.down.sql", - ) -} - -func _0012_pending_transactionsDownSql() (*asset, error) { - bytes, err := _0012_pending_transactionsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0012_pending_transactions.down.sql", size: 33, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0012_pending_transactionsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8f\xc1\x4e\x02\x31\x14\x45\xf7\xfd\x8a\xbb\x84\x84\x3f\x70\x55\xa0\xc2\x8b\x63\xc7\x74\xde\x08\xac\x9a\x62\xab\x4c\x90\x76\xd2\xd6\x18\xff\xde\xe8\x46\x8d\x13\x96\x2f\xe7\x9d\x9b\x9c\x95\x51\x92\x15\x58\x2e\x1b\x05\xba\x85\x6e\x19\x6a\x4f\x1d\x77\x18\x43\xf4\x43\x7c\xb1\x35\xbb\x58\xdc\x53\x1d\x52\x2c\x98\x09\x20\x86\xfa\x9e\xf2\xd9\x0e\x1e\xbd\xee\x68\xa3\xd5\x1a\x4b\xda\x90\xe6\x6f\x5d\xf7\x4d\xb3\x10\xc0\x2f\xcf\x9e\x5c\x39\xe1\x51\x9a\xd5\x56\x9a\x3f\x4f\xc7\xd7\xb3\x8d\x6f\x97\x63\xc8\x53\x13\xcf\x39\x5d\xac\xf3\x3e\x87\x52\x26\xf5\x9a\xae\xe3\x8f\x31\x4c\x02\xef\xaa\x03\xab\x3d\x7f\x1d\x0f\x86\xee\xa5\x39\xe0\x4e\x1d\x30\xfb\x89\x5b\xfc\x2b\x98\x8b\x39\x76\xc4\xdb\xb6\x67\x98\x76\x47\xeb\x1b\x21\x3e\x03\x00\x00\xff\xff\x9c\xbd\x6e\xaa\x41\x01\x00\x00") - -func _0012_pending_transactionsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0012_pending_transactionsUpSql, - "0012_pending_transactions.up.sql", - ) -} - -func _0012_pending_transactionsUpSql() (*asset, error) { - bytes, err := _0012_pending_transactionsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0012_pending_transactions.up.sql", size: 321, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0013_favouritesDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x48\x4b\x2c\xcb\x2f\x2d\xca\x2c\x49\x2d\xb6\xe6\x02\x04\x00\x00\xff\xff\x76\xaf\x3d\x70\x17\x00\x00\x00") - -func _0013_favouritesDownSqlBytes() ([]byte, error) { - return bindataRead( - __0013_favouritesDownSql, - "0013_favourites.down.sql", - ) -} - -func _0013_favouritesDownSql() (*asset, error) { - bytes, err := _0013_favouritesDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0013_favourites.down.sql", size: 23, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0013_favouritesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcb\xb1\xaa\xc2\x40\x10\x46\xe1\x7e\x9e\xe2\x2f\x13\xb8\x6f\x70\xab\x31\x8e\x64\x70\xcd\xca\x64\x62\x92\x72\x21\x2b\x58\xa8\x90\x55\x9f\x5f\x10\x1b\xdb\xc3\xf9\x1a\x13\x76\x81\xf3\x26\x08\x74\x87\x2e\x3a\x64\xd2\xde\x7b\x9c\xd3\xeb\xfe\x5c\x2f\x8f\x5c\x50\x11\x90\x96\x65\xcd\xa5\xe0\xc4\xd6\xb4\x6c\x9f\xb3\x1b\x42\xf8\x23\xe0\x96\xae\x19\x2e\x93\xff\xd4\xa3\xe9\x81\x6d\xc6\x5e\x66\x54\x5f\x5e\x53\x8d\x51\xbd\x8d\x83\xc3\xe2\xa8\xdb\x7f\xa2\x77\x00\x00\x00\xff\xff\xb6\x82\x8c\x1e\x84\x00\x00\x00") - -func _0013_favouritesUpSqlBytes() ([]byte, error) { - return bindataRead( - __0013_favouritesUpSql, - "0013_favourites.up.sql", - ) -} - -func _0013_favouritesUpSql() (*asset, error) { - bytes, err := _0013_favouritesUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0013_favourites.up.sql", size: 132, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0014_add_use_mailserversDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") - -func _0014_add_use_mailserversDownSqlBytes() ([]byte, error) { - return bindataRead( - __0014_add_use_mailserversDownSql, - "0014_add_use_mailservers.down.sql", - ) -} - -func _0014_add_use_mailserversDownSql() (*asset, error) { - bytes, err := _0014_add_use_mailserversDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0014_add_use_mailservers.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0014_add_use_mailserversUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x2d\x4e\x8d\xcf\x4d\xcc\xcc\x29\x4e\x2d\x2a\x4b\x2d\x2a\x56\x70\xf2\xf7\xf7\x71\x75\xf4\x53\x70\x71\x75\x73\x0c\xf5\x09\x51\x08\x09\x0a\x75\xb5\xe6\x0a\x0d\x70\x71\x0c\x41\x32\x20\xd8\x35\x04\x43\xa7\xad\x82\xa1\x35\x17\x20\x00\x00\xff\xff\x78\x22\xcb\x3c\x6f\x00\x00\x00") - -func _0014_add_use_mailserversUpSqlBytes() ([]byte, error) { - return bindataRead( - __0014_add_use_mailserversUpSql, - "0014_add_use_mailservers.up.sql", - ) -} - -func _0014_add_use_mailserversUpSql() (*asset, error) { - bytes, err := _0014_add_use_mailserversUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0014_add_use_mailservers.up.sql", size: 111, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0015_link_previewsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") - -func _0015_link_previewsDownSqlBytes() ([]byte, error) { - return bindataRead( - __0015_link_previewsDownSql, - "0015_link_previews.down.sql", - ) -} - -func _0015_link_previewsDownSql() (*asset, error) { - bytes, err := _0015_link_previewsDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0015_link_previews.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0015_link_previewsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xce\x31\x0a\x42\x31\x0c\x80\xe1\xbd\xa7\xc8\x15\x9c\x8b\x43\x6a\xe3\x14\x5f\xe5\x99\xce\x45\x31\x48\xf1\x51\xb4\xa9\x7a\x7d\x27\xc1\x49\xf0\x00\xff\xc7\x8f\x2c\x34\x83\x60\x60\x02\xd3\x31\x6a\xbb\x18\x60\x8c\xb0\x49\x9c\x77\x13\x2c\xb5\x5d\xcb\xad\xeb\xb3\xea\xab\x74\xbd\x3f\xd4\x46\xd1\x76\x3c\x2d\x7a\x86\x90\x12\x13\x4e\x10\x69\x8b\x99\x05\x64\xce\xe4\xdd\x3f\xa4\x7d\xac\x62\x75\xa8\x41\xe0\x14\xbc\xcb\xfb\x88\xf2\x15\x1f\x48\x7e\x8f\xac\x61\xe5\xdd\x3b\x00\x00\xff\xff\xe6\xf3\x89\x88\xcb\x00\x00\x00") - -func _0015_link_previewsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0015_link_previewsUpSql, - "0015_link_previews.up.sql", - ) -} - -func _0015_link_previewsUpSql() (*asset, error) { - bytes, err := _0015_link_previewsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0015_link_previews.up.sql", size: 203, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0016_local_notifications_preferencesDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\xc8\xc9\x4f\x4e\xcc\x89\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x8e\x2f\x28\x4a\x4d\x4b\x2d\x4a\xcd\x4b\x4e\x2d\xb6\x06\x04\x00\x00\xff\xff\xf0\xdb\xee\xaa\x2b\x00\x00\x00") - -func _0016_local_notifications_preferencesDownSqlBytes() ([]byte, error) { - return bindataRead( - __0016_local_notifications_preferencesDownSql, - "0016_local_notifications_preferences.down.sql", - ) -} - -func _0016_local_notifications_preferencesDownSql() (*asset, error) { - bytes, err := _0016_local_notifications_preferencesDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0016_local_notifications_preferences.down.sql", size: 43, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0016_local_notifications_preferencesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8d\x41\x0b\x82\x30\x1c\x47\xef\x7e\x8a\xdf\x51\xc1\x6f\xd0\x69\xea\x42\xc9\x5a\x8c\x99\x78\x92\x35\xff\xc2\x60\xcc\xd8\xc4\xcf\x1f\x59\x10\x75\x7d\x3c\xde\x2b\x25\x67\x8a\x43\xb1\xa2\xe5\x70\x8b\xd1\x6e\xf4\xcb\x6a\x67\x6b\xf4\x6a\x17\x1f\xc7\x47\xa0\x99\x02\x79\x43\x11\x69\x02\x00\x91\xc2\x66\x0d\xe1\xc6\x64\x59\x33\x99\xef\x90\x36\xf2\xeb\x2f\xb2\x13\xf9\x57\x89\xc2\x9f\xea\xf5\xdd\xd1\x84\x42\x88\x96\xb3\x0b\x2a\x7e\x64\x5d\xab\x30\x6b\x17\xe9\xad\x5c\x65\x73\x66\x72\xc0\x89\x0f\xe9\x67\x97\xef\x87\xfc\x1b\xcd\x92\x0c\x7d\xa3\x6a\xd1\x29\x48\xd1\x37\xd5\xe1\x19\x00\x00\xff\xff\x02\x6d\x5e\xec\xcc\x00\x00\x00") - -func _0016_local_notifications_preferencesUpSqlBytes() ([]byte, error) { - return bindataRead( - __0016_local_notifications_preferencesUpSql, - "0016_local_notifications_preferences.up.sql", - ) -} - -func _0016_local_notifications_preferencesUpSql() (*asset, error) { - bytes, err := _0016_local_notifications_preferencesUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0016_local_notifications_preferences.up.sql", size: 204, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0017_bookmarksDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x48\xca\xcf\xcf\xce\x4d\x2c\xca\x2e\xb6\xe6\x02\x04\x00\x00\xff\xff\xfb\x69\xe4\xcd\x16\x00\x00\x00") - -func _0017_bookmarksDownSqlBytes() ([]byte, error) { - return bindataRead( - __0017_bookmarksDownSql, - "0017_bookmarks.down.sql", - ) -} - -func _0017_bookmarksDownSql() (*asset, error) { - bytes, err := _0017_bookmarksDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0017_bookmarks.down.sql", size: 22, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0017_bookmarksUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8b\x3d\xaa\xc2\x40\x10\xc7\xfb\x3d\xc5\xbf\x4c\xe0\xdd\xe0\x55\x63\x1c\xc9\xe0\x9a\x95\xc9\xc4\x98\x4a\x56\x08\x22\xc9\x1a\x58\xc9\xfd\x45\x2b\x0b\xdb\xdf\x47\xa5\x4c\xc6\x30\xda\x78\x86\xec\xd0\x04\x03\x9f\xa5\xb5\x16\xd7\x65\x99\x52\xcc\xd3\x13\x85\x03\xd6\x3c\xe3\x44\x5a\xd5\xa4\x9f\xa8\xe9\xbc\xff\x73\xc0\x23\xa6\xf1\xa7\xb8\xa7\x78\x1b\x2f\x5f\xdb\x1b\x1e\x55\x0e\xa4\x03\xf6\x3c\xa0\x58\xf3\x5c\xba\x12\xbd\x58\x1d\x3a\x83\x86\x5e\xb6\xff\xce\xbd\x02\x00\x00\xff\xff\x91\xa6\x3e\xcb\x93\x00\x00\x00") - -func _0017_bookmarksUpSqlBytes() ([]byte, error) { - return bindataRead( - __0017_bookmarksUpSql, - "0017_bookmarks.up.sql", - ) -} - -func _0017_bookmarksUpSql() (*asset, error) { - bytes, err := _0017_bookmarksUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0017_bookmarks.up.sql", size: 147, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0018_profile_pictures_visibilityUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0a\x42\x31\x0c\x06\xe0\xdd\x53\xfc\x57\x70\x76\x8a\xb6\x82\x10\x53\x90\x74\x2e\x28\x55\x02\x45\x4b\x13\x05\x6f\xff\x3e\x62\xcd\x37\x28\x1d\x39\xc3\x7b\x84\xbd\x5f\x0e\x4a\x09\xa7\xc2\xf5\x2a\x98\xeb\xf3\xb4\xd1\xdb\xb4\x47\x7c\x57\xf7\xf6\x33\xb7\xbb\x0d\x8b\x3f\x2e\xa2\x90\xa2\x90\xca\x8c\x94\xcf\x54\x59\xb1\x3f\xec\xb6\x00\x00\x00\xff\xff\xf9\x2a\x51\x1e\x54\x00\x00\x00") - -func _0018_profile_pictures_visibilityUpSqlBytes() ([]byte, error) { - return bindataRead( - __0018_profile_pictures_visibilityUpSql, - "0018_profile_pictures_visibility.up.sql", - ) -} - -func _0018_profile_pictures_visibilityUpSql() (*asset, error) { - bytes, err := _0018_profile_pictures_visibilityUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0018_profile_pictures_visibility.up.sql", size: 84, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0019_blocks_ranges_extra_dataUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\x8e\x2f\x4a\xcc\x4b\x4f\x2d\x56\x70\x74\x71\x51\x48\x4a\xcc\x49\xcc\x4b\x4e\x55\x70\xf2\xf1\x77\xb2\xe6\xc2\xaf\x36\x2f\x1f\xa4\xd2\xd3\x2f\xc4\xd5\xdd\x35\xc8\x9a\x0b\x10\x00\x00\xff\xff\x83\x20\x4e\x94\x59\x00\x00\x00") - -func _0019_blocks_ranges_extra_dataUpSqlBytes() ([]byte, error) { - return bindataRead( - __0019_blocks_ranges_extra_dataUpSql, - "0019_blocks_ranges_extra_data.up.sql", - ) -} - -func _0019_blocks_ranges_extra_dataUpSql() (*asset, error) { - bytes, err := _0019_blocks_ranges_extra_dataUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0019_blocks_ranges_extra_data.up.sql", size: 89, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0020_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcc\x4d\xaa\xc2\x30\x14\xc5\xf1\x79\x57\x71\x86\xef\x81\x9b\x88\xf5\x16\x0b\x69\x95\xf4\x56\x3a\x0b\xa1\x5e\xa4\x60\x3f\x48\x62\xc0\xdd\x8b\x8a\x4e\xa4\x67\xfa\x3b\xfc\x73\x43\x8a\x09\xac\xb6\x9a\x50\x16\xa8\x0f\x0c\xea\xca\x86\x1b\xb8\x65\xb1\xa3\x44\x3f\xf4\x01\x7f\x19\xde\x93\x24\x53\xc4\x49\x99\x7c\xaf\xcc\xeb\x5d\xb7\x5a\x6f\x3e\x9c\xdc\xf5\x26\x60\xea\xf8\xd7\x9e\xbd\x24\x3e\x0c\xf3\xb4\x1e\x98\x17\xf1\x2e\x0e\xd3\xc5\x86\x7b\x88\x32\xae\x3f\x7b\x2f\x2e\xca\xd9\xba\x08\x2e\x2b\x6a\x58\x55\x47\xec\xa8\x50\xad\x66\xe4\xad\x31\x54\xb3\xfd\x4a\xf6\x9f\x3d\x02\x00\x00\xff\xff\x95\xc5\x25\x15\xeb\x00\x00\x00") - -func _0020_metricsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0020_metricsUpSql, - "0020_metrics.up.sql", - ) -} - -func _0020_metricsUpSql() (*asset, error) { - bytes, err := _0020_metricsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0020_metrics.up.sql", size: 235, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0021_add_session_id_to_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\x2c\x28\x88\xcf\x4d\x2d\x29\xca\x4c\x2e\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x4e\x2d\x2e\xce\xcc\xcf\x8b\xcf\x4c\x51\x08\x73\x0c\x72\xf6\x70\x0c\xb2\xe6\x02\x04\x00\x00\xff\xff\x10\x56\x8d\x9e\x37\x00\x00\x00") - -func _0021_add_session_id_to_metricsUpSqlBytes() ([]byte, error) { - return bindataRead( - __0021_add_session_id_to_metricsUpSql, - "0021_add_session_id_to_metrics.up.sql", - ) -} - -func _0021_add_session_id_to_metricsUpSql() (*asset, error) { - bytes, err := _0021_add_session_id_to_metricsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0021_add_session_id_to_metrics.up.sql", size: 55, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __0022_pending_transfersUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\x4f\x6f\xe2\x30\x10\xc5\xef\xfe\x14\x73\x04\xc9\x87\xbd\x73\x72\xc0\x80\xb5\xc1\x46\xce\xb0\xc0\xc9\xf2\xe2\x14\xac\xe6\x9f\x62\xb7\x15\xdf\xbe\x22\xb4\x25\x50\x8a\x7a\x7d\xcf\xf3\x7b\xa3\xe7\x61\x29\x72\x0d\xc8\x92\x94\x43\x93\x57\xce\x57\x7b\x13\x5b\x5b\x05\xbb\x8b\xbe\xae\x02\x68\x2e\xd9\x82\x03\xaa\xbb\xb6\xa9\x0b\x37\x22\x64\xac\x39\x43\xfe\x81\x11\x53\x90\x0a\x81\x6f\x44\x86\xd9\x7d\xe8\x80\x00\x54\x79\x7c\xab\xdb\x67\xe3\x1d\xac\x64\x26\x66\x92\x4f\x20\x11\x33\x21\xb1\x1b\x97\xab\x34\xa5\x04\xe0\x60\xc3\x01\xfe\x31\x3d\x9e\x33\x7d\x65\x44\x5f\xe6\x21\xda\xb2\x79\x38\xfe\xd4\xd6\xa5\xb1\xce\xb5\x79\x08\xf7\x31\xf5\xad\x7d\x52\xc3\xb1\xfc\x5f\x17\x7d\x65\x6f\x83\x69\x5a\xbf\xcb\x21\x49\x55\xf2\xa9\x14\xbe\xf4\xf1\x4b\x79\xb5\xc5\xcb\xc5\x77\x36\x5a\x40\xbe\xc1\x2e\xe6\xd8\xe4\x7d\x9c\x75\xce\x9f\xba\xb0\x85\xb9\x7a\xb7\xd4\x62\xc1\xf4\x16\xfe\xf2\x2d\x0c\x2e\x15\xd1\xae\x87\x21\x19\xc2\x5a\xe0\x5c\xad\x10\xb4\x5a\x8b\xc9\x88\x10\x21\x33\xae\x11\x84\xfc\xe1\x87\xbe\x41\xe8\x55\x27\xb4\x57\x00\xed\xb6\xa4\xb7\xbb\xd1\x4b\xd5\x43\x92\xf1\x94\x8f\x11\xfa\xd0\x5e\x9a\xf9\x5d\xc0\x99\xfa\x07\xa6\x5a\x2d\x1e\x9d\xd5\x44\xab\xe5\x83\xdb\x3c\xbf\x7a\x0f\x00\x00\xff\xff\x05\xa2\xfe\xa8\xc2\x02\x00\x00") - -func _0022_pending_transfersUpSqlBytes() ([]byte, error) { - return bindataRead( - __0022_pending_transfersUpSql, - "0022_pending_transfers.up.sql", - ) -} - -func _0022_pending_transfersUpSql() (*asset, error) { - bytes, err := _0022_pending_transfersUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1618237885_settings_anon_metrics_should_sendUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0e\x42\x21\x0c\x06\xe0\xdd\x53\xfc\xf7\x70\xea\x93\x3a\x55\x48\x0c\xcc\x84\x48\x55\x12\x2c\x89\xc5\xfb\xfb\x91\x64\xbe\x23\xd3\x21\x0c\xd7\xbd\x87\xbd\x1c\x14\x02\x2e\x49\xca\x2d\xa2\xd9\xb2\xfa\xd1\xfd\x1d\x0f\xaf\xfe\x5e\xbf\xd9\xab\xab\x75\x1c\x29\x09\x53\x44\xe0\x2b\x15\xc9\x78\xb6\xe9\x7a\x3e\xfd\x03\x00\x00\xff\xff\x9a\x73\xdd\x50\x50\x00\x00\x00") - -func _1618237885_settings_anon_metrics_should_sendUpSqlBytes() ([]byte, error) { - return bindataRead( - __1618237885_settings_anon_metrics_should_sendUpSql, - "1618237885_settings_anon_metrics_should_send.up.sql", - ) -} - -func _1618237885_settings_anon_metrics_should_sendUpSql() (*asset, error) { - bytes, err := _1618237885_settings_anon_metrics_should_sendUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1618237885_settings_anon_metrics_should_send.up.sql", size: 80, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1618395756_contacts_onlyUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xcc\x31\x0e\xc2\x30\x0c\x05\xd0\xbd\xa7\xf8\x47\x60\xaf\x18\x5c\xe2\x4e\xa6\x41\xd4\x99\xa3\xaa\x0a\x15\x12\x49\x24\xec\x85\xdb\xb3\x32\x71\x81\x47\xa2\x7c\x87\xd2\x24\x0c\x2b\xee\xcf\x76\x18\x28\x04\x5c\xa2\xa4\xeb\x82\x5a\xcc\xb6\xa3\x58\x7e\xbc\x7b\xcd\x7b\x6f\xbe\xed\x6e\xb9\xb7\xd7\x07\x53\x8c\xc2\xb4\x20\xf0\x4c\x49\x14\x33\xc9\xca\xe3\x90\x6e\x81\xf4\x47\x5b\x59\xff\x32\x67\x9c\xc6\xe1\x1b\x00\x00\xff\xff\x99\x20\xa4\x1d\x88\x00\x00\x00") - -func _1618395756_contacts_onlyUpSqlBytes() ([]byte, error) { - return bindataRead( - __1618395756_contacts_onlyUpSql, - "1618395756_contacts_only.up.sql", - ) -} - -func _1618395756_contacts_onlyUpSql() (*asset, error) { - bytes, err := _1618395756_contacts_onlyUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1618395756_contacts_only.up.sql", size: 136, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1622184614_add_default_sync_periodUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x49\x4d\x4b\x2c\xcd\x29\x89\x2f\xae\xcc\x4b\x8e\x2f\x48\x2d\xca\xcc\x4f\x51\xf0\xf4\x0b\x71\x75\x77\x0d\x52\x70\x71\x75\x73\x0c\xf5\x09\x51\xb0\x30\x33\x31\x30\xb0\xe6\x0a\x0d\x70\x71\x0c\x41\x32\x25\xd8\x35\x04\xab\x76\x5b\x98\x06\x2e\x40\x00\x00\x00\xff\xff\xdd\x46\xb2\xc4\x7d\x00\x00\x00") - -func _1622184614_add_default_sync_periodUpSqlBytes() ([]byte, error) { - return bindataRead( - __1622184614_add_default_sync_periodUpSql, - "1622184614_add_default_sync_period.up.sql", - ) -} - -func _1622184614_add_default_sync_periodUpSql() (*asset, error) { - bytes, err := _1622184614_add_default_sync_periodUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1622184614_add_default_sync_period.up.sql", size: 125, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1625872445_user_statusUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8e\x41\x4b\xc3\x40\x10\x85\xef\xfb\x2b\x1e\x3d\x29\x78\xd0\x73\xf0\xb0\x49\xa6\x50\x9c\xee\x86\x75\x02\xf6\x14\x6a\xba\x48\x69\x4d\x43\x76\x16\xec\xbf\x97\x6a\x2b\x16\x04\xaf\x33\xdf\xf7\xde\xb3\x2c\x14\x20\xb6\x64\x42\x8a\xaa\xdb\xe1\x2d\xc1\xd6\x35\x2a\xcf\xed\xd2\xa1\xcf\xd3\x14\x07\xed\x72\x8a\x53\x97\x74\xad\x39\xa1\x64\x5f\x16\xe6\x3f\x33\xc5\x61\x73\x36\xba\x3c\x6e\xd6\x1a\x13\x4a\xef\x99\xac\x43\x4d\x73\xdb\xb2\x40\x42\x4b\x85\x69\x9b\xda\xca\xaf\x90\x67\x92\x3f\xed\x47\x3c\x14\xa6\x0a\x74\x82\xcf\xbd\xd7\xc0\x8d\x01\xc6\xfc\xba\xdf\xf6\xdd\x2e\x1e\x21\xf4\x22\x68\xc2\x62\x69\xc3\x0a\x4f\xb4\x82\x77\xa8\xbc\x9b\xf3\xa2\x12\x04\x6a\xd8\x56\x74\x67\x70\x49\xd1\xe3\x18\xb1\x70\x02\xe7\x05\xae\x65\xfe\x99\x79\x7f\xa2\xfa\xfd\xa1\xdf\x5d\xfd\xbf\xae\x39\xe9\xe1\xbd\xd3\xf8\xa1\xdf\x7d\x17\x67\x36\x33\xb7\x85\xf9\x0c\x00\x00\xff\xff\xa2\xed\xdb\xfc\x5f\x01\x00\x00") - -func _1625872445_user_statusUpSqlBytes() ([]byte, error) { - return bindataRead( - __1625872445_user_statusUpSql, - "1625872445_user_status.up.sql", - ) -} - -func _1625872445_user_statusUpSql() (*asset, error) { - bytes, err := _1625872445_user_statusUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1625872445_user_status.up.sql", size: 351, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1627983977_add_gif_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\xcf\x4c\x8b\x2f\x4a\x4d\x4e\xcd\x2b\x29\x56\x70\xf2\xf1\x77\xb2\xe6\x22\x46\x47\x5a\x62\x59\x7e\x51\x66\x49\x2a\x4c\x0f\x20\x00\x00\xff\xff\x41\xe4\x6a\x80\x66\x00\x00\x00") - -func _1627983977_add_gif_to_settingsUpSqlBytes() ([]byte, error) { - return bindataRead( - __1627983977_add_gif_to_settingsUpSql, - "1627983977_add_gif_to_settings.up.sql", - ) -} - -func _1627983977_add_gif_to_settingsUpSql() (*asset, error) { - bytes, err := _1627983977_add_gif_to_settingsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1627983977_add_gif_to_settings.up.sql", size: 102, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1628580203_add_hidden_accountUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\xc1\x0d\x80\x20\x0c\x05\xd0\x55\xfe\x1e\x9e\x8a\x94\xd3\x97\x26\xda\x0e\x60\xc0\x44\x2f\x78\x50\xf7\xf7\x09\x5d\x57\xb8\x24\x2a\xf6\xd6\xee\x6f\xbc\x0f\x24\x67\xcc\xc6\x58\x2a\xce\xab\xf7\x63\x20\x99\x11\xd5\x1c\x35\x48\x64\x2d\x12\x74\x14\xe1\xa6\xd3\x1f\x00\x00\xff\xff\xd8\xcf\x59\x5c\x43\x00\x00\x00") - -func _1628580203_add_hidden_accountUpSqlBytes() ([]byte, error) { - return bindataRead( - __1628580203_add_hidden_accountUpSql, - "1628580203_add_hidden_account.up.sql", - ) -} - -func _1628580203_add_hidden_accountUpSql() (*asset, error) { - bytes, err := _1628580203_add_hidden_accountUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1628580203_add_hidden_account.up.sql", size: 67, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1629123384_add_id_to_app_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x51\xcb\x6e\xc2\x40\x0c\xbc\xe7\x2b\x7c\x04\x29\x7f\xc0\xc9\x04\xd3\x46\xdd\x07\x72\x9c\xaa\x9c\x56\x11\xb1\xaa\x48\x05\xa2\xec\x16\xa9\x7f\x5f\x41\x5a\x14\x15\xb8\xf5\xea\xf1\xcc\x78\xc6\x68\x84\x18\x04\x97\x86\xa0\xe9\xfb\xb0\xd7\x34\x74\xbb\x08\x4c\x0e\x2d\x81\x78\x48\xba\xef\xc3\x04\x5a\x64\x05\x13\x0a\xdd\x21\xcd\x32\x00\x80\xae\x85\xd2\x09\x3d\x11\xc3\x86\x4b\x8b\xbc\x85\x17\xda\x02\xd6\xe2\x4b\x57\x30\x59\x72\x92\x5f\x36\xf5\xa4\x87\x04\xaf\xc8\xc5\x33\x32\x38\x2f\xe0\x6a\x63\x46\xec\xd4\x7c\x7c\x2a\x08\xbd\xc9\x1f\xe0\x6c\x78\xd2\x21\x76\xc7\xc3\x03\xea\xb1\xd7\xa1\x49\xdd\xe1\x3d\xc4\xaf\x98\x74\xff\x60\x6d\x37\x68\x93\xb4\x0d\x4d\x02\x29\x2d\x55\x82\x76\x03\x2b\x5a\x63\x6d\x04\x8a\x9a\x99\x9c\x84\x2b\x32\x72\xa2\xc6\xb3\x71\xe8\xda\x5f\xd1\x71\xde\x0f\xc7\x9d\xc6\xa8\x2d\x2c\xbd\x37\x84\xee\xea\x75\x55\x5c\xa3\xa9\x68\xbe\xc8\x4a\x57\x11\xcb\xb9\x22\x3f\x2d\x6f\x76\x29\x23\x1f\x73\xe7\xd3\x94\xf9\x4d\xa0\x7c\x72\x7b\x3e\xb9\x69\x9e\x55\x64\xa8\x10\xf8\x07\xad\x6c\xcd\xde\xde\x79\xfe\x8a\xfd\xe6\xe7\xf5\x37\xe0\x77\x00\x00\x00\xff\xff\x7c\x73\x3b\xdc\x4d\x02\x00\x00") - -func _1629123384_add_id_to_app_metricsUpSqlBytes() ([]byte, error) { - return bindataRead( - __1629123384_add_id_to_app_metricsUpSql, - "1629123384_add_id_to_app_metrics.up.sql", - ) -} - -func _1629123384_add_id_to_app_metricsUpSql() (*asset, error) { - bytes, err := _1629123384_add_id_to_app_metricsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1629123384_add_id_to_app_metrics.up.sql", size: 589, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1630401853_add_opensea_enabled_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x51\x0a\x80\x20\x0c\x06\xe0\xab\xfc\xf7\xe8\x69\xe6\x7a\x5a\x0a\xa1\xcf\x61\xb4\x22\x90\x15\xcc\xfb\xd3\x47\x52\x78\x43\xa1\x20\x0c\xd7\x31\x1e\xbb\x1d\x14\x23\xe6\x2c\x75\x4d\x78\x3f\x35\xd7\xb6\xab\xb5\xa3\xeb\x89\x90\xb3\x30\x25\x44\x5e\xa8\x4a\xc1\xd5\xba\xeb\xf4\x07\x00\x00\xff\xff\x0e\x97\x7a\x0e\x46\x00\x00\x00") - -func _1630401853_add_opensea_enabled_to_settingsUpSqlBytes() ([]byte, error) { - return bindataRead( - __1630401853_add_opensea_enabled_to_settingsUpSql, - "1630401853_add_opensea_enabled_to_settings.up.sql", - ) -} - -func _1630401853_add_opensea_enabled_to_settingsUpSql() (*asset, error) { - bytes, err := _1630401853_add_opensea_enabled_to_settingsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1630401853_add_opensea_enabled_to_settings.up.sql", size: 70, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1630464455_createSaved_addressesTableDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\x4e\x2c\x4b\x4d\x89\x4f\x4c\x49\x29\x4a\x2d\x2e\x4e\x2d\xb6\xe6\x02\x04\x00\x00\xff\xff\xa5\x19\xd2\x59\x1c\x00\x00\x00") - -func _1630464455_createSaved_addressesTableDownSqlBytes() ([]byte, error) { - return bindataRead( - __1630464455_createSaved_addressesTableDownSql, - "1630464455_create-saved_addresses-table.down.sql", - ) -} - -func _1630464455_createSaved_addressesTableDownSql() (*asset, error) { - bytes, err := _1630464455_createSaved_addressesTableDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.down.sql", size: 28, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1630464455_createSaved_addressesTableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcd\xc1\xca\x82\x40\x14\x05\xe0\xfd\x3c\xc5\x59\x2a\xf8\x06\xff\x6a\xd4\xfb\xeb\x25\x1b\xe3\x7a\x4d\x5d\x89\x30\xb3\x88\xa8\xc0\x89\x7a\xfd\x20\x8a\x70\x79\x0e\x1f\xe7\x14\x42\x56\x09\x6a\xf3\x86\xc0\xff\x70\xad\x82\x46\xee\xb4\x43\x5c\x1e\xc1\xcf\x8b\xf7\x6b\x88\x31\x44\x24\x06\xf8\x24\x1c\xad\x14\xb5\x95\x37\x77\x7d\xd3\x64\x06\xb8\x86\xfb\xf3\xb6\x9e\xe7\x93\x47\xef\x3a\xae\x1c\x95\xc8\xb9\x62\xa7\x5b\xb6\x5c\x02\x94\xc6\x6d\x7b\x10\xde\x5b\x99\xb0\xa3\x09\xc9\x6f\x29\xfb\x3e\xa6\x26\xc5\xc0\x5a\xb7\xbd\x42\xda\x81\xcb\x3f\xf3\x0a\x00\x00\xff\xff\x02\x6b\x7f\x7c\xbb\x00\x00\x00") - -func _1630464455_createSaved_addressesTableUpSqlBytes() ([]byte, error) { - return bindataRead( - __1630464455_createSaved_addressesTableUpSql, - "1630464455_create-saved_addresses-table.up.sql", - ) -} - -func _1630464455_createSaved_addressesTableUpSql() (*asset, error) { - bytes, err := _1630464455_createSaved_addressesTableUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.up.sql", size: 187, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1630485153_networksDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\xc8\x4b\x2d\x29\xcf\x2f\xca\x2e\xb6\xe6\x02\x04\x00\x00\xff\xff\xbd\xca\x6a\x0e\x15\x00\x00\x00") - -func _1630485153_networksDownSqlBytes() ([]byte, error) { - return bindataRead( - __1630485153_networksDownSql, - "1630485153_networks.down.sql", - ) -} - -func _1630485153_networksDownSql() (*asset, error) { - bytes, err := _1630485153_networksDownSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1630485153_networks.down.sql", size: 21, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1630485153_networksUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\x4d\x4e\xc3\x30\x10\x85\xf7\x39\xc5\x2c\x5b\x89\x1b\xb0\x72\x5a\xd3\x8e\x08\x0e\x72\x1c\x4a\x57\x96\xe3\x8c\x84\x55\xc7\xae\xec\x14\xc8\xed\x51\x2a\xf1\x53\xa8\xd8\xbe\xef\x9b\x79\x9a\x59\x49\xce\x14\x07\xc5\xca\x8a\x03\xde\x81\xa8\x15\xf0\x67\x6c\x54\x03\x81\xc6\xb7\x98\x0e\x19\x16\x05\x80\x7d\x31\x2e\x68\xd7\x43\x2b\x1a\xdc\x08\xbe\x86\x12\x37\x28\xd4\x79\x40\xb4\x55\x75\xf3\x25\x05\x33\x10\x3c\x31\xb9\xda\x32\x79\x81\xd3\xd1\xea\x53\xf2\x57\x59\xe7\xa3\x3d\x68\x7a\x3f\xfa\x98\x28\xfd\xd4\x66\xea\x6c\x0c\xbf\xb3\x60\x46\xf7\x4a\xda\x9e\x52\xa2\x60\xa7\x8b\xda\x6b\x3c\x4f\x43\x17\xff\xdd\xd0\x93\x75\x83\xf1\xf9\xfb\x46\x14\xea\x5c\x9f\xf5\x48\x79\x84\xb2\xae\x2b\xce\xc4\x1c\x79\x33\x51\xfa\x23\x52\x30\x9d\xa7\x1e\xca\x18\x3d\x99\x30\x47\x8f\x12\x1f\x98\xdc\xc3\x3d\xdf\xc3\xe2\xf3\x8b\xcb\x62\x09\x3b\x54\xdb\xba\x55\x20\xeb\x1d\xae\x6f\x8b\xe2\x23\x00\x00\xff\xff\x47\xbc\x43\xc3\x8a\x01\x00\x00") - -func _1630485153_networksUpSqlBytes() ([]byte, error) { - return bindataRead( - __1630485153_networksUpSql, - "1630485153_networks.up.sql", - ) -} - -func _1630485153_networksUpSql() (*asset, error) { - bytes, err := _1630485153_networksUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1630485153_networks.up.sql", size: 394, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1632262444_profile_pictures_show_toUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x28\xca\x4f\xcb\xcc\x49\x8d\x2f\xc8\x4c\x2e\x29\x2d\x4a\x2d\x8e\x2f\xce\xc8\x2f\x8f\x2f\xc9\x57\xf0\xf4\x0b\x51\xf0\xf3\x0f\x51\xf0\x0b\xf5\xf1\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\x2f\x7a\xa3\xb9\x51\x00\x00\x00") - -func _1632262444_profile_pictures_show_toUpSqlBytes() ([]byte, error) { - return bindataRead( - __1632262444_profile_pictures_show_toUpSql, - "1632262444_profile_pictures_show_to.up.sql", - ) -} - -func _1632262444_profile_pictures_show_toUpSql() (*asset, error) { - bytes, err := _1632262444_profile_pictures_show_toUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1632262444_profile_pictures_show_to.up.sql", size: 81, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1635942153_add_telemetry_server_url_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\xb1\x0a\xc2\x40\x0c\x06\xe0\xdd\xa7\xf8\xe9\x6b\x88\x43\xec\x45\x1c\xe2\x55\xce\xc4\xb5\x53\x10\xa1\x3a\xe4\xa2\xe0\xdb\x8b\x9b\x43\xf7\x8f\x8f\x44\xb9\x41\x69\x2f\x8c\xee\x99\xf7\xe7\xad\x83\x4a\xc1\x38\x89\x9d\x2a\xd2\x17\x7f\x78\xc6\x67\xee\x1e\x6f\x8f\xf9\x15\x0b\xae\xd4\xc6\x23\x35\xd4\x49\x51\x4d\x04\x85\x0f\x64\xa2\x18\x86\xed\xc6\xce\x85\xf4\x2f\xbb\xb0\xae\x2f\xbb\x1f\xff\x06\x00\x00\xff\xff\xfb\x7a\x10\xdd\x80\x00\x00\x00") - -func _1635942153_add_telemetry_server_url_to_settingsUpSqlBytes() ([]byte, error) { - return bindataRead( - __1635942153_add_telemetry_server_url_to_settingsUpSql, - "1635942153_add_telemetry_server_url_to_settings.up.sql", - ) -} - -func _1635942153_add_telemetry_server_url_to_settingsUpSql() (*asset, error) { - bytes, err := _1635942153_add_telemetry_server_url_to_settingsUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1635942153_add_telemetry_server_url_to_settings.up.sql", size: 128, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1635942154_add_backup_settingUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\xcf\xcb\x0a\xc2\x30\x10\x85\xe1\x7d\x9f\xe2\x3c\x82\xae\x4b\x17\x53\x33\x05\x61\x4c\xa4\x9d\xac\x4b\x5b\xe3\x05\x4b\x11\x12\xdf\x5f\xc4\x0b\x22\x62\xf7\xc3\x37\xff\x21\x51\xae\xa1\x54\x0a\x23\x86\x94\x4e\xd3\x21\x82\x8c\xc1\xca\x89\xdf\x58\xf4\xdd\x70\xbe\x5e\xda\x30\x75\xfd\x18\x76\x28\x9d\x13\x26\x0b\xc3\x15\x79\x51\x68\xed\x39\xcf\xe6\x90\xb1\x8b\xa9\x7d\x48\x58\x5b\x85\x75\x0a\xeb\x45\xde\xcc\x62\xde\x78\x86\xec\x43\x1a\x8e\x3f\x42\x2a\x92\x86\xf3\xcc\x6f\x0d\xe9\x07\xd0\xb0\x7e\x4f\x28\xb0\xfc\x7b\xf7\xfa\x50\xdc\xab\x6e\x01\x00\x00\xff\xff\x3f\xf3\xd1\x35\x1f\x01\x00\x00") - -func _1635942154_add_backup_settingUpSqlBytes() ([]byte, error) { - return bindataRead( - __1635942154_add_backup_settingUpSql, - "1635942154_add_backup_setting.up.sql", - ) -} - -func _1635942154_add_backup_settingUpSql() (*asset, error) { - bytes, err := _1635942154_add_backup_settingUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1635942154_add_backup_setting.up.sql", size: 287, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var __1637745568_add_auto_message_settingUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\x31\x0e\xc2\x30\x0c\x05\xd0\xbd\xa7\xf8\x47\x60\xaf\x18\x5c\xec\x4e\xa6\x41\xd4\x99\xa3\x20\xac\x08\x09\xc2\xe0\x70\x7f\x56\x06\x0e\xf0\x1e\xa9\xc9\x15\x46\x8b\x0a\xc2\xc7\x78\xf4\x16\x20\x66\x9c\x92\xe6\xf3\x86\xfa\x19\xef\xf2\xf2\x88\xda\xbc\x78\xaf\xb7\xa7\xdf\xb1\xa4\xa4\x42\x1b\x58\x56\xca\x6a\x58\x49\x77\x99\xa7\x7c\x61\xb2\x9f\x66\x17\xfb\xef\x8f\x38\xcc\xd3\x37\x00\x00\xff\xff\x2f\xce\x8b\x0f\x7a\x00\x00\x00") - -func _1637745568_add_auto_message_settingUpSqlBytes() ([]byte, error) { - return bindataRead( - __1637745568_add_auto_message_settingUpSql, - "1637745568_add_auto_message_setting.up.sql", - ) -} - -func _1637745568_add_auto_message_settingUpSql() (*asset, error) { - bytes, err := _1637745568_add_auto_message_settingUpSqlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "1637745568_add_auto_message_setting.up.sql", size: 122, mode: os.FileMode(436), modTime: time.Unix(1638182856, 0)} + info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1184,7 +104,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(436), modTime: time.Unix(1638181820, 0)} + info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(436), modTime: time.Unix(1641317704, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1241,59 +161,8 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "0001_app.down.sql": _0001_appDownSql, - "0001_app.up.sql": _0001_appUpSql, - "0002_tokens.down.sql": _0002_tokensDownSql, - "0002_tokens.up.sql": _0002_tokensUpSql, - "0003_settings.down.sql": _0003_settingsDownSql, - "0003_settings.up.sql": _0003_settingsUpSql, - "0004_pending_stickers.down.sql": _0004_pending_stickersDownSql, - "0004_pending_stickers.up.sql": _0004_pending_stickersUpSql, - "0005_waku_mode.down.sql": _0005_waku_modeDownSql, - "0005_waku_mode.up.sql": _0005_waku_modeUpSql, - "0006_appearance.up.sql": _0006_appearanceUpSql, - "0007_enable_waku_default.up.sql": _0007_enable_waku_defaultUpSql, - "0008_add_push_notifications.up.sql": _0008_add_push_notificationsUpSql, - "0009_enable_sending_push_notifications.down.sql": _0009_enable_sending_push_notificationsDownSql, - "0009_enable_sending_push_notifications.up.sql": _0009_enable_sending_push_notificationsUpSql, - "0010_add_block_mentions.down.sql": _0010_add_block_mentionsDownSql, - "0010_add_block_mentions.up.sql": _0010_add_block_mentionsUpSql, - "0011_allow_webview_permission_requests.down.sql": _0011_allow_webview_permission_requestsDownSql, - "0011_allow_webview_permission_requests.up.sql": _0011_allow_webview_permission_requestsUpSql, - "0012_pending_transactions.down.sql": _0012_pending_transactionsDownSql, - "0012_pending_transactions.up.sql": _0012_pending_transactionsUpSql, - "0013_favourites.down.sql": _0013_favouritesDownSql, - "0013_favourites.up.sql": _0013_favouritesUpSql, - "0014_add_use_mailservers.down.sql": _0014_add_use_mailserversDownSql, - "0014_add_use_mailservers.up.sql": _0014_add_use_mailserversUpSql, - "0015_link_previews.down.sql": _0015_link_previewsDownSql, - "0015_link_previews.up.sql": _0015_link_previewsUpSql, - "0016_local_notifications_preferences.down.sql": _0016_local_notifications_preferencesDownSql, - "0016_local_notifications_preferences.up.sql": _0016_local_notifications_preferencesUpSql, - "0017_bookmarks.down.sql": _0017_bookmarksDownSql, - "0017_bookmarks.up.sql": _0017_bookmarksUpSql, - "0018_profile_pictures_visibility.up.sql": _0018_profile_pictures_visibilityUpSql, - "0019_blocks_ranges_extra_data.up.sql": _0019_blocks_ranges_extra_dataUpSql, - "0020_metrics.up.sql": _0020_metricsUpSql, - "0021_add_session_id_to_metrics.up.sql": _0021_add_session_id_to_metricsUpSql, - "0022_pending_transfers.up.sql": _0022_pending_transfersUpSql, - "1618237885_settings_anon_metrics_should_send.up.sql": _1618237885_settings_anon_metrics_should_sendUpSql, - "1618395756_contacts_only.up.sql": _1618395756_contacts_onlyUpSql, - "1622184614_add_default_sync_period.up.sql": _1622184614_add_default_sync_periodUpSql, - "1625872445_user_status.up.sql": _1625872445_user_statusUpSql, - "1627983977_add_gif_to_settings.up.sql": _1627983977_add_gif_to_settingsUpSql, - "1628580203_add_hidden_account.up.sql": _1628580203_add_hidden_accountUpSql, - "1629123384_add_id_to_app_metrics.up.sql": _1629123384_add_id_to_app_metricsUpSql, - "1630401853_add_opensea_enabled_to_settings.up.sql": _1630401853_add_opensea_enabled_to_settingsUpSql, - "1630464455_create-saved_addresses-table.down.sql": _1630464455_createSaved_addressesTableDownSql, - "1630464455_create-saved_addresses-table.up.sql": _1630464455_createSaved_addressesTableUpSql, - "1630485153_networks.down.sql": _1630485153_networksDownSql, - "1630485153_networks.up.sql": _1630485153_networksUpSql, - "1632262444_profile_pictures_show_to.up.sql": _1632262444_profile_pictures_show_toUpSql, - "1635942153_add_telemetry_server_url_to_settings.up.sql": _1635942153_add_telemetry_server_url_to_settingsUpSql, - "1635942154_add_backup_setting.up.sql": _1635942154_add_backup_settingUpSql, - "1637745568_add_auto_message_setting.up.sql": _1637745568_add_auto_message_settingUpSql, - "doc.go": docGo, + "1640111208_dummy.up.sql": _1640111208_dummyUpSql, + "doc.go": docGo, } // AssetDir returns the file names below a certain @@ -1335,61 +204,9 @@ type bintree struct { Func func() (*asset, error) Children map[string]*bintree } - var _bintree = &bintree{nil, map[string]*bintree{ - "0001_app.down.sql": &bintree{_0001_appDownSql, map[string]*bintree{}}, - "0001_app.up.sql": &bintree{_0001_appUpSql, map[string]*bintree{}}, - "0002_tokens.down.sql": &bintree{_0002_tokensDownSql, map[string]*bintree{}}, - "0002_tokens.up.sql": &bintree{_0002_tokensUpSql, map[string]*bintree{}}, - "0003_settings.down.sql": &bintree{_0003_settingsDownSql, map[string]*bintree{}}, - "0003_settings.up.sql": &bintree{_0003_settingsUpSql, map[string]*bintree{}}, - "0004_pending_stickers.down.sql": &bintree{_0004_pending_stickersDownSql, map[string]*bintree{}}, - "0004_pending_stickers.up.sql": &bintree{_0004_pending_stickersUpSql, map[string]*bintree{}}, - "0005_waku_mode.down.sql": &bintree{_0005_waku_modeDownSql, map[string]*bintree{}}, - "0005_waku_mode.up.sql": &bintree{_0005_waku_modeUpSql, map[string]*bintree{}}, - "0006_appearance.up.sql": &bintree{_0006_appearanceUpSql, map[string]*bintree{}}, - "0007_enable_waku_default.up.sql": &bintree{_0007_enable_waku_defaultUpSql, map[string]*bintree{}}, - "0008_add_push_notifications.up.sql": &bintree{_0008_add_push_notificationsUpSql, map[string]*bintree{}}, - "0009_enable_sending_push_notifications.down.sql": &bintree{_0009_enable_sending_push_notificationsDownSql, map[string]*bintree{}}, - "0009_enable_sending_push_notifications.up.sql": &bintree{_0009_enable_sending_push_notificationsUpSql, map[string]*bintree{}}, - "0010_add_block_mentions.down.sql": &bintree{_0010_add_block_mentionsDownSql, map[string]*bintree{}}, - "0010_add_block_mentions.up.sql": &bintree{_0010_add_block_mentionsUpSql, map[string]*bintree{}}, - "0011_allow_webview_permission_requests.down.sql": &bintree{_0011_allow_webview_permission_requestsDownSql, map[string]*bintree{}}, - "0011_allow_webview_permission_requests.up.sql": &bintree{_0011_allow_webview_permission_requestsUpSql, map[string]*bintree{}}, - "0012_pending_transactions.down.sql": &bintree{_0012_pending_transactionsDownSql, map[string]*bintree{}}, - "0012_pending_transactions.up.sql": &bintree{_0012_pending_transactionsUpSql, map[string]*bintree{}}, - "0013_favourites.down.sql": &bintree{_0013_favouritesDownSql, map[string]*bintree{}}, - "0013_favourites.up.sql": &bintree{_0013_favouritesUpSql, map[string]*bintree{}}, - "0014_add_use_mailservers.down.sql": &bintree{_0014_add_use_mailserversDownSql, map[string]*bintree{}}, - "0014_add_use_mailservers.up.sql": &bintree{_0014_add_use_mailserversUpSql, map[string]*bintree{}}, - "0015_link_previews.down.sql": &bintree{_0015_link_previewsDownSql, map[string]*bintree{}}, - "0015_link_previews.up.sql": &bintree{_0015_link_previewsUpSql, map[string]*bintree{}}, - "0016_local_notifications_preferences.down.sql": &bintree{_0016_local_notifications_preferencesDownSql, map[string]*bintree{}}, - "0016_local_notifications_preferences.up.sql": &bintree{_0016_local_notifications_preferencesUpSql, map[string]*bintree{}}, - "0017_bookmarks.down.sql": &bintree{_0017_bookmarksDownSql, map[string]*bintree{}}, - "0017_bookmarks.up.sql": &bintree{_0017_bookmarksUpSql, map[string]*bintree{}}, - "0018_profile_pictures_visibility.up.sql": &bintree{_0018_profile_pictures_visibilityUpSql, map[string]*bintree{}}, - "0019_blocks_ranges_extra_data.up.sql": &bintree{_0019_blocks_ranges_extra_dataUpSql, map[string]*bintree{}}, - "0020_metrics.up.sql": &bintree{_0020_metricsUpSql, map[string]*bintree{}}, - "0021_add_session_id_to_metrics.up.sql": &bintree{_0021_add_session_id_to_metricsUpSql, map[string]*bintree{}}, - "0022_pending_transfers.up.sql": &bintree{_0022_pending_transfersUpSql, map[string]*bintree{}}, - "1618237885_settings_anon_metrics_should_send.up.sql": &bintree{_1618237885_settings_anon_metrics_should_sendUpSql, map[string]*bintree{}}, - "1618395756_contacts_only.up.sql": &bintree{_1618395756_contacts_onlyUpSql, map[string]*bintree{}}, - "1622184614_add_default_sync_period.up.sql": &bintree{_1622184614_add_default_sync_periodUpSql, map[string]*bintree{}}, - "1625872445_user_status.up.sql": &bintree{_1625872445_user_statusUpSql, map[string]*bintree{}}, - "1627983977_add_gif_to_settings.up.sql": &bintree{_1627983977_add_gif_to_settingsUpSql, map[string]*bintree{}}, - "1628580203_add_hidden_account.up.sql": &bintree{_1628580203_add_hidden_accountUpSql, map[string]*bintree{}}, - "1629123384_add_id_to_app_metrics.up.sql": &bintree{_1629123384_add_id_to_app_metricsUpSql, map[string]*bintree{}}, - "1630401853_add_opensea_enabled_to_settings.up.sql": &bintree{_1630401853_add_opensea_enabled_to_settingsUpSql, map[string]*bintree{}}, - "1630464455_create-saved_addresses-table.down.sql": &bintree{_1630464455_createSaved_addressesTableDownSql, map[string]*bintree{}}, - "1630464455_create-saved_addresses-table.up.sql": &bintree{_1630464455_createSaved_addressesTableUpSql, map[string]*bintree{}}, - "1630485153_networks.down.sql": &bintree{_1630485153_networksDownSql, map[string]*bintree{}}, - "1630485153_networks.up.sql": &bintree{_1630485153_networksUpSql, map[string]*bintree{}}, - "1632262444_profile_pictures_show_to.up.sql": &bintree{_1632262444_profile_pictures_show_toUpSql, map[string]*bintree{}}, - "1635942153_add_telemetry_server_url_to_settings.up.sql": &bintree{_1635942153_add_telemetry_server_url_to_settingsUpSql, map[string]*bintree{}}, - "1635942154_add_backup_setting.up.sql": &bintree{_1635942154_add_backup_settingUpSql, map[string]*bintree{}}, - "1637745568_add_auto_message_setting.up.sql": &bintree{_1637745568_add_auto_message_settingUpSql, map[string]*bintree{}}, - "doc.go": &bintree{docGo, map[string]*bintree{}}, + "1640111208_dummy.up.sql": &bintree{_1640111208_dummyUpSql, map[string]*bintree{}}, + "doc.go": &bintree{docGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory @@ -1438,3 +255,4 @@ func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } + diff --git a/appdatabase/migrations/sql/1640111208_dummy.up.sql b/appdatabase/migrations/sql/1640111208_dummy.up.sql new file mode 100644 index 000000000..a424e1c0e --- /dev/null +++ b/appdatabase/migrations/sql/1640111208_dummy.up.sql @@ -0,0 +1,6 @@ +-- DO NOT REMOVE +-- ----------------------------- +-- This file does nothing +-- It's created so the migration knows from which sql file to continue since +-- the migration has been splitted in two (before, and after nodecfg extraction) +-- Do not add code here \ No newline at end of file diff --git a/appdatabase/migrationsprevnodecfg/bindata.go b/appdatabase/migrationsprevnodecfg/bindata.go new file mode 100644 index 000000000..c7bd1eb50 --- /dev/null +++ b/appdatabase/migrationsprevnodecfg/bindata.go @@ -0,0 +1,1454 @@ +// Code generated by go-bindata. +// sources: +// 0001_app.down.sql +// 0001_app.up.sql +// 0002_tokens.down.sql +// 0002_tokens.up.sql +// 0003_settings.down.sql +// 0003_settings.up.sql +// 0004_pending_stickers.down.sql +// 0004_pending_stickers.up.sql +// 0005_waku_mode.down.sql +// 0005_waku_mode.up.sql +// 0006_appearance.up.sql +// 0007_enable_waku_default.up.sql +// 0008_add_push_notifications.up.sql +// 0009_enable_sending_push_notifications.down.sql +// 0009_enable_sending_push_notifications.up.sql +// 0010_add_block_mentions.down.sql +// 0010_add_block_mentions.up.sql +// 0011_allow_webview_permission_requests.down.sql +// 0011_allow_webview_permission_requests.up.sql +// 0012_pending_transactions.down.sql +// 0012_pending_transactions.up.sql +// 0013_favourites.down.sql +// 0013_favourites.up.sql +// 0014_add_use_mailservers.down.sql +// 0014_add_use_mailservers.up.sql +// 0015_link_previews.down.sql +// 0015_link_previews.up.sql +// 0016_local_notifications_preferences.down.sql +// 0016_local_notifications_preferences.up.sql +// 0017_bookmarks.down.sql +// 0017_bookmarks.up.sql +// 0018_profile_pictures_visibility.up.sql +// 0019_blocks_ranges_extra_data.up.sql +// 0020_metrics.up.sql +// 0021_add_session_id_to_metrics.up.sql +// 0022_pending_transfers.up.sql +// 1618237885_settings_anon_metrics_should_send.up.sql +// 1618395756_contacts_only.up.sql +// 1622184614_add_default_sync_period.up.sql +// 1625872445_user_status.up.sql +// 1627983977_add_gif_to_settings.up.sql +// 1628580203_add_hidden_account.up.sql +// 1629123384_add_id_to_app_metrics.up.sql +// 1630401853_add_opensea_enabled_to_settings.up.sql +// 1630464455_create-saved_addresses-table.down.sql +// 1630464455_create-saved_addresses-table.up.sql +// 1630485153_networks.down.sql +// 1630485153_networks.up.sql +// 1632262444_profile_pictures_show_to.up.sql +// 1635942153_add_telemetry_server_url_to_settings.up.sql +// 1635942154_add_backup_setting.up.sql +// 1637745568_add_auto_message_setting.up.sql +// 1640111208_nodeconfig.up.sql +// doc.go +// DO NOT EDIT! + +package migrationsprevnodecfg + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var __0001_appDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcd\xcb\xaa\xc2\x40\x0c\xc6\xf1\x7d\x9f\xa2\xef\xd1\xd5\x39\xb4\x0b\x41\x54\xc4\x85\xbb\x21\x4e\x63\x1b\x6c\x27\x63\x92\x7a\x79\x7b\x41\xf0\x32\xea\x6c\x7f\xf9\xf8\xa7\x5e\x2f\x57\xe5\xe6\xef\x7f\xde\x94\x8a\x66\x14\x3a\xad\x8a\x37\x04\xef\x79\x0a\x96\xe2\x4e\xf8\xac\x28\xbf\xd1\xf5\xa4\xc6\x72\x4d\x8e\x2d\xc4\x98\xce\x23\xca\x48\xaa\xc4\x21\x75\x13\x08\xba\xff\x8a\x0f\xec\x0f\x29\x8d\x40\x83\xa2\x9c\x3e\xa7\x2f\x77\x82\xc7\x09\xd5\x5c\x07\xcf\xe7\xb3\x45\xdd\x6c\x73\x1b\xe7\x7b\x30\x47\xad\xa3\xf6\x92\x6b\x1a\x47\xf2\xd9\x8f\xf7\xc0\x23\x29\x10\x3a\xd4\xaa\xb8\x05\x00\x00\xff\xff\xf6\xca\x86\xce\x64\x01\x00\x00") + +func _0001_appDownSqlBytes() ([]byte, error) { + return bindataRead( + __0001_appDownSql, + "0001_app.down.sql", + ) +} + +func _0001_appDownSql() (*asset, error) { + bytes, err := _0001_appDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0001_app.down.sql", size: 356, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0001_appUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x4f\x73\xa2\x30\x14\xbf\xf3\x29\x72\xd4\x19\x2e\x7b\xee\x09\x35\x5a\x66\x29\xec\x22\x6e\xdb\x53\x26\x42\xc4\x8c\x40\xd2\x24\xd4\xfa\xed\x77\x02\x04\x50\x41\xeb\xce\xde\x4c\xde\xcb\xe3\xf7\xe7\xe5\xc5\x79\x08\x9d\x08\x82\xc8\x99\x79\x10\xb8\x4b\xe0\x07\x11\x80\x6f\xee\x3a\x5a\x03\x49\x94\xa2\x45\x2a\xc1\xc4\x52\x27\x4e\xc0\x1f\x27\x9c\x3f\x3b\x21\xf8\x15\xba\x2f\x4e\xf8\x0e\x7e\xc2\x77\xdb\xfa\xc4\x59\x49\xc0\xcc\x0b\x66\xd6\x14\xbc\xba\xd1\x73\xb0\x89\x40\x18\xbc\xba\x8b\x27\xcb\xba\x51\x1c\xc7\x31\x2b\x0b\xa5\x8b\xe3\x24\x11\x44\xca\xe1\xfa\x47\x9c\x65\x44\x81\x59\x10\x78\xd0\xf1\x6d\x2b\xde\xe3\xde\xaa\xc2\x15\xc1\xb7\xc8\xb6\xa4\x62\x02\xa7\x66\xc5\xcb\xed\x81\x9c\x2a\x5c\xb6\xc5\xb1\xda\x37\xfb\x05\xce\x4d\x4a\xcc\x32\x26\xcc\x6f\x41\xb0\x22\x09\xc2\x0a\x2c\x9c\x08\x46\xee\x0b\xac\xc0\xfa\x1b\xcf\xb3\xad\x92\x27\xa3\xd1\x71\xd6\x1b\xdf\xfd\xbd\x81\xc0\xf5\x17\xf0\x0d\x94\x05\xfd\x28\x09\xaa\xd9\x20\xc3\x38\xf0\x7b\x3a\xd4\xb1\x29\x78\x7d\x86\x21\x6c\x97\x4f\xb7\xca\x69\x31\x86\x8b\xe9\x48\x5b\xaa\x5a\xb4\x85\xea\x0a\x1d\x63\xd4\x9c\xba\x28\xd0\xc6\xbb\x32\xdd\xd6\x6d\x6f\xb7\x82\x1d\x25\x11\xda\x5b\x9a\x54\x0a\x9f\x7b\xda\x9a\xd0\xd3\x58\xd1\x9c\x48\x85\x73\x0e\x36\xeb\x95\xbb\xf2\xe1\x02\xcc\xdc\x95\xeb\x47\xb6\x95\x60\xce\x8d\xe5\x60\x01\x97\xce\xc6\x8b\xc0\x0e\x67\x92\xd8\xd6\x9e\x6a\xdf\x4f\x6e\x91\x90\x2f\xb0\xf1\xd7\xf5\x49\xd7\x8f\x1e\xeb\x46\x83\x18\x35\xf5\xc0\xc4\x6a\xb6\x90\x61\xd0\x41\x35\x39\x75\xeb\x2c\x83\x10\xba\x2b\x5f\x33\x9b\x74\x67\xa6\x20\x84\x4b\x18\x42\x7f\x0e\xbb\xea\x13\xbd\x1f\x68\x0e\x1e\x8c\x20\x98\x3b\xeb\xb9\xb3\x80\xd6\x1d\x35\x35\x7d\x2d\x65\xa7\x5a\x4f\xcc\xc7\x68\x72\x22\x72\x2a\x25\x65\x85\x2e\xa8\x0b\xa3\x21\x2f\xba\xb4\xcb\x48\x9f\x6c\x7b\xfc\x8c\x6b\x85\x76\x52\x6f\x0f\x53\xbd\x05\x50\x09\x5c\xc8\x5d\xdd\x3a\x05\x51\x47\x26\x0e\xda\x80\xd6\xd8\xba\x25\xfa\x5e\x60\xb9\x6f\x07\x47\xb7\x7d\x39\x52\xba\xc8\x36\x3b\xa0\x91\x43\xea\xab\x99\x17\x92\x14\x09\x11\x26\xc3\xb6\x04\x89\x09\xe5\xaa\x89\x66\x2c\x6d\x7e\x9d\x4d\xc5\xf3\x4f\x14\x65\xbe\x25\xe2\x1a\x6f\xaf\xcd\x47\x39\x65\x0c\x27\x24\xa9\x3a\xbe\x6d\xf7\x1f\xe7\xda\x77\xda\xd8\x0d\x55\xdb\x10\x3b\xef\xbc\x8c\xc5\x07\x79\x3b\xfd\xca\x25\xdb\x9a\x07\xfe\x3a\x0a\x1d\x0d\xab\x99\x34\xc6\x18\xc4\x89\x30\x13\xa7\xfa\xdd\x94\x36\xe3\x69\xa2\x6b\xb6\x1f\xe9\xbe\x3b\xbd\xd7\xe5\x35\xd2\xef\xda\x7e\xdb\xdf\x31\xf1\x5b\xef\xbf\x25\xf9\xd2\xf1\xd6\x83\x5a\xe4\x98\x73\x5a\xa4\x68\xc7\x84\x99\x9d\x48\x31\x54\x31\x18\xd4\xe4\x52\xf3\xc7\x75\x41\x02\x17\x29\xf9\x4f\xf2\xec\x04\xcb\x87\xc5\x51\xec\x72\xff\x1e\xbc\x1c\xd3\x4c\x12\xf1\x59\x5f\x59\x00\x00\xa0\xc9\xf0\x43\xae\x63\xd5\xb0\xb9\x06\xa5\x43\xe3\x90\x75\x94\x63\x29\x8f\x4c\x24\xdd\x9d\xd4\xbb\xbb\x8c\x10\x75\x75\xe2\xb1\x91\xd8\x11\x40\x82\x7c\x94\x44\x2a\x94\x62\x6e\xc8\xa4\x98\xd7\x72\xf5\x9f\x16\xb8\x82\x97\xf8\x74\x9e\x62\xf7\xb2\x06\x1f\x43\x1d\xa8\xde\xf1\xcb\x87\x66\x9c\x47\xfd\x82\x8f\x20\x47\x4d\x31\x44\x93\x2f\x7d\xb7\x47\x09\x36\x79\xdf\x36\x18\x29\xc6\x69\x6c\x94\xa9\x16\xe3\x4e\x37\xc5\xe5\xb9\x61\x19\x96\xca\xa0\x68\x35\xea\x8d\x38\x9d\x93\x50\x19\xb3\x4f\x22\x4e\x57\x4f\x7e\x73\x21\xab\x46\x22\x29\x53\x54\xff\x1b\x19\xce\xfa\xe7\x1e\xa8\x70\x1b\x9d\xda\x4b\xd7\xf7\x68\x94\x72\xc6\x8e\xa4\xa3\x57\xb7\x4d\xc3\xb1\x4e\xd8\xd3\x74\xdf\xcf\x50\xcc\xc4\xaf\xe1\xfe\x0d\x00\x00\xff\xff\xe8\x42\x77\x9b\x97\x0b\x00\x00") + +func _0001_appUpSqlBytes() ([]byte, error) { + return bindataRead( + __0001_appUpSql, + "0001_app.up.sql", + ) +} + +func _0001_appUpSql() (*asset, error) { + bytes, err := _0001_appUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0001_app.up.sql", size: 2967, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0002_tokensDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\xc9\xcf\x4e\xcd\x2b\xb6\xe6\x02\x04\x00\x00\xff\xff\xf0\xdb\x32\xa7\x13\x00\x00\x00") + +func _0002_tokensDownSqlBytes() ([]byte, error) { + return bindataRead( + __0002_tokensDownSql, + "0002_tokens.down.sql", + ) +} + +func _0002_tokensDownSql() (*asset, error) { + bytes, err := _0002_tokensDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0002_tokens.down.sql", size: 19, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0002_tokensUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8e\xcd\x6a\x85\x30\x10\x46\xf7\x79\x8a\x6f\x79\x05\xdf\xa0\xab\xa8\xa9\x0e\xb5\xb1\xc4\xb1\xea\xaa\x58\x93\x85\xf8\x13\x30\x42\xe9\xdb\x17\x4b\x4b\x2b\xdc\xed\x37\x67\x0e\x27\x35\x4a\xb2\x02\xcb\xa4\x54\xa0\x47\xe8\x8a\xa1\x3a\xaa\xb9\xc6\xe1\x67\xb7\x05\xdc\x04\x30\x58\xbb\xbb\x10\xf0\x2a\x4d\x5a\x48\xf3\x4d\xe9\xa6\x2c\x63\x01\x6c\xee\xf8\xf0\xfb\xfc\x36\x59\x34\xba\xa6\x5c\xab\x0c\x09\xe5\xa4\xf9\x8a\x0d\xab\x03\xab\xee\xba\x86\xcf\xf5\xdd\x2f\x77\xbd\xd6\x8d\xd3\x3a\x2c\xe1\xcf\x4a\x9a\xcf\xc3\xe8\x17\xbf\xff\xbe\x9c\xc3\x8b\xa1\x67\x69\x7a\x3c\xa9\x1e\xb7\x9f\xd4\xf8\x5f\x57\x24\x22\xb4\xc4\x45\xd5\x30\x4c\xd5\x52\xf6\x20\xc4\x57\x00\x00\x00\xff\xff\x73\xf3\x87\xe5\xf8\x00\x00\x00") + +func _0002_tokensUpSqlBytes() ([]byte, error) { + return bindataRead( + __0002_tokensUpSql, + "0002_tokens.up.sql", + ) +} + +func _0002_tokensUpSql() (*asset, error) { + bytes, err := _0002_tokensUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0002_tokens.up.sql", size: 248, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0003_settingsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\xca\xb1\x0a\xc2\x40\x0c\x06\xe0\x3d\x4f\xf1\x8f\x0a\xbe\x41\xa7\x5c\x1b\x69\xb0\x9a\x92\x46\x6b\x47\x87\x43\x04\x11\xe1\x4e\xc1\xb7\x77\x11\xd7\x8f\xaf\x73\x1b\x11\x9c\x06\x41\xc9\xb5\xde\x1e\xd7\xd2\x50\xeb\xc2\x21\x3f\xd6\x2d\x0e\x16\x90\xb3\x4e\x31\xfd\x13\x56\x04\xd4\xcf\x33\xe3\xc4\xde\xf6\xec\x18\x5d\xf7\xec\x0b\x76\xb2\x6c\x08\x78\x5f\xee\xaf\x8c\x34\x58\xa2\x35\x66\x8d\xde\x8e\x01\xb7\x59\xbb\x86\xe8\x1b\x00\x00\xff\xff\x49\x2e\x16\x6c\x76\x00\x00\x00") + +func _0003_settingsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0003_settingsDownSql, + "0003_settings.down.sql", + ) +} + +func _0003_settingsDownSql() (*asset, error) { + bytes, err := _0003_settingsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0003_settings.down.sql", size: 118, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0003_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x93\xbd\x6e\xdb\x30\x10\xc7\x77\x3f\x05\xb7\xb4\x40\x87\x66\x28\x50\x20\x93\x1c\xab\x89\x50\x57\x0a\x54\xb9\x41\xa6\x03\x4d\x9e\xad\x83\x29\x92\xe0\x51\x0e\xf4\xf6\x85\x1c\x45\x56\x53\xd9\x23\x79\xbf\xfb\xbe\xff\xaa\x2c\x9e\x44\x95\x2c\xd7\xa9\x60\x8c\x91\xec\x9e\xef\x16\xf7\x65\x9a\x54\xe9\x87\x6f\xf1\x69\x21\x84\xd4\x3a\x20\xb3\xf8\x93\x94\xf7\x8f\x49\x29\xf2\xa2\x12\xf9\x66\xbd\xfe\xb2\x10\x42\xd5\xd2\x31\x34\x4e\xa3\x58\x16\xc5\x3a\x4d\x72\xb1\x4a\x7f\x24\x9b\x75\x25\x76\xd2\x30\x9e\x98\x36\x04\xb4\xaa\x1b\x03\xbc\x13\x37\x2d\xeb\x9b\x33\x11\xc1\x62\x7c\x75\xe1\x30\x9f\xa9\xe5\xe8\x1a\xd8\x3a\x17\xad\xd3\xc8\x62\xb9\x2e\x96\x73\x06\x40\x2b\xb7\x06\xf5\x08\x68\xe9\x3d\xc3\xb5\x2e\x90\xfc\xed\xb7\xef\xb7\x1f\x99\xde\xb4\x33\x88\x71\xfa\x51\x93\x46\xa8\x5d\x83\x10\x9d\x33\x91\xfc\xe5\xc6\xc9\x72\x94\xc6\xc8\x48\xce\x02\xe9\xd9\xd4\x07\xec\xa0\xbd\x6c\x53\x32\x68\x38\xc5\xb1\x0a\xa7\xe0\xd4\xee\x25\x05\xd4\xe0\xac\xd8\xe4\xbf\xb3\x87\x3c\x5d\x89\x65\xf6\x90\xe5\xd5\x47\x88\xec\x7e\xea\x6f\x24\x47\x68\xbd\x96\x11\xf5\x9c\xab\x91\x11\x39\x82\xc6\x40\x47\xec\x23\xc4\xfa\x8c\x65\x79\x35\x76\xfc\xf5\x44\xbb\x3d\x18\x3c\xa2\x99\xa6\x68\x2c\x36\xce\x92\x9a\xfe\x59\xd9\xe0\x6c\xbf\xc3\xfa\xdf\x56\xfb\xaf\xc5\x69\x04\xe5\xec\x8e\xf6\xe3\x5a\xad\x8b\xb4\x23\x75\x9a\xee\x64\xe9\x97\x96\xe1\x6b\x17\xdd\x5b\x0f\xff\x85\xf7\x64\x2d\x6a\x68\x24\x19\xc6\x70\xc4\x70\xbe\x2e\x1f\x70\x87\xa1\x1f\xef\xb4\xec\xc1\x72\x24\x7c\x05\x1f\xe8\x28\x55\x77\x25\x73\xbb\x35\xa4\xe0\x80\xdd\x6c\xd7\x01\x1b\x6c\xb6\x18\x80\x3b\xab\xc8\xee\x41\xd5\x8e\xd4\x15\x3d\x31\xed\x6d\xcf\xf9\x3a\x48\x9e\x9f\x24\x47\x52\x07\x0c\x0c\x5e\xaa\x03\xc3\x70\x88\x13\x4d\x8c\x40\x40\xd5\x2b\xef\xfd\x7d\x06\x86\x62\x9c\x85\xc6\x6d\xc9\xe0\x28\xce\xcb\x75\x75\x36\xd6\x18\x49\x4d\x6f\x7d\xd4\x3a\xe9\x1b\xf1\x54\x66\xbf\x92\xf2\x45\xfc\x4c\x5f\x7a\x87\x96\x31\xf4\x53\x3d\x67\x7d\xed\xab\x8c\x10\x9c\x8b\x57\x05\x3b\x70\x8c\xfd\xfd\x82\x97\xcc\xd7\x56\x3f\xd0\x47\x62\xda\x9a\x5e\xb7\x07\xb4\x63\xdc\xc5\x67\xf1\x9c\x55\x8f\xc5\xa6\x12\x65\xf1\x9c\xad\xee\x16\x7f\x03\x00\x00\xff\xff\xa5\xa1\x7b\x78\x1f\x05\x00\x00") + +func _0003_settingsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0003_settingsUpSql, + "0003_settings.up.sql", + ) +} + +func _0003_settingsUpSql() (*asset, error) { + bytes, err := _0003_settingsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0003_settings.up.sql", size: 1311, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0004_pending_stickersDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") + +func _0004_pending_stickersDownSqlBytes() ([]byte, error) { + return bindataRead( + __0004_pending_stickersDownSql, + "0004_pending_stickers.down.sql", + ) +} + +func _0004_pending_stickersDownSql() (*asset, error) { + bytes, err := _0004_pending_stickersDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0004_pending_stickers.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0004_pending_stickersUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x2e\xc9\x4c\xce\x4e\x2d\x2a\x8e\x2f\x48\x4c\xce\x2e\x8e\x2f\x48\xcd\x4b\xc9\xcc\x4b\x57\x70\xf2\xf1\x77\xb2\xe6\x02\x04\x00\x00\xff\xff\xc9\xc1\xc2\xc6\x3d\x00\x00\x00") + +func _0004_pending_stickersUpSqlBytes() ([]byte, error) { + return bindataRead( + __0004_pending_stickersUpSql, + "0004_pending_stickers.up.sql", + ) +} + +func _0004_pending_stickersUpSql() (*asset, error) { + bytes, err := _0004_pending_stickersUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0004_pending_stickers.up.sql", size: 61, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0005_waku_modeDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") + +func _0005_waku_modeDownSqlBytes() ([]byte, error) { + return bindataRead( + __0005_waku_modeDownSql, + "0005_waku_mode.down.sql", + ) +} + +func _0005_waku_modeDownSql() (*asset, error) { + bytes, err := _0005_waku_modeDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0005_waku_mode.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0005_waku_modeUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x4f\xcc\x2e\x8d\x4f\xcd\x4b\x4c\xca\x49\x4d\x51\x70\xf2\xf7\xf7\x71\x75\xf4\x53\x70\x71\x75\x73\x0c\xf5\x09\x51\x48\x4b\xcc\x29\x4e\xb5\xe6\x22\xca\x8c\xa4\x9c\xfc\xfc\xdc\xf8\xb4\xcc\x9c\x92\xd4\xa2\xf8\xdc\xfc\x94\x54\x5c\xa6\x01\x02\x00\x00\xff\xff\x00\x97\x79\x75\x92\x00\x00\x00") + +func _0005_waku_modeUpSqlBytes() ([]byte, error) { + return bindataRead( + __0005_waku_modeUpSql, + "0005_waku_mode.up.sql", + ) +} + +func _0005_waku_modeUpSql() (*asset, error) { + bytes, err := _0005_waku_modeUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0005_waku_mode.up.sql", size: 146, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0006_appearanceUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x2c\x28\x48\x4d\x2c\x4a\xcc\x4b\x4e\x55\xf0\xf4\x0b\x51\xf0\xf3\x0f\x51\xf0\x0b\xf5\xf1\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x30\xb0\xe6\x02\x04\x00\x00\xff\xff\x0b\x18\x43\x21\x43\x00\x00\x00") + +func _0006_appearanceUpSqlBytes() ([]byte, error) { + return bindataRead( + __0006_appearanceUpSql, + "0006_appearance.up.sql", + ) +} + +func _0006_appearanceUpSql() (*asset, error) { + bytes, err := _0006_appearanceUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0006_appearance.up.sql", size: 67, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0007_enable_waku_defaultUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4f\xcc\x2e\x8d\x4f\xcd\x4b\x4c\xca\x49\x4d\x51\xb0\x55\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\xa7\x77\xcb\x82\x26\x00\x00\x00") + +func _0007_enable_waku_defaultUpSqlBytes() ([]byte, error) { + return bindataRead( + __0007_enable_waku_defaultUpSql, + "0007_enable_waku_default.up.sql", + ) +} + +func _0007_enable_waku_defaultUpSql() (*asset, error) { + bytes, err := _0007_enable_waku_defaultUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0007_enable_waku_default.up.sql", size: 38, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0008_add_push_notificationsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\xce\x51\x0e\x82\x30\x0c\x00\xd0\x7f\x4f\xd1\x7b\xf8\x35\x64\x7c\x55\x48\x70\x7c\x2f\x08\x45\x97\x40\x6b\xd6\x6a\xe2\xed\x3d\x80\x33\x9a\x78\x81\x97\xe7\x30\xf8\x1e\x82\xab\xd0\x83\x92\x59\xe2\x8b\x82\xab\x6b\x38\x74\x38\x1c\x5b\xc8\xb4\x89\x51\xbc\xdd\xf5\x1a\x59\x2c\x2d\x69\x1a\x2d\x09\x6b\x24\x1e\xcf\x2b\xcd\x50\x75\x1d\x7a\xd7\x42\xed\x1b\x37\x60\x80\xc6\xe1\xc9\xef\x77\xdf\x60\x25\x9e\x0b\xec\x1b\x17\xfa\xe1\x07\xad\xf0\x53\xca\x0f\xca\xff\x36\x0b\xf0\x92\x65\x8b\x93\xb0\x8d\x93\x69\x14\x5e\x9f\x9f\xf0\x57\x00\x00\x00\xff\xff\x30\xc0\x56\xbd\x5d\x01\x00\x00") + +func _0008_add_push_notificationsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0008_add_push_notificationsUpSql, + "0008_add_push_notifications.up.sql", + ) +} + +func _0008_add_push_notificationsUpSql() (*asset, error) { + bytes, err := _0008_add_push_notificationsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0008_add_push_notifications.up.sql", size: 349, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0009_enable_sending_push_notificationsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4e\xcd\x4b\x89\x2f\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x56\xb0\x55\x30\xb0\xe6\x02\x04\x00\x00\xff\xff\x57\x2d\xdb\x16\x31\x00\x00\x00") + +func _0009_enable_sending_push_notificationsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0009_enable_sending_push_notificationsDownSql, + "0009_enable_sending_push_notifications.down.sql", + ) +} + +func _0009_enable_sending_push_notificationsDownSql() (*asset, error) { + bytes, err := _0009_enable_sending_push_notificationsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0009_enable_sending_push_notifications.down.sql", size: 49, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0009_enable_sending_push_notificationsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\x0d\x70\x71\x0c\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x08\x76\x0d\x51\x28\x4e\xcd\x4b\x89\x2f\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x56\xb0\x55\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\x60\x47\x19\x17\x31\x00\x00\x00") + +func _0009_enable_sending_push_notificationsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0009_enable_sending_push_notificationsUpSql, + "0009_enable_sending_push_notifications.up.sql", + ) +} + +func _0009_enable_sending_push_notificationsUpSql() (*asset, error) { + bytes, err := _0009_enable_sending_push_notificationsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0009_enable_sending_push_notifications.up.sql", size: 49, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0010_add_block_mentionsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x28\x2d\xce\x88\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x8e\x4f\xca\xc9\x4f\xce\x8e\xcf\x4d\xcd\x03\x73\x15\x9c\xfc\xfd\x7d\x5c\x1d\xfd\x14\x5c\x5c\xdd\x1c\x43\x7d\x42\x14\xdc\x1c\x7d\x82\x5d\xad\xb9\x00\x01\x00\x00\xff\xff\xa8\x45\x75\x3b\x53\x00\x00\x00") + +func _0010_add_block_mentionsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0010_add_block_mentionsDownSql, + "0010_add_block_mentions.down.sql", + ) +} + +func _0010_add_block_mentionsDownSql() (*asset, error) { + bytes, err := _0010_add_block_mentionsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0010_add_block_mentions.down.sql", size: 83, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0010_add_block_mentionsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x1c\xc7\x31\x0a\x42\x31\x0c\x06\xe0\xdd\x53\xfc\xf7\x70\xca\xb3\x79\x53\x7c\x05\x6d\xe7\xa2\xa5\x6a\x50\x53\x21\xf1\xfe\x82\xe3\x47\x52\xf8\x84\x42\x8b\x30\x7c\x44\xa8\xdd\x1d\x94\x12\x0e\x59\xea\x71\xc3\xe7\xeb\x8f\x66\x33\xf4\xa6\xfd\x12\x3a\xcd\xdb\xf5\x35\xfb\xb3\xbd\x87\xfd\x89\x25\x67\x61\xda\x90\x78\xa5\x2a\x05\x2b\xc9\x99\xf7\xbb\x5f\x00\x00\x00\xff\xff\x2b\x4e\x3f\xc5\x59\x00\x00\x00") + +func _0010_add_block_mentionsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0010_add_block_mentionsUpSql, + "0010_add_block_mentions.up.sql", + ) +} + +func _0010_add_block_mentionsUpSql() (*asset, error) { + bytes, err := _0010_add_block_mentionsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0010_add_block_mentions.up.sql", size: 89, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0011_allow_webview_permission_requestsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") + +func _0011_allow_webview_permission_requestsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0011_allow_webview_permission_requestsDownSql, + "0011_allow_webview_permission_requests.down.sql", + ) +} + +func _0011_allow_webview_permission_requestsDownSql() (*asset, error) { + bytes, err := _0011_allow_webview_permission_requestsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0011_allow_webview_permission_requests.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0011_allow_webview_permission_requestsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x41\x0e\x02\x21\x0c\x05\xd0\xab\xfc\x7b\xb8\xea\x48\x67\x55\x87\x44\x61\x4d\x34\x69\x4c\x13\x04\xa5\x28\xd7\xf7\x91\x24\xbe\x22\xd1\x26\x0c\xd7\x39\xad\x3d\x1d\x14\x02\xce\x51\xf2\xe5\xc0\xd2\xc7\xcf\x74\x95\x7b\xad\x7d\x95\xb7\x8e\x97\xb9\x5b\x6f\x65\xe8\xe7\xab\x3e\x1d\x5b\x8c\xc2\x74\x20\xf0\x4e\x59\x12\x76\x92\x1b\x9f\xfe\x01\x00\x00\xff\xff\xc8\x7d\x35\xfa\x58\x00\x00\x00") + +func _0011_allow_webview_permission_requestsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0011_allow_webview_permission_requestsUpSql, + "0011_allow_webview_permission_requests.up.sql", + ) +} + +func _0011_allow_webview_permission_requestsUpSql() (*asset, error) { + bytes, err := _0011_allow_webview_permission_requestsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0011_allow_webview_permission_requests.up.sql", size: 88, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0012_pending_transactionsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\x48\xcd\x4b\xc9\xcc\x4b\x8f\x2f\x29\x4a\xcc\x2b\x4e\x4c\x2e\xc9\xcc\xcf\x2b\xb6\xe6\x02\x04\x00\x00\xff\xff\x62\x4b\x2a\x6c\x21\x00\x00\x00") + +func _0012_pending_transactionsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0012_pending_transactionsDownSql, + "0012_pending_transactions.down.sql", + ) +} + +func _0012_pending_transactionsDownSql() (*asset, error) { + bytes, err := _0012_pending_transactionsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0012_pending_transactions.down.sql", size: 33, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0012_pending_transactionsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8f\xc1\x4e\x02\x31\x14\x45\xf7\xfd\x8a\xbb\x84\x84\x3f\x70\x55\xa0\xc2\x8b\x63\xc7\x74\xde\x08\xac\x9a\x62\xab\x4c\x90\x76\xd2\xd6\x18\xff\xde\xe8\x46\x8d\x13\x96\x2f\xe7\x9d\x9b\x9c\x95\x51\x92\x15\x58\x2e\x1b\x05\xba\x85\x6e\x19\x6a\x4f\x1d\x77\x18\x43\xf4\x43\x7c\xb1\x35\xbb\x58\xdc\x53\x1d\x52\x2c\x98\x09\x20\x86\xfa\x9e\xf2\xd9\x0e\x1e\xbd\xee\x68\xa3\xd5\x1a\x4b\xda\x90\xe6\x6f\x5d\xf7\x4d\xb3\x10\xc0\x2f\xcf\x9e\x5c\x39\xe1\x51\x9a\xd5\x56\x9a\x3f\x4f\xc7\xd7\xb3\x8d\x6f\x97\x63\xc8\x53\x13\xcf\x39\x5d\xac\xf3\x3e\x87\x52\x26\xf5\x9a\xae\xe3\x8f\x31\x4c\x02\xef\xaa\x03\xab\x3d\x7f\x1d\x0f\x86\xee\xa5\x39\xe0\x4e\x1d\x30\xfb\x89\x5b\xfc\x2b\x98\x8b\x39\x76\xc4\xdb\xb6\x67\x98\x76\x47\xeb\x1b\x21\x3e\x03\x00\x00\xff\xff\x9c\xbd\x6e\xaa\x41\x01\x00\x00") + +func _0012_pending_transactionsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0012_pending_transactionsUpSql, + "0012_pending_transactions.up.sql", + ) +} + +func _0012_pending_transactionsUpSql() (*asset, error) { + bytes, err := _0012_pending_transactionsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0012_pending_transactions.up.sql", size: 321, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0013_favouritesDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x48\x4b\x2c\xcb\x2f\x2d\xca\x2c\x49\x2d\xb6\xe6\x02\x04\x00\x00\xff\xff\x76\xaf\x3d\x70\x17\x00\x00\x00") + +func _0013_favouritesDownSqlBytes() ([]byte, error) { + return bindataRead( + __0013_favouritesDownSql, + "0013_favourites.down.sql", + ) +} + +func _0013_favouritesDownSql() (*asset, error) { + bytes, err := _0013_favouritesDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0013_favourites.down.sql", size: 23, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0013_favouritesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcb\xb1\xaa\xc2\x40\x10\x46\xe1\x7e\x9e\xe2\x2f\x13\xb8\x6f\x70\xab\x31\x8e\x64\x70\xcd\xca\x64\x62\x92\x72\x21\x2b\x58\xa8\x90\x55\x9f\x5f\x10\x1b\xdb\xc3\xf9\x1a\x13\x76\x81\xf3\x26\x08\x74\x87\x2e\x3a\x64\xd2\xde\x7b\x9c\xd3\xeb\xfe\x5c\x2f\x8f\x5c\x50\x11\x90\x96\x65\xcd\xa5\xe0\xc4\xd6\xb4\x6c\x9f\xb3\x1b\x42\xf8\x23\xe0\x96\xae\x19\x2e\x93\xff\xd4\xa3\xe9\x81\x6d\xc6\x5e\x66\x54\x5f\x5e\x53\x8d\x51\xbd\x8d\x83\xc3\xe2\xa8\xdb\x7f\xa2\x77\x00\x00\x00\xff\xff\xb6\x82\x8c\x1e\x84\x00\x00\x00") + +func _0013_favouritesUpSqlBytes() ([]byte, error) { + return bindataRead( + __0013_favouritesUpSql, + "0013_favourites.up.sql", + ) +} + +func _0013_favouritesUpSql() (*asset, error) { + bytes, err := _0013_favouritesUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0013_favourites.up.sql", size: 132, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0014_add_use_mailserversDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") + +func _0014_add_use_mailserversDownSqlBytes() ([]byte, error) { + return bindataRead( + __0014_add_use_mailserversDownSql, + "0014_add_use_mailservers.down.sql", + ) +} + +func _0014_add_use_mailserversDownSql() (*asset, error) { + bytes, err := _0014_add_use_mailserversDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0014_add_use_mailservers.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0014_add_use_mailserversUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x2d\x4e\x8d\xcf\x4d\xcc\xcc\x29\x4e\x2d\x2a\x4b\x2d\x2a\x56\x70\xf2\xf7\xf7\x71\x75\xf4\x53\x70\x71\x75\x73\x0c\xf5\x09\x51\x08\x09\x0a\x75\xb5\xe6\x0a\x0d\x70\x71\x0c\x41\x32\x20\xd8\x35\x04\x43\xa7\xad\x82\xa1\x35\x17\x20\x00\x00\xff\xff\x78\x22\xcb\x3c\x6f\x00\x00\x00") + +func _0014_add_use_mailserversUpSqlBytes() ([]byte, error) { + return bindataRead( + __0014_add_use_mailserversUpSql, + "0014_add_use_mailservers.up.sql", + ) +} + +func _0014_add_use_mailserversUpSql() (*asset, error) { + bytes, err := _0014_add_use_mailserversUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0014_add_use_mailservers.up.sql", size: 111, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0015_link_previewsDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00") + +func _0015_link_previewsDownSqlBytes() ([]byte, error) { + return bindataRead( + __0015_link_previewsDownSql, + "0015_link_previews.down.sql", + ) +} + +func _0015_link_previewsDownSql() (*asset, error) { + bytes, err := _0015_link_previewsDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0015_link_previews.down.sql", size: 0, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0015_link_previewsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xce\x31\x0a\x42\x31\x0c\x80\xe1\xbd\xa7\xc8\x15\x9c\x8b\x43\x6a\xe3\x14\x5f\xe5\x99\xce\x45\x31\x48\xf1\x51\xb4\xa9\x7a\x7d\x27\xc1\x49\xf0\x00\xff\xc7\x8f\x2c\x34\x83\x60\x60\x02\xd3\x31\x6a\xbb\x18\x60\x8c\xb0\x49\x9c\x77\x13\x2c\xb5\x5d\xcb\xad\xeb\xb3\xea\xab\x74\xbd\x3f\xd4\x46\xd1\x76\x3c\x2d\x7a\x86\x90\x12\x13\x4e\x10\x69\x8b\x99\x05\x64\xce\xe4\xdd\x3f\xa4\x7d\xac\x62\x75\xa8\x41\xe0\x14\xbc\xcb\xfb\x88\xf2\x15\x1f\x48\x7e\x8f\xac\x61\xe5\xdd\x3b\x00\x00\xff\xff\xe6\xf3\x89\x88\xcb\x00\x00\x00") + +func _0015_link_previewsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0015_link_previewsUpSql, + "0015_link_previews.up.sql", + ) +} + +func _0015_link_previewsUpSql() (*asset, error) { + bytes, err := _0015_link_previewsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0015_link_previews.up.sql", size: 203, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0016_local_notifications_preferencesDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\xc8\xc9\x4f\x4e\xcc\x89\xcf\xcb\x2f\xc9\x4c\xcb\x4c\x4e\x2c\xc9\xcc\xcf\x2b\x8e\x2f\x28\x4a\x4d\x4b\x2d\x4a\xcd\x4b\x4e\x2d\xb6\x06\x04\x00\x00\xff\xff\xf0\xdb\xee\xaa\x2b\x00\x00\x00") + +func _0016_local_notifications_preferencesDownSqlBytes() ([]byte, error) { + return bindataRead( + __0016_local_notifications_preferencesDownSql, + "0016_local_notifications_preferences.down.sql", + ) +} + +func _0016_local_notifications_preferencesDownSql() (*asset, error) { + bytes, err := _0016_local_notifications_preferencesDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0016_local_notifications_preferences.down.sql", size: 43, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0016_local_notifications_preferencesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8d\x41\x0b\x82\x30\x1c\x47\xef\x7e\x8a\xdf\x51\xc1\x6f\xd0\x69\xea\x42\xc9\x5a\x8c\x99\x78\x92\x35\xff\xc2\x60\xcc\xd8\xc4\xcf\x1f\x59\x10\x75\x7d\x3c\xde\x2b\x25\x67\x8a\x43\xb1\xa2\xe5\x70\x8b\xd1\x6e\xf4\xcb\x6a\x67\x6b\xf4\x6a\x17\x1f\xc7\x47\xa0\x99\x02\x79\x43\x11\x69\x02\x00\x91\xc2\x66\x0d\xe1\xc6\x64\x59\x33\x99\xef\x90\x36\xf2\xeb\x2f\xb2\x13\xf9\x57\x89\xc2\x9f\xea\xf5\xdd\xd1\x84\x42\x88\x96\xb3\x0b\x2a\x7e\x64\x5d\xab\x30\x6b\x17\xe9\xad\x5c\x65\x73\x66\x72\xc0\x89\x0f\xe9\x67\x97\xef\x87\xfc\x1b\xcd\x92\x0c\x7d\xa3\x6a\xd1\x29\x48\xd1\x37\xd5\xe1\x19\x00\x00\xff\xff\x02\x6d\x5e\xec\xcc\x00\x00\x00") + +func _0016_local_notifications_preferencesUpSqlBytes() ([]byte, error) { + return bindataRead( + __0016_local_notifications_preferencesUpSql, + "0016_local_notifications_preferences.up.sql", + ) +} + +func _0016_local_notifications_preferencesUpSql() (*asset, error) { + bytes, err := _0016_local_notifications_preferencesUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0016_local_notifications_preferences.up.sql", size: 204, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0017_bookmarksDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x48\xca\xcf\xcf\xce\x4d\x2c\xca\x2e\xb6\xe6\x02\x04\x00\x00\xff\xff\xfb\x69\xe4\xcd\x16\x00\x00\x00") + +func _0017_bookmarksDownSqlBytes() ([]byte, error) { + return bindataRead( + __0017_bookmarksDownSql, + "0017_bookmarks.down.sql", + ) +} + +func _0017_bookmarksDownSql() (*asset, error) { + bytes, err := _0017_bookmarksDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0017_bookmarks.down.sql", size: 22, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0017_bookmarksUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8b\x3d\xaa\xc2\x40\x10\xc7\xfb\x3d\xc5\xbf\x4c\xe0\xdd\xe0\x55\x63\x1c\xc9\xe0\x9a\x95\xc9\xc4\x98\x4a\x56\x08\x22\xc9\x1a\x58\xc9\xfd\x45\x2b\x0b\xdb\xdf\x47\xa5\x4c\xc6\x30\xda\x78\x86\xec\xd0\x04\x03\x9f\xa5\xb5\x16\xd7\x65\x99\x52\xcc\xd3\x13\x85\x03\xd6\x3c\xe3\x44\x5a\xd5\xa4\x9f\xa8\xe9\xbc\xff\x73\xc0\x23\xa6\xf1\xa7\xb8\xa7\x78\x1b\x2f\x5f\xdb\x1b\x1e\x55\x0e\xa4\x03\xf6\x3c\xa0\x58\xf3\x5c\xba\x12\xbd\x58\x1d\x3a\x83\x86\x5e\xb6\xff\xce\xbd\x02\x00\x00\xff\xff\x91\xa6\x3e\xcb\x93\x00\x00\x00") + +func _0017_bookmarksUpSqlBytes() ([]byte, error) { + return bindataRead( + __0017_bookmarksUpSql, + "0017_bookmarks.up.sql", + ) +} + +func _0017_bookmarksUpSql() (*asset, error) { + bytes, err := _0017_bookmarksUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0017_bookmarks.up.sql", size: 147, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0018_profile_pictures_visibilityUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0a\x42\x31\x0c\x06\xe0\xdd\x53\xfc\x57\x70\x76\x8a\xb6\x82\x10\x53\x90\x74\x2e\x28\x55\x02\x45\x4b\x13\x05\x6f\xff\x3e\x62\xcd\x37\x28\x1d\x39\xc3\x7b\x84\xbd\x5f\x0e\x4a\x09\xa7\xc2\xf5\x2a\x98\xeb\xf3\xb4\xd1\xdb\xb4\x47\x7c\x57\xf7\xf6\x33\xb7\xbb\x0d\x8b\x3f\x2e\xa2\x90\xa2\x90\xca\x8c\x94\xcf\x54\x59\xb1\x3f\xec\xb6\x00\x00\x00\xff\xff\xf9\x2a\x51\x1e\x54\x00\x00\x00") + +func _0018_profile_pictures_visibilityUpSqlBytes() ([]byte, error) { + return bindataRead( + __0018_profile_pictures_visibilityUpSql, + "0018_profile_pictures_visibility.up.sql", + ) +} + +func _0018_profile_pictures_visibilityUpSql() (*asset, error) { + bytes, err := _0018_profile_pictures_visibilityUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0018_profile_pictures_visibility.up.sql", size: 84, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0019_blocks_ranges_extra_dataUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xca\xc9\x4f\xce\x2e\x8e\x2f\x4a\xcc\x4b\x4f\x2d\x56\x70\x74\x71\x51\x48\x4a\xcc\x49\xcc\x4b\x4e\x55\x70\xf2\xf1\x77\xb2\xe6\xc2\xaf\x36\x2f\x1f\xa4\xd2\xd3\x2f\xc4\xd5\xdd\x35\xc8\x9a\x0b\x10\x00\x00\xff\xff\x83\x20\x4e\x94\x59\x00\x00\x00") + +func _0019_blocks_ranges_extra_dataUpSqlBytes() ([]byte, error) { + return bindataRead( + __0019_blocks_ranges_extra_dataUpSql, + "0019_blocks_ranges_extra_data.up.sql", + ) +} + +func _0019_blocks_ranges_extra_dataUpSql() (*asset, error) { + bytes, err := _0019_blocks_ranges_extra_dataUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0019_blocks_ranges_extra_data.up.sql", size: 89, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0020_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcc\x4d\xaa\xc2\x30\x14\xc5\xf1\x79\x57\x71\x86\xef\x81\x9b\x88\xf5\x16\x0b\x69\x95\xf4\x56\x3a\x0b\xa1\x5e\xa4\x60\x3f\x48\x62\xc0\xdd\x8b\x8a\x4e\xa4\x67\xfa\x3b\xfc\x73\x43\x8a\x09\xac\xb6\x9a\x50\x16\xa8\x0f\x0c\xea\xca\x86\x1b\xb8\x65\xb1\xa3\x44\x3f\xf4\x01\x7f\x19\xde\x93\x24\x53\xc4\x49\x99\x7c\xaf\xcc\xeb\x5d\xb7\x5a\x6f\x3e\x9c\xdc\xf5\x26\x60\xea\xf8\xd7\x9e\xbd\x24\x3e\x0c\xf3\xb4\x1e\x98\x17\xf1\x2e\x0e\xd3\xc5\x86\x7b\x88\x32\xae\x3f\x7b\x2f\x2e\xca\xd9\xba\x08\x2e\x2b\x6a\x58\x55\x47\xec\xa8\x50\xad\x66\xe4\xad\x31\x54\xb3\xfd\x4a\xf6\x9f\x3d\x02\x00\x00\xff\xff\x95\xc5\x25\x15\xeb\x00\x00\x00") + +func _0020_metricsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0020_metricsUpSql, + "0020_metrics.up.sql", + ) +} + +func _0020_metricsUpSql() (*asset, error) { + bytes, err := _0020_metricsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0020_metrics.up.sql", size: 235, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0021_add_session_id_to_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\x2c\x28\x88\xcf\x4d\x2d\x29\xca\x4c\x2e\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x4e\x2d\x2e\xce\xcc\xcf\x8b\xcf\x4c\x51\x08\x73\x0c\x72\xf6\x70\x0c\xb2\xe6\x02\x04\x00\x00\xff\xff\x10\x56\x8d\x9e\x37\x00\x00\x00") + +func _0021_add_session_id_to_metricsUpSqlBytes() ([]byte, error) { + return bindataRead( + __0021_add_session_id_to_metricsUpSql, + "0021_add_session_id_to_metrics.up.sql", + ) +} + +func _0021_add_session_id_to_metricsUpSql() (*asset, error) { + bytes, err := _0021_add_session_id_to_metricsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0021_add_session_id_to_metrics.up.sql", size: 55, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __0022_pending_transfersUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\x4f\x6f\xe2\x30\x10\xc5\xef\xfe\x14\x73\x04\xc9\x87\xbd\x73\x72\xc0\x80\xb5\xc1\x46\xce\xb0\xc0\xc9\xf2\xe2\x14\xac\xe6\x9f\x62\xb7\x15\xdf\xbe\x22\xb4\x25\x50\x8a\x7a\x7d\xcf\xf3\x7b\xa3\xe7\x61\x29\x72\x0d\xc8\x92\x94\x43\x93\x57\xce\x57\x7b\x13\x5b\x5b\x05\xbb\x8b\xbe\xae\x02\x68\x2e\xd9\x82\x03\xaa\xbb\xb6\xa9\x0b\x37\x22\x64\xac\x39\x43\xfe\x81\x11\x53\x90\x0a\x81\x6f\x44\x86\xd9\x7d\xe8\x80\x00\x54\x79\x7c\xab\xdb\x67\xe3\x1d\xac\x64\x26\x66\x92\x4f\x20\x11\x33\x21\xb1\x1b\x97\xab\x34\xa5\x04\xe0\x60\xc3\x01\xfe\x31\x3d\x9e\x33\x7d\x65\x44\x5f\xe6\x21\xda\xb2\x79\x38\xfe\xd4\xd6\xa5\xb1\xce\xb5\x79\x08\xf7\x31\xf5\xad\x7d\x52\xc3\xb1\xfc\x5f\x17\x7d\x65\x6f\x83\x69\x5a\xbf\xcb\x21\x49\x55\xf2\xa9\x14\xbe\xf4\xf1\x4b\x79\xb5\xc5\xcb\xc5\x77\x36\x5a\x40\xbe\xc1\x2e\xe6\xd8\xe4\x7d\x9c\x75\xce\x9f\xba\xb0\x85\xb9\x7a\xb7\xd4\x62\xc1\xf4\x16\xfe\xf2\x2d\x0c\x2e\x15\xd1\xae\x87\x21\x19\xc2\x5a\xe0\x5c\xad\x10\xb4\x5a\x8b\xc9\x88\x10\x21\x33\xae\x11\x84\xfc\xe1\x87\xbe\x41\xe8\x55\x27\xb4\x57\x00\xed\xb6\xa4\xb7\xbb\xd1\x4b\xd5\x43\x92\xf1\x94\x8f\x11\xfa\xd0\x5e\x9a\xf9\x5d\xc0\x99\xfa\x07\xa6\x5a\x2d\x1e\x9d\xd5\x44\xab\xe5\x83\xdb\x3c\xbf\x7a\x0f\x00\x00\xff\xff\x05\xa2\xfe\xa8\xc2\x02\x00\x00") + +func _0022_pending_transfersUpSqlBytes() ([]byte, error) { + return bindataRead( + __0022_pending_transfersUpSql, + "0022_pending_transfers.up.sql", + ) +} + +func _0022_pending_transfersUpSql() (*asset, error) { + bytes, err := _0022_pending_transfersUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1618237885_settings_anon_metrics_should_sendUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0e\x42\x21\x0c\x06\xe0\xdd\x53\xfc\xf7\x70\xea\x93\x3a\x55\x48\x0c\xcc\x84\x48\x55\x12\x2c\x89\xc5\xfb\xfb\x91\x64\xbe\x23\xd3\x21\x0c\xd7\xbd\x87\xbd\x1c\x14\x02\x2e\x49\xca\x2d\xa2\xd9\xb2\xfa\xd1\xfd\x1d\x0f\xaf\xfe\x5e\xbf\xd9\xab\xab\x75\x1c\x29\x09\x53\x44\xe0\x2b\x15\xc9\x78\xb6\xe9\x7a\x3e\xfd\x03\x00\x00\xff\xff\x9a\x73\xdd\x50\x50\x00\x00\x00") + +func _1618237885_settings_anon_metrics_should_sendUpSqlBytes() ([]byte, error) { + return bindataRead( + __1618237885_settings_anon_metrics_should_sendUpSql, + "1618237885_settings_anon_metrics_should_send.up.sql", + ) +} + +func _1618237885_settings_anon_metrics_should_sendUpSql() (*asset, error) { + bytes, err := _1618237885_settings_anon_metrics_should_sendUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1618237885_settings_anon_metrics_should_send.up.sql", size: 80, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1618395756_contacts_onlyUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xcc\x31\x0e\xc2\x30\x0c\x05\xd0\xbd\xa7\xf8\x47\x60\xaf\x18\x5c\xe2\x4e\xa6\x41\xd4\x99\xa3\xaa\x0a\x15\x12\x49\x24\xec\x85\xdb\xb3\x32\x71\x81\x47\xa2\x7c\x87\xd2\x24\x0c\x2b\xee\xcf\x76\x18\x28\x04\x5c\xa2\xa4\xeb\x82\x5a\xcc\xb6\xa3\x58\x7e\xbc\x7b\xcd\x7b\x6f\xbe\xed\x6e\xb9\xb7\xd7\x07\x53\x8c\xc2\xb4\x20\xf0\x4c\x49\x14\x33\xc9\xca\xe3\x90\x6e\x81\xf4\x47\x5b\x59\xff\x32\x67\x9c\xc6\xe1\x1b\x00\x00\xff\xff\x99\x20\xa4\x1d\x88\x00\x00\x00") + +func _1618395756_contacts_onlyUpSqlBytes() ([]byte, error) { + return bindataRead( + __1618395756_contacts_onlyUpSql, + "1618395756_contacts_only.up.sql", + ) +} + +func _1618395756_contacts_onlyUpSql() (*asset, error) { + bytes, err := _1618395756_contacts_onlyUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1618395756_contacts_only.up.sql", size: 136, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1622184614_add_default_sync_periodUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x49\x4d\x4b\x2c\xcd\x29\x89\x2f\xae\xcc\x4b\x8e\x2f\x48\x2d\xca\xcc\x4f\x51\xf0\xf4\x0b\x71\x75\x77\x0d\x52\x70\x71\x75\x73\x0c\xf5\x09\x51\xb0\x30\x33\x31\x30\xb0\xe6\x0a\x0d\x70\x71\x0c\x41\x32\x25\xd8\x35\x04\xab\x76\x5b\x98\x06\x2e\x40\x00\x00\x00\xff\xff\xdd\x46\xb2\xc4\x7d\x00\x00\x00") + +func _1622184614_add_default_sync_periodUpSqlBytes() ([]byte, error) { + return bindataRead( + __1622184614_add_default_sync_periodUpSql, + "1622184614_add_default_sync_period.up.sql", + ) +} + +func _1622184614_add_default_sync_periodUpSql() (*asset, error) { + bytes, err := _1622184614_add_default_sync_periodUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1622184614_add_default_sync_period.up.sql", size: 125, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1625872445_user_statusUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8e\x41\x4b\xc3\x40\x10\x85\xef\xfb\x2b\x1e\x3d\x29\x78\xd0\x73\xf0\xb0\x49\xa6\x50\x9c\xee\x86\x75\x02\xf6\x14\x6a\xba\x48\x69\x4d\x43\x76\x16\xec\xbf\x97\x6a\x2b\x16\x04\xaf\x33\xdf\xf7\xde\xb3\x2c\x14\x20\xb6\x64\x42\x8a\xaa\xdb\xe1\x2d\xc1\xd6\x35\x2a\xcf\xed\xd2\xa1\xcf\xd3\x14\x07\xed\x72\x8a\x53\x97\x74\xad\x39\xa1\x64\x5f\x16\xe6\x3f\x33\xc5\x61\x73\x36\xba\x3c\x6e\xd6\x1a\x13\x4a\xef\x99\xac\x43\x4d\x73\xdb\xb2\x40\x42\x4b\x85\x69\x9b\xda\xca\xaf\x90\x67\x92\x3f\xed\x47\x3c\x14\xa6\x0a\x74\x82\xcf\xbd\xd7\xc0\x8d\x01\xc6\xfc\xba\xdf\xf6\xdd\x2e\x1e\x21\xf4\x22\x68\xc2\x62\x69\xc3\x0a\x4f\xb4\x82\x77\xa8\xbc\x9b\xf3\xa2\x12\x04\x6a\xd8\x56\x74\x67\x70\x49\xd1\xe3\x18\xb1\x70\x02\xe7\x05\xae\x65\xfe\x99\x79\x7f\xa2\xfa\xfd\xa1\xdf\x5d\xfd\xbf\xae\x39\xe9\xe1\xbd\xd3\xf8\xa1\xdf\x7d\x17\x67\x36\x33\xb7\x85\xf9\x0c\x00\x00\xff\xff\xa2\xed\xdb\xfc\x5f\x01\x00\x00") + +func _1625872445_user_statusUpSqlBytes() ([]byte, error) { + return bindataRead( + __1625872445_user_statusUpSql, + "1625872445_user_status.up.sql", + ) +} + +func _1625872445_user_statusUpSql() (*asset, error) { + bytes, err := _1625872445_user_statusUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1625872445_user_status.up.sql", size: 351, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1627983977_add_gif_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\xcf\x4c\x8b\x2f\x4a\x4d\x4e\xcd\x2b\x29\x56\x70\xf2\xf1\x77\xb2\xe6\x22\x46\x47\x5a\x62\x59\x7e\x51\x66\x49\x2a\x4c\x0f\x20\x00\x00\xff\xff\x41\xe4\x6a\x80\x66\x00\x00\x00") + +func _1627983977_add_gif_to_settingsUpSqlBytes() ([]byte, error) { + return bindataRead( + __1627983977_add_gif_to_settingsUpSql, + "1627983977_add_gif_to_settings.up.sql", + ) +} + +func _1627983977_add_gif_to_settingsUpSql() (*asset, error) { + bytes, err := _1627983977_add_gif_to_settingsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1627983977_add_gif_to_settings.up.sql", size: 102, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1628580203_add_hidden_accountUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\xc1\x0d\x80\x20\x0c\x05\xd0\x55\xfe\x1e\x9e\x8a\x94\xd3\x97\x26\xda\x0e\x60\xc0\x44\x2f\x78\x50\xf7\xf7\x09\x5d\x57\xb8\x24\x2a\xf6\xd6\xee\x6f\xbc\x0f\x24\x67\xcc\xc6\x58\x2a\xce\xab\xf7\x63\x20\x99\x11\xd5\x1c\x35\x48\x64\x2d\x12\x74\x14\xe1\xa6\xd3\x1f\x00\x00\xff\xff\xd8\xcf\x59\x5c\x43\x00\x00\x00") + +func _1628580203_add_hidden_accountUpSqlBytes() ([]byte, error) { + return bindataRead( + __1628580203_add_hidden_accountUpSql, + "1628580203_add_hidden_account.up.sql", + ) +} + +func _1628580203_add_hidden_accountUpSql() (*asset, error) { + bytes, err := _1628580203_add_hidden_accountUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1628580203_add_hidden_account.up.sql", size: 67, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1629123384_add_id_to_app_metricsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x51\xcb\x6e\xc2\x40\x0c\xbc\xe7\x2b\x7c\x04\x29\x7f\xc0\xc9\x04\xd3\x46\xdd\x07\x72\x9c\xaa\x9c\x56\x11\xb1\xaa\x48\x05\xa2\xec\x16\xa9\x7f\x5f\x41\x5a\x14\x15\xb8\xf5\xea\xf1\xcc\x78\xc6\x68\x84\x18\x04\x97\x86\xa0\xe9\xfb\xb0\xd7\x34\x74\xbb\x08\x4c\x0e\x2d\x81\x78\x48\xba\xef\xc3\x04\x5a\x64\x05\x13\x0a\xdd\x21\xcd\x32\x00\x80\xae\x85\xd2\x09\x3d\x11\xc3\x86\x4b\x8b\xbc\x85\x17\xda\x02\xd6\xe2\x4b\x57\x30\x59\x72\x92\x5f\x36\xf5\xa4\x87\x04\xaf\xc8\xc5\x33\x32\x38\x2f\xe0\x6a\x63\x46\xec\xd4\x7c\x7c\x2a\x08\xbd\xc9\x1f\xe0\x6c\x78\xd2\x21\x76\xc7\xc3\x03\xea\xb1\xd7\xa1\x49\xdd\xe1\x3d\xc4\xaf\x98\x74\xff\x60\x6d\x37\x68\x93\xb4\x0d\x4d\x02\x29\x2d\x55\x82\x76\x03\x2b\x5a\x63\x6d\x04\x8a\x9a\x99\x9c\x84\x2b\x32\x72\xa2\xc6\xb3\x71\xe8\xda\x5f\xd1\x71\xde\x0f\xc7\x9d\xc6\xa8\x2d\x2c\xbd\x37\x84\xee\xea\x75\x55\x5c\xa3\xa9\x68\xbe\xc8\x4a\x57\x11\xcb\xb9\x22\x3f\x2d\x6f\x76\x29\x23\x1f\x73\xe7\xd3\x94\xf9\x4d\xa0\x7c\x72\x7b\x3e\xb9\x69\x9e\x55\x64\xa8\x10\xf8\x07\xad\x6c\xcd\xde\xde\x79\xfe\x8a\xfd\xe6\xe7\xf5\x37\xe0\x77\x00\x00\x00\xff\xff\x7c\x73\x3b\xdc\x4d\x02\x00\x00") + +func _1629123384_add_id_to_app_metricsUpSqlBytes() ([]byte, error) { + return bindataRead( + __1629123384_add_id_to_app_metricsUpSql, + "1629123384_add_id_to_app_metrics.up.sql", + ) +} + +func _1629123384_add_id_to_app_metricsUpSql() (*asset, error) { + bytes, err := _1629123384_add_id_to_app_metricsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1629123384_add_id_to_app_metrics.up.sql", size: 589, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1630401853_add_opensea_enabled_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x51\x0a\x80\x20\x0c\x06\xe0\xab\xfc\xf7\xe8\x69\xe6\x7a\x5a\x0a\xa1\xcf\x61\xb4\x22\x90\x15\xcc\xfb\xd3\x47\x52\x78\x43\xa1\x20\x0c\xd7\x31\x1e\xbb\x1d\x14\x23\xe6\x2c\x75\x4d\x78\x3f\x35\xd7\xb6\xab\xb5\xa3\xeb\x89\x90\xb3\x30\x25\x44\x5e\xa8\x4a\xc1\xd5\xba\xeb\xf4\x07\x00\x00\xff\xff\x0e\x97\x7a\x0e\x46\x00\x00\x00") + +func _1630401853_add_opensea_enabled_to_settingsUpSqlBytes() ([]byte, error) { + return bindataRead( + __1630401853_add_opensea_enabled_to_settingsUpSql, + "1630401853_add_opensea_enabled_to_settings.up.sql", + ) +} + +func _1630401853_add_opensea_enabled_to_settingsUpSql() (*asset, error) { + bytes, err := _1630401853_add_opensea_enabled_to_settingsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1630401853_add_opensea_enabled_to_settings.up.sql", size: 70, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1630464455_createSaved_addressesTableDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\x28\x4e\x2c\x4b\x4d\x89\x4f\x4c\x49\x29\x4a\x2d\x2e\x4e\x2d\xb6\xe6\x02\x04\x00\x00\xff\xff\xa5\x19\xd2\x59\x1c\x00\x00\x00") + +func _1630464455_createSaved_addressesTableDownSqlBytes() ([]byte, error) { + return bindataRead( + __1630464455_createSaved_addressesTableDownSql, + "1630464455_create-saved_addresses-table.down.sql", + ) +} + +func _1630464455_createSaved_addressesTableDownSql() (*asset, error) { + bytes, err := _1630464455_createSaved_addressesTableDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.down.sql", size: 28, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1630464455_createSaved_addressesTableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcd\xc1\xca\x82\x40\x14\x05\xe0\xfd\x3c\xc5\x59\x2a\xf8\x06\xff\x6a\xd4\xfb\xeb\x25\x1b\xe3\x7a\x4d\x5d\x89\x30\xb3\x88\xa8\xc0\x89\x7a\xfd\x20\x8a\x70\x79\x0e\x1f\xe7\x14\x42\x56\x09\x6a\xf3\x86\xc0\xff\x70\xad\x82\x46\xee\xb4\x43\x5c\x1e\xc1\xcf\x8b\xf7\x6b\x88\x31\x44\x24\x06\xf8\x24\x1c\xad\x14\xb5\x95\x37\x77\x7d\xd3\x64\x06\xb8\x86\xfb\xf3\xb6\x9e\xe7\x93\x47\xef\x3a\xae\x1c\x95\xc8\xb9\x62\xa7\x5b\xb6\x5c\x02\x94\xc6\x6d\x7b\x10\xde\x5b\x99\xb0\xa3\x09\xc9\x6f\x29\xfb\x3e\xa6\x26\xc5\xc0\x5a\xb7\xbd\x42\xda\x81\xcb\x3f\xf3\x0a\x00\x00\xff\xff\x02\x6b\x7f\x7c\xbb\x00\x00\x00") + +func _1630464455_createSaved_addressesTableUpSqlBytes() ([]byte, error) { + return bindataRead( + __1630464455_createSaved_addressesTableUpSql, + "1630464455_create-saved_addresses-table.up.sql", + ) +} + +func _1630464455_createSaved_addressesTableUpSql() (*asset, error) { + bytes, err := _1630464455_createSaved_addressesTableUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.up.sql", size: 187, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1630485153_networksDownSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\xc8\x4b\x2d\x29\xcf\x2f\xca\x2e\xb6\xe6\x02\x04\x00\x00\xff\xff\xbd\xca\x6a\x0e\x15\x00\x00\x00") + +func _1630485153_networksDownSqlBytes() ([]byte, error) { + return bindataRead( + __1630485153_networksDownSql, + "1630485153_networks.down.sql", + ) +} + +func _1630485153_networksDownSql() (*asset, error) { + bytes, err := _1630485153_networksDownSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1630485153_networks.down.sql", size: 21, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1630485153_networksUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\x4d\x4e\xc3\x30\x10\x85\xf7\x39\xc5\x2c\x5b\x89\x1b\xb0\x72\x5a\xd3\x8e\x08\x0e\x72\x1c\x4a\x57\x96\xe3\x8c\x84\x55\xc7\xae\xec\x14\xc8\xed\x51\x2a\xf1\x53\xa8\xd8\xbe\xef\x9b\x79\x9a\x59\x49\xce\x14\x07\xc5\xca\x8a\x03\xde\x81\xa8\x15\xf0\x67\x6c\x54\x03\x81\xc6\xb7\x98\x0e\x19\x16\x05\x80\x7d\x31\x2e\x68\xd7\x43\x2b\x1a\xdc\x08\xbe\x86\x12\x37\x28\xd4\x79\x40\xb4\x55\x75\xf3\x25\x05\x33\x10\x3c\x31\xb9\xda\x32\x79\x81\xd3\xd1\xea\x53\xf2\x57\x59\xe7\xa3\x3d\x68\x7a\x3f\xfa\x98\x28\xfd\xd4\x66\xea\x6c\x0c\xbf\xb3\x60\x46\xf7\x4a\xda\x9e\x52\xa2\x60\xa7\x8b\xda\x6b\x3c\x4f\x43\x17\xff\xdd\xd0\x93\x75\x83\xf1\xf9\xfb\x46\x14\xea\x5c\x9f\xf5\x48\x79\x84\xb2\xae\x2b\xce\xc4\x1c\x79\x33\x51\xfa\x23\x52\x30\x9d\xa7\x1e\xca\x18\x3d\x99\x30\x47\x8f\x12\x1f\x98\xdc\xc3\x3d\xdf\xc3\xe2\xf3\x8b\xcb\x62\x09\x3b\x54\xdb\xba\x55\x20\xeb\x1d\xae\x6f\x8b\xe2\x23\x00\x00\xff\xff\x47\xbc\x43\xc3\x8a\x01\x00\x00") + +func _1630485153_networksUpSqlBytes() ([]byte, error) { + return bindataRead( + __1630485153_networksUpSql, + "1630485153_networks.up.sql", + ) +} + +func _1630485153_networksUpSql() (*asset, error) { + bytes, err := _1630485153_networksUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1630485153_networks.up.sql", size: 394, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1632262444_profile_pictures_show_toUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x4e\x2d\x29\xc9\xcc\x4b\x2f\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\x28\xca\x4f\xcb\xcc\x49\x8d\x2f\xc8\x4c\x2e\x29\x2d\x4a\x2d\x8e\x2f\xce\xc8\x2f\x8f\x2f\xc9\x57\xf0\xf4\x0b\x51\xf0\xf3\x0f\x51\xf0\x0b\xf5\xf1\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x30\xb4\xe6\x02\x04\x00\x00\xff\xff\x2f\x7a\xa3\xb9\x51\x00\x00\x00") + +func _1632262444_profile_pictures_show_toUpSqlBytes() ([]byte, error) { + return bindataRead( + __1632262444_profile_pictures_show_toUpSql, + "1632262444_profile_pictures_show_to.up.sql", + ) +} + +func _1632262444_profile_pictures_show_toUpSql() (*asset, error) { + bytes, err := _1632262444_profile_pictures_show_toUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1632262444_profile_pictures_show_to.up.sql", size: 81, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1635942153_add_telemetry_server_url_to_settingsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\xb1\x0a\xc2\x40\x0c\x06\xe0\xdd\xa7\xf8\xe9\x6b\x88\x43\xec\x45\x1c\xe2\x55\xce\xc4\xb5\x53\x10\xa1\x3a\xe4\xa2\xe0\xdb\x8b\x9b\x43\xf7\x8f\x8f\x44\xb9\x41\x69\x2f\x8c\xee\x99\xf7\xe7\xad\x83\x4a\xc1\x38\x89\x9d\x2a\xd2\x17\x7f\x78\xc6\x67\xee\x1e\x6f\x8f\xf9\x15\x0b\xae\xd4\xc6\x23\x35\xd4\x49\x51\x4d\x04\x85\x0f\x64\xa2\x18\x86\xed\xc6\xce\x85\xf4\x2f\xbb\xb0\xae\x2f\xbb\x1f\xff\x06\x00\x00\xff\xff\xfb\x7a\x10\xdd\x80\x00\x00\x00") + +func _1635942153_add_telemetry_server_url_to_settingsUpSqlBytes() ([]byte, error) { + return bindataRead( + __1635942153_add_telemetry_server_url_to_settingsUpSql, + "1635942153_add_telemetry_server_url_to_settings.up.sql", + ) +} + +func _1635942153_add_telemetry_server_url_to_settingsUpSql() (*asset, error) { + bytes, err := _1635942153_add_telemetry_server_url_to_settingsUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1635942153_add_telemetry_server_url_to_settings.up.sql", size: 128, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1635942154_add_backup_settingUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\xcf\xcb\x0a\xc2\x30\x10\x85\xe1\x7d\x9f\xe2\x3c\x82\xae\x4b\x17\x53\x33\x05\x61\x4c\xa4\x9d\xac\x4b\x5b\xe3\x05\x4b\x11\x12\xdf\x5f\xc4\x0b\x22\x62\xf7\xc3\x37\xff\x21\x51\xae\xa1\x54\x0a\x23\x86\x94\x4e\xd3\x21\x82\x8c\xc1\xca\x89\xdf\x58\xf4\xdd\x70\xbe\x5e\xda\x30\x75\xfd\x18\x76\x28\x9d\x13\x26\x0b\xc3\x15\x79\x51\x68\xed\x39\xcf\xe6\x90\xb1\x8b\xa9\x7d\x48\x58\x5b\x85\x75\x0a\xeb\x45\xde\xcc\x62\xde\x78\x86\xec\x43\x1a\x8e\x3f\x42\x2a\x92\x86\xf3\xcc\x6f\x0d\xe9\x07\xd0\xb0\x7e\x4f\x28\xb0\xfc\x7b\xf7\xfa\x50\xdc\xab\x6e\x01\x00\x00\xff\xff\x3f\xf3\xd1\x35\x1f\x01\x00\x00") + +func _1635942154_add_backup_settingUpSqlBytes() ([]byte, error) { + return bindataRead( + __1635942154_add_backup_settingUpSql, + "1635942154_add_backup_setting.up.sql", + ) +} + +func _1635942154_add_backup_settingUpSql() (*asset, error) { + bytes, err := _1635942154_add_backup_settingUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1635942154_add_backup_setting.up.sql", size: 287, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1637745568_add_auto_message_settingUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\x31\x0e\xc2\x30\x0c\x05\xd0\xbd\xa7\xf8\x47\x60\xaf\x18\x5c\xec\x4e\xa6\x41\xd4\x99\xa3\x20\xac\x08\x09\xc2\xe0\x70\x7f\x56\x06\x0e\xf0\x1e\xa9\xc9\x15\x46\x8b\x0a\xc2\xc7\x78\xf4\x16\x20\x66\x9c\x92\xe6\xf3\x86\xfa\x19\xef\xf2\xf2\x88\xda\xbc\x78\xaf\xb7\xa7\xdf\xb1\xa4\xa4\x42\x1b\x58\x56\xca\x6a\x58\x49\x77\x99\xa7\x7c\x61\xb2\x9f\x66\x17\xfb\xef\x8f\x38\xcc\xd3\x37\x00\x00\xff\xff\x2f\xce\x8b\x0f\x7a\x00\x00\x00") + +func _1637745568_add_auto_message_settingUpSqlBytes() ([]byte, error) { + return bindataRead( + __1637745568_add_auto_message_settingUpSql, + "1637745568_add_auto_message_setting.up.sql", + ) +} + +func _1637745568_add_auto_message_settingUpSql() (*asset, error) { + bytes, err := _1637745568_add_auto_message_settingUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1637745568_add_auto_message_setting.up.sql", size: 122, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var __1640111208_nodeconfigUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x59\x4f\x6f\xdb\xb8\x12\xbf\xe7\x53\x10\xbd\x34\x05\x7a\x78\xaf\x0f\xef\xb4\x27\xb7\x75\xdb\x60\xb3\xc9\x22\xeb\x6c\xd1\x13\x41\x91\x63\x79\x60\x8a\xe4\x92\x23\x39\xea\xa7\x5f\x50\x96\x6d\xc5\x92\x2d\xaa\x75\x7a\x33\xa0\x1f\xe7\x3f\x7f\x33\x43\x7f\x78\x98\xcf\x16\x73\xb6\x98\xbd\xbf\x9d\x33\x63\x15\x70\x69\xcd\x12\x73\x76\x7d\xc5\x98\x01\xda\x58\xbf\xe6\xa8\xd8\xe3\xdd\x5f\x37\x9f\xef\xe6\x1f\xd9\xcd\xdd\x82\xdd\xdd\x2f\xd8\xdd\xe3\xed\xed\xdb\x2b\xc6\x94\x20\xc1\x15\x7a\xf6\xf7\xec\xe1\xc3\x97\xd9\xc3\xb3\x8f\x6b\xa8\x03\x59\x0f\x27\x01\x8d\xc6\x35\xd4\xbd\x8f\xec\xe3\xfc\xd3\xec\xf1\x76\xc1\x5e\xbd\xda\xe2\xb8\xc2\x20\x6d\x05\xbe\x66\xef\xef\xef\x6f\xe7\xb3\xbb\x3d\x64\x29\x74\x80\x88\xf2\x60\x14\x7c\xaf\x6c\x19\x4e\x63\x34\x06\x02\xc3\x85\x52\x7d\x8b\x8e\x94\x0a\x55\x81\x27\x0c\x90\x84\x36\xa2\x80\x31\x4c\x05\x3e\xa0\x35\xa3\x8a\x1d\xf2\xc2\xaa\x52\x43\x18\x83\x92\x0e\x1c\x8c\xc8\x34\xa8\xd3\x3e\x17\xe2\x89\x3b\x00\x1f\x9e\xa5\xf1\xf0\xc5\x28\x34\xf9\x09\xc4\x56\x38\x0f\x24\xa8\x0c\x3c\x80\xaf\x50\xc2\x69\x55\x2d\xdc\x90\xe3\xa1\x36\xf2\x34\x70\x23\xd6\xe5\xb8\xe5\x11\xf5\xae\x0b\x3b\x81\xcb\x3c\xaa\x1c\x52\xe4\x69\x0d\x34\x8e\xd3\x56\x0a\xcd\x8d\x25\x5c\xa2\x14\x84\xd6\x24\x84\x39\xf3\x76\x13\xc0\x8f\x03\x1d\xf8\x02\x43\x48\x93\x5a\x08\xd4\x31\xec\xe0\x13\xc0\x61\x23\x7c\x31\x45\x26\xf7\x90\x63\x20\x5f\x37\x35\x0e\x61\xb4\xe0\x36\x90\xfd\xcf\x79\x5b\xa1\x4a\xf1\x14\x52\x3c\x0c\xb5\xa1\x15\x10\xca\x48\x34\x3b\xf5\x3b\xd4\x6b\x54\xaf\xd9\x9f\x0f\x37\x7f\xcc\x1e\xbe\xb1\xdf\xe7\xdf\xae\xde\xb0\xaf\x37\x8b\x2f\xf7\x8f\x0b\xf6\x70\xff\xf5\xe6\xe3\x6f\x57\x57\xcf\x38\x6c\x45\xe4\xba\x1c\x36\xaa\x7d\x65\x03\x8d\x39\xed\xac\xa7\xde\xcd\xb8\xbc\xd9\x15\x7a\x2a\x85\xe6\xd1\xa4\xd0\x58\x3f\x68\x5c\x92\xf2\x08\xea\xe8\xbf\x8e\x92\xde\x3e\x3b\xf6\x26\x31\x94\x7e\x6b\x4a\xf3\xe3\x22\xa6\x44\x49\x13\x4d\x41\x27\xf7\x49\x65\x2c\x25\xad\x4b\xd4\xa3\x74\x7c\xd1\x0c\x6a\x9b\x4f\xaa\xbb\xc2\x66\x18\x89\xb5\x0e\x04\xc5\x39\x26\xca\x07\xbb\xe7\x91\x2b\x29\xee\x46\x51\x1a\x2a\xd0\x67\x80\x37\x77\x9f\xee\x5f\xed\x3a\x43\x26\xe4\xba\x74\xc3\x5d\x23\xe0\x77\xe8\x7d\x90\xb6\x70\x91\x44\xb8\xb7\x24\xe8\x3c\xc1\xe6\x9c\x2c\x0f\xa4\xc0\xfb\x17\xa3\x06\xc6\x9e\xe7\xa8\x74\x81\x3c\x88\x62\x52\xa2\x4a\x7f\x2e\x60\x97\x2f\xa4\xdd\xd4\xd5\xb1\x51\xae\x04\x9a\x28\xbb\x1f\xf1\xe6\x4b\xca\xec\xe1\x9d\xe4\x09\xae\x64\xda\xca\x35\x87\x27\xa7\xad\x07\x9f\x72\x02\xa5\x35\x29\x38\x23\x08\x2b\xe0\xb2\xf4\x1e\x8c\xac\x93\x8c\x3e\x3e\x13\xea\x22\xb3\x93\x35\x29\x90\x58\x08\xdd\x2f\x64\x0c\x9c\x20\xd0\x99\x32\x15\x35\xf8\x13\x33\xd1\xcf\x74\xb4\x23\x4a\x64\xd7\xbb\x0c\x4f\xe4\x45\xa9\xcb\x40\xe0\x27\xd5\xf3\x52\x03\x8c\x76\xbc\xe9\x1e\xfc\x90\xdd\x71\xfe\xdf\xb6\x97\xf8\x6b\xb0\xbd\x50\xed\x80\x5d\xa4\xf1\xb0\xeb\xa8\xe4\x6d\x23\x71\x62\x9c\x35\xe6\x2b\xe2\x40\xab\x49\x91\x8e\xbb\x51\x26\x02\x70\x29\xe4\xaa\xcf\x96\x05\x1a\x4e\x3e\x06\x42\xf1\xa5\x17\x32\x8e\x99\x2f\x3b\x65\x1c\xdc\xd8\xe9\x3d\x24\xe0\x74\x06\xd2\x02\x3d\x14\xe9\x49\x31\xde\x4e\xa2\xe0\x39\x59\x87\x72\x6b\x54\xf3\xf3\x42\xc9\x6f\x64\x4d\xb6\xe9\x9f\x12\x3d\xa4\x99\x54\xa0\x19\xde\x93\xf7\x76\xfd\xa7\xed\x9e\x29\xb0\x97\x72\x90\x1d\x37\x45\x57\x86\xd5\xd1\xaa\xd3\xee\x06\x53\x6a\x1d\x15\x18\x42\x1a\xdd\xe4\x73\xeb\xa3\xbe\x97\x6f\xaa\xc7\x6e\x36\x0b\xe7\x14\x8f\xb6\x97\x45\x6a\x04\x73\xa6\x43\x2c\x4b\xad\x9b\x5b\x34\xba\x13\x1f\x96\xae\xf3\x8c\x91\x32\xee\x15\x68\xb0\x28\x0b\xee\xec\x86\x3d\xcc\x67\xb7\x47\x4b\x9d\x13\x21\x6c\xac\x57\xa3\x62\x3a\x7b\xa0\x20\xe0\x1a\x0b\xec\x2f\x3a\x1d\x54\x63\x9f\x07\x8a\xb9\x1e\x20\x2b\x22\x3d\x38\x2c\x16\x10\x82\xc8\x61\x78\x68\x6c\xc3\x73\x30\xe0\x5c\x80\x9c\x90\x6b\xa0\x0e\x98\xa3\xeb\x49\xec\x83\x1c\x80\x3f\x7e\xc6\x6a\xa6\x9d\x9a\x20\x8c\x48\xeb\x61\x4e\x09\xeb\x40\xc8\x6a\xf0\xc2\xc8\xbe\xb7\x99\xb6\xb6\xe0\x4b\xd4\x91\xe9\x8a\x94\xba\x69\x6a\xd6\x17\xdb\xab\xf9\x8b\xb6\xe8\xce\x65\xe1\x2a\xe3\x2e\x79\x54\xc6\x5f\x3a\x2a\x37\x66\x06\xbb\xa4\x4c\x0b\xb9\x6e\x9e\xf6\x54\xfb\x8e\x75\xdd\xbc\xb3\x6c\x13\x75\x99\xfe\xd1\x4a\x4b\x21\xd8\x21\xee\xa9\xde\xfd\x9a\x67\x89\x35\x80\xe3\x42\xc7\x01\x18\x0d\x81\xaf\x44\xff\x4e\x5e\x8c\xda\xf6\x8f\xb2\x27\xa8\xc3\x81\x0f\x18\xa8\xcd\xc9\xcf\xd3\x5e\x22\x97\x24\x5e\x99\x26\xa3\xf0\x24\x57\xc2\xe4\x7d\x27\xc9\x97\xdd\x6b\x18\x5d\xad\xfe\x7f\xa6\xf6\x95\xe3\x83\x09\x11\x25\x59\x5e\x3a\x25\xe8\xa0\x43\xc1\x52\x94\x9a\x5e\xf0\xf6\xc6\x72\x2b\x03\xd9\xa2\x3b\x63\x0f\x6d\x5c\x4d\x5c\x4b\x4d\x78\xea\x01\xf0\x87\xde\x78\xa2\xaa\x89\xb3\x56\x58\xad\xe0\x89\xba\x97\xc4\x2d\x53\x5e\x5d\x9b\x47\x8a\x98\x9e\x06\xc8\x53\x6b\x09\x4d\x20\xa1\x75\x53\x23\x43\x24\x71\xba\x55\x26\x56\xd7\xa1\x16\x0d\x34\xb3\x3d\x2f\x84\x11\xf9\xb9\xee\xd6\x1e\xd1\x22\x10\x2f\x03\x28\x5e\x58\x83\x64\xcf\x9c\xe8\x48\x27\xe1\x73\xe8\x97\x5f\x1c\x61\x21\x10\x57\xa0\x45\x7d\xf8\xfa\xfe\xe6\x73\xf7\x35\x67\xeb\xd9\x52\xa0\x2e\x3d\x0c\xbf\xf8\xec\x2e\x9e\x82\x48\x2e\xbe\xe6\x82\x08\x0a\x47\x7d\xf4\x66\x85\xc1\xc5\x40\xc5\xb5\x27\x25\x17\x6d\xf2\x78\x0e\x06\x3c\xca\xc3\x7f\x3d\xdb\xc1\xfb\x4c\xd3\x03\xa3\x78\xf5\xdf\x9d\x6d\x63\x14\x13\x6a\x23\xc7\x2b\xaa\x02\x8f\xcb\x9a\x93\x17\x26\x6c\xb7\xb2\x94\x71\xb5\x3d\x05\x26\x4c\x44\x4b\x6b\x28\x6e\x7f\xa9\x2f\xf0\x03\xe6\xed\xdf\x87\x7a\xdc\x63\x62\xd9\x01\x79\x94\xfb\xa9\x7e\xd4\xff\xa3\x43\x46\x25\x5c\x8f\x21\x45\xce\x06\xca\x3d\xc4\x78\x8c\x8e\x05\x99\x30\x6a\x83\x8a\x56\xcd\x3f\x4d\x09\xd7\xbe\x37\x54\x73\x59\x4b\x7d\xa6\x55\x5d\x94\x61\x5b\xae\x6a\x69\x9c\xf7\x56\xa8\x36\x04\xed\x18\x52\x66\x1a\x65\xca\xdf\x9c\x3f\x30\x94\xec\x65\x8f\xb2\xed\xbf\x01\x00\x00\xff\xff\xa1\x4d\x8c\x3a\xeb\x1d\x00\x00") + +func _1640111208_nodeconfigUpSqlBytes() ([]byte, error) { + return bindataRead( + __1640111208_nodeconfigUpSql, + "1640111208_nodeconfig.up.sql", + ) +} + +func _1640111208_nodeconfigUpSql() (*asset, error) { + bytes, err := _1640111208_nodeconfigUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1640111208_nodeconfig.up.sql", size: 7659, mode: os.FileMode(436), modTime: time.Unix(1642016840, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _docGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xca\xb1\x11\x85\x20\x0c\x06\xe0\x9e\x29\xb2\x00\x49\xff\xb6\xc9\x83\xf8\x1f\x87\x26\x08\x9c\xf3\xdb\xd8\x7f\x43\x4b\x57\x18\xad\xfb\x4c\x49\x04\xf1\x83\xb9\x4d\xdd\x46\x88\xfc\x6f\x5e\x75\x2b\xe5\xd1\x41\x57\xc3\xd4\xdd\xc2\xd7\x98\xf6\x78\x54\x2b\x07\x28\x07\x31\xcb\x07\x19\x41\x2c\xe9\x0d\x00\x00\xff\xff\x09\x8c\xb2\x2f\x55\x00\x00\x00") + +func docGoBytes() ([]byte, error) { + return bindataRead( + _docGo, + "doc.go", + ) +} + +func docGo() (*asset, error) { + bytes, err := docGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "doc.go", size: 85, mode: os.FileMode(436), modTime: time.Unix(1642016353, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "0001_app.down.sql": _0001_appDownSql, + "0001_app.up.sql": _0001_appUpSql, + "0002_tokens.down.sql": _0002_tokensDownSql, + "0002_tokens.up.sql": _0002_tokensUpSql, + "0003_settings.down.sql": _0003_settingsDownSql, + "0003_settings.up.sql": _0003_settingsUpSql, + "0004_pending_stickers.down.sql": _0004_pending_stickersDownSql, + "0004_pending_stickers.up.sql": _0004_pending_stickersUpSql, + "0005_waku_mode.down.sql": _0005_waku_modeDownSql, + "0005_waku_mode.up.sql": _0005_waku_modeUpSql, + "0006_appearance.up.sql": _0006_appearanceUpSql, + "0007_enable_waku_default.up.sql": _0007_enable_waku_defaultUpSql, + "0008_add_push_notifications.up.sql": _0008_add_push_notificationsUpSql, + "0009_enable_sending_push_notifications.down.sql": _0009_enable_sending_push_notificationsDownSql, + "0009_enable_sending_push_notifications.up.sql": _0009_enable_sending_push_notificationsUpSql, + "0010_add_block_mentions.down.sql": _0010_add_block_mentionsDownSql, + "0010_add_block_mentions.up.sql": _0010_add_block_mentionsUpSql, + "0011_allow_webview_permission_requests.down.sql": _0011_allow_webview_permission_requestsDownSql, + "0011_allow_webview_permission_requests.up.sql": _0011_allow_webview_permission_requestsUpSql, + "0012_pending_transactions.down.sql": _0012_pending_transactionsDownSql, + "0012_pending_transactions.up.sql": _0012_pending_transactionsUpSql, + "0013_favourites.down.sql": _0013_favouritesDownSql, + "0013_favourites.up.sql": _0013_favouritesUpSql, + "0014_add_use_mailservers.down.sql": _0014_add_use_mailserversDownSql, + "0014_add_use_mailservers.up.sql": _0014_add_use_mailserversUpSql, + "0015_link_previews.down.sql": _0015_link_previewsDownSql, + "0015_link_previews.up.sql": _0015_link_previewsUpSql, + "0016_local_notifications_preferences.down.sql": _0016_local_notifications_preferencesDownSql, + "0016_local_notifications_preferences.up.sql": _0016_local_notifications_preferencesUpSql, + "0017_bookmarks.down.sql": _0017_bookmarksDownSql, + "0017_bookmarks.up.sql": _0017_bookmarksUpSql, + "0018_profile_pictures_visibility.up.sql": _0018_profile_pictures_visibilityUpSql, + "0019_blocks_ranges_extra_data.up.sql": _0019_blocks_ranges_extra_dataUpSql, + "0020_metrics.up.sql": _0020_metricsUpSql, + "0021_add_session_id_to_metrics.up.sql": _0021_add_session_id_to_metricsUpSql, + "0022_pending_transfers.up.sql": _0022_pending_transfersUpSql, + "1618237885_settings_anon_metrics_should_send.up.sql": _1618237885_settings_anon_metrics_should_sendUpSql, + "1618395756_contacts_only.up.sql": _1618395756_contacts_onlyUpSql, + "1622184614_add_default_sync_period.up.sql": _1622184614_add_default_sync_periodUpSql, + "1625872445_user_status.up.sql": _1625872445_user_statusUpSql, + "1627983977_add_gif_to_settings.up.sql": _1627983977_add_gif_to_settingsUpSql, + "1628580203_add_hidden_account.up.sql": _1628580203_add_hidden_accountUpSql, + "1629123384_add_id_to_app_metrics.up.sql": _1629123384_add_id_to_app_metricsUpSql, + "1630401853_add_opensea_enabled_to_settings.up.sql": _1630401853_add_opensea_enabled_to_settingsUpSql, + "1630464455_create-saved_addresses-table.down.sql": _1630464455_createSaved_addressesTableDownSql, + "1630464455_create-saved_addresses-table.up.sql": _1630464455_createSaved_addressesTableUpSql, + "1630485153_networks.down.sql": _1630485153_networksDownSql, + "1630485153_networks.up.sql": _1630485153_networksUpSql, + "1632262444_profile_pictures_show_to.up.sql": _1632262444_profile_pictures_show_toUpSql, + "1635942153_add_telemetry_server_url_to_settings.up.sql": _1635942153_add_telemetry_server_url_to_settingsUpSql, + "1635942154_add_backup_setting.up.sql": _1635942154_add_backup_settingUpSql, + "1637745568_add_auto_message_setting.up.sql": _1637745568_add_auto_message_settingUpSql, + "1640111208_nodeconfig.up.sql": _1640111208_nodeconfigUpSql, + "doc.go": docGo, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} +var _bintree = &bintree{nil, map[string]*bintree{ + "0001_app.down.sql": &bintree{_0001_appDownSql, map[string]*bintree{}}, + "0001_app.up.sql": &bintree{_0001_appUpSql, map[string]*bintree{}}, + "0002_tokens.down.sql": &bintree{_0002_tokensDownSql, map[string]*bintree{}}, + "0002_tokens.up.sql": &bintree{_0002_tokensUpSql, map[string]*bintree{}}, + "0003_settings.down.sql": &bintree{_0003_settingsDownSql, map[string]*bintree{}}, + "0003_settings.up.sql": &bintree{_0003_settingsUpSql, map[string]*bintree{}}, + "0004_pending_stickers.down.sql": &bintree{_0004_pending_stickersDownSql, map[string]*bintree{}}, + "0004_pending_stickers.up.sql": &bintree{_0004_pending_stickersUpSql, map[string]*bintree{}}, + "0005_waku_mode.down.sql": &bintree{_0005_waku_modeDownSql, map[string]*bintree{}}, + "0005_waku_mode.up.sql": &bintree{_0005_waku_modeUpSql, map[string]*bintree{}}, + "0006_appearance.up.sql": &bintree{_0006_appearanceUpSql, map[string]*bintree{}}, + "0007_enable_waku_default.up.sql": &bintree{_0007_enable_waku_defaultUpSql, map[string]*bintree{}}, + "0008_add_push_notifications.up.sql": &bintree{_0008_add_push_notificationsUpSql, map[string]*bintree{}}, + "0009_enable_sending_push_notifications.down.sql": &bintree{_0009_enable_sending_push_notificationsDownSql, map[string]*bintree{}}, + "0009_enable_sending_push_notifications.up.sql": &bintree{_0009_enable_sending_push_notificationsUpSql, map[string]*bintree{}}, + "0010_add_block_mentions.down.sql": &bintree{_0010_add_block_mentionsDownSql, map[string]*bintree{}}, + "0010_add_block_mentions.up.sql": &bintree{_0010_add_block_mentionsUpSql, map[string]*bintree{}}, + "0011_allow_webview_permission_requests.down.sql": &bintree{_0011_allow_webview_permission_requestsDownSql, map[string]*bintree{}}, + "0011_allow_webview_permission_requests.up.sql": &bintree{_0011_allow_webview_permission_requestsUpSql, map[string]*bintree{}}, + "0012_pending_transactions.down.sql": &bintree{_0012_pending_transactionsDownSql, map[string]*bintree{}}, + "0012_pending_transactions.up.sql": &bintree{_0012_pending_transactionsUpSql, map[string]*bintree{}}, + "0013_favourites.down.sql": &bintree{_0013_favouritesDownSql, map[string]*bintree{}}, + "0013_favourites.up.sql": &bintree{_0013_favouritesUpSql, map[string]*bintree{}}, + "0014_add_use_mailservers.down.sql": &bintree{_0014_add_use_mailserversDownSql, map[string]*bintree{}}, + "0014_add_use_mailservers.up.sql": &bintree{_0014_add_use_mailserversUpSql, map[string]*bintree{}}, + "0015_link_previews.down.sql": &bintree{_0015_link_previewsDownSql, map[string]*bintree{}}, + "0015_link_previews.up.sql": &bintree{_0015_link_previewsUpSql, map[string]*bintree{}}, + "0016_local_notifications_preferences.down.sql": &bintree{_0016_local_notifications_preferencesDownSql, map[string]*bintree{}}, + "0016_local_notifications_preferences.up.sql": &bintree{_0016_local_notifications_preferencesUpSql, map[string]*bintree{}}, + "0017_bookmarks.down.sql": &bintree{_0017_bookmarksDownSql, map[string]*bintree{}}, + "0017_bookmarks.up.sql": &bintree{_0017_bookmarksUpSql, map[string]*bintree{}}, + "0018_profile_pictures_visibility.up.sql": &bintree{_0018_profile_pictures_visibilityUpSql, map[string]*bintree{}}, + "0019_blocks_ranges_extra_data.up.sql": &bintree{_0019_blocks_ranges_extra_dataUpSql, map[string]*bintree{}}, + "0020_metrics.up.sql": &bintree{_0020_metricsUpSql, map[string]*bintree{}}, + "0021_add_session_id_to_metrics.up.sql": &bintree{_0021_add_session_id_to_metricsUpSql, map[string]*bintree{}}, + "0022_pending_transfers.up.sql": &bintree{_0022_pending_transfersUpSql, map[string]*bintree{}}, + "1618237885_settings_anon_metrics_should_send.up.sql": &bintree{_1618237885_settings_anon_metrics_should_sendUpSql, map[string]*bintree{}}, + "1618395756_contacts_only.up.sql": &bintree{_1618395756_contacts_onlyUpSql, map[string]*bintree{}}, + "1622184614_add_default_sync_period.up.sql": &bintree{_1622184614_add_default_sync_periodUpSql, map[string]*bintree{}}, + "1625872445_user_status.up.sql": &bintree{_1625872445_user_statusUpSql, map[string]*bintree{}}, + "1627983977_add_gif_to_settings.up.sql": &bintree{_1627983977_add_gif_to_settingsUpSql, map[string]*bintree{}}, + "1628580203_add_hidden_account.up.sql": &bintree{_1628580203_add_hidden_accountUpSql, map[string]*bintree{}}, + "1629123384_add_id_to_app_metrics.up.sql": &bintree{_1629123384_add_id_to_app_metricsUpSql, map[string]*bintree{}}, + "1630401853_add_opensea_enabled_to_settings.up.sql": &bintree{_1630401853_add_opensea_enabled_to_settingsUpSql, map[string]*bintree{}}, + "1630464455_create-saved_addresses-table.down.sql": &bintree{_1630464455_createSaved_addressesTableDownSql, map[string]*bintree{}}, + "1630464455_create-saved_addresses-table.up.sql": &bintree{_1630464455_createSaved_addressesTableUpSql, map[string]*bintree{}}, + "1630485153_networks.down.sql": &bintree{_1630485153_networksDownSql, map[string]*bintree{}}, + "1630485153_networks.up.sql": &bintree{_1630485153_networksUpSql, map[string]*bintree{}}, + "1632262444_profile_pictures_show_to.up.sql": &bintree{_1632262444_profile_pictures_show_toUpSql, map[string]*bintree{}}, + "1635942153_add_telemetry_server_url_to_settings.up.sql": &bintree{_1635942153_add_telemetry_server_url_to_settingsUpSql, map[string]*bintree{}}, + "1635942154_add_backup_setting.up.sql": &bintree{_1635942154_add_backup_settingUpSql, map[string]*bintree{}}, + "1637745568_add_auto_message_setting.up.sql": &bintree{_1637745568_add_auto_message_settingUpSql, map[string]*bintree{}}, + "1640111208_nodeconfig.up.sql": &bintree{_1640111208_nodeconfigUpSql, map[string]*bintree{}}, + "doc.go": &bintree{docGo, map[string]*bintree{}}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} + diff --git a/appdatabase/migrationsprevnodecfg/migrate.go b/appdatabase/migrationsprevnodecfg/migrate.go new file mode 100644 index 000000000..c53577812 --- /dev/null +++ b/appdatabase/migrationsprevnodecfg/migrate.go @@ -0,0 +1,19 @@ +package migrationsprevnodecfg + +import ( + "database/sql" + + bindata "github.com/status-im/migrate/v4/source/go_bindata" + + "github.com/status-im/status-go/sqlite" +) + +// Migrate applies migrations. +func Migrate(db *sql.DB) error { + return sqlite.Migrate(db, bindata.Resource( + AssetNames(), + func(name string) ([]byte, error) { + return Asset(name) + }, + )) +} diff --git a/appdatabase/migrations/sql/0001_app.down.sql b/appdatabase/migrationsprevnodecfg/sql/0001_app.down.sql similarity index 100% rename from appdatabase/migrations/sql/0001_app.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0001_app.down.sql diff --git a/appdatabase/migrations/sql/0001_app.up.sql b/appdatabase/migrationsprevnodecfg/sql/0001_app.up.sql similarity index 100% rename from appdatabase/migrations/sql/0001_app.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0001_app.up.sql diff --git a/appdatabase/migrations/sql/0002_tokens.down.sql b/appdatabase/migrationsprevnodecfg/sql/0002_tokens.down.sql similarity index 100% rename from appdatabase/migrations/sql/0002_tokens.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0002_tokens.down.sql diff --git a/appdatabase/migrations/sql/0002_tokens.up.sql b/appdatabase/migrationsprevnodecfg/sql/0002_tokens.up.sql similarity index 100% rename from appdatabase/migrations/sql/0002_tokens.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0002_tokens.up.sql diff --git a/appdatabase/migrations/sql/0003_settings.down.sql b/appdatabase/migrationsprevnodecfg/sql/0003_settings.down.sql similarity index 100% rename from appdatabase/migrations/sql/0003_settings.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0003_settings.down.sql diff --git a/appdatabase/migrations/sql/0003_settings.up.sql b/appdatabase/migrationsprevnodecfg/sql/0003_settings.up.sql similarity index 100% rename from appdatabase/migrations/sql/0003_settings.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0003_settings.up.sql diff --git a/appdatabase/migrations/sql/0004_pending_stickers.down.sql b/appdatabase/migrationsprevnodecfg/sql/0004_pending_stickers.down.sql similarity index 100% rename from appdatabase/migrations/sql/0004_pending_stickers.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0004_pending_stickers.down.sql diff --git a/appdatabase/migrations/sql/0004_pending_stickers.up.sql b/appdatabase/migrationsprevnodecfg/sql/0004_pending_stickers.up.sql similarity index 100% rename from appdatabase/migrations/sql/0004_pending_stickers.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0004_pending_stickers.up.sql diff --git a/appdatabase/migrations/sql/0005_waku_mode.down.sql b/appdatabase/migrationsprevnodecfg/sql/0005_waku_mode.down.sql similarity index 100% rename from appdatabase/migrations/sql/0005_waku_mode.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0005_waku_mode.down.sql diff --git a/appdatabase/migrations/sql/0005_waku_mode.up.sql b/appdatabase/migrationsprevnodecfg/sql/0005_waku_mode.up.sql similarity index 100% rename from appdatabase/migrations/sql/0005_waku_mode.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0005_waku_mode.up.sql diff --git a/appdatabase/migrations/sql/0006_appearance.up.sql b/appdatabase/migrationsprevnodecfg/sql/0006_appearance.up.sql similarity index 100% rename from appdatabase/migrations/sql/0006_appearance.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0006_appearance.up.sql diff --git a/appdatabase/migrations/sql/0007_enable_waku_default.up.sql b/appdatabase/migrationsprevnodecfg/sql/0007_enable_waku_default.up.sql similarity index 100% rename from appdatabase/migrations/sql/0007_enable_waku_default.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0007_enable_waku_default.up.sql diff --git a/appdatabase/migrations/sql/0008_add_push_notifications.up.sql b/appdatabase/migrationsprevnodecfg/sql/0008_add_push_notifications.up.sql similarity index 100% rename from appdatabase/migrations/sql/0008_add_push_notifications.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0008_add_push_notifications.up.sql diff --git a/appdatabase/migrations/sql/0009_enable_sending_push_notifications.down.sql b/appdatabase/migrationsprevnodecfg/sql/0009_enable_sending_push_notifications.down.sql similarity index 100% rename from appdatabase/migrations/sql/0009_enable_sending_push_notifications.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0009_enable_sending_push_notifications.down.sql diff --git a/appdatabase/migrations/sql/0009_enable_sending_push_notifications.up.sql b/appdatabase/migrationsprevnodecfg/sql/0009_enable_sending_push_notifications.up.sql similarity index 100% rename from appdatabase/migrations/sql/0009_enable_sending_push_notifications.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0009_enable_sending_push_notifications.up.sql diff --git a/appdatabase/migrations/sql/0010_add_block_mentions.down.sql b/appdatabase/migrationsprevnodecfg/sql/0010_add_block_mentions.down.sql similarity index 100% rename from appdatabase/migrations/sql/0010_add_block_mentions.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0010_add_block_mentions.down.sql diff --git a/appdatabase/migrations/sql/0010_add_block_mentions.up.sql b/appdatabase/migrationsprevnodecfg/sql/0010_add_block_mentions.up.sql similarity index 100% rename from appdatabase/migrations/sql/0010_add_block_mentions.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0010_add_block_mentions.up.sql diff --git a/appdatabase/migrations/sql/0011_allow_webview_permission_requests.down.sql b/appdatabase/migrationsprevnodecfg/sql/0011_allow_webview_permission_requests.down.sql similarity index 100% rename from appdatabase/migrations/sql/0011_allow_webview_permission_requests.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0011_allow_webview_permission_requests.down.sql diff --git a/appdatabase/migrations/sql/0011_allow_webview_permission_requests.up.sql b/appdatabase/migrationsprevnodecfg/sql/0011_allow_webview_permission_requests.up.sql similarity index 100% rename from appdatabase/migrations/sql/0011_allow_webview_permission_requests.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0011_allow_webview_permission_requests.up.sql diff --git a/appdatabase/migrations/sql/0012_pending_transactions.down.sql b/appdatabase/migrationsprevnodecfg/sql/0012_pending_transactions.down.sql similarity index 100% rename from appdatabase/migrations/sql/0012_pending_transactions.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0012_pending_transactions.down.sql diff --git a/appdatabase/migrations/sql/0012_pending_transactions.up.sql b/appdatabase/migrationsprevnodecfg/sql/0012_pending_transactions.up.sql similarity index 100% rename from appdatabase/migrations/sql/0012_pending_transactions.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0012_pending_transactions.up.sql diff --git a/appdatabase/migrations/sql/0013_favourites.down.sql b/appdatabase/migrationsprevnodecfg/sql/0013_favourites.down.sql similarity index 100% rename from appdatabase/migrations/sql/0013_favourites.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0013_favourites.down.sql diff --git a/appdatabase/migrations/sql/0013_favourites.up.sql b/appdatabase/migrationsprevnodecfg/sql/0013_favourites.up.sql similarity index 100% rename from appdatabase/migrations/sql/0013_favourites.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0013_favourites.up.sql diff --git a/appdatabase/migrations/sql/0014_add_use_mailservers.down.sql b/appdatabase/migrationsprevnodecfg/sql/0014_add_use_mailservers.down.sql similarity index 100% rename from appdatabase/migrations/sql/0014_add_use_mailservers.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0014_add_use_mailservers.down.sql diff --git a/appdatabase/migrations/sql/0014_add_use_mailservers.up.sql b/appdatabase/migrationsprevnodecfg/sql/0014_add_use_mailservers.up.sql similarity index 100% rename from appdatabase/migrations/sql/0014_add_use_mailservers.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0014_add_use_mailservers.up.sql diff --git a/appdatabase/migrations/sql/0015_link_previews.down.sql b/appdatabase/migrationsprevnodecfg/sql/0015_link_previews.down.sql similarity index 100% rename from appdatabase/migrations/sql/0015_link_previews.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0015_link_previews.down.sql diff --git a/appdatabase/migrations/sql/0015_link_previews.up.sql b/appdatabase/migrationsprevnodecfg/sql/0015_link_previews.up.sql similarity index 100% rename from appdatabase/migrations/sql/0015_link_previews.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0015_link_previews.up.sql diff --git a/appdatabase/migrations/sql/0016_local_notifications_preferences.down.sql b/appdatabase/migrationsprevnodecfg/sql/0016_local_notifications_preferences.down.sql similarity index 100% rename from appdatabase/migrations/sql/0016_local_notifications_preferences.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0016_local_notifications_preferences.down.sql diff --git a/appdatabase/migrations/sql/0016_local_notifications_preferences.up.sql b/appdatabase/migrationsprevnodecfg/sql/0016_local_notifications_preferences.up.sql similarity index 100% rename from appdatabase/migrations/sql/0016_local_notifications_preferences.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0016_local_notifications_preferences.up.sql diff --git a/appdatabase/migrations/sql/0017_bookmarks.down.sql b/appdatabase/migrationsprevnodecfg/sql/0017_bookmarks.down.sql similarity index 100% rename from appdatabase/migrations/sql/0017_bookmarks.down.sql rename to appdatabase/migrationsprevnodecfg/sql/0017_bookmarks.down.sql diff --git a/appdatabase/migrations/sql/0017_bookmarks.up.sql b/appdatabase/migrationsprevnodecfg/sql/0017_bookmarks.up.sql similarity index 100% rename from appdatabase/migrations/sql/0017_bookmarks.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0017_bookmarks.up.sql diff --git a/appdatabase/migrations/sql/0018_profile_pictures_visibility.up.sql b/appdatabase/migrationsprevnodecfg/sql/0018_profile_pictures_visibility.up.sql similarity index 100% rename from appdatabase/migrations/sql/0018_profile_pictures_visibility.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0018_profile_pictures_visibility.up.sql diff --git a/appdatabase/migrations/sql/0019_blocks_ranges_extra_data.up.sql b/appdatabase/migrationsprevnodecfg/sql/0019_blocks_ranges_extra_data.up.sql similarity index 100% rename from appdatabase/migrations/sql/0019_blocks_ranges_extra_data.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0019_blocks_ranges_extra_data.up.sql diff --git a/appdatabase/migrations/sql/0020_metrics.up.sql b/appdatabase/migrationsprevnodecfg/sql/0020_metrics.up.sql similarity index 100% rename from appdatabase/migrations/sql/0020_metrics.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0020_metrics.up.sql diff --git a/appdatabase/migrations/sql/0021_add_session_id_to_metrics.up.sql b/appdatabase/migrationsprevnodecfg/sql/0021_add_session_id_to_metrics.up.sql similarity index 100% rename from appdatabase/migrations/sql/0021_add_session_id_to_metrics.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0021_add_session_id_to_metrics.up.sql diff --git a/appdatabase/migrations/sql/0022_pending_transfers.up.sql b/appdatabase/migrationsprevnodecfg/sql/0022_pending_transfers.up.sql similarity index 100% rename from appdatabase/migrations/sql/0022_pending_transfers.up.sql rename to appdatabase/migrationsprevnodecfg/sql/0022_pending_transfers.up.sql diff --git a/appdatabase/migrations/sql/1618237885_settings_anon_metrics_should_send.up.sql b/appdatabase/migrationsprevnodecfg/sql/1618237885_settings_anon_metrics_should_send.up.sql similarity index 100% rename from appdatabase/migrations/sql/1618237885_settings_anon_metrics_should_send.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1618237885_settings_anon_metrics_should_send.up.sql diff --git a/appdatabase/migrations/sql/1618395756_contacts_only.up.sql b/appdatabase/migrationsprevnodecfg/sql/1618395756_contacts_only.up.sql similarity index 100% rename from appdatabase/migrations/sql/1618395756_contacts_only.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1618395756_contacts_only.up.sql diff --git a/appdatabase/migrations/sql/1622184614_add_default_sync_period.up.sql b/appdatabase/migrationsprevnodecfg/sql/1622184614_add_default_sync_period.up.sql similarity index 100% rename from appdatabase/migrations/sql/1622184614_add_default_sync_period.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1622184614_add_default_sync_period.up.sql diff --git a/appdatabase/migrations/sql/1625872445_user_status.up.sql b/appdatabase/migrationsprevnodecfg/sql/1625872445_user_status.up.sql similarity index 100% rename from appdatabase/migrations/sql/1625872445_user_status.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1625872445_user_status.up.sql diff --git a/appdatabase/migrations/sql/1627983977_add_gif_to_settings.up.sql b/appdatabase/migrationsprevnodecfg/sql/1627983977_add_gif_to_settings.up.sql similarity index 100% rename from appdatabase/migrations/sql/1627983977_add_gif_to_settings.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1627983977_add_gif_to_settings.up.sql diff --git a/appdatabase/migrations/sql/1628580203_add_hidden_account.up.sql b/appdatabase/migrationsprevnodecfg/sql/1628580203_add_hidden_account.up.sql similarity index 100% rename from appdatabase/migrations/sql/1628580203_add_hidden_account.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1628580203_add_hidden_account.up.sql diff --git a/appdatabase/migrations/sql/1629123384_add_id_to_app_metrics.up.sql b/appdatabase/migrationsprevnodecfg/sql/1629123384_add_id_to_app_metrics.up.sql similarity index 100% rename from appdatabase/migrations/sql/1629123384_add_id_to_app_metrics.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1629123384_add_id_to_app_metrics.up.sql diff --git a/appdatabase/migrations/sql/1630401853_add_opensea_enabled_to_settings.up.sql b/appdatabase/migrationsprevnodecfg/sql/1630401853_add_opensea_enabled_to_settings.up.sql similarity index 100% rename from appdatabase/migrations/sql/1630401853_add_opensea_enabled_to_settings.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1630401853_add_opensea_enabled_to_settings.up.sql diff --git a/appdatabase/migrations/sql/1630464455_create-saved_addresses-table.down.sql b/appdatabase/migrationsprevnodecfg/sql/1630464455_create-saved_addresses-table.down.sql similarity index 100% rename from appdatabase/migrations/sql/1630464455_create-saved_addresses-table.down.sql rename to appdatabase/migrationsprevnodecfg/sql/1630464455_create-saved_addresses-table.down.sql diff --git a/appdatabase/migrations/sql/1630464455_create-saved_addresses-table.up.sql b/appdatabase/migrationsprevnodecfg/sql/1630464455_create-saved_addresses-table.up.sql similarity index 100% rename from appdatabase/migrations/sql/1630464455_create-saved_addresses-table.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1630464455_create-saved_addresses-table.up.sql diff --git a/appdatabase/migrations/sql/1630485153_networks.down.sql b/appdatabase/migrationsprevnodecfg/sql/1630485153_networks.down.sql similarity index 100% rename from appdatabase/migrations/sql/1630485153_networks.down.sql rename to appdatabase/migrationsprevnodecfg/sql/1630485153_networks.down.sql diff --git a/appdatabase/migrations/sql/1630485153_networks.up.sql b/appdatabase/migrationsprevnodecfg/sql/1630485153_networks.up.sql similarity index 100% rename from appdatabase/migrations/sql/1630485153_networks.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1630485153_networks.up.sql diff --git a/appdatabase/migrations/sql/1632262444_profile_pictures_show_to.up.sql b/appdatabase/migrationsprevnodecfg/sql/1632262444_profile_pictures_show_to.up.sql similarity index 100% rename from appdatabase/migrations/sql/1632262444_profile_pictures_show_to.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1632262444_profile_pictures_show_to.up.sql diff --git a/appdatabase/migrations/sql/1635942153_add_telemetry_server_url_to_settings.up.sql b/appdatabase/migrationsprevnodecfg/sql/1635942153_add_telemetry_server_url_to_settings.up.sql similarity index 100% rename from appdatabase/migrations/sql/1635942153_add_telemetry_server_url_to_settings.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1635942153_add_telemetry_server_url_to_settings.up.sql diff --git a/appdatabase/migrations/sql/1635942154_add_backup_setting.up.sql b/appdatabase/migrationsprevnodecfg/sql/1635942154_add_backup_setting.up.sql similarity index 100% rename from appdatabase/migrations/sql/1635942154_add_backup_setting.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1635942154_add_backup_setting.up.sql diff --git a/appdatabase/migrations/sql/1637745568_add_auto_message_setting.up.sql b/appdatabase/migrationsprevnodecfg/sql/1637745568_add_auto_message_setting.up.sql similarity index 100% rename from appdatabase/migrations/sql/1637745568_add_auto_message_setting.up.sql rename to appdatabase/migrationsprevnodecfg/sql/1637745568_add_auto_message_setting.up.sql diff --git a/appdatabase/migrationsprevnodecfg/sql/1640111208_nodeconfig.up.sql b/appdatabase/migrationsprevnodecfg/sql/1640111208_nodeconfig.up.sql new file mode 100644 index 000000000..7dfa35630 --- /dev/null +++ b/appdatabase/migrationsprevnodecfg/sql/1640111208_nodeconfig.up.sql @@ -0,0 +1,233 @@ +CREATE TABLE node_config ( + network_id UNSIGNED INT NOT NULL, + data_dir VARCHAR NOT NULL, + keystore_dir VARCHAR NOT NULL, + node_key VARCHAR NOT NULL DEFAULT "", + no_discovery BOOLEAN DEFAULT false, + rendezvous BOOLEAN DEFAULT false, + listen_addr VARCHAR NOT NULL DEFAULT "", + advertise_addr VARCHAR NOT NULL DEFAULT "", + name VARCHAR NOT NULL DEFAULT "", + version VARCHAR NOT NULL DEFAULT "", + api_modules VARCHAR NOT NULL DEFAULT "", + tls_enabled BOOLEAN DEFAULT false, + max_peers UNSIGNED INT, + max_pending_peers UNSIGNED INT, + enable_status_service BOOLEAN DEFAULT false, + enable_ntp_sync BOOLEAN DEFAULT false, + waku_enabled BOOLEAN DEFAULT false, + waku2_enabled BOOOLEAN DEFAULT false, + bridge_enabled BOOLEAN DEFAULT false, + wallet_enabled BOOLEAN DEFAULT false, + local_notifications_enabled BOOLEAN DEFAULT false, + browser_enabled BOOLEAN DEFAULT false, + permissions_enabled BOOLEAN DEFAULT false, + mailservers_enabled BOOLEAN DEFAULT false, + swarm_enabled BOOLEAN DEFAULT false, + mailserver_registry_address VARCHAR NOT NULL DEFAULT "", + web3provider_enabled BOOLEAN DEFAULT false, + ens_enabled BOOLEAN DEFAULT false, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE http_config ( + enabled BOOLEAN DEFAULT false, + host VARCHAR NOT NULL DEFAULT "", + port UNSIGNED INT, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE http_virtual_hosts ( + host VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY(host, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE http_cors ( + cors VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY(cors, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE ipc_config ( + enabled BOOLEAN DEFAULT false, + file VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE log_config ( + enabled BOOLEAN DEFAULT false, + mobile_system BOOLEAN DEFAULT false, + log_dir VARCHAR NOT NULL DEFAULT "", + file VARCHAR NOT NULL DEFAULT "", + log_level VARCHAR NOT NULL DEFAULT "INFO", + max_backups UNSIGNED INT, + max_size UNSIGNED INT, + compress_rotated BOOLEAN DEFAULT false, + log_to_stderr BOOLEAN DEFAULT false, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE upstream_config ( + enabled BOOLEAN DEFAULT false, + url VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE network_config ( + chain_id UNSIGNED INT, + chain_name VARCHAR NOT NULL DEFAULT "", + rpc_url VARCHAR NOT NULL DEFAULT "", + block_explorer_url VARCHAR NOT NULL DEFAULT "", + icon_url VARCHAR NOT NULL DEFAULT "", + native_currency_name VARCHAR NOT NULL DEFAULT "", + native_currency_symbol VARCHAR NOT NULL DEFAULT "", + native_currency_decimals UNSIGNED INT, + is_test BOOLEAN DEFAULT false, + layer UNSIGNED INT, + enabled BOOLEAN DEFAULT false, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (chain_id, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE cluster_config ( + enabled BOOLEAN DEFAULT false, + fleet VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE cluster_nodes ( + node VARCHAR NOT NULL, + type VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (node, type, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE light_eth_config ( + enabled BOOLEAN DEFAULT false, + database_cache UNSIGNED INT, + min_trusted_fraction UNSIGNED INT, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE light_eth_trusted_nodes ( + node VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (node, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE register_topics ( + topic VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (topic, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE require_topics ( + topic VARCHAR NOT NULL, + min UNSIGNED INT NOT NULL DEFAULT 0, + max UNSIGNED INT NOT NULL DEFAULT 0, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (topic, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE push_notifications_server_config ( + enabled BOOLEAN DEFAULT false, + identity VARCHAR NOT NULL DEFAULT "", + gorush_url VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE waku_config ( + enabled BOOLEAN DEFAULT false, + light_client BOOLEAN DEFAULT false, + full_node BOOLEAN DEFAULT false, + enable_mailserver BOOLEAN DEFAULT false, + data_dir VARCHAR NOT NULL DEFAULT "", + minimum_pow REAL, + mailserver_password VARCHAR NOT NULL DEFAULT "", + mailserver_rate_limit UNSIGNED INT, + mailserver_data_retention UNSIGNED INT, + ttl UNSIGNED INT, + max_message_size UNSIGNED INT, + enable_rate_limiter BOOLEAN DEFAULT false, + packet_rate_limit_ip UNSIGNED INT, + packet_rate_limit_peer_id UNSIGNED INT, + bytes_rate_limit_ip UNSIGNED INT, + bytes_rate_limit_peer_id UNSIGNED INT, + rate_limit_tolerance UNSIGNED INT, + bloom_filter_mode BOOLEAN DEFAULT false, + enable_confirmations BOOLEAN DEFAULT false, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE waku_config_db_pg ( + enabled BOOLEAN DEFAULT false, + uri VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE waku_softblacklisted_peers ( + peer_id VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (peer_id, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE wakuv2_config ( + enabled BOOLEAN DEFAULT false, + host VARCHAR NOT NULL DEFAULT "", + port UNSIGNED INT, + keep_alive_interval UNSIGNED INT, + light_client BOOLEAN DEFAULT false, + full_node BOOLEAN DEFAULT false, + discovery_limit UNSIGNED INT, + persist_peers BOOLEAN DEFAULT false, + data_dir VARCHAR NOT NULL DEFAULT "", + max_message_size UNSIGNED INT, + enable_confirmations BOOLEAN DEFAULT false, + peer_exchange BOOLEAN DEFAULT true, + enable_discv5 BOOLEAN DEFAULT false, + udp_port UNSIGNED INT, + auto_update BOOLEAN default false, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE wakuv2_custom_nodes ( + name VARCHAR NOT NULL, + multiaddress VARCHAR NOT NULL, + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY(name, synthetic_id) +) WITHOUT ROWID; + +CREATE TABLE shhext_config ( + pfs_enabled BOOLEAN DEFAULT false, + backup_disabled_data_dir VARCHAR NOT NULL DEFAULT "", + installation_id VARCHAR NOT NULL DEFAULT "", + mailserver_confirmations BOOLEAN DEFAULT false, + enable_connection_manager BOOLEAN DEFAULT false, + enable_last_used_monitor BOOLEAN DEFAULT false, + connection_target UNSIGNED INT, + request_delay UNSIGNED BIGINT, + max_server_failures UNSIGNED INT, + max_message_delivery_attempts UNSIGNED INT, + whisper_cache_dir VARCHAR NOT NULL DEFAULT "", + disable_generic_discovery_topic BOOLEAN DEFAULT false, + send_v1_messages BOOLEAN DEFAULT false, + data_sync_enabled BOOLEAN DEFAULT false, + verify_transaction_url VARCHAR NOT NULL DEFAULT "", + verify_ens_url VARCHAR NOT NULL DEFAULT "", + verify_ens_contract_address VARCHAR NOT NULL DEFAULT "", + verify_transaction_chain_id UNSIGNED INT, + anon_metrics_server_enabled BOOLEAN DEFAULT false, + anon_metrics_send_id VARCHAR NOT NULL DEFAULT "", + anon_metrics_server_postgres_uri VARCHAR NOT NULL DEFAULT "", + bandwidth_stats_enabled BOOLEAN DEFAULT false, + enable_mailserver_cycle BOOLEAN DEFAULT false, + synthetic_id VARCHAR DEFAULT 'id' PRIMARY KEY +) WITHOUT ROWID; + +CREATE TABLE shhext_default_push_notification_servers ( + public_key VARCHAR NOT NULL DEFAULT "", + synthetic_id VARCHAR DEFAULT 'id', + PRIMARY KEY (public_key, synthetic_id) +) WITHOUT ROWID; diff --git a/appdatabase/migrationsprevnodecfg/sql/doc.go b/appdatabase/migrationsprevnodecfg/sql/doc.go new file mode 100644 index 000000000..3681e247a --- /dev/null +++ b/appdatabase/migrationsprevnodecfg/sql/doc.go @@ -0,0 +1,3 @@ +package sql + +//go:generate go-bindata -pkg migrationsprevnodecfg -o ../bindata.go ./ diff --git a/appdatabase/node_config_test.go b/appdatabase/node_config_test.go new file mode 100644 index 000000000..aae7e9de8 --- /dev/null +++ b/appdatabase/node_config_test.go @@ -0,0 +1,323 @@ +package appdatabase + +import ( + "crypto/rand" + "database/sql" + "fmt" + "io/ioutil" + "math" + "math/big" + "os" + "sort" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/p2p/discv5" + + "github.com/status-im/status-go/eth-node/crypto" + "github.com/status-im/status-go/nodecfg" + "github.com/status-im/status-go/params" + "github.com/status-im/status-go/protocol/pushnotificationserver" + "github.com/status-im/status-go/sqlite" +) + +func setupTestDB(t *testing.T) (*sql.DB, func()) { + tmpfile, err := ioutil.TempFile("", "settings-tests-") + require.NoError(t, err) + db, err := InitializeDB(tmpfile.Name(), "settings-tests") + require.NoError(t, err) + return db, func() { + require.NoError(t, db.Close()) + require.NoError(t, os.Remove(tmpfile.Name())) + } +} + +func TestGetNodeConfig(t *testing.T) { + db, stop := setupTestDB(t) + defer stop() + + nodeConfig := randomNodeConfig() + require.NoError(t, nodecfg.SaveNodeConfig(db, nodeConfig)) + + dbNodeConfig, err := nodecfg.GetNodeConfig(db) + require.NoError(t, err) + require.Equal(t, nodeConfig, dbNodeConfig) +} + +func TestSaveNodeConfig(t *testing.T) { + db, stop := setupTestDB(t) + defer stop() + + require.NoError(t, nodecfg.SaveNodeConfig(db, randomNodeConfig())) + + newNodeConfig := randomNodeConfig() + require.NoError(t, nodecfg.SaveNodeConfig(db, newNodeConfig)) + + dbNodeConfig, err := nodecfg.GetNodeConfig(db) + require.NoError(t, err) + require.Equal(t, *newNodeConfig, *dbNodeConfig) +} + +func TestMigrateNodeConfig(t *testing.T) { + db, stop := setupTestDB(t) + defer stop() + + nodeConfig := ¶ms.NodeConfig{ + NetworkID: uint64(randomInt(10)), + DataDir: randomString(), + ListenAddr: randomString(), + Rendezvous: true, + ShhextConfig: params.ShhextConfig{ + PFSEnabled: true, + }, + WakuV2Config: params.WakuV2Config{ + CustomNodes: make(map[string]string), + }, + RequireTopics: make(map[discv5.Topic]params.Limits), + } + value := &sqlite.JSONBlob{Data: nodeConfig} + + fmt.Println(value) + update, err := db.Prepare("INSERT INTO settings(node_config, address, current_network, dapps_address, installation_id, key_uid, name, networks, photo_path, public_key, signing_phrase, wallet_root_address, synthetic_id) VALUES(?, '', 0, '', '', '', '', '', '', '', '', '', 'id')") + require.NoError(t, err) + b, err := update.Exec(value) + require.NoError(t, err) + fmt.Println(b.RowsAffected()) + // Forcing deletion of node_config data to be able to run migration + _, err = db.Exec("DELETE FROM node_config WHERE synthetic_id = 'id'") + require.NoError(t, err) + + err = nodecfg.MigrateNodeConfig(db) + require.NoError(t, err) + + dbNodeConfig, err := nodecfg.GetNodeConfig(db) + require.NoError(t, err) + require.Equal(t, nodeConfig, dbNodeConfig) + + // node_config column should be empty + var result string + err = db.QueryRow("SELECT COALESCE(NULL, 'empty')").Scan(&result) + require.NoError(t, err) + require.Equal(t, "empty", result) +} + +func randomString() string { + b := make([]byte, 10) + _, _ = rand.Read(b) + return fmt.Sprintf("%x", b)[:10] +} + +func randomBool() bool { + return randomInt(2) == 1 +} + +func randomInt(max int64) int { + r, _ := rand.Int(rand.Reader, big.NewInt(max)) + return int(r.Int64()) +} + +func randomFloat(max int64) float64 { + r, _ := rand.Int(rand.Reader, big.NewInt(max)) + return float64(r.Int64()) / (1 << 63) +} + +func randomStringSlice() []string { + m := randomInt(7) + var result []string + for i := 0; i < m; i++ { + result = append(result, randomString()) + } + sort.Strings(result) + return result +} + +func randomTopicSlice() []discv5.Topic { + randomValues := randomStringSlice() + var result []discv5.Topic + for _, v := range randomValues { + result = append(result, discv5.Topic(v)) + } + return result +} + +func randomTopicLimits() map[discv5.Topic]params.Limits { + result := make(map[discv5.Topic]params.Limits) + m := randomInt(7) + 1 + for i := 0; i < m; i++ { + result[discv5.Topic(fmt.Sprint(i))] = params.Limits{Min: randomInt(2), Max: randomInt(10)} + } + return result +} + +func randomCustomNodes() map[string]string { + result := make(map[string]string) + m := randomInt(7) + for i := 0; i < m; i++ { + result[randomString()] = randomString() + } + return result +} + +func randomNetworkSlice() []params.Network { + m := randomInt(7) + 1 + var result []params.Network + for i := 0; i < m; i++ { + n := params.Network{ + ChainID: uint64(i), + ChainName: randomString(), + RPCURL: randomString(), + BlockExplorerURL: randomString(), + IconURL: randomString(), + NativeCurrencyName: randomString(), + NativeCurrencySymbol: randomString(), + NativeCurrencyDecimals: uint64(int64(randomInt(math.MaxInt64))), + IsTest: randomBool(), + Layer: uint64(int64(randomInt(math.MaxInt64))), + Enabled: randomBool(), + } + result = append(result, n) + } + return result +} + +func randomNodeConfig() *params.NodeConfig { + privK, _ := crypto.GenerateKey() + + return ¶ms.NodeConfig{ + NetworkID: uint64(int64(randomInt(math.MaxInt64))), + DataDir: randomString(), + KeyStoreDir: randomString(), + NodeKey: randomString(), + NoDiscovery: randomBool(), + Rendezvous: randomBool(), + ListenAddr: randomString(), + AdvertiseAddr: randomString(), + Name: randomString(), + Version: randomString(), + APIModules: randomString(), + TLSEnabled: randomBool(), + MaxPeers: randomInt(math.MaxInt64), + MaxPendingPeers: randomInt(math.MaxInt64), + EnableStatusService: randomBool(), + EnableNTPSync: randomBool(), + BridgeConfig: params.BridgeConfig{Enabled: randomBool()}, + WalletConfig: params.WalletConfig{Enabled: randomBool()}, + LocalNotificationsConfig: params.LocalNotificationsConfig{Enabled: randomBool()}, + BrowsersConfig: params.BrowsersConfig{Enabled: randomBool()}, + ENSConfig: params.ENSConfig{Enabled: randomBool()}, + PermissionsConfig: params.PermissionsConfig{Enabled: randomBool()}, + MailserversConfig: params.MailserversConfig{Enabled: randomBool()}, + Web3ProviderConfig: params.Web3ProviderConfig{Enabled: randomBool()}, + SwarmConfig: params.SwarmConfig{Enabled: randomBool()}, + MailServerRegistryAddress: randomString(), + HTTPEnabled: randomBool(), + HTTPHost: randomString(), + HTTPPort: randomInt(math.MaxInt64), + HTTPVirtualHosts: randomStringSlice(), + HTTPCors: randomStringSlice(), + IPCEnabled: randomBool(), + IPCFile: randomString(), + LogEnabled: randomBool(), + LogMobileSystem: randomBool(), + LogDir: randomString(), + LogFile: randomString(), + LogLevel: randomString(), + LogMaxBackups: randomInt(math.MaxInt64), + LogMaxSize: randomInt(math.MaxInt64), + LogCompressRotated: randomBool(), + LogToStderr: randomBool(), + UpstreamConfig: params.UpstreamRPCConfig{Enabled: randomBool(), URL: randomString()}, + Networks: randomNetworkSlice(), + ClusterConfig: params.ClusterConfig{ + Enabled: randomBool(), + Fleet: randomString(), + StaticNodes: randomStringSlice(), + BootNodes: randomStringSlice(), + }, + LightEthConfig: params.LightEthConfig{ + Enabled: randomBool(), + DatabaseCache: randomInt(math.MaxInt64), + TrustedNodes: randomStringSlice(), + MinTrustedFraction: randomInt(math.MaxInt64), + }, + RegisterTopics: randomTopicSlice(), + RequireTopics: randomTopicLimits(), + PushNotificationServerConfig: pushnotificationserver.Config{ + Enabled: randomBool(), + GorushURL: randomString(), + Identity: privK, + }, + ShhextConfig: params.ShhextConfig{ + PFSEnabled: randomBool(), + BackupDisabledDataDir: randomString(), + InstallationID: randomString(), + MailServerConfirmations: randomBool(), + EnableConnectionManager: randomBool(), + EnableLastUsedMonitor: randomBool(), + ConnectionTarget: randomInt(math.MaxInt64), + RequestsDelay: time.Duration(randomInt(math.MaxInt64)), + MaxServerFailures: randomInt(math.MaxInt64), + MaxMessageDeliveryAttempts: randomInt(math.MaxInt64), + WhisperCacheDir: randomString(), + DisableGenericDiscoveryTopic: randomBool(), + SendV1Messages: randomBool(), + DataSyncEnabled: randomBool(), + VerifyTransactionURL: randomString(), + VerifyENSURL: randomString(), + VerifyENSContractAddress: randomString(), + VerifyTransactionChainID: int64(randomInt(math.MaxInt64)), + AnonMetricsSendID: randomString(), + AnonMetricsServerEnabled: randomBool(), + AnonMetricsServerPostgresURI: randomString(), + BandwidthStatsEnabled: randomBool(), + }, + WakuV2Config: params.WakuV2Config{ + Enabled: randomBool(), + Host: randomString(), + Port: randomInt(math.MaxInt64), + KeepAliveInterval: randomInt(math.MaxInt64), + LightClient: randomBool(), + FullNode: randomBool(), + DiscoveryLimit: randomInt(math.MaxInt64), + PersistPeers: randomBool(), + DataDir: randomString(), + MaxMessageSize: uint32(randomInt(math.MaxInt64)), + EnableConfirmations: randomBool(), + CustomNodes: randomCustomNodes(), + PeerExchange: randomBool(), + EnableDiscV5: randomBool(), + UDPPort: randomInt(math.MaxInt64), + AutoUpdate: randomBool(), + }, + WakuConfig: params.WakuConfig{ + Enabled: randomBool(), + LightClient: randomBool(), + FullNode: randomBool(), + EnableMailServer: randomBool(), + DataDir: randomString(), + MinimumPoW: randomFloat(math.MaxInt64), + MailServerPassword: randomString(), + MailServerRateLimit: randomInt(math.MaxInt64), + MailServerDataRetention: randomInt(math.MaxInt64), + TTL: randomInt(math.MaxInt64), + MaxMessageSize: uint32(randomInt(math.MaxInt64)), + DatabaseConfig: params.DatabaseConfig{ + PGConfig: params.PGConfig{ + Enabled: randomBool(), + URI: randomString(), + }, + }, + EnableRateLimiter: randomBool(), + PacketRateLimitIP: int64(randomInt(math.MaxInt64)), + PacketRateLimitPeerID: int64(randomInt(math.MaxInt64)), + BytesRateLimitIP: int64(randomInt(math.MaxInt64)), + BytesRateLimitPeerID: int64(randomInt(math.MaxInt64)), + RateLimitTolerance: int64(randomInt(math.MaxInt64)), + BloomFilterMode: randomBool(), + SoftBlacklistedPeerIDs: randomStringSlice(), + EnableConfirmations: randomBool(), + }, + } +} diff --git a/multiaccounts/accounts/database.go b/multiaccounts/accounts/database.go index 7f1b56d97..3e0bf6c6e 100644 --- a/multiaccounts/accounts/database.go +++ b/multiaccounts/accounts/database.go @@ -1,11 +1,13 @@ package accounts import ( + "context" "database/sql" "encoding/json" "errors" "github.com/status-im/status-go/eth-node/types" + "github.com/status-im/status-go/nodecfg" "github.com/status-im/status-go/params" "github.com/status-im/status-go/sqlite" ) @@ -151,14 +153,33 @@ type Database struct { db *sql.DB } +// Get database +func (db Database) DB() *sql.DB { + return db.db +} + // Close closes database. func (db Database) Close() error { return db.db.Close() } // TODO remove photoPath from settings -func (db *Database) CreateSettings(s Settings, nodecfg params.NodeConfig) error { - _, err := db.db.Exec(` +func (db *Database) CreateSettings(s Settings, n params.NodeConfig) error { + tx, err := db.db.BeginTx(context.Background(), &sql.TxOptions{}) + if err != nil { + return err + } + + defer func() { + if err == nil { + err = tx.Commit() + return + } + // don't shadow original error + _ = tx.Rollback() + }() + + _, err = tx.Exec(` INSERT INTO settings ( address, currency, @@ -174,7 +195,6 @@ INSERT INTO settings ( mnemonic, name, networks, - node_config, photo_path, preview_privacy, public_key, @@ -183,8 +203,7 @@ INSERT INTO settings ( synthetic_id ) VALUES ( ?,?,?,?,?,?,?,?,?,?, -?,?,?,?,?,?,?,?,?,?, -'id')`, +?,?,?,?,?,?,?,?,?,'id')`, s.Address, s.Currency, s.CurrentNetwork, @@ -199,15 +218,17 @@ INSERT INTO settings ( s.Mnemonic, s.Name, s.Networks, - &sqlite.JSONBlob{Data: nodecfg}, s.PhotoPath, s.PreviewPrivacy, s.PublicKey, s.SigningPhrase, s.WalletRootAddress, ) + if err != nil { + return err + } - return err + return nodecfg.SaveConfigWithTx(tx, &n) } func (db *Database) SaveSetting(setting string, value interface{}) error { @@ -292,7 +313,11 @@ func (db *Database) SaveSetting(setting string, value interface{}) error { value = &sqlite.JSONBlob{Data: value} update, err = db.db.Prepare("UPDATE settings SET networks = ? WHERE synthetic_id = 'id'") case "node-config": - value = &sqlite.JSONBlob{Data: value} + nodeConfig := value.(params.NodeConfig) + if err = nodecfg.SaveNodeConfig(db.db, &nodeConfig); err != nil { + return err + } + value = nil update, err = db.db.Prepare("UPDATE settings SET node_config = ? WHERE synthetic_id = 'id'") case "notifications-enabled?": _, ok := value.(bool) @@ -458,10 +483,6 @@ func (db *Database) SaveSetting(setting string, value interface{}) error { return err } -func (db *Database) GetNodeConfig(nodecfg interface{}) error { - return db.db.QueryRow("SELECT node_config FROM settings WHERE synthetic_id = 'id'").Scan(&sqlite.JSONBlob{Data: nodecfg}) -} - func (db *Database) GetSettings() (Settings, error) { var s Settings err := db.db.QueryRow("SELECT address, anon_metrics_should_send, chaos_mode, currency, current_network, custom_bootnodes, custom_bootnodes_enabled, dapps_address, eip1581_address, fleet, hide_home_tooltip, installation_id, key_uid, keycard_instance_uid, keycard_paired_on, keycard_pairing, last_updated, latest_derived_path, link_preview_request_enabled, link_previews_enabled_sites, log_level, mnemonic, name, networks, notifications_enabled, push_notifications_server_enabled, push_notifications_from_contacts_only, remote_push_notifications_enabled, send_push_notifications, push_notifications_block_mentions, photo_path, pinned_mailservers, preferred_name, preview_privacy, public_key, remember_syncing_choice, signing_phrase, stickers_packs_installed, stickers_packs_pending, stickers_recent_stickers, syncing_on_mobile_network, default_sync_period, use_mailservers, messages_from_contacts_only, usernames, appearance, profile_pictures_show_to, profile_pictures_visibility, wallet_root_address, wallet_set_up_passed, wallet_visible_tokens, waku_bloom_filter_mode, webview_allow_permission_requests, current_user_status, send_status_updates, gif_recents, gif_favorites, opensea_enabled, last_backup, backup_enabled, telemetry_server_url, auto_message_enabled FROM settings WHERE synthetic_id = 'id'").Scan( diff --git a/multiaccounts/accounts/database_test.go b/multiaccounts/accounts/database_test.go index 49ae7aa81..beb562997 100644 --- a/multiaccounts/accounts/database_test.go +++ b/multiaccounts/accounts/database_test.go @@ -80,16 +80,6 @@ func TestSaveSetting(t *testing.T) { require.NoError(t, err) } -func TestGetNodeConfig(t *testing.T) { - db, stop := setupTestDB(t) - defer stop() - - require.NoError(t, db.CreateSettings(settings, config)) - - _, err := db.GetSettings() - require.NoError(t, err) -} - func TestSaveAccounts(t *testing.T) { type testCase struct { description string diff --git a/node/status_node_services.go b/node/status_node_services.go index 0e596cb57..99ebd88fa 100644 --- a/node/status_node_services.go +++ b/node/status_node_services.go @@ -249,23 +249,22 @@ func (b *StatusNode) wakuService(wakuCfg *params.WakuConfig, clusterCfg *params. func (b *StatusNode) wakuV2Service(nodeConfig *params.NodeConfig) (*wakuv2.Waku, error) { if b.wakuV2Srvc == nil { cfg := &wakuv2.Config{ - MaxMessageSize: wakucommon.DefaultMaxMessageSize, - SoftBlacklistedPeerIDs: nodeConfig.WakuV2Config.SoftBlacklistedPeerIDs, - Host: nodeConfig.WakuV2Config.Host, - Port: nodeConfig.WakuV2Config.Port, - LightClient: nodeConfig.WakuV2Config.LightClient, - KeepAliveInterval: nodeConfig.WakuV2Config.KeepAliveInterval, - RelayNodes: nodeConfig.ClusterConfig.RelayNodes, - StoreNodes: nodeConfig.ClusterConfig.StoreNodes, - FilterNodes: nodeConfig.ClusterConfig.FilterNodes, - LightpushNodes: nodeConfig.ClusterConfig.LightpushNodes, - Rendezvous: nodeConfig.Rendezvous, - WakuRendezvousNodes: nodeConfig.ClusterConfig.WakuRendezvousNodes, - PeerExchange: nodeConfig.WakuV2Config.PeerExchange, - DiscoveryLimit: nodeConfig.WakuV2Config.DiscoveryLimit, - PersistPeers: nodeConfig.WakuV2Config.PersistPeers, - DiscV5BootstrapNodes: nodeConfig.ClusterConfig.DiscV5BootstrapNodes, - EnableDiscV5: nodeConfig.WakuV2Config.EnableDiscV5, + MaxMessageSize: wakucommon.DefaultMaxMessageSize, + Host: nodeConfig.WakuV2Config.Host, + Port: nodeConfig.WakuV2Config.Port, + LightClient: nodeConfig.WakuV2Config.LightClient, + KeepAliveInterval: nodeConfig.WakuV2Config.KeepAliveInterval, + RelayNodes: nodeConfig.ClusterConfig.RelayNodes, + StoreNodes: nodeConfig.ClusterConfig.StoreNodes, + FilterNodes: nodeConfig.ClusterConfig.FilterNodes, + LightpushNodes: nodeConfig.ClusterConfig.LightpushNodes, + Rendezvous: nodeConfig.Rendezvous, + WakuRendezvousNodes: nodeConfig.ClusterConfig.WakuRendezvousNodes, + PeerExchange: nodeConfig.WakuV2Config.PeerExchange, + DiscoveryLimit: nodeConfig.WakuV2Config.DiscoveryLimit, + PersistPeers: nodeConfig.WakuV2Config.PersistPeers, + DiscV5BootstrapNodes: nodeConfig.ClusterConfig.DiscV5BootstrapNodes, + EnableDiscV5: nodeConfig.WakuV2Config.EnableDiscV5, } if nodeConfig.WakuV2Config.MaxMessageSize > 0 { diff --git a/nodecfg/node_config.go b/nodecfg/node_config.go new file mode 100644 index 000000000..9f1327076 --- /dev/null +++ b/nodecfg/node_config.go @@ -0,0 +1,732 @@ +package nodecfg + +import ( + "context" + "database/sql" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/p2p/discv5" + "github.com/status-im/status-go/eth-node/crypto" + "github.com/status-im/status-go/params" + "github.com/status-im/status-go/sqlite" +) + +const StaticNodes = "static" +const BootNodes = "boot" +const TrustedMailServers = "trusted_mailserver" +const PushNotificationsServers = "pushnotification" +const RendezvousNodes = "rendezvous" +const RelayNodes = "relay" +const StoreNodes = "store" +const FilterNodes = "filter" +const LightpushNodes = "lightpush" +const WakuRendezvousNodes = "waku_rendezvous" +const DiscV5BootstrapNodes = "discV5boot" + +func nodeConfigWasMigrated(tx *sql.Tx) (migrated bool, err error) { + row := tx.QueryRow("SELECT exists(SELECT 1 FROM node_config)") + switch err := row.Scan(&migrated); err { + case sql.ErrNoRows, nil: + return migrated, nil + default: + return migrated, err + } +} + +type insertFn func(tx *sql.Tx, c *params.NodeConfig) error + +func insertNodeConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(` + INSERT OR REPLACE INTO node_config ( + network_id, data_dir, keystore_dir, node_key, no_discovery, rendezvous, + listen_addr, advertise_addr, name, version, api_modules, tls_enabled, + max_peers, max_pending_peers, enable_status_service, enable_ntp_sync, + bridge_enabled, wallet_enabled, local_notifications_enabled, + browser_enabled, permissions_enabled, mailservers_enabled, + swarm_enabled, mailserver_registry_address, web3provider_enabled, + ens_enabled, synthetic_id + ) VALUES ( + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, 'id' + )`, + c.NetworkID, c.DataDir, c.KeyStoreDir, c.NodeKey, c.NoDiscovery, c.Rendezvous, + c.ListenAddr, c.AdvertiseAddr, c.Name, c.Version, c.APIModules, + c.TLSEnabled, c.MaxPeers, c.MaxPendingPeers, + c.EnableStatusService, c.EnableNTPSync, + c.BridgeConfig.Enabled, c.WalletConfig.Enabled, c.LocalNotificationsConfig.Enabled, + c.BrowsersConfig.Enabled, c.PermissionsConfig.Enabled, c.MailserversConfig.Enabled, + c.SwarmConfig.Enabled, c.MailServerRegistryAddress, c.Web3ProviderConfig.Enabled, + c.ENSConfig.Enabled, + ) + return err +} + +func insertHTTPConfig(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`INSERT OR REPLACE INTO http_config (enabled, host, port, synthetic_id) VALUES (?, ?, ?, 'id')`, c.HTTPEnabled, c.HTTPHost, c.HTTPPort); err != nil { + return err + } + + if _, err := tx.Exec(`DELETE FROM http_virtual_hosts WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, httpVirtualHost := range c.HTTPVirtualHosts { + if _, err := tx.Exec(`INSERT OR REPLACE INTO http_virtual_hosts (host, synthetic_id) VALUES (?, 'id')`, httpVirtualHost); err != nil { + return err + } + } + + if _, err := tx.Exec(`DELETE FROM http_cors WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, httpCors := range c.HTTPCors { + if _, err := tx.Exec(`INSERT OR REPLACE INTO http_cors (cors, synthetic_id) VALUES (?, 'id')`, httpCors); err != nil { + return err + } + } + + return nil +} + +func insertLogConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(` + INSERT OR REPLACE INTO log_config ( + enabled, mobile_system, log_dir, log_level, max_backups, max_size, + file, compress_rotated, log_to_stderr, synthetic_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'id' )`, + c.LogEnabled, c.LogMobileSystem, c.LogDir, c.LogLevel, c.LogMaxBackups, c.LogMaxSize, + c.LogFile, c.LogCompressRotated, c.LogToStderr, + ) + + return err +} + +func insertNetworkConfig(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`DELETE FROM network_config WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, network := range c.Networks { + _, err := tx.Exec(` + INSERT OR REPLACE INTO network_config ( + chain_id, chain_name, rpc_url, block_explorer_url, icon_url, native_currency_name, + native_currency_symbol, native_currency_decimals, is_test, layer, enabled, + synthetic_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'id' )`, + network.ChainID, network.ChainName, network.RPCURL, network.BlockExplorerURL, network.IconURL, network.NativeCurrencyName, + network.NativeCurrencySymbol, network.NativeCurrencyDecimals, network.IsTest, network.Layer, network.Enabled, + ) + if err != nil { + return err + } + } + return nil +} + +func insertLightETHConfigTrustedNodes(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`DELETE FROM light_eth_trusted_nodes WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, node := range c.LightEthConfig.TrustedNodes { + _, err := tx.Exec(`INSERT OR REPLACE INTO light_eth_trusted_nodes (node, synthetic_id) VALUES (?, 'id')`, node) + if err != nil { + return err + } + } + return nil +} + +func insertRegisterTopics(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`DELETE FROM register_topics WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, topic := range c.RegisterTopics { + _, err := tx.Exec(`INSERT OR REPLACE INTO register_topics (topic, synthetic_id) VALUES (?, 'id')`, topic) + if err != nil { + return err + } + } + return nil +} + +func insertRequireTopics(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`DELETE FROM require_topics WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for topic, limits := range c.RequireTopics { + _, err := tx.Exec(`INSERT OR REPLACE INTO require_topics (topic, min, max, synthetic_id) VALUES (?, ?, ?, 'id')`, topic, limits.Min, limits.Max) + if err != nil { + return err + } + } + return nil +} + +func insertIPCConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(`INSERT OR REPLACE INTO ipc_config (enabled, file, synthetic_id) VALUES (?, ?, 'id')`, c.IPCEnabled, c.IPCFile) + return err +} + +func insertClusterConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(`INSERT OR REPLACE INTO cluster_config (enabled, fleet, synthetic_id) VALUES (?, ?, 'id')`, c.ClusterConfig.Enabled, c.ClusterConfig.Fleet) + return err +} + +func insertUpstreamConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(`INSERT OR REPLACE INTO upstream_config (enabled, url, synthetic_id) VALUES (?, ?, 'id')`, c.UpstreamConfig.Enabled, c.UpstreamConfig.URL) + return err +} + +func insertLightETHConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(`INSERT OR REPLACE INTO light_eth_config (enabled, database_cache, min_trusted_fraction, synthetic_id) VALUES (?, ?, ?, 'id')`, c.LightEthConfig.Enabled, c.LightEthConfig.DatabaseCache, c.LightEthConfig.MinTrustedFraction) + return err +} + +func insertShhExtConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(` + INSERT OR REPLACE INTO shhext_config ( + pfs_enabled, backup_disabled_data_dir, installation_id, mailserver_confirmations, enable_connection_manager, + enable_last_used_monitor, connection_target, request_delay, max_server_failures, max_message_delivery_attempts, + whisper_cache_dir, disable_generic_discovery_topic, send_v1_messages, data_sync_enabled, verify_transaction_url, + verify_ens_url, verify_ens_contract_address, verify_transaction_chain_id, anon_metrics_server_enabled, + anon_metrics_send_id, anon_metrics_server_postgres_uri, bandwidth_stats_enabled, enable_mailserver_cycle, synthetic_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'id')`, + c.ShhextConfig.PFSEnabled, c.ShhextConfig.BackupDisabledDataDir, c.ShhextConfig.InstallationID, c.ShhextConfig.MailServerConfirmations, c.ShhextConfig.EnableConnectionManager, + c.ShhextConfig.EnableLastUsedMonitor, c.ShhextConfig.ConnectionTarget, c.ShhextConfig.RequestsDelay, c.ShhextConfig.MaxServerFailures, c.ShhextConfig.MaxMessageDeliveryAttempts, + c.ShhextConfig.WhisperCacheDir, c.ShhextConfig.DisableGenericDiscoveryTopic, c.ShhextConfig.SendV1Messages, c.ShhextConfig.DataSyncEnabled, c.ShhextConfig.VerifyTransactionURL, + c.ShhextConfig.VerifyENSURL, c.ShhextConfig.VerifyENSContractAddress, c.ShhextConfig.VerifyTransactionChainID, c.ShhextConfig.AnonMetricsServerEnabled, + c.ShhextConfig.AnonMetricsSendID, c.ShhextConfig.AnonMetricsServerPostgresURI, c.ShhextConfig.BandwidthStatsEnabled, c.ShhextConfig.EnableMailserverCycle, + ) + if err != nil { + return err + } + + if _, err := tx.Exec(`DELETE FROM shhext_default_push_notification_servers WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, pubKey := range c.ShhextConfig.DefaultPushNotificationsServers { + hexpubk := hexutil.Encode(crypto.FromECDSAPub(pubKey)) + _, err := tx.Exec(`INSERT OR REPLACE INTO shhext_default_push_notification_servers (public_key, synthetic_id) VALUES (?, 'id')`, hexpubk) + if err != nil { + return err + } + } + return nil +} + +func insertWakuV2Config(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(` + INSERT OR REPLACE INTO wakuv2_config ( + enabled, host, port, keep_alive_interval, light_client, full_node, discovery_limit, persist_peers, data_dir, + max_message_size, enable_confirmations, peer_exchange, enable_discv5, udp_port, auto_update, synthetic_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'id')`, + c.WakuV2Config.Enabled, c.WakuV2Config.Host, c.WakuV2Config.Port, c.WakuV2Config.KeepAliveInterval, c.WakuV2Config.LightClient, c.WakuV2Config.FullNode, c.WakuV2Config.DiscoveryLimit, c.WakuV2Config.PersistPeers, c.WakuV2Config.DataDir, + c.WakuV2Config.MaxMessageSize, c.WakuV2Config.EnableConfirmations, c.WakuV2Config.PeerExchange, c.WakuV2Config.EnableDiscV5, c.WakuV2Config.UDPPort, c.WakuV2Config.AutoUpdate, + ) + if err != nil { + return err + } + + if _, err := tx.Exec(`DELETE FROM wakuv2_custom_nodes WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for name, multiaddress := range c.WakuV2Config.CustomNodes { + _, err := tx.Exec(`INSERT OR REPLACE INTO wakuv2_custom_nodes (name, multiaddress, synthetic_id) VALUES (?, ?, 'id')`, name, multiaddress) + if err != nil { + return err + } + } + return nil +} + +func insertWakuConfig(tx *sql.Tx, c *params.NodeConfig) error { + _, err := tx.Exec(` + INSERT OR REPLACE INTO waku_config ( + enabled, light_client, full_node, enable_mailserver, data_dir, minimum_pow, mailserver_password, mailserver_rate_limit, mailserver_data_retention, + ttl, max_message_size, enable_rate_limiter, packet_rate_limit_ip, packet_rate_limit_peer_id, bytes_rate_limit_ip, bytes_rate_limit_peer_id, + rate_limit_tolerance, bloom_filter_mode, enable_confirmations, synthetic_id + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'id')`, + c.WakuConfig.Enabled, c.WakuConfig.LightClient, c.WakuConfig.FullNode, c.WakuConfig.EnableMailServer, c.WakuConfig.DataDir, c.WakuConfig.MinimumPoW, + c.WakuConfig.MailServerPassword, c.WakuConfig.MailServerRateLimit, c.WakuConfig.MailServerDataRetention, c.WakuConfig.TTL, c.WakuConfig.MaxMessageSize, + c.WakuConfig.EnableRateLimiter, c.WakuConfig.PacketRateLimitIP, c.WakuConfig.PacketRateLimitPeerID, c.WakuConfig.BytesRateLimitIP, c.WakuConfig.BytesRateLimitPeerID, + c.WakuConfig.RateLimitTolerance, c.WakuConfig.BloomFilterMode, c.WakuConfig.EnableConfirmations, + ) + if err != nil { + return err + } + + if _, err := tx.Exec(`INSERT OR REPLACE INTO waku_config_db_pg (enabled, uri, synthetic_id) VALUES (?, ?, 'id')`, c.WakuConfig.DatabaseConfig.PGConfig.Enabled, c.WakuConfig.DatabaseConfig.PGConfig.URI); err != nil { + return err + } + + if _, err := tx.Exec(`DELETE FROM waku_softblacklisted_peers WHERE synthetic_id = 'id'`); err != nil { + return err + } + + for _, peerID := range c.WakuConfig.SoftBlacklistedPeerIDs { + _, err := tx.Exec(`INSERT OR REPLACE INTO waku_softblacklisted_peers (peer_id, synthetic_id) VALUES (?, 'id')`, peerID) + if err != nil { + return err + } + } + return nil +} + +func insertPushNotificationsServerConfig(tx *sql.Tx, c *params.NodeConfig) error { + hexPrivKey := "" + if c.PushNotificationServerConfig.Identity != nil { + hexPrivKey = hexutil.Encode(crypto.FromECDSA(c.PushNotificationServerConfig.Identity)) + } + _, err := tx.Exec(`INSERT OR REPLACE INTO push_notifications_server_config (enabled, identity, gorush_url, synthetic_id) VALUES (?, ?, ?, 'id')`, c.PushNotificationServerConfig.Enabled, hexPrivKey, c.PushNotificationServerConfig.GorushURL) + return err +} + +func insertClusterConfigNodes(tx *sql.Tx, c *params.NodeConfig) error { + if _, err := tx.Exec(`DELETE FROM cluster_nodes WHERE synthetic_id = 'id'`); err != nil { + return err + } + + nodeMap := make(map[string][]string) + nodeMap[StaticNodes] = c.ClusterConfig.StaticNodes + nodeMap[BootNodes] = c.ClusterConfig.BootNodes + nodeMap[TrustedMailServers] = c.ClusterConfig.TrustedMailServers + nodeMap[PushNotificationsServers] = c.ClusterConfig.PushNotificationsServers + nodeMap[RendezvousNodes] = c.ClusterConfig.RendezvousNodes + nodeMap[RelayNodes] = c.ClusterConfig.RelayNodes + nodeMap[StoreNodes] = c.ClusterConfig.StoreNodes + nodeMap[FilterNodes] = c.ClusterConfig.FilterNodes + nodeMap[LightpushNodes] = c.ClusterConfig.LightpushNodes + nodeMap[WakuRendezvousNodes] = c.ClusterConfig.WakuRendezvousNodes + nodeMap[DiscV5BootstrapNodes] = c.ClusterConfig.DiscV5BootstrapNodes + + for nodeType, nodes := range nodeMap { + for _, node := range nodes { + _, err := tx.Exec(`INSERT OR REPLACE INTO cluster_nodes (node, type, synthetic_id) VALUES (?, ?, 'id')`, node, nodeType) + if err != nil { + return err + } + } + } + + return nil +} + +func SaveConfigWithTx(tx *sql.Tx, c *params.NodeConfig) error { + insertFNs := []insertFn{ + insertNodeConfig, + insertHTTPConfig, + insertIPCConfig, + insertLogConfig, + insertUpstreamConfig, + insertNetworkConfig, + insertClusterConfig, + insertClusterConfigNodes, + insertLightETHConfig, + insertLightETHConfigTrustedNodes, + insertRegisterTopics, + insertRequireTopics, + insertPushNotificationsServerConfig, + insertShhExtConfig, + insertWakuConfig, + insertWakuV2Config, + } + + for _, fn := range insertFNs { + err := fn(tx, c) + if err != nil { + return err + } + } + + return nil +} + +func SaveNodeConfig(db *sql.DB, c *params.NodeConfig) error { + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + if err != nil { + return err + } + + defer func() { + if err == nil { + err = tx.Commit() + return + } + // don't shadow original error + _ = tx.Rollback() + }() + + return SaveConfigWithTx(tx, c) +} + +func migrateNodeConfig(tx *sql.Tx) error { + nodecfg := ¶ms.NodeConfig{} + err := tx.QueryRow("SELECT node_config FROM settings WHERE synthetic_id = 'id'").Scan(&sqlite.JSONBlob{Data: nodecfg}) + + if err != nil && err != sql.ErrNoRows { + return err + } + + if err == sql.ErrNoRows { + // Can't migrate because there's no data + return nil + } + + err = SaveConfigWithTx(tx, nodecfg) + if err != nil { + return err + } + + return nil +} + +func loadNodeConfig(tx *sql.Tx) (*params.NodeConfig, error) { + nodecfg := ¶ms.NodeConfig{} + + err := tx.QueryRow(` + SELECT + network_id, data_dir, keystore_dir, node_key, no_discovery, rendezvous, + listen_addr, advertise_addr, name, version, api_modules, tls_enabled, max_peers, max_pending_peers, + enable_status_service, enable_ntp_sync, bridge_enabled, wallet_enabled, local_notifications_enabled, + browser_enabled, permissions_enabled, mailservers_enabled, swarm_enabled, + mailserver_registry_address, web3provider_enabled, ens_enabled FROM node_config + WHERE synthetic_id = 'id' + `).Scan( + &nodecfg.NetworkID, &nodecfg.DataDir, &nodecfg.KeyStoreDir, &nodecfg.NodeKey, &nodecfg.NoDiscovery, &nodecfg.Rendezvous, + &nodecfg.ListenAddr, &nodecfg.AdvertiseAddr, &nodecfg.Name, &nodecfg.Version, &nodecfg.APIModules, &nodecfg.TLSEnabled, &nodecfg.MaxPeers, &nodecfg.MaxPendingPeers, + &nodecfg.EnableStatusService, &nodecfg.EnableNTPSync, &nodecfg.BridgeConfig.Enabled, &nodecfg.WalletConfig.Enabled, &nodecfg.LocalNotificationsConfig.Enabled, + &nodecfg.BrowsersConfig.Enabled, &nodecfg.PermissionsConfig.Enabled, &nodecfg.MailserversConfig.Enabled, &nodecfg.SwarmConfig.Enabled, + &nodecfg.MailServerRegistryAddress, &nodecfg.Web3ProviderConfig.Enabled, &nodecfg.ENSConfig.Enabled, + ) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + err = tx.QueryRow(`SELECT enabled, host, port FROM http_config WHERE synthetic_id = 'id'`).Scan(&nodecfg.HTTPEnabled, &nodecfg.HTTPHost, &nodecfg.HTTPPort) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err := tx.Query("SELECT host FROM http_virtual_hosts WHERE synthetic_id = 'id' ORDER BY host ASC") + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var host string + err = rows.Scan(&host) + if err != nil { + return nil, err + } + nodecfg.HTTPVirtualHosts = append(nodecfg.HTTPVirtualHosts, host) + } + + rows, err = tx.Query("SELECT cors FROM http_cors WHERE synthetic_id = 'id' ORDER BY cors ASC") + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var cors string + err = rows.Scan(&cors) + if err != nil { + return nil, err + } + nodecfg.HTTPCors = append(nodecfg.HTTPCors, cors) + } + + err = tx.QueryRow("SELECT enabled, file FROM ipc_config WHERE synthetic_id = 'id'").Scan(&nodecfg.IPCEnabled, &nodecfg.IPCFile) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + err = tx.QueryRow("SELECT enabled, mobile_system, log_dir, log_level, file, max_backups, max_size, compress_rotated, log_to_stderr FROM log_config WHERE synthetic_id = 'id'").Scan( + &nodecfg.LogEnabled, &nodecfg.LogMobileSystem, &nodecfg.LogDir, &nodecfg.LogLevel, &nodecfg.LogFile, &nodecfg.LogMaxBackups, &nodecfg.LogMaxSize, &nodecfg.LogCompressRotated, &nodecfg.LogToStderr) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + err = tx.QueryRow("SELECT enabled, url FROM upstream_config WHERE synthetic_id = 'id'").Scan(&nodecfg.UpstreamConfig.Enabled, &nodecfg.UpstreamConfig.URL) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err = tx.Query(`SELECT + chain_id, chain_name, rpc_url, block_explorer_url, icon_url, native_currency_name, + native_currency_symbol, native_currency_decimals, is_test, layer, enabled + FROM network_config WHERE synthetic_id = 'id' ORDER BY chain_id ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var n params.Network + err = rows.Scan(&n.ChainID, &n.ChainName, &n.RPCURL, &n.BlockExplorerURL, &n.IconURL, + &n.NativeCurrencyName, &n.NativeCurrencySymbol, &n.NativeCurrencyDecimals, &n.IsTest, + &n.Layer, &n.Enabled, + ) + if err != nil { + return nil, err + } + nodecfg.Networks = append(nodecfg.Networks, n) + } + + err = tx.QueryRow("SELECT enabled, fleet FROM cluster_config WHERE synthetic_id = 'id'").Scan(&nodecfg.ClusterConfig.Enabled, &nodecfg.ClusterConfig.Fleet) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + nodeMap := make(map[string]*[]string) + nodeMap[StaticNodes] = &nodecfg.ClusterConfig.StaticNodes + nodeMap[BootNodes] = &nodecfg.ClusterConfig.BootNodes + nodeMap[TrustedMailServers] = &nodecfg.ClusterConfig.TrustedMailServers + nodeMap[PushNotificationsServers] = &nodecfg.ClusterConfig.PushNotificationsServers + nodeMap[RendezvousNodes] = &nodecfg.ClusterConfig.RendezvousNodes + nodeMap[RelayNodes] = &nodecfg.ClusterConfig.RelayNodes + nodeMap[StoreNodes] = &nodecfg.ClusterConfig.StoreNodes + nodeMap[FilterNodes] = &nodecfg.ClusterConfig.FilterNodes + nodeMap[LightpushNodes] = &nodecfg.ClusterConfig.LightpushNodes + nodeMap[WakuRendezvousNodes] = &nodecfg.ClusterConfig.WakuRendezvousNodes + nodeMap[DiscV5BootstrapNodes] = &nodecfg.ClusterConfig.DiscV5BootstrapNodes + rows, err = tx.Query(`SELECT node, type FROM cluster_nodes WHERE synthetic_id = 'id' ORDER BY node ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var node string + var nodeType string + err = rows.Scan(&node, &nodeType) + if err != nil { + return nil, err + } + if nodeList, ok := nodeMap[nodeType]; ok { + *nodeList = append(*nodeList, node) + } + } + + err = tx.QueryRow("SELECT enabled, database_cache, min_trusted_fraction FROM light_eth_config WHERE synthetic_id = 'id'").Scan(&nodecfg.LightEthConfig.Enabled, &nodecfg.LightEthConfig.DatabaseCache, &nodecfg.LightEthConfig.MinTrustedFraction) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err = tx.Query(`SELECT node FROM light_eth_trusted_nodes WHERE synthetic_id = 'id' ORDER BY node ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var node string + err = rows.Scan(&node) + if err != nil { + return nil, err + } + nodecfg.LightEthConfig.TrustedNodes = append(nodecfg.LightEthConfig.TrustedNodes, node) + } + + rows, err = tx.Query(`SELECT topic FROM register_topics WHERE synthetic_id = 'id' ORDER BY topic ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var topic discv5.Topic + err = rows.Scan(&topic) + if err != nil { + return nil, err + } + nodecfg.RegisterTopics = append(nodecfg.RegisterTopics, topic) + } + + rows, err = tx.Query(`SELECT topic, min, max FROM require_topics WHERE synthetic_id = 'id' ORDER BY topic ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + nodecfg.RequireTopics = make(map[discv5.Topic]params.Limits) + for rows.Next() { + var topic discv5.Topic + var limit params.Limits + err = rows.Scan(&topic, &limit.Min, &limit.Max) + if err != nil { + return nil, err + } + nodecfg.RequireTopics[topic] = limit + } + + var pushNotifHexIdentity string + err = tx.QueryRow("SELECT enabled, identity, gorush_url FROM push_notifications_server_config WHERE synthetic_id = 'id'").Scan(&nodecfg.PushNotificationServerConfig.Enabled, &pushNotifHexIdentity, &nodecfg.PushNotificationServerConfig.GorushURL) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + if pushNotifHexIdentity != "" { + b, err := hexutil.Decode(pushNotifHexIdentity) + if err != nil { + return nil, err + } + nodecfg.PushNotificationServerConfig.Identity, err = crypto.ToECDSA(b) + if err != nil { + return nil, err + } + } + + err = tx.QueryRow(` + SELECT pfs_enabled, backup_disabled_data_dir, installation_id, mailserver_confirmations, enable_connection_manager, + enable_last_used_monitor, connection_target, request_delay, max_server_failures, max_message_delivery_attempts, + whisper_cache_dir, disable_generic_discovery_topic, send_v1_messages, data_sync_enabled, verify_transaction_url, + verify_ens_url, verify_ens_contract_address, verify_transaction_chain_id, anon_metrics_server_enabled, + anon_metrics_send_id, anon_metrics_server_postgres_uri, bandwidth_stats_enabled, enable_mailserver_cycle FROM shhext_config WHERE synthetic_id = 'id' + `).Scan( + &nodecfg.ShhextConfig.PFSEnabled, &nodecfg.ShhextConfig.BackupDisabledDataDir, &nodecfg.ShhextConfig.InstallationID, &nodecfg.ShhextConfig.MailServerConfirmations, &nodecfg.ShhextConfig.EnableConnectionManager, + &nodecfg.ShhextConfig.EnableLastUsedMonitor, &nodecfg.ShhextConfig.ConnectionTarget, &nodecfg.ShhextConfig.RequestsDelay, &nodecfg.ShhextConfig.MaxServerFailures, &nodecfg.ShhextConfig.MaxMessageDeliveryAttempts, + &nodecfg.ShhextConfig.WhisperCacheDir, &nodecfg.ShhextConfig.DisableGenericDiscoveryTopic, &nodecfg.ShhextConfig.SendV1Messages, &nodecfg.ShhextConfig.DataSyncEnabled, &nodecfg.ShhextConfig.VerifyTransactionURL, + &nodecfg.ShhextConfig.VerifyENSURL, &nodecfg.ShhextConfig.VerifyENSContractAddress, &nodecfg.ShhextConfig.VerifyTransactionChainID, &nodecfg.ShhextConfig.AnonMetricsServerEnabled, + &nodecfg.ShhextConfig.AnonMetricsSendID, &nodecfg.ShhextConfig.AnonMetricsServerPostgresURI, &nodecfg.ShhextConfig.BandwidthStatsEnabled, &nodecfg.ShhextConfig.EnableMailserverCycle, + ) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err = tx.Query(`SELECT public_key FROM shhext_default_push_notification_servers WHERE synthetic_id = 'id' ORDER BY public_key ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var pubKeyStr string + err = rows.Scan(&pubKeyStr) + if err != nil { + return nil, err + } + + if pubKeyStr != "" { + b, err := hexutil.Decode(pubKeyStr) + if err != nil { + return nil, err + } + + pubKey, err := crypto.UnmarshalPubkey(b) + if err != nil { + return nil, err + } + nodecfg.ShhextConfig.DefaultPushNotificationsServers = append(nodecfg.ShhextConfig.DefaultPushNotificationsServers, pubKey) + } + } + + err = tx.QueryRow(` + SELECT enabled, host, port, keep_alive_interval, light_client, full_node, discovery_limit, persist_peers, data_dir, + max_message_size, enable_confirmations, peer_exchange, enable_discv5, udp_port, auto_update + FROM wakuv2_config WHERE synthetic_id = 'id' + `).Scan( + &nodecfg.WakuV2Config.Enabled, &nodecfg.WakuV2Config.Host, &nodecfg.WakuV2Config.Port, &nodecfg.WakuV2Config.KeepAliveInterval, &nodecfg.WakuV2Config.LightClient, &nodecfg.WakuV2Config.FullNode, + &nodecfg.WakuV2Config.DiscoveryLimit, &nodecfg.WakuV2Config.PersistPeers, &nodecfg.WakuV2Config.DataDir, &nodecfg.WakuV2Config.MaxMessageSize, &nodecfg.WakuV2Config.EnableConfirmations, + &nodecfg.WakuV2Config.PeerExchange, &nodecfg.WakuV2Config.EnableDiscV5, &nodecfg.WakuV2Config.UDPPort, &nodecfg.WakuV2Config.AutoUpdate, + ) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err = tx.Query(`SELECT name, multiaddress FROM wakuv2_custom_nodes WHERE synthetic_id = 'id' ORDER BY name ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + nodecfg.WakuV2Config.CustomNodes = make(map[string]string) + for rows.Next() { + var name string + var multiaddress string + err = rows.Scan(&name, &multiaddress) + if err != nil { + return nil, err + } + nodecfg.WakuV2Config.CustomNodes[name] = multiaddress + } + + err = tx.QueryRow(` + SELECT enabled, light_client, full_node, enable_mailserver, data_dir, minimum_pow, mailserver_password, mailserver_rate_limit, mailserver_data_retention, + ttl, max_message_size, enable_rate_limiter, packet_rate_limit_ip, packet_rate_limit_peer_id, bytes_rate_limit_ip, bytes_rate_limit_peer_id, + rate_limit_tolerance, bloom_filter_mode, enable_confirmations + FROM waku_config WHERE synthetic_id = 'id' + `).Scan( + &nodecfg.WakuConfig.Enabled, &nodecfg.WakuConfig.LightClient, &nodecfg.WakuConfig.FullNode, &nodecfg.WakuConfig.EnableMailServer, &nodecfg.WakuConfig.DataDir, &nodecfg.WakuConfig.MinimumPoW, + &nodecfg.WakuConfig.MailServerPassword, &nodecfg.WakuConfig.MailServerRateLimit, &nodecfg.WakuConfig.MailServerDataRetention, &nodecfg.WakuConfig.TTL, &nodecfg.WakuConfig.MaxMessageSize, + &nodecfg.WakuConfig.EnableRateLimiter, &nodecfg.WakuConfig.PacketRateLimitIP, &nodecfg.WakuConfig.PacketRateLimitPeerID, &nodecfg.WakuConfig.BytesRateLimitIP, &nodecfg.WakuConfig.BytesRateLimitPeerID, + &nodecfg.WakuConfig.RateLimitTolerance, &nodecfg.WakuConfig.BloomFilterMode, &nodecfg.WakuConfig.EnableConfirmations, + ) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + err = tx.QueryRow("SELECT enabled, uri FROM waku_config_db_pg WHERE synthetic_id = 'id'").Scan(&nodecfg.WakuConfig.DatabaseConfig.PGConfig.Enabled, &nodecfg.WakuConfig.DatabaseConfig.PGConfig.URI) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + + rows, err = tx.Query(`SELECT peer_id FROM waku_softblacklisted_peers WHERE synthetic_id = 'id' ORDER BY peer_id ASC`) + if err != nil && err != sql.ErrNoRows { + return nil, err + } + defer rows.Close() + for rows.Next() { + var peerID string + err = rows.Scan(&peerID) + if err != nil { + return nil, err + } + nodecfg.WakuConfig.SoftBlacklistedPeerIDs = append(nodecfg.WakuConfig.SoftBlacklistedPeerIDs, peerID) + } + + return nodecfg, nil +} + +func MigrateNodeConfig(db *sql.DB) error { + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + if err != nil { + return err + } + + defer func() { + if err == nil { + err = tx.Commit() + return + } + // don't shadow original error + _ = tx.Rollback() + }() + + migrated, err := nodeConfigWasMigrated(tx) + if err != nil { + return err + } + + if !migrated { + return migrateNodeConfig(tx) + } + + return nil +} + +func GetNodeConfig(db *sql.DB) (*params.NodeConfig, error) { + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + if err != nil { + return nil, err + } + + defer func() { + if err == nil { + err = tx.Commit() + return + } + // don't shadow original error + _ = tx.Rollback() + }() + + return loadNodeConfig(tx) +} diff --git a/params/config.go b/params/config.go index 9e6f0a6ca..975ac9c8f 100644 --- a/params/config.go +++ b/params/config.go @@ -22,7 +22,6 @@ import ( "github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/protocol/pushnotificationserver" - "github.com/status-im/status-go/rpc/network" "github.com/status-im/status-go/static" wakucommon "github.com/status-im/status-go/waku/common" wakuv2common "github.com/status-im/status-go/wakuv2/common" @@ -179,57 +178,14 @@ type WakuV2Config struct { //it attempts to reconnect to these peers PersistPeers bool - // EnableMailServer is mode when node is capable of delivering expired messages on demand - EnableMailServer bool - // DataDir is the file system folder Waku should use for any data storage needs. // For instance, MailServer will use this directory to store its data. DataDir string - // MailServerPassword for symmetric encryption of waku message history requests. - // (if no account file selected, then this password is used for symmetric encryption). - MailServerPassword string - - // MailServerRateLimit minimum time between queries to mail server per peer. - MailServerRateLimit int - - // MailServerDataRetention is a number of days data should be stored by MailServer. - MailServerDataRetention int - // MaxMessageSize is a maximum size of a devp2p packet handled by the Waku protocol, // not only the size of envelopes sent in that packet. MaxMessageSize uint32 - // DatabaseConfig is configuration for which data store we use. - DatabaseConfig DatabaseConfig - - // EnableRateLimiter set to true enables IP and peer ID rate limiting. - EnableRateLimiter bool - - // PacketRateLimitIP sets the limit on the number of packets per second - // from a given IP. - PacketRateLimitIP int64 - - // PacketRateLimitPeerID sets the limit on the number of packets per second - // from a given peer ID. - PacketRateLimitPeerID int64 - - // BytesRateLimitIP sets the limit on the number of bytes per second - // from a given IP. - BytesRateLimitIP int64 - - // BytesRateLimitPeerID sets the limit on the number of bytes per second - // from a given peer ID. - BytesRateLimitPeerID int64 - - // RateLimitTolerance is a number of how many a limit must be exceeded - // in order to drop a peer. - // If equal to 0, the peers are never dropped. - RateLimitTolerance int64 - - // SoftBlacklistedPeerIDs is a list of peer ids that should be soft-blacklisted (messages should be dropped but connection kept) - SoftBlacklistedPeerIDs []string - // EnableConfirmations when true, instructs that confirmation should be sent for received messages EnableConfirmations bool @@ -473,7 +429,7 @@ type NodeConfig struct { UpstreamConfig UpstreamRPCConfig `json:"UpstreamConfig"` // Initial networks to load - Networks []network.Network + Networks []Network // ClusterConfig extra configuration for supporting cluster peers. ClusterConfig ClusterConfig `json:"ClusterConfig," validate:"structonly"` @@ -534,6 +490,20 @@ type NodeConfig struct { PushNotificationServerConfig pushnotificationserver.Config `json:"PushNotificationServerConfig"` } +type Network struct { + ChainID uint64 `json:"chainId"` + ChainName string `json:"chainName"` + RPCURL string `json:"rpcUrl"` + BlockExplorerURL string `json:"blockExplorerUrl,omitempty"` + IconURL string `json:"iconUrl,omitempty"` + NativeCurrencyName string `json:"nativeCurrencyName,omitempty"` + NativeCurrencySymbol string `json:"nativeCurrencySymbol,omitempty"` + NativeCurrencyDecimals uint64 `json:"nativeCurrencyDecimals"` + IsTest bool `json:"isTest"` + Layer uint64 `json:"layer"` + Enabled bool `json:"enabled"` +} + // WalletConfig extra configuration for wallet.Service. type WalletConfig struct { Enabled bool @@ -965,14 +935,6 @@ func (c *NodeConfig) Validate() error { } } - // WakuV2's data directory must be relative to the main data directory - // if EnableMailServer is true. - if c.WakuV2Config.Enabled && c.WakuV2Config.EnableMailServer { - if !strings.HasPrefix(c.WakuV2Config.DataDir, c.DataDir) { - return fmt.Errorf("WakuV2Config.DataDir must start with DataDir fragment") - } - } - if !c.NoDiscovery && len(c.ClusterConfig.BootNodes) == 0 { // No point in running discovery if we don't have bootnodes. // In case we do have bootnodes, NoDiscovery should be true. diff --git a/rpc/client.go b/rpc/client.go index 82621d490..6fa302c3c 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -59,7 +59,7 @@ type Client struct { // // Client is safe for concurrent use and will automatically // reconnect to the server if connection is lost. -func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.UpstreamRPCConfig, networks []network.Network, db *sql.DB) (*Client, error) { +func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.UpstreamRPCConfig, networks []params.Network, db *sql.DB) (*Client, error) { var err error log := log.New("package", "status-go/rpc.Client") diff --git a/rpc/client_test.go b/rpc/client_test.go index b3521e867..0c1c72f0d 100644 --- a/rpc/client_test.go +++ b/rpc/client_test.go @@ -14,7 +14,6 @@ import ( "github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/params" - "github.com/status-im/status-go/rpc/network" gethrpc "github.com/ethereum/go-ethereum/rpc" ) @@ -46,7 +45,7 @@ func TestBlockedRoutesCall(t *testing.T) { gethRPCClient, err := gethrpc.Dial(ts.URL) require.NoError(t, err) - c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []network.Network{}, db) + c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, db) require.NoError(t, err) for _, m := range blockedMethods { @@ -85,7 +84,7 @@ func TestBlockedRoutesRawCall(t *testing.T) { gethRPCClient, err := gethrpc.Dial(ts.URL) require.NoError(t, err) - c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []network.Network{}, db) + c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, db) require.NoError(t, err) for _, m := range blockedMethods { @@ -112,7 +111,7 @@ func TestUpdateUpstreamURL(t *testing.T) { gethRPCClient, err := gethrpc.Dial(ts.URL) require.NoError(t, err) - c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: ts.URL}, []network.Network{}, db) + c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: ts.URL}, []params.Network{}, db) require.NoError(t, err) require.Equal(t, ts.URL, c.upstreamURL) diff --git a/rpc/network/network.go b/rpc/network/network.go index 7f38d38a7..949320ef4 100644 --- a/rpc/network/network.go +++ b/rpc/network/network.go @@ -3,21 +3,9 @@ package network import ( "bytes" "database/sql" -) -type Network struct { - ChainID uint64 `json:"chainId"` - ChainName string `json:"chainName"` - RPCURL string `json:"rpcUrl"` - BlockExplorerURL string `json:"blockExplorerUrl,omitempty"` - IconURL string `json:"iconUrl,omitempty"` - NativeCurrencyName string `json:"nativeCurrencyName,omitempty"` - NativeCurrencySymbol string `json:"nativeCurrencySymbol,omitempty"` - NativeCurrencyDecimals uint64 `json:"nativeCurrencyDecimals"` - IsTest bool `json:"isTest"` - Layer uint64 `json:"layer"` - Enabled bool `json:"enabled"` -} + "github.com/status-im/status-go/params" +) const baseQuery = "SELECT chain_id, chain_name, rpc_url, block_explorer_url, icon_url, native_currency_name, native_currency_symbol, native_currency_decimals, is_test, layer, enabled FROM networks" @@ -57,15 +45,15 @@ func (nq *networksQuery) filterChainID(chainID uint64) *networksQuery { return nq } -func (nq *networksQuery) exec(db *sql.DB) ([]*Network, error) { +func (nq *networksQuery) exec(db *sql.DB) ([]*params.Network, error) { rows, err := db.Query(nq.buf.String(), nq.args...) if err != nil { return nil, err } - var res []*Network + var res []*params.Network defer rows.Close() for rows.Next() { - network := Network{} + network := params.Network{} err := rows.Scan( &network.ChainID, &network.ChainName, &network.RPCURL, &network.BlockExplorerURL, &network.IconURL, &network.NativeCurrencyName, &network.NativeCurrencySymbol, &network.NativeCurrencyDecimals, @@ -90,7 +78,7 @@ func NewManager(db *sql.DB) *Manager { } } -func (nm *Manager) Init(networks []Network) error { +func (nm *Manager) Init(networks []params.Network) error { if networks == nil { return nil } @@ -110,7 +98,7 @@ func (nm *Manager) Init(networks []Network) error { return nil } -func (nm *Manager) Upsert(network *Network) error { +func (nm *Manager) Upsert(network *params.Network) error { _, err := nm.db.Exec( "INSERT OR REPLACE INTO networks (chain_id, chain_name, rpc_url, block_explorer_url, icon_url, native_currency_name, native_currency_symbol, native_currency_decimals, is_test, layer, enabled) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", network.ChainID, network.ChainName, network.RPCURL, network.BlockExplorerURL, network.IconURL, @@ -125,7 +113,7 @@ func (nm *Manager) Delete(chainID uint64) error { return err } -func (nm *Manager) Find(chainID uint64) *Network { +func (nm *Manager) Find(chainID uint64) *params.Network { networks, err := newNetworksQuery().filterChainID(chainID).exec(nm.db) if len(networks) != 1 || err != nil { return nil @@ -133,7 +121,7 @@ func (nm *Manager) Find(chainID uint64) *Network { return networks[0] } -func (nm *Manager) Get(onlyEnabled bool) ([]*Network, error) { +func (nm *Manager) Get(onlyEnabled bool) ([]*params.Network, error) { query := newNetworksQuery() if onlyEnabled { query.filterEnabled(true) diff --git a/rpc/network/network_test.go b/rpc/network/network_test.go index af14545a6..84a7ca5d0 100644 --- a/rpc/network/network_test.go +++ b/rpc/network/network_test.go @@ -9,9 +9,10 @@ import ( "github.com/stretchr/testify/require" "github.com/status-im/status-go/appdatabase" + "github.com/status-im/status-go/params" ) -var initNetworks = []Network{ +var initNetworks = []params.Network{ { ChainID: 1, ChainName: "Ethereum Mainnet", diff --git a/services/accounts/settings.go b/services/accounts/settings.go index 978e936fd..84cdd8f13 100644 --- a/services/accounts/settings.go +++ b/services/accounts/settings.go @@ -4,6 +4,8 @@ import ( "context" "github.com/status-im/status-go/multiaccounts/accounts" + "github.com/status-im/status-go/nodecfg" + "github.com/status-im/status-go/params" ) func NewSettingsAPI(db *accounts.Database) *SettingsAPI { @@ -27,3 +29,11 @@ func (api *SettingsAPI) SaveSetting(ctx context.Context, typ string, val interfa func (api *SettingsAPI) GetSettings(ctx context.Context) (accounts.Settings, error) { return api.db.GetSettings() } + +func (api *SettingsAPI) NodeConfig(ctx context.Context) (*params.NodeConfig, error) { + return nodecfg.GetNodeConfig(api.db.DB()) +} + +func (api *SettingsAPI) SaveNodeConfig(ctx context.Context, n *params.NodeConfig) error { + return nodecfg.SaveNodeConfig(api.db.DB(), n) +} diff --git a/services/wallet/api.go b/services/wallet/api.go index 60c680c30..c343bf400 100644 --- a/services/wallet/api.go +++ b/services/wallet/api.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" - "github.com/status-im/status-go/rpc/network" + "github.com/status-im/status-go/params" "github.com/status-im/status-go/services/wallet/chain" "github.com/status-im/status-go/services/wallet/transfer" ) @@ -240,7 +240,7 @@ func (api *API) GetOpenseaAssetsByOwnerAndCollection(ctx context.Context, chainI return client.fetchAllAssetsByOwnerAndCollection(owner, collectionSlug, limit) } -func (api *API) AddEthereumChain(ctx context.Context, network network.Network) error { +func (api *API) AddEthereumChain(ctx context.Context, network params.Network) error { log.Debug("call to AddEthereumChain") return api.s.rpcClient.NetworkManager.Upsert(&network) } @@ -250,7 +250,7 @@ func (api *API) DeleteEthereumChain(ctx context.Context, chainID uint64) error { return api.s.rpcClient.NetworkManager.Delete(chainID) } -func (api *API) GetEthereumChains(ctx context.Context, onlyEnabled bool) ([]*network.Network, error) { +func (api *API) GetEthereumChains(ctx context.Context, onlyEnabled bool) ([]*params.Network, error) { log.Debug("call to GetEthereumChains") return api.s.rpcClient.NetworkManager.Get(onlyEnabled) } diff --git a/wakuv2/config.go b/wakuv2/config.go index 381ef3142..11627dfa6 100644 --- a/wakuv2/config.go +++ b/wakuv2/config.go @@ -24,26 +24,25 @@ import ( // Config represents the configuration state of a waku node. type Config struct { - MaxMessageSize uint32 `toml:",omitempty"` - SoftBlacklistedPeerIDs []string `toml:",omitempty"` - Host string `toml:",omitempty"` - Port int `toml:",omitempty"` - PersistPeers bool `toml:",omitempty"` - PeerExchange bool `toml:",omitempty"` - KeepAliveInterval int `toml:",omitempty"` - MinPeersForRelay int `toml:",omitempty"` - LightClient bool `toml:",omitempty"` - RelayNodes []string `toml:",omitempty"` - StoreNodes []string `toml:",omitempty"` - FilterNodes []string `toml:",omitempty"` - LightpushNodes []string `toml:",omitempty"` - Rendezvous bool `toml:",omitempty"` - WakuRendezvousNodes []string `toml:",omitempty"` - DiscV5BootstrapNodes []string `toml:",omitempty"` - EnableDiscV5 bool `toml:",omitempty"` - DiscoveryLimit int `toml:",omitempty"` - AutoUpdate bool `toml:",omitempty"` - UDPPort int `toml:",omitempty"` + MaxMessageSize uint32 `toml:",omitempty"` + Host string `toml:",omitempty"` + Port int `toml:",omitempty"` + PersistPeers bool `toml:",omitempty"` + PeerExchange bool `toml:",omitempty"` + KeepAliveInterval int `toml:",omitempty"` + MinPeersForRelay int `toml:",omitempty"` + LightClient bool `toml:",omitempty"` + RelayNodes []string `toml:",omitempty"` + StoreNodes []string `toml:",omitempty"` + FilterNodes []string `toml:",omitempty"` + LightpushNodes []string `toml:",omitempty"` + Rendezvous bool `toml:",omitempty"` + WakuRendezvousNodes []string `toml:",omitempty"` + DiscV5BootstrapNodes []string `toml:",omitempty"` + EnableDiscV5 bool `toml:",omitempty"` + DiscoveryLimit int `toml:",omitempty"` + AutoUpdate bool `toml:",omitempty"` + UDPPort int `toml:",omitempty"` } var DefaultConfig = Config{ diff --git a/wakuv2/waku.go b/wakuv2/waku.go index 5ea0ff1af..5008b9624 100644 --- a/wakuv2/waku.go +++ b/wakuv2/waku.go @@ -80,11 +80,10 @@ const messageQueueLimit = 1024 const requestTimeout = 5 * time.Second type settings struct { - LightClient bool // Indicates if the node is a light client - MinPeersForRelay int // Indicates the minimum number of peers required for using Relay Protocol instead of Lightpush - MaxMsgSize uint32 // Maximal message length allowed by the waku node - EnableConfirmations bool // Enable sending message confirmations - SoftBlacklistedPeerIDs map[string]bool // SoftBlacklistedPeerIDs is a list of peer ids that we want to keep connected but silently drop any envelope from + LightClient bool // Indicates if the node is a light client + MinPeersForRelay int // Indicates the minimum number of peers required for using Relay Protocol instead of Lightpush + MaxMsgSize uint32 // Maximal message length allowed by the waku node + EnableConfirmations bool // Enable sending message confirmations } // Waku represents a dark communication interface through the Ethereum @@ -156,10 +155,9 @@ func New(nodeKey string, cfg *Config, logger *zap.Logger, appdb *sql.DB) (*Waku, } waku.settings = settings{ - MaxMsgSize: cfg.MaxMessageSize, - SoftBlacklistedPeerIDs: make(map[string]bool), - LightClient: cfg.LightClient, - MinPeersForRelay: cfg.MinPeersForRelay, + MaxMsgSize: cfg.MaxMessageSize, + LightClient: cfg.LightClient, + MinPeersForRelay: cfg.MinPeersForRelay, } waku.filters = common.NewFilters()