diff --git a/.gitignore b/.gitignore index 0cb7e551df..d7235b70a7 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,5 @@ fearless/env-vars.sh *.generated.swift Tests/Mocks/CommonMocks.swift Tests/Mocks/ModuleMocks.swift -# -# Generamba -Templates/ # Misc **/.DS_Store diff --git a/GenerambaTemplates/.gitignore b/GenerambaTemplates/.gitignore deleted file mode 100644 index 79b5594df7..0000000000 --- a/GenerambaTemplates/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/.DS_Store diff --git a/Podfile b/Podfile index 50b3bcdf35..a14b557c90 100644 --- a/Podfile +++ b/Podfile @@ -20,7 +20,7 @@ abstract_target 'fearlessAll' do pod 'SVGKit' pod 'Charts', '~> 4.1.0' pod 'MediaView', :git => 'https://github.com/bnsports/MediaView.git', :branch => 'dev' - pod 'FearlessKeys', '0.1.4' + pod 'FearlessKeys', '0.1.5' target 'fearlessTests' do inherit! :search_paths diff --git a/Podfile.lock b/Podfile.lock index caeecf90a6..84d0880e26 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,20 +3,20 @@ PODS: - Charts/Core (= 4.1.0) - Charts/Core (4.1.0): - SwiftAlgorithms (~> 1.0) - - CocoaLumberjack (3.8.4): - - CocoaLumberjack/Core (= 3.8.4) - - CocoaLumberjack/Core (3.8.4) - - Cuckoo (1.10.4): - - Cuckoo/Swift (= 1.10.4) - - Cuckoo/Swift (1.10.4) - - FearlessKeys (0.1.4) + - CocoaLumberjack (3.8.5): + - CocoaLumberjack/Core (= 3.8.5) + - CocoaLumberjack/Core (3.8.5) + - Cuckoo (2.0.9): + - Cuckoo/Swift (= 2.0.9) + - Cuckoo/Swift (2.0.9) + - FearlessKeys (0.1.5) - FireMock (3.1) - Kingfisher (7.10.2) - MediaView (0.2.0) - R.swift (6.1.0): - R.swift.Library (~> 5.3.0) - R.swift.Library (5.3.0) - - ReachabilitySwift (5.0.0) + - ReachabilitySwift (5.2.3) - SnapKit (5.0.1) - SoraFoundation (1.0.0): - SoraFoundation/DateProcessing (= 1.0.0) @@ -76,13 +76,13 @@ PODS: - CocoaLumberjack (~> 3.0) - SwiftAlgorithms (1.0.0) - SwiftFormat/CLI (0.47.13) - - SwiftLint (0.54.0) - - SwiftyBeaver (2.0.0) + - SwiftLint (0.56.2) + - SwiftyBeaver (2.1.1) DEPENDENCIES: - Charts (~> 4.1.0) - Cuckoo - - FearlessKeys (= 0.1.4) + - FearlessKeys (= 0.1.5) - FireMock - Kingfisher (= 7.10.2) - MediaView (from `https://github.com/bnsports/MediaView.git`, branch `dev`) @@ -99,7 +99,7 @@ DEPENDENCIES: - SwiftyBeaver SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + https://github.com/cocoapods/Specs.git: - Charts - CocoaLumberjack - Cuckoo @@ -138,15 +138,15 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: Charts: ce0768268078eee0336f122c3c4ca248e4e204c5 - CocoaLumberjack: df59726690390bb8aaaa585938564ba1c8dbbb44 - Cuckoo: 20b8aed94022e0e43e90f7c9e4fb0c86f0926a01 - FearlessKeys: 5ec2782533624d237c899677a8c10859fbbc6668 + CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0 + Cuckoo: e2cc9a06a47d3faee7430a261c9c654b79b35f6e + FearlessKeys: 54697ac7bdb2a16aa4525bed06c8769a351606db FireMock: 3eed872059c12f94855413347da83b9d6d1a6fac Kingfisher: 99edc495d3b7607e6425f0d6f6847b2abd6d716d MediaView: 10ff6a5c7950a7c72c5da9e9b89cc85a981e6abc R.swift: ec98ff71c4ab2f6fd01dd077e5afd15e63a4834c R.swift.Library: 0fc583cb55a99e28901299cc451614cad1161962 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb SoraFoundation: 988d90ee3159311b02e42aeba0cf7e85d8bc724c SoraKeystore: e1789fe41412606d8a1116b86bd00d46d4cb9ccb @@ -155,9 +155,9 @@ SPEC CHECKSUMS: SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea SwiftAlgorithms: 38dda4731d19027fdeee1125f973111bf3386b53 SwiftFormat: 73573b89257437c550b03d934889725fbf8f75e5 - SwiftLint: c1de071d9d08c8aba837545f6254315bc900e211 - SwiftyBeaver: 014b0c12065026b731bac80305294f27d63e27f6 + SwiftLint: bd7cfb914762ab5f0cbb632964849571db075706 + SwiftyBeaver: ade157e4f857812e7d7f15f2e3396bb8733f8a1c -PODFILE CHECKSUM: 6eca9a23a0e78699b9b76e0f4a5d70c067f5290f +PODFILE CHECKSUM: d50f67e5652b6dc7c25c383940113f88a40d89bc COCOAPODS: 1.15.2 diff --git a/GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid b/Templates/viper-code-layout/Code/assembly.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid rename to Templates/viper-code-layout/Code/assembly.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid b/Templates/viper-code-layout/Code/interactor.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid rename to Templates/viper-code-layout/Code/interactor.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid b/Templates/viper-code-layout/Code/presenter.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid rename to Templates/viper-code-layout/Code/presenter.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid b/Templates/viper-code-layout/Code/protocol.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid rename to Templates/viper-code-layout/Code/protocol.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/router.swift.liquid b/Templates/viper-code-layout/Code/router.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/router.swift.liquid rename to Templates/viper-code-layout/Code/router.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/view.swift.liquid b/Templates/viper-code-layout/Code/view.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/view.swift.liquid rename to Templates/viper-code-layout/Code/view.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid b/Templates/viper-code-layout/Code/viewlayout.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid rename to Templates/viper-code-layout/Code/viewlayout.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid b/Templates/viper-code-layout/Tests/tests.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid rename to Templates/viper-code-layout/Tests/tests.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec b/Templates/viper-code-layout/viper-code-layout.rambaspec similarity index 100% rename from GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec rename to Templates/viper-code-layout/viper-code-layout.rambaspec diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 3dc9640ae4..c44e53d705 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -9,17 +9,156 @@ /* Begin PBXBuildFile section */ 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7416F3AFA5F4D1130B1C410 /* WalletTransactionDetailsWireframe.swift */; }; 0077B6854FDCA7ECCD557B09 /* StakingPoolCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D651E438F86F37CC07D6D3F /* StakingPoolCreateViewController.swift */; }; - 00E9DD69FCE94A4F4929B419 /* AccountStatisticsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */; }; 02EC6059AEE8C92B4EDD09C0 /* LiquidityPoolsOverviewViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC0B2D0A77F4B0F7CC9E7C1D /* LiquidityPoolsOverviewViewLayout.swift */; }; 02FA6FDF7212F1F8D056BC18 /* SwapTransactionDetailAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C597BAB74DF23914B68FDC39 /* SwapTransactionDetailAssembly.swift */; }; 04A17615051F4A1AE0E63BF8 /* PolkaswapSwapConfirmationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */; }; 04F9CF04588676D79EFB8570 /* ClaimCrowdloanRewardsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAA28C551344F1457D76DD5 /* ClaimCrowdloanRewardsAssembly.swift */; }; 054C4BCDEC29ED5F74A36E8B /* ExportMnemonicPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61EBE466BDCF77E65FDCDF81 /* ExportMnemonicPresenter.swift */; }; 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD4E0BB1ABA364AFD2E891 /* WalletTransactionDetailsPresenter.swift */; }; - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */; }; 0678271BE1BA5BBC084F478A /* RecommendedValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */; }; 06826AA6DBAEA5BBF45BB5CA /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4594686D10DBB7627B8C9A12 /* LiquidityPoolSupplyConfirmInteractor.swift */; }; 069C7D4C9648112115B90234 /* NftSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */; }; + 0701B8972C78F34A00DCD395 /* AccountStatisticsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */; }; + 0701B8982C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */; }; + 0701B8992C78F34A00DCD395 /* AccountStatisticsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */; }; + 0701B89A2C78F34A00DCD395 /* AccountStatisticsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */; }; + 0701B89B2C78F34A00DCD395 /* AccountStatisticsPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */; }; + 0701B89C2C78F34A00DCD395 /* AccountStatisticsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */; }; + 0701B89D2C78F34A00DCD395 /* AccountStatisticsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */; }; + 0701B89E2C78F34A00DCD395 /* AccountStatisticsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */; }; + 0701B89F2C78F34A00DCD395 /* AccountStatisticsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */; }; + 0701B8A02C78F34A00DCD395 /* AccountStatisticsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */; }; + 0701B8A32C78F54200DCD395 /* Cosmos in Frameworks */ = {isa = PBXBuildFile; productRef = 0701B8A22C78F54200DCD395 /* Cosmos */; }; + 0701B8A92C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */; }; + 0701B8AA2C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */; }; + 0701B8AB2C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */; }; + 0701B8AC2C78F5DB00DCD395 /* FireHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */; }; + 0701B8AD2C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */; }; + 0701B8B12C78F63400DCD395 /* InfoTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */; }; + 0701B8B22C78F63400DCD395 /* AccountScoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */; }; + 0701B8B82C78F69500DCD395 /* UIImage+ColorsInvert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */; }; + 0701B8B92C78F69500DCD395 /* BlockExplorerType+Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */; }; + 0701B8BA2C78F69500DCD395 /* FWCosmosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */; }; + 0701B8BB2C78F69500DCD395 /* ChainModel+Nomis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */; }; + 0701B8BC2C78F69500DCD395 /* Decimal+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */; }; + 0701B8BF2C78F6C400DCD395 /* AccountScoreViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */; }; + 0701B8E92C78F71800DCD395 /* TonConnectError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C02C78F71800DCD395 /* TonConnectError.swift */; }; + 0701B8EA2C78F71800DCD395 /* TonConnectEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */; }; + 0701B8EB2C78F71800DCD395 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */; }; + 0701B8EC2C78F71800DCD395 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */; }; + 0701B8ED2C78F71800DCD395 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */; }; + 0701B8EE2C78F71800DCD395 /* NomisAccountStatisticsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */; }; + 0701B8EF2C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */; }; + 0701B8F02C78F71800DCD395 /* NomisJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */; }; + 0701B8F12C78F71800DCD395 /* NomisRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */; }; + 0701B8F22C78F71800DCD395 /* AccountStatisticsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */; }; + 0701B8F32C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */; }; + 0701B8F42C78F71800DCD395 /* OKXDexApproveRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */; }; + 0701B8F52C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */; }; + 0701B8F62C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */; }; + 0701B8F72C78F71800DCD395 /* OKXDexSwapRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */; }; + 0701B8F82C78F71800DCD395 /* OKXApproveTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */; }; + 0701B8F92C78F71800DCD395 /* OKXDexProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */; }; + 0701B8FA2C78F71800DCD395 /* OKXDexQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */; }; + 0701B8FB2C78F71800DCD395 /* OKXDexRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */; }; + 0701B8FC2C78F71800DCD395 /* OKXDexSubrouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */; }; + 0701B8FD2C78F71800DCD395 /* OKXLiquiditySource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */; }; + 0701B8FE2C78F71800DCD395 /* OKXQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */; }; + 0701B8FF2C78F71800DCD395 /* OKXResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */; }; + 0701B9002C78F71800DCD395 /* OKXSupportedChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */; }; + 0701B9012C78F71800DCD395 /* OKXSwap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */; }; + 0701B9022C78F71800DCD395 /* OKXSwapTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */; }; + 0701B9032C78F71800DCD395 /* OKXToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E02C78F71800DCD395 /* OKXToken.swift */; }; + 0701B9042C78F71800DCD395 /* OKXDexRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */; }; + 0701B9052C78F71800DCD395 /* OKXDexAggregatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */; }; + 0701B9652C78FAF000DCD395 /* LiquidityPools+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */; }; + 0701B9662C78FAF000DCD395 /* LiquidityPoolsConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */; }; + 0701B9672C78FAF000DCD395 /* assets.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90B2C78FAF000DCD395 /* assets.json */; }; + 0701B9682C78FAF000DCD395 /* chains.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90C2C78FAF000DCD395 /* chains.json */; }; + 0701B9692C78FAF000DCD395 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90D2C78FAF000DCD395 /* dapps.json */; }; + 0701B96A2C78FAF000DCD395 /* polkadot-9370metadata in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */; }; + 0701B96B2C78FAF000DCD395 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */; }; + 0701B96C2C78FAF000DCD395 /* runtime-default.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9102C78FAF000DCD395 /* runtime-default.json */; }; + 0701B96D2C78FAF000DCD395 /* runtime-empty.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9112C78FAF000DCD395 /* runtime-empty.json */; }; + 0701B96E2C78FAF000DCD395 /* runtime-kusama.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9122C78FAF000DCD395 /* runtime-kusama.json */; }; + 0701B96F2C78FAF000DCD395 /* runtime-polkadot.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */; }; + 0701B9702C78FAF000DCD395 /* runtime-rococo.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9142C78FAF000DCD395 /* runtime-rococo.json */; }; + 0701B9712C78FAF000DCD395 /* runtime-westend.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9152C78FAF000DCD395 /* runtime-westend.json */; }; + 0701B9722C78FAF000DCD395 /* types.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9162C78FAF000DCD395 /* types.json */; }; + 0701B9732C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */; }; + 0701B9742C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */; }; + 0701B9752C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */; }; + 0701B9762C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */; }; + 0701B9772C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */; }; + 0701B9782C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */; }; + 0701B9792C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */; }; + 0701B97A2C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */; }; + 0701B97B2C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */; }; + 0701B97C2C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */; }; + 0701B97D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; + 0701B97E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */; }; + 0701B97F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */; }; + 0701B9802C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; + 0701B9812C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */; }; + 0701B9822C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */; }; + 0701B9832C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */; }; + 0701B9842C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */; }; + 0701B9852C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */; }; + 0701B9862C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */; }; + 0701B9872C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */; }; + 0701B9882C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */; }; + 0701B9892C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */; }; + 0701B98A2C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */; }; + 0701B98B2C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */; }; + 0701B98C2C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */; }; + 0701B98D2C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */; }; + 0701B98E2C78FAF000DCD395 /* LiquidityPoolListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */; }; + 0701B98F2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */; }; + 0701B9902C78FAF000DCD395 /* LiquidityPoolListType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */; }; + 0701B9912C78FAF000DCD395 /* LiquidityPoolListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */; }; + 0701B9922C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */; }; + 0701B9932C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */; }; + 0701B9942C78FAF000DCD395 /* LiquidityPoolsListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */; }; + 0701B9952C78FAF000DCD395 /* LiquidityPoolsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */; }; + 0701B9962C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */; }; + 0701B9972C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */; }; + 0701B9982C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */; }; + 0701B9992C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */; }; + 0701B99A2C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */; }; + 0701B99B2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */; }; + 0701B99C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */; }; + 0701B99D2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */; }; + 0701B99E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */; }; + 0701B99F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */; }; + 0701B9A02C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */; }; + 0701B9A12C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */; }; + 0701B9A22C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */; }; + 0701B9A32C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */; }; + 0701B9A42C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */; }; + 0701B9A52C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */; }; + 0701B9A62C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */; }; + 0701B9A72C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */; }; + 0701B9A82C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */; }; + 0701B9A92C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */; }; + 0701B9AA2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */; }; + 0701B9AB2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */; }; + 0701B9AC2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */; }; + 0701B9AD2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */; }; + 0701B9AE2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */; }; + 0701B9AF2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */; }; + 0701B9B12C78FB5600DCD395 /* NetworkRequestUrlParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */; }; + 0701B9B32C78FBC600DCD395 /* AccountStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */; }; + 0701B9B52C78FD2000DCD395 /* BlockExplorerApiKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */; }; + 0701B9BE2C78FD8800DCD395 /* KaiaHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */; }; + 0701B9BF2C78FD8800DCD395 /* ZChainHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */; }; + 0701B9C02C78FD8800DCD395 /* 5ireHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */; }; + 0701B9C12C78FD8800DCD395 /* VicscanHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */; }; + 0701B9C62C78FDE000DCD395 /* AssetTransactionData+FireHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */; }; + 0701B9C72C78FDE000DCD395 /* AssetTransactionData+ZChainHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */; }; + 0701B9C82C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */; }; + 0701B9C92C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */; }; + 0701B9CB2C78FE2C00DCD395 /* ScamInfoFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */; }; + 0701B9CD2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */; }; 0702B31529701759003519F5 /* AmountInputViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31429701759003519F5 /* AmountInputViewModel.swift */; }; 0702B31829701864003519F5 /* WalletViewModelObserverContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31729701864003519F5 /* WalletViewModelObserverContainer.swift */; }; 0702B31A29701884003519F5 /* MoneyPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31929701884003519F5 /* MoneyPresentable.swift */; }; @@ -51,19 +190,52 @@ 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */; }; 070CDD8B2ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */; }; 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */; }; + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7D12C3E7DE100DF4098 /* TonSwift */; }; + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */; }; + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EA2C4543D900DF4098 /* EventSource */; }; + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */; }; + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EE2C4543D900DF4098 /* TonAPI */; }; + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7F02C4543D900DF4098 /* TonStreamingAPI */; }; 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097C28C63893002B17D0 /* ScamSyncService.swift */; }; 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; + 07145F9C2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */; }; + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */; }; + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */; }; + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */; }; + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDE2C661E1D00AA674E /* TonConnect.swift */; }; + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */; }; + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */; }; + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE42C66378900AA674E /* TonConnectModels.swift */; }; + 071606C42C7C6C2400C1DF75 /* PricesUpdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */; }; + 071606C62C7C6C3200C1DF75 /* PricesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C52C7C6C3200C1DF75 /* PricesService.swift */; }; + 071606CA2C7C6C8800C1DF75 /* PriceDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */; }; + 071606CB2C7C6C8800C1DF75 /* AssetRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */; }; + 071606CC2C7C6C8800C1DF75 /* AssetModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */; }; + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */; }; + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */; }; 0716C83C28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */; }; 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */; }; 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84D28880304004C8CB1 /* UITableViewCell.swift */; }; 0716C85028880304004C8CB1 /* UIResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84E28880304004C8CB1 /* UIResponder.swift */; }; 071BC67529274F47007685D1 /* HashCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC67429274F47007685D1 /* HashCopiedEvent.swift */; }; 071BC677292B21CC007685D1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC676292B21CC007685D1 /* UIImage.swift */; }; + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAA2C73515E00B92466 /* DappDataSource.swift */; }; + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */; }; + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */; }; + 07230EB12C7456B900B92466 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 07230EB02C7456B900B92466 /* dapps.json */; }; + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */; }; + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */; }; + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */; }; + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */; }; + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */; }; 0726FFAC2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */; }; 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */; }; 0726FFB02AC439DE00336D76 /* WalletConnectExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */; }; 0726FFB12AC439DE00336D76 /* WalletConnectPolkadotSignature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */; }; + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */; }; + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */; }; + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */; }; 072EB84828E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */; }; 072EB84A28E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */; }; 073417B2298BA28300104F41 /* EqOraclePricePoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */; }; @@ -72,11 +244,19 @@ 07349F3228FE5EEB00A802B9 /* SwipeCellButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */; }; 073B34BC2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */; }; 073B34BF2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */; }; + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */; }; + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30E2C5BA35B003B4990 /* TonModels.swift */; }; + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */; }; + 074988DB2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */; }; + 074988DD2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */; }; 074EB7AA290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */; }; 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */; }; 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */; }; 074EB7B1290BA142000A2A6A /* ConnectionOnlineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */; }; 075C647028098AFB00A55094 /* EthereumConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075C646F28098AFB00A55094 /* EthereumConstants.swift */; }; + 075D9E482CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */; }; + 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */; }; + 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FD02C7F1A630044C142 /* TonConnectService.swift */; }; 075FC63528D9AB1600E25263 /* CommonInputViewV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */; }; 0761DEB228E1F54D00B90D2C /* StakingPoolCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0761DEB128E1F54D00B90D2C /* StakingPoolCreateViewModel.swift */; }; 0761DEB428E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0761DEB328E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift */; }; @@ -109,16 +289,22 @@ 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 076D9D6129506CE3002762E3 /* polkaswapSettings.json */; }; 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */; }; 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */; }; + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */; }; + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A1292C5763D6008A1254 /* Task.swift */; }; + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */; }; 0783EEAE2AE1342F006476F4 /* UIColor+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */; }; 0783EEB02AE1867A006476F4 /* WalletConnectEthereumTransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */; }; 0783EEB22AE193F3006476F4 /* BokoloConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */; }; 078E34C128058B9D00DF187A /* DocumentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C028058B9D00DF187A /* DocumentType.swift */; }; 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C228058BFD00DF187A /* DocumentPickerPresentable.swift */; }; 078FD51027F310FE00F031E6 /* StartViewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078FD50F27F310FE00F031E6 /* StartViewHelper.swift */; }; + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */; }; + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949862C47C39800613B9D /* ServiceAssembly.swift */; }; 07AC51132AD8040C000970B8 /* XorlessTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */; }; 07B018D128C7135400E05510 /* ScamInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D028C7135400E05510 /* ScamInfo.swift */; }; 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */; }; 07B018DB28C9D66300E05510 /* ScamWarningExpandableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */; }; + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */; }; 07B6BC7A28B78E8000621864 /* SheetAlertPresentableStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */; }; 07B6BC7C28B875D800621864 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7B28B875D800621864 /* UIControl.swift */; }; 07B6BC7F28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */; }; @@ -129,10 +315,16 @@ 07BF3D992B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D982B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift */; }; 07BF3D9B2B3D8C370046ABF4 /* ManualOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9A2B3D8C370046ABF4 /* ManualOperation.swift */; }; 07BF3D9D2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */; }; - 07BF3D9F2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */; }; 07BF3DA12B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */; }; 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */; }; 07C3397229189B720057C4A5 /* ChainsTypesSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */; }; + 07C438D72C638B2900475B14 /* TonConnectServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */; }; + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */; }; + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */; }; + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */; }; + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */; }; + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */; }; + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */; }; 07D05E4128EC08B800B66C70 /* StakinkPoolRewardCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */; }; 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */; }; 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */; }; @@ -148,6 +340,12 @@ 07D05E6628EF0BE500B66C70 /* SelectValidatorsConfirmPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */; }; 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6228EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift */; }; 07D05E6928EF0F2700B66C70 /* PoolNominateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */; }; + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */; }; + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */; }; + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */; }; + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */; }; + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */; }; + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */; }; 07DE95B528A1119400E9C2CB /* BalanceInfoRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */; }; 07DE95B628A1119400E9C2CB /* BalanceInfoAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */; }; 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */; }; @@ -179,6 +377,22 @@ 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */; }; 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */; }; 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */; }; + 07E77AAB2D49EEB500F25F60 /* TonConnectEstablished.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */; }; + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */; }; + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */; }; + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */; }; + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */; }; + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */; }; + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */; }; + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */; }; + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */; }; + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */; }; + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */; }; + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */; }; + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */; }; + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */; }; + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */; }; + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */; }; 07ED2EB92C341A0100FF7500 /* NodeApiKeyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */; }; 07F2B75728A3A4B800280C38 /* ChainCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */; }; 07F2B75C28A6565500280C38 /* assets.json in Resources */ = {isa = PBXBuildFile; fileRef = 07F2B75A28A6533900280C38 /* assets.json */; }; @@ -195,7 +409,10 @@ 07FBC9E228BE24E900ED65B4 /* MissingAccountFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */; }; 07FBC9E628BE29C900ED65B4 /* ChainIssuesCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */; }; 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */; }; - 092219D6B9BF321344D9679F /* MultichainAssetSelectionRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */; }; + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */; }; + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */; }; + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */; }; 0AAFEFA17F249F4BEF051F6B /* ControllerAccountConfirmationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */; }; @@ -204,6 +421,7 @@ 0B6D0B65AC659C6239B1C496 /* ClaimCrowdloanRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */; }; 0BD66304BF73EBDFE1857380 /* WarningAlertPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */; }; 0BE766EBE26CC38D305BA69D /* ClaimCrowdloanRewardsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */; }; + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */; }; 0C2AA829B5CB89B39E0FA95E /* CrowdloanContributionConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */; }; 0C4F3F7AB14F4851C12974B6 /* WarningAlertProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 446B4A7184327D64AE8F0610 /* WarningAlertProtocols.swift */; }; 0CA307BC2F570941CD22C9AA /* ExportMnemonicConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4688AF0658F8BB7A90C2BE /* ExportMnemonicConfirmViewFactory.swift */; }; @@ -211,7 +429,6 @@ 0D05777212DFA8CFC5A692E3 /* WalletsManagmentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2970944BE4B937A39E07C608 /* WalletsManagmentViewController.swift */; }; 0D6C27413F73190438306EC1 /* NetworkInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8D61B74FE9C5199FD0AEBC /* NetworkInfoInteractor.swift */; }; 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7091F743BBACC09553298 /* LiquidityPoolSupplyProtocols.swift */; }; - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */; }; 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */; }; 0E30EB59B860DE611FF0DC7D /* NftCollectionRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E3687D398A32597A888B82 /* NftCollectionRouter.swift */; }; 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */; }; @@ -223,10 +440,10 @@ 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */; }; 10B4951F5E0C515EFBDBC32E /* StakingPoolCreateConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3837CE5CB2D48D8A694A7EE0 /* StakingPoolCreateConfirmPresenter.swift */; }; 10DEF797CB3DC5BF0903EC4C /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3459F610D6E5C782D8695A9 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */; }; - 11FDC274784B05B690368C07 /* AccountStatisticsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */; }; 134AFD616BE52A1AE290EEF7 /* StakingBalanceFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67ACC943DA07FC529AE69B4 /* StakingBalanceFlow.swift */; }; 135CEEC5363BE34130958578 /* ControllerAccountConfirmationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */; }; 1496E87A7652C7D230A9BB46 /* AssetNetworksRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */; }; + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */; }; 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D482753E0D75C5F5E0617998 /* CreateContactInteractor.swift */; }; 1550A6E8789263C0D734091A /* StakingUnbondSetupWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */; }; 159A8702C30A21988AD76805 /* StakingPoolCreateConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408D33DEE675B00ED511517A /* StakingPoolCreateConfirmAssembly.swift */; }; @@ -236,21 +453,24 @@ 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */; }; 1870655BC8B762AA57717EC6 /* PolkaswapTransaktionSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F04623D6CE10669D914CA2F /* PolkaswapTransaktionSettingsViewController.swift */; }; 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D613E20E96E7BA5B8F4B9799 /* StakingRewardDetailsInteractor.swift */; }; + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */; }; 1A2A55DCA9403CCE2A98E93E /* WalletTransactionDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */; }; + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */; }; 1BC06B323C5E5DE1B5A62CB4 /* PolkaswapTransaktionSettingsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD730FFB75B5D76EA939042D /* PolkaswapTransaktionSettingsInteractor.swift */; }; 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C96E41F878ED0A0A6F469D3 /* CrowdloanContributionSetupViewFactory.swift */; }; 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */; }; 1CBFE5F285223EA5D5300C49 /* WalletMainContainerProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8312AF0B70350EE27DB5B4A /* WalletMainContainerProtocols.swift */; }; 1DE31955634007BAC3B63158 /* ChainAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */; }; + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */; }; 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */; }; 1E766A1656C2117F3F64769A /* NetworkManagementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FFEB823BE0057CFB78CC033 /* NetworkManagementTests.swift */; }; 1EF031DB5316E1D180089C7B /* PolkaswapAdjustmentInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9F3C33EF043B3EA5FFBC45 /* PolkaswapAdjustmentInteractor.swift */; }; 1F6A32CBF7B43390AF412B1A /* NodeSelectionWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80809FE46E7B8EBDE3680706 /* NodeSelectionWireframe.swift */; }; 1F85759D01F2419CD938D33F /* AccountExportPasswordTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93A1BA7DFEE1D7728B84949 /* AccountExportPasswordTests.swift */; }; 1F88F3DBFA0BD6D0FDF558F3 /* SelectValidatorsConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */; }; - 1FBA501F4EC1A9AAD5736D56 /* MultichainAssetSelectionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */; }; 20B2942A4241F6713A1C70D9 /* StakingRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2377F8FB07B47637346249F5 /* StakingRewardDetailsViewFactory.swift */; }; 20F28EF4AD17FC56A5A6697B /* NftSendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62522E202A1C5EE60D25122 /* NftSendPresenter.swift */; }; + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */; }; 225493AF467A54A56F74FFF5 /* LiquidityPoolsOverviewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */; }; 23398AEC756086FEEEE91E65 /* WalletsManagmentRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */; }; 237AD34CD1C2778834D7B330 /* AnalyticsValidatorsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F8BBBA9EABA266B288333F /* AnalyticsValidatorsViewFactory.swift */; }; @@ -262,6 +482,7 @@ 257AF452E202DC6B8A576559 /* StakingPoolCreateConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5555FA26DF1BD5483F7544B5 /* StakingPoolCreateConfirmViewLayout.swift */; }; 25A837D8E6138EDAFA9240CD /* WalletsManagmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0960D0A04ACDF443B5C5E185 /* WalletsManagmentViewLayout.swift */; }; 2624D8CEBB61A185A5E8B994 /* AccountExportPasswordViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */; }; + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */; }; 270C21973CB61F0BF3D2D1E3 /* CrowdloanListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */; }; 272C9E2101FEE14CE4A79249 /* ChainAccountBalanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BE50276590067C81F4761F /* ChainAccountBalanceTests.swift */; }; 278F5341DC043EBED7C0733D /* CrowdloanListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */; }; @@ -280,29 +501,35 @@ 2AD0A19525D3D3EC00312428 /* GitHubOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0A19425D3D3EC00312428 /* GitHubOperationFactory.swift */; }; 2B0FC94B4AE9AFE9532F493F /* ReferralCrowdloanViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71285CF636B32ACD8EB5519E /* ReferralCrowdloanViewFactory.swift */; }; 2B99F241DC91645B1226E10C /* WarningAlertWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 639AD37D87BD08106E7E6E2A /* WarningAlertWireframe.swift */; }; - 2BBE065C2A5C31B830DE0957 /* AccountStatisticsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */; }; 2C3124A5EBC1AD57C01EEA17 /* SelectValidatorsStartInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */; }; 2CF2F93AF862CF54FC46B560 /* PurchaseInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D44421CCD7AD220A05CD0E /* PurchaseInteractor.swift */; }; 2CFEBF8B7B9C820D1A80B60B /* StakingPoolCreateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */; }; + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */; }; 2E57C70427E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */; }; 2E57C70B27E9EC0F00AF075A /* ProfileViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70A27E9EC0E00AF075A /* ProfileViewState.swift */; }; 2E57C70D27E9ED5400AF075A /* ProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70C27E9ED5300AF075A /* ProfileViewModel.swift */; }; 2E57C70F27EA169000AF075A /* ProfileViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */; }; 2ED5B5FFD880BA1905051E89 /* StakingUnbondSetupFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */; }; 2FCB062A2D873BD72B795DB3 /* AssetSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A0A5EE9BE2862B085712A0 /* AssetSelectionPresenter.swift */; }; + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */; }; 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A654294D46A966EE99764F /* AllDonePresenter.swift */; }; 30C7FD6C58F1ED50AFB456FD /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA4A5B186EE6D40BFE9D66 /* ExportMnemonicWireframe.swift */; }; + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */; }; 31E260D462BF33CFCDFEBA6C /* AnalyticsRewardDetailsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */; }; 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */; }; 3245549CB47E65B28A2C01CD /* WalletOptionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */; }; 3250F2C0E12ED42A355853BE /* SelectValidatorsStartProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */; }; + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */; }; + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */; }; 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CBCBA8BF2D753248238555 /* ContactsViewController.swift */; }; 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */; }; 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */; }; 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7320E1CD9EA1A33EA29D0700 /* AnalyticsValidatorsPresenter.swift */; }; + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */; }; 357946E87E1F8D0563286D0F /* PolkaswapTransaktionSettingsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */; }; 36139329003D9269E8D5C11C /* StakingMainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */; }; + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */; }; 3761C36C5BAFFB1518CD93A0 /* FiltersProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8C34B051607218638BA851 /* FiltersProtocols.swift */; }; 37AE170856990F9FBEF052FC /* AllDoneAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 262F98DEF54FA9592BE22B94 /* AllDoneAssembly.swift */; }; 37E1E9782B9752BC50AF2476 /* YourValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */; }; @@ -314,6 +541,7 @@ 3B0F51B1D1590FAAE73CD36C /* SwapTransactionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */; }; 3B9314DE6AFC01CA7EF0DAAA /* SelectValidatorsConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */; }; 3CA86739CB09801714B194BD /* PurchaseWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */; }; + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */; }; 3D1FB0EF87D42F08D9250552 /* PurchasePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */; }; 3DCDF9784283313336CC0505 /* NftSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE826F356F6D72EACFB0AE31 /* NftSendConfirmPresenter.swift */; }; 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */; }; @@ -333,6 +561,7 @@ 41B29C1C9239BB2DCB7903A7 /* SelectValidatorsStartViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C391292F22D16427C77CD9 /* SelectValidatorsStartViewFactory.swift */; }; 42B79A8D0D9540C1D97D991C /* AccountConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599FEDBD7E8B665F1A93BA70 /* AccountConfirmWireframe.swift */; }; 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C829A981119FEA0EAE4E96E9 /* ChainSelectionWireframe.swift */; }; + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */; }; 4448B591D4A193DBC9E2E3BF /* AccountCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */; }; 445F1F1FB3ECC47D8DD2FBEA /* NetworkIssuesNotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40728E7BBC553AFA8FF4142B /* NetworkIssuesNotificationViewController.swift */; }; 4470194B729475D683584A6C /* WalletTransactionHistoryInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */; }; @@ -345,12 +574,10 @@ 48A787921C2B3E9F22722154 /* ControllerAccountConfirmationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 025F392269B990931ADBE8F6 /* ControllerAccountConfirmationTests.swift */; }; 48E7D7072820F66F286A0B9D /* StakingMainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55CC5A63AC07644409E997C1 /* StakingMainViewController.xib */; }; 496AC83B6434378501B657E0 /* StakingPoolCreateViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D733A49D80BA2BF400AF23A6 /* StakingPoolCreateViewLayout.swift */; }; - 49F6A6C2A56A3DE9D456FE7D /* MultichainAssetSelectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */; }; 4A520B7081BE2D7604B69354 /* AccountImportWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85F45A5C6145F863760F4409 /* AccountImportWireframe.swift */; }; 4A63ECA587C601999AAEB974 /* StakingPoolCreateProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49EBB77A32A59568B0DACFE5 /* StakingPoolCreateProtocols.swift */; }; 4A957B3BAC231B70CBC00EC3 /* LiquidityPoolsOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8B69E9E18C11EAEC9284B3 /* LiquidityPoolsOverviewViewController.swift */; }; 4C7AC4E214171478AC98A898 /* StakingRewardDestConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9403C5F9C88A4690C62A204B /* StakingRewardDestConfirmTests.swift */; }; - 4D44ACFB841F7CE18CE98559 /* MultichainAssetSelectionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */; }; 4D822D169784790EBF173EEE /* WalletMainContainerPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D738FE711DD760B47C0BA65 /* WalletMainContainerPresenter.swift */; }; 4E5CD7B8821FA5298EA1598E /* CrowdloanContributionSetupWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3574BADE9CF77599048C7010 /* CrowdloanContributionSetupWireframe.swift */; }; 4F12420C17B321F52D694E92 /* AddCustomNodeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900E67A76C0702F8123EBB47 /* AddCustomNodeInteractor.swift */; }; @@ -361,16 +588,18 @@ 503DFF0EFCAD0A8B526FEC3A /* SelectMarketViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320E2207FB549F7C31A80441 /* SelectMarketViewController.swift */; }; 506F0D372BCC8302E513637C /* CrowdloanContributionConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA59CE2C7AE548ACA9D66FD7 /* CrowdloanContributionConfirmWireframe.swift */; }; 50758C9BBB27AE5732FF78BA /* StakingRewardPayoutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFEBC03AB1841681427D38AF /* StakingRewardPayoutsViewController.swift */; }; + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */; }; 5142E2C6609188D529BB558A /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882D47A501D9D6CCE7B99691 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */; }; 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D51D60F19284936A6E9F47D /* ReferralCrowdloanWireframe.swift */; }; 525CCCA7CFD7BE570AD0FCCA /* WalletOptionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73078ED3B2642FEAF348DB2A /* WalletOptionProtocols.swift */; }; - 52AEA30073F8CB856B692757 /* AccountStatisticsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */; }; + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */; }; + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */; }; 539340533D8383965751C6D8 /* NodeSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */; }; 53DA09F488806FFE86C841AA /* SelectMarketInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */; }; - 54A3B34605E787B47741ED1A /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 54C8E20A8D7DD92AC92B8041 /* SelectMarketProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */; }; 5712A48A0C8AEFD9355FD9DA /* WarningAlertInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */; }; + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */; }; 57E20F0723C4748D576C4882 /* StakingUnbondSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */; }; 5869563D0EA593FBD02C169C /* StakingPayoutConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */; }; 5888936B3D13D92F1534E08B /* CrowdloanListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4BE52D0625CD8C21D2460 /* CrowdloanListViewLayout.swift */; }; @@ -380,13 +609,15 @@ 5980BDE494C9E473E5959C71 /* NftCollectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD845193EDFC3A1D0BC73719 /* NftCollectionProtocols.swift */; }; 59838EECC194BB0E6E0AEAA2 /* PolkaswapAdjustmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */; }; 5A7D43CA17B84C71E8EEF256 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */; }; + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */; }; + 5A8DA5F75BC11EC27A0BC63D /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 5C796EF8ED29F564B5D1126B /* CrowdloanContributionConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F75722D2F921FD1C2D4105D /* CrowdloanContributionConfirmViewController.swift */; }; 5D0665A581B9F8DFDBD0CF7B /* WalletChainAccountDashboardWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885A9E2D3619FEFC5ED0C093 /* WalletChainAccountDashboardWireframe.swift */; }; 5DDD2206DF795CF205610455 /* AccountExportPasswordPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31226053044986BC828AA912 /* AccountExportPasswordPresenter.swift */; }; 5E8504507116E0177D70314B /* LiquidityPoolSupplyViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438E01C5C877428168E9F3F8 /* LiquidityPoolSupplyViewLayout.swift */; }; 5E9402965D385607E04156DC /* NftDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */; }; - 5E974C26655D3E64AD6A923D /* AccountStatisticsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */; }; 5F5825D27863628412B672CA /* NftSendConfirmRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */; }; + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */; }; 607699C7CEEDA3598613DCA0 /* NetworkInfoViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDA19BC3280F1838C687EC8 /* NetworkInfoViewFactory.swift */; }; 60C22E112CA857A2EA5A129E /* LiquidityPoolsOverviewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC76E7D99A98423180BC572F /* LiquidityPoolsOverviewTests.swift */; }; 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC863A9CE29C63B740C6E4D9 /* LiquidityPoolsOverviewAssembly.swift */; }; @@ -397,8 +628,8 @@ 64B7826F78B8AE649B1EF08F /* CrowdloanContributionSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */; }; 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */; }; 65E0BC7A96EDE5E52D32A11B /* AllDoneViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A5A7C701EF966BF48D6B9E /* AllDoneViewController.swift */; }; + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */; }; 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6503D178156C6407EC848D41 /* LiquidityPoolSupplyRouter.swift */; }; - 68477096FFF2FE210D9C94B3 /* MultichainAssetSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */; }; 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */; }; 69EF1DC4093AC9AF06D71CF4 /* AnalyticsRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29100320799A2B46836A257B /* AnalyticsRewardDetailsViewFactory.swift */; }; 6A16194632D42862692CC067 /* PolkaswapSwapConfirmationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B5FD28F2B9A0B0D8ED3607 /* PolkaswapSwapConfirmationInteractor.swift */; }; @@ -424,8 +655,11 @@ 6FAC7E8F0DACB3F2AA0BE825 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCD9A6B753FD1510D3DD311 /* LiquidityPoolSupplyConfirmProtocols.swift */; }; 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4DF941DE0EDEF99A843A9D /* ContactsInteractor.swift */; }; 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4B7FA75791904AF541BE380 /* WarningAlertViewFactory.swift */; }; + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */; }; 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E1CD099F7C30ABE0E8A001 /* StakingUnbondSetupTests.swift */; }; 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */; }; + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */; }; + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */; }; 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605CA30BCCB5F23C64E6D6EC /* NodeSelectionViewController.swift */; }; 7365B203D7F32028225366E5 /* ControllerAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850E0DBBF0EC8422AEBF2189 /* ControllerAccountTests.swift */; }; 737F71CCDF39E7A400EBB7C0 /* NetworkIssuesNotificationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */; }; @@ -439,13 +673,17 @@ 762BB1AC2F45142B6319B59F /* NftSendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */; }; 76C5FD0685615E602696B23D /* SelectValidatorsConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EF0F9F97C89137F642016E /* SelectValidatorsConfirmTests.swift */; }; 76F74188F16A370D79033A12 /* AnalyticsRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */; }; + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */; }; 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */; }; 78314B269F1CF1A499DE5CCB /* StakingBondMoreFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */; }; 78627BC990DE9C037CE69BB0 /* CreateContactAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D73E43CA6C635583970107 /* CreateContactAssembly.swift */; }; + 78BCB91F4434229B18C1E524 /* Pods_fearlessAll_fearless.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */; }; 78D94A761EFECED60F38232D /* CustomValidatorListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */; }; 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */; }; 794029A3A00B085D6CFE3FF1 /* StakingUnbondConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B10454C90325D80CCBEC60 /* StakingUnbondConfirmFlow.swift */; }; 79BB283470BB561FA646A235 /* WalletTransactionDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */; }; + 79E0E33666B1D9AFD62A1CD8 /* Pods_fearlessTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */; }; + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */; }; 7B7B34D621DC2FE76E0F5DB4 /* NetworkIssuesNotificationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */; }; 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6897929D244B5C29E3FD0727 /* StakingPoolCreateRouter.swift */; }; 7BEEF481CD12F404AD746FB5 /* WalletChainAccountDashboardViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */; }; @@ -459,6 +697,7 @@ 7E3FB57A93AFAE39CF3030C8 /* ClaimCrowdloanRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCB1AFB751075497345C3E7 /* ClaimCrowdloanRewardsViewController.swift */; }; 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CCCC63389A70294F816143 /* NodeSelectionProtocols.swift */; }; 800FCAF66DC8A24020D16A9C /* AccountExportPasswordInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194C9BFEE9BA8C9E448D79AA /* AccountExportPasswordInteractor.swift */; }; + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */; }; 80970FC53F7701A7898F3E84 /* WalletScanQRTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */; }; 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */; }; 82663A49E28CF2504BEAFB01 /* AssetNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */; }; @@ -493,6 +732,7 @@ 840BF22526C2653100E3A955 /* ChainSyncServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840BF22426C2653100E3A955 /* ChainSyncServiceTests.swift */; }; 840BF22726C2C8A600E3A955 /* ChainSyncEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840BF22626C2C8A600E3A955 /* ChainSyncEvents.swift */; }; 840C71B826821C0600B6D9C2 /* StakingRebondMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840C71B726821C0600B6D9C2 /* StakingRebondMock.swift */; }; + 840C71BA26821D2000B6D9C2 /* StakingRedeemMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */; }; 840DCBF125DFEE4800D45C6A /* AmountInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBF025DFEE4800D45C6A /* AmountInputView.swift */; }; 840DCBF625E0059D00D45C6A /* AmountInputView+Inspectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBF525E0059D00D45C6A /* AmountInputView+Inspectable.swift */; }; 840DCBFB25E0703A00D45C6A /* RewardSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBFA25E0703A00D45C6A /* RewardSelectionView.swift */; }; @@ -512,8 +752,6 @@ 841937872544772F00CFA50C /* animatedBg.gif in Resources */ = {isa = PBXBuildFile; fileRef = 841937862544772F00CFA50C /* animatedBg.gif */; }; 841AAC2126F6860B00F0A25E /* AssetBalanceFormatterFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */; }; 841AAC2326F6879900F0A25E /* AssetBalanceDisplayInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */; }; - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2426F692EF00F0A25E /* AddressConversion.swift */; }; - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */; }; 841AAC2D26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */; }; 841AAC2F26F73E0C00F0A25E /* LocalStorageKeyFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */; }; 841B45292603D91800C08693 /* EraValidatorsServiceStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */; }; @@ -697,8 +935,6 @@ 84585A31251C0B9300390F7A /* NetworkInfoMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */; }; 845B821526EF657700D25C72 /* PersistentValueSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821426EF657700D25C72 /* PersistentValueSettings.swift */; }; 845B821726EF7FED00D25C72 /* SelectedWalletSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */; }; - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */; }; - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */; }; 845B821D26EF80DB00D25C72 /* ChainAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */; }; 845B821F26EF8E8900D25C72 /* ManagedMetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */; }; 845B822126EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */; }; @@ -814,7 +1050,6 @@ 847119D5262EF95A00716580 /* PayoutInfoFactoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */; }; 847119EB262EFF3800716580 /* ValidatorPayoutInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */; }; 8471538D2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */; }; - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729740260A9C13009B86D0 /* DisplayAddress.swift */; }; 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */; }; 84729758260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */; }; 8472975D260B1B71009B86D0 /* ExistingBonding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472975C260B1B71009B86D0 /* ExistingBonding.swift */; }; @@ -1214,6 +1449,7 @@ 84F5105B263AB9F2005D15AE /* NetworkFeeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105A263AB9F2005D15AE /* NetworkFeeView.swift */; }; 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105F263AE530005D15AE /* TitleValueView.swift */; }; 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5107B263C0C11005D15AE /* AnyProviderCleaning.swift */; }; + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */; }; 84F6B6482619A87C0038F10D /* ExtrinsicIndexWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */; }; 84F6B6502619E1ED0038F10D /* Int+Operations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B64F2619E1ED0038F10D /* Int+Operations.swift */; }; 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F77AA9265EE86B00F54885 /* CrowdloanErrorPresentable.swift */; }; @@ -1244,17 +1480,18 @@ 85547F698B551ACD387D84E2 /* SelectValidatorsStartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */; }; 85A093F6055DDD2E2E9253F2 /* ControllerAccountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */; }; 85B1B7387F09A8405C4E688A /* WalletSendConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */; }; + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */; }; 872DF7DE5A001DF5B8A4E288 /* StakingBondMoreConfirmationFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BA5883C1103D3A2218D839 /* StakingBondMoreConfirmationFlow.swift */; }; 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */; }; 885551F78A5926D16D5AF0CB /* ControllerAccountPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5CB64B91B35804B3671456 /* ControllerAccountPresenter.swift */; }; 886E8CF81EF2566D98D9693E /* ExportSeedViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FA66143B25AA70B02CE461 /* ExportSeedViewFactory.swift */; }; - 887CE12C7C59F5DB092E9227 /* AccountStatisticsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */; }; 887DCCC498EB8472021DCE3E /* PolkaswapSwapConfirmationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC50F2FF6E8EBC00B56CB86D /* PolkaswapSwapConfirmationRouter.swift */; }; 888D852FAE0318FAE4A31252 /* PolkaswapAdjustmentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8AAC6AAD532FC7E63765D85 /* PolkaswapAdjustmentViewController.swift */; }; 88F3A9FB9CEA464275F1115E /* ExportMnemonicViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47759907380BE9300E54DC78 /* ExportMnemonicViewFactory.swift */; }; 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */; }; 8A109807FBF5FE089DEDBA8E /* FiltersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85AF940D0B379062D292D93 /* FiltersTests.swift */; }; 8A1FC8AEE234C7FEBF7B6B2E /* CrowdloanContributionConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */; }; + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */; }; 8A3CC3AAFF6B962CF3BE7BF3 /* CreateContactTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCC952210C0714F32C3AE570 /* CreateContactTests.swift */; }; 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916326B6F6651BBC5913B26F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */; }; 8B292AD8D20AB9AB5DB905B1 /* WalletOptionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1E3F963A56923FD036280BD /* WalletOptionAssembly.swift */; }; @@ -1265,11 +1502,11 @@ 8CDA490B390BFA261906F8FC /* CrowdloanContributionSetupViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BC71941B91D3E372CDB11C /* CrowdloanContributionSetupViewLayout.swift */; }; 8D9BC9C36DC891CDD900A895 /* AccountConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */; }; 8F0B3FE843167777A1D3771C /* NodeSelectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B3E1906EEBE32E71E82BB6 /* NodeSelectionViewLayout.swift */; }; - 8FC70700D2154F472636D458 /* AccountStatisticsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */; }; 9081D43697D992F51E057ED2 /* CrowdloanContributionSetupPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7068913923A6DEEE9D8EA0 /* CrowdloanContributionSetupPresenter.swift */; }; 90A3F46EF181DC2B821CC80C /* CrowdloanContributionConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F791FE1B479CE1DF936F79F /* CrowdloanContributionConfirmViewFactory.swift */; }; 90EFE3768F1375470FDBE6F6 /* PurchaseViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */; }; 910CEF0535028E629FD9798C /* SwapTransactionDetailViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB255DD7988E0E0E9CA35DA9 /* SwapTransactionDetailViewLayout.swift */; }; + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */; }; 9174AA8CEB0D79C25842EC52 /* RecommendedValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */; }; 91986C1E07B1827BDD5DC82F /* NetworkInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26635BD49FBF19DB1253906E /* NetworkInfoTests.swift */; }; 921E4891E85C0DC6FDD8A0D0 /* CrowdloanContributionConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */; }; @@ -1279,9 +1516,9 @@ 9436FE913C0FBDAF8CE232C5 /* ClaimCrowdloanRewardsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC1236F31289F7F25A25E69C /* ClaimCrowdloanRewardsRouter.swift */; }; 94B0F0C84AF74B3CD7223C3A /* AccountConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7306D50F278F6CC90DC88F27 /* AccountConfirmPresenter.swift */; }; 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */; }; + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */; }; 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */; }; 9659B32D4622C8D9679298DF /* ChainSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F15D1C78B2844216802DA000 /* ChainSelectionViewFactory.swift */; }; - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */; }; 96EBE5F57C97C7A7A525E864 /* SwapTransactionDetailProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */; }; 982BB3FA25BA6AD5443B24C6 /* NetworkIssuesNotificationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */; }; 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */; }; @@ -1292,6 +1529,7 @@ 99DCBCC3298620721B213012 /* ClaimCrowdloanRewardsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B152D1AC1CD34A4530CB6D0 /* ClaimCrowdloanRewardsTests.swift */; }; 9A6A55297F41DAE45071BF57 /* ExportSeedInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */; }; 9A940CBA3F309D438945A90C /* ControllerAccountConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA49A762B2FBB66FD6A55FC /* ControllerAccountConfirmationProtocols.swift */; }; + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */; }; 9B4F0484B81BBF8DFA618599 /* AccountCreateViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */; }; 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0968457BE5556B46D789C30 /* AddCustomNodeWireframe.swift */; }; 9D5F6A48E7A9166B9341F417 /* NetworkInfoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */; }; @@ -1311,7 +1549,6 @@ A48C21F10B9EB92454E898AE /* NftDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82072889A33037BFC9D8F574 /* NftDetailsTests.swift */; }; A4FE32D50E4B7CB5B53E0067 /* StakingPoolInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCB1F95F35D50950D0A021E /* StakingPoolInfoProtocols.swift */; }; A565F118B7ED356099662F03 /* ExportMnemonicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E32C2DC4CC106A3509BE651D /* ExportMnemonicTests.swift */; }; - A5AB7027E1E73E39E4026C5C /* Pods_fearlessTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */; }; A5C7F51539B8D93D9186DA2C /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419D75A346CE10236161522 /* LiquidityPoolRemoveLiquidityViewLayout.swift */; }; A64E3CA61C6CEE74F2FD9825 /* PolkaswapTransaktionSettingsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7931155840DACB340284ABBB /* PolkaswapTransaktionSettingsAssembly.swift */; }; A6855830B76B0782A696583A /* AssetNetworksInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C554924081754A981EB4243E /* AssetNetworksInteractor.swift */; }; @@ -1323,6 +1560,7 @@ A8F69AC9D7294E7DCBA50470 /* SelectValidatorsStartPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */; }; A9597D17F54CFF4F3704D868 /* AssetNetworksPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B1037AEC97DBEAF9FD50C1 /* AssetNetworksPresenter.swift */; }; AA394DEC06AC872CC79C0FDC /* AssetNetworksAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */; }; + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */; }; AB5E2A2B4CC823E6F6515ADD /* StakingRewardPayoutsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */; }; AB678EAA622BFEAEEA8166F2 /* AllDoneViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */; }; ABA3D873BBECB7F4BD670872 /* ExportSeedPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFB278373745C20822442686 /* ExportSeedPresenter.swift */; }; @@ -1409,7 +1647,6 @@ AEBE16E6262EA7C100DF257C /* StakingErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE16E5262EA7C100DF257C /* StakingErrors.swift */; }; AEBE16F1262EAD7F00DF257C /* StakingPayoutsConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE16F0262EAD7F00DF257C /* StakingPayoutsConfirmTests.swift */; }; AEBE174C262FF4DB00DF257C /* PayoutConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE174B262FF4DB00DF257C /* PayoutConfirmViewModel.swift */; }; - AECBFFADE502D32B7D026B62 /* MultichainAssetSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */; }; AEDD7C0F269C81F500A8405F /* BlockWeights.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDD7C0E269C81F500A8405F /* BlockWeights.swift */; }; AEE4E34D25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE4E34C25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift */; }; AEE4E35225E945AA00D6DF31 /* RewardCalculatorFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE4E35125E945AA00D6DF31 /* RewardCalculatorFacade.swift */; }; @@ -1453,6 +1690,7 @@ B112AC02371DE4C1DAD48BB1 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D9454047EBBD8D8A0174A4 /* LiquidityPoolRemoveLiquidityRouter.swift */; }; B15D513381B7626AB90018F0 /* StakingPoolInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9F68A6BF3D3A6D8234 /* StakingPoolInfoInteractor.swift */; }; B2E3219218E3F54EEB7D5C3C /* NftSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0A0CC21B0CD2A47B9B28841 /* NftSendViewController.swift */; }; + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */; }; B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A43F0468DEBA7500C6B23AF /* LiquidityPoolSupplyConfirmTests.swift */; }; B478746C8342468ECACE3478 /* StakingRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */; }; B51AD1836313CE26F369ED3F /* CustomValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */; }; @@ -1461,10 +1699,11 @@ B7E42D9E7CA509D7BE723357 /* PolkaswapTransaktionSettingsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EFBB5CE05706ADFEF00796 /* PolkaswapTransaktionSettingsRouter.swift */; }; B893A2515909AB6915196317 /* NetworkInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */; }; BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */; }; - BB96B1EA86DAB3E83B50E4BD /* MultichainAssetSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */; }; + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */; }; BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */; }; + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */; }; BE3F6213B26F35EB6324DBD8 /* ControllerAccountWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */; }; BE98780A37B6F68759D770EB /* WalletTransactionHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8DF39247202A30B63F05DA /* WalletTransactionHistoryTests.swift */; }; BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */; }; @@ -1477,47 +1716,17 @@ C20ED4531583D0C8E38715E0 /* PurchaseProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */; }; C3C7D60B36C778DA0A307BCC /* AddCustomNodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58CD8A37F219A0BCC0C6063E /* AddCustomNodeViewController.swift */; }; C3D915637D26E807B85957CF /* NodeSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ABDA8952766DE724CD078D6 /* NodeSelectionPresenter.swift */; }; + C4427244A22EA7BA7F7C9E9F /* StakingRedeemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */; }; C46EEF6A9A9A601694E72DB1 /* StakingMainWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F09665083031502F9693F8 /* StakingMainWireframe.swift */; }; C481665C170F4D9523DC73AF /* WarningAlertViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55EEBFA4A54B3AAF9F52855 /* WarningAlertViewLayout.swift */; }; C4F8BEB6DFA03A374135BD6B /* FiltersInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E692235C8CF576F69971D118 /* FiltersInteractor.swift */; }; C592F4FB550050E116EEEB83 /* WalletOptionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96950EE6AE1BA8F9130A4390 /* WalletOptionViewLayout.swift */; }; - C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */; }; + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */; }; C600C4D52802B87100111316 /* UsernameSetupViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D42802B87100111316 /* UsernameSetupViewLayout.swift */; }; C600C4D728053DF500111316 /* UsernameSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D628053DF500111316 /* UsernameSetupViewController.swift */; }; C600C4D928054A1B00111316 /* AccountCreateFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D828054A1B00111316 /* AccountCreateFlow.swift */; }; C61166692B3BFA9000F483C4 /* NftHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61166682B3BFA9000F483C4 /* NftHeaderCell.swift */; }; C611666C2B3C03B800F483C4 /* NftHeaderCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C611666B2B3C03B800F483C4 /* NftHeaderCellViewModel.swift */; }; - C6182B0F2C631AAC0089558D /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B0E2C631AAC0089558D /* IrohaCrypto */; }; - C6182B112C631AAC0089558D /* MPQRCoreSDK in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B102C631AAC0089558D /* MPQRCoreSDK */; }; - C6182B132C631AAC0089558D /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B122C631AAC0089558D /* RobinHood */; }; - C6182B152C631AAC0089558D /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B142C631AAC0089558D /* SSFAccountManagment */; }; - C6182B172C631AAC0089558D /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B162C631AAC0089558D /* SSFAccountManagmentStorage */; }; - C6182B192C631AAC0089558D /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B182C631AAC0089558D /* SSFAssetManagment */; }; - C6182B1B2C631AAC0089558D /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1A2C631AAC0089558D /* SSFChainConnection */; }; - C6182B1D2C631AAC0089558D /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1C2C631AAC0089558D /* SSFChainRegistry */; }; - C6182B1F2C631AAC0089558D /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1E2C631AAC0089558D /* SSFCloudStorage */; }; - C6182B212C631AAC0089558D /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B202C631AAC0089558D /* SSFCrypto */; }; - C6182B232C631AAC0089558D /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B222C631AAC0089558D /* SSFEraKit */; }; - C6182B252C631AAC0089558D /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B242C631AAC0089558D /* SSFExtrinsicKit */; }; - C6182B272C631AAC0089558D /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B262C631AAC0089558D /* SSFHelpers */; }; - C6182B292C631AAC0089558D /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B282C631AAC0089558D /* SSFKeyPair */; }; - C6182B2B2C631AAC0089558D /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2A2C631AAC0089558D /* SSFLogger */; }; - C6182B2D2C631AAC0089558D /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2C2C631AAC0089558D /* SSFModels */; }; - C6182B2F2C631AAC0089558D /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2E2C631AAC0089558D /* SSFNetwork */; }; - C6182B312C631AAC0089558D /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B302C631AAC0089558D /* SSFPolkaswap */; }; - C6182B332C631AAC0089558D /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B322C631AAC0089558D /* SSFPools */; }; - C6182B352C631AAC0089558D /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B342C631AAC0089558D /* SSFPoolsStorage */; }; - C6182B372C631AAC0089558D /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B362C631AAC0089558D /* SSFQRService */; }; - C6182B392C631AAC0089558D /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B382C631AAC0089558D /* SSFRuntimeCodingService */; }; - C6182B3B2C631AAC0089558D /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3A2C631AAC0089558D /* SSFSigner */; }; - C6182B3D2C631AAC0089558D /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3C2C631AAC0089558D /* SSFSingleValueCache */; }; - C6182B3F2C631AAC0089558D /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3E2C631AAC0089558D /* SSFStorageQueryKit */; }; - C6182B412C631AAC0089558D /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B402C631AAC0089558D /* SSFTransferService */; }; - C6182B432C631AAC0089558D /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B422C631AAC0089558D /* SSFUtils */; }; - C6182B452C631AAC0089558D /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B442C631AAC0089558D /* SSFXCM */; }; - C6182B472C631AAC0089558D /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B462C631AAC0089558D /* SoraKeystore */; }; - C6182B492C631AAC0089558D /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B482C631AAC0089558D /* keccak */; }; - C6182B4C2C6474F30089558D /* PricesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6182B4B2C6474F30089558D /* PricesService.swift */; }; C6264C292799A56E00FCA0DB /* WalletDetailsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C282799A56E00FCA0DB /* WalletDetailsTableCell.swift */; }; C6264C2C2799C15C00FCA0DB /* WalletDetailsCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C2B2799C15C00FCA0DB /* WalletDetailsCellViewModel.swift */; }; C6264C2E2799C7EE00FCA0DB /* WalletDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C2D2799C7EE00FCA0DB /* WalletDetailsViewLayout.swift */; }; @@ -1558,7 +1767,6 @@ C640416028F5191100845780 /* CreateContactViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C640415F28F5191100845780 /* CreateContactViewModel.swift */; }; C640416228F51F9900845780 /* CreateContactViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C640416128F51F9900845780 /* CreateContactViewModelFactory.swift */; }; C648FFC828DC43A70072951B /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C648FFC728DC43A70072951B /* EmptyView.swift */; }; - C64DD7582C75C53A00E97804 /* PriceDataMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */; }; C64ECCE328873F2500CFF434 /* ChainAssetsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */; }; C6584E352982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6584E342982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift */; }; C65A6592288E5CF400679D65 /* AccountInfoFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */; }; @@ -1604,10 +1812,6 @@ C6DC2D602B18411000BAA4DB /* UIImageView+gif.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DC2D5F2B18411000BAA4DB /* UIImageView+gif.swift */; }; C6E5671768DA68535DA5B1C7 /* ControllerAccountConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F02DBCA4A63A5E52E3739374 /* ControllerAccountConfirmationViewFactory.swift */; }; C6FB932E27C9334100563E61 /* AvailableExportOptionsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FB932D27C9334100563E61 /* AvailableExportOptionsProvider.swift */; }; - C6FBA6D82C65DDBC008B18D9 /* AssetModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */; }; - C6FBA6DA2C65EA56008B18D9 /* AssetRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */; }; - C6FBA6DC2C69E006008B18D9 /* PriceDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */; }; - C6FBA6DE2C72E0FD008B18D9 /* PricesUpdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */; }; C77CCA7FF969A2F006A0B6C4 /* WalletChainAccountDashboardProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E1C5E0E16867BDA51B6734 /* WalletChainAccountDashboardProtocols.swift */; }; C7D77690E10875CF1856EBA1 /* StakingRewardPayoutsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7911693957DFAF141EBDAFEC /* StakingRewardPayoutsProtocols.swift */; }; C80B2FDBD395CDEAD1B7E996 /* AnalyticsRewardDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */; }; @@ -1621,6 +1825,7 @@ CBC2B73D7749D5C635EECEE8 /* NftSendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */; }; CC20F3D5802535EDA836926A /* ContactsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87F9D215513308538FA3FDC4 /* ContactsTests.swift */; }; CC545DF80038901FA06FDD58 /* SelectValidatorsConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8B0940B2CB25AD9C36206E /* SelectValidatorsConfirmViewController.swift */; }; + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */; }; CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */; }; CD027E4D430D8939A3D64EB6 /* AllDoneRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31302AE4D5325D2AEC030832 /* AllDoneRouter.swift */; }; CD76A6513A708051857FD480 /* StakingAmountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */; }; @@ -1643,12 +1848,15 @@ D403B7725ED25E20A20F9D6A /* WalletMainContainerViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FDDC470A6921DC2258939E /* WalletMainContainerViewLayout.swift */; }; D41CA684433AD861BEC2213B /* WalletTransactionHistoryViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */; }; D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */; }; + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */; }; D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */; }; + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */; }; D83B47B07C0D40A327AC44F7 /* CustomValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */; }; D8581E5440A19D977E17BFDE /* StakingAmountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */; }; D886425A55425810AD070AB5 /* ControllerAccountConfirmationWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */; }; D8C33C4064C3B2F30BB478A5 /* LiquidityPoolSupplyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C4CAC8978B0848DF5FD6FE /* LiquidityPoolSupplyTests.swift */; }; D9E803290BE797D889EA372D /* AssetSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2655EE5CFAAD20C0FF59188 /* AssetSelectionTests.swift */; }; + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */; }; DA5B38EE4622B33AFCA11A50 /* WalletsManagmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E19988955B1C159EDA2555 /* WalletsManagmentPresenter.swift */; }; DA62812C23210601F4ECF84D /* ContactsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */; }; DAAD3A3FCBA0C0E613167EBF /* ContactsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */; }; @@ -1657,6 +1865,7 @@ DBA436B3B1C90965FE8F9B79 /* YourValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */; }; DBA6A0A26D77E7A587C51792 /* PolkaswapSwapConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6FC016067C632AF256EB62 /* PolkaswapSwapConfirmationProtocols.swift */; }; DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */; }; + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */; }; DCDAE9E8C805B71A8F8CEFBD /* YourValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */; }; DCE13AA9F3BA0EB54F793017 /* LiquidityPoolSupplyAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62928FB3556EEA3A228131AC /* LiquidityPoolSupplyAssembly.swift */; }; DD1ADD4F777B0C6398C73805 /* NftDetailsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */; }; @@ -1667,8 +1876,10 @@ DE9FA0FA5A6B685CBD593025 /* AllDoneInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C705CA1083C1EE58426D90CD /* AllDoneInteractor.swift */; }; DFD5EDA2F7C096DB3A5368E4 /* CustomValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A16451B21451996CAA31F8 /* CustomValidatorListTests.swift */; }; DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6717FF1B7777400B62F028C3 /* LiquidityPoolsOverviewInteractor.swift */; }; + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7525F0A27140F3C058CA5B0C /* TransferTests.swift */; }; E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */; }; E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */; }; + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */; }; E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */; }; E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF65551AE1E858C563054E87 /* ContactsAssembly.swift */; }; E2C68C903A8B7AB2ECD82E7C /* ChainAccountListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */; }; @@ -1682,9 +1893,11 @@ E5F3DF66415E54AE04D0C9A9 /* StakingMainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */; }; E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE2059F621D024F85EFBFD0 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */; }; E6981A506AC931D30E85169E /* WalletOptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */; }; + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */; }; E7CAD629FF0D4E97594F7A05 /* YourValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */; }; E8B8D3D290DC7057144559CE /* WalletChainAccountDashboardPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E83833EB33E51A12F96F83B /* WalletChainAccountDashboardPresenter.swift */; }; - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */; }; + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */; }; + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */; }; EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */; }; EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */; }; EB5F587A71CCE1F0F86154CF /* ControllerAccountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */; }; @@ -1692,8 +1905,10 @@ EB9D8D22AA13BF12F845856B /* ReferralCrowdloanProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953E21C32079A8051A0EE964 /* ReferralCrowdloanProtocols.swift */; }; EC978E6C4FBF39BE9ED10C86 /* SelectValidatorsStartWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */; }; ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F75A22E215273305AF7AA2 /* LiquidityPoolRemoveLiquidityConfirmTests.swift */; }; + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */; }; EDC02F2FDCDB55519DB0273D /* AnalyticsRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */; }; EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FD9A4EA33DB4B6AFA5B0C4 /* WarningAlertViewController.swift */; }; + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */; }; EE6FC6EFB089A94EF105F2CC /* StakingRewardPayoutsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */; }; EF02C9661F03C8EF58182997 /* StakingAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB76FEC075A6FE1D246BA5DD /* StakingAmountViewController.swift */; }; EF23CA9AF3889FEAB2D6CBD6 /* NftCollectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */; }; @@ -1811,7 +2026,6 @@ F4BDDCBE2657A57F005336BA /* TransferValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4BDDCBD2657A57F005336BA /* TransferValidatorTests.swift */; }; F4C086B826D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086B726D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift */; }; F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086C626D1159E00716AEC /* SubqueryEraStakersInfoSource.swift */; }; - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */; }; F4D551A12643DD240002363F /* AccountSelectionPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D551A02643DD240002363F /* AccountSelectionPresentable.swift */; }; F4D6FF0E26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF0D26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift */; }; F4D6FF1326B3DDDF002313AF /* AnalyticsRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF1226B3DDDF002313AF /* AnalyticsRewardsViewController.swift */; }; @@ -1853,6 +2067,8 @@ F7EB8F835CFA7FC949EF4C22 /* YourValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906C55FC079AF6112AF0745B /* YourValidatorListWireframe.swift */; }; F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */; }; F865D752EBD2363E971BE267 /* MainNftContainerAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */; }; + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */; }; + FA0025882D68503E00B84297 /* FeatureToggleConfigSyncComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */; }; FA00488F282CC7710032FF49 /* SelectValidatorsStartFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */; }; FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */; }; FA004893282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */; }; @@ -1861,7 +2077,6 @@ FA004899282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004898282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift */; }; FA00489B282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00489A282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift */; }; FA0066E92935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0066E82935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift */; }; - FA01B2BB2C6213740078A35B /* InfoTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA01B2BA2C6213740078A35B /* InfoTitleView.swift */; }; FA054A9A2BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA054A992BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift */; }; FA054A9C2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA054A9B2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift */; }; FA072C14277AE2FE00731718 /* QRCaptureService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA072C13277AE2FE00731718 /* QRCaptureService.swift */; }; @@ -1912,12 +2127,42 @@ FA1D02092BBE74B7005B7071 /* AvailableLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D02082BBE74B7005B7071 /* AvailableLiquidityPoolsListInteractor.swift */; }; FA1D020D2BBE7690005B7071 /* UserLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D020C2BBE7690005B7071 /* UserLiquidityPoolsListInteractor.swift */; }; FA1D51D72BCFD445001353E7 /* LiquidityPools+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D51D62BCFD445001353E7 /* LiquidityPools+ViewModel.swift */; }; + FA1FAD3E2D62FEBE00ECD456 /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */; }; + FA1FAD402D62FEBE00ECD456 /* MPQRCoreSDK in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */; }; + FA1FAD422D62FEBE00ECD456 /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD412D62FEBE00ECD456 /* RobinHood */; }; + FA1FAD442D62FEBE00ECD456 /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */; }; + FA1FAD462D62FEBE00ECD456 /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */; }; + FA1FAD482D62FEBE00ECD456 /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */; }; + FA1FAD4A2D62FEBE00ECD456 /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */; }; + FA1FAD4C2D62FEBE00ECD456 /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */; }; + FA1FAD4E2D62FEBE00ECD456 /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */; }; + FA1FAD502D62FEBE00ECD456 /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */; }; + FA1FAD522D62FEBE00ECD456 /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD512D62FEBE00ECD456 /* SSFEraKit */; }; + FA1FAD542D62FEBE00ECD456 /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */; }; + FA1FAD562D62FEBE00ECD456 /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD552D62FEBE00ECD456 /* SSFHelpers */; }; + FA1FAD582D62FEBE00ECD456 /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */; }; + FA1FAD5A2D62FEBE00ECD456 /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD592D62FEBE00ECD456 /* SSFLogger */; }; + FA1FAD5C2D62FEBE00ECD456 /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5B2D62FEBE00ECD456 /* SSFModels */; }; + FA1FAD5E2D62FEBE00ECD456 /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */; }; + FA1FAD602D62FEBE00ECD456 /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */; }; + FA1FAD622D62FEBE00ECD456 /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD612D62FEBE00ECD456 /* SSFPools */; }; + FA1FAD642D62FEBE00ECD456 /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */; }; + FA1FAD662D62FEBE00ECD456 /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD652D62FEBE00ECD456 /* SSFQRService */; }; + FA1FAD682D62FEBE00ECD456 /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */; }; + FA1FAD6A2D62FEBE00ECD456 /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD692D62FEBE00ECD456 /* SSFSigner */; }; + FA1FAD6C2D62FEBE00ECD456 /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */; }; + FA1FAD6E2D62FEBE00ECD456 /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */; }; + FA1FAD702D62FEBE00ECD456 /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */; }; + FA1FAD722D62FEBE00ECD456 /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD712D62FEBE00ECD456 /* SSFUtils */; }; + FA1FAD742D62FEBE00ECD456 /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD732D62FEBE00ECD456 /* SSFXCM */; }; + FA1FAD762D62FEBE00ECD456 /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD752D62FEBE00ECD456 /* SoraKeystore */; }; + FA1FAD782D62FEBE00ECD456 /* TonConnectAPI in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */; }; + FA1FAD7A2D62FEBE00ECD456 /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD792D62FEBE00ECD456 /* keccak */; }; FA22228D2BD237910031DE04 /* SubqueryPriceFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22228C2BD237910031DE04 /* SubqueryPriceFetcher.swift */; }; FA22228F2BD237CF0031DE04 /* SoraSubqueryPriceFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22228E2BD237CF0031DE04 /* SoraSubqueryPriceFetcher.swift */; }; FA2222912BD239500031DE04 /* SoraSubqueryPriceResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222902BD239500031DE04 /* SoraSubqueryPriceResponse.swift */; }; FA2222942BD2726F0031DE04 /* SkeletonLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */; }; FA2222962BD272A30031DE04 /* SkeletonLoadableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */; }; - FA236A412C4FA0A4009330F2 /* NomisJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */; }; FA24FEFE2B95C32200CD9E04 /* Decimal+DoubleValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */; }; FA256984274CE5A500875A53 /* BalanceLockType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256982274CE5A400875A53 /* BalanceLockType.swift */; }; FA256985274CE5A500875A53 /* BalanceLocks+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256983274CE5A500875A53 /* BalanceLocks+Sort.swift */; }; @@ -1942,8 +2187,6 @@ FA256A45274CE8BD00875A53 /* StoriesCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256A43274CE8BC00875A53 /* StoriesCollectionItem.swift */; }; FA256A46274CE8BD00875A53 /* StoriesCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA256A44274CE8BD00875A53 /* StoriesCollectionItem.xib */; }; FA256A48274CE8C200875A53 /* StakingMainInteractor+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256A47274CE8C200875A53 /* StakingMainInteractor+Subscription.swift */; }; - FA273E5C2C4F67AA00F9CB13 /* AccountStatisticsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */; }; - FA273E5E2C4F680500F9CB13 /* AccountStatisticsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */; }; FA286AF52A3043C3008BD527 /* ConvenienceError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF42A3043C3008BD527 /* ConvenienceError.swift */; }; FA286B0B2A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF72A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift */; }; FA286B0C2A3043DB008BD527 /* CrossChainConfirmationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF82A3043DB008BD527 /* CrossChainConfirmationRouter.swift */; }; @@ -2034,7 +2277,6 @@ FA2FC82628B380C500CC0A42 /* StakingPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82228B380C500CC0A42 /* StakingPool.swift */; }; FA2FC82828B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */; }; FA2FC82B28B3814000CC0A42 /* DetailsTriangularedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82A28B3814000CC0A42 /* DetailsTriangularedViewModel.swift */; }; - FA2FC82D28B3816D00CC0A42 /* StorageKeyDataExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */; }; FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC84028B3879900CC0A42 /* InsettedLabel.swift */; }; FA2FC84328B3886900CC0A42 /* StakingRewardCalculatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC84228B3886900CC0A42 /* StakingRewardCalculatorView.swift */; }; FA2FC85928B389EB00CC0A42 /* StakingChainSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC85428B389EB00CC0A42 /* StakingChainSelectionViewController.swift */; }; @@ -2045,6 +2287,7 @@ FA3067222B621540006A0BA5 /* LockProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3067212B621540006A0BA5 /* LockProtocol.swift */; }; FA30674B2B625DC0006A0BA5 /* BalancesLocksRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30674A2B625DC0006A0BA5 /* BalancesLocksRequest.swift */; }; FA3067502B627D23006A0BA5 /* TokensLocksRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30674F2B627D23006A0BA5 /* TokensLocksRequest.swift */; }; + FA30BFEF2D62C85300B0E8F6 /* CoinbasePurchaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */; }; FA30D4EF28BF32EA00548C1E /* SortPickerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4EE28BF32EA00548C1E /* SortPickerTableViewCell.swift */; }; FA30D4F128BF32F500548C1E /* SortPickerTableViewCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4F028BF32F500548C1E /* SortPickerTableViewCellModel.swift */; }; FA30D4F428BF67DF00548C1E /* StakingPoolInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4F328BF67DF00548C1E /* StakingPoolInfoViewModel.swift */; }; @@ -2135,31 +2378,18 @@ FA38C9A1275FD6B9005C5577 /* BundleImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9A0275FD6B9005C5577 /* BundleImageViewModel.swift */; }; FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C02761E68B005C5577 /* AccountViewModel.swift */; }; FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */; }; - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */; }; FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */; }; FA38C9CF27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */; }; - FA3F42F92C50C8EF00AA1397 /* ScamInfoFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */; }; FA3F5B17281A790A00BEF03B /* StakingAmountFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */; }; FA3F5B67281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B66281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift */; }; FA3F5B69281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B68281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift */; }; FA3F5B6B281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B6A281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift */; }; FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA402F2E27C7C646008CF986 /* ExportAction.swift */; }; - FA41B61D2C64856D00D0713A /* FireHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */; }; - FA41B6202C6495EE00D0713A /* 5ireHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */; }; - FA41B6222C64988700D0713A /* AssetTransactionData+FireHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */; }; - FA41B6262C64BE6800D0713A /* ViscanHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */; }; - FA41B6292C64C15000D0713A /* VicscanHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */; }; - FA41B62B2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */; }; FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA44284129D44E51000142EB /* ChainStakingSettings.swift */; }; FA4441342BF75FD90067C633 /* LiquidityPoolListType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */; }; - FA4542422C6B367B00610A71 /* BlockExplorerType+Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */; }; + FA46449E2D49E14B00E21668 /* SelectedCurrencyChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */; }; FA46D2C7283DDD07005A112B /* ParachainStakingCandidateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */; }; FA4889672B7F5E360092ABF8 /* GiantsquidExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */; }; - FA4B098E2C47804F001B73F9 /* NomisRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */; }; - FA4B75AF2C6F325F001B954F /* MultichainAssetFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */; }; - FA4B75B02C6F325F001B954F /* OKXMultichainAssetSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */; }; - FA4B75B22C6F3270001B954F /* MultichainChainFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */; }; - FA4B75B42C6F333A001B954F /* OKXMultichainChainFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */; }; FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B928E284493C60003BCEF /* DelegateCall.swift */; }; FA4B92912844CF750003BCEF /* MetaAccountModelChangedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */; }; FA4B92982844D0100003BCEF /* ShimmeredLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B92952844D0100003BCEF /* ShimmeredLabel.swift */; }; @@ -2180,7 +2410,6 @@ FA4C3D122886794D00176398 /* SelfSizingTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4C3D112886794D00176398 /* SelfSizingTableView.swift */; }; FA4CC6642817C3AC00A7E85F /* StackedTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4CC6632817C3AC00A7E85F /* StackedTableView.swift */; }; FA4CC666281801CB00A7E85F /* StakingUnitInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4CC665281801CB00A7E85F /* StakingUnitInfoView.swift */; }; - FA5032B22C4E58C500075909 /* AccountStatisticsPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */; }; FA5085AC2C33C6D4002DF97D /* SafeArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5085AA2C33C6D4002DF97D /* SafeArray.swift */; }; FA5085AD2C33C6D4002DF97D /* SafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */; }; FA5137AA29AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5137A129AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift */; }; @@ -2339,6 +2568,7 @@ FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */ = {isa = PBXBuildFile; productRef = FA72546E2AC2F12D00EC47A6 /* Web3Wallet */; }; FA7336FD2A132F740096A291 /* AlchemyHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */; }; FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */; }; + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */; }; FA74359529C0733E0085A47E /* Array+Difference.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359429C0733E0085A47E /* Array+Difference.swift */; }; FA74359729C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */; }; FA74359929C0735B0085A47E /* ChainSettingsRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */; }; @@ -2396,6 +2626,8 @@ FA887A452C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */; }; FA887A472C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A462C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift */; }; FA887A492C1C19DB00CA720F /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A482C1C19DB00CA720F /* WarningView.swift */; }; + FA8B02112D375A730066F070 /* ErasStakersOverviewKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */; }; + FA8B02132D375A990066F070 /* ErasStakersPagedKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */; }; FA8ED43328FD960F00EBB712 /* YourValidatorListFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43228FD960F00EBB712 /* YourValidatorListFlow.swift */; }; FA8ED43628FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43528FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift */; }; FA8ED43828FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43728FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift */; }; @@ -2408,6 +2640,9 @@ FA8F6386298253ED004B8CD4 /* AddConnectionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F6385298253ED004B8CD4 /* AddConnectionError.swift */; }; FA8F63AB29825C90004B8CD4 /* AccountShareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F63A529825C90004B8CD4 /* AccountShareFactory.swift */; }; FA8F63B1298273FE004B8CD4 /* DecodedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F63B0298273FE004B8CD4 /* DecodedTypes.swift */; }; + FA8FD1812AF4B55100354482 /* Web3 in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1802AF4B55100354482 /* Web3 */; }; + FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1822AF4B55100354482 /* Web3ContractABI */; }; + FA8FD1852AF4B55100354482 /* Web3PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1842AF4B55100354482 /* Web3PromiseKit */; }; FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1872AF4BEDD00354482 /* Swime */; }; FA8FD18B2AFB7E6C00354482 /* AssetNetworksTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8FD18A2AFB7E6C00354482 /* AssetNetworksTableCell.swift */; }; FA8FD18E2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8FD18D2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift */; }; @@ -2467,8 +2702,6 @@ FA93A313283653B70021330F /* ValidatorListFilterFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A312283653B70021330F /* ValidatorListFilterFlow.swift */; }; FA93A3162836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A3152836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift */; }; FA93A3182836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A3172836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift */; }; - FA93D1F72C61E52C006B494E /* BlockExplorerApiKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */; }; - FA9464252C5CC434001E810F /* LiquidityPoolDetailsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */; }; FA97E68B2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA97E68A2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift */; }; FA99422827FE925000D771E5 /* UISwitch+CustomSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA99422727FE925000D771E5 /* UISwitch+CustomSize.swift */; }; FA99422D28002BB800D771E5 /* MissingAccountOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA99422C28002BB800D771E5 /* MissingAccountOptions.swift */; }; @@ -2578,34 +2811,13 @@ FAA086D4284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D3284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift */; }; FAA086D628475AF300CC2F33 /* ParachainStakingDelegatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D528475AF300CC2F33 /* ParachainStakingDelegatorState.swift */; }; FAA086D82848AB8600CC2F33 /* YourRewardDestinationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D72848AB8600CC2F33 /* YourRewardDestinationViewModel.swift */; }; + FAA92BB22D4356C5004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */; }; FAA9BC412B8F17BA00A875BF /* Collection+Average.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */; }; FAAA29092B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29082B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift */; }; FAAA290B2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290A2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift */; }; FAAA290E2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290D2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift */; }; FAAA29102B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290F2B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift */; }; FAAA29122B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29112B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift */; }; - FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */; }; - FAAA29212B8DCE260089AFE6 /* StorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */; }; - FAAA29222B8DCE260089AFE6 /* CachedStorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */; }; - FAAA29272B8DCE3E0089AFE6 /* MultipleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */; }; - FAAA29282B8DCE3E0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */; }; - FAAA29292B8DCE3E0089AFE6 /* StorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */; }; - FAAA292A2B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */; }; - FAAA29302B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */; }; - FAAA29312B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */; }; - FAAA29322B8DCE590089AFE6 /* StorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */; }; - FAAA29332B8DCE590089AFE6 /* NMapStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */; }; - FAAA29362B8DCE930089AFE6 /* StorageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */; }; - FAAA29372B8DCE930089AFE6 /* MultipleRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */; }; - FAAA293F2B8DCED90089AFE6 /* MapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */; }; - FAAA29402B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */; }; - FAAA29412B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */; }; - FAAA29422B8DCED90089AFE6 /* JSONRPCListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */; }; - FAAA29432B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */; }; - FAAA29442B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */; }; - FAAA29492B8DCF350089AFE6 /* AsyncStorageRequestFactoryDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */; }; - FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */; }; - FAAA294B2B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */; }; FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29562B8DED770089AFE6 /* MapKeyType.swift */; }; FAABC46E2845BADA002CF40E /* CustomValidatorParachainListFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAABC46D2845BADA002CF40E /* CustomValidatorParachainListFilter.swift */; }; FAABC4702845BAEE002CF40E /* CustomValidatorParachainListComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAABC46F2845BAEE002CF40E /* CustomValidatorParachainListComposer.swift */; }; @@ -2641,18 +2853,10 @@ FAB0EDE227AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB0EDE127AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift */; }; FAB16A312A9C9BBF00E71F43 /* NftCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB16A302A9C9BBF00E71F43 /* NftCollectionCell.swift */; }; FAB16A342A9C9BD000E71F43 /* NftCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB16A332A9C9BD000E71F43 /* NftCellViewModel.swift */; }; - FAB482EB2C58A8AA00594D89 /* Web3 in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EA2C58A8AA00594D89 /* Web3 */; }; - FAB482ED2C58A8AA00594D89 /* Web3ContractABI in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EC2C58A8AA00594D89 /* Web3ContractABI */; }; - FAB482EF2C58A8AA00594D89 /* Web3PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */; }; - FAB482F12C58AC7F00594D89 /* ChainModel+Nomis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */; }; FAB707622BB317D300A1131C /* CrossChainViewLoadingCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */; }; FAB707652BB3C06900A1131C /* AssetsAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */; }; FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707662BB3C1A400A1131C /* AssetAccountInfo.swift */; }; FAB8B96E29F23FCB002E5F04 /* ChainAccountBalanceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB8B96D29F23FCA002E5F04 /* ChainAccountBalanceViewModel.swift */; }; - FAB90CE92C6F584000D13804 /* ChainSelectionCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */; }; - FAB90CED2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */; }; - FAB90CEF2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */; }; - FAB90CF12C73351C00D13804 /* UIImage+ColorsInvert.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */; }; FABA161B2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABA161A2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift */; }; FABA161D2B0C94CA001AF2F0 /* UserDataModelV10toV11.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */; }; FABA162D2B0C9504001AF2F0 /* TabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABA162C2B0C9504001AF2F0 /* TabBar.swift */; }; @@ -2674,16 +2878,9 @@ FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */; }; FAC0BBD1291D0EB000E6F106 /* RecipientViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */; }; FAC0BBD2291D0EB000E6F106 /* SelectNetworkViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */; }; - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */; }; - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */; }; - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */; }; FAC0BBD6291D0EB000E6F106 /* SendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */; }; FAC0BBD7291D0EB000E6F106 /* SendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */; }; - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */; }; - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */; }; - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */; }; FAC0BBDB291D0EB000E6F106 /* SendDataValidatingFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */; }; - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */; }; FAC0BBDD291D0EB000E6F106 /* SelectAssetViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */; }; FAC0BBDE291D0EB000E6F106 /* SelectAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */; }; FAC0BBDF291D0EB000E6F106 /* SelectAssetRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */; }; @@ -2710,6 +2907,42 @@ FAC6CDAD2BA81D680013A17E /* FeeViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDAC2BA81D680013A17E /* FeeViewProtocol.swift */; }; FAC6CDAF2BA81FA00013A17E /* WalletLoggerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */; }; FAC6CDB12BA821B00013A17E /* WalletImageViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDB02BA821B00013A17E /* WalletImageViewModelProtocol.swift */; }; + FAC71CDE2D363FFE00122E95 /* MapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */; }; + FAC71CDF2D363FFE00122E95 /* KeyEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */; }; + FAC71CE02D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */; }; + FAC71CE12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */; }; + FAC71CE22D363FFE00122E95 /* PrefixRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */; }; + FAC71CE32D363FFE00122E95 /* PrefixResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */; }; + FAC71CE42D363FFE00122E95 /* MixStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA52D363FFE00122E95 /* MixStorage.swift */; }; + FAC71CE62D363FFE00122E95 /* JSONRPCWorkerDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */; }; + FAC71CE72D363FFE00122E95 /* EncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */; }; + FAC71CE82D363FFE00122E95 /* SimpleKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */; }; + FAC71CE92D363FFE00122E95 /* NMapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */; }; + FAC71CEA2D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */; }; + FAC71CEB2D363FFE00122E95 /* NMapStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */; }; + FAC71CEC2D363FFE00122E95 /* StorageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA82D363FFE00122E95 /* StorageRequest.swift */; }; + FAC71CED2D363FFE00122E95 /* StorageRequestWorkerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */; }; + FAC71CEF2D363FFE00122E95 /* CachedRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA42D363FFE00122E95 /* CachedRequest.swift */; }; + FAC71CF02D363FFE00122E95 /* AsyncStorageRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */; }; + FAC71CF32D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */; }; + FAC71CF42D363FFE00122E95 /* StorageKeyDataExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */; }; + FAC71CF62D363FFE00122E95 /* MultipleRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */; }; + FAC71CF72D363FFE00122E95 /* CachedStorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */; }; + FAC71CF82D363FFE00122E95 /* PrefixStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */; }; + FAC71CFA2D363FFE00122E95 /* JSONRPCListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */; }; + FAC71CFB2D363FFE00122E95 /* CachedStorageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */; }; + FAC71CFD2D363FFE00122E95 /* StorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */; }; + FAC71CFE2D363FFE00122E95 /* StorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */; }; + FAC71D002D363FFE00122E95 /* MixStorageDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */; }; + FAC71D022D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */; }; + FAC71D032D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */; }; + FAC71D042D363FFE00122E95 /* MixStorageRequestsWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */; }; + FAC71D062D363FFE00122E95 /* StorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */; }; + FAC71D072D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */; }; + FAC71D082D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */; }; + FAC71D092D363FFE00122E95 /* SimpleStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */; }; + FAC71D0A2D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */; }; + FAC71D0D2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */; }; FACACE1427BCF10F005422EE /* MetaAccountImportMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACACE1227BCF10E005422EE /* MetaAccountImportMetadata.swift */; }; FACACE1527BCF10F005422EE /* MetaAccountImportPreferredInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACACE1327BCF10E005422EE /* MetaAccountImportPreferredInfo.swift */; }; FACD427B2A5BE7C6009975AA /* RuntimeSnapshotReady.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */; }; @@ -2755,8 +2988,6 @@ FAD0679E2C2044320050291F /* AssetManagementMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD0679D2C2044320050291F /* AssetManagementMigrator.swift */; }; FAD067A72C2044490050291F /* SubstrateDataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */; }; FAD067A92C20445F0050291F /* ChainAssetListBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067A82C20445F0050291F /* ChainAssetListBuilder.swift */; }; - FAD067AD2C2044810050291F /* ErasStakersPagedKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */; }; - FAD067AE2C2044810050291F /* ErasStakersOverviewKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */; }; FAD067BD2C2044B10050291F /* AssetManagementViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B12C2044B10050291F /* AssetManagementViewModel.swift */; }; FAD067BE2C2044B10050291F /* AssetManagementViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B22C2044B10050291F /* AssetManagementViewModelFactory.swift */; }; FAD067BF2C2044B10050291F /* AssetManagementInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B32C2044B10050291F /* AssetManagementInteractor.swift */; }; @@ -2775,12 +3006,6 @@ FAD067D12C20453E0050291F /* DefaultEraStakersFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067CE2C20453E0050291F /* DefaultEraStakersFetching.swift */; }; FAD067D32C20550B0050291F /* UIImageView+Shimmered.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067D22C20550B0050291F /* UIImageView+Shimmered.swift */; }; FAD067D52C214E7C0050291F /* LiquidityPoolsConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067D42C214E7C0050291F /* LiquidityPoolsConstants.swift */; }; - FAD240D62C64D3D100B389FF /* ZChainHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */; }; - FAD240D92C64D3FF00B389FF /* ZChainHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */; }; - FAD240DB2C64E22B00B389FF /* AssetTransactionData+ZChainHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */; }; - FAD240DE2C64E97900B389FF /* KaiaHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */; }; - FAD240E02C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */; }; - FAD240E22C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */; }; FAD428942A834A8E001D6A16 /* TopViewControllerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428932A834A8E001D6A16 /* TopViewControllerHelper.swift */; }; FAD428962A834BA8001D6A16 /* UIApplication+TopViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428952A834BA8001D6A16 /* UIApplication+TopViewController.swift */; }; FAD428982A860C9B001D6A16 /* EthereumNodeFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */; }; @@ -2857,10 +3082,6 @@ FAD429362A8656B7001D6A16 /* UICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD429342A8656B7001D6A16 /* UICollectionView.swift */; }; FAD558CB298933F8008AA5A8 /* ChainModelGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F13F0F26F1DC43006725FF /* ChainModelGenerator.swift */; }; FAD558CC298A17A1008AA5A8 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D1E8F24D20B1500C30A7A /* Constants.swift */; }; - FAD5FF252C463C07003201F5 /* AccountStatisticsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */; }; - FAD5FF272C463C4F003201F5 /* AccountStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */; }; - FAD5FF2B2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */; }; - FAD5FF2E2C464717003201F5 /* NomisAccountStatisticsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */; }; FAD646C2284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C1284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift */; }; FAD646C4284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C3284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift */; }; FAD646C6284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C5284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift */; }; @@ -2873,9 +3094,6 @@ FAD646DC284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646DB284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift */; }; FAD956772BB2BE8C00A8BF76 /* SystemAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD956762BB2BE8C00A8BF76 /* SystemAccountRequest.swift */; }; FAD9AAC12B8DF62100AA603B /* AsyncMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC02B8DF62100AA603B /* AsyncMap.swift */; }; - FAD9AAC32B8DFE0200AA603B /* PrefixRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */; }; - FAD9AAC52B8DFF6700AA603B /* PrefixStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */; }; - FAD9AAC72B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */; }; FADB9DB529D551A100303F7D /* SoraRewardCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADB9DB429D551A100303F7D /* SoraRewardCalculatorService.swift */; }; FADBA5F12B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */; }; FADBA5F32B5FE36200CFCF30 /* ChainAccountViewMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADBA5F22B5FE36200CFCF30 /* ChainAccountViewMode.swift */; }; @@ -2903,7 +3121,7 @@ FAEDC1392820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */; }; FAEDC13D2820F59100E6582C /* StakingAmountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */; }; FAEDC13F2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */; }; - FAEFA6D52C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */; }; + FAF487472D1FD4F0009A402C /* SubstrateV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */; }; FAF5E9CD27E46D3E005A3448 /* GithubJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */; }; FAF5E9CE27E46D3E005A3448 /* URLConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */; }; FAF5E9D127E46D6A005A3448 /* AppVersionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */; }; @@ -2914,10 +3132,6 @@ FAF5E9DC27E46DAA005A3448 /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9DA27E46DAA005A3448 /* RootViewController.swift */; }; FAF5E9DE27E46DCC005A3448 /* String+VersionComparsion.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9DD27E46DCC005A3448 /* String+VersionComparsion.swift */; }; FAF5E9E127E4A4C1005A3448 /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9E027E4A4C1005A3448 /* RootViewModel.swift */; }; - FAF600752C48D79600E56558 /* Cosmos in Frameworks */ = {isa = PBXBuildFile; productRef = FAF600742C48D79600E56558 /* Cosmos */; }; - FAF600772C48F08B00E56558 /* AccountScoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF600762C48F08B00E56558 /* AccountScoreView.swift */; }; - FAF6007A2C48F12000E56558 /* AccountScoreViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */; }; - FAF6D90D2C57654F00274E69 /* Decimal+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */; }; FAF92E6627B4275F005467CE /* Bool+ToInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF92E6527B4275E005467CE /* Bool+ToInt.swift */; }; FAF96B582B636FC700E299C1 /* SystemNumberRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF96B572B636FC700E299C1 /* SystemNumberRequest.swift */; }; FAF9C2962AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */; }; @@ -2932,9 +3146,7 @@ FAF9C2B32AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */; }; FAF9C2B42AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */; }; FAF9C2B72AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */; }; - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */; }; - FAFB5EE02C5A11A30015D3DD /* AccountScoreSettingsChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */; }; - FAFB5EE22C5A2CE80015D3DD /* FWCosmosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */; }; + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */; }; FAFBEE81284621800036D08C /* SelectedValidatorListParachainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */; }; FAFBEE83284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */; }; FAFDB2C329112A00003971FB /* SubstrateCallPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */; }; @@ -3027,17 +3239,157 @@ 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountViewFactory.swift; sourceTree = ""; }; 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListFlow.swift; sourceTree = ""; }; 003FA37F2B240C5D7605340D /* StakingMainInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainInteractor.swift; sourceTree = ""; }; + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeInteractor.swift; sourceTree = ""; }; 01A85735F958D05CFEFCB4DF /* NftSendRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendRouter.swift; sourceTree = ""; }; 025F392269B990931ADBE8F6 /* ControllerAccountConfirmationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationTests.swift; sourceTree = ""; }; 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListProtocols.swift; sourceTree = ""; }; 03EFBB5CE05706ADFEF00796 /* PolkaswapTransaktionSettingsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsRouter.swift; sourceTree = ""; }; 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertInteractor.swift; sourceTree = ""; }; 04806331BF10F63A49326941 /* NetworkInfoWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoWireframe.swift; sourceTree = ""; }; - 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewLayout.swift; sourceTree = ""; }; 04EF69DFE142600FF2708A13 /* ControllerAccountConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewController.swift; sourceTree = ""; }; + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferPresenter.swift; sourceTree = ""; }; 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListPresenter.swift; sourceTree = ""; }; - 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsInteractor.swift; sourceTree = ""; }; 06F6B892F62579DE761073CA /* LiquidityPoolSupplyConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmPresenter.swift; sourceTree = ""; }; + 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModel.swift; sourceTree = ""; }; + 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModelFactory.swift; sourceTree = ""; }; + 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsAssembly.swift; sourceTree = ""; }; + 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsInteractor.swift; sourceTree = ""; }; + 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresentable.swift; sourceTree = ""; }; + 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresenter.swift; sourceTree = ""; }; + 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsProtocols.swift; sourceTree = ""; }; + 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsRouter.swift; sourceTree = ""; }; + 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewController.swift; sourceTree = ""; }; + 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewLayout.swift; sourceTree = ""; }; + 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockscoutHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViscanHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZChainHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FireHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KaiaHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoTitleView.swift; sourceTree = ""; }; + 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreView.swift; sourceTree = ""; }; + 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+ColorsInvert.swift"; sourceTree = ""; }; + 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BlockExplorerType+Filters.swift"; sourceTree = ""; }; + 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FWCosmosView.swift; sourceTree = ""; }; + 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChainModel+Nomis.swift"; sourceTree = ""; }; + 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Decimal+Formatting.swift"; sourceTree = ""; }; + 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreViewModel.swift; sourceTree = ""; }; + 0701B8C02C78F71800DCD395 /* TonConnectError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectError.swift; sourceTree = ""; }; + 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEvent.swift; sourceTree = ""; }; + 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; + 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; + 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; + 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsRequest.swift; sourceTree = ""; }; + 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsFetcher.swift; sourceTree = ""; }; + 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisJSONDecoder.swift; sourceTree = ""; }; + 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisRequestSigner.swift; sourceTree = ""; }; + 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsFetching.swift; sourceTree = ""; }; + 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAllTokensRequestParameters.swift; sourceTree = ""; }; + 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexApproveRequestParameters.swift; sourceTree = ""; }; + 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexLiquiditySourceRequestParameters.swift; sourceTree = ""; }; + 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuotesRequestParameters.swift; sourceTree = ""; }; + 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSwapRequestParameters.swift; sourceTree = ""; }; + 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXApproveTransaction.swift; sourceTree = ""; }; + 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexProtocol.swift; sourceTree = ""; }; + 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuote.swift; sourceTree = ""; }; + 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRouter.swift; sourceTree = ""; }; + 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSubrouter.swift; sourceTree = ""; }; + 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXLiquiditySource.swift; sourceTree = ""; }; + 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXQuote.swift; sourceTree = ""; }; + 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXResponse.swift; sourceTree = ""; }; + 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSupportedChain.swift; sourceTree = ""; }; + 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwap.swift; sourceTree = ""; }; + 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwapTransaction.swift; sourceTree = ""; }; + 0701B8E02C78F71800DCD395 /* OKXToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXToken.swift; sourceTree = ""; }; + 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRequestSigner.swift; sourceTree = ""; }; + 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAggregatorService.swift; sourceTree = ""; }; + 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LiquidityPools+ViewModel.swift"; sourceTree = ""; }; + 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsConstants.swift; sourceTree = ""; }; + 0701B90B2C78FAF000DCD395 /* assets.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = assets.json; sourceTree = ""; }; + 0701B90C2C78FAF000DCD395 /* chains.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chains.json; sourceTree = ""; }; + 0701B90D2C78FAF000DCD395 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; + 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "polkadot-9370metadata"; sourceTree = ""; }; + 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; + 0701B9102C78FAF000DCD395 /* runtime-default.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-default.json"; sourceTree = ""; }; + 0701B9112C78FAF000DCD395 /* runtime-empty.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-empty.json"; sourceTree = ""; }; + 0701B9122C78FAF000DCD395 /* runtime-kusama.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-kusama.json"; sourceTree = ""; }; + 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-polkadot.json"; sourceTree = ""; }; + 0701B9142C78FAF000DCD395 /* runtime-rococo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-rococo.json"; sourceTree = ""; }; + 0701B9152C78FAF000DCD395 /* runtime-westend.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-westend.json"; sourceTree = ""; }; + 0701B9162C78FAF000DCD395 /* types.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; + 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModel.swift; sourceTree = ""; }; + 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModelFactory.swift; sourceTree = ""; }; + 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsAssembly.swift; sourceTree = ""; }; + 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInput.swift; sourceTree = ""; }; + 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInteractor.swift; sourceTree = ""; }; + 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsPresenter.swift; sourceTree = ""; }; + 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; + 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsRouter.swift; sourceTree = ""; }; + 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewController.swift; sourceTree = ""; }; + 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewLayout.swift; sourceTree = ""; }; + 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityAssembly.swift; sourceTree = ""; }; + 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityInteractor.swift; sourceTree = ""; }; + 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityPresenter.swift; sourceTree = ""; }; + 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityProtocols.swift; sourceTree = ""; }; + 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityRouter.swift; sourceTree = ""; }; + 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewController.swift; sourceTree = ""; }; + 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewLayout.swift; sourceTree = ""; }; + 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmAssembly.swift; sourceTree = ""; }; + 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmProtocols.swift; sourceTree = ""; }; + 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewController.swift; sourceTree = ""; }; + 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewLayout.swift; sourceTree = ""; }; + 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListInteractor.swift; sourceTree = ""; }; + 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListPresenter.swift; sourceTree = ""; }; + 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; + 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListInteractor.swift; sourceTree = ""; }; + 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListPresenter.swift; sourceTree = ""; }; + 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; + 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCell.swift; sourceTree = ""; }; + 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCellModel.swift; sourceTree = ""; }; + 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListType.swift; sourceTree = ""; }; + 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListViewModel.swift; sourceTree = ""; }; + 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListAssembly.swift; sourceTree = ""; }; + 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListProtocols.swift; sourceTree = ""; }; + 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListRouter.swift; sourceTree = ""; }; + 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewController.swift; sourceTree = ""; }; + 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewLayout.swift; sourceTree = ""; }; + 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewAssembly.swift; sourceTree = ""; }; + 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewInteractor.swift; sourceTree = ""; }; + 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewPresenter.swift; sourceTree = ""; }; + 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewProtocols.swift; sourceTree = ""; }; + 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewRouter.swift; sourceTree = ""; }; + 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewController.swift; sourceTree = ""; }; + 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewLayout.swift; sourceTree = ""; }; + 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModel.swift; sourceTree = ""; }; + 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModelFactory.swift; sourceTree = ""; }; + 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyAssembly.swift; sourceTree = ""; }; + 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyInteractor.swift; sourceTree = ""; }; + 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyPresenter.swift; sourceTree = ""; }; + 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyProtocols.swift; sourceTree = ""; }; + 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyRouter.swift; sourceTree = ""; }; + 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewController.swift; sourceTree = ""; }; + 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewLayout.swift; sourceTree = ""; }; + 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModel.swift; sourceTree = ""; }; + 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModelFactory.swift; sourceTree = ""; }; + 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; + 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmInteractor.swift; sourceTree = ""; }; + 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmPresenter.swift; sourceTree = ""; }; + 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmProtocols.swift; sourceTree = ""; }; + 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmRouter.swift; sourceTree = ""; }; + 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewController.swift; sourceTree = ""; }; + 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewLayout.swift; sourceTree = ""; }; + 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkRequestUrlParameters.swift; sourceTree = ""; }; + 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatistics.swift; sourceTree = ""; }; + 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockExplorerApiKey.swift; sourceTree = ""; }; + 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KaiaHistoryResponse.swift; sourceTree = ""; }; + 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZChainHistoryResponse.swift; sourceTree = ""; }; + 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 5ireHistoryResponse.swift; sourceTree = ""; }; + 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VicscanHistoryResponse.swift; sourceTree = ""; }; + 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+FireHistory.swift"; sourceTree = ""; }; + 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+ZChainHistory.swift"; sourceTree = ""; }; + 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+VicscanHistory.swift"; sourceTree = ""; }; + 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+KaiaHistory.swift"; sourceTree = ""; }; + 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScamInfoFetcher.swift; sourceTree = ""; }; + 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreSettingsChanged.swift; sourceTree = ""; }; 0702B31429701759003519F5 /* AmountInputViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputViewModel.swift; sourceTree = ""; }; 0702B31729701864003519F5 /* WalletViewModelObserverContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletViewModelObserverContainer.swift; sourceTree = ""; }; 0702B31929701884003519F5 /* MoneyPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyPresentable.swift; sourceTree = ""; }; @@ -3069,19 +3421,49 @@ 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetAssembly.swift; sourceTree = ""; }; 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetProtocols.swift; sourceTree = ""; }; 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetInteractor.swift; sourceTree = ""; }; + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonRemoteBalanceFetching.swift; sourceTree = ""; }; 0713097C28C63893002B17D0 /* ScamSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncService.swift; sourceTree = ""; }; 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; + 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSubstrateV8MigrationPolicy.swift; sourceTree = ""; }; + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonWebBridgeHeaderView.swift; sourceTree = ""; }; + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilder.swift; sourceTree = ""; }; + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeMessageType.swift; sourceTree = ""; }; + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnect.swift; sourceTree = ""; }; + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeResponse.swift; sourceTree = ""; }; + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TonConnectResponses+Encodable.swift"; sourceTree = ""; }; + 0715FCE42C66378900AA674E /* TonConnectModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectModels.swift; sourceTree = ""; }; + 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PricesUpdated.swift; sourceTree = ""; }; + 071606C52C7C6C3200C1DF75 /* PricesService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PricesService.swift; sourceTree = ""; }; + 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PriceDataHelper.swift; sourceTree = ""; }; + 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetRepositoryFactory.swift; sourceTree = ""; }; + 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetModelMapper.swift; sourceTree = ""; }; + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalToggleService.swift; sourceTree = ""; }; + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalListToggle.swift; sourceTree = ""; }; + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = fearless.entitlements; sourceTree = ""; }; 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceSubscriptionAdapter.swift; sourceTree = ""; }; 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwipableTableViewCell.swift; sourceTree = ""; }; 0716C84D28880304004C8CB1 /* UITableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = ""; }; 0716C84E28880304004C8CB1 /* UIResponder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIResponder.swift; sourceTree = ""; }; 071BC67429274F47007685D1 /* HashCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashCopiedEvent.swift; sourceTree = ""; }; 071BC676292B21CC007685D1 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; + 07230EAA2C73515E00B92466 /* DappDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappDataSource.swift; sourceTree = ""; }; + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModelFactory.swift; sourceTree = ""; }; + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModel.swift; sourceTree = ""; }; + 07230EB02C7456B900B92466 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraQrTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumTransferFlowUseCase.swift; sourceTree = ""; }; 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadorSigner.swift; sourceTree = ""; }; 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotParser.swift; sourceTree = ""; }; 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectExtrinsic.swift; sourceTree = ""; }; 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotSignature.swift; sourceTree = ""; }; + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableHeaderView.swift; sourceTree = ""; }; + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableCell.swift; sourceTree = ""; }; + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewModelFactory.swift; sourceTree = ""; }; 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModelFactory.swift; sourceTree = ""; }; 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModel.swift; sourceTree = ""; }; 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqOraclePricePoint.swift; sourceTree = ""; }; @@ -3090,11 +3472,19 @@ 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeCellButton.swift; sourceTree = ""; }; 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectDisconnectService.swift; sourceTree = ""; }; 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectProposalDataValidating.swift; sourceTree = ""; }; + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonHistoryOperationFactory.swift; sourceTree = ""; }; + 073DE30E2C5BA35B003B4990 /* TonModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonModels.swift; sourceTree = ""; }; + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Ton.swift"; sourceTree = ""; }; + 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryHistoryOperationFactory.swift; sourceTree = ""; }; + 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryStakingRewardsFetcher.swift; sourceTree = ""; }; 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationStatusAlertEvent.swift; sourceTree = ""; }; 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressCopiedEvent.swift; sourceTree = ""; }; 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOfflineEvent.swift; sourceTree = ""; }; 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOnlineEvent.swift; sourceTree = ""; }; 075C646F28098AFB00A55094 /* EthereumConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumConstants.swift; sourceTree = ""; }; + 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSubstrateV8MigrationPolicy.swift; sourceTree = ""; }; + 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceDelegate.swift; sourceTree = ""; }; + 075E5FD02C7F1A630044C142 /* TonConnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectService.swift; sourceTree = ""; }; 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonInputViewV2.swift; sourceTree = ""; }; 0761DEB128E1F54D00B90D2C /* StakingPoolCreateViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateViewModel.swift; sourceTree = ""; }; 0761DEB328E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateViewModelFactory.swift; sourceTree = ""; }; @@ -3127,6 +3517,9 @@ 076D9D6129506CE3002762E3 /* polkaswapSettings.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingsFactory.swift; sourceTree = ""; }; 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingMapper.swift; sourceTree = ""; }; + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilderImpl.swift; sourceTree = ""; }; + 0778A1292C5763D6008A1254 /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; }; + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonJettonInjector.swift; sourceTree = ""; }; 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Gradient.swift"; sourceTree = ""; }; 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectEthereumTransferService.swift; sourceTree = ""; }; 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloConstants.swift; sourceTree = ""; }; @@ -3136,10 +3529,13 @@ 07A4F5242B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = ""; }; 07A4F5252B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; 07A4F5262B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateRemoteBalanceFetching.swift; sourceTree = ""; }; + 07A949862C47C39800613B9D /* ServiceAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceAssembly.swift; sourceTree = ""; }; 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XorlessTransfer.swift; sourceTree = ""; }; 07B018D028C7135400E05510 /* ScamInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamInfo.swift; sourceTree = ""; }; 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamServiceOperationFactory.swift; sourceTree = ""; }; 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamWarningExpandableView.swift; sourceTree = ""; }; + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonTransferFlowUseCase.swift; sourceTree = ""; }; 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetAlertPresentableStyle.swift; sourceTree = ""; }; 07B6BC7B28B875D800621864 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = ""; }; 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewModelFactory.swift; sourceTree = ""; }; @@ -3150,12 +3546,18 @@ 07BF3D982B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainlinkOperationFactory.swift; sourceTree = ""; }; 07BF3D9A2B3D8C370046ABF4 /* ManualOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManualOperation.swift; sourceTree = ""; }; 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+OklinkHistory.swift"; sourceTree = ""; }; - 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockscoutHistoryOperationFactory.swift; sourceTree = ""; }; 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Zeta.swift"; sourceTree = ""; }; 07BFF8A52AD6635F005A5C58 /* WalletConnectConfirmationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WalletConnectConfirmationCoordinator.swift; path = "/Users/soramitsu/Documents/soramitsu/fearless-iOS/fearless/Modules/Coordinators/WalletConnectConfirmationCoordinator.swift"; sourceTree = ""; }; 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AutoNamespacesError+Extension.swift"; sourceTree = ""; }; 07C3397029178D390057C4A5 /* types.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsTypesSyncService.swift; sourceTree = ""; }; + 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceImpl.swift; sourceTree = ""; }; + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDChainAccountMigrationPolicyV12.swift; sourceTree = ""; }; + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDMetaAccountMigrationPolicy.swift; sourceTree = ""; }; + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakinkPoolRewardCalculator.swift; sourceTree = ""; }; 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolStrategy.swift; sourceTree = ""; }; 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolViewModelState.swift; sourceTree = ""; }; @@ -3171,7 +3573,13 @@ 07D05E6328EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolViewModelState.swift; sourceTree = ""; }; 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolStrategy.swift; sourceTree = ""; }; 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PoolNominateCall.swift; sourceTree = ""; }; + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectUrlHandling.swift; sourceTree = ""; }; + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserFeaturedView.swift; sourceTree = ""; }; + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowserExploreFeaturedCell.swift; sourceTree = ""; }; + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserListCell.swift; sourceTree = ""; }; + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserSectionHeaderView.swift; sourceTree = ""; }; 07DB9C087A812B3606897A78 /* NetworkInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoPresenter.swift; sourceTree = ""; }; + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConstansts.swift; sourceTree = ""; }; 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoRouter.swift; sourceTree = ""; }; 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoAssembly.swift; sourceTree = ""; }; 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoProtocols.swift; sourceTree = ""; }; @@ -3203,6 +3611,22 @@ 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CopyableLabelView.swift; path = fearless/Common/View/CopyableLabelView.swift; sourceTree = SOURCE_ROOT; }; 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletBalanceInfo.swift; sourceTree = ""; }; 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceBuilder.swift; sourceTree = ""; }; + 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectEstablished.swift; sourceTree = ""; }; + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = MultiAssetV12.xcmappingmodel; sourceTree = ""; }; + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectDessision.swift; sourceTree = ""; }; + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonDapp.swift; sourceTree = ""; }; + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonDapp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectAppRequest.swift; sourceTree = ""; }; + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendTransactionSignRequest.swift; sourceTree = ""; }; + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectRequestVariant.swift; sourceTree = ""; }; + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectSendDessision.swift; sourceTree = ""; }; + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectSessionCrypto.swift; sourceTree = ""; }; + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectApp.swift; sourceTree = ""; }; + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonConnectedApp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEventsCenter.swift; sourceTree = ""; }; + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectError.swift; sourceTree = ""; }; + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEvent.swift; sourceTree = ""; }; 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeApiKeyInjector.swift; sourceTree = ""; }; 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainCollectionView.swift; sourceTree = ""; }; 07F2B75A28A6533900280C38 /* assets.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = assets.json; sourceTree = ""; }; @@ -3220,6 +3644,8 @@ 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissingAccountFetcher.swift; sourceTree = ""; }; 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainIssuesCenter.swift; sourceTree = ""; }; 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+dynamicSize.swift"; sourceTree = ""; }; + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingMainViewLayout.swift; sourceTree = ""; }; + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectEcosystemBannerView.swift; sourceTree = ""; }; 0892AD886F2BE499C075C701 /* MainNftContainerProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerProtocols.swift; sourceTree = ""; }; 08EB1FC5907B5165836318C4 /* AnalyticsValidatorsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsTests.swift; sourceTree = ""; }; 09373C708FE543066B943E45 /* NftDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsInteractor.swift; sourceTree = ""; }; @@ -3230,16 +3656,19 @@ 0BDDF1911884C819F63DCA80 /* NodeSelectionViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionViewFactory.swift; sourceTree = ""; }; 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerRouter.swift; sourceTree = ""; }; 0C34D496D0F57E685237B3A7 /* StakingUnbondConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmInteractor.swift; sourceTree = ""; }; + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeAssembly.swift; sourceTree = ""; }; 0DB89A1483E4601F427056B3 /* NetworkIssuesNotificationAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationAssembly.swift; sourceTree = ""; }; 0E07F60661001B2C505D9C8B /* SelectMarketPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketPresenter.swift; sourceTree = ""; }; - 0F48467D97F9D06F83F70894 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewLayout.swift; sourceTree = ""; }; 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewLayout.swift; sourceTree = ""; }; + 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; sourceTree = ""; }; 112609AE5629962646248BF0 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; + 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearless.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewFactory.swift; sourceTree = ""; }; - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewFactory.swift; sourceTree = ""; }; 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmInteractor.swift; sourceTree = ""; }; 14611E105279789A149B3755 /* AssetNetworksProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksProtocols.swift; sourceTree = ""; }; 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListPresenter.swift; sourceTree = ""; }; + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsRouter.swift; sourceTree = ""; }; 15E7F3E6BBE50797A9EB9145 /* WalletTransactionHistoryViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewController.swift; sourceTree = ""; }; 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewLayout.swift; sourceTree = ""; }; 172B3E9BE51A339D7A09BDA3 /* UsernameSetupPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupPresenter.swift; sourceTree = ""; }; @@ -3253,6 +3682,7 @@ 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateInteractor.swift; sourceTree = ""; }; 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmTests.swift; sourceTree = ""; }; 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsRouter.swift; sourceTree = ""; }; + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListProtocols.swift; sourceTree = ""; }; 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityPresenter.swift; sourceTree = ""; }; 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewFactory.swift; sourceTree = ""; }; 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseWireframe.swift; sourceTree = ""; }; @@ -3262,9 +3692,11 @@ 1D738FE711DD760B47C0BA65 /* WalletMainContainerPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerPresenter.swift; sourceTree = ""; }; 1DECC58C93DB18E79A03B5A0 /* AssetSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionProtocols.swift; sourceTree = ""; }; 1E5CB64B91B35804B3671456 /* ControllerAccountPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountPresenter.swift; sourceTree = ""; }; + 1F03612B61CDE654A7AFAC21 /* Pods-fearlessAll-fearless.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.debug.xcconfig"; sourceTree = ""; }; 1F3B726402D4DB25059EF156 /* AnalyticsValidatorsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsProtocols.swift; sourceTree = ""; }; 200C6B2C85846AED8CA9451A /* ExportMnemonicInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicInteractor.swift; sourceTree = ""; }; 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmProtocols.swift; sourceTree = ""; }; + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferViewController.swift; sourceTree = ""; }; 21A199872F289F61BCF0C62D /* WalletsManagmentAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentAssembly.swift; sourceTree = ""; }; 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionPresenter.swift; sourceTree = ""; }; 22289DD3B70546794C4838CC /* WalletChainAccountDashboardTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardTests.swift; sourceTree = ""; }; @@ -3273,13 +3705,13 @@ 23A74BDB54D503FA2BFBEF35 /* StakingUnbondSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupProtocols.swift; sourceTree = ""; }; 23BC71941B91D3E372CDB11C /* CrowdloanContributionSetupViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewLayout.swift; sourceTree = ""; }; 23CF7E56EC624BDB60290387 /* CreateContactPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactPresenter.swift; sourceTree = ""; }; + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsInteractor.swift; sourceTree = ""; }; 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionPresenter.swift; sourceTree = ""; }; 25D9454047EBBD8D8A0174A4 /* LiquidityPoolRemoveLiquidityRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityRouter.swift; sourceTree = ""; }; 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewLayout.swift; sourceTree = ""; }; 262F98DEF54FA9592BE22B94 /* AllDoneAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneAssembly.swift; sourceTree = ""; }; 2648EEF96694A7FEC94520E8 /* WalletHistoryFilterTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletHistoryFilterTests.swift; sourceTree = ""; }; 26635BD49FBF19DB1253906E /* NetworkInfoTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoTests.swift; sourceTree = ""; }; - 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionPresenter.swift; sourceTree = ""; }; 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewController.swift; sourceTree = ""; }; 27D5AF2F7609ADE855308089 /* AccountExportPasswordViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordViewController.swift; sourceTree = ""; }; 28CCDB1822156D69578A3042 /* StakingPoolInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoPresenter.swift; sourceTree = ""; }; @@ -3297,16 +3729,20 @@ 2AD0A19425D3D3EC00312428 /* GitHubOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubOperationFactory.swift; sourceTree = ""; }; 2AEC13E6950006302AC51B96 /* WalletTransactionHistoryProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryProtocols.swift; sourceTree = ""; }; 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentRouter.swift; sourceTree = ""; }; + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListAssembly.swift; sourceTree = ""; }; 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewFactory.swift; sourceTree = ""; }; 2C542733CEFB871FCD23195E /* NftSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmInteractor.swift; sourceTree = ""; }; 2CF682B92176E0FED5D7B4DB /* LiquidityPoolDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsTests.swift; sourceTree = ""; }; + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewLayout.swift; sourceTree = ""; }; 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmAssembly.swift; sourceTree = ""; }; + 2E4B0600AFFB96A75CF98755 /* StakingRedeemProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemProtocols.swift; sourceTree = ""; }; 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanWikiTableViewCell.swift; sourceTree = ""; }; 2E57C70A27E9EC0E00AF075A /* ProfileViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewState.swift; sourceTree = ""; }; 2E57C70C27E9ED5300AF075A /* ProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewModel.swift; sourceTree = ""; }; 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewLayout.swift; sourceTree = ""; }; 2EC386082DDF4DF1ADDCB49D /* WalletOptionRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionRouter.swift; sourceTree = ""; }; 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsPresenter.swift; sourceTree = ""; }; + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListInteractor.swift; sourceTree = ""; }; 30F3EC1C2DAE60DD6BB99B42 /* StakingUnbondConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewFactory.swift; sourceTree = ""; }; 31226053044986BC828AA912 /* AccountExportPasswordPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordPresenter.swift; sourceTree = ""; }; 312DE7ADA5ABC3214AD3D4AD /* StakingAmountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountInteractor.swift; sourceTree = ""; }; @@ -3317,22 +3753,27 @@ 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationRouter.swift; sourceTree = ""; }; 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionInteractor.swift; sourceTree = ""; }; 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsPresenter.swift; sourceTree = ""; }; + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserAssembly.swift; sourceTree = ""; }; 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailViewController.swift; sourceTree = ""; }; 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsViewFactory.swift; sourceTree = ""; }; + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserPresenter.swift; sourceTree = ""; }; 3574BADE9CF77599048C7010 /* CrowdloanContributionSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupWireframe.swift; sourceTree = ""; }; 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationPresenter.swift; sourceTree = ""; }; 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmFlow.swift; sourceTree = ""; }; + 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListInteractor.swift; sourceTree = ""; }; 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksRouter.swift; sourceTree = ""; }; 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryInteractor.swift; sourceTree = ""; }; + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeRouter.swift; sourceTree = ""; }; 3837CE5CB2D48D8A694A7EE0 /* StakingPoolCreateConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmPresenter.swift; sourceTree = ""; }; 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmTests.swift; sourceTree = ""; }; - 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.dev.xcconfig"; sourceTree = ""; }; 3A43F0468DEBA7500C6B23AF /* LiquidityPoolSupplyConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmTests.swift; sourceTree = ""; }; + 3A93673EEA8F71E8DDA84557 /* StakingRedeemWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemWireframe.swift; sourceTree = ""; }; 3ABDA8952766DE724CD078D6 /* NodeSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionPresenter.swift; sourceTree = ""; }; 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoViewController.swift; sourceTree = ""; }; 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPresenter.swift; sourceTree = ""; }; 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationInteractor.swift; sourceTree = ""; }; 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewPresenter.swift; sourceTree = ""; }; + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewController.swift; sourceTree = ""; }; 3D2C2FC3E31C03D08BDEC7A1 /* PolkaswapAdjustmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentRouter.swift; sourceTree = ""; }; 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityProtocols.swift; sourceTree = ""; }; 3E992CCDC1D581F7E9D3F1CA /* AccountConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmInteractor.swift; sourceTree = ""; }; @@ -3343,6 +3784,7 @@ 3F5C47F8D6CB97D16DFF06B7 /* WalletsManagmentInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentInteractor.swift; sourceTree = ""; }; 3F7068913923A6DEEE9D8EA0 /* CrowdloanContributionSetupPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupPresenter.swift; sourceTree = ""; }; 3F75722D2F921FD1C2D4105D /* CrowdloanContributionConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmViewController.swift; sourceTree = ""; }; + 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemTests.swift; sourceTree = ""; }; 40728E7BBC553AFA8FF4142B /* NetworkIssuesNotificationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewController.swift; sourceTree = ""; }; 408D33DEE675B00ED511517A /* StakingPoolCreateConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmAssembly.swift; sourceTree = ""; }; 40B10454C90325D80CCBEC60 /* StakingUnbondConfirmFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmFlow.swift; sourceTree = ""; wrapsLines = 1; }; @@ -3354,6 +3796,7 @@ 447D03660EFFD8CF46374D85 /* NftSendConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewController.swift; sourceTree = ""; }; 447FE0DC90DF4B4D13CADE62 /* NodeSelectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionInteractor.swift; sourceTree = ""; }; 44FDDC470A6921DC2258939E /* WalletMainContainerViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerViewLayout.swift; sourceTree = ""; }; + 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4594686D10DBB7627B8C9A12 /* LiquidityPoolSupplyConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmInteractor.swift; sourceTree = ""; }; 45C8249F3F41DC0FFCF27EFF /* NftSendTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendTests.swift; sourceTree = ""; }; 470B64C45E547C25FCCCFC33 /* StakingMainProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainProtocols.swift; sourceTree = ""; }; @@ -3361,15 +3804,17 @@ 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletScanQRTests.swift; sourceTree = ""; }; 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactViewController.swift; sourceTree = ""; }; 48C158C8D1855BCE53636934 /* AccountCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateProtocols.swift; sourceTree = ""; }; + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewController.swift; sourceTree = ""; }; 4952E0B8F8DCD92FE4A37892 /* AddCustomNodeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewLayout.swift; sourceTree = ""; }; 497EFA05A2D8076BFE82964D /* LiquidityPoolSupplyViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewController.swift; sourceTree = ""; }; 49C564052FAA3160AA8975CB /* NftSendAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendAssembly.swift; sourceTree = ""; }; 49EBB77A32A59568B0DACFE5 /* StakingPoolCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateProtocols.swift; sourceTree = ""; }; 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryWireframe.swift; sourceTree = ""; }; - 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsProtocols.swift; sourceTree = ""; }; + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgePresenter.swift; sourceTree = ""; }; 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = RecommendedValidatorListViewController.xib; sourceTree = ""; }; 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupTests.swift; sourceTree = ""; }; 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewController.swift; sourceTree = ""; }; + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsRouter.swift; sourceTree = ""; }; 4D4690DFD868E50CA9FAFBC6 /* ClaimCrowdloanRewardsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewLayout.swift; sourceTree = ""; }; 4F651991A2F781300002F2E3 /* MainNftContainerPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerPresenter.swift; sourceTree = ""; }; 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsViewLayout.swift; sourceTree = ""; }; @@ -3378,27 +3823,30 @@ 5002B8FA2695F470587677D2 /* AccountConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmProtocols.swift; sourceTree = ""; }; 502D42F4A480889BA226CAD3 /* StakingMainPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainPresenter.swift; sourceTree = ""; }; 5126D2E4032D179A7D210552 /* WalletsManagmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentProtocols.swift; sourceTree = ""; }; + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsProtocols.swift; sourceTree = ""; }; 523339F3ED67EDEB8C5D2110 /* ClaimCrowdloanRewardsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsPresenter.swift; sourceTree = ""; }; 527CD27768E9A75E6CA87FE4 /* AccountConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmTests.swift; sourceTree = ""; }; 52A64FCFC95E3841032F910B /* ChainSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionTests.swift; sourceTree = ""; }; - 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionRouter.swift; sourceTree = ""; }; 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationProtocols.swift; sourceTree = ""; }; 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewLayout.swift; sourceTree = ""; }; + 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.debug.xcconfig"; sourceTree = ""; }; 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneViewLayout.swift; sourceTree = ""; }; 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationPresenter.swift; sourceTree = ""; }; 55499F69824A67FA32C02C77 /* StakingPoolInfoRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoRouter.swift; sourceTree = ""; }; 5555FA26DF1BD5483F7544B5 /* StakingPoolCreateConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewLayout.swift; sourceTree = ""; }; 55CC5A63AC07644409E997C1 /* StakingMainViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingMainViewController.xib; sourceTree = ""; }; + 560C48D7A83F51F001622D71 /* StakingRedeemInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemInteractor.swift; sourceTree = ""; }; 5663C645EB394E16BFC848AB /* NftCollectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionTests.swift; sourceTree = ""; }; 5674162035C7D9F226FA9964 /* StakingUnbondConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewController.swift; sourceTree = ""; }; 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchasePresenter.swift; sourceTree = ""; }; + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewController.swift; sourceTree = ""; }; 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListWireframe.swift; sourceTree = ""; }; 58CD8A37F219A0BCC0C6063E /* AddCustomNodeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewController.swift; sourceTree = ""; }; 594BC61689EC942ED0A64A4A /* ReferralCrowdloanViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewLayout.swift; sourceTree = ""; }; 599FEDBD7E8B665F1A93BA70 /* AccountConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmWireframe.swift; sourceTree = ""; }; - 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainViewController.swift; sourceTree = ""; }; 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewLayout.swift; sourceTree = ""; }; + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeProtocols.swift; sourceTree = ""; }; 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseViewFactory.swift; sourceTree = ""; }; 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionTests.swift; sourceTree = ""; }; 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentPresenter.swift; sourceTree = ""; }; @@ -3411,6 +3859,7 @@ 5D39CEB720F336B3A400477E /* ContactsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsViewLayout.swift; sourceTree = ""; }; 5D5F6F1BDBC4BE780D593700 /* NetworkIssuesNotificationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationInteractor.swift; sourceTree = ""; }; 5D81DBDDD34EA20C3270EDB4 /* AddCustomNodeViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewFactory.swift; sourceTree = ""; }; + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferPresenter.swift; sourceTree = ""; }; 5E096A576B747C09B14FD38D /* WalletMainContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerAssembly.swift; sourceTree = ""; }; 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainTests.swift; sourceTree = ""; }; 5F6F7AE5AFF3F2E7BADA02BB /* LiquidityPoolDetailsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsAssembly.swift; sourceTree = ""; }; @@ -3426,18 +3875,15 @@ 61EBE466BDCF77E65FDCDF81 /* ExportMnemonicPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicPresenter.swift; sourceTree = ""; }; 6216F6F1B91F798F07695FB6 /* StakingAmountWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountWireframe.swift; sourceTree = ""; }; 62928FB3556EEA3A228131AC /* LiquidityPoolSupplyAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyAssembly.swift; sourceTree = ""; }; - 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsAssembly.swift; sourceTree = ""; }; 62FA66143B25AA70B02CE461 /* ExportSeedViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedViewFactory.swift; sourceTree = ""; }; 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsWireframe.swift; sourceTree = ""; }; 639AD37D87BD08106E7E6E2A /* WarningAlertWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertWireframe.swift; sourceTree = ""; }; - 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; sourceTree = ""; }; 63CCCC63389A70294F816143 /* NodeSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionProtocols.swift; sourceTree = ""; }; 63F4BE52D0625CD8C21D2460 /* CrowdloanListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewLayout.swift; sourceTree = ""; }; 6419D75A346CE10236161522 /* LiquidityPoolRemoveLiquidityViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewLayout.swift; sourceTree = ""; }; 641B699003FF648A380F7FA6 /* LiquidityPoolSupplyConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewLayout.swift; sourceTree = ""; }; 6503D178156C6407EC848D41 /* LiquidityPoolSupplyRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyRouter.swift; sourceTree = ""; }; 65AD15693E21C869DE1FDD17 /* UsernameSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupWireframe.swift; sourceTree = ""; }; - 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewController.swift; sourceTree = ""; }; 66FFB904E5A83F2EFBCCBBF8 /* StakingPoolInfoTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoTests.swift; sourceTree = ""; }; 6717FF1B7777400B62F028C3 /* LiquidityPoolsOverviewInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewInteractor.swift; sourceTree = ""; }; 67B1037AEC97DBEAF9FD50C1 /* AssetNetworksPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksPresenter.swift; sourceTree = ""; }; @@ -3446,18 +3892,19 @@ 6887529305794E17D9434D44 /* LiquidityPoolRemoveLiquidityInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityInteractor.swift; sourceTree = ""; }; 6897929D244B5C29E3FD0727 /* StakingPoolCreateRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateRouter.swift; sourceTree = ""; }; 69B00AC48FB7D11855875EB9 /* SwapTransactionDetailPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailPresenter.swift; sourceTree = ""; }; - 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearless.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6A825B6368073B06F32D7C8F /* StakingMainViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainViewFactory.swift; sourceTree = ""; }; 6B0277C3D897EADD48A7C64F /* AnalyticsValidatorsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsInteractor.swift; sourceTree = ""; }; 6B152D1AC1CD34A4530CB6D0 /* ClaimCrowdloanRewardsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsTests.swift; sourceTree = ""; }; 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsInteractor.swift; sourceTree = ""; }; 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListInteractor.swift; sourceTree = ""; wrapsLines = 1; }; 6B896BA49EE0D4C77401D097 /* AnalyticsValidatorsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsWireframe.swift; sourceTree = ""; }; + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewController.swift; sourceTree = ""; }; 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmTests.swift; sourceTree = ""; }; 6C7AAA265DB437D2CDDC165E /* NftCollectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionInteractor.swift; sourceTree = ""; }; 6C90AA5852CFA841CED20631 /* AllDoneProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneProtocols.swift; sourceTree = ""; }; 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsTests.swift; sourceTree = ""; }; 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = AccountExportPasswordViewController.xib; sourceTree = ""; }; + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsProtocols.swift; sourceTree = ""; }; 6EDB8BAE1FAE3C7502E9245E /* NftDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewLayout.swift; sourceTree = ""; }; 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountListTests.swift; sourceTree = ""; }; 71285CF636B32ACD8EB5519E /* ReferralCrowdloanViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewFactory.swift; sourceTree = ""; }; @@ -3467,23 +3914,29 @@ 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendViewLayout.swift; sourceTree = ""; }; 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupProtocols.swift; sourceTree = ""; }; 748E0AF1A286016CB220155C /* ControllerAccountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountInteractor.swift; sourceTree = ""; }; + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferTests.swift; sourceTree = ""; }; + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewLayout.swift; sourceTree = ""; }; + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferProtocols.swift; sourceTree = ""; }; 75B53E901B1475DE858A2C99 /* ContactsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsRouter.swift; sourceTree = ""; }; + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewLayout.swift; sourceTree = ""; }; 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsTests.swift; sourceTree = ""; }; - 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewLayout.swift; sourceTree = ""; }; + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListInteractor.swift; sourceTree = ""; }; 779702BC0E9C9882BEA5C273 /* StakingPoolCreateConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmInteractor.swift; sourceTree = ""; }; 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseProtocols.swift; sourceTree = ""; }; 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingBondMoreFlow.swift; sourceTree = ""; }; 7911693957DFAF141EBDAFEC /* StakingRewardPayoutsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsProtocols.swift; sourceTree = ""; }; 7931155840DACB340284ABBB /* PolkaswapTransaktionSettingsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsAssembly.swift; sourceTree = ""; }; + 7A269FFAB51579A58387BD00 /* Pods-fearlessAll-fearless.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.release.xcconfig"; sourceTree = ""; }; + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListPresenter.swift; sourceTree = ""; }; 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertPresenter.swift; sourceTree = ""; }; - 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.release.xcconfig"; sourceTree = ""; }; 7C70EBF83B2547452417E588 /* StakingRewardDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewController.swift; sourceTree = ""; }; - 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewController.swift; sourceTree = ""; }; 7CCB1AFB751075497345C3E7 /* ClaimCrowdloanRewardsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewController.swift; sourceTree = ""; }; 7DDDB2B35CD3299F50613141 /* ReferralCrowdloanViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewController.swift; sourceTree = ""; }; 7DE7B3D0BE06472153C0A78C /* NftCollectionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionAssembly.swift; sourceTree = ""; }; 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartViewController.swift; sourceTree = ""; }; + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewController.swift; sourceTree = ""; }; 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewController.swift; sourceTree = ""; }; + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsPresenter.swift; sourceTree = ""; }; 7ED5BEE4CC908012820FE89F /* NetworkInfoProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoProtocols.swift; sourceTree = ""; }; 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmRouter.swift; sourceTree = ""; }; 80809FE46E7B8EBDE3680706 /* NodeSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionWireframe.swift; sourceTree = ""; }; @@ -3524,6 +3977,8 @@ 840BF22426C2653100E3A955 /* ChainSyncServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSyncServiceTests.swift; sourceTree = ""; }; 840BF22626C2C8A600E3A955 /* ChainSyncEvents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSyncEvents.swift; sourceTree = ""; }; 840C71B726821C0600B6D9C2 /* StakingRebondMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRebondMock.swift; sourceTree = ""; }; + 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemMock.swift; sourceTree = ""; }; + 840D891C26242AE500AB231B /* StorageRequestParams.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestParams.swift; sourceTree = ""; }; 840DCBF025DFEE4800D45C6A /* AmountInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputView.swift; sourceTree = ""; }; 840DCBF525E0059D00D45C6A /* AmountInputView+Inspectable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AmountInputView+Inspectable.swift"; sourceTree = ""; }; 840DCBFA25E0703A00D45C6A /* RewardSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardSelectionView.swift; sourceTree = ""; }; @@ -3535,6 +3990,7 @@ 84113B6B255B2835009BD21A /* AccountCreateError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreateError.swift; sourceTree = ""; }; 84113B90255B2CA0009BD21A /* MainTransitionHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTransitionHelper.swift; sourceTree = ""; }; 841185E6263F3B6D00E8A8B6 /* HintView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HintView.swift; path = fearless/Common/View/HintView.swift; sourceTree = SOURCE_ROOT; }; + 841493DB2604C144000D8D1A /* SubscanRewardData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanRewardData.swift; sourceTree = ""; }; 8414943F2604E71C000D8D1A /* TotalRewardItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TotalRewardItem.swift; sourceTree = ""; }; 84155DEC2539817200A27058 /* ApplicationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationService.swift; sourceTree = ""; }; 84155DF2253A1DBA00A27058 /* SchedulerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SchedulerTests.swift; sourceTree = ""; }; @@ -3543,11 +3999,10 @@ 841937862544772F00CFA50C /* animatedBg.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = animatedBg.gif; sourceTree = ""; }; 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceFormatterFactory.swift; sourceTree = ""; }; 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceDisplayInfo.swift; sourceTree = ""; }; - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressConversion.swift; sourceTree = ""; }; - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountFetching.swift; sourceTree = ""; }; 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanRemoteSubscriptionService.swift; sourceTree = ""; }; 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalStorageKeyFactory.swift; sourceTree = ""; }; 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EraValidatorsServiceStub.swift; sourceTree = ""; }; + 841E6AF525EC12100007DDFE /* PreparedNomination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreparedNomination.swift; sourceTree = ""; }; 841E6AFD25EC12DE0007DDFE /* SelectedValidatorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorInfo.swift; sourceTree = ""; }; 841E6B0925EC1C140007DDFE /* RelaychainValidatorOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaychainValidatorOperationFactory.swift; sourceTree = ""; }; 84205896260C795B007D26C6 /* NominatorState+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NominatorState+Status.swift"; sourceTree = ""; }; @@ -3577,6 +4032,7 @@ 8428764F24ADDE0200D91AD8 /* ProfileWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileWireframe.swift; sourceTree = ""; }; 8428765024ADDE0200D91AD8 /* ProfileViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileViewController.swift; sourceTree = ""; }; 8428765124ADDE0200D91AD8 /* ProfileInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileInteractor.swift; sourceTree = ""; }; + 8428765E24ADE0BB00D91AD8 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = ""; }; 8428766824ADF27D00D91AD8 /* AuthorizationPresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationPresentable.swift; sourceTree = ""; }; 8428766A24ADF51D00D91AD8 /* UIViewController+Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Modal.swift"; sourceTree = ""; }; 8428766D24AE046200D91AD8 /* LanguageSelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageSelectionViewController.swift; sourceTree = ""; }; @@ -3632,10 +4088,14 @@ 8430AB1126023C9F005B1066 /* PendingBondedState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingBondedState.swift; sourceTree = ""; }; 8430AB1626023D2D005B1066 /* BaseStashNextState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseStashNextState.swift; sourceTree = ""; }; 8432E55024EFDF6100B05B58 /* AccountItemMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountItemMapperTests.swift; sourceTree = ""; }; + 843461CA26E2590200DCE0CD /* SubscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanHistoryOperationFactory.swift; sourceTree = ""; }; + 843461CC26E2596E00DCE0CD /* WalletRemoteHistoryFiltering.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletRemoteHistoryFiltering.swift; sourceTree = ""; }; + 843461CE26E25AD400DCE0CD /* SubscanHistoryItem+Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SubscanHistoryItem+Wallet.swift"; sourceTree = ""; }; 8434C9E325401EF3009E4191 /* TransactionHistoryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryItem.swift; sourceTree = ""; }; 8434C9E525403686009E4191 /* CDTransactionHistoryItem+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTransactionHistoryItem+CoreDataDecodable.swift"; sourceTree = ""; }; 8434C9E92540AE51009E4191 /* ExtrinsicEraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicEraTests.swift; sourceTree = ""; }; 8436E94326C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshotOperationFactory.swift; sourceTree = ""; }; + 8436E94526C85405003D4EA7 /* RuntimeSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshot.swift; sourceTree = ""; }; 8436EDE125895804004D9E97 /* RampProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RampProvider.swift; sourceTree = ""; }; 8436EDE625895846004D9E97 /* PurchaseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseProvider.swift; sourceTree = ""; }; 8436EDEE25896722004D9E97 /* PurchaseAggregator+Default.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PurchaseAggregator+Default.swift"; sourceTree = ""; }; @@ -3652,6 +4112,7 @@ 843910BA253F021E00E3C217 /* WalletStakingChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStakingChanged.swift; sourceTree = ""; }; 843910C0253F36F300E3C217 /* BaseStorageChildSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseStorageChildSubscription.swift; sourceTree = ""; }; 843910C6253F56EA00E3C217 /* BaseOperation+Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BaseOperation+Result.swift"; sourceTree = ""; }; + 843910C8253F591D00E3C217 /* ScaleDecoderOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScaleDecoderOperation.swift; sourceTree = ""; }; 843910CD253F7E8000E3C217 /* SubstrateDataStorageFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateDataStorageFacade.swift; sourceTree = ""; }; 843910D0253F8DAD00E3C217 /* NetworkAvailabilityLayerPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkAvailabilityLayerPresenter.swift; sourceTree = ""; }; 843910D2253F8DAD00E3C217 /* NetworkAvailabilityLayerProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkAvailabilityLayerProtocols.swift; sourceTree = ""; }; @@ -3721,6 +4182,8 @@ 844EFB64265FD61D0090ACB1 /* CrowdloanContributeConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanContributeConfirmViewModel.swift; sourceTree = ""; }; 8454C21C2632A78900657DAD /* EventRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventRecord.swift; sourceTree = ""; }; 8454C2642632B0EF00657DAD /* EventCodingPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventCodingPath.swift; sourceTree = ""; }; + 8454C2692632B8CE00657DAD /* BalanceDepositEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceDepositEvent.swift; sourceTree = ""; }; + 8454C26E2632BBAA00657DAD /* ExtrinsicProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicProcessing.swift; sourceTree = ""; }; 8454C2822632FC2500657DAD /* ExtrinsicProcessingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicProcessingTests.swift; sourceTree = ""; }; 845532CF2684690D00C2645D /* ParachainSlotLease.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainSlotLease.swift; sourceTree = ""; }; 845532D126846B6800C2645D /* ParachainLeaseInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainLeaseInfo.swift; sourceTree = ""; }; @@ -3731,8 +4194,6 @@ 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoMode.swift; sourceTree = ""; }; 845B821426EF657700D25C72 /* PersistentValueSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistentValueSettings.swift; sourceTree = ""; }; 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedWalletSettings.swift; sourceTree = ""; }; - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountMapper.swift; sourceTree = ""; }; - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountModel.swift; sourceTree = ""; }; 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountModel.swift; sourceTree = ""; }; 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountMapper.swift; sourceTree = ""; }; @@ -3797,6 +4258,8 @@ 8467FD4024ED3C72005D486C /* AlignableContentControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlignableContentControl.swift; sourceTree = ""; }; 8467FD4224ED5F46005D486C /* ProfileSectionTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileSectionTableViewCell.swift; sourceTree = ""; }; 8467FD4424ED5F60005D486C /* ProfileSectionTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileSectionTableViewCell.xib; sourceTree = ""; }; + 8467FD4624ED6496005D486C /* ProfileDetailsTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileDetailsTableViewCell.xib; sourceTree = ""; }; + 8467FD4824ED64A5005D486C /* ProfileDetailsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileDetailsTableViewCell.swift; sourceTree = ""; }; 8467FD4B24EEA081005D486C /* ProfileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTests.swift; sourceTree = ""; }; 8467FD5224EFD210005D486C /* UserDataStorageFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDataStorageFacade.swift; sourceTree = ""; }; 8467FD5424EFD254005D486C /* StorageFacadeProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageFacadeProtocol.swift; sourceTree = ""; }; @@ -3840,6 +4303,7 @@ 846CD24C2656FEB800A2E4B6 /* StorageKeysQueryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeysQueryService.swift; sourceTree = ""; }; 846CD25A265709A800A2E4B6 /* StorageKeySuffixMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeySuffixMapper.swift; sourceTree = ""; }; 846CDECC258D212D009F3E75 /* AlertImageWithTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertImageWithTitleView.swift; sourceTree = ""; }; + 8470D6CC253E3170009E9A5D /* AccountInfoSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountInfoSubscription.swift; sourceTree = ""; }; 8470D6CF253E321C009E9A5D /* StorageSubscriptionProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageSubscriptionProtocols.swift; sourceTree = ""; }; 8470D6D1253E3382009E9A5D /* StorageSubscriptionContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageSubscriptionContainer.swift; sourceTree = ""; }; 8470D6D3253E35F0009E9A5D /* StorageUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageUpdate.swift; sourceTree = ""; }; @@ -3848,7 +4312,6 @@ 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutInfoFactoryProtocol.swift; sourceTree = ""; }; 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorPayoutInfoFactory.swift; sourceTree = ""; }; 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRewardDestinationViewModelFactory.swift; sourceTree = ""; }; - 84729740260A9C13009B86D0 /* DisplayAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayAddress.swift; sourceTree = ""; }; 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmationModel.swift; sourceTree = ""; }; 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmInteractorBase.swift; sourceTree = ""; }; 8472975C260B1B71009B86D0 /* ExistingBonding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExistingBonding.swift; sourceTree = ""; }; @@ -3908,6 +4371,7 @@ 848919DA26FB663D004DBAD5 /* CrowdloansChainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloansChainViewModel.swift; sourceTree = ""; }; 84893BFB24D9B0F1008F6A3F /* PredicateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PredicateTests.swift; sourceTree = ""; }; 84893BFD24DA0000008F6A3F /* FieldStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldStatus.swift; sourceTree = ""; }; + 84893C0224DA8641008F6A3F /* AccountCreationRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreationRequest.swift; sourceTree = ""; }; 84893C0424DA8663008F6A3F /* AccountCreationError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreationError.swift; sourceTree = ""; }; 84893C0624DA890F008F6A3F /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; 8489EDB9264DB25500FF997E /* RecommendationsComposing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendationsComposing.swift; sourceTree = ""; }; @@ -3959,6 +4423,7 @@ 8490144924A93D0B008F705E /* FearlessNavigationBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessNavigationBar.swift; sourceTree = ""; }; 8490144A24A93D0B008F705E /* FearlessNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessNavigationController.swift; sourceTree = ""; }; 8490144E24A93E2E008F705E /* UIImage+Drawing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Drawing.swift"; sourceTree = ""; }; + 8490145024A93FD1008F705E /* FearlessLoadingViewPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessLoadingViewPresenter.swift; sourceTree = ""; }; 8490145124A93FD1008F705E /* FearlessLoadingViewFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessLoadingViewFactory.swift; sourceTree = ""; }; 8490145524A9404E008F705E /* AttributedStringDecorator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringDecorator.swift; sourceTree = ""; }; 8490145724A9406D008F705E /* LegalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegalData.swift; sourceTree = ""; }; @@ -3998,6 +4463,9 @@ 849014D224AA8F60008F705E /* MainTabBarWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTabBarWireframe.swift; sourceTree = ""; }; 849014E724AA925C008F705E /* ScrollsToTop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollsToTop.swift; sourceTree = ""; }; 849014FB24AA9939008F705E /* Charset+Mnemonic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Charset+Mnemonic.swift"; sourceTree = ""; }; + 8490150824AB8A3A008F705E /* WalletEmptyStateDataSource+Module.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WalletEmptyStateDataSource+Module.swift"; sourceTree = ""; }; + 8490150E24AB8A3A008F705E /* WalletEmptyStateDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletEmptyStateDataSource.swift; sourceTree = ""; }; + 8490152024ABC721008F705E /* WalletStaticImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStaticImageViewModel.swift; sourceTree = ""; }; 8490152624ABCC40008F705E /* NumberFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = ""; }; 8490152D24ABD0F5008F705E /* Logger+Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logger+Wallet.swift"; sourceTree = ""; }; 8490386A262E22DC0016D541 /* NominatorPayoutInfoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominatorPayoutInfoFactory.swift; sourceTree = ""; }; @@ -4011,6 +4479,8 @@ 84944249265306BD0016E7BD /* ChangeRewardDestinationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRewardDestinationViewModel.swift; sourceTree = ""; }; 8494425E265330650016E7BD /* StakingRewardDestinationSetupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDestinationSetupTests.swift; sourceTree = ""; }; 8494D86A25247F9600614D8F /* Decimal+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+String.swift"; sourceTree = ""; }; + 8494D86F2525321700614D8F /* SubscanDefinitions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanDefinitions.swift; sourceTree = ""; }; + 8494D8772525343500614D8F /* SubscanOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanOperationFactory.swift; sourceTree = ""; }; 8494D8792525350000614D8F /* SubscanStatusData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanStatusData.swift; sourceTree = ""; }; 8494D87B252537E500614D8F /* SubscanError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanError.swift; sourceTree = ""; }; 849528DD2603697B009DC845 /* RewardEstimationView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RewardEstimationView.xib; sourceTree = ""; }; @@ -4039,6 +4509,7 @@ 849DEC6025EE13CE00C64C19 /* AddressOptionsPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressOptionsPresentable.swift; sourceTree = ""; }; 849DF02C26C40B7900B702F4 /* RuntimeFilesOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeFilesOperationFactory.swift; sourceTree = ""; }; 849DF02E26C53DB900B702F4 /* RuntimeSyncEvents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSyncEvents.swift; sourceTree = ""; }; + 849E0CCF25CFDDB700B33506 /* StorageUpdateData+Decoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StorageUpdateData+Decoding.swift"; sourceTree = ""; }; 849E689426AF388500E0E7BE /* ElectedValidatorInfo+Selected.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ElectedValidatorInfo+Selected.swift"; sourceTree = ""; }; 849ECD3426DE70B900F542A3 /* SingleToMultiassetUserMigrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleToMultiassetUserMigrationTests.swift; sourceTree = ""; }; 849ECD3826DF792800F542A3 /* SkeletonRow+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SkeletonRow+View.swift"; sourceTree = ""; }; @@ -4115,6 +4586,9 @@ 84CA68E026BEAC7C003B9453 /* SpecVersionSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecVersionSubscriptionFactory.swift; sourceTree = ""; }; 84CB224F270360AC0041C8C1 /* RelaychainStakingLocalSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaychainStakingLocalSubscriptionFactory.swift; sourceTree = ""; }; 84CCBFBB2509709500180F4F /* UIBarButtonItem+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem+Style.swift"; sourceTree = ""; }; + 84CD356F252620FB0081BC0B /* CryptoType+Extrinsic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CryptoType+Extrinsic.swift"; sourceTree = ""; }; + 84CD82AD263C1452001A6F01 /* SubstrateProviderSubscriber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateProviderSubscriber.swift; sourceTree = ""; }; + 84CD82B2263C30BC001A6F01 /* SubstrateProviderSubscriptionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateProviderSubscriptionHandler.swift; sourceTree = ""; }; 84CE69DC2565BB6400559427 /* AboutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewModel.swift; sourceTree = ""; }; 84CE69E72566750D00559427 /* ByteLengthProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteLengthProcessor.swift; sourceTree = ""; }; 84CE69EC25667A5600559427 /* ByteLengthEncodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteLengthEncodingTests.swift; sourceTree = ""; }; @@ -4162,16 +4636,21 @@ 84D8F16A24D8263300AF43E9 /* ModalPickerFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalPickerFactory.swift; sourceTree = ""; }; 84D8F16C24D82C7E00AF43E9 /* ModalPickerConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalPickerConfiguration.swift; sourceTree = ""; }; 84D8F16E24D8451F00AF43E9 /* CryptoType+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CryptoType+ViewModel.swift"; sourceTree = ""; }; + 84D8F17024D856D300AF43E9 /* SNAddressType+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SNAddressType+ViewModel.swift"; sourceTree = ""; }; + 84D97EC0251FEE1E00F07405 /* WalletAssetId+Display.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WalletAssetId+Display.swift"; sourceTree = ""; }; 84D97EC72520D32000F07405 /* PolkadotIcon+Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PolkadotIcon+Image.swift"; sourceTree = ""; }; 84D9C41026CD361C004AB2AB /* SpecVersionSubscriptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecVersionSubscriptionTests.swift; sourceTree = ""; }; 84DA3B1124C6D29100B5E27F /* RuntimeVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeVersion.swift; sourceTree = ""; }; 84DA3B1324C6D7C700B5E27F /* RuntimeDispatchInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeDispatchInfo.swift; sourceTree = ""; }; + 84DA3B1824C8200E00B5E27F /* ConnectionItem+Default.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionItem+Default.swift"; sourceTree = ""; }; 84DAC197268D3DD9002D0DF4 /* SNAddressType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SNAddressType.swift; sourceTree = ""; }; 84DB4E1D25E93B1700A6DF41 /* Identity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Identity.swift; sourceTree = ""; }; 84DB4E2225E945E000A6DF41 /* SlashingSpans.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SlashingSpans.swift; sourceTree = ""; }; 84DB4E5B25EA71C100A6DF41 /* StringScaleMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringScaleMapper.swift; sourceTree = ""; }; 84DB4E6B25EA740600A6DF41 /* ConstantCodingPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantCodingPath.swift; sourceTree = ""; }; + 84DB9E8926409E8200F23DD3 /* StakingRedeemLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemLayout.swift; sourceTree = ""; }; 84DB9E8F2640A48E00F23DD3 /* StakingRedeemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewModel.swift; sourceTree = ""; }; + 84DB9E972640A49E00F23DD3 /* StakingRedeemViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewModelFactory.swift; sourceTree = ""; }; 84DBEA41265E80DD00FDF73C /* LearnMoreViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LearnMoreViewModel.swift; sourceTree = ""; }; 84DBEA46265E98C300FDF73C /* AmountInputResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputResult.swift; sourceTree = ""; }; 84DBEA4D265ED5B600FDF73C /* CrowdloanDataValidatorFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanDataValidatorFactory.swift; sourceTree = ""; }; @@ -4227,6 +4706,7 @@ 84F2FEF925E797E8008338D5 /* StorageRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestFactory.swift; sourceTree = ""; }; 84F2FEFE25E7ADE7008338D5 /* ValidatorPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorPrefs.swift; sourceTree = ""; }; 84F2FF0625E7AF8F008338D5 /* EraValidatorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EraValidatorInfo.swift; sourceTree = ""; }; + 84F30E9625FD3C5300039D09 /* EventEmittingStorageSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventEmittingStorageSubscription.swift; sourceTree = ""; }; 84F30E9B25FD3DBC00039D09 /* EmptyHandlingStorageSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyHandlingStorageSubscription.swift; sourceTree = ""; }; 84F30EA025FD3EE700039D09 /* ChildSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChildSubscriptionFactory.swift; sourceTree = ""; }; 84F30EE325FFAC0800039D09 /* StreamableProviderOptions+Substrate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StreamableProviderOptions+Substrate.swift"; sourceTree = ""; }; @@ -4258,6 +4738,7 @@ 84F5105A263AB9F2005D15AE /* NetworkFeeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFeeView.swift; sourceTree = ""; }; 84F5105F263AE530005D15AE /* TitleValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleValueView.swift; sourceTree = ""; }; 84F5107B263C0C11005D15AE /* AnyProviderCleaning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyProviderCleaning.swift; sourceTree = ""; }; + 84F6B6422619A8480038F10D /* SubscanConcreteExtrinsicsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanConcreteExtrinsicsData.swift; sourceTree = ""; }; 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicIndexWrapper.swift; sourceTree = ""; }; 84F6B64F2619E1ED0038F10D /* Int+Operations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Operations.swift"; sourceTree = ""; }; 84F77AA9265EE86B00F54885 /* CrowdloanErrorPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanErrorPresentable.swift; sourceTree = ""; }; @@ -4268,18 +4749,25 @@ 84FA8359265CE5BE00FDF727 /* TitleMultiValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleMultiValueView.swift; sourceTree = ""; }; 84FAB0622542C8D600319F74 /* ContactItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactItem.swift; sourceTree = ""; }; 84FAB0642542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDContactItem+CoreDataDecodable.swift"; sourceTree = ""; }; + 84FAB0662542D06B00319F74 /* WalletContactOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletContactOperationFactory.swift; sourceTree = ""; }; + 84FAB0772543791A00319F74 /* ContactContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactContext.swift; sourceTree = ""; }; 84FACB1625F559F200F32ED4 /* WestendStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WestendStub.swift; sourceTree = ""; }; 84FACB1E25F55EC900F32ED4 /* RuntimeCodingServiceStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeCodingServiceStub.swift; sourceTree = ""; }; 84FACB2C25F562CB00F32ED4 /* westend-metadata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "westend-metadata"; sourceTree = ""; }; 84FACB3725F5630000F32ED4 /* RuntimeHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuntimeHelper.swift; sourceTree = ""; }; 84FACB6525F56D5000F32ED4 /* CalculatorServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorServiceTests.swift; sourceTree = ""; }; 84FACCD825F8C22A00F32ED4 /* BigInt+Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BigInt+Hex.swift"; sourceTree = ""; }; + 84FB1F662526920B00E0242B /* SubscanTransferData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanTransferData.swift; sourceTree = ""; }; + 84FB1F68252694B600E0242B /* HistoryInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryInfo.swift; sourceTree = ""; }; 84FB1F6C2526987D00E0242B /* TransactionHistoryContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryContext.swift; sourceTree = ""; }; + 84FB1F782527065A00E0242B /* HistoryConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryConstants.swift; sourceTree = ""; }; 84FB298B2639ABA500BE0FCD /* YourValidatorList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorList.swift; sourceTree = ""; }; + 84FB29932639ABD700BE0FCD /* YourValidatorList+SelectionStart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectionStart.swift"; sourceTree = ""; }; 84FB29982639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectionConfirm.swift"; sourceTree = ""; }; 84FD3DAE2540BEA000A234E3 /* TransactionHistoryItem+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TransactionHistoryItem+Status.swift"; sourceTree = ""; }; 84FD3DB02540C09800A234E3 /* TransactionHistoryMergeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryMergeManager.swift; sourceTree = ""; }; 84FD3DB42540ED0900A234E3 /* Block.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Block.swift; sourceTree = ""; }; + 84FD3DB62540EF0700A234E3 /* TransactionSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionSubscription.swift; sourceTree = ""; }; 84FD3DBA254104B600A234E3 /* WalletNewTransactionInserted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletNewTransactionInserted.swift; sourceTree = ""; }; 84FFE504261290830054EA63 /* NetworkInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoView.swift; sourceTree = ""; }; 84FFE50C261290BC0054EA63 /* NetworkInfoView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NetworkInfoView.xib; sourceTree = ""; }; @@ -4287,15 +4775,16 @@ 85211D55E2AF0A697FB3EB84 /* AnalyticsRewardDetailsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsPresenter.swift; sourceTree = ""; }; 85F45A5C6145F863760F4409 /* AccountImportWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportWireframe.swift; sourceTree = ""; }; 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewLayout.swift; sourceTree = ""; }; - 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; sourceTree = ""; }; + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferInteractor.swift; sourceTree = ""; }; 86F7A369E31DCB9ABD556EE9 /* CrowdloanListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListPresenter.swift; sourceTree = ""; }; 87F9D215513308538FA3FDC4 /* ContactsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsTests.swift; sourceTree = ""; }; + 8821119C96944A0E3526E93A /* StakingRedeemViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewFactory.swift; sourceTree = ""; }; 882D47A501D9D6CCE7B99691 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmProtocols.swift; sourceTree = ""; }; 885A9E2D3619FEFC5ED0C093 /* WalletChainAccountDashboardWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardWireframe.swift; sourceTree = ""; }; 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartWireframe.swift; sourceTree = ""; }; 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListTests.swift; sourceTree = ""; }; 894987C6E4C372A0E0E72E86 /* WalletChainAccountDashboardViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewController.swift; sourceTree = ""; }; - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmPresenter.swift; sourceTree = ""; }; + 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.dev.xcconfig"; sourceTree = ""; }; 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateTests.swift; sourceTree = ""; }; 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsPresenter.swift; sourceTree = ""; }; 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsProtocols.swift; sourceTree = ""; }; @@ -4317,10 +4806,9 @@ 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsTests.swift; sourceTree = ""; }; 93B26AA9CB558F02F69FF59B /* ExportMnemonicConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicConfirmWireframe.swift; sourceTree = ""; }; 9403C5F9C88A4690C62A204B /* StakingRewardDestConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDestConfirmTests.swift; sourceTree = ""; }; - 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionInteractor.swift; sourceTree = ""; }; + 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; sourceTree = ""; }; 953E21C32079A8051A0EE964 /* ReferralCrowdloanProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanProtocols.swift; sourceTree = ""; }; 955A6977CCE5861E4F5DCFBB /* AnalyticsValidatorsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsViewController.swift; sourceTree = ""; }; - 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionAssembly.swift; sourceTree = ""; }; 961642321C9AD1885325A3D7 /* WalletMainContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerViewController.swift; sourceTree = ""; }; 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionViewFactory.swift; sourceTree = ""; }; 96950EE6AE1BA8F9130A4390 /* WalletOptionViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionViewLayout.swift; sourceTree = ""; }; @@ -4328,42 +4816,54 @@ 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListWireframe.swift; sourceTree = ""; }; 96F09665083031502F9693F8 /* StakingMainWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainWireframe.swift; sourceTree = ""; }; 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmViewFactory.swift; sourceTree = ""; }; + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewController.swift; sourceTree = ""; }; 97E2A7A3731FAC0C965A898A /* StakingPoolInfoViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewLayout.swift; sourceTree = ""; }; 99198B2B26321E4004840029 /* PolkaswapSwapConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewController.swift; sourceTree = ""; }; + 9981A1A70BCCB1B1644A7CE0 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountProtocols.swift; sourceTree = ""; }; - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmWireframe.swift; sourceTree = ""; }; 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentProtocols.swift; sourceTree = ""; }; 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountTests.swift; sourceTree = ""; }; 9B5626189788682A84D4E9D7 /* SelectValidatorsConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPresenter.swift; sourceTree = ""; }; 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyInteractor.swift; sourceTree = ""; }; + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferAssembly.swift; sourceTree = ""; }; 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupTests.swift; sourceTree = ""; }; 9C05A688EA7379572BBCE545 /* SelectMarketRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketRouter.swift; sourceTree = ""; }; + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsAssembly.swift; sourceTree = ""; }; + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferTests.swift; sourceTree = ""; }; + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewController.swift; sourceTree = ""; }; + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserRouter.swift; sourceTree = ""; }; 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewFactory.swift; sourceTree = ""; }; A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewController.swift; sourceTree = ""; }; A31780E84948D7FE632ECB02 /* YourValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListProtocols.swift; sourceTree = ""; }; A3BACB7E24BC87F9218DBBC4 /* StakingPayoutConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewController.swift; sourceTree = ""; }; + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsAssembly.swift; sourceTree = ""; }; A427660DDA1D882327F8FF5C /* AssetNetworksTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksTests.swift; sourceTree = ""; }; A4900562AFFD45F29F4C5DEF /* LiquidityPoolDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewLayout.swift; sourceTree = ""; }; A6543901A1EE819323DCD95D /* WalletChainAccountDashboardInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardInteractor.swift; sourceTree = ""; }; A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewProtocols.swift; sourceTree = ""; }; A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsProtocols.swift; sourceTree = ""; }; - A77DF1CA9610844CF63C4BBC /* Pods-fearlessAll-fearless.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.debug.xcconfig"; sourceTree = ""; }; + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsInteractor.swift; sourceTree = ""; }; A7AD1285797131E836CD994B /* AssetSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionWireframe.swift; sourceTree = ""; }; A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewFactory.swift; sourceTree = ""; }; A84638893DC99974E098719E /* StakingUnbondConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmWireframe.swift; sourceTree = ""; }; A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedInteractor.swift; sourceTree = ""; }; + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferAssembly.swift; sourceTree = ""; }; A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksAssembly.swift; sourceTree = ""; }; AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPresenter.swift; sourceTree = ""; }; AB2349A5057312BDB6C65804 /* StakingAmountViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingAmountViewController.xib; sourceTree = ""; }; AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsTests.swift; sourceTree = ""; }; + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserInteractor.swift; sourceTree = ""; }; ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListTests.swift; sourceTree = ""; }; AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsInteractor.swift; sourceTree = ""; }; AC404A4071AF571FAC4C1994 /* AccountExportPasswordProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordProtocols.swift; sourceTree = ""; }; ACAEDA02F409FE23749A1551 /* AccountCreateWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateWireframe.swift; sourceTree = ""; }; AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketProtocols.swift; sourceTree = ""; }; + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferProtocols.swift; sourceTree = ""; }; ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreatePresenter.swift; sourceTree = ""; }; ADD348E749EC6A7E3BB069DE /* StakingUnbondConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmProtocols.swift; sourceTree = ""; }; + AE1000F126679886004753B7 /* ChangeTargetsRecommendationWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTargetsRecommendationWireframe.swift; sourceTree = ""; }; + AE1000F326679946004753B7 /* InitiatedBondingRecommendationWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitiatedBondingRecommendationWireframe.swift; sourceTree = ""; }; AE20602B2636EA5800357578 /* MoonPayKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoonPayKeys.swift; sourceTree = ""; }; AE2060AF2637068700357578 /* CIKeys.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = CIKeys.stencil; sourceTree = ""; }; AE2C101D267A6271004AA8E9 /* CustomValidatorListComposerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorListComposerTests.swift; sourceTree = ""; }; @@ -4425,9 +4925,15 @@ AEA0C8A9267B6B4300F9666F /* SelectedValidatorListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewController.swift; sourceTree = ""; }; AEA0C8AB267B6B5200F9666F /* SelectedValidatorListViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewFactory.swift; sourceTree = ""; }; AEA0C8AD267B818900F9666F /* SelectedValidatorListViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewLayout.swift; sourceTree = ""; }; + AEA0C8AF267B82BA00F9666F /* SelectedValidatorListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListHeaderView.swift; sourceTree = ""; }; AEA0C8B3267BA40C00F9666F /* SelectedValidatorListViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewModelFactory.swift; sourceTree = ""; }; AEA0C8B5267BABCC00F9666F /* SelectedValidatorListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewModel.swift; sourceTree = ""; }; AEA0C8B7267C905500F9666F /* SelectedValidatorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorCell.swift; sourceTree = ""; }; + AEA0C8B9268113F800F9666F /* YourValidatorList+RecommendedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+RecommendedList.swift"; sourceTree = ""; }; + AEA0C8BB2681140700F9666F /* YourValidatorList+CustomList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+CustomList.swift"; sourceTree = ""; }; + AEA0C8BD2681141700F9666F /* YourValidatorList+SelectedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectedList.swift"; sourceTree = ""; }; + AEA0C8C5268131C500F9666F /* InitiatedBondingSelectedValidatorsListWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitiatedBondingSelectedValidatorsListWireframe.swift; sourceTree = ""; }; + AEA0C8C7268131DD00F9666F /* ChangeTargetsSelectedValidatorsListWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTargetsSelectedValidatorsListWireframe.swift; sourceTree = ""; }; AEA0C8CA26813AE400F9666F /* SelectedValidatorListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListTests.swift; sourceTree = ""; }; AEA2C1B32681E99D0069492E /* ValidatorSearchProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchProtocols.swift; sourceTree = ""; }; AEA2C1B52681E9B20069492E /* ValidatorSearchViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchViewFactory.swift; sourceTree = ""; }; @@ -4438,6 +4944,7 @@ AEA2C1BF2681E9EC0069492E /* ValidatorSearchViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchViewLayout.swift; sourceTree = ""; }; AEAC68F426E9F93B00346599 /* CoingeckoDefinitions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoDefinitions.swift; sourceTree = ""; }; AEAC68F626E9FB8400346599 /* CoingeckoOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoOperationFactory.swift; sourceTree = ""; }; + AEAC68FD26EA3C2A00346599 /* CoingeckoPriceSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoPriceSource.swift; sourceTree = ""; }; AEAC690326EB891900346599 /* Logger+FearlessUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logger+FearlessUtils.swift"; sourceTree = ""; }; AEACD5F8265E94AB00A09892 /* StatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusViewModel.swift; sourceTree = ""; }; AEB9978F26119E4C005C60A5 /* StoriesViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoriesViewModelFactory.swift; sourceTree = ""; }; @@ -4481,6 +4988,8 @@ AEFC6D6E2600D7CD000BD310 /* NetworkInfoViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoViewModelFactory.swift; sourceTree = ""; }; AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartInteractor.swift; sourceTree = ""; }; AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmProtocols.swift; sourceTree = ""; }; + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListRouter.swift; sourceTree = ""; }; + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListAssembly.swift; sourceTree = ""; }; AF4DB8C42D41C3A14A379122 /* CreateContactProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactProtocols.swift; sourceTree = ""; }; AFC9C09ABBCEB6E581134E84 /* MainNftContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerViewController.swift; sourceTree = ""; }; AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionPresenter.swift; sourceTree = ""; }; @@ -4491,24 +5000,28 @@ B3459F610D6E5C782D8695A9 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewLayout.swift; sourceTree = ""; }; B399E7CA0A03A06EFDF1B126 /* PolkaswapTransaktionSettingsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsPresenter.swift; sourceTree = ""; }; B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsInteractor.swift; sourceTree = ""; }; + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListRouter.swift; sourceTree = ""; }; B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = NetworkInfoViewController.xib; sourceTree = ""; }; B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerAssembly.swift; sourceTree = ""; }; B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateInteractor.swift; sourceTree = ""; }; B90CEC70F101AA25A4C00021 /* YourValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewController.swift; sourceTree = ""; }; B93A1BA7DFEE1D7728B84949 /* AccountExportPasswordTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordTests.swift; sourceTree = ""; }; + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferRouter.swift; sourceTree = ""; }; + BAB2478DE3AF0885A3ED7ED8 /* StakingRedeemPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemPresenter.swift; sourceTree = ""; }; BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsWireframe.swift; sourceTree = ""; }; BB719C069A26244D194C4374 /* WalletChainAccountDashboardViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewFactory.swift; sourceTree = ""; }; BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketInteractor.swift; sourceTree = ""; }; - BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresenter.swift; sourceTree = ""; }; BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsViewLayout.swift; sourceTree = ""; }; + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferRouter.swift; sourceTree = ""; }; + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListProtocols.swift; sourceTree = ""; }; BE7D061906CF67230BF5393A /* NftSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmTests.swift; sourceTree = ""; }; C0EE58376751B23A9CEAEE1A /* StakingPoolCreateConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmRouter.swift; sourceTree = ""; }; C16219B3D0D2A658185C0850 /* MainNftContainerInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerInteractor.swift; sourceTree = ""; }; + C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; sourceTree = ""; }; C191A3875F3255B72E01FA92 /* CrowdloanListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListWireframe.swift; sourceTree = ""; }; C23EA8830B337C4F8142A395 /* AddCustomNodeTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeTests.swift; sourceTree = ""; }; C2956D0C69019DDCDAB2EB34 /* CustomValidatorListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewLayout.swift; sourceTree = ""; }; C316BE4F5A0342D379F783E8 /* StartSelectValidatorsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StartSelectValidatorsTests.swift; sourceTree = ""; }; - C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearlessIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C503100478AB56E903598A78 /* ReferralCrowdloanPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanPresenter.swift; sourceTree = ""; }; C52B689ECDB43EB0FEE95553 /* LiquidityPoolRemoveLiquidityTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityTests.swift; sourceTree = ""; }; C53DFFFB3B5B48DB51692EFA /* LiquidityPoolDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInteractor.swift; sourceTree = ""; }; @@ -4518,10 +5031,9 @@ C600C4D42802B87100111316 /* UsernameSetupViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewLayout.swift; sourceTree = ""; }; C600C4D628053DF500111316 /* UsernameSetupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewController.swift; sourceTree = ""; }; C600C4D828054A1B00111316 /* AccountCreateFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreateFlow.swift; sourceTree = ""; }; + C603E81028583C2A00007B72 /* StakingMainRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingMainRelaychainStrategy.swift; sourceTree = ""; }; C61166682B3BFA9000F483C4 /* NftHeaderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftHeaderCell.swift; sourceTree = ""; }; C611666B2B3C03B800F483C4 /* NftHeaderCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftHeaderCellViewModel.swift; sourceTree = ""; }; - C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; - C6182B4B2C6474F30089558D /* PricesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PricesService.swift; sourceTree = ""; }; C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityAssembly.swift; sourceTree = ""; }; C62522E202A1C5EE60D25122 /* NftSendPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendPresenter.swift; sourceTree = ""; }; C6264C282799A56E00FCA0DB /* WalletDetailsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletDetailsTableCell.swift; sourceTree = ""; }; @@ -4564,7 +5076,6 @@ C640415F28F5191100845780 /* CreateContactViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateContactViewModel.swift; sourceTree = ""; }; C640416128F51F9900845780 /* CreateContactViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateContactViewModelFactory.swift; sourceTree = ""; }; C648FFC728DC43A70072951B /* EmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyView.swift; sourceTree = ""; }; - C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceDataMapper.swift; sourceTree = ""; }; C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAssetsFetching.swift; sourceTree = ""; }; C6584E342982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryDependencyContainer.swift; sourceTree = ""; }; C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountInfoFetching.swift; sourceTree = ""; }; @@ -4621,29 +5132,6 @@ C6E992712B999A8B00806910 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = id; path = id.lproj/Localizable.stringsdict; sourceTree = ""; }; C6F8BBBA9EABA266B288333F /* AnalyticsValidatorsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsViewFactory.swift; sourceTree = ""; }; C6FB932D27C9334100563E61 /* AvailableExportOptionsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableExportOptionsProvider.swift; sourceTree = ""; }; - C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetModelMapper.swift; sourceTree = ""; }; - C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetRepositoryFactory.swift; sourceTree = ""; }; - C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceDataHelper.swift; sourceTree = ""; }; - C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PricesUpdated.swift; sourceTree = ""; }; - C6FBA6FC2C743D21008B18D9 /* OKXDexAggregatorService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAggregatorService.swift; sourceTree = ""; }; - C6FBA6FE2C743D45008B18D9 /* OKXDexRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRequestSigner.swift; sourceTree = ""; }; - C6FBA7002C743D51008B18D9 /* OKXDexSwapRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSwapRequestParameters.swift; sourceTree = ""; }; - C6FBA7012C743D51008B18D9 /* OKXDexAllTokensRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAllTokensRequestParameters.swift; sourceTree = ""; }; - C6FBA7022C743D51008B18D9 /* OKXDexApproveRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexApproveRequestParameters.swift; sourceTree = ""; }; - C6FBA7032C743D52008B18D9 /* OKXDexLiquiditySourceRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexLiquiditySourceRequestParameters.swift; sourceTree = ""; }; - C6FBA7042C743D52008B18D9 /* OKXDexQuotesRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuotesRequestParameters.swift; sourceTree = ""; }; - C6FBA70A2C743D5D008B18D9 /* OKXResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXResponse.swift; sourceTree = ""; }; - C6FBA70B2C743D5D008B18D9 /* OKXToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXToken.swift; sourceTree = ""; }; - C6FBA70C2C743D5D008B18D9 /* OKXSupportedChain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSupportedChain.swift; sourceTree = ""; }; - C6FBA70D2C743D5D008B18D9 /* OKXDexQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuote.swift; sourceTree = ""; }; - C6FBA70E2C743D5E008B18D9 /* OKXSwap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwap.swift; sourceTree = ""; }; - C6FBA70F2C743D5E008B18D9 /* OKXDexProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexProtocol.swift; sourceTree = ""; }; - C6FBA7102C743D5E008B18D9 /* OKXDexRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRouter.swift; sourceTree = ""; }; - C6FBA7112C743D5E008B18D9 /* OKXDexSubrouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSubrouter.swift; sourceTree = ""; }; - C6FBA7122C743D5E008B18D9 /* OKXApproveTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXApproveTransaction.swift; sourceTree = ""; }; - C6FBA7132C743D5F008B18D9 /* OKXLiquiditySource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXLiquiditySource.swift; sourceTree = ""; }; - C6FBA7142C743D5F008B18D9 /* OKXQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXQuote.swift; sourceTree = ""; }; - C6FBA7152C743D5F008B18D9 /* OKXSwapTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwapTransaction.swift; sourceTree = ""; }; C705CA1083C1EE58426D90CD /* AllDoneInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneInteractor.swift; sourceTree = ""; }; C7416F3AFA5F4D1130B1C410 /* WalletTransactionDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsWireframe.swift; sourceTree = ""; }; C74A2166B054240BD5D925B6 /* UsernameSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewFactory.swift; sourceTree = ""; }; @@ -4657,6 +5145,7 @@ C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationWireframe.swift; sourceTree = ""; }; CA7427142A4B905B5DB15498 /* NftDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewController.swift; sourceTree = ""; }; CA8ECADDA809DE7932B7A17C /* StakingPoolCreateConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmProtocols.swift; sourceTree = ""; }; + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListPresenter.swift; sourceTree = ""; }; CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewController.swift; sourceTree = ""; }; CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupWireframe.swift; sourceTree = ""; }; CC516FE0E7682210D0F07FB2 /* StakingPoolInfoAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoAssembly.swift; sourceTree = ""; }; @@ -4665,11 +5154,10 @@ CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupFlow.swift; sourceTree = ""; }; CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewFactory.swift; sourceTree = ""; }; CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsProtocols.swift; sourceTree = ""; }; - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewController.swift; sourceTree = ""; }; CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsProtocols.swift; sourceTree = ""; }; D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeProtocols.swift; sourceTree = ""; }; D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupInteractor.swift; sourceTree = ""; }; - D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionProtocols.swift; sourceTree = ""; }; + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsPresenter.swift; sourceTree = ""; }; D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountViewFactory.swift; sourceTree = ""; }; D430E8B808864B281A62AB43 /* LiquidityPoolSupplyConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewController.swift; sourceTree = ""; }; D45B7031E0809CED062C83F8 /* StakingUnbondConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmPresenter.swift; sourceTree = ""; }; @@ -4687,10 +5175,12 @@ D7FE5F01FC9364788A91EFA5 /* SelectValidatorsConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmProtocols.swift; sourceTree = ""; }; D80247ADAAB061D1A10856B2 /* WalletTransactionDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewLayout.swift; sourceTree = ""; }; D852BF894D6E06EB9A92BC71 /* CrowdloanListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewController.swift; sourceTree = ""; }; + D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.release.xcconfig"; sourceTree = ""; }; D9A16451B21451996CAA31F8 /* CustomValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListTests.swift; sourceTree = ""; }; DA8D61B74FE9C5199FD0AEBC /* NetworkInfoInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoInteractor.swift; sourceTree = ""; }; DB255DD7988E0E0E9CA35DA9 /* SwapTransactionDetailViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailViewLayout.swift; sourceTree = ""; }; DB76FEC075A6FE1D246BA5DD /* StakingAmountViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountViewController.swift; sourceTree = ""; }; + DB7F5F9B54BE4234C5682BDE /* StakingRedeemViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewController.swift; sourceTree = ""; }; DBA49A762B2FBB66FD6A55FC /* ControllerAccountConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationProtocols.swift; sourceTree = ""; }; DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailProtocols.swift; sourceTree = ""; }; DC50F2FF6E8EBC00B56CB86D /* PolkaswapSwapConfirmationRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationRouter.swift; sourceTree = ""; }; @@ -4703,7 +5193,6 @@ E11575D8B4F64C2E805372A5 /* AccountExportPasswordViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordViewFactory.swift; sourceTree = ""; }; E1E60EF37AC0A7646ED8FE64 /* AccountImportViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportViewFactory.swift; sourceTree = ""; }; E32C2DC4CC106A3509BE651D /* ExportMnemonicTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicTests.swift; sourceTree = ""; }; - E357E95FDDBF8F3938402145 /* Pods-fearlessAll-fearless.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.release.xcconfig"; sourceTree = ""; }; E4E78D69E8EBC3EB4D01F8EF /* CrowdloanListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListInteractor.swift; sourceTree = ""; }; E57E3EA5C070C64000ABCDC0 /* StakingRewardPayoutsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsWireframe.swift; sourceTree = ""; }; E587507F8CDA7F84A1A4EA95 /* WarningAlertTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertTests.swift; sourceTree = ""; }; @@ -4713,14 +5202,13 @@ E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewFactory.swift; sourceTree = ""; }; E8AAC6AAD532FC7E63765D85 /* PolkaswapAdjustmentViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewController.swift; sourceTree = ""; }; E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateViewFactory.swift; sourceTree = ""; }; + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewLayout.swift; sourceTree = ""; }; E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksViewController.swift; sourceTree = ""; }; - EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; sourceTree = ""; }; EB8605FD90D8C3553A9897B4 /* AccountImportPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportPresenter.swift; sourceTree = ""; }; EC012CF1C792B34BD5FF45A2 /* NftDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsProtocols.swift; sourceTree = ""; }; EC863A9CE29C63B740C6E4D9 /* LiquidityPoolsOverviewAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewAssembly.swift; sourceTree = ""; }; ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersViewFactory.swift; sourceTree = ""; }; ECE2059F621D024F85EFBFD0 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmAssembly.swift; sourceTree = ""; }; - ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.debug.xcconfig"; sourceTree = ""; }; EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountWireframe.swift; sourceTree = ""; }; EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionProtocols.swift; sourceTree = ""; }; EDED6FBACD36C077521CB24D /* FiltersViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersViewController.swift; sourceTree = ""; }; @@ -4728,9 +5216,9 @@ EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartProtocols.swift; sourceTree = ""; }; EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicProtocols.swift; sourceTree = ""; }; EF65551AE1E858C563054E87 /* ContactsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsAssembly.swift; sourceTree = ""; }; - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmProtocols.swift; sourceTree = ""; }; EFB1161D25AF1FC90AA23B7A /* WalletTransactionHistoryViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewLayout.swift; sourceTree = ""; }; EFB278373745C20822442686 /* ExportSeedPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedPresenter.swift; sourceTree = ""; }; + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserProtocols.swift; sourceTree = ""; }; F02C3AF74DE2F2CDBD165803 /* NetworkIssuesNotificationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationProtocols.swift; sourceTree = ""; }; F02DBCA4A63A5E52E3739374 /* ControllerAccountConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewFactory.swift; sourceTree = ""; }; F12B2D844B474F810C807451 /* AccountManagementTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountManagementTests.swift; sourceTree = ""; }; @@ -4738,9 +5226,11 @@ F1E3F963A56923FD036280BD /* WalletOptionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionAssembly.swift; sourceTree = ""; }; F23E38DCBC74C528D7839B76 /* CrowdloanContributionSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupInteractor.swift; sourceTree = ""; }; F28EDDF9277242505FDDECA1 /* CustomValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListProtocols.swift; sourceTree = ""; }; + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewLayout.swift; sourceTree = ""; }; F312CA3A7087424A540614DD /* StakingPoolCreateAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateAssembly.swift; sourceTree = ""; }; F329740EC1B8CC94D02A8ABD /* SwapTransactionDetailRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailRouter.swift; sourceTree = ""; }; F3EB4CF4E3E4B486D16BDE5C /* SwapTransactionDetailInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailInteractor.swift; sourceTree = ""; }; + F400A7C1260CE1670061D576 /* StakingRewardStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardStatus.swift; sourceTree = ""; }; F406B0E526299E34004FDCCC /* ErrorStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorStateView.swift; sourceTree = ""; }; F408E9B526B807200043CFE0 /* AnalyticsRewardsHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardsHeaderView.swift; sourceTree = ""; }; F408E9BD26B80FD30043CFE0 /* AnalyticsSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsSectionHeader.swift; sourceTree = ""; }; @@ -4807,6 +5297,7 @@ F462B363260C88050005AB01 /* UITableView+Reuse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+Reuse.swift"; sourceTree = ""; }; F469114A26392DD500E04D4D /* StakingBondMoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBondMoreTests.swift; sourceTree = ""; }; F471897526C297AA006487AD /* AnalyticsValidatorsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsPage.swift; sourceTree = ""; }; + F471897A26C29A78006487AD /* AnalyticsValidatorsPageSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsPageSelector.swift; sourceTree = ""; }; F474D387260CBEE600013699 /* StakingRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewLayout.swift; sourceTree = ""; }; F477CD25262EAD30004DF739 /* StakingPayoutViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPayoutViewModelFactory.swift; sourceTree = ""; }; F477CD39262EE0E7004DF739 /* StakingRewardDetailsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewModelFactory.swift; sourceTree = ""; }; @@ -4863,6 +5354,7 @@ F4DCAE4626207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutRewardsServiceProtocol.swift; sourceTree = ""; }; F4DCAE4E2620819000CCA6BF /* PayoutRewardsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutRewardsService.swift; sourceTree = ""; }; F4E117B8264BAA81006F03B0 /* ControllerAccountConfirmationVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationVM.swift; sourceTree = ""; }; + F4E339622614A03F0028B6B1 /* ExtrinsicsInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicsInfo.swift; sourceTree = ""; }; F4EAC7962642E0D800FBDDC3 /* ControllerAccountViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerAccountViewModelFactory.swift; sourceTree = ""; }; F4EF24C726BA713300F28B4E /* AnalyticsStakeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsStakeHeaderView.swift; sourceTree = ""; }; F4EF24CF26BA7A4300F28B4E /* AnalyticsViewModelFactoryBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsViewModelFactoryBase.swift; sourceTree = ""; }; @@ -4881,10 +5373,12 @@ F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewFactory.swift; sourceTree = ""; }; F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendProtocols.swift; sourceTree = ""; }; F61D8973ADEB461DE2AD3E13 /* RecommendedValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListViewController.swift; sourceTree = ""; }; + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewLayout.swift; sourceTree = ""; }; F74547DAC8B04C2A1A7FD625 /* StakingRedeemFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemFlow.swift; sourceTree = ""; }; F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountProtocols.swift; sourceTree = ""; }; F9416E68AE4D5613E9434226 /* StakingPoolCreateConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewController.swift; sourceTree = ""; }; F9B5FD28F2B9A0B0D8ED3607 /* PolkaswapSwapConfirmationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationInteractor.swift; sourceTree = ""; }; + FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureToggleConfigSyncComplete.swift; sourceTree = ""; }; FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartFlow.swift; sourceTree = ""; }; FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartParachainStrategy.swift; sourceTree = ""; }; FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartRelaychainStrategy.swift; sourceTree = ""; }; @@ -4893,7 +5387,6 @@ FA004898282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartParachainViewModelFactory.swift; sourceTree = ""; }; FA00489A282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartRelaychainViewModelFactory.swift; sourceTree = ""; }; FA0066E82935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPoolStrategy.swift; sourceTree = ""; }; - FA01B2BA2C6213740078A35B /* InfoTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoTitleView.swift; sourceTree = ""; }; FA054A992BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListPresenter.swift; sourceTree = ""; }; FA054A9B2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; FA072C13277AE2FE00731718 /* QRCaptureService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCaptureService.swift; sourceTree = ""; }; @@ -4932,6 +5425,7 @@ FA17B4D327E9CF2C006E0735 /* UtilityConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UtilityConstants.swift; sourceTree = ""; }; FA1A023B274F51A900DA07CB /* ChainAccountBalanceTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountBalanceTableCell.swift; sourceTree = ""; }; FA1A023D274F55D900DA07CB /* HorizontalKeyValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HorizontalKeyValueView.swift; sourceTree = ""; }; + FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinbasePurchaseProvider.swift; sourceTree = ""; }; FA1D01EE2BBE713D005B7071 /* LiquidityPoolListCellModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCellModel.swift; sourceTree = ""; }; FA1D01EF2BBE713D005B7071 /* LiquidityPoolListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListViewModel.swift; sourceTree = ""; }; FA1D01F02BBE713D005B7071 /* LiquidityPoolsListViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewLayout.swift; sourceTree = ""; }; @@ -4950,18 +5444,21 @@ FA2222902BD239500031DE04 /* SoraSubqueryPriceResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryPriceResponse.swift; sourceTree = ""; }; FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonLabel.swift; sourceTree = ""; }; FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonLoadableView.swift; sourceTree = ""; }; - FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisJSONDecoder.swift; sourceTree = ""; }; FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+DoubleValue.swift"; sourceTree = ""; }; FA256982274CE5A400875A53 /* BalanceLockType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLockType.swift; sourceTree = ""; }; FA256983274CE5A500875A53 /* BalanceLocks+Sort.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BalanceLocks+Sort.swift"; sourceTree = ""; }; + FA256986274CE5B700875A53 /* SHA256.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SHA256.swift; sourceTree = ""; }; FA256988274CE5DC00875A53 /* ViewController+Wrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+Wrapper.swift"; sourceTree = ""; }; FA25698A274CE61000875A53 /* MultiSignature+CryptoType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MultiSignature+CryptoType.swift"; sourceTree = ""; }; FA25698D274CE65100875A53 /* HTTPRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequest.swift; sourceTree = ""; }; + FA25698E274CE65100875A53 /* DashcaseJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DashcaseJSONEncoder.swift; sourceTree = ""; }; FA25698F274CE65100875A53 /* AnyCodingKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnyCodingKey.swift; sourceTree = ""; }; FA256991274CE65100875A53 /* HTTPRequestBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequestBuilder.swift; sourceTree = ""; }; FA256992274CE65100875A53 /* HTTPHeadersBuilderProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPHeadersBuilderProtocol.swift; sourceTree = ""; }; FA256993274CE65100875A53 /* HTTPRequestBuilderProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequestBuilderProtocol.swift; sourceTree = ""; }; + FA2569A0274CE66100875A53 /* SubscanMemoData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscanMemoData.swift; sourceTree = ""; }; FA2569A3274CE6AD00875A53 /* polkadot-v14-runtime */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "polkadot-v14-runtime"; sourceTree = ""; }; + FA2569A4274CE6AD00875A53 /* BalanceLockSubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLockSubscription.swift; sourceTree = ""; }; FA2569B1274CE71700875A53 /* RemarkCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemarkCall.swift; sourceTree = ""; }; FA2569B3274CE71D00875A53 /* BalanceLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLock.swift; sourceTree = ""; }; FA2569B5274CE73F00875A53 /* NetworkFeeFooterView+Protocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NetworkFeeFooterView+Protocol.swift"; sourceTree = ""; }; @@ -4971,12 +5468,32 @@ FA2569B9274CE74000875A53 /* AttentionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttentionView.swift; sourceTree = ""; }; FA2569BB274CE74000875A53 /* BottomSheetInfoBalanceCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BottomSheetInfoBalanceCell.swift; sourceTree = ""; }; FA2569BC274CE74000875A53 /* BottomSheetInfoTableCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BottomSheetInfoTableCell.swift; sourceTree = ""; }; + FA256A05274CE7D500875A53 /* AstarBonusService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AstarBonusService.swift; sourceTree = ""; }; + FA256A09274CE7D500875A53 /* MoonbeamMakeSignatureInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureInfo.swift; sourceTree = ""; }; + FA256A0A274CE7D500875A53 /* MoonbeamAgreeRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkInfo.swift; sourceTree = ""; }; + FA256A0B274CE7D500875A53 /* MoonbeamGuidinfoInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamGuidinfoInfo.swift; sourceTree = ""; }; + FA256A0C274CE7D500875A53 /* MoonbeamAgreeRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkData.swift; sourceTree = ""; }; + FA256A0D274CE7D500875A53 /* MoonbeamMakeSignatureData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureData.swift; sourceTree = ""; }; + FA256A0E274CE7D500875A53 /* MoonbeamCheckRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkData.swift; sourceTree = ""; }; + FA256A0F274CE7D500875A53 /* MoonbeamVerifyRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkData.swift; sourceTree = ""; }; + FA256A10274CE7D500875A53 /* MoonbeamVerifyRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkInfo.swift; sourceTree = ""; }; + FA256A11274CE7D500875A53 /* MoonbeamCheckRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkInfo.swift; sourceTree = ""; }; + FA256A13274CE7D500875A53 /* MoonbeamHTTPHeadersBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamHTTPHeadersBuilder.swift; sourceTree = ""; }; + FA256A15274CE7D500875A53 /* MoonbeamMakeSignatureRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureRequest.swift; sourceTree = ""; }; + FA256A16274CE7D500875A53 /* MoonbeamVerifyRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkRequest.swift; sourceTree = ""; }; + FA256A17274CE7D500875A53 /* MoonbeamAgreeRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkRequest.swift; sourceTree = ""; }; + FA256A18274CE7D500875A53 /* MoonbeamCheckRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkRequest.swift; sourceTree = ""; }; + FA256A19274CE7D500875A53 /* MoonbeamGuidInfoRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamGuidInfoRequest.swift; sourceTree = ""; }; + FA256A1A274CE7D500875A53 /* MoonbeamHealthRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamHealthRequest.swift; sourceTree = ""; }; + FA256A1B274CE7D500875A53 /* MoonbeamJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamJSONDecoder.swift; sourceTree = ""; }; + FA256A1C274CE7D500875A53 /* MoonbeamJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamJSONEncoder.swift; sourceTree = ""; }; + FA256A1D274CE7D500875A53 /* CrowdloanAgreementServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAgreementServiceProtocol.swift; sourceTree = ""; }; FA256A1E274CE7D500875A53 /* CrowdloanBonusServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanBonusServiceProtocol.swift; sourceTree = ""; }; + FA256A1F274CE7D500875A53 /* CrowdloanAgreementServiceError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAgreementServiceError.swift; sourceTree = ""; }; + FA256A38274CE80100875A53 /* CrowdloanAddMemoParam.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAddMemoParam.swift; sourceTree = ""; }; FA256A43274CE8BC00875A53 /* StoriesCollectionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoriesCollectionItem.swift; sourceTree = ""; }; FA256A44274CE8BD00875A53 /* StoriesCollectionItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StoriesCollectionItem.xib; sourceTree = ""; }; FA256A47274CE8C200875A53 /* StakingMainInteractor+Subscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StakingMainInteractor+Subscription.swift"; sourceTree = ""; }; - FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModelFactory.swift; sourceTree = ""; }; - FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModel.swift; sourceTree = ""; }; FA286AF42A3043C3008BD527 /* ConvenienceError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvenienceError.swift; sourceTree = ""; }; FA286AF72A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossChainConfirmationViewLayout.swift; sourceTree = ""; }; FA286AF82A3043DB008BD527 /* CrossChainConfirmationRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossChainConfirmationRouter.swift; sourceTree = ""; }; @@ -5067,7 +5584,6 @@ FA2FC82228B380C500CC0A42 /* StakingPool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingPool.swift; sourceTree = ""; }; FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RuntimeCall+CallCodingPath.swift"; sourceTree = ""; }; FA2FC82A28B3814000CC0A42 /* DetailsTriangularedViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailsTriangularedViewModel.swift; sourceTree = ""; }; - FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageKeyDataExtractor.swift; sourceTree = ""; }; FA2FC84028B3879900CC0A42 /* InsettedLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsettedLabel.swift; sourceTree = ""; }; FA2FC84228B3886900CC0A42 /* StakingRewardCalculatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingRewardCalculatorView.swift; sourceTree = ""; }; FA2FC85428B389EB00CC0A42 /* StakingChainSelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingChainSelectionViewController.swift; sourceTree = ""; }; @@ -5078,6 +5594,7 @@ FA3067212B621540006A0BA5 /* LockProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockProtocol.swift; sourceTree = ""; }; FA30674A2B625DC0006A0BA5 /* BalancesLocksRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalancesLocksRequest.swift; sourceTree = ""; }; FA30674F2B627D23006A0BA5 /* TokensLocksRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokensLocksRequest.swift; sourceTree = ""; }; + FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v9.xcdatamodel; sourceTree = ""; }; FA30D4EE28BF32EA00548C1E /* SortPickerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortPickerTableViewCell.swift; sourceTree = ""; }; FA30D4F028BF32F500548C1E /* SortPickerTableViewCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortPickerTableViewCellModel.swift; sourceTree = ""; }; FA30D4F328BF67DF00548C1E /* StakingPoolInfoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewModel.swift; sourceTree = ""; }; @@ -5167,31 +5684,18 @@ FA38C9A0275FD6B9005C5577 /* BundleImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleImageViewModel.swift; sourceTree = ""; }; FA38C9C02761E68B005C5577 /* AccountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModel.swift; sourceTree = ""; }; FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModelFactory.swift; sourceTree = ""; }; - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewState.swift; sourceTree = ""; }; FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModel.swift; sourceTree = ""; }; FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModelFactory.swift; sourceTree = ""; }; - FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamInfoFetcher.swift; sourceTree = ""; }; FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountFlow.swift; sourceTree = ""; }; FA3F5B66281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainStrategy.swift; sourceTree = ""; }; FA3F5B68281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountParachainStrategy.swift; sourceTree = ""; }; FA3F5B6A281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountParachainViewModelState.swift; sourceTree = ""; }; FA402F2E27C7C646008CF986 /* ExportAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportAction.swift; sourceTree = ""; }; - FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FireHistoryOperationFactory.swift; sourceTree = ""; }; - FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = 5ireHistoryResponse.swift; sourceTree = ""; }; - FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+FireHistory.swift"; sourceTree = ""; }; - FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViscanHistoryOperationFactory.swift; sourceTree = ""; }; - FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VicscanHistoryResponse.swift; sourceTree = ""; }; - FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+VicscanHistory.swift"; sourceTree = ""; }; FA44284129D44E51000142EB /* ChainStakingSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainStakingSettings.swift; sourceTree = ""; }; FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListType.swift; sourceTree = ""; }; - FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlockExplorerType+Filters.swift"; sourceTree = ""; }; + FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedCurrencyChanged.swift; sourceTree = ""; }; FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingCandidateMetadata.swift; sourceTree = ""; }; FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiantsquidExtrinsic.swift; sourceTree = ""; }; - FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisRequestSigner.swift; sourceTree = ""; }; - FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultichainAssetFetching.swift; sourceTree = ""; }; - FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXMultichainAssetSelection.swift; sourceTree = ""; }; - FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultichainChainFetching.swift; sourceTree = ""; }; - FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OKXMultichainChainFetching.swift; sourceTree = ""; }; FA4B928E284493C60003BCEF /* DelegateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelegateCall.swift; sourceTree = ""; }; FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountModelChangedEvent.swift; sourceTree = ""; }; FA4B92952844D0100003BCEF /* ShimmeredLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShimmeredLabel.swift; sourceTree = ""; }; @@ -5209,10 +5713,10 @@ FA4B92AA2844D0E60003BCEF /* SelectCurrencyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyViewController.swift; sourceTree = ""; }; FA4B92AB2844D0E60003BCEF /* SelectCurrencyPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyPresenter.swift; sourceTree = ""; }; FA4B92AC2844D0E60003BCEF /* SelectCurrencyViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyViewLayout.swift; sourceTree = ""; }; + FA4B92B72844D2360003BCEF /* CoingeckoPricesSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoingeckoPricesSource.swift; sourceTree = ""; }; FA4C3D112886794D00176398 /* SelfSizingTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfSizingTableView.swift; sourceTree = ""; }; FA4CC6632817C3AC00A7E85F /* StackedTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackedTableView.swift; sourceTree = ""; }; FA4CC665281801CB00A7E85F /* StakingUnitInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingUnitInfoView.swift; sourceTree = ""; }; - FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresentable.swift; sourceTree = ""; }; FA5085AA2C33C6D4002DF97D /* SafeArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeArray.swift; sourceTree = ""; }; FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeDictionary.swift; sourceTree = ""; }; FA5137A129AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PolkaswapDisclaimerViewModel.swift; sourceTree = ""; }; @@ -5369,6 +5873,7 @@ FA72541F2AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPayloadFactory.swift; sourceTree = ""; }; FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlchemyHistoryOperationFactory.swift; sourceTree = ""; }; FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+AlchemyHistory.swift"; sourceTree = ""; }; + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientBorderedTriangularedView.swift; sourceTree = ""; }; FA74359429C0733E0085A47E /* Array+Difference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Difference.swift"; sourceTree = ""; }; FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CDAccountInfo+CoreDataCodable.swift"; sourceTree = ""; }; FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainSettingsRepositoryFactory.swift; sourceTree = ""; }; @@ -5391,6 +5896,7 @@ FA7C9A6F2BA007AE0031580A /* ArrowsquidHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowsquidHistoryResponse.swift; sourceTree = ""; }; FA7D46CC2AF24191005D681B /* SoraRewardOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoraRewardOperationFactory.swift; sourceTree = ""; }; FA7D46CE2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoraSubsquidPayoutValidatorForNominatorFactory.swift; sourceTree = ""; }; + FA80391428DC2DA2007365E8 /* StakingPoolPalletID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolPalletID.swift; sourceTree = ""; }; FA80391628DD70D7007365E8 /* AccountOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountOperationFactory.swift; sourceTree = ""; }; FA851FF027917494004F5979 /* WalletTransactionDetailsViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewState.swift; sourceTree = ""; }; FA85373527EC874500918A1E /* InactiveBondAlertConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InactiveBondAlertConfig.swift; sourceTree = ""; }; @@ -5426,6 +5932,8 @@ FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModel.swift; sourceTree = ""; }; FA887A462C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModelFactory.swift; sourceTree = ""; }; FA887A482C1C19DB00CA720F /* WarningView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningView.swift; sourceTree = ""; }; + FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersOverviewKey.swift; sourceTree = ""; }; + FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersPagedKey.swift; sourceTree = ""; }; FA8C34B051607218638BA851 /* FiltersProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersProtocols.swift; sourceTree = ""; }; FA8ED43228FD960F00EBB712 /* YourValidatorListFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListFlow.swift; sourceTree = ""; }; FA8ED43528FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListRelaychainStrategy.swift; sourceTree = ""; }; @@ -5496,15 +6004,17 @@ FA93A312283653B70021330F /* ValidatorListFilterFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterFlow.swift; sourceTree = ""; }; FA93A3152836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterRelaychainViewModelState.swift; sourceTree = ""; }; FA93A3172836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterRelaychainViewModelFactory.swift; sourceTree = ""; }; - FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockExplorerApiKey.swift; sourceTree = ""; }; - FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInput.swift; sourceTree = ""; }; FA97E68A2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiantsquidRewardOperationFactory.swift; sourceTree = ""; }; FA99422727FE925000D771E5 /* UISwitch+CustomSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISwitch+CustomSize.swift"; sourceTree = ""; }; FA99422C28002BB800D771E5 /* MissingAccountOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissingAccountOptions.swift; sourceTree = ""; }; FA99423428053C5000D771E5 /* ChainAccountInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAccountInfo.swift; sourceTree = ""; }; + FA99423628053C6800D771E5 /* IconWithTitleViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconWithTitleViewModelFactory.swift; sourceTree = ""; }; FA99426828053C9300D771E5 /* ExportFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportFlow.swift; sourceTree = ""; }; FA99426A28053CFA00D771E5 /* WalletDetailsFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletDetailsFlow.swift; sourceTree = ""; }; FA99426B28053CFA00D771E5 /* WalletDetailsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletDetailsViewModelFactory.swift; sourceTree = ""; }; + FA99426F2805524200D771E5 /* BalanceBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceBuilder.swift; sourceTree = ""; }; + FA9942702805524200D771E5 /* GetBalanceProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetBalanceProvider.swift; sourceTree = ""; }; + FA99549627B255AB00CCC94B /* AddCustomNodeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewModel.swift; sourceTree = ""; }; FA99549827B3609700CCC94B /* TableSectionTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableSectionTitleView.swift; sourceTree = ""; }; FA99549A27B3B60700CCC94B /* WalletNameChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletNameChanged.swift; sourceTree = ""; }; FA99C92C283B4AB5007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmRelaychainInitiatedViewModelFactory.swift; sourceTree = ""; }; @@ -5607,34 +6117,13 @@ FAA086D3284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingCollatorSnapshot.swift; sourceTree = ""; }; FAA086D528475AF300CC2F33 /* ParachainStakingDelegatorState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingDelegatorState.swift; sourceTree = ""; }; FAA086D72848AB8600CC2F33 /* YourRewardDestinationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourRewardDestinationViewModel.swift; sourceTree = ""; }; + FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryPayoutValidatorForNominatorFactory.swift; sourceTree = ""; }; FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Average.swift"; sourceTree = ""; }; FAAA29082B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReefRewardCalculatorService.swift; sourceTree = ""; }; FAAA290A2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReefRewardCalculatorEngine.swift; sourceTree = ""; }; FAAA290D2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasRewardPointsRequest.swift; sourceTree = ""; }; FAAA290F2B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasTotalStakeRequest.swift; sourceTree = ""; }; FAAA29112B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasValidatorRewardRequest.swift; sourceTree = ""; }; - FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestWorkerBuilder.swift; sourceTree = ""; }; - FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestPerformer.swift; sourceTree = ""; }; - FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedStorageRequestPerformer.swift; sourceTree = ""; }; - FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleSingleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EncodableStorageRequestWorker.swift; sourceTree = ""; }; - FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleStorageRequestWorker.swift; sourceTree = ""; }; - FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestWorker.swift; sourceTree = ""; }; - FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMapStorageRequestWorker.swift; sourceTree = ""; }; - FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequest.swift; sourceTree = ""; }; - FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleRequest.swift; sourceTree = ""; }; - FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapKeyEncodingWorker.swift; sourceTree = ""; }; - FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMapKeyEncodingWorker.swift; sourceTree = ""; }; - FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageFallbackDecodingListWorker.swift; sourceTree = ""; }; - FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONRPCListWorker.swift; sourceTree = ""; }; - FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONRPCWorkerDefault.swift; sourceTree = ""; }; - FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChildStorageResponseDecodingWorker.swift; sourceTree = ""; }; - FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactoryDefault.swift; sourceTree = ""; }; - FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AsyncStorageRequestFactory+Extension.swift"; sourceTree = ""; }; - FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactory.swift; sourceTree = ""; }; FAAA29562B8DED770089AFE6 /* MapKeyType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapKeyType.swift; sourceTree = ""; }; FAABC46D2845BADA002CF40E /* CustomValidatorParachainListFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorParachainListFilter.swift; sourceTree = ""; }; FAABC46F2845BAEE002CF40E /* CustomValidatorParachainListComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorParachainListComposer.swift; sourceTree = ""; }; @@ -5664,6 +6153,7 @@ FAADC1B32926597400DA9903 /* ScanQRPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRPresenter.swift; sourceTree = ""; }; FAADC1B42926597400DA9903 /* ScanQRProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRProtocols.swift; sourceTree = ""; }; FAADC1B52926597400DA9903 /* ScanQRRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRRouter.swift; sourceTree = ""; }; + FAADF71129C47D10002B6D39 /* RuntimeSpecVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSpecVersion.swift; sourceTree = ""; }; FAAF61732877DBC50094B4BC /* EthereumIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumIcon.swift; sourceTree = ""; }; FAAF946B2A0CFF90009A4BA5 /* Array+Duplicates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Duplicates.swift"; sourceTree = ""; }; FAB0EDD827AA692D003D93C2 /* NodeSelectionTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeSelectionTableCell.swift; sourceTree = ""; }; @@ -5673,15 +6163,10 @@ FAB0EDE127AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeSelectionTableCellViewModel.swift; sourceTree = ""; }; FAB16A302A9C9BBF00E71F43 /* NftCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionCell.swift; sourceTree = ""; }; FAB16A332A9C9BD000E71F43 /* NftCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCellViewModel.swift; sourceTree = ""; }; - FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChainModel+Nomis.swift"; sourceTree = ""; }; FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrossChainViewLoadingCollector.swift; sourceTree = ""; }; FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetsAccountRequest.swift; sourceTree = ""; }; FAB707662BB3C1A400A1131C /* AssetAccountInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetAccountInfo.swift; sourceTree = ""; }; FAB8B96D29F23FCA002E5F04 /* ChainAccountBalanceViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAccountBalanceViewModel.swift; sourceTree = ""; }; - FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSelectionCollectionCell.swift; sourceTree = ""; }; - FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSelectionCollectionCellModel.swift; sourceTree = ""; }; - FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewModelFactory.swift; sourceTree = ""; }; - FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+ColorsInvert.swift"; sourceTree = ""; }; FABA161A2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiassetV11MigrationPolicy.swift; sourceTree = ""; }; FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = UserDataModelV10toV11.xcmappingmodel; sourceTree = ""; }; FABA162C2B0C9504001AF2F0 /* TabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBar.swift; sourceTree = ""; }; @@ -5703,16 +6188,9 @@ FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TipViewModel.swift; sourceTree = ""; }; FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecipientViewModel.swift; sourceTree = ""; }; FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectNetworkViewModel.swift; sourceTree = ""; }; - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDependencyContainer.swift; sourceTree = ""; }; - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendPresenter.swift; sourceTree = ""; }; - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendProtocols.swift; sourceTree = ""; }; FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendFlow.swift; sourceTree = ""; }; FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewLayout.swift; sourceTree = ""; }; - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendAssembly.swift; sourceTree = ""; }; - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewController.swift; sourceTree = ""; }; - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendRouter.swift; sourceTree = ""; }; FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDataValidatingFactory.swift; sourceTree = ""; }; - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendInteractor.swift; sourceTree = ""; }; FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetViewModelFactory.swift; sourceTree = ""; }; FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetAssembly.swift; sourceTree = ""; }; FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetRouter.swift; sourceTree = ""; }; @@ -5735,10 +6213,48 @@ FAC6CD9C2BA8097C0013A17E /* L10n.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L10n.swift; sourceTree = ""; }; FAC6CD9E2BA80AB70013A17E /* WalletLanguage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLanguage.swift; sourceTree = ""; }; FAC6CDA02BA80CB10013A17E /* WalletTransactionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionType.swift; sourceTree = ""; }; + FAC6CDA62BA814020013A17E /* BalanceContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceContext.swift; sourceTree = ""; }; FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIControl+Disable.swift"; sourceTree = ""; }; FAC6CDAC2BA81D680013A17E /* FeeViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeeViewProtocol.swift; sourceTree = ""; }; FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLoggerProtocol.swift; sourceTree = ""; }; FAC6CDB02BA821B00013A17E /* WalletImageViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletImageViewModelProtocol.swift; sourceTree = ""; }; + FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageRequestsKeysBuilder.swift; sourceTree = ""; }; + FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestKeyEncodingWorkerFactory.swift; sourceTree = ""; }; + FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestWorkerBuilder.swift; sourceTree = ""; }; + FAC71CA42D363FFE00122E95 /* CachedRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedRequest.swift; sourceTree = ""; }; + FAC71CA52D363FFE00122E95 /* MixStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorage.swift; sourceTree = ""; }; + FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleRequest.swift; sourceTree = ""; }; + FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixRequest.swift; sourceTree = ""; }; + FAC71CA82D363FFE00122E95 /* StorageRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequest.swift; sourceTree = ""; }; + FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageDecodingListWorker.swift; sourceTree = ""; }; + FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleSingleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncodableStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageRequestsWorker.swift; sourceTree = ""; }; + FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NMapStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixEncodableStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestWorker.swift; sourceTree = ""; }; + FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChildStorageResponseDecodingWorker.swift; sourceTree = ""; }; + FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCListWorker.swift; sourceTree = ""; }; + FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCWorkerDefault.swift; sourceTree = ""; }; + FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyEncoding.swift; sourceTree = ""; }; + FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NMapKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageFallbackDecodingListWorker.swift; sourceTree = ""; }; + FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactory.swift; sourceTree = ""; }; + FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AsyncStorageRequestFactory+Extension.swift"; sourceTree = ""; }; + FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactoryDefault.swift; sourceTree = ""; }; + FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedStorageRequestPerformer.swift; sourceTree = ""; }; + FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestPerformer.swift; sourceTree = ""; }; + FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeyDataExtractor.swift; sourceTree = ""; }; + FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedStorageResponse.swift; sourceTree = ""; }; + FACACE1027BCF104005422EE /* MetaAccountCreationMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountCreationMetadata.swift; sourceTree = ""; }; FACACE1227BCF10E005422EE /* MetaAccountImportMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportMetadata.swift; sourceTree = ""; }; FACACE1327BCF10E005422EE /* MetaAccountImportPreferredInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportPreferredInfo.swift; sourceTree = ""; }; FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshotReady.swift; sourceTree = ""; }; @@ -5790,8 +6306,6 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v6.xcdatamodel; sourceTree = ""; }; FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v3.xcdatamodel; sourceTree = ""; }; FAD067A82C20445F0050291F /* ChainAssetListBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAssetListBuilder.swift; sourceTree = ""; }; - FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErasStakersPagedKey.swift; sourceTree = ""; }; - FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErasStakersOverviewKey.swift; sourceTree = ""; }; FAD067B12C2044B10050291F /* AssetManagementViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementViewModel.swift; sourceTree = ""; }; FAD067B22C2044B10050291F /* AssetManagementViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementViewModelFactory.swift; sourceTree = ""; }; FAD067B32C2044B10050291F /* AssetManagementInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementInteractor.swift; sourceTree = ""; }; @@ -5810,12 +6324,6 @@ FAD067CE2C20453E0050291F /* DefaultEraStakersFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultEraStakersFetching.swift; sourceTree = ""; }; FAD067D22C20550B0050291F /* UIImageView+Shimmered.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImageView+Shimmered.swift"; sourceTree = ""; }; FAD067D42C214E7C0050291F /* LiquidityPoolsConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsConstants.swift; sourceTree = ""; }; - FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZChainHistoryOperationFactory.swift; sourceTree = ""; }; - FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZChainHistoryResponse.swift; sourceTree = ""; }; - FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+ZChainHistory.swift"; sourceTree = ""; }; - FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaiaHistoryResponse.swift; sourceTree = ""; }; - FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaiaHistoryOperationFactory.swift; sourceTree = ""; }; - FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+KaiaHistory.swift"; sourceTree = ""; }; FAD428932A834A8E001D6A16 /* TopViewControllerHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerHelper.swift; sourceTree = ""; }; FAD428952A834BA8001D6A16 /* UIApplication+TopViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+TopViewController.swift"; sourceTree = ""; }; FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumNodeFetching.swift; sourceTree = ""; }; @@ -5890,10 +6398,6 @@ FAD429312A865695001D6A16 /* CheckboxButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxButton.swift; sourceTree = ""; }; FAD429332A8656B6001D6A16 /* UITableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableView.swift; sourceTree = ""; }; FAD429342A8656B7001D6A16 /* UICollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UICollectionView.swift; sourceTree = ""; }; - FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsFetching.swift; sourceTree = ""; }; - FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatistics.swift; sourceTree = ""; }; - FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsFetcher.swift; sourceTree = ""; }; - FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsRequest.swift; sourceTree = ""; }; FAD646C1284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainStrategy.swift; sourceTree = ""; }; FAD646C3284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainViewModelState.swift; sourceTree = ""; }; FAD646C5284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainViewModelFactory.swift; sourceTree = ""; }; @@ -5906,13 +6410,10 @@ FAD646DB284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupRelaychainViewModelFactory.swift; sourceTree = ""; }; FAD956762BB2BE8C00A8BF76 /* SystemAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemAccountRequest.swift; sourceTree = ""; }; FAD9AAC02B8DF62100AA603B /* AsyncMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncMap.swift; sourceTree = ""; }; - FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixRequest.swift; sourceTree = ""; }; - FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageRequestWorker.swift; sourceTree = ""; }; - FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageResponseValueExtractor.swift; sourceTree = ""; }; FADB9DB429D551A100303F7D /* SoraRewardCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraRewardCalculatorService.swift; sourceTree = ""; }; + FADBA5EE2B5FD05C00CFCF30 /* ClaimCrowdloanRewardsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewModel.swift; sourceTree = ""; }; FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardViewModelFactory.swift; sourceTree = ""; }; FADBA5F22B5FE36200CFCF30 /* ChainAccountViewMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountViewMode.swift; sourceTree = ""; }; - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmInteractor.swift; sourceTree = ""; }; FAE39AEE2A9DBDD30011A9D6 /* NftCollectionViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModelFactory.swift; sourceTree = ""; }; FAE39AF02A9DBDDA0011A9D6 /* NftCollectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModel.swift; sourceTree = ""; }; FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsSetupCompleted.swift; sourceTree = ""; }; @@ -5925,6 +6426,8 @@ FAE39B082AA1D4410011A9D6 /* NftSendConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewModelFactory.swift; sourceTree = ""; }; FAE39B162AA965940011A9D6 /* URL+IPFS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+IPFS.swift"; sourceTree = ""; }; FAE5858E2B0764EC00240FE1 /* SoraSubsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubsquidHistoryOperationFactory.swift; sourceTree = ""; }; + FAE5F62E27B2383E00F13206 /* AddCustomNodeViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewState.swift; sourceTree = ""; }; + FAE5F63027B2384F00F13206 /* AddCustomNodeViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewModelFactory.swift; sourceTree = ""; }; FAE9EB9C288AB74D009390B6 /* AnalyticsRewardsFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardsFlow.swift; sourceTree = ""; }; FAE9EB9E288ABBBE009390B6 /* AnalyticRewardsParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticRewardsParachainViewModelState.swift; sourceTree = ""; }; FAE9EBA0288ABBC7009390B6 /* AnalyticRewardsParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticRewardsParachainStrategy.swift; sourceTree = ""; }; @@ -5936,7 +6439,7 @@ FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelState.swift; sourceTree = ""; }; FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountViewModel.swift; sourceTree = ""; }; FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelFactory.swift; sourceTree = ""; }; - FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkRequestUrlParameters.swift; sourceTree = ""; }; + FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV8.xcmappingmodel; sourceTree = ""; }; FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubJSONDecoder.swift; sourceTree = ""; }; FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLConstants.swift; sourceTree = ""; }; FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppVersionObserver.swift; sourceTree = ""; }; @@ -5947,9 +6450,6 @@ FAF5E9DA27E46DAA005A3448 /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; FAF5E9DD27E46DCC005A3448 /* String+VersionComparsion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+VersionComparsion.swift"; sourceTree = ""; }; FAF5E9E027E4A4C1005A3448 /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; - FAF600762C48F08B00E56558 /* AccountScoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreView.swift; sourceTree = ""; }; - FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreViewModel.swift; sourceTree = ""; }; - FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Formatting.swift"; sourceTree = ""; }; FAF92E6527B4275E005467CE /* Bool+ToInt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Bool+ToInt.swift"; sourceTree = ""; }; FAF96B572B636FC700E299C1 /* SystemNumberRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemNumberRequest.swift; sourceTree = ""; }; FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeprecatedControllerStashAccountCheckService.swift; sourceTree = ""; }; @@ -5970,9 +6470,7 @@ FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletViewController.swift; sourceTree = ""; }; FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletProtocols.swift; sourceTree = ""; }; FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletTests.swift; sourceTree = ""; }; - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumBalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; - FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreSettingsChanged.swift; sourceTree = ""; }; - FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FWCosmosView.swift; sourceTree = ""; }; + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelState.swift; sourceTree = ""; }; FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelFactory.swift; sourceTree = ""; }; FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubstrateCallPath.swift; sourceTree = ""; }; @@ -6037,9 +6535,9 @@ FC0B2D0A77F4B0F7CC9E7C1D /* LiquidityPoolsOverviewViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewLayout.swift; sourceTree = ""; }; FC1236F31289F7F25A25E69C /* ClaimCrowdloanRewardsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsRouter.swift; sourceTree = ""; }; FC76E7D99A98423180BC572F /* LiquidityPoolsOverviewTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewTests.swift; sourceTree = ""; }; + FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearlessIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FD845193EDFC3A1D0BC73719 /* NftCollectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionProtocols.swift; sourceTree = ""; }; FD8B69E9E18C11EAEC9284B3 /* LiquidityPoolsOverviewViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewController.swift; sourceTree = ""; }; - FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsRouter.swift; sourceTree = ""; }; FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListViewFactory.swift; sourceTree = ""; }; FE826F356F6D72EACFB0AE31 /* NftSendConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmPresenter.swift; sourceTree = ""; }; FF4688AF0658F8BB7A90C2BE /* ExportMnemonicConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicConfirmViewFactory.swift; sourceTree = ""; }; @@ -6053,7 +6551,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 54A3B34605E787B47741ED1A /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */, + 5A8DA5F75BC11EC27A0BC63D /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6061,47 +6559,53 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C6182B212C631AAC0089558D /* SSFCrypto in Frameworks */, - C6182B272C631AAC0089558D /* SSFHelpers in Frameworks */, - C6182B172C631AAC0089558D /* SSFAccountManagmentStorage in Frameworks */, - C6182B3B2C631AAC0089558D /* SSFSigner in Frameworks */, - C6182B2B2C631AAC0089558D /* SSFLogger in Frameworks */, - C6182B2F2C631AAC0089558D /* SSFNetwork in Frameworks */, - C6182B112C631AAC0089558D /* MPQRCoreSDK in Frameworks */, - C6182B292C631AAC0089558D /* SSFKeyPair in Frameworks */, - C6182B2D2C631AAC0089558D /* SSFModels in Frameworks */, - C6182B3F2C631AAC0089558D /* SSFStorageQueryKit in Frameworks */, - C6182B312C631AAC0089558D /* SSFPolkaswap in Frameworks */, - C6182B3D2C631AAC0089558D /* SSFSingleValueCache in Frameworks */, + FA1FAD702D62FEBE00ECD456 /* SSFTransferService in Frameworks */, + FA1FAD5A2D62FEBE00ECD456 /* SSFLogger in Frameworks */, + FA1FAD5E2D62FEBE00ECD456 /* SSFNetwork in Frameworks */, + FA1FAD4C2D62FEBE00ECD456 /* SSFChainRegistry in Frameworks */, FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */, - C6182B1F2C631AAC0089558D /* SSFCloudStorage in Frameworks */, - C6182B232C631AAC0089558D /* SSFEraKit in Frameworks */, - C6182B472C631AAC0089558D /* SoraKeystore in Frameworks */, - C6182B372C631AAC0089558D /* SSFQRService in Frameworks */, - C6182B352C631AAC0089558D /* SSFPoolsStorage in Frameworks */, + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */, + FA1FAD4E2D62FEBE00ECD456 /* SSFCloudStorage in Frameworks */, FA72546B2AC2F12D00EC47A6 /* WalletConnectNetworking in Frameworks */, - C6182B1D2C631AAC0089558D /* SSFChainRegistry in Frameworks */, - C6182B432C631AAC0089558D /* SSFUtils in Frameworks */, - FAF600752C48D79600E56558 /* Cosmos in Frameworks */, - C6182B412C631AAC0089558D /* SSFTransferService in Frameworks */, - C6182B0F2C631AAC0089558D /* IrohaCrypto in Frameworks */, - C6182B492C631AAC0089558D /* keccak in Frameworks */, + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */, + FA1FAD6E2D62FEBE00ECD456 /* SSFStorageQueryKit in Frameworks */, + FA1FAD742D62FEBE00ECD456 /* SSFXCM in Frameworks */, + FA1FAD522D62FEBE00ECD456 /* SSFEraKit in Frameworks */, + FA1FAD642D62FEBE00ECD456 /* SSFPoolsStorage in Frameworks */, + FA1FAD6C2D62FEBE00ECD456 /* SSFSingleValueCache in Frameworks */, FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */, - FAB482ED2C58A8AA00594D89 /* Web3ContractABI in Frameworks */, - FAB482EB2C58A8AA00594D89 /* Web3 in Frameworks */, - C6182B452C631AAC0089558D /* SSFXCM in Frameworks */, + FA1FAD482D62FEBE00ECD456 /* SSFAssetManagment in Frameworks */, + FA1FAD582D62FEBE00ECD456 /* SSFKeyPair in Frameworks */, + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */, + FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */, + FA1FAD6A2D62FEBE00ECD456 /* SSFSigner in Frameworks */, + FA1FAD4A2D62FEBE00ECD456 /* SSFChainConnection in Frameworks */, + FA1FAD3E2D62FEBE00ECD456 /* IrohaCrypto in Frameworks */, + FA1FAD442D62FEBE00ECD456 /* SSFAccountManagment in Frameworks */, + FA1FAD722D62FEBE00ECD456 /* SSFUtils in Frameworks */, + FA8FD1812AF4B55100354482 /* Web3 in Frameworks */, + FA8FD1852AF4B55100354482 /* Web3PromiseKit in Frameworks */, + FA1FAD682D62FEBE00ECD456 /* SSFRuntimeCodingService in Frameworks */, + 0701B8A32C78F54200DCD395 /* Cosmos in Frameworks */, + FA1FAD662D62FEBE00ECD456 /* SSFQRService in Frameworks */, FA7254672AC2F12D00EC47A6 /* WalletConnect in Frameworks */, + FA1FAD402D62FEBE00ECD456 /* MPQRCoreSDK in Frameworks */, + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */, + FA1FAD782D62FEBE00ECD456 /* TonConnectAPI in Frameworks */, FA72546D2AC2F12D00EC47A6 /* WalletConnectPairing in Frameworks */, - C6182B1B2C631AAC0089558D /* SSFChainConnection in Frameworks */, + FA1FAD502D62FEBE00ECD456 /* SSFCrypto in Frameworks */, FA7254692AC2F12D00EC47A6 /* WalletConnectAuth in Frameworks */, - FAB482EF2C58A8AA00594D89 /* Web3PromiseKit in Frameworks */, - C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */, - C6182B392C631AAC0089558D /* SSFRuntimeCodingService in Frameworks */, - C6182B332C631AAC0089558D /* SSFPools in Frameworks */, - C6182B192C631AAC0089558D /* SSFAssetManagment in Frameworks */, - C6182B152C631AAC0089558D /* SSFAccountManagment in Frameworks */, - C6182B252C631AAC0089558D /* SSFExtrinsicKit in Frameworks */, - C6182B132C631AAC0089558D /* RobinHood in Frameworks */, + FA1FAD7A2D62FEBE00ECD456 /* keccak in Frameworks */, + FA1FAD762D62FEBE00ECD456 /* SoraKeystore in Frameworks */, + FA1FAD5C2D62FEBE00ECD456 /* SSFModels in Frameworks */, + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */, + FA1FAD562D62FEBE00ECD456 /* SSFHelpers in Frameworks */, + FA1FAD542D62FEBE00ECD456 /* SSFExtrinsicKit in Frameworks */, + FA1FAD622D62FEBE00ECD456 /* SSFPools in Frameworks */, + FA1FAD602D62FEBE00ECD456 /* SSFPolkaswap in Frameworks */, + FA1FAD422D62FEBE00ECD456 /* RobinHood in Frameworks */, + 78BCB91F4434229B18C1E524 /* Pods_fearlessAll_fearless.framework in Frameworks */, + FA1FAD462D62FEBE00ECD456 /* SSFAccountManagmentStorage in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6109,7 +6613,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5AB7027E1E73E39E4026C5C /* Pods_fearlessTests.framework in Frameworks */, + 79E0E33666B1D9AFD62A1CD8 /* Pods_fearlessTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6259,6 +6763,395 @@ path = YourValidatorList; sourceTree = ""; }; + 0701B88D2C78F34A00DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */, + 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B8962C78F34A00DCD395 /* AccountStatistics */ = { + isa = PBXGroup; + children = ( + 0701B88D2C78F34A00DCD395 /* ViewModel */, + 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */, + 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */, + 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */, + 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */, + 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */, + 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */, + 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */, + 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */, + ); + path = AccountStatistics; + sourceTree = ""; + }; + 0701B8B02C78F63400DCD395 /* AccountScore */ = { + isa = PBXGroup; + children = ( + 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */, + ); + path = AccountScore; + sourceTree = ""; + }; + 0701B8BE2C78F6C300DCD395 /* AccountScore */ = { + isa = PBXGroup; + children = ( + 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */, + ); + path = AccountScore; + sourceTree = ""; + }; + 0701B8C52C78F71800DCD395 /* Models */ = { + isa = PBXGroup; + children = ( + 0701B8C02C78F71800DCD395 /* TonConnectError.swift */, + 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */, + 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */, + 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */, + 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0701B8C72C78F71800DCD395 /* Request */ = { + isa = PBXGroup; + children = ( + 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */, + ); + path = Request; + sourceTree = ""; + }; + 0701B8CB2C78F71800DCD395 /* Nomis */ = { + isa = PBXGroup; + children = ( + 0701B8C72C78F71800DCD395 /* Request */, + 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */, + 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */, + 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */, + ); + path = Nomis; + sourceTree = ""; + }; + 0701B8CD2C78F71800DCD395 /* AccountStatistics */ = { + isa = PBXGroup; + children = ( + 0701B8CB2C78F71800DCD395 /* Nomis */, + 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */, + ); + path = AccountStatistics; + sourceTree = ""; + }; + 0701B8D32C78F71800DCD395 /* Parameters */ = { + isa = PBXGroup; + children = ( + 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */, + 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */, + 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */, + 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */, + 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */, + ); + path = Parameters; + sourceTree = ""; + }; + 0701B8D42C78F71800DCD395 /* Request */ = { + isa = PBXGroup; + children = ( + 0701B8D32C78F71800DCD395 /* Parameters */, + ); + path = Request; + sourceTree = ""; + }; + 0701B8E12C78F71800DCD395 /* Response */ = { + isa = PBXGroup; + children = ( + 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */, + 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */, + 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */, + 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */, + 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */, + 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */, + 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */, + 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */, + 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */, + 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */, + 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */, + 0701B8E02C78F71800DCD395 /* OKXToken.swift */, + ); + path = Response; + sourceTree = ""; + }; + 0701B8E32C78F71800DCD395 /* Network */ = { + isa = PBXGroup; + children = ( + 0701B8D42C78F71800DCD395 /* Request */, + 0701B8E12C78F71800DCD395 /* Response */, + 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */, + ); + path = Network; + sourceTree = ""; + }; + 0701B8E52C78F71800DCD395 /* okx-dex-aggregator */ = { + isa = PBXGroup; + children = ( + 0701B8E32C78F71800DCD395 /* Network */, + 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */, + ); + path = "okx-dex-aggregator"; + sourceTree = ""; + }; + 0701B90A2C78FAF000DCD395 /* Common */ = { + isa = PBXGroup; + children = ( + 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */, + 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */, + ); + path = Common; + sourceTree = ""; + }; + 0701B9172C78FAF000DCD395 /* Resources */ = { + isa = PBXGroup; + children = ( + 0701B90B2C78FAF000DCD395 /* assets.json */, + 0701B90C2C78FAF000DCD395 /* chains.json */, + 0701B90D2C78FAF000DCD395 /* dapps.json */, + 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */, + 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */, + 0701B9102C78FAF000DCD395 /* runtime-default.json */, + 0701B9112C78FAF000DCD395 /* runtime-empty.json */, + 0701B9122C78FAF000DCD395 /* runtime-kusama.json */, + 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */, + 0701B9142C78FAF000DCD395 /* runtime-rococo.json */, + 0701B9152C78FAF000DCD395 /* runtime-westend.json */, + 0701B9162C78FAF000DCD395 /* types.json */, + ); + path = Resources; + sourceTree = ""; + }; + 0701B91A2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */, + 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9232C78FAF000DCD395 /* LiquidityPoolDetails */ = { + isa = PBXGroup; + children = ( + 0701B9172C78FAF000DCD395 /* Resources */, + 0701B91A2C78FAF000DCD395 /* ViewModel */, + 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */, + 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */, + 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */, + 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */, + 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */, + 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */, + 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */, + 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */, + ); + path = LiquidityPoolDetails; + sourceTree = ""; + }; + 0701B92B2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidity */ = { + isa = PBXGroup; + children = ( + 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */, + 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */, + 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */, + 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */, + 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */, + 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */, + 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */, + ); + path = LiquidityPoolRemoveLiquidity; + sourceTree = ""; + }; + 0701B9302C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirm */ = { + isa = PBXGroup; + children = ( + 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */, + 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */, + 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */, + 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */, + ); + path = LiquidityPoolRemoveLiquidityConfirm; + sourceTree = ""; + }; + 0701B9342C78FAF000DCD395 /* AvailablePools */ = { + isa = PBXGroup; + children = ( + 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */, + 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */, + 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */, + ); + path = AvailablePools; + sourceTree = ""; + }; + 0701B9382C78FAF000DCD395 /* UserPools */ = { + isa = PBXGroup; + children = ( + 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */, + 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */, + 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */, + ); + path = UserPools; + sourceTree = ""; + }; + 0701B9392C78FAF000DCD395 /* Flows */ = { + isa = PBXGroup; + children = ( + 0701B9342C78FAF000DCD395 /* AvailablePools */, + 0701B9382C78FAF000DCD395 /* UserPools */, + ); + path = Flows; + sourceTree = ""; + }; + 0701B93B2C78FAF000DCD395 /* View */ = { + isa = PBXGroup; + children = ( + 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */, + ); + path = View; + sourceTree = ""; + }; + 0701B93F2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */, + 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */, + 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9452C78FAF000DCD395 /* LiquidityPoolsList */ = { + isa = PBXGroup; + children = ( + 0701B9392C78FAF000DCD395 /* Flows */, + 0701B93B2C78FAF000DCD395 /* View */, + 0701B93F2C78FAF000DCD395 /* ViewModel */, + 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */, + 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */, + 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */, + 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */, + 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */, + ); + path = LiquidityPoolsList; + sourceTree = ""; + }; + 0701B94D2C78FAF000DCD395 /* LiquidityPoolsOverview */ = { + isa = PBXGroup; + children = ( + 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */, + 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */, + 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */, + 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */, + 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */, + 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */, + 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */, + ); + path = LiquidityPoolsOverview; + sourceTree = ""; + }; + 0701B9502C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */, + 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9582C78FAF000DCD395 /* LiquidityPoolSupply */ = { + isa = PBXGroup; + children = ( + 0701B9502C78FAF000DCD395 /* ViewModel */, + 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */, + 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */, + 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */, + 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */, + 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */, + 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */, + 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */, + ); + path = LiquidityPoolSupply; + sourceTree = ""; + }; + 0701B95B2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */, + 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9632C78FAF000DCD395 /* LiquidityPoolSupplyConfirm */ = { + isa = PBXGroup; + children = ( + 0701B95B2C78FAF000DCD395 /* ViewModel */, + 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */, + 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */, + 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */, + 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */, + 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */, + 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */, + 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */, + ); + path = LiquidityPoolSupplyConfirm; + sourceTree = ""; + }; + 0701B9642C78FAF000DCD395 /* LiquidityPools */ = { + isa = PBXGroup; + children = ( + 0701B90A2C78FAF000DCD395 /* Common */, + 0701B9232C78FAF000DCD395 /* LiquidityPoolDetails */, + 0701B92B2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidity */, + 0701B9302C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirm */, + 0701B9452C78FAF000DCD395 /* LiquidityPoolsList */, + 0701B94D2C78FAF000DCD395 /* LiquidityPoolsOverview */, + 0701B9582C78FAF000DCD395 /* LiquidityPoolSupply */, + 0701B9632C78FAF000DCD395 /* LiquidityPoolSupplyConfirm */, + ); + path = LiquidityPools; + sourceTree = ""; + }; + 0701B9B72C78FD8800DCD395 /* Kaia */ = { + isa = PBXGroup; + children = ( + 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */, + ); + path = Kaia; + sourceTree = ""; + }; + 0701B9B92C78FD8800DCD395 /* ZChain */ = { + isa = PBXGroup; + children = ( + 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */, + ); + path = ZChain; + sourceTree = ""; + }; + 0701B9BB2C78FD8800DCD395 /* 5ire */ = { + isa = PBXGroup; + children = ( + 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */, + ); + path = 5ire; + sourceTree = ""; + }; + 0701B9BD2C78FD8800DCD395 /* Viscan */ = { + isa = PBXGroup; + children = ( + 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */, + ); + path = Viscan; + sourceTree = ""; + }; 0702B3162970182B003519F5 /* Amount */ = { isa = PBXGroup; children = ( @@ -6321,14 +7214,54 @@ 0713097B28C6387B002B17D0 /* ScamService */ = { isa = PBXGroup; children = ( + 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */, 0713097C28C63893002B17D0 /* ScamSyncService.swift */, 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */, 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */, - FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */, ); path = ScamService; sourceTree = ""; }; + 0715FCD52C65FC3600AA674E /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */, + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */, + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */, + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */, + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */, + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */, + 0715FCE42C66378900AA674E /* TonConnectModels.swift */, + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */, + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */, + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */, + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */, + ); + path = Models; + sourceTree = ""; + }; + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */ = { + isa = PBXGroup; + children = ( + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */, + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */, + ); + path = FeatureToggleService; + sourceTree = ""; + }; + 0723ED9E2C48E35600880620 /* Flows */ = { + isa = PBXGroup; + children = ( + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */, + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */, + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */, + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */, + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */, + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */, + ); + name = Flows; + sourceTree = ""; + }; 0726FFA82AC4387F00336D76 /* WalletConnect */ = { isa = PBXGroup; children = ( @@ -6359,6 +7292,15 @@ name = Sign; sourceTree = ""; }; + 0728BD142C984D86002369FD /* View */ = { + isa = PBXGroup; + children = ( + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */, + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */, + ); + name = View; + sourceTree = ""; + }; 072EB84628E2A258007E70FF /* ViewModel */ = { isa = PBXGroup; children = ( @@ -6395,6 +7337,14 @@ name = Validators; sourceTree = ""; }; + 073DE30D2C5BA34A003B4990 /* Models */ = { + isa = PBXGroup; + children = ( + 073DE30E2C5BA35B003B4990 /* TonModels.swift */, + ); + name = Models; + sourceTree = ""; + }; 074EB7AB290B9F02000A2A6A /* Events */ = { isa = PBXGroup; children = ( @@ -6481,6 +7431,43 @@ name = ViewModel; sourceTree = ""; }; + 0778A12C2C58D0E1008A1254 /* Ton */ = { + isa = PBXGroup; + children = ( + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */, + ); + name = Ton; + sourceTree = ""; + }; + 07A949822C46600200613B9D /* AccountInfoRemoteService */ = { + isa = PBXGroup; + children = ( + FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, + 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */, + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */, + ); + name = AccountInfoRemoteService; + sourceTree = ""; + }; + 07A949852C47C38600613B9D /* ServiceAssembly */ = { + isa = PBXGroup; + children = ( + 07A949862C47C39800613B9D /* ServiceAssembly.swift */, + ); + name = ServiceAssembly; + sourceTree = ""; + }; + 07B56CFB2C53C45100E924AA /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBC1291D0EAF00E6F106 /* Validators */, + 37720679F35B0EF1AAE4E483 /* Transfer */, + 4728D679CE010F910E5F12EC /* ConfirmTransfer */, + ); + path = Transfer; + sourceTree = ""; + }; 07B6BC7D28BC71BF00621864 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -6507,6 +7494,33 @@ path = Chainlink; sourceTree = ""; }; + 07C438D52C638AE400475B14 /* TonConnect */ = { + isa = PBXGroup; + children = ( + 07C438D82C638B4300475B14 /* Models */, + 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */, + 075E5FD02C7F1A630044C142 /* TonConnectService.swift */, + 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */, + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */, + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */, + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */, + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */, + ); + name = TonConnect; + sourceTree = ""; + }; + 07C438D82C638B4300475B14 /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */, + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */, + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */, + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */, + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */, + ); + path = Models; + sourceTree = ""; + }; 07D05E4228EEFBFE00B66C70 /* Pool */ = { isa = PBXGroup; children = ( @@ -6557,6 +7571,25 @@ path = PoolExisting; sourceTree = ""; }; + 07D0BD3C2C6F0C8D001ECD58 /* View */ = { + isa = PBXGroup; + children = ( + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */, + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */, + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */, + ); + path = View; + sourceTree = ""; + }; + 07D0BD3F2C6F0E90001ECD58 /* Cells */ = { + isa = PBXGroup; + children = ( + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */, + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */, + ); + path = Cells; + sourceTree = ""; + }; 07DE95AB28A1119400E9C2CB /* BalanceInfo */ = { isa = PBXGroup; children = ( @@ -6686,6 +7719,7 @@ children = ( FA6262312AC2E35A005D3D95 /* WalletConnectProposalViewModel.swift */, FA6262322AC2E35A005D3D95 /* WalletConnectProposalViewModelFactory.swift */, + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */, ); path = Model; sourceTree = ""; @@ -6721,6 +7755,7 @@ isa = PBXGroup; children = ( FA6262012AC2E359005D3D95 /* WalletConnectSessionViewModelFactory.swift */, + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */, FA6262042AC2E359005D3D95 /* WalletConnectSessionViewModel.swift */, ); name = Model; @@ -6785,6 +7820,8 @@ isa = PBXGroup; children = ( FA93A2E22833AEFB0021330F /* Flow */, + AE1000F026679824004753B7 /* InitiatedBonding */, + AE1000EF2667981A004753B7 /* ChangeTargets */, 84D2F45825EF053F008B914D /* Views */, 84D2F45225EF043C008B914D /* ViewModel */, D6C6573C52692E4A56E35FF9 /* RecommendedValidatorListProtocols.swift */, @@ -6858,6 +7895,15 @@ path = Validators; sourceTree = ""; }; + 0F353CD57BFACDCEED0B6D07 /* StakingRedeem */ = { + isa = PBXGroup; + children = ( + 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */, + 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */, + ); + path = StakingRedeem; + sourceTree = ""; + }; 1132E923A881889011B3D2A6 /* ChainAccountBalanceList */ = { isa = PBXGroup; children = ( @@ -6906,6 +7952,7 @@ isa = PBXGroup; children = ( F429324D26280F5F00752C2C /* ViewModel */, + F400A7C0260CE1560061D576 /* Model */, F474D386260CBED500013699 /* View */, CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */, 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */, @@ -6998,19 +8045,33 @@ 2698CD398B0412EB85D620AB /* Pods */ = { isa = PBXGroup; children = ( - A77DF1CA9610844CF63C4BBC /* Pods-fearlessAll-fearless.debug.xcconfig */, - 0F48467D97F9D06F83F70894 /* Pods-fearlessAll-fearless.dev.xcconfig */, - E357E95FDDBF8F3938402145 /* Pods-fearlessAll-fearless.release.xcconfig */, - 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */, - EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */, - 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */, - ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */, - 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */, - 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */, + 1F03612B61CDE654A7AFAC21 /* Pods-fearlessAll-fearless.debug.xcconfig */, + 9981A1A70BCCB1B1644A7CE0 /* Pods-fearlessAll-fearless.dev.xcconfig */, + 7A269FFAB51579A58387BD00 /* Pods-fearlessAll-fearless.release.xcconfig */, + C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */, + 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */, + 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */, + 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */, + 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */, + D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */, ); path = Pods; sourceTree = ""; }; + 289549035B3DBF4E3B283D2E /* DappBrowserList */ = { + isa = PBXGroup; + children = ( + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */, + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */, + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */, + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */, + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */, + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */, + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */, + ); + path = DappBrowserList; + sourceTree = ""; + }; 28CCC9C191E2305B65727756 /* NodeSelection */ = { isa = PBXGroup; children = ( @@ -7069,24 +8130,6 @@ path = ExportMnemonicConfirm; sourceTree = ""; }; - 2DF924A75A7F31CD79261A40 /* MultichainAssetSelection */ = { - isa = PBXGroup; - children = ( - FAB90CEB2C6F5B2100D13804 /* ViewModel */, - FAB90CE72C6F582C00D13804 /* View */, - FA4B75AC2C6F325E001B954F /* AssetFetching */, - FA4B75AB2C6F3233001B954F /* ChainSelection */, - D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */, - 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */, - 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */, - 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */, - 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */, - 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */, - 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */, - ); - path = MultichainAssetSelection; - sourceTree = ""; - }; 2E04CA9A3624EA1AD62722E8 /* WalletOption */ = { isa = PBXGroup; children = ( @@ -7124,6 +8167,23 @@ path = StakingRewardDetails; sourceTree = ""; }; + 37720679F35B0EF1AAE4E483 /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBB4291D0EAF00E6F106 /* Models */, + 0723ED9E2C48E35600880620 /* Flows */, + FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */, + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */, + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */, + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */, + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */, + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */, + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */, + ); + path = Transfer; + sourceTree = ""; + }; 3C30D61B22D5AB28B6EBED5C /* PolkaswapAdjustment */ = { isa = PBXGroup; children = ( @@ -7223,10 +8283,23 @@ path = NftCollection; sourceTree = ""; }; + 4728D679CE010F910E5F12EC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + FA38C9C927630595005C5577 /* Models */, + 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */, + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */, + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */, + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */, + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; 478C62A42D572C8647512722 /* LiquidityPoolDetails */ = { isa = PBXGroup; children = ( - FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */, FA6ECE722BF49BE300481B2B /* ViewModel */, 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */, 28E3B4BA1160B87C435C2AAF /* LiquidityPoolDetailsRouter.swift */, @@ -7288,6 +8361,7 @@ F43A8A93265B9C8700A8A5A8 /* View */, F28EDDF9277242505FDDECA1 /* CustomValidatorListProtocols.swift */, 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */, + 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */, 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */, F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */, ); @@ -7417,21 +8491,6 @@ path = ChainAccountBalance; sourceTree = ""; }; - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */ = { - isa = PBXGroup; - children = ( - FA38C9C927630595005C5577 /* ViewModels */, - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */, - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */, - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */, - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */, - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */, - 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */, - ); - path = WalletSendConfirm; - sourceTree = ""; - }; 64FCC7EEABFD71322F5AB7AF /* CustomValidators */ = { isa = PBXGroup; children = ( @@ -7517,7 +8576,9 @@ 749EAA035EECE4D63C56C358 /* LiquidityPoolSupplyConfirm */, 48EAF80DCC0C537917FC5A23 /* LiquidityPoolRemoveLiquidity */, BDB80385E6818AE7707DDFF8 /* LiquidityPoolRemoveLiquidityConfirm */, - D8D6C7AD682F80950E731020 /* MultichainAssetSelection */, + FBD5D2C2BD7B0632C232E4CF /* Transfer */, + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */, + 70891280ED837AB71A90AB0B /* FeatureToggleList */, ); path = Modules; sourceTree = ""; @@ -7549,6 +8610,13 @@ path = Flow; sourceTree = ""; }; + 70891280ED837AB71A90AB0B /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + ); + path = FeatureToggleList; + sourceTree = ""; + }; 7100EDE40D25E1075DD151C3 /* WalletTransactionHistory */ = { isa = PBXGroup; children = ( @@ -7720,6 +8788,7 @@ 84155DE8253980D700A27058 /* Services */ = { isa = PBXGroup; children = ( + 071606C52C7C6C3200C1DF75 /* PricesService.swift */, FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */, 841AAC2B26F7311200F0A25E /* RemoteSubscription */, 84D1110A26B922C10016D962 /* ChainRegistry */, @@ -7732,7 +8801,6 @@ 84BE209D25E85CCA00B4748C /* ServiceCoordinator.swift */, 076D9D5F29504BA3002762E3 /* PolkaswapSettingsSyncService.swift */, 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */, - C6182B4B2C6474F30089558D /* PricesService.swift */, ); path = Services; sourceTree = ""; @@ -7811,6 +8879,7 @@ 8428764224ADDE0200D91AD8 /* Profile */ = { isa = PBXGroup; children = ( + 8493D0DD26FE5D0800A28008 /* Model */, 8428764624ADDE0200D91AD8 /* ViewModel */, 8428764A24ADDE0200D91AD8 /* View */, 8428764D24ADDE0200D91AD8 /* ProfileProtocol.swift */, @@ -7842,6 +8911,8 @@ 8428764C24ADDE0200D91AD8 /* ProfileTableViewCell.xib */, 8467FD4224ED5F46005D486C /* ProfileSectionTableViewCell.swift */, 8467FD4424ED5F60005D486C /* ProfileSectionTableViewCell.xib */, + 8467FD4824ED64A5005D486C /* ProfileDetailsTableViewCell.swift */, + 8467FD4624ED6496005D486C /* ProfileDetailsTableViewCell.xib */, 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */, ); path = View; @@ -8050,6 +9121,7 @@ 8436EDE0258957B3004D9E97 /* PurchaseProvider */ = { isa = PBXGroup; children = ( + FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */, 8436EDE125895804004D9E97 /* RampProvider.swift */, 8436EDE625895846004D9E97 /* PurchaseProvider.swift */, 8436EDEE25896722004D9E97 /* PurchaseAggregator+Default.swift */, @@ -8129,6 +9201,7 @@ F4488CF126143E0000AEE6DB /* EraRewardPoints.swift */, 8454C21C2632A78900657DAD /* EventRecord.swift */, 8454C2642632B0EF00657DAD /* EventCodingPath.swift */, + 8454C2692632B8CE00657DAD /* BalanceDepositEvent.swift */, 84939B1726E1690D000111DA /* TreasuryDepositEvent.swift */, 8473D3FF2657E8BB00B394B2 /* CrowdloanFunds.swift */, 8473D4072657E9AD00B394B2 /* CrowdloanLastContribution.swift */, @@ -8147,6 +9220,7 @@ FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */, FA25698A274CE61000875A53 /* MultiSignature+CryptoType.swift */, 843910B8253EFB8100E3C217 /* StorageKeyFactory+Implicit.swift */, + 849E0CCF25CFDDB700B33506 /* StorageUpdateData+Decoding.swift */, 845BB8BF25E4508800E5FCDC /* SS58FactoryExtensions.swift */, 842349C42624E98C0066ACFE /* MultiAddress+Query.swift */, 84A617252625AF51007B75E1 /* RuntimeMetadata+Internal.swift */, @@ -8227,6 +9301,7 @@ 843F65782658548A00829C14 /* Model */ = { isa = PBXGroup; children = ( + FA256A38274CE80100875A53 /* CrowdloanAddMemoParam.swift */, 843F6579265854A700829C14 /* CrowdloanDisplayInfo.swift */, 848EAEAF2659310A00676CEA /* CrowdloanStatus.swift */, 8473D4202657FFFB00B394B2 /* Crowdloan.swift */, @@ -8247,6 +9322,7 @@ 8472975C260B1B71009B86D0 /* ExistingBonding.swift */, 84403D8725E92A9C00494FD4 /* InitiatedBonding.swift */, AE7129C02608CAE7000AA3F5 /* NetworkStakingInfo.swift */, + 841E6AF525EC12100007DDFE /* PreparedNomination.swift */, 845BB8D525E461FC00E5FCDC /* RewardDestination.swift */, 841E6AFD25EC12DE0007DDFE /* SelectedValidatorInfo.swift */, 8425EB1A25EADD8600C307C9 /* StakingConstants.swift */, @@ -8276,6 +9352,7 @@ 07F2B75A28A6533900280C38 /* assets.json */, 076D9D6129506CE3002762E3 /* polkaswapSettings.json */, 07F2B75B28A6535B00280C38 /* chains.json */, + 07230EB02C7456B900B92466 /* dapps.json */, 07C3397029178D390057C4A5 /* types.json */, 84452F7025D5E2B300F47EC5 /* runtime-westend.json */, 84452F7125D5E2B300F47EC5 /* runtime-polkadot.json */, @@ -8375,16 +9452,22 @@ isa = PBXGroup; children = ( FA74359E29C073790085A47E /* ChainSettingsMapper.swift */, - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */, 84CA68DE26BEAA0F003B9453 /* ChainModelMapper.swift */, 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */, FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */, 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */, - C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */, ); path = EntityToModel; sourceTree = ""; }; + 84585A32251CE1BF00390F7A /* Contacts */ = { + isa = PBXGroup; + children = ( + 84FAB0772543791A00319F74 /* ContactContext.swift */, + ); + path = Contacts; + sourceTree = ""; + }; 845BB8B625E4464D00E5FCDC /* ExtrinsicService */ = { isa = PBXGroup; children = ( @@ -8457,7 +9540,9 @@ 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */, 8436E94326C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift */, 07F2B76228ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift */, + 8436E94526C85405003D4EA7 /* RuntimeSnapshot.swift */, 844CB57126F9EB2000396E13 /* RuntimeCodingService.swift */, + FAADF71129C47D10002B6D39 /* RuntimeSpecVersion.swift */, ); path = RuntimeProviderPool; sourceTree = ""; @@ -8489,12 +9574,15 @@ isa = PBXGroup; children = ( 07BF3D952B3D8B3A0046ABF4 /* PriceDataSource.swift */, + 07230EAA2C73515E00B92466 /* DappDataSource.swift */, + FA4B92B72844D2360003BCEF /* CoingeckoPricesSource.swift */, 84EE6826264AD37B0026E6D3 /* Rewards */, 8463A71E25E39E07003B8160 /* StorageProviderSource.swift */, 8472C600265D7A1F00E2481B /* WebSocketProviderSource.swift */, 84F4386F25D9BC3900AEDA56 /* EmptyStreamableSource.swift */, 843F657026584D2C00829C14 /* JsonSingleProviderSource.swift */, F4C086C626D1159E00716AEC /* SubqueryEraStakersInfoSource.swift */, + AEAC68FD26EA3C2A00346599 /* CoingeckoPriceSource.swift */, ); path = Sources; sourceTree = ""; @@ -8528,6 +9616,7 @@ children = ( 8467FCFB24E5C3BD005D486C /* URLHandlingService.swift */, 8467FCFD24E5C50B005D486C /* KeystoreImportService.swift */, + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */, ); path = URLHandling; sourceTree = ""; @@ -8626,6 +9715,8 @@ 843910B5253EE62B00E3C217 /* DataProviderChange+Result.swift */, 8434C9E525403686009E4191 /* CDTransactionHistoryItem+CoreDataDecodable.swift */, 84FAB0642542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift */, + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */, + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */, 2A66CF4E25D109770006E4C1 /* CDPhishingItem+CoreDataDecodable.swift */, 84452FA425D679F200F47EC5 /* CDRuntimeMetadataItem+CoreDataCodable.swift */, 84786E1E25FA6C390089DFF7 /* CDStashItem+CoreDataCodable.swift */, @@ -8712,13 +9803,18 @@ 8470D6CE253E31FB009E9A5D /* StorageSubscription */ = { isa = PBXGroup; children = ( + FA2569A4274CE6AD00875A53 /* BalanceLockSubscription.swift */, FA2569A2274CE6AD00875A53 /* Overrides */, + 8470D6CC253E3170009E9A5D /* AccountInfoSubscription.swift */, 843910C0253F36F300E3C217 /* BaseStorageChildSubscription.swift */, 8470D6D1253E3382009E9A5D /* StorageSubscriptionContainer.swift */, 8470D6CF253E321C009E9A5D /* StorageSubscriptionProtocols.swift */, 8470D6D3253E35F0009E9A5D /* StorageUpdate.swift */, + 84FD3DB62540EF0700A234E3 /* TransactionSubscription.swift */, + 84F30E9625FD3C5300039D09 /* EventEmittingStorageSubscription.swift */, 84F30E9B25FD3DBC00039D09 /* EmptyHandlingStorageSubscription.swift */, 84F30EA025FD3EE700039D09 /* ChildSubscriptionFactory.swift */, + 8454C26E2632BBAA00657DAD /* ExtrinsicProcessing.swift */, ); path = StorageSubscription; sourceTree = ""; @@ -8798,6 +9894,8 @@ 84893BFF24DA8600008F6A3F /* Model */ = { isa = PBXGroup; children = ( + FACACE1027BCF104005422EE /* MetaAccountCreationMetadata.swift */, + 84893C0224DA8641008F6A3F /* AccountCreationRequest.swift */, 84893C0424DA8663008F6A3F /* AccountCreationError.swift */, C661B3B527E2E7AB005F1F7D /* AccountCreateChainType.swift */, C600C4D828054A1B00111316 /* AccountCreateFlow.swift */, @@ -8855,7 +9953,8 @@ 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, 849013A924A80984008F705E /* Products */, 2698CD398B0412EB85D620AB /* Pods */, - C278E98FD96B1805C96BD127 /* Frameworks */, + 84CFF1CA26526C4700DB7CF7 /* Recovered References */, + 900558FC038333522F24E367 /* Frameworks */, ); sourceTree = ""; }; @@ -8872,6 +9971,7 @@ 849013AA24A80984008F705E /* fearless */ = { isa = PBXGroup; children = ( + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */, FA8644342767AB7E00956D8E /* CoreLayer */, FA38C9A227606FDD005C5577 /* ApplicationLayer */, 8490141D24A93027008F705E /* Fonts */, @@ -8948,6 +10048,8 @@ 849013D224A9268D008F705E /* Modules */ = { isa = PBXGroup; children = ( + 0701B9642C78FAF000DCD395 /* LiquidityPools */, + 0701B8962C78F34A00DCD395 /* AccountStatistics */, FAD067AF2C2044B10050291F /* AssetManagement */, FA1D51D42BCFD410001353E7 /* LiquidityPools */, FA34EEC82B98723B0042E73E /* BalanceLocksDetail */, @@ -8966,13 +10068,11 @@ FA8F6383298253ED004B8CD4 /* AddConnection */, FAADC1AE2926597400DA9903 /* ScanQR */, FAC0BBC4291D0EB000E6F106 /* SelectAsset */, - FAC0BBB3291D0EAF00E6F106 /* Send */, FA2FC7CC28B3807C00CC0A42 /* StakingPool */, 07DE95BE28A169A500E9C2CB /* AssetListSearch */, 07DE95AB28A1119400E9C2CB /* BalanceInfo */, 070B2C4D289CE43A00F78F82 /* SelectNetwork */, FA4B92A12844D0E60003BCEF /* SelectCurrency */, - FA99423828053C8600D771E5 /* SelectExportAccount */, C6264C262799A54400FCA0DB /* WalletDetails */, 8438C486265649F800047E3F /* Crowdloan */, 8428767524AE046300D91AD8 /* About */, @@ -9015,8 +10115,13 @@ 45C94A390068322611CA7C02 /* SwapTransactionDetail */, DA46895F73B0FB1064146E47 /* AssetNetworks */, 0AEF32A92BEEDB9B5A60A433 /* ClaimCrowdloanRewards */, - 8E7E74939224B5DA444D4AFA /* AccountStatistics */, - 2DF924A75A7F31CD79261A40 /* MultichainAssetSelection */, + 07B56CFB2C53C45100E924AA /* Transfer */, + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */, + AD55C5CD2FE0946A08730F0A /* DappBrowser */, + 289549035B3DBF4E3B283D2E /* DappBrowserList */, + AE187612EF3DE462ED577B3E /* FeatureToggleList */, + EA050F0D10984D982C31B98F /* ConnectedAccounts */, + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */, ); path = Modules; sourceTree = ""; @@ -9040,6 +10145,11 @@ 849013D724A927E2008F705E /* Extension */ = { isa = PBXGroup; children = ( + 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */, + 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */, + 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */, + 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */, + 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */, FA5085AA2C33C6D4002DF97D /* SafeArray.swift */, FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */, FACD427E2A5BE7D8009975AA /* JSONRPCOperation+Result.swift */, @@ -9073,11 +10183,8 @@ FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */, FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */, FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */, - FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */, - FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */, - FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */, - FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */, - FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */, + 0778A1292C5763D6008A1254 /* Task.swift */, + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */, ); path = Extension; sourceTree = ""; @@ -9108,7 +10215,6 @@ 843910AF253ED36C00E3C217 /* ChainStorageItem.swift */, 84893C0624DA890F008F6A3F /* CommonError.swift */, 84FAB0622542C8D600319F74 /* ContactItem.swift */, - 84729740260A9C13009B86D0 /* DisplayAddress.swift */, 84754CA12513DB8800854599 /* EmptyAccountIcon.swift */, 84F2FF0625E7AF8F008338D5 /* EraValidatorInfo.swift */, 84F4A9172550331D000CF0A3 /* ExportOption.swift */, @@ -9123,6 +10229,7 @@ 84786E1925FA6A470089DFF7 /* StashItem.swift */, 84B71DE4260B90270003A100 /* SubstrateAlias.swift */, 845BB8DA25E462B100E5FCDC /* SubstrateConstansts.swift */, + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */, 075C646F28098AFB00A55094 /* EthereumConstants.swift */, 842876AF24AE059700D91AD8 /* SupportData.swift */, 849014A524AA801B008F705E /* TextSharingSource.swift */, @@ -9159,13 +10266,13 @@ FAAA29562B8DED770089AFE6 /* MapKeyType.swift */, FA34EEF02B9875CC0042E73E /* AccountIdVariant.swift */, FAC6CD852BA7F9990013A17E /* Pagination.swift */, + 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */, FAC6CD892BA7FA4B0013A17E /* AssetTransactionData.swift */, FAC6CD8B2BA7FA6C0013A17E /* AmountDecimal.swift */, FAC6CD8D2BA7FBD30013A17E /* WalletHistoryRequest.swift */, FAC6CD8F2BA7FCA70013A17E /* AssetTransactionFee.swift */, FAC6CD992BA809160013A17E /* ReceiveInfo.swift */, FAC6CDA02BA80CB10013A17E /* WalletTransactionType.swift */, - FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */, ); path = Model; sourceTree = ""; @@ -9185,6 +10292,7 @@ children = ( 8490140324A92F6D008F705E /* ViewModel */, 8490140224A92F6D008F705E /* OnboardingMainViewController.swift */, + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */, 8490140624A92F6D008F705E /* OnbordingMain.xib */, 8490140824A92F6D008F705E /* OnboardingMainPresenter.swift */, 8490140924A92F6D008F705E /* OnboardingMainViewFactory.swift */, @@ -9258,6 +10366,7 @@ isa = PBXGroup; children = ( 8490145124A93FD1008F705E /* FearlessLoadingViewFactory.swift */, + 8490145024A93FD1008F705E /* FearlessLoadingViewPresenter.swift */, ); path = LoadingView; sourceTree = ""; @@ -9329,6 +10438,9 @@ 8490145424A9403C008F705E /* Helpers */ = { isa = PBXGroup; children = ( + 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */, + 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */, + 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */, FAD067982C2043FC0050291F /* ChainConnectionVisibilityHelper.swift */, FAD067972C2043FC0050291F /* WalletAssetsObserver.swift */, FA286AF42A3043C3008BD527 /* ConvenienceError.swift */, @@ -9358,8 +10470,6 @@ 84B677D526AED45500863DC6 /* SharedList.swift */, 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */, 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */, - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */, - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */, 844CB57926FA706C00396E13 /* ChainAssetDisplayInfo.swift */, C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */, 07F2B75E28AA183C00280C38 /* PrintTimer.swift */, @@ -9369,9 +10479,6 @@ FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */, FA584C792AB2BFE300F6F020 /* MediaType.swift */, FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */, - C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */, - C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */, - C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */, ); path = Helpers; sourceTree = ""; @@ -9434,9 +10541,11 @@ 845CB6FE2627633A005F798B /* Longrun */, 8490148324AA27C1008F705E /* OperationManagerFacade.swift */, 84A2C90324E07F400020D3B7 /* AccountOperationFactoryError.swift */, + 843910C8253F591D00E3C217 /* ScaleDecoderOperation.swift */, 848FFE8225E686C200652AA5 /* StorageDecodingOperation.swift */, 848FFE8F25E6CF4300652AA5 /* StorageKeyEncodingOperation.swift */, 84F2FEF925E797E8008338D5 /* StorageRequestFactory.swift */, + 840D891C26242AE500AB231B /* StorageRequestParams.swift */, 84E6D57B262E2CE8000EA3F5 /* OperationCombiningService.swift */, AE4623712719A85900E4FD30 /* MetaAccountOperationFactory.swift */, ); @@ -9446,6 +10555,7 @@ 8490147C24AA14AF008F705E /* Crypto */ = { isa = PBXGroup; children = ( + FA256986274CE5B700875A53 /* SHA256.swift */, 84C74364251E4D60009576C6 /* SigningWrapperProtocol.swift */, 8467FD2924EA6C62005D486C /* SigningWrapper.swift */, 84C74362251E4C2F009576C6 /* DummySigner.swift */, @@ -9461,7 +10571,8 @@ 8490149D24AA7F9A008F705E /* View */ = { isa = PBXGroup; children = ( - FA01B2BA2C6213740078A35B /* InfoTitleView.swift */, + 0701B8B02C78F63400DCD395 /* AccountScore */, + 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */, FA1D02032BBE71F2005B7071 /* TokenPairIconsView.swift */, FA34EE9D2B9871BD0042E73E /* TriangularedTitleMultiValueView.swift */, FAD429312A865695001D6A16 /* CheckboxButton.swift */, @@ -9549,7 +10660,8 @@ FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */, FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */, FA887A482C1C19DB00CA720F /* WarningView.swift */, - FAF600782C48F11200E56558 /* AccountScore */, + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */, + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */, ); path = View; sourceTree = ""; @@ -9633,7 +10745,15 @@ 849014FD24AB698B008F705E /* Wallet */ = { isa = PBXGroup; children = ( + FAC6CDA52BA814020013A17E /* AccountList */, FA8F63A429825C90004B8CD4 /* Receive */, + 84585A32251CE1BF00390F7A /* Contacts */, + 8490151924ABC343008F705E /* History */, + 849E2330254AEF9F00B1F6D4 /* InvoiceScan */, + 84D97ECD2521CA2100F07405 /* View */, + 8490150E24AB8A3A008F705E /* WalletEmptyStateDataSource.swift */, + 8490150824AB8A3A008F705E /* WalletEmptyStateDataSource+Module.swift */, + 8490152024ABC721008F705E /* WalletStaticImageViewModel.swift */, ); path = Wallet; sourceTree = ""; @@ -9655,24 +10775,33 @@ path = Network; sourceTree = ""; }; + 8490151924ABC343008F705E /* History */ = { + isa = PBXGroup; + children = ( + 84FB1F782527065A00E0242B /* HistoryConstants.swift */, + ); + path = History; + sourceTree = ""; + }; 8490152C24ABD0EA008F705E /* Wallet */ = { isa = PBXGroup; children = ( 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */, FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */, FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */, + 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */, + 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */, + 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */, + 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */, FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */, 8490152D24ABD0F5008F705E /* Logger+Wallet.swift */, 84FD3DAE2540BEA000A234E3 /* TransactionHistoryItem+Status.swift */, FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */, 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */, FA9A8F082A6FB8F9008FA99F /* AssetTransactionData+EtherscanHistory.swift */, + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */, FA14AE8A2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift */, FA7C9A6D2BA007420031580A /* AssetTransactionData+ArrowsquidHistory.swift */, - FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */, - FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */, - FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */, - FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */, ); path = Wallet; sourceTree = ""; @@ -9717,7 +10846,7 @@ 849244902514EDD900477C1B /* ViewModel */ = { isa = PBXGroup; children = ( - FAF6007D2C48FC2A00E56558 /* AccountScore */, + 0701B8BE2C78F6C300DCD395 /* AccountScore */, FA1D02052BBE71F9005B7071 /* TokenPairsIconViewModel.swift */, 0702B3162970182B003519F5 /* Amount */, FAA013A028DA1328000A5230 /* StakeAmountViewModel.swift */, @@ -9741,6 +10870,14 @@ path = ViewModel; sourceTree = ""; }; + 8493D0DD26FE5D0800A28008 /* Model */ = { + isa = PBXGroup; + children = ( + 8428765E24ADE0BB00D91AD8 /* UserSettings.swift */, + ); + path = Model; + sourceTree = ""; + }; 8493D3E727059B2B00157009 /* Services */ = { isa = PBXGroup; children = ( @@ -9768,19 +10905,44 @@ path = StakingRewardDestinationSetup; sourceTree = ""; }; + 8494D85C25246E7D00614D8F /* ViewModel */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModel; + sourceTree = ""; + }; 8494D86E2525316500614D8F /* Subscan */ = { isa = PBXGroup; children = ( 8494D872252532F600614D8F /* Data */, + 8494D871252532F000614D8F /* Info */, + 8494D86F2525321700614D8F /* SubscanDefinitions.swift */, + 8494D8772525343500614D8F /* SubscanOperationFactory.swift */, + 843461CA26E2590200DCE0CD /* SubscanHistoryOperationFactory.swift */, + 843461CE26E25AD400DCE0CD /* SubscanHistoryItem+Wallet.swift */, ); path = Subscan; sourceTree = ""; }; + 8494D871252532F000614D8F /* Info */ = { + isa = PBXGroup; + children = ( + 84FB1F68252694B600E0242B /* HistoryInfo.swift */, + F4E339622614A03F0028B6B1 /* ExtrinsicsInfo.swift */, + ); + path = Info; + sourceTree = ""; + }; 8494D872252532F600614D8F /* Data */ = { isa = PBXGroup; children = ( + FA2569A0274CE66100875A53 /* SubscanMemoData.swift */, 8494D8792525350000614D8F /* SubscanStatusData.swift */, 8494D87B252537E500614D8F /* SubscanError.swift */, + 84FB1F662526920B00E0242B /* SubscanTransferData.swift */, + 841493DB2604C144000D8D1A /* SubscanRewardData.swift */, + 84F6B6422619A8480038F10D /* SubscanConcreteExtrinsicsData.swift */, 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */, 849ABE852628154900011A2A /* SubscanRawExtrinsicData.swift */, ); @@ -9839,8 +11001,10 @@ 849AFEB826DCCCA900B65924 /* Wallet */ = { isa = PBXGroup; children = ( + 84FAB0662542D06B00319F74 /* WalletContactOperationFactory.swift */, 8418E71F2617602000DCF6C8 /* WalletRemoteHistoryProtocols.swift */, 84FB1F6C2526987D00E0242B /* TransactionHistoryContext.swift */, + 843461CC26E2596E00DCE0CD /* WalletRemoteHistoryFiltering.swift */, FA80391628DD70D7007365E8 /* AccountOperationFactory.swift */, ); path = Wallet; @@ -9864,6 +11028,13 @@ path = ViewModel; sourceTree = ""; }; + 849E2330254AEF9F00B1F6D4 /* InvoiceScan */ = { + isa = PBXGroup; + children = ( + ); + path = InvoiceScan; + sourceTree = ""; + }; 84A2A60826B82B1C000C6C6C /* ValidatorOperationFactory */ = { isa = PBXGroup; children = ( @@ -9960,6 +11131,8 @@ children = ( 844CB56926F9C57D00396E13 /* WalletLocalStorageSubscriber.swift */, 844CB56B26F9C5C900396E13 /* WalletLocalSubscriptionHandler.swift */, + 84CD82AD263C1452001A6F01 /* SubstrateProviderSubscriber.swift */, + 84CD82B2263C30BC001A6F01 /* SubstrateProviderSubscriptionHandler.swift */, 844CB56D26F9CB1500396E13 /* CrowdloanLocalStorageSubscriber.swift */, 844CB56F26F9CB3300396E13 /* CrowdloanLocalSubscriptionHandler.swift */, 84038FEB26FFBA4D00C73F3F /* PriceLocalStorageSubscriber.swift */, @@ -9984,10 +11157,19 @@ FA9278A727C382C600FF7B5B /* MultiassetV2.xcmappingmodel */, FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, + FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; }; + 84CFF1CA26526C4700DB7CF7 /* Recovered References */ = { + isa = PBXGroup; + children = ( + ); + name = "Recovered References"; + sourceTree = ""; + }; 84CFF1CE26526FBC00DB7CF7 /* StakingBondMore */ = { isa = PBXGroup; children = ( @@ -10053,7 +11235,6 @@ 84D1110D26B931C20016D962 /* ChainModel.swift */, 84D1111026B932480016D962 /* AssetModel.swift */, 84D1111226B932C40016D962 /* ChainNodeModel.swift */, - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */, 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */, 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */, ); @@ -10118,6 +11299,7 @@ children = ( FA936BEF2872E35F0059B97A /* TitleSwitchTableViewCellModelFactory.swift */, FA936BF02872E35F0059B97A /* TitleSwitchViewModel.swift */, + FA99423628053C6800D771E5 /* IconWithTitleViewModelFactory.swift */, 84D8F15C24D8178000AF43E9 /* IconWithTitleViewModel.swift */, 84D8F15E24D8179000AF43E9 /* TitleWithSubtitleViewModel.swift */, 84754C9F2513D83E00854599 /* AccountPickerViewModel.swift */, @@ -10126,22 +11308,43 @@ path = ViewModel; sourceTree = ""; }; + 84D97ECD2521CA2100F07405 /* View */ = { + isa = PBXGroup; + children = ( + 8494D85C25246E7D00614D8F /* ViewModel */, + ); + path = View; + sourceTree = ""; + }; 84DA3B1724C8200100B5E27F /* Model */ = { isa = PBXGroup; children = ( + 84DA3B1824C8200E00B5E27F /* ConnectionItem+Default.swift */, 84D8F16E24D8451F00AF43E9 /* CryptoType+ViewModel.swift */, + 84D8F17024D856D300AF43E9 /* SNAddressType+ViewModel.swift */, 843C49E024DFFC9500B71DDA /* AccountImportSource+ViewModel.swift */, 84754C992513871300854599 /* SNAddressType+Codable.swift */, + 84D97EC0251FEE1E00F07405 /* WalletAssetId+Display.swift */, + 84CD356F252620FB0081BC0B /* CryptoType+Extrinsic.swift */, 8460516C25536C4800A1F0B4 /* ExportOption+ViewModel.swift */, 84A259F72555C8C9001E91BC /* CryptoType+Keystore.swift */, ); path = Model; sourceTree = ""; }; + 84DB9E8826409E7200F23DD3 /* View */ = { + isa = PBXGroup; + children = ( + 84DB9E8926409E8200F23DD3 /* StakingRedeemLayout.swift */, + ); + path = View; + sourceTree = ""; + }; 84DB9E8E2640A47500F23DD3 /* ViewModel */ = { isa = PBXGroup; children = ( 84DB9E8F2640A48E00F23DD3 /* StakingRedeemViewModel.swift */, + 84DB9E972640A49E00F23DD3 /* StakingRedeemViewModelFactory.swift */, ); path = ViewModel; sourceTree = ""; @@ -10185,6 +11388,9 @@ 84DED4012666533300A153BB /* CustomCrowdloan */ = { isa = PBXGroup; children = ( + FA256A04274CE7D500875A53 /* Astar */, + FA256A1F274CE7D500875A53 /* CrowdloanAgreementServiceError.swift */, + FA256A1D274CE7D500875A53 /* CrowdloanAgreementServiceProtocol.swift */, FA256A1E274CE7D500875A53 /* CrowdloanBonusServiceProtocol.swift */, FA256A06274CE7D500875A53 /* Moonbeam */, 8444D1352671179000AF6D8C /* Bifrost */, @@ -10240,6 +11446,10 @@ 84EBC54824F660A700459D15 /* Events */ = { isa = PBXGroup; children = ( + FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */, + FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */, + 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */, + 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */, FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */, FACD42792A5BE7C6009975AA /* WalletRemoteSubscriptionWasUpdatedEvent.swift */, FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */, @@ -10260,8 +11470,7 @@ FA37AE4C28603C37001DCA96 /* StakingUpdatedEvent.swift */, FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */, C65C7F6A2AD82B8D0069D877 /* LogoutEvent.swift */, - FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */, - C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */, + 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */, ); path = Events; sourceTree = ""; @@ -10341,6 +11550,7 @@ 8494425D2653301C0016E7BD /* StakingRewardDestinationSetup */, 84EAC2F62642EA05003CC2ED /* StakingRebondConfirmation */, AEE5FB0A264298F3002B8FDC /* StakingRebondSetup */, + 0F353CD57BFACDCEED0B6D07 /* StakingRedeem */, E07E434DE762128EF27B7578 /* StakingUnbondConfirm */, 1DC0AAB0BD0067CC0FDF9B27 /* StakingUnbondSetup */, 3722354DA3C59896C49B5794 /* StakingRewardDetails */, @@ -10428,7 +11638,11 @@ isa = PBXGroup; children = ( 84FB298B2639ABA500BE0FCD /* YourValidatorList.swift */, + 84FB29932639ABD700BE0FCD /* YourValidatorList+SelectionStart.swift */, 84FB29982639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift */, + AEA0C8B9268113F800F9666F /* YourValidatorList+RecommendedList.swift */, + AEA0C8BB2681140700F9666F /* YourValidatorList+CustomList.swift */, + AEA0C8BD2681141700F9666F /* YourValidatorList+SelectedList.swift */, ); path = ChangeValidators; sourceTree = ""; @@ -10490,6 +11704,20 @@ path = CreateContact; sourceTree = ""; }; + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */ = { + isa = PBXGroup; + children = ( + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */, + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */, + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */, + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */, + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */, + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */, + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */, + ); + path = EcosystemOptions; + sourceTree = ""; + }; 8D1ECC1A61E3F7E33FC44649 /* NetworkManagement */ = { isa = PBXGroup; children = ( @@ -10507,20 +11735,14 @@ path = StakingRewardPayouts; sourceTree = ""; }; - 8E7E74939224B5DA444D4AFA /* AccountStatistics */ = { + 900558FC038333522F24E367 /* Frameworks */ = { isa = PBXGroup; children = ( - FA273E5A2C4F679900F9CB13 /* ViewModel */, - 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */, - FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */, - BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */, - 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */, - 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */, - 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */, - 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */, - FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */, + 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */, + FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */, + 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */, ); - path = AccountStatistics; + name = Frameworks; sourceTree = ""; }; 9439C16432098735E8F4C122 /* LiquidityPoolDetails */ = { @@ -10586,6 +11808,22 @@ path = CreateContact; sourceTree = ""; }; + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */ = { + isa = PBXGroup; + children = ( + 0715FCD52C65FC3600AA674E /* Models */, + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */, + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */, + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */, + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */, + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */, + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */, + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */, + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */, + ); + path = TonWebBridge; + sourceTree = ""; + }; A17E1D8ADC21C651CE346F73 /* CrowdloanContributionConfirm */ = { isa = PBXGroup; children = ( @@ -10602,6 +11840,14 @@ path = AccountConfirm; sourceTree = ""; }; + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; A800B16846A754FEDAF801EC /* AssetSelection */ = { isa = PBXGroup; children = ( @@ -10645,6 +11891,53 @@ path = StakingUnbondConfirm; sourceTree = ""; }; + AD55C5CD2FE0946A08730F0A /* DappBrowser */ = { + isa = PBXGroup; + children = ( + 07D0BD3F2C6F0E90001ECD58 /* Cells */, + 07D0BD3C2C6F0C8D001ECD58 /* View */, + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */, + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */, + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */, + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */, + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */, + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */, + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */, + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */, + ); + path = DappBrowser; + sourceTree = ""; + }; + AE1000EF2667981A004753B7 /* ChangeTargets */ = { + isa = PBXGroup; + children = ( + AE1000F126679886004753B7 /* ChangeTargetsRecommendationWireframe.swift */, + ); + path = ChangeTargets; + sourceTree = ""; + }; + AE1000F026679824004753B7 /* InitiatedBonding */ = { + isa = PBXGroup; + children = ( + AE1000F326679946004753B7 /* InitiatedBondingRecommendationWireframe.swift */, + ); + path = InitiatedBonding; + sourceTree = ""; + }; + AE187612EF3DE462ED577B3E /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */, + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */, + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */, + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */, + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */, + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */, + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */, + ); + path = FeatureToggleList; + sourceTree = ""; + }; AE2C845B25EE829E00986716 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -10852,6 +12145,7 @@ isa = PBXGroup; children = ( AEA0C8AD267B818900F9666F /* SelectedValidatorListViewLayout.swift */, + AEA0C8AF267B82BA00F9666F /* SelectedValidatorListHeaderView.swift */, AEA0C8B7267C905500F9666F /* SelectedValidatorCell.swift */, ); path = View; @@ -10878,6 +12172,8 @@ isa = PBXGroup; children = ( AEA0C8A5267B6B2600F9666F /* SelectedValidatorListWireframe.swift */, + AEA0C8C5268131C500F9666F /* InitiatedBondingSelectedValidatorsListWireframe.swift */, + AEA0C8C7268131DD00F9666F /* ChangeTargetsSelectedValidatorsListWireframe.swift */, ); path = Wireframe; sourceTree = ""; @@ -11159,14 +12455,12 @@ path = ConfirmSelectValidators; sourceTree = ""; }; - C278E98FD96B1805C96BD127 /* Frameworks */ = { + C603E80F28583C0500007B72 /* Relaychain */ = { isa = PBXGroup; children = ( - 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */, - C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */, - 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */, + C603E81028583C2A00007B72 /* StakingMainRelaychainStrategy.swift */, ); - name = Frameworks; + path = Relaychain; sourceTree = ""; }; C6264C262799A54400FCA0DB /* WalletDetails */ = { @@ -11268,6 +12562,7 @@ C63CB3232851C59A0071AF26 /* Flow */ = { isa = PBXGroup; children = ( + C603E80F28583C0500007B72 /* Relaychain */, C63CB3242851C5C90071AF26 /* StakingMainFlow.swift */, ); path = Flow; @@ -11367,64 +12662,6 @@ path = Model; sourceTree = ""; }; - C6FBA6E52C743BDD008B18D9 /* okx-dex-aggregator */ = { - isa = PBXGroup; - children = ( - C6FBA6FC2C743D21008B18D9 /* OKXDexAggregatorService.swift */, - C6FBA6E82C743C31008B18D9 /* Network */, - ); - path = "okx-dex-aggregator"; - sourceTree = ""; - }; - C6FBA6E82C743C31008B18D9 /* Network */ = { - isa = PBXGroup; - children = ( - C6FBA6FE2C743D45008B18D9 /* OKXDexRequestSigner.swift */, - C6FBA6F02C743C88008B18D9 /* Response */, - C6FBA6EF2C743C82008B18D9 /* Request */, - ); - path = Network; - sourceTree = ""; - }; - C6FBA6EF2C743C82008B18D9 /* Request */ = { - isa = PBXGroup; - children = ( - C6FBA6F12C743C96008B18D9 /* Parameters */, - ); - path = Request; - sourceTree = ""; - }; - C6FBA6F02C743C88008B18D9 /* Response */ = { - isa = PBXGroup; - children = ( - C6FBA7122C743D5E008B18D9 /* OKXApproveTransaction.swift */, - C6FBA70F2C743D5E008B18D9 /* OKXDexProtocol.swift */, - C6FBA70D2C743D5D008B18D9 /* OKXDexQuote.swift */, - C6FBA7102C743D5E008B18D9 /* OKXDexRouter.swift */, - C6FBA7112C743D5E008B18D9 /* OKXDexSubrouter.swift */, - C6FBA7132C743D5F008B18D9 /* OKXLiquiditySource.swift */, - C6FBA7142C743D5F008B18D9 /* OKXQuote.swift */, - C6FBA70A2C743D5D008B18D9 /* OKXResponse.swift */, - C6FBA70C2C743D5D008B18D9 /* OKXSupportedChain.swift */, - C6FBA70E2C743D5E008B18D9 /* OKXSwap.swift */, - C6FBA7152C743D5F008B18D9 /* OKXSwapTransaction.swift */, - C6FBA70B2C743D5D008B18D9 /* OKXToken.swift */, - ); - path = Response; - sourceTree = ""; - }; - C6FBA6F12C743C96008B18D9 /* Parameters */ = { - isa = PBXGroup; - children = ( - C6FBA7012C743D51008B18D9 /* OKXDexAllTokensRequestParameters.swift */, - C6FBA7022C743D51008B18D9 /* OKXDexApproveRequestParameters.swift */, - C6FBA7032C743D52008B18D9 /* OKXDexLiquiditySourceRequestParameters.swift */, - C6FBA7042C743D52008B18D9 /* OKXDexQuotesRequestParameters.swift */, - C6FBA7002C743D51008B18D9 /* OKXDexSwapRequestParameters.swift */, - ); - path = Parameters; - sourceTree = ""; - }; C7AEDB8341B78EC46F6F98DC /* UsernameSetup */ = { isa = PBXGroup; children = ( @@ -11524,13 +12761,6 @@ path = ReferralCrowdloan; sourceTree = ""; }; - D8D6C7AD682F80950E731020 /* MultichainAssetSelection */ = { - isa = PBXGroup; - children = ( - ); - path = MultichainAssetSelection; - sourceTree = ""; - }; D8F784121F6FDD3BCB25424B /* LiquidityPoolRemoveLiquidity */ = { isa = PBXGroup; children = ( @@ -11567,6 +12797,13 @@ children = ( FA3430F328508BE5002B5975 /* Flow */, 84DB9E8E2640A47500F23DD3 /* ViewModel */, + 84DB9E8826409E7200F23DD3 /* View */, + 2E4B0600AFFB96A75CF98755 /* StakingRedeemProtocols.swift */, + 3A93673EEA8F71E8DDA84557 /* StakingRedeemWireframe.swift */, + BAB2478DE3AF0885A3ED7ED8 /* StakingRedeemPresenter.swift */, + 560C48D7A83F51F001622D71 /* StakingRedeemInteractor.swift */, + DB7F5F9B54BE4234C5682BDE /* StakingRedeemViewController.swift */, + 8821119C96944A0E3526E93A /* StakingRedeemViewFactory.swift */, ); path = StakingRedeem; sourceTree = ""; @@ -11613,6 +12850,7 @@ E08A61668B679B7F2B25AF0E /* AddCustomNode */ = { isa = PBXGroup; children = ( + FAE5F62D27B2383200F13206 /* ViewModel */, D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */, B0968457BE5556B46D789C30 /* AddCustomNodeWireframe.swift */, D5B7937620F4339EE948EC25 /* AddCustomNodePresenter.swift */, @@ -11671,6 +12909,22 @@ path = WalletsManagment; sourceTree = ""; }; + EA050F0D10984D982C31B98F /* ConnectedAccounts */ = { + isa = PBXGroup; + children = ( + 0728BD142C984D86002369FD /* View */, + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */, + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */, + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */, + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */, + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */, + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */, + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */, + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */, + ); + path = ConnectedAccounts; + sourceTree = ""; + }; EE3CBEFADE55F44DE05DCEF2 /* LiquidityPoolSupply */ = { isa = PBXGroup; children = ( @@ -11718,6 +12972,14 @@ path = LiquidityPoolRemoveLiquidityConfirm; sourceTree = ""; }; + F400A7C0260CE1560061D576 /* Model */ = { + isa = PBXGroup; + children = ( + F400A7C1260CE1670061D576 /* StakingRewardStatus.swift */, + ); + path = Model; + sourceTree = ""; + }; F406B0E426299E25004FDCCC /* ErrorView */ = { isa = PBXGroup; children = ( @@ -11888,6 +13150,7 @@ F4433D5E26C166470002A91E /* AnalyticsValidatorsView.swift */, F4433D6626C1668E0002A91E /* AnalyticsValidatorsHeaderView.swift */, F4433D6E26C1696A0002A91E /* AnalyticsValidatorsCell.swift */, + F471897A26C29A78006487AD /* AnalyticsValidatorsPageSelector.swift */, ); path = View; sourceTree = ""; @@ -12103,6 +13366,7 @@ F4DCAE4526207ECD00CCA6BF /* PayoutRewardsService */ = { isa = PBXGroup; children = ( + FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */, FA7D46CE2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift */, FAFFAEAA29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift */, FAFFAEA929AC90E50074AF1F /* SubsquidPayoutValidatorsForNominatorFactory.swift */, @@ -12334,6 +13598,7 @@ isa = PBXGroup; children = ( FA25698D274CE65100875A53 /* HTTPRequest.swift */, + FA25698E274CE65100875A53 /* DashcaseJSONEncoder.swift */, FA25698F274CE65100875A53 /* AnyCodingKey.swift */, FA256990274CE65100875A53 /* Builder */, ); @@ -12367,20 +13632,53 @@ path = BottomSheet; sourceTree = ""; }; + FA256A04274CE7D500875A53 /* Astar */ = { + isa = PBXGroup; + children = ( + FA256A05274CE7D500875A53 /* AstarBonusService.swift */, + ); + path = Astar; + sourceTree = ""; + }; FA256A06274CE7D500875A53 /* Moonbeam */ = { isa = PBXGroup; children = ( + FA256A08274CE7D500875A53 /* Models */, + FA256A13274CE7D500875A53 /* MoonbeamHTTPHeadersBuilder.swift */, + FA256A14274CE7D500875A53 /* Requests */, + FA256A1B274CE7D500875A53 /* MoonbeamJSONDecoder.swift */, + FA256A1C274CE7D500875A53 /* MoonbeamJSONEncoder.swift */, ); path = Moonbeam; sourceTree = ""; }; - FA273E5A2C4F679900F9CB13 /* ViewModel */ = { + FA256A08274CE7D500875A53 /* Models */ = { isa = PBXGroup; children = ( - FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */, - FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */, + FA256A09274CE7D500875A53 /* MoonbeamMakeSignatureInfo.swift */, + FA256A0A274CE7D500875A53 /* MoonbeamAgreeRemarkInfo.swift */, + FA256A0B274CE7D500875A53 /* MoonbeamGuidinfoInfo.swift */, + FA256A0C274CE7D500875A53 /* MoonbeamAgreeRemarkData.swift */, + FA256A0D274CE7D500875A53 /* MoonbeamMakeSignatureData.swift */, + FA256A0E274CE7D500875A53 /* MoonbeamCheckRemarkData.swift */, + FA256A0F274CE7D500875A53 /* MoonbeamVerifyRemarkData.swift */, + FA256A10274CE7D500875A53 /* MoonbeamVerifyRemarkInfo.swift */, + FA256A11274CE7D500875A53 /* MoonbeamCheckRemarkInfo.swift */, ); - path = ViewModel; + path = Models; + sourceTree = ""; + }; + FA256A14274CE7D500875A53 /* Requests */ = { + isa = PBXGroup; + children = ( + FA256A15274CE7D500875A53 /* MoonbeamMakeSignatureRequest.swift */, + FA256A16274CE7D500875A53 /* MoonbeamVerifyRemarkRequest.swift */, + FA256A17274CE7D500875A53 /* MoonbeamAgreeRemarkRequest.swift */, + FA256A18274CE7D500875A53 /* MoonbeamCheckRemarkRequest.swift */, + FA256A19274CE7D500875A53 /* MoonbeamGuidInfoRequest.swift */, + FA256A1A274CE7D500875A53 /* MoonbeamHealthRequest.swift */, + ); + path = Requests; sourceTree = ""; }; FA286AF62A3043DB008BD527 /* CrossChainConfirmation */ = { @@ -12429,7 +13727,7 @@ FA2DF9962A8C97170047F440 /* NFT */ = { isa = PBXGroup; children = ( - FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */, + 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */, FA6261F32AC2C7A8005D3D95 /* NFTOperationFactoryProtocol.swift */, FA584C7B2AB3071E00F6F020 /* AlchemyNFTOperationFactory.swift */, ); @@ -12628,6 +13926,7 @@ FA2FC82028B380C500CC0A42 /* StakingPoolRoles.swift */, FA2FC82128B380C500CC0A42 /* StakingPoolMember.swift */, FA2FC82228B380C500CC0A42 /* StakingPool.swift */, + FA80391428DC2DA2007365E8 /* StakingPoolPalletID.swift */, ); path = StakingPools; sourceTree = ""; @@ -12667,36 +13966,11 @@ FA3067292B6246BD006A0BA5 /* Storage */ = { isa = PBXGroup; children = ( - FAD067AA2C2044810050291F /* Keys */, - FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */, - FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */, - FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */, - FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */, - FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */, - FAAA29452B8DCF250089AFE6 /* RequestFactory */, - FAAA29382B8DCED90089AFE6 /* StorageFactoryWorkers */, - FAAA292B2B8DCE590089AFE6 /* StorageRequestWorkers */, - FA3067342B6256E6006A0BA5 /* ResponseDecoders */, - ); - path = Storage; - sourceTree = ""; - }; - FA3067342B6256E6006A0BA5 /* ResponseDecoders */ = { - isa = PBXGroup; - children = ( - FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */, - FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */, - FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */, - FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */, - FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */, - ); - path = ResponseDecoders; - sourceTree = ""; - }; - FA30673A2B625806006A0BA5 /* Storage */ = { - isa = PBXGroup; - children = ( - FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */, + FA8B02102D375A730066F070 /* Keys */, + FAC71CC92D363FFE00122E95 /* Async */, + FAC71CCB2D363FFE00122E95 /* Helpers */, + FAC71CD22D363FFE00122E95 /* Models */, + FAC71CDD2D363FFE00122E95 /* Operation */, ); path = Storage; sourceTree = ""; @@ -12999,12 +14273,13 @@ FA38C9A227606FDD005C5577 /* ApplicationLayer */ = { isa = PBXGroup; children = ( + 0778A12C2C58D0E1008A1254 /* Ton */, + 07A949852C47C38600613B9D /* ServiceAssembly */, FA22228B2BD237850031DE04 /* Pricing */, FA34EE8D2B98710C0042E73E /* Models */, FA34EE8A2B9870FE0042E73E /* ComponentFactories */, FA7741D32B6A350200358315 /* StakingRewards */, FA9A8F0A2A72573C008FA99F /* Alchemy */, - FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */, FA17B4D027E9CF21006E0735 /* FearlessApplication.swift */, FA17B4CF27E9CF21006E0735 /* main.swift */, 078E34C028058B9D00DF187A /* DocumentType.swift */, @@ -13017,8 +14292,11 @@ FA38C9A32760700B005C5577 /* Services */ = { isa = PBXGroup; children = ( - C6FBA6E52C743BDD008B18D9 /* okx-dex-aggregator */, - FAD5FF232C463BEE003201F5 /* AccountStatistics */, + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */, + 0701B8CD2C78F71800DCD395 /* AccountStatistics */, + 0701B8C52C78F71800DCD395 /* Models */, + 0701B8E52C78F71800DCD395 /* okx-dex-aggregator */, + 07C438D52C638AE400475B14 /* TonConnect */, FA09AD332C37AB9400BE0B9C /* TransactionObserver */, FA34EE902B98711F0042E73E /* CrowdloanService.swift */, FA34EE912B9871200042E73E /* Onboarding */, @@ -13037,14 +14315,13 @@ path = Services; sourceTree = ""; }; - FA38C9C927630595005C5577 /* ViewModels */ = { + FA38C9C927630595005C5577 /* Models */ = { isa = PBXGroup; children = ( - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */, FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */, FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */, ); - path = ViewModels; + path = Models; sourceTree = ""; }; FA3F5B0D281A650300BEF03B /* Flow */ = { @@ -13077,48 +14354,6 @@ path = Parachain; sourceTree = ""; }; - FA41B61E2C64951300D0713A /* 5ire */ = { - isa = PBXGroup; - children = ( - FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */, - ); - path = 5ire; - sourceTree = ""; - }; - FA41B6272C64C14500D0713A /* Viscan */ = { - isa = PBXGroup; - children = ( - FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */, - ); - path = Viscan; - sourceTree = ""; - }; - FA4B098C2C4674C9001B73F9 /* Request */ = { - isa = PBXGroup; - children = ( - FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */, - ); - path = Request; - sourceTree = ""; - }; - FA4B75AB2C6F3233001B954F /* ChainSelection */ = { - isa = PBXGroup; - children = ( - FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */, - FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */, - ); - path = ChainSelection; - sourceTree = ""; - }; - FA4B75AC2C6F325E001B954F /* AssetFetching */ = { - isa = PBXGroup; - children = ( - FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */, - FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */, - ); - path = AssetFetching; - sourceTree = ""; - }; FA4B929C2844D0C80003BCEF /* SyntaxSugar */ = { isa = PBXGroup; children = ( @@ -13172,21 +14407,23 @@ FA5137B329AC76EB00560EBA /* Main */ = { isa = PBXGroup; children = ( + 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */, + 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */, + 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */, + 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */, + 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */, 07BF3D932B3D873F0046ABF4 /* OklinkHistoryOperationFactory.swift */, FA5137B429AC76EB00560EBA /* SubqueryHistoryOperationFactory.swift */, + 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */, FA5137B529AC76EB00560EBA /* GiantsquidHistoryOperationFactory.swift */, FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */, FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */, - 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */, + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */, FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */, FA9A8F012A6F91BA008FA99F /* EtherscanHistoryOperationFactory.swift */, FAE5858E2B0764EC00240FE1 /* SoraSubsquidHistoryOperationFactory.swift */, FA8800532B2C5D91000AE5EB /* ReefSubsquidHistoryOperationFactory.swift */, FA7C9A6B2BA004E80031580A /* ArrowsquidHistoryOperationFactory.swift */, - FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */, - FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */, - FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */, - FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */, ); path = Main; sourceTree = ""; @@ -13349,6 +14586,7 @@ FA6C175B29935DC700A55254 /* History */ = { isa = PBXGroup; children = ( + 073DE30D2C5BA34A003B4990 /* Models */, FAFFAE3229AC84180074AF1F /* Staking */, FA5137B329AC76EB00560EBA /* Main */, ); @@ -13482,17 +14720,25 @@ FA7336BC2A0E3B7F0096A291 /* ComponentFactories */ = { isa = PBXGroup; children = ( - FA30673A2B625806006A0BA5 /* Storage */, ); path = ComponentFactories; sourceTree = ""; }; + FA7336C52A0E3B870096A291 /* Network */ = { + isa = PBXGroup; + children = ( + 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */, + ); + path = Network; + sourceTree = ""; + }; FA7741D32B6A350200358315 /* StakingRewards */ = { isa = PBXGroup; children = ( FA7741D42B6A350200358315 /* SubsquidStakingRewardsFetcher.swift */, FA7741D52B6A350200358315 /* StakingRewardFetcher.swift */, FA7741D62B6A350200358315 /* SubqueryStakingRewardsFetcher.swift */, + 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */, FA7741D72B6A350200358315 /* StakingRewardsFetcherAssembly.swift */, FA7741D82B6A350200358315 /* ReefStakingRewardsFetcher.swift */, FA7741D92B6A350200358315 /* Requests */, @@ -13589,7 +14835,6 @@ C6267B8028BDF6A5001E31BF /* ChainAssetList */, 2C42012908B4F046FC9BB712 /* WalletChainAccountDashboard */, FA6DB7BB2757C9AF00233FBA /* ChainAccount */, - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */, 5B4415B6DC23A48F6E84B1C2 /* WalletTransactionHistory */, 98D53F0D0FA4CBD6693747C1 /* WalletTransactionDetails */, ); @@ -13629,6 +14874,15 @@ path = ViewModel; sourceTree = ""; }; + FA8B02102D375A730066F070 /* Keys */ = { + isa = PBXGroup; + children = ( + FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */, + FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */, + ); + path = Keys; + sourceTree = ""; + }; FA8ED43128FD8D6200EBB712 /* Flows */ = { isa = PBXGroup; children = ( @@ -13890,11 +15144,13 @@ path = Relaychain; sourceTree = ""; }; - FA99423828053C8600D771E5 /* SelectExportAccount */ = { + FA99426E2805524200D771E5 /* GetBalanceProvider */ = { isa = PBXGroup; children = ( + FA99426F2805524200D771E5 /* BalanceBuilder.swift */, + FA9942702805524200D771E5 /* GetBalanceProvider.swift */, ); - path = SelectExportAccount; + path = GetBalanceProvider; sourceTree = ""; }; FA99C92B283B4A9F007B1F83 /* RelaychainInitiated */ = { @@ -13968,10 +15224,12 @@ FA9A8F282A725AE9008FA99F /* Balance */ = { isa = PBXGroup; children = ( + 07A949822C46600200613B9D /* AccountInfoRemoteService */, FAD0678C2C2042F30050291F /* RemoteSubscription */, FA34EE992B98712D0042E73E /* BalanceLocksFetching.swift */, FA9A8F292A725AFC008FA99F /* AccountInfo */, 07E346D2288E614C00A8FAEC /* WalletBalanceSubscription */, + FA99426E2805524200D771E5 /* GetBalanceProvider */, ); path = Balance; sourceTree = ""; @@ -13979,7 +15237,6 @@ FA9A8F292A725AFC008FA99F /* AccountInfo */ = { isa = PBXGroup; children = ( - 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */, FA9A8F2A2A725B30008FA99F /* SubstrateAccountInfoFetching.swift */, ); @@ -14253,47 +15510,12 @@ path = StakingPallet; sourceTree = ""; }; - FAAA292B2B8DCE590089AFE6 /* StorageRequestWorkers */ = { - isa = PBXGroup; - children = ( - FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */, - FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */, - FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */, - FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */, - FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */, - ); - path = StorageRequestWorkers; - sourceTree = ""; - }; - FAAA29382B8DCED90089AFE6 /* StorageFactoryWorkers */ = { - isa = PBXGroup; - children = ( - FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */, - FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */, - FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */, - FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */, - FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */, - FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */, - ); - path = StorageFactoryWorkers; - sourceTree = ""; - }; - FAAA29452B8DCF250089AFE6 /* RequestFactory */ = { - isa = PBXGroup; - children = ( - FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */, - FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */, - FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */, - ); - path = RequestFactory; - sourceTree = ""; - }; FAAB998A27A7C76100CD1A3B /* CoreComponents */ = { isa = PBXGroup; children = ( - FAEFA6D32C6DCF6500095C07 /* Network */, FA3067292B6246BD006A0BA5 /* Storage */, FAFB47D52ABD588D0008F8CA /* Repository */, + FA7336C52A0E3B870096A291 /* Network */, ); path = CoreComponents; sourceTree = ""; @@ -14415,144 +15637,238 @@ FAE39AF02A9DBDDA0011A9D6 /* NftCollectionViewModel.swift */, C611666B2B3C03B800F483C4 /* NftHeaderCellViewModel.swift */, ); - path = ViewModel; + path = ViewModel; + sourceTree = ""; + }; + FAB707602BB317B900A1131C /* Model */ = { + isa = PBXGroup; + children = ( + FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */, + ); + path = Model; + sourceTree = ""; + }; + FAB707632BB3C05A00A1131C /* AssetsPallet */ = { + isa = PBXGroup; + children = ( + FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */, + ); + path = AssetsPallet; + sourceTree = ""; + }; + FABA162E2B0C9510001AF2F0 /* NetworkManagment */ = { + isa = PBXGroup; + children = ( + FABA162F2B0C9510001AF2F0 /* NetworkManagmentPresenter.swift */, + FABA16302B0C9510001AF2F0 /* NetworkManagmentTableCell.swift */, + FABA16312B0C9510001AF2F0 /* NetworkManagmentProtocols.swift */, + FABA16322B0C9510001AF2F0 /* NetworkManagmentViewModelFactory.swift */, + FABA16332B0C9510001AF2F0 /* NetworkManagmentAssembly.swift */, + FABA16342B0C9510001AF2F0 /* NetworkManagmentViewLayout.swift */, + FABA16352B0C9510001AF2F0 /* NetworkManagmentItem.swift */, + FABA16362B0C9510001AF2F0 /* NetworkManagmentFilter.swift */, + FABA16372B0C9510001AF2F0 /* NetworkManagmentRouter.swift */, + FABA16382B0C9510001AF2F0 /* NetworkManagmentInteractor.swift */, + FABA16392B0C9510001AF2F0 /* NetworkManagmentViewController.swift */, + FABA163A2B0C9510001AF2F0 /* NetworkManagmentViewModel.swift */, + ); + path = NetworkManagment; + sourceTree = ""; + }; + FAC0BBB0291D074400E6F106 /* RuntimeCall */ = { + isa = PBXGroup; + children = ( + FAC0BBB1291D074400E6F106 /* RuntimeCallPath.swift */, + ); + path = RuntimeCall; + sourceTree = ""; + }; + FAC0BBB4291D0EAF00E6F106 /* Models */ = { + isa = PBXGroup; + children = ( + FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */, + FAC0BBB5291D0EAF00E6F106 /* SendViewModelFactory.swift */, + FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */, + FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */, + FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */, + ); + path = Models; + sourceTree = ""; + }; + FAC0BBC1291D0EAF00E6F106 /* Validators */ = { + isa = PBXGroup; + children = ( + FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */, + ); + path = Validators; + sourceTree = ""; + }; + FAC0BBC4291D0EB000E6F106 /* SelectAsset */ = { + isa = PBXGroup; + children = ( + FAC0BBC5291D0EB000E6F106 /* ViewModel */, + FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */, + FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */, + FAC0BBC9291D0EB000E6F106 /* SelectAssetViewController.swift */, + FAC0BBCA291D0EB000E6F106 /* View */, + FAC0BBCC291D0EB000E6F106 /* SelectAssetInteractor.swift */, + FAC0BBCD291D0EB000E6F106 /* SelectAssetPresenter.swift */, + FAC0BBCE291D0EB000E6F106 /* SelectAssetProtocols.swift */, + ); + path = SelectAsset; + sourceTree = ""; + }; + FAC0BBC5291D0EB000E6F106 /* ViewModel */ = { + isa = PBXGroup; + children = ( + FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + FAC0BBCA291D0EB000E6F106 /* View */ = { + isa = PBXGroup; + children = ( + FAC0BBCB291D0EB000E6F106 /* SelectAssetCell.swift */, + ); + path = View; sourceTree = ""; }; - FAB707602BB317B900A1131C /* Model */ = { + FAC6CD9B2BA8096D0013A17E /* Localization */ = { isa = PBXGroup; children = ( - FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */, + FAC6CD9C2BA8097C0013A17E /* L10n.swift */, + FAC6CD9E2BA80AB70013A17E /* WalletLanguage.swift */, ); - path = Model; + path = Localization; sourceTree = ""; }; - FAB707632BB3C05A00A1131C /* AssetsPallet */ = { + FAC6CDA52BA814020013A17E /* AccountList */ = { isa = PBXGroup; children = ( - FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */, + FAC6CDA62BA814020013A17E /* BalanceContext.swift */, ); - path = AssetsPallet; + path = AccountList; sourceTree = ""; }; - FAB90CE72C6F582C00D13804 /* View */ = { + FAC71CA32D363FFE00122E95 /* ComponentFactories */ = { isa = PBXGroup; children = ( - FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */, + FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */, + FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */, + FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */, ); - path = View; + path = ComponentFactories; sourceTree = ""; }; - FAB90CEB2C6F5B2100D13804 /* ViewModel */ = { + FAC71CA92D363FFE00122E95 /* Requests */ = { isa = PBXGroup; children = ( - FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */, - FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */, + FAC71CA42D363FFE00122E95 /* CachedRequest.swift */, + FAC71CA52D363FFE00122E95 /* MixStorage.swift */, + FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */, + FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */, + FAC71CA82D363FFE00122E95 /* StorageRequest.swift */, ); - path = ViewModel; + path = Requests; sourceTree = ""; }; - FABA162E2B0C9510001AF2F0 /* NetworkManagment */ = { + FAC71CB02D363FFE00122E95 /* ResponseDecoders */ = { isa = PBXGroup; children = ( - FABA162F2B0C9510001AF2F0 /* NetworkManagmentPresenter.swift */, - FABA16302B0C9510001AF2F0 /* NetworkManagmentTableCell.swift */, - FABA16312B0C9510001AF2F0 /* NetworkManagmentProtocols.swift */, - FABA16322B0C9510001AF2F0 /* NetworkManagmentViewModelFactory.swift */, - FABA16332B0C9510001AF2F0 /* NetworkManagmentAssembly.swift */, - FABA16342B0C9510001AF2F0 /* NetworkManagmentViewLayout.swift */, - FABA16352B0C9510001AF2F0 /* NetworkManagmentItem.swift */, - FABA16362B0C9510001AF2F0 /* NetworkManagmentFilter.swift */, - FABA16372B0C9510001AF2F0 /* NetworkManagmentRouter.swift */, - FABA16382B0C9510001AF2F0 /* NetworkManagmentInteractor.swift */, - FABA16392B0C9510001AF2F0 /* NetworkManagmentViewController.swift */, - FABA163A2B0C9510001AF2F0 /* NetworkManagmentViewModel.swift */, + FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */, + FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */, + FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */, + FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */, + FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */, + FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */, ); - path = NetworkManagment; + path = ResponseDecoders; sourceTree = ""; }; - FAC0BBB0291D074400E6F106 /* RuntimeCall */ = { + FAC71CB82D363FFE00122E95 /* StorageRequestWorkers */ = { isa = PBXGroup; children = ( - FAC0BBB1291D074400E6F106 /* RuntimeCallPath.swift */, + FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */, + FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */, + FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */, + FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */, + FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */, + FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */, + FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */, ); - path = RuntimeCall; + path = StorageRequestWorkers; sourceTree = ""; }; - FAC0BBB3291D0EAF00E6F106 /* Send */ = { + FAC71CB92D363FFE00122E95 /* Storage */ = { isa = PBXGroup; children = ( - FAC0BBB4291D0EAF00E6F106 /* ViewModel */, - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */, - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */, - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */, - FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */, - FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */, - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */, - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */, - FAC0BBC1291D0EAF00E6F106 /* Validators */, - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */, + FAC71CB02D363FFE00122E95 /* ResponseDecoders */, + FAC71CB82D363FFE00122E95 /* StorageRequestWorkers */, ); - path = Send; + path = Storage; sourceTree = ""; }; - FAC0BBB4291D0EAF00E6F106 /* ViewModel */ = { + FAC71CC22D363FFE00122E95 /* StorageFactoryWorkers */ = { isa = PBXGroup; children = ( - FAC0BBB5291D0EAF00E6F106 /* SendViewModelFactory.swift */, - FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */, - FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */, - FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */, + FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */, + FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */, + FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */, + FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */, + FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */, + FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */, + FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */, + FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */, ); - path = ViewModel; + path = StorageFactoryWorkers; sourceTree = ""; }; - FAC0BBC1291D0EAF00E6F106 /* Validators */ = { + FAC71CC62D363FFE00122E95 /* StorageFactory */ = { isa = PBXGroup; children = ( - FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */, + FAC71CC22D363FFE00122E95 /* StorageFactoryWorkers */, + FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */, + FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */, + FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */, ); - path = Validators; + path = StorageFactory; sourceTree = ""; }; - FAC0BBC4291D0EB000E6F106 /* SelectAsset */ = { + FAC71CC92D363FFE00122E95 /* Async */ = { isa = PBXGroup; children = ( - FAC0BBC5291D0EB000E6F106 /* ViewModel */, - FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */, - FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */, - FAC0BBC9291D0EB000E6F106 /* SelectAssetViewController.swift */, - FAC0BBCA291D0EB000E6F106 /* View */, - FAC0BBCC291D0EB000E6F106 /* SelectAssetInteractor.swift */, - FAC0BBCD291D0EB000E6F106 /* SelectAssetPresenter.swift */, - FAC0BBCE291D0EB000E6F106 /* SelectAssetProtocols.swift */, + FAC71CA32D363FFE00122E95 /* ComponentFactories */, + FAC71CA92D363FFE00122E95 /* Requests */, + FAC71CB92D363FFE00122E95 /* Storage */, + FAC71CC62D363FFE00122E95 /* StorageFactory */, + FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */, + FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */, ); - path = SelectAsset; + path = Async; sourceTree = ""; }; - FAC0BBC5291D0EB000E6F106 /* ViewModel */ = { + FAC71CCB2D363FFE00122E95 /* Helpers */ = { isa = PBXGroup; children = ( - FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */, + FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */, ); - path = ViewModel; + path = Helpers; sourceTree = ""; }; - FAC0BBCA291D0EB000E6F106 /* View */ = { + FAC71CD22D363FFE00122E95 /* Models */ = { isa = PBXGroup; children = ( - FAC0BBCB291D0EB000E6F106 /* SelectAssetCell.swift */, + FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */, ); - path = View; + path = Models; sourceTree = ""; }; - FAC6CD9B2BA8096D0013A17E /* Localization */ = { + FAC71CDD2D363FFE00122E95 /* Operation */ = { isa = PBXGroup; children = ( - FAC6CD9C2BA8097C0013A17E /* L10n.swift */, - FAC6CD9E2BA80AB70013A17E /* WalletLanguage.swift */, ); - path = Localization; + path = Operation; sourceTree = ""; }; FAC842347BD44065AAC00D29 /* SelectMarket */ = { @@ -14587,6 +15903,7 @@ FACD42942A5BE811009975AA /* SelectedLanguageMigrator.swift */, FACD42952A5BE811009975AA /* KeystoreMigrator.swift */, FACD42962A5BE811009975AA /* Migrating.swift */, + 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */, ); path = Migration; sourceTree = ""; @@ -14599,6 +15916,7 @@ FACD428A2A5BE811009975AA /* ChainSubstrateV2MigrationPolicy.swift */, FACD428B2A5BE811009975AA /* SubstrateStorageMigrator.swift */, FACD428C2A5BE811009975AA /* ChainModelV4MigrationPolicy.swift */, + 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */, ); path = SubstrateStorage; sourceTree = ""; @@ -14613,6 +15931,8 @@ FACD42912A5BE811009975AA /* SingleToMultiassetMigrationPolicy.swift */, FACD42922A5BE811009975AA /* MultiassetV2MigrationPolicy.swift */, FACD42932A5BE811009975AA /* UserStorageVersion.swift */, + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */, + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */, ); path = UserStorage; sourceTree = ""; @@ -14629,20 +15949,10 @@ isa = PBXGroup; children = ( FAD0678E2C2042F30050291F /* Requests.swift */, - FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, ); path = RemoteSubscription; sourceTree = ""; }; - FAD067AA2C2044810050291F /* Keys */ = { - isa = PBXGroup; - children = ( - FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */, - FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */, - ); - path = Keys; - sourceTree = ""; - }; FAD067AF2C2044B10050291F /* AssetManagement */ = { isa = PBXGroup; children = ( @@ -14677,22 +15987,6 @@ path = TableViews; sourceTree = ""; }; - FAD240D72C64D3EF00B389FF /* ZChain */ = { - isa = PBXGroup; - children = ( - FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */, - ); - path = ZChain; - sourceTree = ""; - }; - FAD240DC2C64E96F00B389FF /* Kaia */ = { - isa = PBXGroup; - children = ( - FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */, - ); - path = Kaia; - sourceTree = ""; - }; FAD4289B2A865635001D6A16 /* BackupRiskWarnings */ = { isa = PBXGroup; children = ( @@ -14859,26 +16153,6 @@ path = BackupWalletImported; sourceTree = ""; }; - FAD5FF232C463BEE003201F5 /* AccountStatistics */ = { - isa = PBXGroup; - children = ( - FAD5FF2C2C464705003201F5 /* Nomis */, - FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */, - ); - path = AccountStatistics; - sourceTree = ""; - }; - FAD5FF2C2C464705003201F5 /* Nomis */ = { - isa = PBXGroup; - children = ( - FA4B098C2C4674C9001B73F9 /* Request */, - FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */, - FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */, - FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */, - ); - path = Nomis; - sourceTree = ""; - }; FAD646BF284DD2B2007CCB92 /* Flow */ = { isa = PBXGroup; children = ( @@ -14965,6 +16239,7 @@ FADBA5ED2B5FD04F00CFCF30 /* ViewModel */ = { isa = PBXGroup; children = ( + FADBA5EE2B5FD05C00CFCF30 /* ClaimCrowdloanRewardsViewModel.swift */, FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */, ); path = ViewModel; @@ -15025,6 +16300,16 @@ path = ViewModel; sourceTree = ""; }; + FAE5F62D27B2383200F13206 /* ViewModel */ = { + isa = PBXGroup; + children = ( + FAE5F62E27B2383E00F13206 /* AddCustomNodeViewState.swift */, + FAE5F63027B2384F00F13206 /* AddCustomNodeViewModelFactory.swift */, + FA99549627B255AB00CCC94B /* AddCustomNodeViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; FAE9EB99288AB72D009390B6 /* Flow */ = { isa = PBXGroup; children = ( @@ -15064,14 +16349,6 @@ path = Adapter; sourceTree = ""; }; - FAEFA6D32C6DCF6500095C07 /* Network */ = { - isa = PBXGroup; - children = ( - FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */, - ); - path = Network; - sourceTree = ""; - }; FAF5E9C827E46D3E005A3448 /* Codable */ = { isa = PBXGroup; children = ( @@ -15121,22 +16398,6 @@ path = ViewModel; sourceTree = ""; }; - FAF600782C48F11200E56558 /* AccountScore */ = { - isa = PBXGroup; - children = ( - FAF600762C48F08B00E56558 /* AccountScoreView.swift */, - ); - path = AccountScore; - sourceTree = ""; - }; - FAF6007D2C48FC2A00E56558 /* AccountScore */ = { - isa = PBXGroup; - children = ( - FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */, - ); - path = AccountScore; - sourceTree = ""; - }; FAF96B562B636FBC00E299C1 /* SystemPallet */ = { isa = PBXGroup; children = ( @@ -15179,7 +16440,7 @@ FAFB47D52ABD588D0008F8CA /* Repository */ = { isa = PBXGroup; children = ( - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */, + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */, ); path = Repository; sourceTree = ""; @@ -15206,10 +16467,10 @@ FAFFAE4129AC84B10074AF1F /* BlockExplorer */ = { isa = PBXGroup; children = ( - FAD240DC2C64E96F00B389FF /* Kaia */, - FAD240D72C64D3EF00B389FF /* ZChain */, - FA41B6272C64C14500D0713A /* Viscan */, - FA41B61E2C64951300D0713A /* 5ire */, + 0701B9BB2C78FD8800DCD395 /* 5ire */, + 0701B9B72C78FD8800DCD395 /* Kaia */, + 0701B9BD2C78FD8800DCD395 /* Viscan */, + 0701B9B92C78FD8800DCD395 /* ZChain */, FA9A8F032A6FAB69008FA99F /* Etherscan */, FAFFAE4229AC84B10074AF1F /* RewardOrSlashData.swift */, FAFFAE4329AC84B10074AF1F /* Subquery */, @@ -15308,6 +16569,14 @@ path = StakingPoolInfo; sourceTree = ""; }; + FBD5D2C2BD7B0632C232E4CF /* Transfer */ = { + isa = PBXGroup; + children = ( + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */, + ); + path = Transfer; + sourceTree = ""; + }; FDE858484C32A17DA1E55997 /* WalletHistoryFilter */ = { isa = PBXGroup; children = ( @@ -15331,11 +16600,11 @@ isa = PBXNativeTarget; buildConfigurationList = 8438E1D624BFAAD2001BDB13 /* Build configuration list for PBXNativeTarget "fearlessIntegrationTests" */; buildPhases = ( - 89AD8B440B53D55B8CAA828D /* [CP] Check Pods Manifest.lock */, + 73654FAB1D050C79A2FAE4D4 /* [CP] Check Pods Manifest.lock */, 8438E1CB24BFAAD2001BDB13 /* Sources */, 8438E1CC24BFAAD2001BDB13 /* Frameworks */, 8438E1CD24BFAAD2001BDB13 /* Resources */, - 143B40CCA3BF094926B9773C /* [CP] Embed Pods Frameworks */, + A19088A12BE0C0B6EB7CA58A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15351,16 +16620,15 @@ isa = PBXNativeTarget; buildConfigurationList = 849013C724A80986008F705E /* Build configuration list for PBXNativeTarget "fearless" */; buildPhases = ( - 94F787D261F4281B7F6AFE26 /* [CP] Check Pods Manifest.lock */, + B99BB6683A83CEA62988CEA4 /* [CP] Check Pods Manifest.lock */, AE2060202636DA5900357578 /* Inject keys */, - F472A8D6261758DE003C58BC /* SwiftFormat */, 849013CD24A92260008F705E /* Swiftlint */, 849013CE24A92280008F705E /* R.swift */, 849013A424A80984008F705E /* Sources */, 849013A524A80984008F705E /* Frameworks */, 849013A624A80984008F705E /* Resources */, FAD429442A8A1A74001D6A16 /* Inject Google Keys */, - B60C6E08CACA1CEBC1520619 /* [CP] Embed Pods Frameworks */, + 8AA801B80376DBDCB49F8A62 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15373,11 +16641,47 @@ FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */, FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */, FA72546E2AC2F12D00EC47A6 /* Web3Wallet */, + FA8FD1802AF4B55100354482 /* Web3 */, + FA8FD1822AF4B55100354482 /* Web3ContractABI */, + FA8FD1842AF4B55100354482 /* Web3PromiseKit */, FA8FD1872AF4BEDD00354482 /* Swime */, - FAF600742C48D79600E56558 /* Cosmos */, - FAB482EA2C58A8AA00594D89 /* Web3 */, - FAB482EC2C58A8AA00594D89 /* Web3ContractABI */, - FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */, + 070ED7D12C3E7DE100DF4098 /* TonSwift */, + 070ED7EA2C4543D900DF4098 /* EventSource */, + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */, + 070ED7EE2C4543D900DF4098 /* TonAPI */, + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */, + 0701B8A22C78F54200DCD395 /* Cosmos */, + FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */, + FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */, + FA1FAD412D62FEBE00ECD456 /* RobinHood */, + FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */, + FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */, + FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */, + FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */, + FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */, + FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */, + FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */, + FA1FAD512D62FEBE00ECD456 /* SSFEraKit */, + FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */, + FA1FAD552D62FEBE00ECD456 /* SSFHelpers */, + FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */, + FA1FAD592D62FEBE00ECD456 /* SSFLogger */, + FA1FAD5B2D62FEBE00ECD456 /* SSFModels */, + FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */, + FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */, + FA1FAD612D62FEBE00ECD456 /* SSFPools */, + FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */, + FA1FAD652D62FEBE00ECD456 /* SSFQRService */, + FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */, + FA1FAD692D62FEBE00ECD456 /* SSFSigner */, + FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */, + FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */, + FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */, + FA1FAD712D62FEBE00ECD456 /* SSFUtils */, + FA1FAD732D62FEBE00ECD456 /* SSFXCM */, + FA1FAD752D62FEBE00ECD456 /* SoraKeystore */, + FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */, + FA1FAD792D62FEBE00ECD456 /* keccak */, ); productName = fearless; productReference = 849013A824A80984008F705E /* fearless.app */; @@ -15387,13 +16691,13 @@ isa = PBXNativeTarget; buildConfigurationList = 849013CA24A80986008F705E /* Build configuration list for PBXNativeTarget "fearlessTests" */; buildPhases = ( - 21F8A6D4168E40BE9DA1D44D /* [CP] Check Pods Manifest.lock */, + DBFA8ECE30CBA05568FDA0F3 /* [CP] Check Pods Manifest.lock */, 842D1E8824D207C700C30A7A /* Modules Mock */, 842D1E8924D207D900C30A7A /* Common Mock */, 849013BA24A80986008F705E /* Sources */, 849013BB24A80986008F705E /* Frameworks */, 849013BC24A80986008F705E /* Resources */, - 9BB29B8B34CC212C09DCB1ED /* [CP] Embed Pods Frameworks */, + 465E17CE036B35C44BA2C00C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15446,10 +16750,12 @@ mainGroup = 8490139F24A80984008F705E; packageReferences = ( FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */, + FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */, FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */, - FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */, - FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */, - FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */, + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */, + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */, + 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */, + FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */, ); productRefGroup = 849013A924A80984008F705E /* Products */; projectDirPath = ""; @@ -15474,6 +16780,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0701B96B2C78FAF000DCD395 /* polkaswapSettings.json in Resources */, 8490142324A93027008F705E /* sora-Bold.otf in Resources */, 841937872544772F00CFA50C /* animatedBg.gif in Resources */, 8490145E24A94373008F705E /* Localizable.strings in Resources */, @@ -15483,9 +16790,12 @@ AEFC6D622600A772000BD310 /* StoriesPreviewCollectionItem.xib in Resources */, 842876AC24AE049B00D91AD8 /* SelectionTitleTableViewCell.xib in Resources */, 849013B824A80986008F705E /* LaunchScreen.storyboard in Resources */, + 0701B9712C78FAF000DCD395 /* runtime-westend.json in Resources */, 842876AE24AE049B00D91AD8 /* SelectionListViewController.xib in Resources */, + 0701B96D2C78FAF000DCD395 /* runtime-empty.json in Resources */, 8428765824ADDE0200D91AD8 /* ProfileTableViewCell.xib in Resources */, 84D8F16724D81CB100AF43E9 /* TitleWithSubtitleTableViewCell.xib in Resources */, + 0701B96A2C78FAF000DCD395 /* polkadot-9370metadata in Resources */, 84D2F45A25EF0556008B914D /* RecommendedValidatorCell.xib in Resources */, 84452F7625D5E2B300F47EC5 /* runtime-default.json in Resources */, FA66FE902779C9AE0037C989 /* runtime-empty.json in Resources */, @@ -15495,6 +16805,7 @@ 8490141424A92F6D008F705E /* OnbordingMain.xib in Resources */, AEF5058B261EF27B0098574D /* PurchaseProviderPickerTableViewCell.xib in Resources */, 849013B524A80986008F705E /* Assets.xcassets in Resources */, + 07230EB12C7456B900B92466 /* dapps.json in Resources */, 84D8F15724D80D5500AF43E9 /* ModalPickerViewController.xib in Resources */, 84452F7525D5E2B300F47EC5 /* runtime-polkadot.json in Resources */, 84754C9E2513B46100854599 /* AccountPickerTableViewCell.xib in Resources */, @@ -15503,10 +16814,13 @@ AE9EF282260B58250026910A /* StoriesViewController.xib in Resources */, 8490142524A93027008F705E /* sora-SemiBold.otf in Resources */, 84452F7425D5E2B300F47EC5 /* runtime-westend.json in Resources */, + 0701B9672C78FAF000DCD395 /* assets.json in Resources */, FACD42BF2A5BE93D009975AA /* polkadot-9370metadata in Resources */, FA256A46274CE8BD00875A53 /* StoriesCollectionItem.xib in Resources */, 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */, 849014B824AA87E3008F705E /* PinSetupViewController.xib in Resources */, + 0701B9722C78FAF000DCD395 /* types.json in Resources */, + 0701B96E2C78FAF000DCD395 /* runtime-kusama.json in Resources */, 84D8F16924D821ED00AF43E9 /* IconWithTitleTableViewCell.xib in Resources */, 84DF21A325347042005454AE /* DetailsDisplayTableViewCell.xib in Resources */, 849528DE2603697B009DC845 /* RewardEstimationView.xib in Resources */, @@ -15518,11 +16832,16 @@ 8438C45B2655AC2600047E3F /* runtime-rococo.json in Resources */, AE2060B02637068700357578 /* CIKeys.stencil in Resources */, 9D5F6A48E7A9166B9341F417 /* NetworkInfoViewController.xib in Resources */, + 0701B96F2C78FAF000DCD395 /* runtime-polkadot.json in Resources */, 07F2B75D28A6565900280C38 /* chains.json in Resources */, 84FFE50D261290BC0054EA63 /* NetworkInfoView.xib in Resources */, + 0701B9692C78FAF000DCD395 /* dapps.json in Resources */, 2624D8CEBB61A185A5E8B994 /* AccountExportPasswordViewController.xib in Resources */, + 0701B96C2C78FAF000DCD395 /* runtime-default.json in Resources */, + 0701B9682C78FAF000DCD395 /* chains.json in Resources */, 48E7D7072820F66F286A0B9D /* StakingMainViewController.xib in Resources */, FA93754A2AE928BE002CA482 /* types.json in Resources */, + 0701B9702C78FAF000DCD395 /* runtime-rococo.json in Resources */, 742374EE778D76ABC965E107 /* StakingAmountViewController.xib in Resources */, EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */, ); @@ -15548,24 +16867,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 143B40CCA3BF094926B9773C /* [CP] Embed Pods Frameworks */ = { + 465E17CE036B35C44BA2C00C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 21F8A6D4168E40BE9DA1D44D /* [CP] Check Pods Manifest.lock */ = { + 73654FAB1D050C79A2FAE4D4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -15580,7 +16899,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearlessIntegrationTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -15661,65 +16980,38 @@ shellPath = /bin/sh; shellScript = "\"$PODS_ROOT/R.swift/rswift\" generate \"$PROJECT_DIR/R.generated.swift\"\n"; }; - 89AD8B440B53D55B8CAA828D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearlessIntegrationTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 94F787D261F4281B7F6AFE26 /* [CP] Check Pods Manifest.lock */ = { + 8AA801B80376DBDCB49F8A62 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearless-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9BB29B8B34CC212C09DCB1ED /* [CP] Embed Pods Frameworks */ = { + A19088A12BE0C0B6EB7CA58A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; AE2060202636DA5900357578 /* Inject keys */ = { @@ -15740,26 +17032,31 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,,dwellirApiKey=$FL_DWELLIR_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; + shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,dwellirApiKey=$FL_DWELLIR_API_KEY,\n tonApiKey=$FL_IOS_TON_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; }; - B60C6E08CACA1CEBC1520619 /* [CP] Embed Pods Frameworks */ = { + B99BB6683A83CEA62988CEA4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearless-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F472A8D6261758DE003C58BC /* SwiftFormat */ = { + DBFA8ECE30CBA05568FDA0F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -15767,15 +17064,19 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = SwiftFormat; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-fearlessTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat\" \"$SRCROOT/fearless\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; FAD429442A8A1A74001D6A16 /* Inject Google Keys */ = { isa = PBXShellScriptBuildPhase; @@ -15856,7 +17157,6 @@ FA176BBA2851B59000258125 /* StakingBalanceParachainStrategy.swift in Sources */, 8428765524ADDE0200D91AD8 /* ProfileUserViewModel.swift in Sources */, AE9EF2C5260C85370026910A /* StoriesProgressAnimator.swift in Sources */, - FAAA29222B8DCE260089AFE6 /* CachedStorageRequestPerformer.swift in Sources */, FA5137AB29AC6F2F00560EBA /* PolkaswapDisclaimerRouter.swift in Sources */, FA62624E2AC2E35A005D3D95 /* WalletConnectActiveSessionsViewLayout.swift in Sources */, 842876B624AE05C700D91AD8 /* EmailPresentable.swift in Sources */, @@ -15877,14 +17177,50 @@ FA8800582B2C6629000AE5EB /* ReefRewardOperationFactory.swift in Sources */, FA9A8F192A72573C008FA99F /* AlchemyService.swift in Sources */, 07F2B75F28AA183C00280C38 /* PrintTimer.swift in Sources */, + FAC71CDE2D363FFE00122E95 /* MapKeyEncodingWorker.swift in Sources */, + FAC71CDF2D363FFE00122E95 /* KeyEncoding.swift in Sources */, + FAC71CE02D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift in Sources */, + FAC71CE12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift in Sources */, + FAC71CE22D363FFE00122E95 /* PrefixRequest.swift in Sources */, + FAC71CE32D363FFE00122E95 /* PrefixResponseValueExtractor.swift in Sources */, + FAC71CE42D363FFE00122E95 /* MixStorage.swift in Sources */, + FAC71CE62D363FFE00122E95 /* JSONRPCWorkerDefault.swift in Sources */, + FAC71CE72D363FFE00122E95 /* EncodableStorageRequestWorker.swift in Sources */, + FAC71CE82D363FFE00122E95 /* SimpleKeyEncodingWorker.swift in Sources */, + FAC71CE92D363FFE00122E95 /* NMapKeyEncodingWorker.swift in Sources */, + FAC71CEA2D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift in Sources */, + FAC71CEB2D363FFE00122E95 /* NMapStorageRequestWorker.swift in Sources */, + FAC71CEC2D363FFE00122E95 /* StorageRequest.swift in Sources */, + FAC71CED2D363FFE00122E95 /* StorageRequestWorkerBuilder.swift in Sources */, + FAC71CEF2D363FFE00122E95 /* CachedRequest.swift in Sources */, + FAC71CF02D363FFE00122E95 /* AsyncStorageRequestFactory.swift in Sources */, + FAC71CF32D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift in Sources */, + FAC71CF42D363FFE00122E95 /* StorageKeyDataExtractor.swift in Sources */, + FAC71CF62D363FFE00122E95 /* MultipleRequest.swift in Sources */, + FAC71CF72D363FFE00122E95 /* CachedStorageRequestPerformer.swift in Sources */, + FAC71CF82D363FFE00122E95 /* PrefixStorageRequestWorker.swift in Sources */, + FAC71CFA2D363FFE00122E95 /* JSONRPCListWorker.swift in Sources */, + FAC71CFB2D363FFE00122E95 /* CachedStorageResponse.swift in Sources */, + FAC71CFD2D363FFE00122E95 /* StorageResponseValueExtractor.swift in Sources */, + FAC71CFE2D363FFE00122E95 /* StorageRequestPerformer.swift in Sources */, + FAC71D002D363FFE00122E95 /* MixStorageDecodingListWorker.swift in Sources */, + FAC71D022D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift in Sources */, + FAC71D032D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift in Sources */, + FAC71D042D363FFE00122E95 /* MixStorageRequestsWorker.swift in Sources */, + FAC71D062D363FFE00122E95 /* StorageRequestWorker.swift in Sources */, + FAC71D072D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift in Sources */, + FAC71D082D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift in Sources */, + FAC71D092D363FFE00122E95 /* SimpleStorageRequestWorker.swift in Sources */, + FAC71D0A2D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift in Sources */, + FAC71D0D2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */, FAFFAE3C29AC84480074AF1F /* NumberedLabel.swift in Sources */, FA7A4C802A1F937A0051FB4D /* RelaychainRewardCalculatorEngine.swift in Sources */, 846CD25B265709A800A2E4B6 /* StorageKeySuffixMapper.swift in Sources */, 076D9D4D29431C71002762E3 /* SwapQuoteAmountFactory.swift in Sources */, 07F2B75728A3A4B800280C38 /* ChainCollectionView.swift in Sources */, + 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */, 8473D40D2657E9DC00B394B2 /* MultiSigner.swift in Sources */, FA17B4B527E858CB006E0735 /* JsonLoadingFailedAlertConfig.swift in Sources */, - FAD9AAC52B8DFF6700AA603B /* PrefixStorageRequestWorker.swift in Sources */, F477CD26262EAD30004DF739 /* StakingPayoutViewModelFactory.swift in Sources */, 844E1E19266142080076AC59 /* BondedState+Status.swift in Sources */, 8493D0E126FF4F5000A28008 /* ScaleCoder+Extension.swift in Sources */, @@ -15911,21 +17247,25 @@ F484FF5F264BA2720015320F /* ControllerAccountConfirmationLayout.swift in Sources */, FAA0134C28DA12D7000A5230 /* StakingUnbondConfirmPoolViewModelFactory.swift in Sources */, FA38C9752758CD5D005C5577 /* ChainAccountViewState.swift in Sources */, + 0701B8FD2C78F71800DCD395 /* OKXLiquiditySource.swift in Sources */, FAD956772BB2BE8C00A8BF76 /* SystemAccountRequest.swift in Sources */, 841494402604E71C000D8D1A /* TotalRewardItem.swift in Sources */, FA584C7A2AB2BFE300F6F020 /* MediaType.swift in Sources */, C6264C292799A56E00FCA0DB /* WalletDetailsTableCell.swift in Sources */, 84DA3B1224C6D29100B5E27F /* RuntimeVersion.swift in Sources */, + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */, FA176BB82851B42700258125 /* StakingBalanceParachainViewModelFactory.swift in Sources */, 843C49DB24DF373000B71DDA /* AccountImportRequest.swift in Sources */, FA09AD352C37ABA000BE0B9C /* TransactionObserver.swift in Sources */, 843910C1253F36F300E3C217 /* BaseStorageChildSubscription.swift in Sources */, + 0701B9962C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift in Sources */, 84644AC52567EC05004EAA4B /* MultilineTriangularedView.swift in Sources */, FA86443E2768439900956D8E /* ContainerProtocols.swift in Sources */, 07F818012AD55D3600B87358 /* WalletConnectSessionCoordinator.swift in Sources */, FA53D8902C084ECA00173ADB /* LiquidityPoolSupplyViewModel.swift in Sources */, 8428765224ADDE0200D91AD8 /* ProfilePresenter.swift in Sources */, F4F22987260DC4F300ACFDB8 /* StakingRewardDetailsSimpleLabelViewModel.swift in Sources */, + 0701B89C2C78F34A00DCD395 /* AccountStatisticsPresenter.swift in Sources */, 84DD5F77263DFD9C00425ACF /* WarningConditionViolation.swift in Sources */, 84D2F45425EF044B008B914D /* RecommendedValidatorListViewModel.swift in Sources */, FA93A30E2834FCB80021330F /* ValidatorSearchRelaychainViewModelFactory.swift in Sources */, @@ -15934,6 +17274,7 @@ 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */, 8494D86B25247F9600614D8F /* Decimal+String.swift in Sources */, FAAC292E2ADCF3BB00063962 /* WalletConnectProposalCoordinator.swift in Sources */, + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */, 84873B0926029CBD000A83EE /* StakingStateViewModelFactory.swift in Sources */, FAFFAE3729AC84180074AF1F /* ParachainSubqueryHistoryOperationFactory.swift in Sources */, 84C3F78C26020DE800D47501 /* StakingStateMachineProtocols.swift in Sources */, @@ -15945,15 +17286,15 @@ 845BB8DB25E462B100E5FCDC /* SubstrateConstansts.swift in Sources */, FA34EEDE2B98723C0042E73E /* OnboardingPagesFactory.swift in Sources */, FA6D40812837A4A300A7A4C6 /* SelectedValidatorListRelaychainViewModelFactory.swift in Sources */, - FAD9AAC32B8DFE0200AA603B /* PrefixRequest.swift in Sources */, 849014C824AA8A28008F705E /* BiometryAuth.swift in Sources */, - FA4B75B02C6F325F001B954F /* OKXMultichainAssetSelection.swift in Sources */, 84690797264154E80030E693 /* SlashesOperationFactory.swift in Sources */, 8424A8C7262EC0E50091BFB1 /* PayoutInfo.swift in Sources */, 8428768C24AE046300D91AD8 /* AboutPresenter.swift in Sources */, FA62626B2AC2E35A005D3D95 /* WalletConnectProposalViewModel.swift in Sources */, + 0701B8AA2C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift in Sources */, FA2E9BB927A14A600023FAD2 /* FiltersPresentable.swift in Sources */, 843910C7253F56EA00E3C217 /* BaseOperation+Result.swift in Sources */, + 071606CB2C7C6C8800C1DF75 /* AssetRepositoryFactory.swift in Sources */, 0702B31A29701884003519F5 /* MoneyPresentable.swift in Sources */, 842D1E8424D197C900C30A7A /* KeyboardAdoptable.swift in Sources */, 849DEBD425ED015C00C64C19 /* SelectValidatorsConfirmViewModel.swift in Sources */, @@ -15964,12 +17305,14 @@ FA4B92AD2844D0E60003BCEF /* SelectCurrencyViewModelFactory.swift in Sources */, FAC6CDAF2BA81FA00013A17E /* WalletLoggerProtocol.swift in Sources */, FA86442327671C8C00956D8E /* WalletTransactionHistorySection.swift in Sources */, + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */, FAA0133228DA12B6000A5230 /* StakingPoolMainRouter.swift in Sources */, 07D05E5F28EF0A0A00B66C70 /* SelectValidatorsConfirmPoolInitiatedStrategy.swift in Sources */, F47BBD8B263189DB0087DA11 /* StakingBalanceAction.swift in Sources */, 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */, FA8800542B2C5D91000AE5EB /* ReefSubsquidHistoryOperationFactory.swift in Sources */, FACD42B02A5BE8A4009975AA /* NumbersAndSlashesProcessor.swift in Sources */, + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */, F4F2297C260DC05600ACFDB8 /* StakingRewardTokenUsdViewModel.swift in Sources */, FA256989274CE5DD00875A53 /* ViewController+Wrapper.swift in Sources */, FAC6CD8A2BA7FA4B0013A17E /* AssetTransactionData.swift in Sources */, @@ -15979,9 +17322,9 @@ 847C96302553426D002D288F /* ExportGenericViewModel.swift in Sources */, FAFFAE9229AC84B10074AF1F /* RewardOrSlash.swift in Sources */, FAD429022A86567F001D6A16 /* BackupCreatePasswordViewController.swift in Sources */, - C6FBA6DC2C69E006008B18D9 /* PriceDataHelper.swift in Sources */, AEE5FB1826457AC1002B8FDC /* StakingRewardDestSetupViewController.swift in Sources */, 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */, + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */, FAA0137328DA12E3000A5230 /* StakingRedeemConfirmationFlow.swift in Sources */, 842D1E8624D1A90400C30A7A /* NSPredicate+Validation.swift in Sources */, F4FDA0F826A57626003D753B /* EraCountdownOperationFactory.swift in Sources */, @@ -15996,8 +17339,8 @@ 844EFB5A265FCD9F0090ACB1 /* CrowdloanContributionProtocols.swift in Sources */, 073B34BC2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift in Sources */, F47BBD93263199830087DA11 /* StakingBalanceUnbondingWidgetView.swift in Sources */, + 0701B9042C78F71800DCD395 /* OKXDexRequestSigner.swift in Sources */, AE8B8837267351E300AB0AA9 /* CustomValidatorRelaychainListComposer.swift in Sources */, - FAD240E02C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift in Sources */, FAE39B042AA0655B0011A9D6 /* BaseEthereumService.swift in Sources */, FA3F5B6B281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift in Sources */, 845E49832636C87B002F8C22 /* StakingManageViewModel.swift in Sources */, @@ -16007,6 +17350,7 @@ 84BE207825E7D62100B4748C /* ActiveEraInfo.swift in Sources */, FA37AE2C2859BA30001DCA96 /* StakingBondMoreConfirmationParachainViewModelState.swift in Sources */, C6A8D6C127FC318A0080F81C /* UniqueChainViewModel.swift in Sources */, + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */, 845BB8C925E45D1500E5FCDC /* BondCall.swift in Sources */, F40966B926B297D6008CD244 /* AnalyticsRewardsViewModel.swift in Sources */, FAFFAE8E29AC84B10074AF1F /* SubqueryCollatorDataResponse.swift in Sources */, @@ -16047,6 +17391,7 @@ FA72542C2AC2E48500EC47A6 /* AppMetadata.swift in Sources */, C63468DF28F2C178005CB1F1 /* Contact.swift in Sources */, FA286B162A3043DB008BD527 /* CrossChainRouter.swift in Sources */, + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */, 848C3D0926248A3B005481C3 /* TransferCall.swift in Sources */, C63468E428F3530A005CB1F1 /* AddressBookViewModelFactory.swift in Sources */, 8401AEC42642A71D000B03E3 /* StakingRebondConfirmationWireframe.swift in Sources */, @@ -16055,7 +17400,6 @@ FAD067CF2C20453E0050291F /* EraStakersFetching.swift in Sources */, F4F3C3CB265BB12200C58400 /* CustomValidatorListViewModelFactory.swift in Sources */, 84B018B026E0450F00C75E28 /* ValidatorStateView.swift in Sources */, - FAAA29302B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift in Sources */, FA286B0E2A3043DB008BD527 /* CrossChainConfirmationViewModel.swift in Sources */, FAD646D8284F58B3007CCB92 /* StakingUnbondSetupRelaychainViewModelState.swift in Sources */, FACD42B72A5BE8F3009975AA /* PolkaswapAdjustmentViewLoadingCollector.swift in Sources */, @@ -16064,6 +17408,7 @@ FA2569BF274CE74100875A53 /* NetworkFeeView+Protocol.swift in Sources */, 843C49E124DFFC9500B71DDA /* AccountImportSource+ViewModel.swift in Sources */, 84038FF226FFBE1900C73F3F /* JsonLocalSubscriptionHandler.swift in Sources */, + 0701B9A92C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */, 842898D1265A955A002D5D65 /* ImageViewModel.swift in Sources */, 8490145324A93FD1008F705E /* FearlessLoadingViewFactory.swift in Sources */, 849842F92659241C006BBB9F /* CompletedCrowdloanTableViewCell.swift in Sources */, @@ -16097,14 +17442,18 @@ FA2E9BAE27A116DA0023FAD2 /* SwitchFilterTableCellViewModel.swift in Sources */, 8430AAE126022CA1005B1066 /* BaseStakingState.swift in Sources */, FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */, + 0701B9AB2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift in Sources */, + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */, FA256998274CE65100875A53 /* HTTPHeadersBuilderProtocol.swift in Sources */, FA6C175529935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift in Sources */, C67E781527B31FCB0053346B /* CheckPincodePresenter.swift in Sources */, + 0701B8B22C78F63400DCD395 /* AccountScoreView.swift in Sources */, FA7254282AC2E48500EC47A6 /* JSONRPCError+Fearless.swift in Sources */, FA93A3182836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift in Sources */, 8490141124A92F6D008F705E /* OnboardingMainViewController.swift in Sources */, FAD067D02C20453E0050291F /* LegacyEraStakersFetching.swift in Sources */, 842349C52624E98C0066ACFE /* MultiAddress+Query.swift in Sources */, + 0701B8992C78F34A00DCD395 /* AccountStatisticsAssembly.swift in Sources */, 84155DED2539817200A27058 /* ApplicationService.swift in Sources */, FA169FAB28BCBAF000E8D2DC /* PoolStakingAccountUpdatingService.swift in Sources */, 84403D7F25E91BC100494FD4 /* SuperIdentity.swift in Sources */, @@ -16129,13 +17478,12 @@ FAC0BBDF291D0EB000E6F106 /* SelectAssetRouter.swift in Sources */, FAD646CA284DFE4D007CCB92 /* StakingBondMoreRelaychainStrategy.swift in Sources */, 8443FDB6255540570092893D /* ExportMnemonicData.swift in Sources */, - FAD067AD2C2044810050291F /* ErasStakersPagedKey.swift in Sources */, 84893C0724DA890F008F6A3F /* CommonError.swift in Sources */, 849DEC6125EE13CE00C64C19 /* AddressOptionsPresentable.swift in Sources */, - FAAA29272B8DCE3E0089AFE6 /* MultipleStorageResponseValueExtractor.swift in Sources */, 84F13F0826F13898006725FF /* StakingAssetSettings.swift in Sources */, 84F30EF1260001A600039D09 /* DataProviderChange+Helper.swift in Sources */, FA6262492AC2E35A005D3D95 /* WalletConnectActiveSessionsInteractor.swift in Sources */, + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */, F47BBD8026317B970087DA11 /* StakingBalanceViewModel.swift in Sources */, FA2FC80028B3807C00CC0A42 /* StakingPoolJoinChoosePoolViewController.swift in Sources */, 848919D926FB5F99004DBAD5 /* CrowdloanChainTableViewCell.swift in Sources */, @@ -16153,6 +17501,7 @@ 8443FDB12554B7640092893D /* TitledMnemonicView.swift in Sources */, AE2C84CA25EF986E00986716 /* ValidatorInfoProtocols.swift in Sources */, AEFC6D672600A808000BD310 /* StoriesPreviewCollectionItem.swift in Sources */, + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */, 07DE95B828A1119400E9C2CB /* BalanceInfoInteractor.swift in Sources */, FA86442027671C7700956D8E /* WalletTransactionHistoryCellViewModel.swift in Sources */, FA17B4C027E97536006E0735 /* DeactivatableView.swift in Sources */, @@ -16160,6 +17509,7 @@ FA93A3032834E4620021330F /* ValidatorInfoParachainStrategy.swift in Sources */, AEAC690426EB891900346599 /* Logger+FearlessUtils.swift in Sources */, FACD429E2A5BE811009975AA /* StorageMigrator+Sync.swift in Sources */, + FAF487472D1FD4F0009A402C /* SubstrateV8.xcmappingmodel in Sources */, FA93A2D928323CC40021330F /* CustomValidatorListParachainViewModelFactory.swift in Sources */, F4C086B826D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift in Sources */, FAFFAE3D29AC84480074AF1F /* SymbolView.swift in Sources */, @@ -16175,12 +17525,14 @@ C6267B9328BDF6A5001E31BF /* ChainAssetListProtocols.swift in Sources */, FA3430F628508C02002B5975 /* StakingRedeemRelaychainStrategy.swift in Sources */, 84F13F1A26F23697006725FF /* Data+Keccak.swift in Sources */, + 0701B98A2C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */, 84A3034926A834F900E64382 /* ValidatorInfoViewLayout.swift in Sources */, F409670026B29A58008CD244 /* FWLineChartView.swift in Sources */, FA34EEE32B98723C0042E73E /* OnboardingAssembly.swift in Sources */, FA2FC80628B3807C00CC0A42 /* StakingPoolJoinConfigViewController.swift in Sources */, 84EBC55024F660A700459D15 /* EventCenter.swift in Sources */, 849ABE862628154900011A2A /* SubscanRawExtrinsicData.swift in Sources */, + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */, C6CA20442B072B98001503C2 /* NftCollectionFilters.swift in Sources */, FA936BD8286C66BF0059B97A /* StakingRebondConfirmationParachainViewModelState.swift in Sources */, FAADC1A929261F7000DA9903 /* PoolRolesConfirmPresenter.swift in Sources */, @@ -16189,7 +17541,7 @@ 849014CB24AA8B75008F705E /* RootControllerAnimationCoordinator.swift in Sources */, 84DED3FC266651EB00A153BB /* ReferralCrowdloanViewModel.swift in Sources */, FA2FC82328B380C500CC0A42 /* StakingPoolState.swift in Sources */, - FA3F42F92C50C8EF00AA1397 /* ScamInfoFetcher.swift in Sources */, + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */, 8428766924ADF27D00D91AD8 /* AuthorizationPresentable.swift in Sources */, F4871DEE26D63E3E00D27F23 /* AnalyticsRewardDetailsViewModel.swift in Sources */, AEA0C8AA267B6B4300F9666F /* SelectedValidatorListViewController.swift in Sources */, @@ -16197,6 +17549,7 @@ FA2E9B95279FE9380023FAD2 /* TextCopyPresentable.swift in Sources */, 2A66CFAF25D10EDF0006E4C1 /* PhishingItem.swift in Sources */, FA37AE4B285C5294001DCA96 /* ExecuteDelegationRequestCall.swift in Sources */, + 0701B9C82C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift in Sources */, AEA2C1C02681E9EC0069492E /* ValidatorSearchViewLayout.swift in Sources */, 8490144B24A93D0B008F705E /* FearlessNavigationBar.swift in Sources */, 84F4393A25DAC48D00AEDA56 /* JSONRPCAliases.swift in Sources */, @@ -16223,7 +17576,6 @@ 8467FD5324EFD210005D486C /* UserDataStorageFacade.swift in Sources */, C63CB31E284F790F0071AF26 /* DelegationInfoCell.swift in Sources */, FAD429092A86567F001D6A16 /* BannersViewController.swift in Sources */, - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */, AE6F7FE12685E812002BBC3E /* ValidatorListFilterViewController.swift in Sources */, FA2FC7C928B3805400CC0A42 /* JoinPoolCall.swift in Sources */, AEF50586261EE6230098574D /* PurchaseProviderPickerTableViewCell.swift in Sources */, @@ -16232,7 +17584,6 @@ FAD067D12C20453E0050291F /* DefaultEraStakersFetching.swift in Sources */, FA15BC112823AFE10037C023 /* ParachainStakingLocalSubscriptionHandler.swift in Sources */, FAD646C2284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift in Sources */, - FAD240DB2C64E22B00B389FF /* AssetTransactionData+ZChainHistory.swift in Sources */, FAF5E9D827E46D77005A3448 /* AppVersion.swift in Sources */, 840DCBFB25E0703A00D45C6A /* RewardSelectionView.swift in Sources */, FA34EEE72B98723C0042E73E /* BalanceLocksDetailInteractor.swift in Sources */, @@ -16245,14 +17596,17 @@ FAA0133128DA12B6000A5230 /* StakingPoolMainViewController.swift in Sources */, FA68301C2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift in Sources */, FA93A30C2834FCAD0021330F /* ValidatorSearchRelaychainStrategy.swift in Sources */, + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */, + 0701B98E2C78FAF000DCD395 /* LiquidityPoolListCell.swift in Sources */, 844CB56E26F9CB1500396E13 /* CrowdloanLocalStorageSubscriber.swift in Sources */, 073417B4298BA28300104F41 /* EquilibriumTotalWalletService.swift in Sources */, + 0701B8EA2C78F71800DCD395 /* TonConnectEvent.swift in Sources */, 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */, 8401AEC32642A71D000B03E3 /* StakingRebondConfirmationViewController.swift in Sources */, 841AAC2D26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift in Sources */, 8406B5AF26FBE7EF00635B61 /* SelectionIconDetailsTableViewCell.swift in Sources */, 849014BE24AA87E4008F705E /* PinSetupPresenter.swift in Sources */, - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */, + 0701B9C62C78FDE000DCD395 /* AssetTransactionData+FireHistory.swift in Sources */, FAA0139D28DA131B000A5230 /* StakingBondMorePoolViewModelState.swift in Sources */, FA286B0F2A3043DB008BD527 /* CrossChainConfirmationData.swift in Sources */, 8467FD0224E5D2D9005D486C /* OnboardingMainInteractor.swift in Sources */, @@ -16272,12 +17626,13 @@ FA7741E42B6A350200358315 /* GiantsquidStakingRewardsFetcher.swift in Sources */, FA7C9A702BA007AE0031580A /* ArrowsquidHistoryResponse.swift in Sources */, 845BB8D125E45F1300E5FCDC /* NominateCall.swift in Sources */, + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */, FAD429162A86567F001D6A16 /* BackupSelectWalletRouter.swift in Sources */, + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */, 840689FC26321F2700A017B1 /* StorageQuery.swift in Sources */, 8423ADD026B2C38600057EDD /* ImportantFlowViewFactory.swift in Sources */, FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */, FA99C938283B76F5007B1F83 /* SelectValidatorsConfirmRelaychainExistingStrategy.swift in Sources */, - FAB90CF12C73351C00D13804 /* UIImage+ColorsInvert.swift in Sources */, FAD429212A865680001D6A16 /* WalletNamePresenter.swift in Sources */, 844EFB65265FD61D0090ACB1 /* CrowdloanContributeConfirmViewModel.swift in Sources */, FAADC1B72926597400DA9903 /* ScanQRViewLayout.swift in Sources */, @@ -16285,7 +17640,6 @@ 8472975D260B1B71009B86D0 /* ExistingBonding.swift in Sources */, 8490144C24A93D0B008F705E /* FearlessNavigationController.swift in Sources */, 84CE69DD2565BB6400559427 /* AboutViewModel.swift in Sources */, - C6FBA6DE2C72E0FD008B18D9 /* PricesUpdated.swift in Sources */, 070B2C57289CE43A00F78F82 /* SelectNetworkInteractor.swift in Sources */, 84F2FEFF25E7ADE7008338D5 /* ValidatorPrefs.swift in Sources */, FA2FC80E28B3807D00CC0A42 /* StakingPoolJoinConfirmProtocols.swift in Sources */, @@ -16293,10 +17647,11 @@ 84BE209E25E85CCA00B4748C /* ServiceCoordinator.swift in Sources */, 84D1F31E260F585E0077DDFE /* AddAccount.swift in Sources */, 8467FD4324ED5F46005D486C /* ProfileSectionTableViewCell.swift in Sources */, - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */, + 0701B89A2C78F34A00DCD395 /* AccountStatisticsInteractor.swift in Sources */, 076D9D6029504BA3002762E3 /* PolkaswapSettingsSyncService.swift in Sources */, FA7254452AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift in Sources */, 846CA77C27099DD90011124C /* WeaklyAnalyticsRewardSource.swift in Sources */, + 0701B97B2C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift in Sources */, 84452F9D25D6768000F47EC5 /* RuntimeMetadataItem.swift in Sources */, 849842FE26592C2B006BBB9F /* StatusSectionView.swift in Sources */, F42D125F26C1B14D00E59214 /* AnalyticsValidatorsViewModelFactory.swift in Sources */, @@ -16310,18 +17665,19 @@ 076D9D37293E34EE002762E3 /* SwapVariant.swift in Sources */, 84C6801024D6EE4500006BF5 /* PlusIndicatorView.swift in Sources */, FAC0BBE1291D0EB000E6F106 /* SelectAssetCell.swift in Sources */, + 0701B8F52C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift in Sources */, 8428765A24ADDE0200D91AD8 /* ProfileViewFactory.swift in Sources */, 8490141624A92F6D008F705E /* OnboardingMainViewFactory.swift in Sources */, FAC0BBD2291D0EB000E6F106 /* SelectNetworkViewModel.swift in Sources */, FA08B3652A31A09E00D9D126 /* BigUInt+StringInitializable.swift in Sources */, 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */, 842348E92614F6EA002127AF /* SkeletonLoadable.swift in Sources */, - FAAA294B2B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift in Sources */, 8490147724A94A37008F705E /* RootPresenter.swift in Sources */, FA5137AC29AC6F2F00560EBA /* PolkaswapDisclaimerViewLayout.swift in Sources */, 8428765724ADDE0200D91AD8 /* ProfileTableViewCell.swift in Sources */, FA7D46CF2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift in Sources */, 8401AE8D2641EF7B000B03E3 /* NetworkFeeFooterView.swift in Sources */, + 0701B9CB2C78FE2C00DCD395 /* ScamInfoFetcher.swift in Sources */, 841AAC2F26F73E0C00F0A25E /* LocalStorageKeyFactory.swift in Sources */, FACD429F2A5BE811009975AA /* StorageMigrator.swift in Sources */, FAFFAE7429AC84B10074AF1F /* SubqueryLiquidity.swift in Sources */, @@ -16334,10 +17690,12 @@ 847119EB262EFF3800716580 /* ValidatorPayoutInfoFactory.swift in Sources */, 84CFF1F126526FBC00DB7CF7 /* StakingBondMoreConfirmationInteractor.swift in Sources */, FAD429122A86567F001D6A16 /* BannersRouter.swift in Sources */, + 0701B8B82C78F69500DCD395 /* UIImage+ColorsInvert.swift in Sources */, AEF7404E25E6DC9400407D41 /* RewardCalculatorEngine.swift in Sources */, FA7A4C7F2A1F937A0051FB4D /* ParachainRewardCalculatorEngine.swift in Sources */, 07DFA4462897EE370035A8AB /* WalletsManagmentViewModelFactory.swift in Sources */, 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */, + 0701B9A62C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift in Sources */, FAA0137E28DA12F0000A5230 /* StakingRedeemPoolViewModelFactory.swift in Sources */, FAFFAE8529AC84B10074AF1F /* SubqueryRewardOrSlash.swift in Sources */, 84CA68D926BE9E7F003B9453 /* SpecVersionSubscription.swift in Sources */, @@ -16354,6 +17712,7 @@ AEE5FB1026457806002B8FDC /* StakingRewardDestSetupViewFactory.swift in Sources */, 849ABE49262763BB00011A2A /* Longrun.swift in Sources */, 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */, + 0701B9B52C78FD2000DCD395 /* BlockExplorerApiKey.swift in Sources */, 076D9D41293F2A1F002762E3 /* SlippageToleranceView.swift in Sources */, 84644A30256722D2004EAA4B /* TriangularedBlurButton+Inspectable.swift in Sources */, FA6262672AC2E35A005D3D95 /* WalletConnectProposalRouter.swift in Sources */, @@ -16363,6 +17722,7 @@ F4D6FF4D26B3EB65002313AF /* AnalyticsHistoryCell.swift in Sources */, 84F43C0F25DF016600AEDA56 /* DispatchQueueHelper.swift in Sources */, 8490147824A94A37008F705E /* RootPresenterFactory.swift in Sources */, + 0701B99D2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift in Sources */, FAD646D2284F1069007CCB92 /* StakingBondMoreConfirmationRelaychainViewModelState.swift in Sources */, 849014C224AA87E4008F705E /* LocalAuthPresenter.swift in Sources */, 84CA68D126BE99ED003B9453 /* RuntimeProviderFactory.swift in Sources */, @@ -16374,6 +17734,7 @@ 8472C5AF265CF9C500E2481B /* StakingRewardDestConfirmViewLayout.swift in Sources */, 84FD3DBB254104B600A234E3 /* WalletNewTransactionInserted.swift in Sources */, 8428765C24ADDE0200D91AD8 /* ProfileViewController.swift in Sources */, + 0701B8982C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift in Sources */, FAC0BBDB291D0EB000E6F106 /* SendDataValidatingFactory.swift in Sources */, 843B1D7A263EED5C00AF8957 /* StakingUnbondConfirmLayout.swift in Sources */, F4B06BFA264509E8003214D5 /* SetControllerCall.swift in Sources */, @@ -16394,9 +17755,9 @@ 842876B224AE059700D91AD8 /* SupportData.swift in Sources */, 84893C0524DA8663008F6A3F /* AccountCreationError.swift in Sources */, 84282FBD26D05A54002CA322 /* ChainRegistryFacade.swift in Sources */, + 071606C42C7C6C2400C1DF75 /* PricesUpdated.swift in Sources */, F4DCAE4F2620819000CCA6BF /* PayoutRewardsService.swift in Sources */, 8463A70325E2FCD0003B8160 /* WeakWrapper.swift in Sources */, - FAAA29292B8DCE3E0089AFE6 /* StorageResponseValueExtractor.swift in Sources */, 8401620B25E144D50087A5F3 /* AmountInputAccessoryView.swift in Sources */, FAD4290C2A86567F001D6A16 /* BannersProtocols.swift in Sources */, 84D2F45F25EF0599008B914D /* RecommendedValidatorCell.swift in Sources */, @@ -16409,12 +17770,10 @@ 84100F3826A6085C00A5054E /* YourValidatorListDescSectionView.swift in Sources */, FAE9EB9F288ABBBE009390B6 /* AnalyticRewardsParachainViewModelState.swift in Sources */, AE528E4F26852E410058935A /* ValidatorSearchViewModelFactory.swift in Sources */, - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */, 07089AF528B64701001566CA /* ChainReconnectingEvent.swift in Sources */, 8490147624A94A37008F705E /* RootInteractor.swift in Sources */, F40966CE26B297D6008CD244 /* AnalyticsStakeProtocols.swift in Sources */, 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */, - FAF6007A2C48F12000E56558 /* AccountScoreViewModel.swift in Sources */, 849014C524AA890D008F705E /* UIFont+Style.swift in Sources */, 0726FFB12AC439DE00336D76 /* WalletConnectPolkadotSignature.swift in Sources */, FA3430EE285065A1002B5975 /* StakingUnbondConfirmRelaychainStrategy.swift in Sources */, @@ -16422,7 +17781,6 @@ 8490149924AA7892008F705E /* SharingPresentable.swift in Sources */, FA5137AA29AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift in Sources */, 84754C9C2513B26000854599 /* AccountPickerTableViewCell.swift in Sources */, - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */, 8472C5B1265CF9C500E2481B /* StakingRewardDestConfirmViewFactory.swift in Sources */, F4488CF226143E0000AEE6DB /* EraRewardPoints.swift in Sources */, 849DF02F26C53DB900B702F4 /* RuntimeSyncEvents.swift in Sources */, @@ -16430,6 +17788,7 @@ FA7336FD2A132F740096A291 /* AlchemyHistoryOperationFactory.swift in Sources */, 844DD65525EAF32D00B1DA97 /* SelectValidatorsStartViewModel.swift in Sources */, FA936BD0286C41E80059B97A /* StakingRebondConfirmationRelaychainViewModelState.swift in Sources */, + 0701B9002C78F71800DCD395 /* OKXSupportedChain.swift in Sources */, C661B3AD27DF0193005F1F7D /* AccountCreateViewLayout.swift in Sources */, 8470D6D0253E321C009E9A5D /* StorageSubscriptionProtocols.swift in Sources */, 076D9D39293E3500002762E3 /* PolkaswapLiquidityFilterMode.swift in Sources */, @@ -16440,11 +17799,11 @@ FA7254352AC2E48500EC47A6 /* String+Range.swift in Sources */, 844CB57426FA01DD00396E13 /* SubstrateRepositoryFactory.swift in Sources */, 849013DF24A927E2008F705E /* SettingsExtension.swift in Sources */, - FAAA29432B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift in Sources */, 842898CC265A8EC3002D5D65 /* RemoteImageViewModel.swift in Sources */, FAA086CE28470B2100CC2F33 /* SelectValidatorsConfirmParachainStrategy.swift in Sources */, 84DA3B1424C6D7C700B5E27F /* RuntimeDispatchInfo.swift in Sources */, F4D96B6C2637EB1300B23D3D /* StakingBalanceActionsWidgetViewModel.swift in Sources */, + 0701B9BF2C78FD8800DCD395 /* ZChainHistoryResponse.swift in Sources */, FA8F6386298253ED004B8CD4 /* AddConnectionError.swift in Sources */, FA6ECE762BF49D3D00481B2B /* LiquidityPoolDetailsViewModelFactory.swift in Sources */, 84A8FD8E265FDA76002ADB58 /* CrowdloanContributionConfirmData.swift in Sources */, @@ -16457,6 +17816,7 @@ 8428768624AE046300D91AD8 /* LanguageSelectionPresenter.swift in Sources */, 8490152724ABCC40008F705E /* NumberFormatter.swift in Sources */, 846A2C4325271CDE00731018 /* TransactionType.swift in Sources */, + 0701B89F2C78F34A00DCD395 /* AccountStatisticsViewController.swift in Sources */, 2A84E87825D425750006FE9C /* AlertControllerFactory.swift in Sources */, 0761DEB228E1F54D00B90D2C /* StakingPoolCreateViewModel.swift in Sources */, FAD429032A86567F001D6A16 /* BackupCreatePasswordAssembly.swift in Sources */, @@ -16479,17 +17839,21 @@ FAD4290D2A86567F001D6A16 /* BannersViewModelFactory.swift in Sources */, FACD429B2A5BE811009975AA /* SubstrateStorageMigrator.swift in Sources */, F4A6C9E4265283EB00FABF98 /* StakingStateViewModelFactory+Alerts.swift in Sources */, - FAD5FF2E2C464717003201F5 /* NomisAccountStatisticsRequest.swift in Sources */, FAD429202A865680001D6A16 /* WalletNameProtocols.swift in Sources */, FA7741DE2B6A350200358315 /* StakingRewardFetcher.swift in Sources */, 84452F5825D5C30600F47EC5 /* FilesRepository.swift in Sources */, + 0701B9932C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift in Sources */, FAD067A72C2044490050291F /* SubstrateDataModel.xcdatamodeld in Sources */, FAFFAE7C29AC84B10074AF1F /* KmmCallCodingPath.swift in Sources */, + 0701B9B32C78FBC600DCD395 /* AccountStatistics.swift in Sources */, FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */, FAADC1AD29261F7000DA9903 /* PoolRolesConfirmRouter.swift in Sources */, F4871DF326D63E8700D27F23 /* AnalyticsRewardDetailsViewModelFactory.swift in Sources */, + 074988DD2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift in Sources */, + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */, FA9A8F1F2A72573C008FA99F /* AlchemyHistory.swift in Sources */, 84873B0426029B75000A83EE /* StakingEstimationViewModel.swift in Sources */, + 0701B8F92C78F71800DCD395 /* OKXDexProtocol.swift in Sources */, AE6F7FE32685E812002BBC3E /* ValidatorListFilterViewLayout.swift in Sources */, FA169FA928BCBA1F00E8D2DC /* PoolStakingAccountSubscription.swift in Sources */, 84038FF026FFBE0600C73F3F /* JsonLocalStorageSubscriber.swift in Sources */, @@ -16498,6 +17862,8 @@ FAFFAE9129AC84B10074AF1F /* SubqueryStakeData.swift in Sources */, FA3067502B627D23006A0BA5 /* TokensLocksRequest.swift in Sources */, FA37AE352859C473001DCA96 /* StakingUnbondSetupParachainViewModelFactory.swift in Sources */, + 0701B8FC2C78F71800DCD395 /* OKXDexSubrouter.swift in Sources */, + 0701B8BC2C78F69500DCD395 /* Decimal+Formatting.swift in Sources */, F408E9BE26B80FD30043CFE0 /* AnalyticsSectionHeader.swift in Sources */, FA7254382AC2E48500EC47A6 /* ABIDecoding.swift in Sources */, FA6262562AC2E35A005D3D95 /* MultiSelectNetworksProtocols.swift in Sources */, @@ -16510,6 +17876,7 @@ 84F4A9A42551A8F3000CF0A3 /* AccountExportPasswordError.swift in Sources */, FAF9C2AE2AAF3FDF00A61D21 /* GetPreinstalledWalletAssembly.swift in Sources */, 84CA68DB26BEA33F003B9453 /* ChainRegistryFactory.swift in Sources */, + 0701B9A32C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift in Sources */, FAD428982A860C9B001D6A16 /* EthereumNodeFetching.swift in Sources */, AE9EF255260A82830026910A /* StoriesViewController.swift in Sources */, 8463A72D25E3A8E1003B8160 /* ChainStorageDecodedItem.swift in Sources */, @@ -16536,14 +17903,18 @@ 8463A71A25E3116A003B8160 /* BalanceViewModel.swift in Sources */, 076D9D35293E34AF002762E3 /* LiquiditySourceType.swift in Sources */, FA286B0B2A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift in Sources */, + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */, + 0701B9732C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift in Sources */, C6CA3081286192C50087776D /* DelegationViewModel.swift in Sources */, FAD429052A86567F001D6A16 /* BackupCreatePasswordRouter.swift in Sources */, FACD42A42A5BE811009975AA /* KeystoreMigrator.swift in Sources */, FAA0137528DA12E3000A5230 /* StakingRedeemConfirmationRelaychainViewModelFactory.swift in Sources */, FA97E68B2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift in Sources */, + 0701B99B2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift in Sources */, FA2E9BC127A2A1000023FAD2 /* FilterSectionHeaderView.swift in Sources */, FA17B4D127E9CF21006E0735 /* main.swift in Sources */, FAA0133C28DA12B6000A5230 /* StakingPoolManagementProtocols.swift in Sources */, + 0701B8FF2C78F71800DCD395 /* OKXResponse.swift in Sources */, FACD42842A5BE7F4009975AA /* AwaitOperation.swift in Sources */, FA5137B829AC76EB00560EBA /* SubqueryHistoryOperationFactory.swift in Sources */, 8425EA9A25EA83FA00C307C9 /* ChainData+Value.swift in Sources */, @@ -16568,11 +17939,13 @@ 84031C17263EC95C008FD9D4 /* SetPayeeCall.swift in Sources */, 84100F3A26A60B0900A5054E /* YourValidatorListStatusSectionView.swift in Sources */, 84F30EEC25FFF40C00039D09 /* Nomination.swift in Sources */, - FAD5FF272C463C4F003201F5 /* AccountStatistics.swift in Sources */, + 0701B97C2C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift in Sources */, FA7254442AC2E48500EC47A6 /* WalletConnectSocketFactory.swift in Sources */, FA37AE3C2859CCD8001DCA96 /* StakingUnbondConfirmParachainViewModelFactory.swift in Sources */, + 0701B89E2C78F34A00DCD395 /* AccountStatisticsRouter.swift in Sources */, FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */, FA8800562B2C610E000AE5EB /* ReefSubsquidHistory.swift in Sources */, + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */, 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */, FACD427B2A5BE7C6009975AA /* RuntimeSnapshotReady.swift in Sources */, 84DB4E5C25EA71C100A6DF41 /* StringScaleMapper.swift in Sources */, @@ -16580,6 +17953,7 @@ 843C49D824DD98CC00B71DDA /* DerivationPathConstants.swift in Sources */, FA8FD18E2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift in Sources */, AEE5FB1A26457AE9002B8FDC /* StakingRewardDestSetupProtocols.swift in Sources */, + 0701B8F22C78F71800DCD395 /* AccountStatisticsFetching.swift in Sources */, 8436EDE225895804004D9E97 /* RampProvider.swift in Sources */, 849013AC24A80984008F705E /* AppDelegate.swift in Sources */, FAD428942A834A8E001D6A16 /* TopViewControllerHelper.swift in Sources */, @@ -16608,7 +17982,6 @@ AEA0C8A8267B6B3200F9666F /* SelectedValidatorListPresenter.swift in Sources */, FAFFAE9529AC84B10074AF1F /* GiantsquidTransfer.swift in Sources */, FA256985274CE5A500875A53 /* BalanceLocks+Sort.swift in Sources */, - FAAA29312B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift in Sources */, FA34EEE22B98723C0042E73E /* OnboardingViewLayout.swift in Sources */, C6264C302799DA4500FCA0DB /* WalletDetailsViewModel.swift in Sources */, 8463A71F25E39E07003B8160 /* StorageProviderSource.swift in Sources */, @@ -16616,17 +17989,19 @@ 8430AADC26022C58005B1066 /* NoStashState.swift in Sources */, 84F4A9182550331D000CF0A3 /* ExportOption.swift in Sources */, FA2FC80C28B3807C00CC0A42 /* StakingPoolJoinConfirmInteractor.swift in Sources */, - FAD240D92C64D3FF00B389FF /* ZChainHistoryResponse.swift in Sources */, 84FD3DB12540C09800A234E3 /* TransactionHistoryMergeManager.swift in Sources */, + 071606CC2C7C6C8800C1DF75 /* AssetModelMapper.swift in Sources */, 84038FEC26FFBA4D00C73F3F /* PriceLocalStorageSubscriber.swift in Sources */, 8473D4082657E9AD00B394B2 /* CrowdloanLastContribution.swift in Sources */, FA15BC0D2823ADCD0037C023 /* ParachainStakingLocalSubscriptionFactory.swift in Sources */, 07D05E6528EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift in Sources */, 845FC93426B09EDB0021EC48 /* RoundedButton+Style.swift in Sources */, FABA163B2B0C9510001AF2F0 /* NetworkManagmentPresenter.swift in Sources */, + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */, FA4B929F2844D0C80003BCEF /* SnapKit.swift in Sources */, AE9EF25F260A82A50026910A /* StoriesPresenter.swift in Sources */, FA34EEF12B9875CC0042E73E /* AccountIdVariant.swift in Sources */, + 0701B9772C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift in Sources */, 07089AFE28B7841A001566CA /* SheetAlertViewLayout.swift in Sources */, FA3067222B621540006A0BA5 /* LockProtocol.swift in Sources */, C63468DA28E5E3A3005CB1F1 /* TableView+Scrolling.swift in Sources */, @@ -16635,6 +18010,7 @@ 07DE95CB28A169A600E9C2CB /* AssetListSearchRouter.swift in Sources */, FA93A2EC2833B1000021330F /* RecommendedValidatorListRelaychainStrategy.swift in Sources */, 845C40792702571200BFA50B /* StakingRemoteSubscriptionService.swift in Sources */, + 0701B9752C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift in Sources */, FAA0133A28DA12B6000A5230 /* StakingPoolManagementViewController.swift in Sources */, 8468B86A24F63CBA00B76BC6 /* AddAccount+AccountImportInteractor.swift in Sources */, 84B66A0B26FDB70F0038B963 /* CrowdloansListInteractor+Protocols.swift in Sources */, @@ -16678,7 +18054,6 @@ FAFBEE83284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift in Sources */, 84D1F2FB260F51770077DDFE /* SwitchAccount.swift in Sources */, 8428765D24ADDE0200D91AD8 /* ProfileInteractor.swift in Sources */, - FAB90CE92C6F584000D13804 /* ChainSelectionCollectionCell.swift in Sources */, 849014C124AA87E4008F705E /* LocalAuthProtocol.swift in Sources */, 841E6B0A25EC1C140007DDFE /* RelaychainValidatorOperationFactory.swift in Sources */, 8472C5B5265CF9C500E2481B /* StakingRewardDestConfirmProtocols.swift in Sources */, @@ -16689,22 +18064,25 @@ FAF5E9CE27E46D3E005A3448 /* URLConstants.swift in Sources */, 070CDD8B2ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift in Sources */, F477CD9026306DC6004DF739 /* StakingManageCell.swift in Sources */, + 0701B9982C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift in Sources */, AEA2C1B62681E9B20069492E /* ValidatorSearchViewFactory.swift in Sources */, AEE4E35225E945AA00D6DF31 /* RewardCalculatorFacade.swift in Sources */, - FAAA29412B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift in Sources */, + 0701B9652C78FAF000DCD395 /* LiquidityPools+ViewModel.swift in Sources */, + 0701B9922C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift in Sources */, FA6C176429935DC800A55254 /* SubqueryRewardOperationFactory.swift in Sources */, AE4A71D42607B1440017C663 /* NetworkStakingInfoViewModel.swift in Sources */, - FA41B6292C64C15000D0713A /* VicscanHistoryResponse.swift in Sources */, FAADC1B82926597400DA9903 /* ScanQRInteractor.swift in Sources */, FAD067BF2C2044B10050291F /* AssetManagementInteractor.swift in Sources */, 8439398A2636E8840087658D /* YourValidatorListViewLayout.swift in Sources */, FA93A3012834C8240021330F /* ValidatorInfoRelaychainStrategy.swift in Sources */, 84378775264D2C6600E6AFD2 /* UsernameSetupModel.swift in Sources */, FAD4290F2A86567F001D6A16 /* BannerCollectionViewCell.swift in Sources */, + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */, 84DB4E2325E945E000A6DF41 /* SlashingSpans.swift in Sources */, FA93A2E42833B0520021330F /* RecommendedValidatorListFlow.swift in Sources */, 849014DB24AA8F60008F705E /* MainTabBarProtocol.swift in Sources */, FA286B152A3043DB008BD527 /* CrossChainConfirmationViewModelFactory.swift in Sources */, + 0701B99E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift in Sources */, 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */, 84786E1525FA57B90089DFF7 /* StakingLedger.swift in Sources */, 8497FC6026317783002FEAA7 /* AccountInfoViewModel.swift in Sources */, @@ -16714,6 +18092,7 @@ 8490142F24A935FE008F705E /* ControllerBackedProtocol.swift in Sources */, FAFFAE8B29AC84B10074AF1F /* SubqueryEraValidatorInfo.swift in Sources */, 84DF21A125347031005454AE /* DetailsDisplayTableViewCell.swift in Sources */, + 0701B9882C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift in Sources */, FA256994274CE65100875A53 /* HTTPRequest.swift in Sources */, 07BF3D962B3D8B3A0046ABF4 /* PriceDataSource.swift in Sources */, AE2C845D25EE833A00986716 /* RewardViewModel.swift in Sources */, @@ -16723,7 +18102,9 @@ FA5137AE29AC6F2F00560EBA /* PolkaswapDisclaimerAssembly.swift in Sources */, FA9A8F052A6FADBD008FA99F /* EtherscanHistoryResponse.swift in Sources */, 8406B5AB26FBD9EB00635B61 /* AccountInfoUpdatingService.swift in Sources */, + 0701B8FB2C78F71800DCD395 /* OKXDexRouter.swift in Sources */, FA1109EB27A92D56003C2158 /* ChainAction.swift in Sources */, + 0701B8AC2C78F5DB00DCD395 /* FireHistoryOperationFactory.swift in Sources */, FA86442A276743BB00956D8E /* WalletTransactionHistoryDataState.swift in Sources */, FA8ED43628FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift in Sources */, AE6F7FE62685F2C3002BBC3E /* ValidatorListFilterViewModel.swift in Sources */, @@ -16750,10 +18131,10 @@ FA99426C28053CFA00D771E5 /* WalletDetailsFlow.swift in Sources */, FAC6CD902BA7FCA70013A17E /* AssetTransactionFee.swift in Sources */, FA9A8F262A72579D008FA99F /* AlchemySortOrder.swift in Sources */, + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */, FAFFAEAC29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift in Sources */, FA8800632B31A04C000AE5EB /* StakingAccountResolverAssembly.swift in Sources */, FAA013B328DA1355000A5230 /* StakingPoolRewards.swift in Sources */, - FAAA292A2B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift in Sources */, FAA0139828DA1312000A5230 /* StakingBondMoreConfirmationPoolStrategy.swift in Sources */, 84CFF1E526526FBC00DB7CF7 /* StakingBondMoreViewController.swift in Sources */, FA1D02012BBE713D005B7071 /* LiquidityPoolsListViewController.swift in Sources */, @@ -16761,7 +18142,6 @@ 8401AEC72642A71D000B03E3 /* StakingRebondConfirmationPresenter.swift in Sources */, FAC6CDA12BA80CB10013A17E /* WalletTransactionType.swift in Sources */, FA74359F29C073790085A47E /* ChainSettingsMapper.swift in Sources */, - FA4B75B22C6F3270001B954F /* MultichainChainFetching.swift in Sources */, 844CB56226F943AD00396E13 /* WalletLocalSubscriptionFactory.swift in Sources */, 8490386B262E22DC0016D541 /* NominatorPayoutInfoFactory.swift in Sources */, C6264C362799F69900FCA0DB /* WalletDetailsPresenter.swift in Sources */, @@ -16780,6 +18160,7 @@ FAAF946C2A0CFF90009A4BA5 /* Array+Duplicates.swift in Sources */, 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */, FAB16A312A9C9BBF00E71F43 /* NftCollectionCell.swift in Sources */, + 0701B8A92C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift in Sources */, FAFFAE8C29AC84B10074AF1F /* SubqueryDelegatorHistoryNodes.swift in Sources */, FA34EEEB2B98723C0042E73E /* BalanceLocksDetailViewLayout.swift in Sources */, 849014E024AA8F60008F705E /* MainTabBarWireframe.swift in Sources */, @@ -16799,21 +18180,23 @@ FADBA5F42B5FE5C900CFCF30 /* ChainAccountPresenter.swift in Sources */, 8467FCFC24E5C3BD005D486C /* URLHandlingService.swift in Sources */, F40966BA26B297D6008CD244 /* AnalyticsSummaryRewardViewModel.swift in Sources */, + 0701B99F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift in Sources */, FAA0133D28DA12B6000A5230 /* StakingPoolManagementPresenter.swift in Sources */, - FAAA29422B8DCED90089AFE6 /* JSONRPCListWorker.swift in Sources */, 849013DB24A927E2008F705E /* Logger.swift in Sources */, 84443BA226C123F100C33B5D /* Data+Random.swift in Sources */, 07DE95CA28A169A600E9C2CB /* AssetListSearchAssembly.swift in Sources */, - FA273E5E2C4F680500F9CB13 /* AccountStatisticsViewModel.swift in Sources */, 070CDD872ACBE59700F3F20A /* QRView.swift in Sources */, FA6262582AC2E35A005D3D95 /* MultiSelectNetworksRouter.swift in Sources */, 84C6800E24D6ECE800006BF5 /* ExpandableActionControl.swift in Sources */, 8490148424AA27C1008F705E /* OperationManagerFacade.swift in Sources */, + 0701B9A02C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift in Sources */, + 0701B9912C78FAF000DCD395 /* LiquidityPoolListViewModel.swift in Sources */, FAD067C72C2044B10050291F /* AssetManagementViewLayout.swift in Sources */, - FAD240DE2C64E97900B389FF /* KaiaHistoryResponse.swift in Sources */, + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */, 2AD0A19025D3D1E100312428 /* GitHubPhishingServiceFactory.swift in Sources */, FA14AE892B0785670066CADF /* SoraSubsquidHistoryResponse.swift in Sources */, FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */, + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */, FACD42BC2A5BE91E009975AA /* PortionRewardCalculatorEngine.swift in Sources */, AEF505A92620249F0098574D /* UIColor+HEX.swift in Sources */, FACD42A12A5BE811009975AA /* MultiassetV2MigrationPolicy.swift in Sources */, @@ -16847,8 +18230,8 @@ 84754C882510BAFE00854599 /* ModalAlertFactory.swift in Sources */, C640416028F5191100845780 /* CreateContactViewModel.swift in Sources */, 8430AACC2602249B005B1066 /* InitialStakingState.swift in Sources */, - FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */, 84786DA825F9F58E0089DFF7 /* EraValidatorService+Fetch.swift in Sources */, + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */, FAD428FF2A86567F001D6A16 /* BackupRiskWarningsAssembly.swift in Sources */, 8428769324AE046300D91AD8 /* AboutWireframe.swift in Sources */, FA6261F22AC2A535005D3D95 /* MIME+PathExtensions.swift in Sources */, @@ -16868,6 +18251,9 @@ 84DB4E6C25EA740600A6DF41 /* ConstantCodingPath.swift in Sources */, 84FA835A265CE5BE00FDF727 /* TitleMultiValueView.swift in Sources */, C6398F36287FD230008EF3BE /* StakingBondMoreConfirmParachainViewModelFactory.swift in Sources */, + 0701B9A12C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift in Sources */, + 0701B8B12C78F63400DCD395 /* InfoTitleView.swift in Sources */, + 0701B9662C78FAF000DCD395 /* LiquidityPoolsConstants.swift in Sources */, 849014BB24AA87E4008F705E /* PinSetupWireframe.swift in Sources */, F40966FE26B29A58008CD244 /* ChartData.swift in Sources */, F40D0AF2260CCE5800CBD43B /* StakingPayoutBaseTableCell.swift in Sources */, @@ -16899,6 +18285,7 @@ FAD646DA284F58C1007CCB92 /* StakingUnbondSetupRelaychainStrategy.swift in Sources */, FA62625D2AC2E35A005D3D95 /* RawDataInteractor.swift in Sources */, FABA163D2B0C9510001AF2F0 /* NetworkManagmentProtocols.swift in Sources */, + 0701B9852C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */, 84113B6C255B2835009BD21A /* AccountCreateError.swift in Sources */, FA17B4AE27E84911006E0735 /* WarningAlertConfig.swift in Sources */, 849014C024AA87E4008F705E /* ScreenAuthorizationPresenter.swift in Sources */, @@ -16908,12 +18295,15 @@ FA4B92982844D0100003BCEF /* ShimmeredLabel.swift in Sources */, FA7254342AC2E48500EC47A6 /* String+Hex.swift in Sources */, AEB9979026119E4D005C60A5 /* StoriesViewModelFactory.swift in Sources */, + 0701B97A2C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift in Sources */, 84754C852510A1A400854599 /* ModalAlertPresenting.swift in Sources */, 8494424A265306BD0016E7BD /* ChangeRewardDestinationViewModel.swift in Sources */, + 0701B9052C78F71800DCD395 /* OKXDexAggregatorService.swift in Sources */, 845B821526EF657700D25C72 /* PersistentValueSettings.swift in Sources */, F4DCAE4726207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift in Sources */, FAA0139128DA1303000A5230 /* StakingPayoutConfirmationPoolStrategy.swift in Sources */, FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */, + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */, FA72543E2AC2E48500EC47A6 /* ABIEncoding.swift in Sources */, F4F65C3826D8B86F002EE838 /* FWXAxisEmptyValueFormatter.swift in Sources */, 8424DB0B26B8466A008C834F /* ValidatorOperationFactoryProtocol.swift in Sources */, @@ -16921,6 +18311,7 @@ 848FFE6625E6742400652AA5 /* EraValidatorService.swift in Sources */, 8493D3E927059B6700157009 /* StakingServiceFactory.swift in Sources */, 84729758260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift in Sources */, + 0701B97E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */, FA4B92B22844D0E60003BCEF /* SelectCurrencyProtocols.swift in Sources */, 846CD24D2656FEB800A2E4B6 /* StorageKeysQueryService.swift in Sources */, FA286B1B2A3043DB008BD527 /* CrossChainProtocols.swift in Sources */, @@ -16928,6 +18319,7 @@ 8468B86C24F63CEF00B76BC6 /* AddAccount+AccountConfirmInteractor.swift in Sources */, F43A597B26D53775005E973D /* AnalyticsBaseViewController.swift in Sources */, FA256999274CE65100875A53 /* HTTPRequestBuilderProtocol.swift in Sources */, + 0701B9862C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */, FAA0138C28DA1303000A5230 /* StakingPayoutConfirmationViewModelFactory.swift in Sources */, 84D8F16324D8194100AF43E9 /* TitleWithSubtitleTableViewCell.swift in Sources */, FA99C931283B4ADF007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedStrategy.swift in Sources */, @@ -16943,7 +18335,6 @@ 84F30EE425FFAC0800039D09 /* StreamableProviderOptions+Substrate.swift in Sources */, FAF9C2A42AAF3FCC00A61D21 /* FeatureToggleService.swift in Sources */, FAD067CB2C2044F00050291F /* OnboardingConfigVersionResolver.swift in Sources */, - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */, FA2FC80D28B3807D00CC0A42 /* StakingPoolJoinConfirmRouter.swift in Sources */, 070B2C61289CFE0000F78F82 /* SelectedNetworkButton.swift in Sources */, C6A8D6BD27EF0CF40080F81C /* UIView.swift in Sources */, @@ -16956,7 +18347,6 @@ FA2FC7FA28B3807C00CC0A42 /* StakingPoolListTableCellModel.swift in Sources */, C661B3B227DF99A8005F1F7D /* AccountCreateViewController.swift in Sources */, 8461CC8326BC0006007460E4 /* MortalEraOperationFactory.swift in Sources */, - FA273E5C2C4F67AA00F9CB13 /* AccountStatisticsViewModelFactory.swift in Sources */, 8425EA8B25EA7AF200C307C9 /* UnappliedSlashes.swift in Sources */, 84893BFE24DA0000008F6A3F /* FieldStatus.swift in Sources */, 84F51053263AB440005D15AE /* StakingUnbondSetupLayout.swift in Sources */, @@ -16967,6 +18357,7 @@ FA62623B2AC2E35A005D3D95 /* WalletConnectConfirmationProtocols.swift in Sources */, 8448221826B1624E007F4492 /* SelectValidatorsConfirmViewLayout.swift in Sources */, C6267B9528BDF6A5001E31BF /* ChainAssetListPresenter.swift in Sources */, + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */, FAD429362A8656B7001D6A16 /* UICollectionView.swift in Sources */, 8490145624A9404E008F705E /* AttributedStringDecorator.swift in Sources */, 843910B4253EE52100E3C217 /* WalletBalanceChanged.swift in Sources */, @@ -16992,8 +18383,9 @@ 07BF3D9B2B3D8C370046ABF4 /* ManualOperation.swift in Sources */, 8490142C24A935FE008F705E /* ErrorPresentable.swift in Sources */, C6267B8F28BDF6A5001E31BF /* ChainAssetListViewModel.swift in Sources */, + 0701B8E92C78F71800DCD395 /* TonConnectError.swift in Sources */, 84DF21A5253473B0005454AE /* ModalInfoFactory.swift in Sources */, - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */, + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */, FA6262692AC2E35A005D3D95 /* WalletConnectProposalExpandableTableCell.swift in Sources */, 847C9620255340F2002D288F /* ExportGenericViewController.swift in Sources */, FA86442C27674A8600956D8E /* WalletTransactionHistoryViewState.swift in Sources */, @@ -17005,12 +18397,11 @@ FAFFAE9C29AC84B10074AF1F /* ParachainSubsquidRewardResponse.swift in Sources */, FACD42A52A5BE811009975AA /* Migrating.swift in Sources */, FAA013A328DA1328000A5230 /* TitleMultiValueViewModel.swift in Sources */, - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */, + 0701B9A22C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift in Sources */, 84F4386125D9A83100AEDA56 /* TimeInterval+Time.swift in Sources */, - FAEFA6D52C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift in Sources */, 844EFB5F265FCE180090ACB1 /* CrowdloanContributionInteractor.swift in Sources */, - FAD240E22C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift in Sources */, FAA0138F28DA1303000A5230 /* StakingPayoutConfirmationPoolViewModelFactory.swift in Sources */, + 0701B9972C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift in Sources */, FAD428F32A86567F001D6A16 /* BackupPasswordViewLayout.swift in Sources */, 845BB8C025E4508800E5FCDC /* SS58FactoryExtensions.swift in Sources */, 070B2C59289CE43A00F78F82 /* SelectNetworkRouter.swift in Sources */, @@ -17019,9 +18410,11 @@ 8428765424ADDE0200D91AD8 /* ProfileViewModelFactory.swift in Sources */, FAA0134E28DA12D7000A5230 /* StakingUnbondConfirmPoolStrategy.swift in Sources */, C661B3B427DFBA41005F1F7D /* AccountInfoSubscriptionProviderWrapper.swift in Sources */, + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */, F40966C326B297D6008CD244 /* AnalyticsContainerViewLayout.swift in Sources */, 84E1CD02260DCC62001E81B5 /* SwitchAccount+OnboardingMainWireframe.swift in Sources */, FAFFAE8D29AC84B10074AF1F /* SubqueryDelegationAction.swift in Sources */, + 0701B9012C78F71800DCD395 /* OKXSwap.swift in Sources */, FACD42982A5BE811009975AA /* SubstrateStorageVersion.swift in Sources */, 84D1111326B932C40016D962 /* ChainNodeModel.swift in Sources */, 84C6801224D6F44400006BF5 /* ExpandableActionControl+Inspectable.swift in Sources */, @@ -17029,6 +18422,7 @@ 076D9D4A29419745002762E3 /* PolkaswapRemoteSubscriptionService.swift in Sources */, FA4B92B62844D0E60003BCEF /* SelectCurrencyViewLayout.swift in Sources */, FA072C21277B19A900731718 /* ImageGalleryProtocols.swift in Sources */, + FAA92BB22D4356C5004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift in Sources */, 847119CD262EF61F00716580 /* PayoutValidatorForValidatorFactory.swift in Sources */, C6398F38287FE988008EF3BE /* StakingBondMoreViewModelFactory.swift in Sources */, FA176BB52851A96500258125 /* ParachainStakingRoundInfo.swift in Sources */, @@ -17055,6 +18449,7 @@ FAC6CD982BA807D30013A17E /* AccessoryView.swift in Sources */, 84FFE505261290830054EA63 /* NetworkInfoView.swift in Sources */, FAC6CD8C2BA7FA6C0013A17E /* AmountDecimal.swift in Sources */, + FA8B02112D375A730066F070 /* ErasStakersOverviewKey.swift in Sources */, 8490144F24A93E2E008F705E /* UIImage+Drawing.swift in Sources */, FAB16A342A9C9BD000E71F43 /* NftCellViewModel.swift in Sources */, 8444D13F267133CF00AF6D8C /* CrowdloanAddMemo.swift in Sources */, @@ -17089,38 +18484,38 @@ C6CA203D2B06C0D9001503C2 /* NftFiltersInteractor.swift in Sources */, FAFFAE4029AC84850074AF1F /* AccountManagementPresentable.swift in Sources */, FA15BC152823CB7B0037C023 /* ParachainCollatorOperationFactory.swift in Sources */, - FAAA29212B8DCE260089AFE6 /* StorageRequestPerformer.swift in Sources */, F40966B826B297D6008CD244 /* AnalyticsContainerProtocols.swift in Sources */, FAB0EDE227AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift in Sources */, 0702B35729794BA6003519F5 /* SwapTransactionViewModelFactory.swift in Sources */, AEDD7C0F269C81F500A8405F /* BlockWeights.swift in Sources */, 8428769524AE046300D91AD8 /* AboutViewController.swift in Sources */, AEE4E34D25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift in Sources */, - FA2FC82D28B3816D00CC0A42 /* StorageKeyDataExtractor.swift in Sources */, 849013DD24A927E2008F705E /* KeystoreExtensions.swift in Sources */, - FA236A412C4FA0A4009330F2 /* NomisJSONDecoder.swift in Sources */, FAD429062A86567F001D6A16 /* BackupCreatePasswordPresenter.swift in Sources */, FAD0679A2C2043FC0050291F /* ChainConnectionVisibilityHelper.swift in Sources */, FAD0068427EA255900C97E09 /* AboutTableViewCell.swift in Sources */, + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */, FAE39AF32A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift in Sources */, AE20602C2636EA5800357578 /* MoonPayKeys.swift in Sources */, FA99C92F283B4AC5007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedViewModelState.swift in Sources */, 07F67CA52ACFEADB0044047D /* BigUInt+EthereumQuantity.swift in Sources */, FA851FF127917494004F5979 /* WalletTransactionDetailsViewState.swift in Sources */, FAEDC13D2820F59100E6582C /* StakingAmountViewModel.swift in Sources */, - FAD067AE2C2044810050291F /* ErasStakersOverviewKey.swift in Sources */, FA9A8F1A2A72573C008FA99F /* AlchemyEndpoint.swift in Sources */, FA62626D2AC2E35A005D3D95 /* WalletConnectProposalViewLayout.swift in Sources */, F40966CC26B297D6008CD244 /* AnalyticsStakeWireframe.swift in Sources */, FAD067C52C2044B10050291F /* AssetManagementTableHeaderView.swift in Sources */, AE9EF27D260B53130026910A /* StoriesViewFactory.swift in Sources */, + 0701B9782C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift in Sources */, FAD428FC2A86567F001D6A16 /* BackupRiskWarningsInteractor.swift in Sources */, FA335AAC29C81ADC0003DBDD /* SubstrateCallFactoryProtocol.swift in Sources */, 84FAB0652542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift in Sources */, FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */, + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */, FABA161B2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift in Sources */, 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */, 847C966325536455002D288F /* ExportRestoreJsonViewFactory.swift in Sources */, + 0701B8AD2C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift in Sources */, FAFFAE3829AC84180074AF1F /* ParachainSubsquidHistoryOperationFactory.swift in Sources */, FA6262372AC2E35A005D3D95 /* WalletConnectConfirmationViewController.swift in Sources */, C67E781B27B3AD510053346B /* CheckPincodeViewLayout.swift in Sources */, @@ -17159,7 +18554,6 @@ FA2DF9A02A8CA0F80047F440 /* NFTModel.swift in Sources */, FA62624B2AC2E35A005D3D95 /* WalletConnectActiveSessionsViewModelFactory.swift in Sources */, 84CA68E126BEAC7C003B9453 /* SpecVersionSubscriptionFactory.swift in Sources */, - FA41B6202C6495EE00D0713A /* 5ireHistoryResponse.swift in Sources */, AE2C846525EE884900986716 /* RewardViewModelFactory.swift in Sources */, 076D9D3B293E3511002762E3 /* SwapValues.swift in Sources */, DAB29F2A9C864D7FCF1AF934 /* UsernameSetupProtocols.swift in Sources */, @@ -17173,6 +18567,7 @@ 840BF22726C2C8A600E3A955 /* ChainSyncEvents.swift in Sources */, C6267B9028BDF6A5001E31BF /* ChainAccountBalanceCellViewModel.swift in Sources */, FA2FC81328B3807D00CC0A42 /* StakingPoolStartViewModelFactory.swift in Sources */, + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */, C6CA307D285F61B70087776D /* ParachainState.swift in Sources */, F43A596A26D520E0005E973D /* EmptyStateViewCell.swift in Sources */, FAFFAE9829AC84B10074AF1F /* DelegatorHistoryResponse.swift in Sources */, @@ -17180,6 +18575,7 @@ AEA2C1B42681E99D0069492E /* ValidatorSearchProtocols.swift in Sources */, FA2569C1274CE74100875A53 /* AttentionView.swift in Sources */, 7489BDA1D23D8DF73E7EB9BC /* UsernameSetupWireframe.swift in Sources */, + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */, FAA0133428DA12B6000A5230 /* StakingPoolNetworkInfo.swift in Sources */, 84E1CCFA260DCBF9001E81B5 /* SwitchAccount+UsernameSetupWireframe.swift in Sources */, 84CFF1E626526FBC00DB7CF7 /* StakingBondMoreInteractor.swift in Sources */, @@ -17189,6 +18585,7 @@ FACD42A02A5BE811009975AA /* SingleToMultiassetMigrationPolicy.swift in Sources */, 84F4387525D9C6EB00AEDA56 /* SubstrateDataProviderFactory.swift in Sources */, 8430AB002602338D005B1066 /* PendingNominatorState.swift in Sources */, + 0701B9872C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */, AE7129BC2608C069000AA3F5 /* RelaychainStakingInfoOperationFactory.swift in Sources */, 84754CA02513D83E00854599 /* AccountPickerViewModel.swift in Sources */, 076D9D4529405987002762E3 /* SlippageToleranceViewModelFactory.swift in Sources */, @@ -17196,12 +18593,12 @@ 84D8F16D24D82C7E00AF43E9 /* ModalPickerConfiguration.swift in Sources */, 07F817FB2AD4173100B87358 /* WalletConnectCoordinatorRouter.swift in Sources */, FAA013B128DA134B000A5230 /* PoolWithdrawUnbondedCall.swift in Sources */, + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */, C6CA20392B05EBFB001503C2 /* NftFiltersPresenter.swift in Sources */, FA936BF22872E35F0059B97A /* TitleSwitchViewModel.swift in Sources */, FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, 84BAB6102642C286007782D0 /* SelectedRebondVariant.swift in Sources */, 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */, - FAD5FF2B2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift in Sources */, FAA0134628DA12CD000A5230 /* StakingUnbondSetupPoolViewModelState.swift in Sources */, 84BEE22325646AC000D05EB3 /* SelectedUsernameChanged.swift in Sources */, 8467FD4124ED3C72005D486C /* AlignableContentControl.swift in Sources */, @@ -17219,13 +18616,16 @@ 6B62E63FB9E379EA19A41464 /* AccountCreateProtocols.swift in Sources */, 84EBAB0B265E28590015E446 /* ChainDateCalculator.swift in Sources */, FAA013A728DA133E000A5230 /* ShadowRoundedBackground.swift in Sources */, + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */, AE9EF26E260A82D50026910A /* SlideViewModel.swift in Sources */, 84754C9A2513871300854599 /* SNAddressType+Codable.swift in Sources */, F78EA110179B6D75DDF53F8B /* AccountCreateWireframe.swift in Sources */, + 0701B9022C78F71800DCD395 /* OKXSwapTransaction.swift in Sources */, 84DEAA7B265DB987000DDADE /* CrowdloanContributeCall.swift in Sources */, 84963D6E26F91826003FE8E4 /* RemoteSubscriptionRequests.swift in Sources */, FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */, FAB0EDDE27AA6DDC003D93C2 /* NodeSelectionViewModel.swift in Sources */, + 07145F9C2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift in Sources */, FA62624F2AC2E35A005D3D95 /* WalletConnectActiveSessionsAssembly.swift in Sources */, 849DEC5925ED756F00C64C19 /* SubstrateCallFactoryDefault.swift in Sources */, FA93A2F02833B11A0021330F /* RecommendedValidatorListParachainViewModelFactory.swift in Sources */, @@ -17238,6 +18638,7 @@ 9942034DCB680824831B0AC1 /* AccountCreatePresenter.swift in Sources */, AEA2C1B82681E9BD0069492E /* ValidatorSearchWireframe.swift in Sources */, 84C4C2D7255D2B780045B582 /* PinChangeWireframe.swift in Sources */, + 075D9E482CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift in Sources */, 84FB29992639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift in Sources */, 8493D0DF26FE7D7400A28008 /* ChainRepositoryFactory.swift in Sources */, FAD4291E2A86567F001D6A16 /* WalletNameInteractor.swift in Sources */, @@ -17258,6 +18659,7 @@ 84E6D57C262E2CE8000EA3F5 /* OperationCombiningService.swift in Sources */, FA1D01FA2BBE713D005B7071 /* LiquidityPoolListViewModel.swift in Sources */, 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */, + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */, FA2222942BD2726F0031DE04 /* SkeletonLabel.swift in Sources */, FA22228D2BD237910031DE04 /* SubqueryPriceFetcher.swift in Sources */, FAED6F4427DA19C70051B337 /* AccountInfoSubscriptionAdapter.swift in Sources */, @@ -17265,6 +18667,7 @@ 846C372E26B199D10098F303 /* StakingDurationOperationFactory.swift in Sources */, 9B4F0484B81BBF8DFA618599 /* AccountCreateViewFactory.swift in Sources */, 846CDECD258D212D009F3E75 /* AlertImageWithTitleView.swift in Sources */, + 071606C62C7C6C3200C1DF75 /* PricesService.swift in Sources */, FA936BE62872E3300059B97A /* ExistentialDepositCurrencyId.swift in Sources */, 84D8F15B24D8136700AF43E9 /* ModalPickerCellProtocol.swift in Sources */, 84F4386625D9B8C600AEDA56 /* TypeRegistryPrepared.swift in Sources */, @@ -17276,12 +18679,14 @@ AEE5FB0526415E5D002B8FDC /* StakingRebondSetupViewFactory.swift in Sources */, AEAC68F726E9FB8400346599 /* CoingeckoOperationFactory.swift in Sources */, FA3430F2285065BD002B5975 /* StakingUnbondConfirmRelaychainViewModelFactory.swift in Sources */, + 0701B8FA2C78F71800DCD395 /* OKXDexQuote.swift in Sources */, C63FE88A29000EB500E97E8E /* FearlessKeyboardHandler.swift in Sources */, FAA0138D28DA1303000A5230 /* StakingPayoutConfirmationrelaychainStrategy.swift in Sources */, FA904D942B04AEDB00DAEC2D /* SortFilterCellViewModel.swift in Sources */, FAA0137128DA12E3000A5230 /* StakingRedeemConfirmationParachainStrategy.swift in Sources */, 846042C02666E2C800CFFCFC /* KaruraResultData.swift in Sources */, 84BE20A825E8D93E00B4748C /* Data+StorageKey.swift in Sources */, + 0701B9A42C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift in Sources */, 84EBC55224F660A700459D15 /* EventProtocols.swift in Sources */, AE6F7FE02685E812002BBC3E /* ValidatorListFilterProtocols.swift in Sources */, 84C6801624D7036B00006BF5 /* SubtitleActionControl.swift in Sources */, @@ -17293,15 +18698,16 @@ FA8644472768522000956D8E /* HistoryHeaderType.swift in Sources */, F40966C126B297D6008CD244 /* AnalyticsPeriodView.swift in Sources */, FA7254372AC2E48500EC47A6 /* Data+Length.swift in Sources */, + 0701B8F02C78F71800DCD395 /* NomisJSONDecoder.swift in Sources */, FA286B172A3043DB008BD527 /* CrossChainViewController.swift in Sources */, 84D97EC82520D32000F07405 /* PolkadotIcon+Image.swift in Sources */, F4A198F3263299C900CD6E61 /* StakingBalanceData.swift in Sources */, - FAAA29322B8DCE590089AFE6 /* StorageRequestWorker.swift in Sources */, 84CA68D326BE9A35003B9453 /* RuntimeProvider.swift in Sources */, 8401620625E130D60087A5F3 /* ViewAction.swift in Sources */, 84A2C90424E07F400020D3B7 /* AccountOperationFactoryError.swift in Sources */, FA38C98E275DFB8E005C5577 /* BaseTopBar.swift in Sources */, FAB707652BB3C06900A1131C /* AssetsAccountRequest.swift in Sources */, + 0701B8ED2C78F71800DCD395 /* TonConnectRequestPayload.swift in Sources */, AE6DE7322627EA930018D5B5 /* PayoutCall.swift in Sources */, FAD0068127EA252400C97E09 /* AboutViewState.swift in Sources */, 84DD5F26263D72C400425ACF /* ExtrinsicFeeProxy.swift in Sources */, @@ -17331,7 +18737,6 @@ F4433D5F26C166470002A91E /* AnalyticsValidatorsView.swift in Sources */, FA8ED43F28FD98C800EBB712 /* YourValidatorListPoolViewModelState.swift in Sources */, FA2FC7FB28B3807C00CC0A42 /* StakingPoolJoinChoosePoolViewLayout.swift in Sources */, - FAD9AAC72B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift in Sources */, FA256A45274CE8BD00875A53 /* StoriesCollectionItem.swift in Sources */, 070B2C5F289CE49700F78F82 /* SelectableListViewController.swift in Sources */, 7D281FEA78E2E5F44990C184 /* AccountImportPresenter.swift in Sources */, @@ -17339,7 +18744,6 @@ FAFFAE8429AC84B10074AF1F /* SoraSubqueryTransfer.swift in Sources */, F4EAC7972642E0D800FBDDC3 /* ControllerAccountViewModelFactory.swift in Sources */, FA2FC81A28B3807D00CC0A42 /* StakingPoolStartProtocols.swift in Sources */, - FAAA29332B8DCE590089AFE6 /* NMapStorageRequestWorker.swift in Sources */, C6267BB228C3879A001E31BF /* BalanceInfoDependencyContainer.swift in Sources */, 849842F426592408006BBB9F /* ActiveCrowdloanTableViewCell.swift in Sources */, 501347BEA67CD30FE484358E /* AccountImportViewFactory.swift in Sources */, @@ -17347,7 +18751,7 @@ 84EBC55124F660A700459D15 /* EventVisitor.swift in Sources */, FA93A313283653B70021330F /* ValidatorListFilterFlow.swift in Sources */, 8454C21D2632A78900657DAD /* EventRecord.swift in Sources */, - FA01B2BB2C6213740078A35B /* InfoTitleView.swift in Sources */, + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */, FAD429002A86567F001D6A16 /* BackupRiskWarningsViewController.swift in Sources */, FAC0BBE6291D11D600E6F106 /* SelectableAmountInputView.swift in Sources */, 84C4C2F9255DB9510045B582 /* PinChangeInteractor.swift in Sources */, @@ -17383,6 +18787,7 @@ FAD429112A86567F001D6A16 /* CollectionViewDataSource.swift in Sources */, FA93A2FF2834AF9E0021330F /* ValidatorInfoParachainViewModelState.swift in Sources */, FA72543D2AC2E48500EC47A6 /* ABI.swift in Sources */, + 0701B99A2C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift in Sources */, 94B0F0C84AF74B3CD7223C3A /* AccountConfirmPresenter.swift in Sources */, 8468B87224F63D3A00B76BC6 /* AddAccount+AccountCreateWireframe.swift in Sources */, C65A6594288E5E0500679D65 /* NSLockExtension.swift in Sources */, @@ -17392,6 +18797,7 @@ FAFFAE8829AC84B10074AF1F /* SubqueryExtrinsic.swift in Sources */, 8472C5B2265CF9C500E2481B /* StakingRewardDestConfirmInteractor.swift in Sources */, FACD42B42A5BE8E1009975AA /* CheckPincodeWireframe.swift in Sources */, + 0701B8BF2C78F6C400DCD395 /* AccountScoreViewModel.swift in Sources */, 846CA77A27099B1E0011124C /* StakingAnalyticsLocalSubscriptionFactory.swift in Sources */, FA62626E2AC2E35A005D3D95 /* WalletConnectProposalWalletsTableCell.swift in Sources */, FAADC1B62926597400DA9903 /* ScanQRAssembly.swift in Sources */, @@ -17399,7 +18805,6 @@ 8D9BC9C36DC891CDD900A895 /* AccountConfirmViewController.swift in Sources */, FA9A8F472A82005F008FA99F /* EthereumWalletRemoteSubscriptionService.swift in Sources */, E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */, - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */, FA34EED52B98723C0042E73E /* OnboardingStartProtocols.swift in Sources */, AE9EF264260A82B80026910A /* StoriesWireframe.swift in Sources */, 848EAEB02659310A00676CEA /* CrowdloanStatus.swift in Sources */, @@ -17422,6 +18827,7 @@ FA14AE8B2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift in Sources */, FAE5858F2B0764ED00240FE1 /* SoraSubsquidHistoryOperationFactory.swift in Sources */, 84F47D4B2666EF1C00F7647A /* KaruraStatementData.swift in Sources */, + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */, 8443FE24255586230092893D /* ExportMnemonicConfirmProtocols.swift in Sources */, FA93A2E128323CF10021330F /* CustomValidatorListRelaychainStrategy.swift in Sources */, C6DC2D602B18411000BAA4DB /* UIImageView+gif.swift in Sources */, @@ -17431,6 +18837,7 @@ 844CB57226F9EB2000396E13 /* RuntimeCodingService.swift in Sources */, 076D9D53294AC0A6002762E3 /* PolkaswapJSON.swift in Sources */, FA17B4D427E9CF2D006E0735 /* UtilityConstants.swift in Sources */, + FA30BFEF2D62C85300B0E8F6 /* CoinbasePurchaseProvider.swift in Sources */, FA256984274CE5A500875A53 /* BalanceLockType.swift in Sources */, FAC0BBE3291D0EB000E6F106 /* SelectAssetPresenter.swift in Sources */, 843910B2253ED4D100E3C217 /* CDChainStorageItem+CoreDataDecodable.swift in Sources */, @@ -17452,16 +18859,17 @@ C665E4F029C35801001946D1 /* TimeFormatter.swift in Sources */, 073417B3298BA28300104F41 /* EquilibriumTotalBalanceServiceFactory.swift in Sources */, 84FAB0632542C8D600319F74 /* ContactItem.swift in Sources */, - FAD5FF252C463C07003201F5 /* AccountStatisticsFetching.swift in Sources */, C67E781927B3AC350053346B /* CheckPincodeViewController.swift in Sources */, FA5137B029AC6F2F00560EBA /* PolkaswapDisclaimerProtocols.swift in Sources */, FACD42972A5BE811009975AA /* SettingsMigrator.swift in Sources */, FA1D01FF2BBE713D005B7071 /* LiquidityPoolsListAssembly.swift in Sources */, 84DED3EF26661CC600A153BB /* CrowdloanFlow.swift in Sources */, FA1D01FB2BBE713D005B7071 /* LiquidityPoolsListViewLayout.swift in Sources */, + 074988DB2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift in Sources */, F4F65C3D26D8B9DD002EE838 /* FWYAxisChartFormatter.swift in Sources */, 847C963525534E41002D288F /* UIFactory.swift in Sources */, 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */, + 0701B8F72C78F71800DCD395 /* OKXDexSwapRequestParameters.swift in Sources */, F40966D026B297D7008CD244 /* AnalyticsStakeInteractor.swift in Sources */, 8416A2D8265A99DE0052EE89 /* CrowdloanViewConstants.swift in Sources */, 84CA68D526BE9E62003B9453 /* ChainRegistry.swift in Sources */, @@ -17474,7 +18882,6 @@ 84C91FAA261E724F002796B9 /* SwitchTableViewCell.swift in Sources */, 84644A0725670B03004EAA4B /* TriangularedBlurView.swift in Sources */, AEA2C1BE2681E9DD0069492E /* ValidatorSearchViewController.swift in Sources */, - C6FBA6D82C65DDBC008B18D9 /* AssetModelMapper.swift in Sources */, FA34EED92B98723C0042E73E /* OnboardingStartInteractor.swift in Sources */, 84A6171B2625AC3E007B75E1 /* CallCodingPath.swift in Sources */, FA936BF12872E35F0059B97A /* TitleSwitchTableViewCellModelFactory.swift in Sources */, @@ -17485,6 +18892,7 @@ FA34EE972B9871200042E73E /* OnboardingPageInfo.swift in Sources */, FA2FC81B28B3807D00CC0A42 /* StakingPoolStartViewLayout.swift in Sources */, 8460516D25536C4800A1F0B4 /* ExportOption+ViewModel.swift in Sources */, + 0701B9832C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */, FA286B192A3043DB008BD527 /* CrossChainPresenter.swift in Sources */, F458D3982642911B0055CB75 /* ControllerAccountViewModel.swift in Sources */, FAADC1A629261F7000DA9903 /* PoolRolesConfirmViewModelFactory.swift in Sources */, @@ -17499,16 +18907,17 @@ 84786E1025FA20D30089DFF7 /* StakingAccountResolver.swift in Sources */, 07DE95BD28A1119400E9C2CB /* BalanceInfoViewLayout.swift in Sources */, 070CDD6D2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift in Sources */, - FAAA293F2B8DCED90089AFE6 /* MapKeyEncodingWorker.swift in Sources */, + 0701B98D2C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, FAA086D028470B3200CC2F33 /* SelectValidatorsConfirmParachainViewModelState.swift in Sources */, FA62625B2AC2E35A005D3D95 /* MultiSelectNetworksViewModel.swift in Sources */, FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */, FAD429182A86567F001D6A16 /* BackupSelectWalletTableCell.swift in Sources */, FA34EEDD2B98723C0042E73E /* OnboardingPageCell.swift in Sources */, + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */, FAE9EBA7288ABBFC009390B6 /* AnalyticsRewardsRelaychainViewModelState.swift in Sources */, 07F2B76328ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift in Sources */, FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */, - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */, + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */, 8436E94426C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift in Sources */, F40966C726B297D6008CD244 /* AnalyticsRewardsViewFactory.swift in Sources */, 8489EDBA264DB25500FF997E /* RecommendationsComposing.swift in Sources */, @@ -17532,17 +18941,19 @@ 84DED3F726662CF200A153BB /* TitleValueSelectionControl.swift in Sources */, FAADC1BC2926597400DA9903 /* ScanQRRouter.swift in Sources */, 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */, + FA0025882D68503E00B84297 /* FeatureToggleConfigSyncComplete.swift in Sources */, 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */, - FAAA29372B8DCE930089AFE6 /* MultipleRequest.swift in Sources */, 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */, 84F30EA125FD3EE700039D09 /* ChildSubscriptionFactory.swift in Sources */, 8401AEC12642A71D000B03E3 /* StakingRebondConfirmationViewModel.swift in Sources */, + 0701B9892C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift in Sources */, FAD4290B2A86567F001D6A16 /* DefaultFlowLayout.swift in Sources */, FF2BFCFD981582584A9DA42D /* NetworkInfoWireframe.swift in Sources */, FA9A8F452A78C045008FA99F /* SubstrateTransferService.swift in Sources */, 84E1CD0C260DCD23001E81B5 /* SwitchAccount+AccountConfirmWireframe.swift in Sources */, FA584C8C2AB420ED00F6F020 /* AlchemyNftInfo.swift in Sources */, AE6F7FDF2685E812002BBC3E /* ValidatorListFilterPresenter.swift in Sources */, + 0701B9A82C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */, 8430AAF626023087005B1066 /* NominatorState.swift in Sources */, 07B018DB28C9D66300E05510 /* ScamWarningExpandableView.swift in Sources */, C044E792971B542B79B9A88F /* NetworkInfoPresenter.swift in Sources */, @@ -17586,7 +18997,6 @@ 84CA68CF26BD6872003B9453 /* RuntimeSyncService.swift in Sources */, 84EA0B2A25E579DF00AFB0DC /* AssetBalanceViewModel.swift in Sources */, FA6DB7C52757C9B000233FBA /* ChainAccountViewController.swift in Sources */, - 07BF3D9F2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift in Sources */, 84FD3DAF2540BEA000A234E3 /* TransactionHistoryItem+Status.swift in Sources */, 84CEAAF326D6ED870021B881 /* KeystoreTag.swift in Sources */, 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */, @@ -17595,6 +19005,7 @@ 8488ECEA258CE456004591CC /* PurchaseViewController.swift in Sources */, FA3430F828508C10002B5975 /* StakingRedeemRelaychainViewModelState.swift in Sources */, 847C9659255362F7002D288F /* RestoreJson.swift in Sources */, + 0701B9AC2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */, FAA0133328DA12B6000A5230 /* StakingPoolMainViewLayout.swift in Sources */, FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */, FAFFAEA129AC84D30074AF1F /* LinkDecorator.swift in Sources */, @@ -17611,10 +19022,8 @@ FAC6CDB12BA821B00013A17E /* WalletImageViewModelProtocol.swift in Sources */, 8430AAF12602306A005B1066 /* BondedState.swift in Sources */, FAA086D628475AF300CC2F33 /* ParachainStakingDelegatorState.swift in Sources */, - FA93D1F72C61E52C006B494E /* BlockExplorerApiKey.swift in Sources */, 84C3F77B2601F08B00D47501 /* NominationViewModel.swift in Sources */, 07DE95D428A225A100E9C2CB /* WalletMainContainerViewModelFactory.swift in Sources */, - FA4B75AF2C6F325F001B954F /* MultichainAssetFetching.swift in Sources */, 846A2C4B2529F99400731018 /* AccountRepositoryFactory.swift in Sources */, AE528E4D26852C380058935A /* ValidatorSearchViewModel.swift in Sources */, F408E9B626B807200043CFE0 /* AnalyticsRewardsHeaderView.swift in Sources */, @@ -17625,7 +19034,9 @@ F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */, C6CA20412B072955001503C2 /* NftFiltersAssembly.swift in Sources */, FA6DB7C32757C9B000233FBA /* ChainAccountViewLayout.swift in Sources */, + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */, AEF5071E262369C00098574D /* PurchaseProviderProtocol.swift in Sources */, + 0701B8EE2C78F71800DCD395 /* NomisAccountStatisticsRequest.swift in Sources */, FA34EEB22B9872240042E73E /* StakingLedgerRequest.swift in Sources */, FAA0138028DA12F0000A5230 /* StakingRedeemPoolStrategy.swift in Sources */, FA9A8F1C2A72573C008FA99F /* AlchemyResponse.swift in Sources */, @@ -17638,14 +19049,13 @@ FA34EEAE2B9872180042E73E /* NominationPoolsPoolMembersRequest.swift in Sources */, F4D96B672637E89300B23D3D /* UIView+Separator.swift in Sources */, 070CDD862ACBE59700F3F20A /* ReceiveAndRequestAssetViewLayout.swift in Sources */, + 0701B9C02C78FD8800DCD395 /* 5ireHistoryResponse.swift in Sources */, 99A4B2A357ADEA45EFF515A5 /* AccountExportPasswordProtocols.swift in Sources */, 64B508A1A3D820AA8DBCFAA3 /* AccountExportPasswordWireframe.swift in Sources */, FAF5E9D627E46D77005A3448 /* AppVersionError.swift in Sources */, F462B351260C7DBE0005AB01 /* StakingRewardHistoryTableCell.swift in Sources */, - FAB90CEF2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift in Sources */, FA72543C2AC2E48500EC47A6 /* ABIParameterTypes.swift in Sources */, AE89720825F12143008EC414 /* ValidatorInfoViewModel.swift in Sources */, - FA41B61D2C64856D00D0713A /* FireHistoryOperationFactory.swift in Sources */, FA864445276851CF00956D8E /* ContainerViewController.swift in Sources */, FA9A8F272A72579D008FA99F /* AlchemyTokenCategory.swift in Sources */, C65C7F6B2AD82B8D0069D877 /* LogoutEvent.swift in Sources */, @@ -17664,15 +19074,16 @@ C661B3B027DF75D4005F1F7D /* AccountCreateViewModel.swift in Sources */, 61E0DC83C1D60D677274D7CE /* AccountExportPasswordViewFactory.swift in Sources */, FA93A30A2834FCA10021330F /* ValidatorSearchRelaychainViewModelState.swift in Sources */, + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */, 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */, 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */, + 0701B8A02C78F34A00DCD395 /* AccountStatisticsViewLayout.swift in Sources */, 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */, 84CFF1EC26526FBC00DB7CF7 /* StakingBondMoreConfirmRelaychainViewModelFactory.swift in Sources */, FAC0BBB2291D074500E6F106 /* RuntimeCallPath.swift in Sources */, FA6C176229935DC700A55254 /* SubsquidRewardOperationFactory.swift in Sources */, FA1D01F92BBE713D005B7071 /* LiquidityPoolListCellModel.swift in Sources */, 84038FF626FFDF4E00C73F3F /* CrowdloanSharedState.swift in Sources */, - FAAA29402B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift in Sources */, FA1D01FC2BBE713D005B7071 /* LiquidityPoolsListRouter.swift in Sources */, 054C4BCDEC29ED5F74A36E8B /* ExportMnemonicPresenter.swift in Sources */, 39218CF5AA701518BD3B0103 /* ExportMnemonicInteractor.swift in Sources */, @@ -17680,7 +19091,6 @@ FAFFAE9929AC84B10074AF1F /* SubsquidHistoryResponse.swift in Sources */, 88F3A9FB9CEA464275F1115E /* ExportMnemonicViewFactory.swift in Sources */, FAFFAEA429AC850A0074AF1F /* TimeInterval+Debounce.swift in Sources */, - FAD240D62C64D3D100B389FF /* ZChainHistoryOperationFactory.swift in Sources */, F4D551A12643DD240002363F /* AccountSelectionPresentable.swift in Sources */, 07696A2D28BDC81F00B17040 /* ReaderWriterLock.swift in Sources */, FA8ED43828FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift in Sources */, @@ -17693,6 +19103,7 @@ 0CA307BC2F570941CD22C9AA /* ExportMnemonicConfirmViewFactory.swift in Sources */, 844CB57A26FA706C00396E13 /* ChainAssetDisplayInfo.swift in Sources */, 845B821F26EF8E8900D25C72 /* ManagedMetaAccountModel.swift in Sources */, + 0701B9032C78F71800DCD395 /* OKXToken.swift in Sources */, FAFFAE7829AC84B10074AF1F /* SubquerySwap.swift in Sources */, FA389B3A2840CBEA00FF16E9 /* ValidatorSearchParachainViewModelFactory.swift in Sources */, 8430AB1226023C9F005B1066 /* PendingBondedState.swift in Sources */, @@ -17702,12 +19113,12 @@ 841E6AFE25EC12DE0007DDFE /* SelectedValidatorInfo.swift in Sources */, C89D156BA8B690E8E4DE19ED /* ExportSeedProtocols.swift in Sources */, 076D9D2E2939B780002762E3 /* PolkaswapOperationFactoryProtocol.swift in Sources */, - FAB482F12C58AC7F00594D89 /* ChainModel+Nomis.swift in Sources */, FA74359D29C0736F0085A47E /* StorageWrapper.swift in Sources */, 84B64E3F2704567700914E88 /* RelaychainStakingLocalStorageSubscriber.swift in Sources */, BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */, 8463A73825E3AA47003B8160 /* AccountInfo.swift in Sources */, FA53D8922C08510000173ADB /* LiquidityPoolSupplyViewModelFactory.swift in Sources */, + 0701B9AF2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift in Sources */, ABA3D873BBECB7F4BD670872 /* ExportSeedPresenter.swift in Sources */, FA5DD0E3278EFE2500967047 /* WalletTransactionHistoryTableSectionHeader.swift in Sources */, FAA0134728DA12CD000A5230 /* StakingUnbondSetupPoolStrategy.swift in Sources */, @@ -17718,7 +19129,6 @@ 886E8CF81EF2566D98D9693E /* ExportSeedViewFactory.swift in Sources */, C6DC2D5A2B1458CC00BAA4DB /* CollectionViewSectionHeader.swift in Sources */, C20ED4531583D0C8E38715E0 /* PurchaseProtocols.swift in Sources */, - FA41B6222C64988700D0713A /* AssetTransactionData+FireHistory.swift in Sources */, 3CA86739CB09801714B194BD /* PurchaseWireframe.swift in Sources */, 84FB298C2639ABA500BE0FCD /* YourValidatorList.swift in Sources */, FA8ED43D28FD98BE00EBB712 /* YourValidatorListPoolStrategy.swift in Sources */, @@ -17732,11 +19142,10 @@ FAF9C2B22AAF3FDF00A61D21 /* GetPreinstalledWalletPresenter.swift in Sources */, 90EFE3768F1375470FDBE6F6 /* PurchaseViewFactory.swift in Sources */, F4A198EE2631AA2000CD6E61 /* StakingBalanceUnbondingItemView.swift in Sources */, - FAFB5EE22C5A2CE80015D3DD /* FWCosmosView.swift in Sources */, C63468E228F2C964005CB1F1 /* ContactTableCell.swift in Sources */, 076D9D57294B38E1002762E3 /* PolkaswapPreviewParams.swift in Sources */, + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */, FA7254432AC2E48500EC47A6 /* WalletConnectService.swift in Sources */, - FA4B75B42C6F333A001B954F /* OKXMultichainChainFetching.swift in Sources */, 845532D226846B6800C2645D /* ParachainLeaseInfo.swift in Sources */, 84DE8BD6264A651A002AF1EF /* RewardSelectionView+Inspectable.swift in Sources */, 8472C5AD265CF9C500E2481B /* StakingRewardDestConfirmViewModelFactory.swift in Sources */, @@ -17744,7 +19153,6 @@ 076D9D2C29370C33002762E3 /* MarketButton.swift in Sources */, AF8193D9F818638254854232 /* StakingMainProtocols.swift in Sources */, C46EEF6A9A9A601694E72DB1 /* StakingMainWireframe.swift in Sources */, - FAAA29282B8DCE3E0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */, 07DFA44F289A37F50035A8AB /* ModalSheetBlurPresentationDismissAnimator.swift in Sources */, FAC0BBD6291D0EB000E6F106 /* SendFlow.swift in Sources */, FAD428F82A86567F001D6A16 /* BackupPasswordViewController.swift in Sources */, @@ -17793,6 +19201,7 @@ FAD067C92C2044D30050291F /* ChainAssetListViewLayout.swift in Sources */, 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */, FA93A3162836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift in Sources */, + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */, FA8644512768A13400956D8E /* TwoLabelView.swift in Sources */, F477CD3A262EE0E7004DF739 /* StakingRewardDetailsViewModelFactory.swift in Sources */, 846CA77E2709A34D0011124C /* StakingAnalyticsLocalStorageSubscriber.swift in Sources */, @@ -17808,6 +19217,8 @@ FA286B182A3043DB008BD527 /* CrossChainInteractor.swift in Sources */, FA6C175429935DAE00A55254 /* AssetTransactionData+SubqueryHistory.swift in Sources */, C6584E352982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift in Sources */, + 0701B8AB2C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift in Sources */, + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */, FAE9EBA9288ABC0C009390B6 /* AnalyticsRewardsRelaychainViewModelFactory.swift in Sources */, FA6C17912993601A00A55254 /* AddressChainDefiner.swift in Sources */, FAFFAE7629AC84B10074AF1F /* TransactionContextKeys.swift in Sources */, @@ -17827,6 +19238,7 @@ FA4C3D122886794D00176398 /* SelfSizingTableView.swift in Sources */, CC545DF80038901FA06FDD58 /* SelectValidatorsConfirmViewController.swift in Sources */, 1F88F3DBFA0BD6D0FDF558F3 /* SelectValidatorsConfirmViewFactory.swift in Sources */, + 0701B9AA2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */, FA38C9A1275FD6B9005C5577 /* BundleImageViewModel.swift in Sources */, D344C6DAC1F8BB6152BA8DD0 /* RecommendedValidatorListProtocols.swift in Sources */, FA4B92A02844D0C80003BCEF /* Optional.swift in Sources */, @@ -17835,15 +19247,17 @@ FAD428F72A86567F001D6A16 /* BackupPasswordRouter.swift in Sources */, FA93A2EA2833B0F90021330F /* RecommendedValidatorListRelaychainViewModelFactory.swift in Sources */, 0678271BE1BA5BBC084F478A /* RecommendedValidatorListWireframe.swift in Sources */, + 0701B9942C78FAF000DCD395 /* LiquidityPoolsListRouter.swift in Sources */, F441BE0E263984DD0096B67B /* BondExtraCall.swift in Sources */, FA8810D52BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */, - FAAA29492B8DCF350089AFE6 /* AsyncStorageRequestFactoryDefault.swift in Sources */, 8472C5B3265CF9C500E2481B /* StakingRewardDestConfirmViewController.swift in Sources */, FAFFAE8329AC84B10074AF1F /* SubqueryHistory.swift in Sources */, B071927DF8DD5C3CA84494BA /* RecommendedValidatorListViewController.swift in Sources */, FAD428962A834BA8001D6A16 /* UIApplication+TopViewController.swift in Sources */, + 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */, D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */, + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */, C7D77690E10875CF1856EBA1 /* StakingRewardPayoutsProtocols.swift in Sources */, FA936BCE286C41DF0059B97A /* StakingRebondConfirmationRelaychainStrategy.swift in Sources */, FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */, @@ -17859,6 +19273,7 @@ 58F693958EF69F59D7C9760E /* StakingRewardPayoutsInteractor.swift in Sources */, FAA0139628DA1312000A5230 /* StakingBondMoreConfirmationPoolViewModelState.swift in Sources */, FAD428FA2A86567F001D6A16 /* BackupRiskWarningsViewLayout.swift in Sources */, + 0701B8BB2C78F69500DCD395 /* ChainModel+Nomis.swift in Sources */, 50758C9BBB27AE5732FF78BA /* StakingRewardPayoutsViewController.swift in Sources */, AEF507AF262423FD0098574D /* HmacSigner.swift in Sources */, 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */, @@ -17866,16 +19281,17 @@ FA17B4BE27E892CA006E0735 /* AppUpdatePresentable.swift in Sources */, FAAF61742877DBC50094B4BC /* EthereumIcon.swift in Sources */, 7E1A03082260E0D31AD394CA /* StakingRewardDetailsProtocols.swift in Sources */, + 0701B8F12C78F71800DCD395 /* NomisRequestSigner.swift in Sources */, FA34EEE82B98723C0042E73E /* BalanceLocksDetailRouter.swift in Sources */, 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */, FA62623E2AC2E35A005D3D95 /* WalletConnectConfirmationInteractor.swift in Sources */, 6A977B56FD6441F52660771C /* StakingRewardDetailsPresenter.swift in Sources */, - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */, 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */, F47BBD692630BB3C0087DA11 /* StakingBalanceViewFactory.swift in Sources */, 846AC7EF2638D9200075F7DA /* YourValidatorTableCell.swift in Sources */, FA9A8F432A78C03D008FA99F /* EthereumTransferService.swift in Sources */, C937154FA9021AECD72A871B /* StakingRewardDetailsViewController.swift in Sources */, + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */, FA2FC81028B3807D00CC0A42 /* StakingPoolJoinConfirmAssembly.swift in Sources */, AEA0C8B8267C905500F9666F /* SelectedValidatorCell.swift in Sources */, 20B2942A4241F6713A1C70D9 /* StakingRewardDetailsViewFactory.swift in Sources */, @@ -17884,7 +19300,6 @@ FAF96B582B636FC700E299C1 /* SystemNumberRequest.swift in Sources */, 84BB3CEE267CD6B500676FFE /* CrowdloanContributionDict.swift in Sources */, 849842EC26587B20006BBB9F /* YourCrowdloansTableViewCell.swift in Sources */, - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */, F409673326B29C9B008CD244 /* RewardAnalyticsWidgetViewModel.swift in Sources */, C63CB322285077640071AF26 /* DelegationInfoCellModel.swift in Sources */, FABA16422B0C9510001AF2F0 /* NetworkManagmentFilter.swift in Sources */, @@ -17893,7 +19308,6 @@ A871B6ABACAE8A811010F792 /* StakingPayoutConfirmationWireframe.swift in Sources */, F4D6FF1326B3DDDF002313AF /* AnalyticsRewardsViewController.swift in Sources */, 1795E946F1E386442E96E2BC /* StakingPayoutConfirmationPresenter.swift in Sources */, - FA4542422C6B367B00610A71 /* BlockExplorerType+Filters.swift in Sources */, AEFA82BC4285117096BCBB16 /* StakingPayoutConfirmationInteractor.swift in Sources */, 6D47EAB127FAB7559A9FA107 /* StakingPayoutConfirmationViewController.swift in Sources */, F4EF24C826BA713300F28B4E /* AnalyticsStakeHeaderView.swift in Sources */, @@ -17901,7 +19315,9 @@ FA6262522AC2E35A005D3D95 /* MultiSelectNetworksAssembly.swift in Sources */, 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */, FA37AE202858838A001DCA96 /* ParachainStakingScheduledRequest.swift in Sources */, + 0701B9842C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */, FA6262512AC2E35A005D3D95 /* WalletConnectActiveSessionsTableCell.swift in Sources */, + 0701B89D2C78F34A00DCD395 /* AccountStatisticsProtocols.swift in Sources */, FAA086D82848AB8600CC2F33 /* YourRewardDestinationViewModel.swift in Sources */, FA2569C2274CE74100875A53 /* BottomSheetInfoBalanceCell.swift in Sources */, FA6262542AC2E35A005D3D95 /* MultiSelectNetworksViewLayout.swift in Sources */, @@ -17912,7 +19328,6 @@ FAADC1A529261F7000DA9903 /* PoolRolesConfirmProtocols.swift in Sources */, F022F1444E0F75CCA42F4648 /* YourValidatorListProtocols.swift in Sources */, 8493D0E326FF571D00A28008 /* PriceProviderFactory.swift in Sources */, - FAFB5EE02C5A11A30015D3DD /* AccountScoreSettingsChanged.swift in Sources */, F7EB8F835CFA7FC949EF4C22 /* YourValidatorListWireframe.swift in Sources */, AEA0C8AC267B6B5200F9666F /* SelectedValidatorListViewFactory.swift in Sources */, DBA436B3B1C90965FE8F9B79 /* YourValidatorListPresenter.swift in Sources */, @@ -17944,19 +19359,23 @@ FAE39AFF2AA063720011A9D6 /* EthereumNftTransferService.swift in Sources */, AEA0C8B6267BABCC00F9666F /* SelectedValidatorListViewModel.swift in Sources */, 4FBD73DD27CAA339727616B5 /* StakingUnbondSetupPresenter.swift in Sources */, + 0701B9C92C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift in Sources */, 072EB84828E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift in Sources */, FA88006C2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift in Sources */, FA2FC7CB28B3805400CC0A42 /* CreatePoolCall.swift in Sources */, FAC6CD8E2BA7FBD30013A17E /* WalletHistoryRequest.swift in Sources */, FA7A4C7E2A1F937A0051FB4D /* SoraRewardCalculatorEngine.swift in Sources */, C63468E628F37912005CB1F1 /* CDContact + CoreDataCodable.swift in Sources */, + 0701B9902C78FAF000DCD395 /* LiquidityPoolListType.swift in Sources */, F40966C926B297D6008CD244 /* AnalyticsStakeViewModelFactory.swift in Sources */, 84CFF1F026526FBC00DB7CF7 /* StakingBondMoreConfirmationViewLayout.swift in Sources */, F4433D6F26C1696A0002A91E /* AnalyticsValidatorsCell.swift in Sources */, C600C4D728053DF500111316 /* UsernameSetupViewController.swift in Sources */, F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */, F418E891264D318C00699085 /* AlertsView.swift in Sources */, + 0701B9AD2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift in Sources */, FAADC19929261F6400DA9903 /* NominationPoolsUpdateRolesCall.swift in Sources */, + FA8B02132D375A990066F070 /* ErasStakersPagedKey.swift in Sources */, CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */, FA1D02002BBE713D005B7071 /* LiquidityPoolListCell.swift in Sources */, FAE39AF12A9DBDDA0011A9D6 /* NftCollectionViewModel.swift in Sources */, @@ -17966,7 +19385,8 @@ 07DE95C828A169A600E9C2CB /* AssetListSearchPresenter.swift in Sources */, FAA0136C28DA12E3000A5230 /* StakingRedeemConfirmationInteractor.swift in Sources */, 8401AEC52642A71D000B03E3 /* StakingRebondConfirmationViewFactory.swift in Sources */, - FA4B098E2C47804F001B73F9 /* NomisRequestSigner.swift in Sources */, + 0701B9B12C78FB5600DCD395 /* NetworkRequestUrlParameters.swift in Sources */, + 0701B9762C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift in Sources */, 07D05E4B28EEFF3100B66C70 /* SelectValidatorsStartPoolViewModelFactory.swift in Sources */, 27FA1D57A06AA3A030D226B6 /* StakingUnbondConfirmWireframe.swift in Sources */, 843A2C7326A8641400266F53 /* MultiValueView.swift in Sources */, @@ -17981,6 +19401,9 @@ FAA0136D28DA12E3000A5230 /* StakingRedeemConfirmationPresenter.swift in Sources */, 3E1462D9E1C0D490E81FD288 /* StakingUnbondConfirmViewFactory.swift in Sources */, 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */, + 0701B8972C78F34A00DCD395 /* AccountStatisticsViewModel.swift in Sources */, + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */, + 0701B9BE2C78FD8800DCD395 /* KaiaHistoryResponse.swift in Sources */, AEE5FB1C264A610C002B8FDC /* StakingRewardDestSetupLayout.swift in Sources */, 07089AF928B78248001566CA /* SheetAlertPresentable.swift in Sources */, 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */, @@ -18024,6 +19447,7 @@ FA37AE272859AB1B001DCA96 /* DelegatorBondMoreCall.swift in Sources */, 076D9D4F2946E665002762E3 /* PolkaswapSwapCall.swift in Sources */, 270C21973CB61F0BF3D2D1E3 /* CrowdloanListProtocols.swift in Sources */, + 0701B9992C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift in Sources */, 6D61E43A79BDF5EA6CA9E85D /* CrowdloanListWireframe.swift in Sources */, FA936BD4286C66A60059B97A /* StakingRebondConfirmationParachainStrategy.swift in Sources */, A090FF206B56A0E465C62072 /* CrowdloanListPresenter.swift in Sources */, @@ -18031,6 +19455,7 @@ FA7254242AC2E48500EC47A6 /* WalletConnectModelFactory.swift in Sources */, C6267B9628BDF6A5001E31BF /* ChainAssetListInteractor.swift in Sources */, 2E57C70F27EA169000AF075A /* ProfileViewLayout.swift in Sources */, + 0701B8EB2C78F71800DCD395 /* TonConnectManifest.swift in Sources */, 07DFA454289A69490035A8AB /* Styles.swift in Sources */, 849DF02D26C40B7900B702F4 /* RuntimeFilesOperationFactory.swift in Sources */, 0B2B9C6E2BA2E924D6A54F4B /* CrowdloanListInteractor.swift in Sources */, @@ -18038,9 +19463,11 @@ 5888936B3D13D92F1534E08B /* CrowdloanListViewLayout.swift in Sources */, 278F5341DC043EBED7C0733D /* CrowdloanListViewFactory.swift in Sources */, 7CBE9FFAF8394786CA131D4D /* CustomValidatorListProtocols.swift in Sources */, + 0701B9742C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift in Sources */, B51AD1836313CE26F369ED3F /* CustomValidatorListWireframe.swift in Sources */, D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */, FA6262432AC2E35A005D3D95 /* WalletConnectSessionPresenter.swift in Sources */, + 0701B98F2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift in Sources */, F47D328226C260CC00CF35A2 /* FWPieChartView.swift in Sources */, 78D94A761EFECED60F38232D /* CustomValidatorListViewController.swift in Sources */, 7401E7CAEEE6890BE74ACCE1 /* CustomValidatorListViewLayout.swift in Sources */, @@ -18048,16 +19475,20 @@ 07D05E5E28EF0A0A00B66C70 /* SelectValidatorsConfirmPoolInitiatedViewModelState.swift in Sources */, FAFFAE8029AC84B10074AF1F /* SubqueryTransfer.swift in Sources */, FAE39AEF2A9DBDD30011A9D6 /* NftCollectionViewModelFactory.swift in Sources */, + 0701B8FE2C78F71800DCD395 /* OKXQuote.swift in Sources */, FA2569C0274CE74100875A53 /* EtheriumAddressForRewardView.swift in Sources */, FA4B92AF2844D0E60003BCEF /* SelectCurrencyInteractor.swift in Sources */, C611666C2B3C03B800F483C4 /* NftHeaderCellViewModel.swift in Sources */, FAD067992C2043FC0050291F /* WalletAssetsObserver.swift in Sources */, + 0701B9C72C78FDE000DCD395 /* AssetTransactionData+ZChainHistory.swift in Sources */, 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */, 4E5CD7B8821FA5298EA1598E /* CrowdloanContributionSetupWireframe.swift in Sources */, 9081D43697D992F51E057ED2 /* CrowdloanContributionSetupPresenter.swift in Sources */, + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */, 830A27C5447348F1D202D996 /* CrowdloanContributionSetupInteractor.swift in Sources */, AE4C53E5268C6F8300B03CE8 /* ValidatorListFilterSortCell.swift in Sources */, 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */, + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */, FAF5E9DB27E46DAA005A3448 /* RootViewLayout.swift in Sources */, 8CDA490B390BFA261906F8FC /* CrowdloanContributionSetupViewLayout.swift in Sources */, 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */, @@ -18082,13 +19513,14 @@ 90A3F46EF181DC2B821CC80C /* CrowdloanContributionConfirmViewFactory.swift in Sources */, FAA0133728DA12B6000A5230 /* StakingPoolMainAssembly.swift in Sources */, 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */, + 0701B8EF2C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift in Sources */, EB9D8D22AA13BF12F845856B /* ReferralCrowdloanProtocols.swift in Sources */, - FA5032B22C4E58C500075909 /* AccountStatisticsPresentable.swift in Sources */, FA7254292AC2E48500EC47A6 /* Caip2.swift in Sources */, 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */, 0F3E58FC800ED8722589F89E /* ReferralCrowdloanPresenter.swift in Sources */, 9F4A48B1BE3A1110A0CF9F36 /* ReferralCrowdloanViewController.swift in Sources */, CE2792E78B14CE02394D8CF4 /* ReferralCrowdloanViewLayout.swift in Sources */, + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */, 2B0FC94B4AE9AFE9532F493F /* ReferralCrowdloanViewFactory.swift in Sources */, FAA0137228DA12E3000A5230 /* StakingRedeemConfirmationParachainViewModelFactory.swift in Sources */, FAD4291B2A86567F001D6A16 /* WalletNameRouter.swift in Sources */, @@ -18097,7 +19529,9 @@ 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */, 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */, FA2DF9AA2A8F4C470047F440 /* NftListViewModelFactory.swift in Sources */, + 0701B9A72C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */, 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */, + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */, 59745D3C9602745E1417D2F6 /* ChainSelectionInteractor.swift in Sources */, FAA0137F28DA12F0000A5230 /* StakingRedeemPoolViewModelState.swift in Sources */, FA62623F2AC2E35A005D3D95 /* WalletConnectSessionViewModelFactory.swift in Sources */, @@ -18114,6 +19548,7 @@ FAFFAE8929AC84B10074AF1F /* SubqueryRewardData.swift in Sources */, 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */, 07DE95D728A225DE00E9C2CB /* WalletMainContainerViewModel.swift in Sources */, + 0701B9812C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */, C9A608AFCFF4030D63D1FB4F /* AnalyticsValidatorsInteractor.swift in Sources */, 8BF525D6B5DFB7CF6C03B015 /* AnalyticsValidatorsViewController.swift in Sources */, FA6262662AC2E35A005D3D95 /* WalletConnectProposalAssembly.swift in Sources */, @@ -18126,7 +19561,6 @@ F17C7FA0DB540A803558D1BB /* AnalyticsRewardDetailsPresenter.swift in Sources */, EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */, FA17B4D227E9CF21006E0735 /* FearlessApplication.swift in Sources */, - FAB90CED2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift in Sources */, EB7B660B0B1BAA915C004A8D /* AnalyticsRewardDetailsViewController.swift in Sources */, 07DE95BB28A1119400E9C2CB /* BalanceInfoViewController.swift in Sources */, C80B2FDBD395CDEAD1B7E996 /* AnalyticsRewardDetailsViewLayout.swift in Sources */, @@ -18138,6 +19572,7 @@ CDB78A5A733E4A4F1A2C48C8 /* AssetSelectionWireframe.swift in Sources */, FA054A9A2BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift in Sources */, 2FCB062A2D873BD72B795DB3 /* AssetSelectionPresenter.swift in Sources */, + 0701B9AE2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift in Sources */, BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */, 07DFA44B289918E10035A8AB /* ModalSheetBlurPresentationController.swift in Sources */, FA2E9BBF27A297CE0023FAD2 /* FilterSectionViewModel.swift in Sources */, @@ -18149,27 +19584,23 @@ FAA0136B28DA12E3000A5230 /* StakingRedeemConfirmationLayout.swift in Sources */, FABA163F2B0C9510001AF2F0 /* NetworkManagmentAssembly.swift in Sources */, FAB707622BB317D300A1131C /* CrossChainViewLoadingCollector.swift in Sources */, - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */, FAABC4702845BAEE002CF40E /* CustomValidatorParachainListComposer.swift in Sources */, FA2E9BB027A118120023FAD2 /* FiltersViewModelFactory.swift in Sources */, - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */, FA6262442AC2E35A005D3D95 /* WalletConnectSessionViewLayout.swift in Sources */, - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */, - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */, FAC6CDAD2BA81D680013A17E /* FeeViewProtocol.swift in Sources */, FA72542E2AC2E48500EC47A6 /* WalletConnectSignDecision.swift in Sources */, - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */, 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */, FAD429012A86567F001D6A16 /* BackupCreatePasswordViewLayout.swift in Sources */, - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */, 3A7BF8FD79B7130241222C35 /* WalletTransactionHistoryProtocols.swift in Sources */, FAC6CD9D2BA8097C0013A17E /* L10n.swift in Sources */, - FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */, + 0701B8F32C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift in Sources */, FA93A2E82833B0F10021330F /* RecommendedValidatorListRelaychainViewModelState.swift in Sources */, FAD429322A865696001D6A16 /* CheckboxButton.swift in Sources */, + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */, + 0701B9802C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */, 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */, FAD4291F2A86567F001D6A16 /* WalletNameAssembly.swift in Sources */, - FAF6D90D2C57654F00274E69 /* Decimal+Formatting.swift in Sources */, + 0701B97D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */, D1E085712E7BC0EBF2F4F020 /* WalletTransactionHistoryPresenter.swift in Sources */, FA7D46CD2AF24191005D681B /* SoraRewardOperationFactory.swift in Sources */, FAD429132A86567F001D6A16 /* BackupSelectWalletInteractor.swift in Sources */, @@ -18181,7 +19612,6 @@ 4F66A13E327CBDD04A2411FA /* WalletTransactionHistoryViewLayout.swift in Sources */, FA8800612B31A027000AE5EB /* StakingAccountResolverV14.swift in Sources */, D41CA684433AD861BEC2213B /* WalletTransactionHistoryViewFactory.swift in Sources */, - FAF600772C48F08B00E56558 /* AccountScoreView.swift in Sources */, C77CCA7FF969A2F006A0B6C4 /* WalletChainAccountDashboardProtocols.swift in Sources */, 07DE95C728A169A600E9C2CB /* AssetListSearchProtocols.swift in Sources */, FA99549B27B3B60700CCC94B /* WalletNameChanged.swift in Sources */, @@ -18190,6 +19620,7 @@ B7021EF189E8215B22DDCB09 /* WalletChainAccountDashboardInteractor.swift in Sources */, 93E53195ABD9DA7466A8AAF8 /* WalletChainAccountDashboardViewController.swift in Sources */, FA37AE412859E0DB001DCA96 /* StakingRedeemParachainViewModelState.swift in Sources */, + 071606CA2C7C6C8800C1DF75 /* PriceDataHelper.swift in Sources */, 7BEEF481CD12F404AD746FB5 /* WalletChainAccountDashboardViewLayout.swift in Sources */, D23DD717E3EA941FA78B59C9 /* WalletChainAccountDashboardViewFactory.swift in Sources */, FAA0136A28DA12E3000A5230 /* StakingRedeemConfirmationWireframe.swift in Sources */, @@ -18202,7 +19633,7 @@ 3E053332BA9D170FB1569ABB /* WalletTransactionDetailsProtocols.swift in Sources */, 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */, FA88005D2B319F9D000AE5EB /* BaseStakingAccountResolver.swift in Sources */, - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */, + 07E77AAB2D49EEB500F25F60 /* TonConnectEstablished.swift in Sources */, 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */, 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */, 44B20C179522F7E38DAA2441 /* WalletTransactionDetailsViewController.swift in Sources */, @@ -18221,13 +19652,12 @@ FEB21960BEBE9863BEC63F50 /* FiltersViewController.swift in Sources */, 3EC834936AEA6088FBC926B4 /* FiltersViewLayout.swift in Sources */, 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */, - FAAA29362B8DCE930089AFE6 /* StorageRequest.swift in Sources */, FA4CC666281801CB00A7E85F /* StakingUnitInfoView.swift in Sources */, FA6261F42AC2C7A8005D3D95 /* NFTOperationFactoryProtocol.swift in Sources */, 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */, 1F6A32CBF7B43390AF412B1A /* NodeSelectionWireframe.swift in Sources */, 07089AFC28B783B5001566CA /* SheetAletViewController.swift in Sources */, - C64DD7582C75C53A00E97804 /* PriceDataMapper.swift in Sources */, + 0701B9952C78FAF000DCD395 /* LiquidityPoolsListViewController.swift in Sources */, C3D915637D26E807B85957CF /* NodeSelectionPresenter.swift in Sources */, FA6C178E29935EEE00A55254 /* DateFormats.swift in Sources */, FA8EE741294C4DB80052C888 /* AllDoneViewModelFactory.swift in Sources */, @@ -18235,7 +19665,6 @@ FA6262592AC2E35A005D3D95 /* MultiSelectNetworksViewController.swift in Sources */, 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */, 8F0B3FE843167777A1D3771C /* NodeSelectionViewLayout.swift in Sources */, - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */, 07089AF328B63386001566CA /* UIButton.swift in Sources */, FA6262502AC2E35A005D3D95 /* WalletConnectActiveSessionsProtocols.swift in Sources */, FA37AE382859CCA7001DCA96 /* StakingUnbondConfirmParachainStrategy.swift in Sources */, @@ -18248,6 +19677,7 @@ 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */, FA34EEB42B9872240042E73E /* StakingCurrentEraRequest.swift in Sources */, 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */, + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */, 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */, AE552BD2B83A94626F109CA9 /* AddCustomNodePresenter.swift in Sources */, FA34EE9A2B98712D0042E73E /* BalanceLocksFetching.swift in Sources */, @@ -18255,7 +19685,6 @@ C3C7D60B36C778DA0A307BCC /* AddCustomNodeViewController.swift in Sources */, FAD428FE2A86567F001D6A16 /* BackupRiskWarningsRouter.swift in Sources */, 502DF063219C7211C2225BD4 /* AddCustomNodeViewLayout.swift in Sources */, - C6182B4C2C6474F30089558D /* PricesService.swift in Sources */, 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */, E5A07BDF3D37C761F453696A /* AddCustomNodeViewFactory.swift in Sources */, 0C4F3F7AB14F4851C12974B6 /* WarningAlertProtocols.swift in Sources */, @@ -18268,9 +19697,11 @@ EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */, FA6262652AC2E35A005D3D95 /* WalletConnectProposalInteractor.swift in Sources */, C481665C170F4D9523DC73AF /* WarningAlertViewLayout.swift in Sources */, + 0701B8BA2C78F69500DCD395 /* FWCosmosView.swift in Sources */, FA72542B2AC2E48500EC47A6 /* WalletConnectProposalDecision.swift in Sources */, 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */, FA389B382840CBE000FF16E9 /* ValidatorSearchParachainStrategy.swift in Sources */, + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */, FA7254302AC2E48500EC47A6 /* WalletConnectPayload.swift in Sources */, FAA0139F28DA131B000A5230 /* StakingBondMorePoolStrategy.swift in Sources */, 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */, @@ -18317,9 +19748,11 @@ 6FA6FA6944AD6519FB8A2AC0 /* WalletMainContainerViewController.swift in Sources */, FA7254412AC2E48500EC47A6 /* ABIParsing.swift in Sources */, D403B7725ED25E20A20F9D6A /* WalletMainContainerViewLayout.swift in Sources */, + 0701B99C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift in Sources */, FA9A8F1B2A72573C008FA99F /* AlchemyRequest.swift in Sources */, 76214649137E7061F701FE38 /* WalletMainContainerAssembly.swift in Sources */, FC9BD9BC4722D8B17B7A7ACC /* MainNftContainerProtocols.swift in Sources */, + 0701B9822C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */, FA286B132A3043DB008BD527 /* CrossChainConfirmationViewController.swift in Sources */, 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */, FA8ED43328FD960F00EBB712 /* YourValidatorListFlow.swift in Sources */, @@ -18337,16 +19770,17 @@ 38BFEDD4B9F31EF2532962BD /* NetworkIssuesNotificationAssembly.swift in Sources */, A4FE32D50E4B7CB5B53E0067 /* StakingPoolInfoProtocols.swift in Sources */, 07BF3D942B3D873F0046ABF4 /* OklinkHistoryOperationFactory.swift in Sources */, - FA9464252C5CC434001E810F /* LiquidityPoolDetailsInput.swift in Sources */, C8C32CC78C058E9F277AB625 /* StakingPoolInfoRouter.swift in Sources */, DE1CFE599177A7A296EAF463 /* StakingPoolInfoPresenter.swift in Sources */, B15D513381B7626AB90018F0 /* StakingPoolInfoInteractor.swift in Sources */, 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */, 281D17EF8C45A1FC49FD1523 /* StakingPoolInfoViewLayout.swift in Sources */, 39DA5795FB9DBF626B72B5C6 /* StakingPoolInfoAssembly.swift in Sources */, + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */, 4A63ECA587C601999AAEB974 /* StakingPoolCreateProtocols.swift in Sources */, 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */, 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */, + 0701B89B2C78F34A00DCD395 /* AccountStatisticsPresentable.swift in Sources */, 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */, 0077B6854FDCA7ECCD557B09 /* StakingPoolCreateViewController.swift in Sources */, FA88005F2B31A005000AE5EB /* StakingAccountResolverV13.swift in Sources */, @@ -18357,7 +19791,6 @@ FAFFAE7D29AC84B10074AF1F /* SubqueryPageInfo.swift in Sources */, 7DFB3D265846A31807E1A663 /* StakingPoolCreateConfirmRouter.swift in Sources */, FA34EEEC2B98723C0042E73E /* BalanceLocksDetailViewController.swift in Sources */, - FAAA29442B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift in Sources */, FAFFAE8129AC84B10074AF1F /* SubqueryDelegatorHistoryElement.swift in Sources */, 10B4951F5E0C515EFBDBC32E /* StakingPoolCreateConfirmPresenter.swift in Sources */, FA7254362AC2E48500EC47A6 /* String+EIP55.swift in Sources */, @@ -18372,29 +19805,34 @@ DAAD3A3FCBA0C0E613167EBF /* ContactsPresenter.swift in Sources */, 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */, 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */, + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */, 2515863D26C9F862AB800C4C /* ContactsViewLayout.swift in Sources */, E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */, 9E2D97A489E8F84A8A0916A8 /* CreateContactProtocols.swift in Sources */, D3C2414CAC720D2D08F0CC4F /* CreateContactRouter.swift in Sources */, + 07C438D72C638B2900475B14 /* TonConnectServiceImpl.swift in Sources */, FA7254222AC2E48500EC47A6 /* WalletConnectSigner.swift in Sources */, 4641B3CABB5FE1DCFBEDA379 /* CreateContactPresenter.swift in Sources */, 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */, FA6262392AC2E35A005D3D95 /* WalletConnectConfirmationPresenter.swift in Sources */, + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */, FACD427F2A5BE7D8009975AA /* JSONRPCOperation+Result.swift in Sources */, FAD429252A865680001D6A16 /* BackupWalletPresenter.swift in Sources */, DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */, AF1FD8891DC8B68A9C17C5B2 /* CreateContactViewLayout.swift in Sources */, + 0701B9A52C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift in Sources */, FAA9BC412B8F17BA00A875BF /* Collection+Average.swift in Sources */, 78627BC990DE9C037CE69BB0 /* CreateContactAssembly.swift in Sources */, DD96B37BBEE1535951802B55 /* AllDoneProtocols.swift in Sources */, CD027E4D430D8939A3D64EB6 /* AllDoneRouter.swift in Sources */, + 0701B8F62C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift in Sources */, FAD067912C2042F30050291F /* Requests.swift in Sources */, - FA41B62B2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift in Sources */, 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */, DE9FA0FA5A6B685CBD593025 /* AllDoneInteractor.swift in Sources */, 65E0BC7A96EDE5E52D32A11B /* AllDoneViewController.swift in Sources */, AB678EAA622BFEAEEA8166F2 /* AllDoneViewLayout.swift in Sources */, 073B34BF2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift in Sources */, + 0701B9C12C78FD8800DCD395 /* VicscanHistoryResponse.swift in Sources */, 37AE170856990F9FBEF052FC /* AllDoneAssembly.swift in Sources */, E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */, 27CD06DA03B268E2C6A90B15 /* PolkaswapAdjustmentRouter.swift in Sources */, @@ -18402,7 +19840,6 @@ 1EF031DB5316E1D180089C7B /* PolkaswapAdjustmentInteractor.swift in Sources */, 888D852FAE0318FAE4A31252 /* PolkaswapAdjustmentViewController.swift in Sources */, E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */, - FA41B6262C64BE6800D0713A /* ViscanHistoryOperationFactory.swift in Sources */, 0D02CBA6399C508D9F25AC8D /* PolkaswapAdjustmentAssembly.swift in Sources */, 2510425D74B7318818B57B0F /* PolkaswapTransaktionSettingsProtocols.swift in Sources */, B7E42D9E7CA509D7BE723357 /* PolkaswapTransaktionSettingsRouter.swift in Sources */, @@ -18431,6 +19868,7 @@ ADF845374BEF73D90D4BF005 /* SwapTransactionDetailRouter.swift in Sources */, A73B076B0E983DA669C1F215 /* SwapTransactionDetailPresenter.swift in Sources */, 41040A200CF5E77C291128DA /* SwapTransactionDetailInteractor.swift in Sources */, + 0701B97F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */, 3B0F51B1D1590FAAE73CD36C /* SwapTransactionDetailViewController.swift in Sources */, 910CEF0535028E629FD9798C /* SwapTransactionDetailViewLayout.swift in Sources */, 02FA6FDF7212F1F8D056BC18 /* SwapTransactionDetailAssembly.swift in Sources */, @@ -18444,10 +19882,12 @@ DDEEF4532805420415471B6A /* NftDetailsAssembly.swift in Sources */, 5980BDE494C9E473E5959C71 /* NftCollectionProtocols.swift in Sources */, 0E30EB59B860DE611FF0DC7D /* NftCollectionRouter.swift in Sources */, + 0701B8F82C78F71800DCD395 /* OKXApproveTransaction.swift in Sources */, EF23CA9AF3889FEAB2D6CBD6 /* NftCollectionPresenter.swift in Sources */, D3BB5CACD4790A601BF01AF5 /* NftCollectionInteractor.swift in Sources */, E5CE21BA40C554E06B566E98 /* NftCollectionViewController.swift in Sources */, FA7254252AC2E48500EC47A6 /* WalletConnectEthereumSigner.swift in Sources */, + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */, FB214D3851B28AA8FF05AA41 /* NftCollectionViewLayout.swift in Sources */, FE65F897D63CAA8F8AE4B972 /* NftCollectionAssembly.swift in Sources */, FA6262572AC2E35A005D3D95 /* MultiSelectNetworksViewModelFactory.swift in Sources */, @@ -18456,6 +19896,7 @@ 20F28EF4AD17FC56A5A6697B /* NftSendPresenter.swift in Sources */, 4823ED3F25DD943928D102C9 /* NftSendInteractor.swift in Sources */, FA6262472AC2E35A005D3D95 /* WalletConnectSessionProtocols.swift in Sources */, + 0701B8F42C78F71800DCD395 /* OKXDexApproveRequestParameters.swift in Sources */, FA6262602AC2E35A005D3D95 /* RawDataPresenter.swift in Sources */, B2E3219218E3F54EEB7D5C3C /* NftSendViewController.swift in Sources */, CBC2B73D7749D5C635EECEE8 /* NftSendViewLayout.swift in Sources */, @@ -18466,10 +19907,11 @@ 0EFEBFB39CE4B0A61B6CD914 /* NftSendConfirmInteractor.swift in Sources */, FB6B2B551238260D754E036D /* NftSendConfirmViewController.swift in Sources */, 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */, + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */, + 0701B8EC2C78F71800DCD395 /* TonConnectParameters.swift in Sources */, 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */, 62843B73F8616209F57A66FC /* AssetNetworksProtocols.swift in Sources */, 1496E87A7652C7D230A9BB46 /* AssetNetworksRouter.swift in Sources */, - C6FBA6DA2C65EA56008B18D9 /* AssetRepositoryFactory.swift in Sources */, A9597D17F54CFF4F3704D868 /* AssetNetworksPresenter.swift in Sources */, A6855830B76B0782A696583A /* AssetNetworksInteractor.swift in Sources */, 82663A49E28CF2504BEAFB01 /* AssetNetworksViewController.swift in Sources */, @@ -18486,12 +19928,14 @@ F52C9FF9ABB4ED034D177CF8 /* LiquidityPoolsOverviewRouter.swift in Sources */, 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */, DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */, + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */, 4A957B3BAC231B70CBC00EC3 /* LiquidityPoolsOverviewViewController.swift in Sources */, 02EC6059AEE8C92B4EDD09C0 /* LiquidityPoolsOverviewViewLayout.swift in Sources */, 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */, CF96BE0B636DA8227E689DDA /* LiquidityPoolDetailsProtocols.swift in Sources */, FAD067D52C214E7C0050291F /* LiquidityPoolsConstants.swift in Sources */, 23E30A21620831C600CBC1D6 /* LiquidityPoolDetailsRouter.swift in Sources */, + 0701B9792C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift in Sources */, D2A85A5EE89EAAA856EA5C0F /* LiquidityPoolDetailsPresenter.swift in Sources */, 7D8D644C5E1695288A0E86C0 /* LiquidityPoolDetailsInteractor.swift in Sources */, A1C05D0028CD04C16AB6082F /* LiquidityPoolDetailsViewController.swift in Sources */, @@ -18500,6 +19944,7 @@ 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */, 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */, FA5085AD2C33C6D4002DF97D /* SafeDictionary.swift in Sources */, + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */, BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */, 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */, F31469BD18062A4A008FE39E /* LiquidityPoolSupplyViewController.swift in Sources */, @@ -18523,20 +19968,65 @@ 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */, 10DEF797CB3DC5BF0903EC4C /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */, E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */, - 00E9DD69FCE94A4F4929B419 /* AccountStatisticsProtocols.swift in Sources */, - 887CE12C7C59F5DB092E9227 /* AccountStatisticsRouter.swift in Sources */, - 11FDC274784B05B690368C07 /* AccountStatisticsPresenter.swift in Sources */, - 5E974C26655D3E64AD6A923D /* AccountStatisticsInteractor.swift in Sources */, - 2BBE065C2A5C31B830DE0957 /* AccountStatisticsViewController.swift in Sources */, - 52AEA30073F8CB856B692757 /* AccountStatisticsViewLayout.swift in Sources */, - 8FC70700D2154F472636D458 /* AccountStatisticsAssembly.swift in Sources */, - AECBFFADE502D32B7D026B62 /* MultichainAssetSelectionProtocols.swift in Sources */, - 092219D6B9BF321344D9679F /* MultichainAssetSelectionRouter.swift in Sources */, - BB96B1EA86DAB3E83B50E4BD /* MultichainAssetSelectionPresenter.swift in Sources */, - 1FBA501F4EC1A9AAD5736D56 /* MultichainAssetSelectionInteractor.swift in Sources */, - 68477096FFF2FE210D9C94B3 /* MultichainAssetSelectionViewController.swift in Sources */, - 49F6A6C2A56A3DE9D456FE7D /* MultichainAssetSelectionViewLayout.swift in Sources */, - 4D44ACFB841F7CE18CE98559 /* MultichainAssetSelectionAssembly.swift in Sources */, + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */, + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */, + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */, + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */, + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */, + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */, + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */, + 0701B98C2C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift in Sources */, + 0701B9CD2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift in Sources */, + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */, + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */, + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */, + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */, + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */, + FA46449E2D49E14B00E21668 /* SelectedCurrencyChanged.swift in Sources */, + 0701B8B92C78F69500DCD395 /* BlockExplorerType+Filters.swift in Sources */, + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */, + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */, + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */, + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */, + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */, + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */, + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */, + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */, + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */, + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */, + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */, + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */, + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */, + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */, + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */, + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */, + 0701B98B2C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift in Sources */, + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */, + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */, + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */, + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */, + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */, + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */, + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */, + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */, + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */, + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */, + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */, + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */, + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */, + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */, + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */, + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */, + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */, + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */, + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */, + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */, + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -18639,6 +20129,7 @@ 846CA778270911920011124C /* StakingLocalSubscriptionFactoryStub.swift in Sources */, AE805FCA26B42AE200007CE9 /* ValidatorOperationFactoryStub.swift in Sources */, FAD428A52A865636001D6A16 /* BackupRiskWarningsTests.swift in Sources */, + 840C71BA26821D2000B6D9C2 /* StakingRedeemMock.swift in Sources */, 84FACB3825F5630000F32ED4 /* RuntimeHelper.swift in Sources */, FAD428A92A865636001D6A16 /* BackupWalletImportedTests.swift in Sources */, A565F118B7ED356099662F03 /* ExportMnemonicTests.swift in Sources */, @@ -18668,6 +20159,7 @@ 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */, 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */, 84AA004326C5DFD800BCB4DC /* RuntimeSyncServiceTests.swift in Sources */, + C4427244A22EA7BA7F7C9E9F /* StakingRedeemTests.swift in Sources */, 7365B203D7F32028225366E5 /* ControllerAccountTests.swift in Sources */, 48A787921C2B3E9F22722154 /* ControllerAccountConfirmationTests.swift in Sources */, F4897BB126AED13D0075F291 /* EraCountdownOperationFactoryStub.swift in Sources */, @@ -18711,6 +20203,8 @@ B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */, 6BF307ADE63FA92389340779 /* LiquidityPoolRemoveLiquidityTests.swift in Sources */, ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */, + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */, + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -18804,7 +20298,7 @@ /* Begin XCBuildConfiguration section */ 8438E1D724BFAAD2001BDB13 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */; + baseConfigurationReference = C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18826,7 +20320,7 @@ }; 8438E1D824BFAAD2001BDB13 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */; + baseConfigurationReference = 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18848,7 +20342,7 @@ }; 8438E1D924BFAAD2001BDB13 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */; + baseConfigurationReference = 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18991,8 +20485,10 @@ baseConfigurationReference = 849013FA24A92A05008F705E /* fearless.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19003,10 +20499,14 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -19017,9 +20517,10 @@ baseConfigurationReference = 849013F924A92A05008F705E /* fearless.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19030,10 +20531,13 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + MARKETING_VERSION = 4.0.1; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -19041,7 +20545,7 @@ }; 849013CB24A80986008F705E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */; + baseConfigurationReference = 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19066,7 +20570,7 @@ }; 849013CC24A80986008F705E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */; + baseConfigurationReference = D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19155,9 +20659,10 @@ baseConfigurationReference = 849013F824A92A05008F705E /* fearless.dev.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19168,11 +20673,14 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -19180,7 +20688,7 @@ }; 8490140024A92A27008F705E /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */; + baseConfigurationReference = 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19249,31 +20757,47 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { + 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; + repositoryURL = "https://github.com/evgenyneu/Cosmos.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 25.0.1; + }; + }; + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-swift"; + requirement = { + branch = main; + kind = branch; + }; + }; + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-api-swift.git"; requirement = { kind = exactVersion; - version = 1.9.9; + version = 0.5.0; }; }; - FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */ = { + FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/soramitsu/shared-features-spm.git"; requirement = { - branch = "price-update-center"; - kind = branch; + kind = revision; + revision = b3e2bf1bc380d0e046b603921cbb63dcefb920cf; }; }; - FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */ = { + FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sendyhalim/Swime"; + repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; requirement = { - kind = upToNextMajorVersion; - minimumVersion = 3.0.0; + kind = exactVersion; + version = 1.9.9; }; }; - FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */ = { + FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/bnsports/Web3.swift.git"; requirement = { @@ -19281,135 +20805,200 @@ version = 7.7.7; }; }; - FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */ = { + FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/evgenyneu/Cosmos.git"; + repositoryURL = "https://github.com/sendyhalim/Swime"; requirement = { - kind = exactVersion; - version = 25.0.1; + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; }; }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - C6182B0E2C631AAC0089558D /* IrohaCrypto */ = { + 0701B8A22C78F54200DCD395 /* Cosmos */ = { + isa = XCSwiftPackageProductDependency; + package = 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */; + productName = Cosmos; + }; + 070ED7D12C3E7DE100DF4098 /* TonSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */; + productName = TonSwift; + }; + 070ED7EA2C4543D900DF4098 /* EventSource */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = EventSource; + }; + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = StreamURLSessionTransport; + }; + 070ED7EE2C4543D900DF4098 /* TonAPI */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonAPI; + }; + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonStreamingAPI; + }; + FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = IrohaCrypto; }; - C6182B102C631AAC0089558D /* MPQRCoreSDK */ = { + FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = MPQRCoreSDK; }; - C6182B122C631AAC0089558D /* RobinHood */ = { + FA1FAD412D62FEBE00ECD456 /* RobinHood */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = RobinHood; }; - C6182B142C631AAC0089558D /* SSFAccountManagment */ = { + FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagment; }; - C6182B162C631AAC0089558D /* SSFAccountManagmentStorage */ = { + FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagmentStorage; }; - C6182B182C631AAC0089558D /* SSFAssetManagment */ = { + FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAssetManagment; }; - C6182B1A2C631AAC0089558D /* SSFChainConnection */ = { + FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainConnection; }; - C6182B1C2C631AAC0089558D /* SSFChainRegistry */ = { + FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainRegistry; }; - C6182B1E2C631AAC0089558D /* SSFCloudStorage */ = { + FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCloudStorage; }; - C6182B202C631AAC0089558D /* SSFCrypto */ = { + FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCrypto; }; - C6182B222C631AAC0089558D /* SSFEraKit */ = { + FA1FAD512D62FEBE00ECD456 /* SSFEraKit */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFEraKit; }; - C6182B242C631AAC0089558D /* SSFExtrinsicKit */ = { + FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFExtrinsicKit; }; - C6182B262C631AAC0089558D /* SSFHelpers */ = { + FA1FAD552D62FEBE00ECD456 /* SSFHelpers */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFHelpers; }; - C6182B282C631AAC0089558D /* SSFKeyPair */ = { + FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFKeyPair; }; - C6182B2A2C631AAC0089558D /* SSFLogger */ = { + FA1FAD592D62FEBE00ECD456 /* SSFLogger */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFLogger; }; - C6182B2C2C631AAC0089558D /* SSFModels */ = { + FA1FAD5B2D62FEBE00ECD456 /* SSFModels */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFModels; }; - C6182B2E2C631AAC0089558D /* SSFNetwork */ = { + FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFNetwork; }; - C6182B302C631AAC0089558D /* SSFPolkaswap */ = { + FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPolkaswap; }; - C6182B322C631AAC0089558D /* SSFPools */ = { + FA1FAD612D62FEBE00ECD456 /* SSFPools */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPools; }; - C6182B342C631AAC0089558D /* SSFPoolsStorage */ = { + FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPoolsStorage; }; - C6182B362C631AAC0089558D /* SSFQRService */ = { + FA1FAD652D62FEBE00ECD456 /* SSFQRService */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFQRService; }; - C6182B382C631AAC0089558D /* SSFRuntimeCodingService */ = { + FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFRuntimeCodingService; }; - C6182B3A2C631AAC0089558D /* SSFSigner */ = { + FA1FAD692D62FEBE00ECD456 /* SSFSigner */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSigner; }; - C6182B3C2C631AAC0089558D /* SSFSingleValueCache */ = { + FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSingleValueCache; }; - C6182B3E2C631AAC0089558D /* SSFStorageQueryKit */ = { + FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFStorageQueryKit; }; - C6182B402C631AAC0089558D /* SSFTransferService */ = { + FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFTransferService; }; - C6182B422C631AAC0089558D /* SSFUtils */ = { + FA1FAD712D62FEBE00ECD456 /* SSFUtils */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFUtils; }; - C6182B442C631AAC0089558D /* SSFXCM */ = { + FA1FAD732D62FEBE00ECD456 /* SSFXCM */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFXCM; }; - C6182B462C631AAC0089558D /* SoraKeystore */ = { + FA1FAD752D62FEBE00ECD456 /* SoraKeystore */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SoraKeystore; }; - C6182B482C631AAC0089558D /* keccak */ = { + FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */ = { + isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; + productName = TonConnectAPI; + }; + FA1FAD792D62FEBE00ECD456 /* keccak */ = { isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = keccak; }; FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { @@ -19437,30 +21026,25 @@ package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; productName = Web3Wallet; }; - FA8FD1872AF4BEDD00354482 /* Swime */ = { - isa = XCSwiftPackageProductDependency; - package = FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */; - productName = Swime; - }; - FAB482EA2C58A8AA00594D89 /* Web3 */ = { + FA8FD1802AF4B55100354482 /* Web3 */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3; }; - FAB482EC2C58A8AA00594D89 /* Web3ContractABI */ = { + FA8FD1822AF4B55100354482 /* Web3ContractABI */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3ContractABI; }; - FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */ = { + FA8FD1842AF4B55100354482 /* Web3PromiseKit */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3PromiseKit; }; - FAF600742C48D79600E56558 /* Cosmos */ = { + FA8FD1872AF4BEDD00354482 /* Swime */ = { isa = XCSwiftPackageProductDependency; - package = FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */; - productName = Cosmos; + package = FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */; + productName = Swime; }; /* End XCSwiftPackageProductDependency section */ @@ -19468,7 +21052,8 @@ FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */, + FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */, + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */, FAD067A02C2044490050291F /* SubstrateDataModel.xcdatamodel */, FAD067A12C2044490050291F /* SubstrateDataModel_v4.xcdatamodel */, FAD067A22C2044490050291F /* SubstrateDataModel_v2.xcdatamodel */, @@ -19477,7 +21062,7 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */, FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */, ); - currentVersion = C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */; + currentVersion = FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */; path = SubstrateDataModel.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 17631718ed..025b3d1242 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,22 +1,22 @@ { - "originHash" : "63872357be3b8d8ea5520be135fe981d8816f9791ecdf1f6a79c9211e5ad62a2", + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", "kind" : "remoteSourceControl", "location" : "https://github.com/openid/AppAuth-iOS.git", "state" : { - "revision" : "c89ed571ae140f8eb1142735e6e23d7bb8c34cb2", - "version" : "1.7.5" + "revision" : "2781038865a80e2c425a1da12cc1327bcd56501f", + "version" : "1.7.6" } }, { "identity" : "bigint", "kind" : "remoteSourceControl", - "location" : "https://github.com/attaswift/BigInt.git", + "location" : "https://github.com/attaswift/BigInt", "state" : { - "revision" : "793a7fac0bfc318e85994bf6900652e827aef33e", - "version" : "5.4.1" + "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", + "version" : "5.3.0" } }, { @@ -33,8 +33,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", "state" : { - "revision" : "678d442c6f7828def400a70ae15968aef67ef52d", - "version" : "1.8.3" + "revision" : "729e01bc9b9dab466ac85f21fb9ee2bc1c61b258", + "version" : "1.8.4" } }, { @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ashleymills/Reachability.swift", "state" : { - "revision" : "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", - "version" : "5.2.3" + "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", + "version" : "5.2.4" } }, { @@ -141,8 +141,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { - "branch" : "price-update-center", - "revision" : "2b13aea1e4284e8c47204895ace1f56ae2536212" + "revision" : "b3e2bf1bc380d0e046b603921cbb63dcefb920cf" } }, { @@ -159,8 +158,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections.git", "state" : { - "revision" : "9bf03ff58ce34478e66aaee630e491823326fd06", - "version" : "1.1.3" + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" } }, { @@ -168,8 +167,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-http-types", "state" : { - "revision" : "ae67c8178eb46944fd85e4dc6dd970e1f3ed6ccd", - "version" : "1.3.0" + "revision" : "ef18d829e8b92d731ad27bb81583edd2094d1ce3", + "version" : "1.3.1" } }, { @@ -177,8 +176,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "30df8551f4e636b8f68627dbc205221bcfc57782", - "version" : "2.71.0" + "revision" : "c51907a839e63ebf0ba2076bba73dd96436bd1b9", + "version" : "2.81.0" } }, { @@ -186,8 +185,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-extras.git", "state" : { - "revision" : "d1ead62745cc3269e482f1c51f27608057174379", - "version" : "1.24.0" + "revision" : "2e9746cfc57554f70b650b021b6ae4738abef3e6", + "version" : "1.24.1" } }, { @@ -195,8 +194,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-http2.git", "state" : { - "revision" : "b5f7062b60e4add1e8c343ba4eb8da2e324b3a94", - "version" : "1.34.0" + "revision" : "170f4ca06b6a9c57b811293cebcb96e81b661310", + "version" : "1.35.0" } }, { @@ -204,8 +203,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-ssl.git", "state" : { - "revision" : "7b84abbdcef69cc3be6573ac12440220789dcd69", - "version" : "2.27.2" + "revision" : "0cc3528ff48129d64ab9cab0b1cd621634edfc6b", + "version" : "2.29.3" } }, { @@ -213,8 +212,17 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-transport-services.git", "state" : { - "revision" : "38ac8221dd20674682148d6451367f89c2652980", - "version" : "1.21.0" + "revision" : "3c394067c08d1225ba8442e9cffb520ded417b64", + "version" : "1.23.1" + } + }, + { + "identity" : "swift-openapi-runtime", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-openapi-runtime", + "state" : { + "revision" : "a51b3bd6f2151e9a6f792ca6937a7242c4758768", + "version" : "0.3.6" } }, { @@ -231,8 +239,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-system.git", "state" : { - "revision" : "d2ba781702a1d8285419c15ee62fd734a9437ff5", - "version" : "1.3.2" + "revision" : "c8a44d836fe7913603e246acab7c528c2e780168", + "version" : "1.4.0" } }, { @@ -262,6 +270,24 @@ "version" : "3.1.0" } }, + { + "identity" : "ton-api-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-api-swift.git", + "state" : { + "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488", + "version" : "0.5.0" + } + }, + { + "identity" : "ton-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-swift", + "state" : { + "branch" : "main", + "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" + } + }, { "identity" : "tweetnacl-swiftwrap", "kind" : "remoteSourceControl", diff --git a/fearless/AppDelegate.swift b/fearless/AppDelegate.swift index 2b4f1bcb27..f6b8a6e086 100644 --- a/fearless/AppDelegate.swift +++ b/fearless/AppDelegate.swift @@ -30,4 +30,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { URLHandlingService.shared.handle(url: url) } + + func application( + _: UIApplication, + continue userActivity: NSUserActivity, + restorationHandler _: @escaping ([any UIUserActivityRestoring]?) -> Void + ) -> Bool { + guard + userActivity.activityType == NSUserActivityTypeBrowsingWeb, + let url = userActivity.webpageURL + else { + return false + } + return URLHandlingService.shared.handle(url: url) + } } diff --git a/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift b/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift index 3649b3f508..1cd3af0298 100644 --- a/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift +++ b/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift @@ -19,8 +19,7 @@ final class BalanceLocksFetchingFactory { operationManager: operationManager ) let storageRequestPerformer = StorageRequestPerformerDefault( - runtimeService: runtimeService, - connection: connection + chainRegistry: chainRegistry ) let crowdloanOperationFactory = CrowdloanOperationFactory( requestOperationFactory: storageRequestFactory, diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift new file mode 100644 index 0000000000..ac55e0ed13 --- /dev/null +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -0,0 +1,329 @@ +import Foundation +import SSFTransferService +import SoraKeystore +import SSFStorageQueryKit +import RobinHood +import SSFUtils +import SSFModels +import SSFNetwork + +final class ServiceAssembly { + static let shared = ServiceAssembly() + private init() {} + + lazy var chainRegistry = ChainRegistryFacade.sharedRegistry + lazy var logger = Logger.shared + lazy var operationManager = OperationManagerFacade.sharedManager + lazy var substrateRepositoryFacade = SubstrateDataStorageFacade.shared + lazy var keystore: KeystoreProtocol = Keychain() + lazy var priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared + lazy var eventCenter = EventCenter.shared + lazy var userDefaults = SettingsManager.shared + lazy var localToggle = LocalToggleService.shared + lazy var walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared + + private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? + func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { + if let _accountInfoRemoteServiceDefault { + return _accountInfoRemoteServiceDefault + } + + let service = AccountInfoRemoteServiceDefault( + ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching(), + tonRemoteBalanceFetching: tonRemoteBalanceFetching(), + substrateRemoteBalanceFetching: substrateRemoteBalanceFetching() + ) + _accountInfoRemoteServiceDefault = service + return service + } + + private var _ethereumRemoteBalanceFetching: AccountInfoRemoteService? + func ethereumRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _ethereumRemoteBalanceFetching { + return _ethereumRemoteBalanceFetching + } + let ethereumBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + let service = EthereumRemoteBalanceFetching( + chainRegistry: chainRegistry, + repositoryWrapper: ethereumBalanceRepositoryWrapper + ) + _ethereumRemoteBalanceFetching = service + return service + } + + private var _tonRemoteBalanceFetching: AccountInfoRemoteService? + func tonRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _tonRemoteBalanceFetching { + return _tonRemoteBalanceFetching + } + let tonBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + + let service = TonRemoteBalanceFetchingImpl( + chainRegistry: chainRegistry, + repositoryWrapper: tonBalanceRepositoryWrapper, + jettonInjector: tonJettonInjector() + ) + _tonRemoteBalanceFetching = service + return service + } + + private var _substrateRemoteBalanceFetching: AccountInfoRemoteService? + func substrateRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _substrateRemoteBalanceFetching { + return _substrateRemoteBalanceFetching + } + let storagePerformer = StorageRequestPerformerDefault( + chainRegistry: chainRegistry + ) + let service = SubstrateRemoteBalanceFetchingImpl( + storagePerformer: storagePerformer + ) + _substrateRemoteBalanceFetching = service + return service + } + + private var _accountInfoStorageWrapper: AnyDataProviderRepository? + func accountInfoStorageWrapper() -> AnyDataProviderRepository { + if let _accountInfoStorageWrapper { + return _accountInfoStorageWrapper + } + let service = SubstrateRepositoryFactory( + storageFacade: UserDataStorageFacade.shared + ).createAccountInfoStorageItemRepository() + + _accountInfoStorageWrapper = service + return service + } + + private var _existentialDepositService: ExistentialDepositServiceProtocol? + func existentialDepositService() -> ExistentialDepositServiceProtocol { + if let _existentialDepositService { + return _existentialDepositService + } + let existentialDepositService = ExistentialDepositService( + operationManager: operationManager, + chainRegistry: chainRegistry + ) + _existentialDepositService = existentialDepositService + return existentialDepositService + } + + func transferService(for wallet: MetaAccountModel) -> TransferService { + TransferServiceDefault( + wallet: wallet, + keystore: keystore, + chainRegistry: chainRegistry + ) + } + + private var _storageOperationFactory: StorageRequestFactoryProtocol? + func storageOperationFactory() -> StorageRequestFactoryProtocol { + if let _storageOperationFactory { + return _storageOperationFactory + } + let storageOperationFactory = StorageRequestFactory( + remoteFactory: StorageKeyFactory(), + operationManager: operationManager + ) + _storageOperationFactory = storageOperationFactory + return storageOperationFactory + } + + private var _polkaswapService: PolkaswapService? + func polkaswapService() -> PolkaswapService { + if let _polkaswapService { + return _polkaswapService + } + + let settingsRepository: CoreDataRepository = + substrateRepositoryFacade.createRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(PolkaswapSettingMapper()) + ) + + let operationFactory = PolkaswapOperationFactory( + storageRequestFactory: storageOperationFactory(), + chainRegistry: chainRegistry, + chainId: Chain.soraMain.genesisHash + ) + let polkaswapService = PolkaswapServiceImpl( + polkaswapOperationFactory: operationFactory, + settingsRepository: AnyDataProviderRepository(settingsRepository), + operationManager: operationManager + ) + _polkaswapService = polkaswapService + return polkaswapService + } + + func chainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AnyDataProviderRepository { + let chainRepository = ChainRepositoryFactory().createRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AnyDataProviderRepository(chainRepository) + } + + func asyncChainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AsyncAnyRepository { + let chainRepository = ChainRepositoryFactory().createAsyncRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AsyncAnyRepository(chainRepository) + } + + func addressChainDefiner(wallet: MetaAccountModel) -> AddressChainDefiner { + AddressChainDefiner( + operationManager: operationManager, + chainModelRepository: chainModelRepository(), + wallet: wallet + ) + } + + func chainAssetFetching(qualityOfService: QualityOfService) -> ChainAssetFetchingProtocol { + let operationQueue = OperationQueue() + operationQueue.qualityOfService = qualityOfService + let chainAssetFetching = ChainAssetsFetching( + chainRepository: chainModelRepository(), + operationQueue: operationQueue + ) + return chainAssetFetching + } + + private var _scamInfoAsyncRepository: AsyncAnyRepository? + func scamInfoAsyncRepository() -> AsyncAnyRepository { + if let _scamInfoAsyncRepository { + return _scamInfoAsyncRepository + } + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDScamInfo.address)) + let repository: AsyncCoreDataRepositoryDefault = + substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepository = AsyncAnyRepository(repository) + _scamInfoAsyncRepository = anyRepository + return anyRepository + } + + private var _tonJettonInjector: TonJettonInjector? + func tonJettonInjector() -> TonJettonInjector { + if let _tonJettonInjector { + return _tonJettonInjector + } + + let repo = asyncChainModelRepository() + let injector = TonJettonInjectorImpl( + chainModelRepository: repo, + eventCenter: eventCenter, + logger: logger + ) + _tonJettonInjector = injector + return injector + } + + private var _tonConnectService: TonConnectService? + func tonConnectService() -> TonConnectService { + if let _tonConnectService { + return _tonConnectService + } + + let networkWorker = SSFNetwork.NetworkWorkerImpl() + let eventCenter = TonConnectEventsCenter( + chainRegistry: chainRegistry, + lastEventStore: SettingsManager.shared, + logger: logger + ) + let service = TonConnectServiceImpl( + chainRegistry: chainRegistry, + tonService: tonSendService(), + networkWorker: networkWorker, + messageBuilder: TonConnectMessageBuilderImpl(), + appRepository: tonConnectAppAsyncRepository(), + eventCenter: eventCenter, + logger: logger + ) + _tonConnectService = service + return service + } + + private var _tonDappAsyncRepository: AsyncAnyRepository? + func tonDappAsyncRepository() -> AsyncAnyRepository { + if let _tonDappAsyncRepository { + return _tonDappAsyncRepository + } + + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDTonDapp.identifier)) + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonDappAsyncRepository = anyRepo + return anyRepo + } + + private var _tonConnectAppAsyncRepository: AsyncAnyRepository? + func tonConnectAppAsyncRepository() -> AsyncAnyRepository { + if let _tonConnectAppAsyncRepository { + return _tonConnectAppAsyncRepository + } + + let mapper: CodableCoreDataMapper = CodableCoreDataMapper() + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonConnectAppAsyncRepository = anyRepo + return anyRepo + } + + private var _tonSendService: TonSendService? + func tonSendService() -> TonSendService { + if let _tonSendService { + return _tonSendService + } + + let service = TonSendServiceDefault( + chainRegistry: chainRegistry + ) + _tonSendService = service + return service + } + + func tonBocFactory( + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> BocFactory { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag( + for: .ton, + metaId: metaId, + accountId: accountId + ) + + let secretKey = try keystore.fetchKey(for: tag) + let factory = BocFactoryImpl(secretKey: secretKey) + return factory + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift index c93993653e..b479ee300c 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift @@ -127,67 +127,69 @@ final class AccountInfoFetching: AccountInfoFetchingProtocol { completionBlock(chainAsset, nil) return } - if chainAsset.chain.isEthereum { - self?.handleEthereumAccountInfo( - chainAsset: chainAsset, - item: item, completionBlock: - completionBlock - ) - return - } - switch chainAsset.chainAssetType { - case .normal: - self?.handleAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - self?.handleOrmlAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .equilibrium: - self?.handleEquilibrium( - chainAsset: chainAsset, - accountId: accountId, - item: item, - completionBlock: completionBlock - ) - case .assets: - self?.handleAssetAccount( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .soraAsset: - if chainAsset.isUtility { + + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: self?.handleAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: self?.handleOrmlAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) + case .equilibrium: + self?.handleEquilibrium( + chainAsset: chainAsset, + accountId: accountId, + item: item, + completionBlock: completionBlock + ) + case .assets: + self?.handleAssetAccount( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + case .soraAsset: + if chainAsset.isUtility { + self?.handleAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } else { + self?.handleOrmlAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + self?.handleEthereumAccountInfo( + chainAsset: chainAsset, + item: item, completionBlock: + completionBlock + ) } default: completionBlock(chainAsset, nil) @@ -266,101 +268,102 @@ private extension AccountInfoFetching { return ClosureOperation { [:] } } - if chainAsset.chain.isEthereum { - return ClosureOperation { - let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + let chainAssetType = chainAsset.chainAssetType.substrateAssetType.map { type in + guard type == .soraAsset else { + return type + } - return [chainAsset: accountInfo] + /* Sora assets logic */ + if chainAsset.isUtility { + return .normal + } else { + return .soraAsset + } } - } + switch chainAssetType { + case .none: + return ClosureOperation { [chainAsset: nil] } + case .normal: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .account + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let chainAssetType = chainAsset.chainAssetType.map { type in - guard type == .soraAsset else { - return type - } + let operation = createNormalMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - /* Sora assets logic */ - if chainAsset.isUtility { - return .normal - } else { - return .soraAsset - } - } - switch chainAssetType { - case .none: - return ClosureOperation { [chainAsset: nil] } - case .normal: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .account - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .soraAsset, + .assetId, + .token2, + .xcm: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .tokens + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createNormalMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createOrmlMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .soraAsset, - .assetId, - .token2, - .xcm: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .tokens - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .equilibrium: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: chainAsset.storagePath + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createOrmlMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createEquilibriumMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .equilibrium: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: chainAsset.storagePath - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .assets: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .assetsAccount + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createEquilibriumMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createAssetMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .assets: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .assetsAccount - ) else { - return ClosureOperation { [chainAsset: nil] } + return operation } + case .ethereum, .ton: + return ClosureOperation { + let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) - let operation = createAssetMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) - - return operation + return [chainAsset: accountInfo] + } } } diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift new file mode 100644 index 0000000000..22fd5b2475 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift @@ -0,0 +1,102 @@ +import Foundation +import SSFStorageQueryKit +import SSFChainRegistry +import SSFNetwork +import SSFModels +import SSFUtils +import RobinHood + +protocol AccountInfoRemoteService { + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] +} + +final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { + private let ethereumRemoteBalanceFetching: AccountInfoRemoteService + private let tonRemoteBalanceFetching: AccountInfoRemoteService + private let substrateRemoteBalanceFetching: AccountInfoRemoteService + + init( + ethereumRemoteBalanceFetching: AccountInfoRemoteService, + tonRemoteBalanceFetching: AccountInfoRemoteService, + substrateRemoteBalanceFetching: AccountInfoRemoteService + ) { + self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + self.tonRemoteBalanceFetching = tonRemoteBalanceFetching + self.substrateRemoteBalanceFetching = substrateRemoteBalanceFetching + } + + // MARK: - AccountInfoStorageService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let fetcher = getFetcher(for: chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfos(for: chain, wallet: wallet) + return accountInfos + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + let fetcher = getFetcher(for: chainAsset.chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfo(for: chainAsset, wallet: wallet) + return accountInfos + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + let fetcher = self.getFetcher(for: chain.ecosystem) + let result = try await fetcher.fetchAccountInfos(for: chainAssets, wallet: wallet) + return result + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result + } + + return balances + } + + // MARK: - Private methods + + private func getFetcher(for ecosystem: Ecosystem) -> AccountInfoRemoteService { + switch ecosystem { + case .substrate, .ethereumBased: + return substrateRemoteBalanceFetching + case .ethereum: + return ethereumRemoteBalanceFetching + case .ton: + return tonRemoteBalanceFetching + } + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 68e5f06498..b3c8d6a396 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -3,11 +3,15 @@ import SSFModels import SSFUtils import RobinHood import BigInt +import SSFCrypto enum BalanceLocksFetchingError: Error { case unknownChainAssetType case stakingNotFound case noDataFound + case noVestingLocksFound + case noAssetFrozenFound + case timeout } protocol BalanceLocksFetching { @@ -45,12 +49,12 @@ final class BalanceLocksFetchingDefault { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let controllerRequest = StakingControllerRequest(accountId: accountIdVariant) - let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest) + let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest, chain: chainAsset.chain) if let controllerAddress { - return try controllerAddress.toAccountId() + return try controllerAddress.toAccountId(using: chainAsset.chain.chainFormat) } - let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest) + let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest, chain: chainAsset.chain) return controllerAccountId } @@ -77,7 +81,7 @@ final class BalanceLocksFetchingDefault { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request, chain: chainAsset.chain) return assetAccountInfo } } @@ -89,14 +93,77 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { async let governanceLocks = fetchGovernanceLocks(for: accountId) async let crowdloanLocks = fetchCrowdloanLocks(for: accountId) async let vestingLocks = fetchVestingLocks(for: accountId, currencyId: currencyId) - - return await [ - (try? stakingLocks).or(.zero), - (try? nominationPoolLocks).or(.zero), - (try? governanceLocks).or(.zero), - (try? crowdloanLocks).or(.zero), - (try? vestingLocks).or(.zero) - ].reduce(0, +) + + var stakingLocksValue: Decimal? + var nominationPoolLocksValue: Decimal? + var governanceLocksValue: Decimal? + var crowdloanLocksValue: Decimal? + var vestingLocksValue: Decimal? + + var errors: [Error] = [] + + do { + if chainAsset.asset.staking == nil { + stakingLocksValue = 0 + } else { + stakingLocksValue = try await stakingLocks + } + } catch { + errors.append(error) + } + + do { + if chainAsset.chain.options?.contains(.poolStaking) != true { + nominationPoolLocksValue = 0 + } else { + nominationPoolLocksValue = try await nominationPoolLocks + } + } catch { + errors.append(error) + } + + do { + if chainAsset.isUtility { + governanceLocksValue = try await governanceLocks + } else { + governanceLocksValue = 0 + } + } catch { + errors.append(error) + } + + do { + vestingLocksValue = try await vestingLocks + } catch { + errors.append(error) + } + + do { + if chainAsset.isUtility { + crowdloanLocksValue = try await crowdloanLocks + } else { + crowdloanLocksValue = 0 + } + } catch { + errors.append(error) + } + + + let isTimeoutError: Bool = errors.first { $0 as? JSONRPCEngineError == JSONRPCEngineError.clientCancelled } != nil + + guard !isTimeoutError else { + throw BalanceLocksFetchingError.timeout + } + + + return [ + stakingLocksValue, + nominationPoolLocksValue, + governanceLocksValue, + crowdloanLocksValue, + vestingLocksValue + ].compactMap { $0 }.reduce(0, +) + } func fetchStakingLocks(for accountId: AccountId) async throws -> StakingLocks { @@ -108,8 +175,8 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let ledgerRequest = StakingLedgerRequest(accountId: accountIdVariant) let eraRequest = StakingCurrentEraRequest() - async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest) - async let asyncLedger: StakingLedger? = storageRequestPerformer.performSingle(ledgerRequest) + async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest, chain: chainAsset.chain) + async let asyncLedger: StakingLedger? = storageRequestPerformer.performSingle(ledgerRequest, chain: chainAsset.chain) let ledger = try await asyncLedger let activeEra = try await asyncActiveEra?.value @@ -158,8 +225,8 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let poolMemberRequest = NominationPoolsPoolMembersRequest(accountId: accountId) let eraRequest = StakingCurrentEraRequest() - async let asyncStakingPoolMember: StakingPoolMember? = storageRequestPerformer.performSingle(poolMemberRequest) - async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest) + async let asyncStakingPoolMember: StakingPoolMember? = storageRequestPerformer.performSingle(poolMemberRequest, chain: chainAsset.chain) + async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest, chain: chainAsset.chain) async let claimableResponse = try await fetchPoolPendingRewards(for: accountId) let stakingPoolMember = try await asyncStakingPoolMember @@ -212,7 +279,7 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountIdVariant) - let balanceLocks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest) + let balanceLocks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) let govLocked = balanceLocks?.first(where: { $0.displayId == "pyconvot" })?.amount return Decimal.fromSubstrateAmount(govLocked.or(.zero), precision: Int16(chainAsset.asset.precision)).or(.zero) } @@ -230,37 +297,51 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { func fetchVestingLocks(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountIdVariant) - let balanceLocks: BalanceLocks? = try? await storageRequestPerformer.performSingle(balancesLocksRequest) + let balanceLocks: BalanceLocks? = try? await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) - let balanceLockedRewardsValue = balanceLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.map { lock in - Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - } ?? .zero + let balanceLockedRewardsValue = balanceLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.flatMap { lock in + Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) + } guard let currencyId else { + guard let balanceLockedRewardsValue else { + throw BalanceLocksFetchingError.noVestingLocksFound + } + return balanceLockedRewardsValue } let tokensLocksRequest = TokensLocksRequest(accountId: accountIdVariant, currencyId: currencyId) - let tokenLocks: TokenLocks? = try? await storageRequestPerformer.performSingle(tokensLocksRequest) - let tokenLockedRewardsValue = tokenLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.map { lock in - Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - } ?? .zero + let tokenLocks: TokenLocks? = try? await storageRequestPerformer.performSingle(tokensLocksRequest, chain: chainAsset.chain) + let tokenLockedRewardsValue = tokenLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.flatMap { lock in + Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) + } - return [balanceLockedRewardsValue, tokenLockedRewardsValue].reduce(0, +) + let values = [balanceLockedRewardsValue, tokenLockedRewardsValue].compactMap { $0 } + guard values.first != nil else { + throw BalanceLocksFetchingError.noVestingLocksFound + } + + return values.reduce(0, +) } func fetchAssetLocks(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { guard let currencyId else { - return .zero + throw BalanceLocksFetchingError.noAssetFrozenFound } let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request, chain: chainAsset.chain) let locked = assetAccountInfo.flatMap { Decimal.fromSubstrateAmount($0.locked, precision: Int16(chainAsset.asset.precision)) } - return locked.or(.zero) + + guard let locked else { + throw BalanceLocksFetchingError.noAssetFrozenFound + } + + return locked } func fetchAssetFrozen(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift similarity index 76% rename from fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift rename to fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift index bf58d130a5..4b78e0be7a 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift @@ -4,33 +4,58 @@ import Web3ContractABI import Web3PromiseKit import SSFModels import RobinHood +import SSFCrypto -final actor EthereumRemoteBalanceFetching { +actor EthereumRemoteBalanceFetching: AccountInfoRemoteService { private let chainRegistry: ChainRegistryProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.repositoryWrapper = repositoryWrapper } - nonisolated private func fetchEthereumBalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchETHBalance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: SSFModels.ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let chainAssets = chain.chainAssets + let response = try await fetch(for: chainAssets, wallet: wallet) + let mapped = response.map { + ($0.key.chainAssetId, $0.value) } + let map = Dictionary(uniqueKeysWithValues: mapped) + return map } - nonisolated private func fetchErc20BalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchERC20Balance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + func fetchAccountInfo( + for chainAsset: SSFModels.ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } + let accountInfo = try await fetch( + for: chainAsset, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [SSFModels.ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + try await fetchByUniqKey(for: chainAssets, wallet: wallet) } + // MARK: - Private methods + private func fetchETHBalance(for chainAsset: ChainAsset, address: String) async throws -> AccountInfo? { guard let ws = chainRegistry.getEthereumConnection(for: chainAsset.chain.chainId) else { throw ChainRegistryError.connectionUnavailable @@ -45,7 +70,7 @@ final actor EthereumRemoteBalanceFetching { return } if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = resp.error { @@ -76,7 +101,7 @@ final actor EthereumRemoteBalanceFetching { } if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = error { @@ -90,43 +115,7 @@ final actor EthereumRemoteBalanceFetching { } } - nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { - guard let accountInfo else { return } - let storagePath = chainAsset.storagePath - - let localKey = try LocalStorageKeyFactory().createFromStoragePath( - storagePath, - chainAssetKey: chainAsset.uniqueKey(accountId: accountId) - ) - - try repositoryWrapper.save(data: accountInfo, identifier: localKey) - } -} - -extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { - func fetch( - for chainAsset: ChainAsset, - accountId: AccountId - ) async throws -> (ChainAsset, AccountInfo?) { - guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { - return (chainAsset, nil) - } - - switch chainAsset.asset.ethereumType { - case .normal: - let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .erc20, .bep20: - let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .none: - return (chainAsset, nil) - } - } - - func fetch( + private func fetch( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAsset: AccountInfo?] { @@ -135,7 +124,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return [:] } - let chainAssets = chainAssets.filter { $0.chain.isEthereum } + let chainAssets = chainAssets.filter { $0.chain.ecosystem.isEthereum } chainAssets.forEach { chainAsset in group.addTask { @@ -143,7 +132,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return (chainAsset, nil) } - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: do { let accountInfo = try await strongSelf.fetchETHBalance(for: chainAsset, address: address) @@ -186,29 +175,29 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return balances } - nonisolated func fetch( + private func fetch( for chainAsset: ChainAsset, - accountId: AccountId, - completionBlock: @escaping (ChainAsset, AccountInfo?) -> Void - ) { - Task { - let result = try await fetch(for: chainAsset, accountId: accountId) - completionBlock(result.0, result.1) + accountId: AccountId + ) async throws -> AccountInfo? { + guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { + return nil } - } - nonisolated func fetch( - for chainAssets: [ChainAsset], - wallet: MetaAccountModel, - completionBlock: @escaping ([ChainAsset: AccountInfo?]) -> Void - ) { - Task { - let result = try await fetch(for: chainAssets, wallet: wallet) - completionBlock(result) + switch chainAsset.asset.assetType.ethereumAssetType { + case .normal: + let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .erc20, .bep20: + let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .none: + return nil } } - func fetchByUniqKey( + private func fetchByUniqKey( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAssetKey: AccountInfo?] { @@ -223,4 +212,15 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { } return Dictionary(uniqueKeysWithValues: mapped) } + + nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { + let storagePath = chainAsset.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: chainAsset.uniqueKey(accountId: accountId) + ) + + try repositoryWrapper.save(data: accountInfo, identifier: localKey) + } } diff --git a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift b/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift index 2fb527bfa3..d56aece982 100644 --- a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift +++ b/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift @@ -12,27 +12,27 @@ enum AccountInfoStorageResponseValueRegistry: String { struct AccountInfoStorageRequest: MixStorageRequest { typealias Response = AccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct OrmlAccountInfoStorageRequest: MixStorageRequest { typealias Response = OrmlAccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct EquilibriumAccountInfotorageRequest: MixStorageRequest { typealias Response = EquilibriumAccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct AssetAccountStorageRequest: MixStorageRequest { typealias Response = AssetAccount let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } diff --git a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift similarity index 67% rename from fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift rename to fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift index 2698311962..560cd350fe 100644 --- a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift +++ b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift @@ -1,40 +1,14 @@ import Foundation -import SSFStorageQueryKit -import SSFChainRegistry -import SSFNetwork import SSFModels -import SSFUtils -import RobinHood - -protocol AccountInfoRemoteService { - func fetchAccountInfos( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] +import SSFStorageQueryKit - func fetchAccountInfo( - for chainAsset: ChainAsset, - wallet: MetaAccountModel - ) async throws -> AccountInfo? -} +actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { + private let storagePerformer: StorageRequestPerformer -final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { - private let runtimeItemRepository: AsyncAnyRepository - private let ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching - private let storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - - init( - runtimeItemRepository: AsyncAnyRepository, - ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching, - storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - ) { - self.runtimeItemRepository = runtimeItemRepository - self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + init(storagePerformer: StorageRequestPerformer) { self.storagePerformer = storagePerformer } - // MARK: - AccountInfoStorageService - func fetchAccountInfos( for chain: ChainModel, wallet: MetaAccountModel @@ -42,14 +16,8 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing AccountId for chain: \(chain.name)") } - - if chain.isEthereum { - let accountInfos = try await fetchEthereum(for: chain, wallet: wallet) - return accountInfos - } else { - let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) - return accountInfos - } + let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) + return accountInfos } func fetchAccountInfo( @@ -59,22 +27,47 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } - if chainAsset.chain.isEthereum { - let response = try await ethereumRemoteBalanceFetching.fetch( - for: chainAsset, - accountId: accountId - ) - return response.1 - } else { - let request = createSubstrateRequest(for: chainAsset, accountId: accountId) - let response = try await storagePerformer.perform([request], chain: chainAsset.chain) - let map = try createSubstrateMap(from: response, chain: chainAsset.chain) - let accountInfo = map[chainAsset.chainAssetId] ?? nil - return accountInfo + let request = createSubstrateRequest(for: chainAsset, accountId: accountId) + let response = try await storagePerformer.perform([request], chain: chainAsset.chain) + let map = try await createSubstrateMap(from: response, chain: chainAsset.chain) + let accountInfo = map[chainAsset.chainAssetId] ?? nil + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chain.name)") + } + let requests = await chainAssets.asyncMap { await self.createSubstrateRequest(for: $0, accountId: accountId) } + let result = try await self.storagePerformer.perform(requests, chain: chain) + let map = try await self.createSubstrateMap(from: result, chain: chain, accountId: accountId) + return map + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result } + + return balances } - // MARK: - Private substrate methods + // MARK: - Private methods private func fetchSubstrate( for chain: ChainModel, @@ -82,14 +75,14 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) async throws -> [ChainAssetId: AccountInfo?] { let requests = chain.chainAssets.map { createSubstrateRequest(for: $0, accountId: accountId) } let result = try await storagePerformer.perform(requests, chain: chain) - let map = try createSubstrateMap(from: result, chain: chain) + let map = try await createSubstrateMap(from: result, chain: chain) return map } private func createSubstrateMap( from result: [MixStorageResponse], chain: ChainModel - ) throws -> [ChainAssetId: AccountInfo?] { + ) async throws -> [ChainAssetId: AccountInfo?] { try result.reduce([ChainAssetId: AccountInfo?]()) { part, response in var partial = part let id = ChainAssetId(id: response.request.requestId) @@ -101,6 +94,26 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { } } + private func createSubstrateMap( + from result: [MixStorageResponse], + chain: ChainModel, + accountId: AccountId + ) async throws -> [ChainAssetKey: AccountInfo?] { + try result.reduce([ChainAssetKey: AccountInfo?]()) { part, response in + var partial = part + let id = ChainAssetId(id: response.request.requestId) + guard let chainAsset = chain.chainAssets.first(where: { $0.chainAssetId == id }) else { + return part + } + let key = chainAsset.uniqueKey(accountId: accountId) + + let accountInfo = try mapAccountInfo(response: response, chain: chain) + partial[key] = accountInfo + + return partial + } + } + private func mapAccountInfo(response: MixStorageResponse, chain: ChainModel) throws -> AccountInfo? { guard let json = response.json else { return nil @@ -157,7 +170,7 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) return request } else { - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: accountId)], [NMapKeyParam(value: chainAsset.currencyId)] ] @@ -176,7 +189,7 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) return request case .assets: - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: chainAsset.currencyId)], [NMapKeyParam(value: accountId)] ] @@ -200,7 +213,7 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) return request default: - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: accountId)], [NMapKeyParam(value: chainAsset.currencyId)] ] @@ -212,19 +225,4 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { return request } } - - // MARK: - Private ethereum methods - - private func fetchEthereum( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] { - let chainAsset = chain.chainAssets - let response = try await ethereumRemoteBalanceFetching.fetch(for: chainAsset, wallet: wallet) - let mapped = response.map { - ($0.key.chainAssetId, $0.value) - } - let map = Dictionary(uniqueKeysWithValues: mapped) - return map - } } diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift new file mode 100644 index 0000000000..7637d35dc8 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -0,0 +1,318 @@ +import Foundation +import TonAPI +import BigInt +import SSFModels +import TonSwift + +enum TonRemoteBalanceFetchingError: Error { + case missingAccount + case balanceError + case jettonNotFound + case utilityNotFound +} + +actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { + private let chainRegistry: ChainRegistryProtocol + private let repositoryWrapper: BalanceRepositoryCacheWrapper + private let jettonInjector: TonJettonInjector + + init( + chainRegistry: ChainRegistryProtocol, + repositoryWrapper: BalanceRepositoryCacheWrapper, + jettonInjector: TonJettonInjector + ) { + self.chainRegistry = chainRegistry + self.repositoryWrapper = repositoryWrapper + self.jettonInjector = jettonInjector + } + + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let chainAssets = chain.chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + + let chainAccountInfos = try await getChainAccountInfos( + address: address, + currency: wallet.selectedCurrency + ) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + chain: chain + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.chainAssetId, $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalMap: [ChainAssetId: AccountInfo?] = [normal.chainAssetId: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let accountInfo: AccountInfo + switch chainAsset.chainAssetType.tonAssetType { + case .normal: + accountInfo = try await getAccountInfo(address: address, currency: wallet.selectedCurrency) + case .jetton: + let jettons = try await getAccountJettonsBalances( + address: address, + currency: wallet.selectedCurrency + ) + guard let jetton = jettons.first(where: { jetton in + jetton.item.walletAddress.toRaw() == chainAsset.asset.id + }) else { + return nil + } + return AccountInfo(balance: jetton.quantity) + case .none: + return nil + } + + let cacheValue = [(chainAsset, accountInfo)] + try? cache( + cacheValue, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let chainAssets = chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + + guard let accountId = wallet.fetch(for: normal.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + + let address = try accountId.asTonAddress().toFriendly().toString() + let chainAccountInfos = try await getChainAccountInfos( + address: address, + currency: wallet.selectedCurrency + ) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + chain: normal.chain + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.uniqueKey(accountId: accountId), $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalKey = normal.uniqueKey(accountId: accountId) + let normalMap: [ChainAssetKey: AccountInfo?] = [normalKey: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + // MARK: - Private methods + + private func getTonRates( + currency: Currency + ) async throws -> [String: Components.Schemas.TokenRates] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getRates( + query: .init(tokens: "TON", currencies: currency.id.uppercased()) + ) + + let entity = try response.ok.body.json + return entity.rates.additionalProperties + } + + private func createJettonsAccountInfos( + jettonBalances: [TonJettonBalance], + chain: ChainModel + ) -> [(ChainAsset, AccountInfo)] { + let jettonsAccountInfo: [(ChainAsset, AccountInfo)] = jettonBalances.map { jetton in + let asset = createAssetModel(from: jetton) + let chainAsset = ChainAsset(chain: chain, asset: asset) + return (chainAsset, AccountInfo(balance: jetton.quantity)) + } + return jettonsAccountInfo + } + + private func createAssetModel(from balanceInfo: TonJettonBalance) -> AssetModel { + AssetModel( + id: balanceInfo.item.walletAddress.toRaw(), + name: balanceInfo.item.jettonInfo.name, + symbol: balanceInfo.item.jettonInfo.symbol ?? balanceInfo.item.jettonInfo.name, + precision: UInt16(balanceInfo.item.jettonInfo.fractionDigits), + icon: balanceInfo.item.jettonInfo.imageURL, + currencyId: balanceInfo.item.jettonInfo.address.toRaw(), + existentialDeposit: nil, + color: nil, + isUtility: false, + isNative: false, + staking: nil, + purchaseProviders: nil, + assetType: .ton(tonType: .jetton), + priceProvider: nil, + coingeckoPriceId: nil, + priceData: balanceInfo.priceData + ) + } + + private func getChainAccountInfos( + address: String, + currency: Currency + ) async throws -> (normal: AccountInfo, jettons: [TonJettonBalance]) { + async let normalBalanceTask = getAccountInfo(address: address, currency: currency) + async let jettonBalancesTask = getAccountJettonsBalances(address: address, currency: currency) + let normalBalance = try await normalBalanceTask + let jettonBalances = try await jettonBalancesTask + return (normalBalance, jettonBalances) + } + + private func getAccountInfo( + address: String, + currency: Currency + ) async throws -> AccountInfo { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + async let response = try tonAPIClient.getAccount(.init(path: .init(account_id: address))) + async let rates = try getTonRates(currency: currency) + + let account = try await TonAccount(account: try response.ok.body.json) + let stringBalance = String(account.balance) + guard let balance = BigUInt(string: stringBalance) else { + throw TonRemoteBalanceFetchingError.balanceError + } + + if let tonRates = try? await rates["TON"] { + let tonPriceData = mapJettonRates(rates: tonRates, currency: currency) + await jettonInjector.inject(tonPriceData: tonPriceData) + } + + let accountInfo = AccountInfo(balance: balance) + return accountInfo + } + + private func getAccountJettonsBalances( + address: String, + currency: Currency + ) async throws -> [TonJettonBalance] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getAccountJettonsBalances( + path: .init(account_id: address), + query: .init(currencies: currency.id.uppercased()) + ) + + let jettons = try response.ok.body.json.balances.compactMap { jetton in + do { + let quantity = BigUInt(stringLiteral: jetton.balance) + let walletAddress = try TonSwift.Address.parse(jetton.wallet_address.address) + let jettonInfo = try TonJettonInfo(jettonPreview: jetton.jetton) + let jettonItem = TonJettonItem(jettonInfo: jettonInfo, walletAddress: walletAddress) + let rates = mapJettonRates(rates: jetton.price, currency: currency) + let jettonBalance = TonJettonBalance( + item: jettonItem, + quantity: quantity, + priceData: rates + ) + return jettonBalance + } catch { + return nil + } + } + Task { + await jettonInjector.inject(jettonItems: jettons) + } + return jettons + } + + private func mapJettonRates( + rates: Components.Schemas.TokenRates?, + currency: Currency + ) -> [PriceData] { + guard let price = rates?.prices?.additionalProperties.first?.value else { + return [] + } + let fiatDayChangeString = rates?.diff_24h?.additionalProperties.first?.value.replacingOccurrences(of: "%", with: "") + let fiatDayChangeStringU002D = fiatDayChangeString?.replacingOccurrences(of: "\u{2212}", with: "-") ?? "0" + let fiatDayChangeDecimal = Decimal(string: fiatDayChangeStringU002D) ?? .zero + let priceData = PriceData( + currencyId: currency.id, + priceId: "", + price: String(price), + fiatDayChange: calculatePercentageValue(base: Decimal(price), percent: fiatDayChangeDecimal), + coingeckoPriceId: nil + ) + return [priceData] + } + + private func calculatePercentageValue(base: Decimal, percent: Decimal) -> Decimal { + return base * percent / 100 + } + + nonisolated private func cache( + _ cache: [(ChainAsset, AccountInfo)], + accountId: AccountId? + ) throws { + guard let accountId else { + return + } + + let transform = try cache.map { + let storagePath = $0.0.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: $0.0.uniqueKey(accountId: accountId) + ) + return (localKey, $0.1) + } + let map = Dictionary(uniqueKeysWithValues: transform) + try repositoryWrapper.save(map: map) + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index 51e560e2fc..744417b76c 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -102,104 +102,154 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr self.accountInfoFetchingProvider = accountInfoFetchingProvider eventCenter.add(observer: self) - fetchInitialData() + Task { + fetchInitialData() + } + } + + private func addListener(_ listener: WeakWrapper) async { + listeners.append(listener) + } + + private func removeListener(_ listener: WalletBalanceSubscriptionListener) async { + listeners = listeners.filter { + if let target = $0.target as? WalletBalanceSubscriptionListener { + return target !== listener + } + return true + } + } + + private func saveAccountInfoAdapters(_ accountInfosAdapters: [String: AccountInfoSubscriptionAdapter]) async { + self.accountInfosAdapters = accountInfosAdapters + } + + private func saveWallets(_ wallets: [MetaAccountModel]) async { + self.wallets = wallets + } + + private func saveChainAssets(_ chainAssets: [ChainAsset]) async { + self.chainAssets = chainAssets + } + + private func saveAccountInfos(accountInfos: [ChainAssetKey: AccountInfo?]) async { + self.accountInfos = accountInfos } // MARK: - Public methods - func subscribeWalletBalance( + nonisolated func subscribeWalletBalance( wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - updateWalletsIfNeeded(with: wallet) - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) + + let weakListener = WeakWrapper(target: listener) + Task { + await addListener(weakListener) + } + + updateWalletsIfNeeded(with: wallet) + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } - func subscribeWalletsBalances( + nonisolated func subscribeWalletsBalances( listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: wallets, chainAssets: chainAssets) + + let weakListener = WeakWrapper(target: listener) + Task { + await addListener(weakListener) + } + if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } - func subscribeChainAssetBalance( + nonisolated func subscribeChainAssetBalance( wallet: MetaAccountModel, chainAsset: ChainAsset, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: [chainAsset]) + + let weakListener = WeakWrapper(target: listener) + Task { + await addListener(weakListener) + } + if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { + notify(listener: listener, result: .success(balances)) + } } } - func subscribeChainAssetsBalance( + nonisolated func subscribeChainAssetsBalance( chainAssets: [ChainAsset], wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + let weakListener = WeakWrapper(target: listener) + Task { + await addListener(weakListener) + } + + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } - func subscribeNetworkManagementBalance( + nonisolated func subscribeNetworkManagementBalance( wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - updateWalletsIfNeeded(with: wallet) - let selectedChainAssets = filterChainAssets( - with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), - chainAssets: chainAssets, - wallet: wallet, - search: nil - ) - - if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { - notify(listener: listener, result: .success(balances)) - } - } + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) - func unsubscribe(listener: WalletBalanceSubscriptionListener) { - listenersLock.exclusivelyWrite { [weak self] in - guard let strongSelf = self else { - return + let weakListener = WeakWrapper(target: listener) + Task { + await addListener(weakListener) } + updateWalletsIfNeeded(with: wallet) + let selectedChainAssets = filterChainAssets( + with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), + chainAssets: chainAssets, + wallet: wallet, + search: nil + ) - strongSelf.listeners = strongSelf.listeners.filter { - if let target = $0.target as? WalletBalanceSubscriptionListener { - return target !== listener - } - return true + if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { + notify(listener: listener, result: .success(balances)) } } } + nonisolated func unsubscribe(listener: WalletBalanceSubscriptionListener) { + Task { + await removeListener(listener) + } + } + // MARK: - Private methods + private func updateLocalBalances(wallets: [MetaAccountModel], chainAssets: [ChainAsset]) async throws { + let accountInfos = try await fetchAccountInfos(wallets: wallets, chainAssets: chainAssets) + self.accountInfos = self.accountInfos.merging(accountInfos, uniquingKeysWith: { _, new in + new + }) + } + private func buildBalance(for wallets: [MetaAccountModel], chainAssets: [ChainAsset]) -> WalletBalanceInfos? { let walletBalances = walletBalanceBuilder.buildBalance( for: accountInfos, @@ -245,20 +295,15 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr wallets: [MetaAccountModel], chainAssets: [ChainAsset] ) async throws -> [ChainAssetKey: AccountInfo?] { - let accountInfos = try await withThrowingTaskGroup(of: [ChainAssetKey: AccountInfo?].self) { group in - wallets.forEach { wallet in - group.addTask { - try await self.accountInfoFetchingProvider.fetchByUniqKey(for: chainAssets, wallet: wallet) - } - } - - var result = [ChainAssetKey: AccountInfo?]() - for try await accountInfos in group { - result.merge(accountInfos) { _, new in new } + let accountInfos = try await wallets.concurrentMap { wallet in + do { + return try await self.accountInfoFetchingProvider.fetchByUniqKey(for: chainAssets, wallet: wallet) + } catch { + return [:] } - return result } - return accountInfos + let result = Dictionary(accountInfos.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + return result } private func subscribeToAccountInfo( @@ -371,12 +416,19 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr // MARK: - EventVisitorProtocol extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), let wallet = wallets[safe: index] { if wallet.selectedCurrency != event.account.selectedCurrency { wallets[index] = event.account } + } + } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), + let wallet = wallets[safe: index] { + if wallet.networkManagmentFilter != event.account.networkManagmentFilter { wallets[index] = event.account buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) diff --git a/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift b/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift index dd7ef8c7d6..bbbf260387 100644 --- a/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift +++ b/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift @@ -100,7 +100,6 @@ class BaseEthereumService { _ = try await queryMaxPriorityFeePerGas() return true } catch { - print("error: ", error) return false } } diff --git a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift index c2732eed31..3a39b6cc40 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift @@ -3,8 +3,9 @@ import Foundation struct FeatureToggleConfig: Decodable { let pendulumCaseEnabled: Bool? let nftEnabled: Bool? + let dappEnabled: Bool? static var defaultConfig: FeatureToggleConfig { - FeatureToggleConfig(pendulumCaseEnabled: false, nftEnabled: true) + FeatureToggleConfig(pendulumCaseEnabled: false, nftEnabled: true, dappEnabled: true) } } diff --git a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift index a4fcd9940d..ef3db36f89 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift @@ -2,6 +2,7 @@ import Foundation import SSFNetwork import RobinHood import SSFUtils +import SoraKeystore enum FeatureToggleServiceError: Error { case urlBroken @@ -19,17 +20,23 @@ final class FeatureToggleProvider { private let networkOperationFactory: NetworkOperationFactoryProtocol private let operationQueue: OperationQueue - + private let settingsManager: SettingsManagerProtocol + private let eventCenter: EventCenterProtocol + private(set) var snapshot: FeatureToggleConfig? private(set) var pendingRequests: [PendingRequest] = [] init( networkOperationFactory: NetworkOperationFactoryProtocol, - operationQueue: OperationQueue + operationQueue: OperationQueue, + settingsManager: SettingsManagerProtocol, + eventCenter: EventCenterProtocol ) { self.networkOperationFactory = networkOperationFactory self.operationQueue = operationQueue - + self.settingsManager = settingsManager + self.eventCenter = eventCenter + do { try setup() } catch { @@ -58,6 +65,9 @@ final class FeatureToggleProvider { let request = PendingRequest(resultClosure: closure, queue: queue) if let snapshot = snapshot { + settingsManager.dappEnabled = snapshot.dappEnabled.or(FeatureToggleConfig.defaultConfig.dappEnabled ?? true) + eventCenter.notify(with: FeatureToggleConfigSyncComplete(config: snapshot)) + deliver(snapshot: snapshot, to: request) } else { pendingRequests.append(request) @@ -70,6 +80,9 @@ final class FeatureToggleProvider { if let snapshot = snapshot { self.snapshot = snapshot resolveRequests() + + settingsManager.dappEnabled = snapshot.dappEnabled.or(FeatureToggleConfig.defaultConfig.dappEnabled ?? true) + eventCenter.notify(with: FeatureToggleConfigSyncComplete(config: snapshot)) } case .failure: handleDefault() diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift new file mode 100644 index 0000000000..abce8f8a19 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift @@ -0,0 +1,33 @@ +import Foundation +import RobinHood + +struct LocalListToggle: Codable { + let key: String + let title: String + let description: String + var storageValue: Bool + + func toggle() -> Self { + LocalListToggle( + key: key, + title: title, + description: description, + storageValue: !storageValue + ) + } +} + +extension LocalListToggle { + static let chains = LocalListToggle( + key: "0", + title: "Chains list env", + description: "is chains_dev.json", + storageValue: true + ) + static let tonEnv = LocalListToggle( + key: "1", + title: "Ton environment", + description: "is testnet", + storageValue: false + ) +} diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift new file mode 100644 index 0000000000..1b6a8828b1 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift @@ -0,0 +1,96 @@ +import Foundation +import SoraKeystore +import SSFSingleValueCache +import RobinHood + +final class LocalToggleService: ApplicationServiceProtocol { + + static let shared = LocalToggleService() + + private lazy var storage = UserDefaults(suiteName: "Feature.Toggle.List") + private lazy var decoder = JSONDecoder() + private lazy var encoder = JSONEncoder() + + private init() {} + + lazy var list: [LocalListToggle] = { + guard let dict = storage?.dictionaryRepresentation() else { + return [] + } + let toggles: [LocalListToggle] = dict.compactMap({ (_, value) in + guard let data = value as? Data else { + return nil + } + return try? decoder.decode(LocalListToggle.self, from: data) + }) + return toggles + }() + + func setup() { + let dict = storage?.dictionaryRepresentation() + Self.toggles.forEach { toggle in + guard + dict?[toggle.key] == nil, + let data = try? encoder.encode(toggle) + else { + return + } + storage?.set(data, forKey: toggle.key) + } + storage?.synchronize() + } + + func throttle() {} + + private func getToggle(for key: String) -> LocalListToggle? { + guard + let data = storage?.value(forKey: key) as? Data, + let toggle = try? decoder.decode(LocalListToggle.self, from: data) + else { + return nil + } + return toggle + } + + func set(toggle: LocalListToggle) { + guard let data = try? encoder.encode(toggle) else { + return + } + storage?.setValue(data, forKey: toggle.key) + storage?.synchronize() + } + + // MARK: - Registry + + /// Default toggles + /// New Toggle should be register in Feature.Toggle.List user defaults + /// For shown in debug menu list + static let toggles: [LocalListToggle] = [ + LocalListToggle.chains, + LocalListToggle.tonEnv + ] + + /// storageValue => isDev. + /// Default value true + var chainsListToggle: LocalListToggle? { + get { + getToggle(for: "0") + } + set { + if let newValue { + set(toggle: newValue) + } + } + } + + /// storageValue => isTestnet. + /// Default value false + var tonEnvListToggle: LocalListToggle { + get { + getToggle(for: "1") ?? LocalListToggle.tonEnv + } + set { + set(toggle: newValue) + } + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectError.swift b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift new file mode 100644 index 0000000000..f180be3784 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift @@ -0,0 +1,6 @@ +import Foundation + +struct TonConnectError: Swift.Error, Decodable { + let statusCode: Int + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift new file mode 100644 index 0000000000..0a672de0ce --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift @@ -0,0 +1,4 @@ +struct TonConnectEvent: Decodable { + let from: String + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift new file mode 100644 index 0000000000..4049e70d82 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift @@ -0,0 +1,13 @@ +import Foundation + +struct TonConnectManifest: Codable, Equatable { + let url: URL + let name: String + let iconUrl: URL? + let termsOfUseUrl: URL? + let privacyPolicyUrl: URL? + + var host: String { + url.host ?? "" + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift new file mode 100644 index 0000000000..40f3f7e9f1 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift @@ -0,0 +1,17 @@ +import Foundation + +struct TonConnectParameters { + enum Version: String { + case v2 = "2" + } + + let version: Version + let clientId: String + let requestPayload: TonConnectRequestPayload + + init(version: Version, clientId: String, requestPayload: TonConnectRequestPayload) { + self.version = version + self.clientId = clientId + self.requestPayload = requestPayload + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift new file mode 100644 index 0000000000..66bf826053 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift @@ -0,0 +1,36 @@ +import Foundation + +struct TonConnectRequestPayload: Decodable { + enum Item: Decodable { + case tonAddress + case tonProof(payload: String) + case unknown + + enum CodingKeys: CodingKey { + case name + case payload + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let name = try container.decode(String.self, forKey: .name) + switch name { + case "ton_addr": + self = .tonAddress + case "ton_proof": + let payload = try container.decode(String.self, forKey: .payload) + self = .tonProof(payload: payload) + default: + self = .unknown + } + } + } + + let manifestUrl: URL + let items: [Item] + + init(manifestUrl: URL, items: [Item]) { + self.manifestUrl = manifestUrl + self.items = items + } +} diff --git a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift index 8349bfa525..010f3954fa 100644 --- a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift +++ b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift @@ -11,20 +11,7 @@ protocol OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform } -actor OnboardingService { - private let networkOperationFactory: NetworkOperationFactoryProtocol - private let operationQueue: OperationQueue - - init( - networkOperationFactory: NetworkOperationFactoryProtocol, - operationQueue: OperationQueue - ) { - self.networkOperationFactory = networkOperationFactory - self.operationQueue = operationQueue - } -} - -extension OnboardingService: OnboardingServiceProtocol { +actor OnboardingService: OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform { guard let onboardingConfigUrl = ApplicationConfig.shared.onboardingConfig else { throw OnboardingServiceError.urlBroken diff --git a/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift new file mode 100644 index 0000000000..394aed01ff --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift @@ -0,0 +1,133 @@ +import Foundation +import SoraKeystore +import SSFModels +import TonConnectAPI +import EventSource +import TonSwift + +protocol TonConnectEventsCenterDelegate: AnyObject { + func didReceive(event: TonConnectEventsCenter.Event) async +} + +actor TonConnectEventsCenter { + private enum Constant { + static let lastEventKey = "ton.connect.last.event.key" + } + enum Event { + case request( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) + } + + private weak var delegate: TonConnectEventsCenterDelegate? + private let chainRegistry: ChainRegistryProtocol + private let lastEventStore: SettingsManagerProtocol + private let logger: LoggerProtocol + + private var observableApps: [TonConnectApp] = [] + private var task: Task? + private lazy var jsonDecoder = JSONDecoder() + + init( + chainRegistry: ChainRegistryProtocol, + lastEventStore: SettingsManagerProtocol, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.lastEventStore = lastEventStore + self.logger = logger + } + + func set(delegate: TonConnectEventsCenterDelegate) { + self.delegate = delegate + } + + func stop() { + task?.cancel() + task = nil + } + + func start(with apps: [TonConnectApp]) throws { + observableApps = apps + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + task?.cancel() + + let task = Task { + let ids = apps + .map { $0.keyPair.publicKey.hexString } + .compactMap { $0 } + .joined(separator: ",") + let lastEventId = lastEventStore.value(of: String.self, for: Constant.lastEventKey) + + let errorParser = EventSourceDecodableErrorParser() + let stream = try await EventSource.eventSource({ + let response = try await apiClient.events( + query: .init( + client_id: [ids], + last_event_id: lastEventId + ) + ) + return try response.ok.body.text_event_hyphen_stream + }, errorParser: errorParser) + + for try await events in stream { + await handleEventSourceEvents(events) + } + + guard !Task.isCancelled else { return } + try start(with: apps) + } + self.task = task + } + + // MARK: - Private methods + + private func handleEventSourceEvents(_ events: [EventSource.Event]) async { + guard + let event = events.last(where: { $0.event == "message" }), + let data = event.data?.data(using: .utf8), + let tonConnectEvent = try? jsonDecoder.decode(TonConnectEvent.self, from: data) + else { + return + } + + lastEventStore.set(value: event.id, for: Constant.lastEventKey) + await handleEvent(tonConnectEvent) + } + + private func handleEvent(_ tonConnectEvent: TonConnectEvent) async { + guard let app = observableApps.first(where: { $0.clientId == tonConnectEvent.from }) else { + return + } + + do { + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + guard + let senderPublicKey = Data(tonHex: app.clientId), + let message = Data(base64Encoded: tonConnectEvent.message) + else { + return + } + let decryptedMessage = try sessionCrypto.decrypt( + message: message, + senderPublicKey: senderPublicKey + ) + let request = try jsonDecoder.decode( + TonConnect.AppRequest.self, + from: decryptedMessage + ) + + await delegate?.didReceive( + event: .request( + request: request, + walletId: app.walletId, + app: app + ) + ) + } catch { + logger.customError(error) + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift new file mode 100644 index 0000000000..c480e25122 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift @@ -0,0 +1,71 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +protocol TonConnectMessageBuilder { + /// WKWebViewConfiguration with the js injection script + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration + + /// Building the message to reconnect the dApp + /// Reconnecting if already connected and the dApp is in local store + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String + + /// Parsing the DappFunctionInvokeMessage from the body + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage + + /// Parsing the TonConnectRequestPayload from the message + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload + + /// Parsing the AppRequest to present it to the user for approval or rejection + /// Proposal for the user based on the JS Bridge connection type + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest + + /// Parsing the ConnectEventSuccess + /// ConnectEventSuccess can be send via JS Bridge and HTTP + /// Sends if the connection has been approved by the user + func getConnectEventSuccessResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess + + /// Encrypt the ConnectEventSuccess using TonConnectSessionCrypto + /// Used for sending the message via HTTP connection + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String + + /// Build the SendTransactionResponseError error message + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String + + /// Preparing the message for the Ton Connect API from boc + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String + + /// Encode to String any Event + func getString(from event: Encodable) throws -> String +} diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift new file mode 100644 index 0000000000..bf657b6ff5 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -0,0 +1,329 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { + + private enum Constants { + static let windowKey = "Fearless" + } + + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration { + let configuration = WKWebViewConfiguration() + let script = WKUserScript( + source: dAppJsInjection(), + injectionTime: WKUserScriptInjectionTime.atDocumentStart, + forMainFrameOnly: true + ) + userContentController.addUserScript(script) + configuration.userContentController = userContentController + return configuration + } + + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String { + guard + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let contract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing TON") + } + + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + let replyItem = TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: Int16(network), + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: contract.stateInit + ) + ) + let event = TonConnect.ConnectEventSuccess( + payload: .init( + items: [replyItem], + device: .init() + ) + ) + + let string = try getString(from: event) + return string + } + + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage { + guard + let string = body as? String, + let data = string.data(using: .utf8), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let type = json["type"] as? String, + let messageType = DappBridgeMessageType(rawValue: type), + messageType == .invokeRnFunc, + let name = json["name"] as? String, + let functionType = DappBridgeFunctionType(rawValue: name), + let invocationId = json["invocationId"] as? String, + let args = json["args"] as? [Any] + else { + throw ConvenienceError(error: "Decoding error") + } + + let message = DappFunctionInvokeMessage( + type: functionType, + invocationId: invocationId, + args: args + ) + + return message + } + + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest { + guard message.args.isNotEmpty else { + throw TonConnect.SendTransactionResponseError.ErrorCode.badRequest + } + let data = try JSONSerialization.data(withJSONObject: message.args[0]) + let request = try JSONDecoder().decode(TonConnect.AppRequest.self, from: data) + return request + } + + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload { + guard + message.args.count >= 2, + let connectPayload = message.args[1] as? [String: Any] + else { + throw ConvenienceError(error: "Invalidate message") + } + let data = try JSONSerialization.data(withJSONObject: connectPayload) + let payload = try JSONDecoder().decode(TonConnectRequestPayload.self, from: data) + return payload + } + + func getConnectEventSuccessResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess { + guard + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let walletStateInit = wallet.ecosystem.tonWalletContract()?.stateInit + else { + throw ConvenienceError(error: "Missing TON") + } + + let replyItems = try requestPayloadItems.compactMap { item in + switch item { + case .tonAddress: + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + return TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: Int16(network), + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: walletStateInit + ) + ) + case let .tonProof(payload): + guard let accountResponse = wallet.fetch(for: tonChainModel.accountRequest()) else { + throw ConvenienceError(error: "Missing account response") + } + let walletPrivateKey = try getSecretKey( + for: tonChainModel, + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return TonConnect.ConnectItemReply.tonProof(.success(.init( + address: address, + domain: manifest.host, + payload: payload, + privateKey: TonSwift.PrivateKey(data: walletPrivateKey) + ))) + case .unknown: + return nil + } + } + let successEvent = TonConnect.ConnectEventSuccess( + payload: .init( + items: replyItems, + device: .init() + ) + ) + + return successEvent + } + + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String { + let responseData = try JSONEncoder().encode(successResponse) + guard let receiverPublicKey = Data(tonHex: clientId) else { + throw TonConnectServiceError.incorrectClientId + } + let response = try sessionCrypto.encrypt( + message: responseData, + receiverPublicKey: receiverPublicKey + ) + let base64Response = response.base64EncodedString() + return base64Response + } + + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.error(.init( + id: id, + error: .init(code: errorCode, message: "") + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.success( + .init( + result: boc, + id: id + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + func getString(from event: Encodable) throws -> String { + let data = try JSONEncoder().encode(event) + guard let string = String(data: data, encoding: .utf8) else { + throw ConvenienceError(error: "Encoding error") + } + return string + } + + // MARK: - Private methods + + private func getSecretKey( + for chain: ChainModel, + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> Data { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) + + let keystore = Keychain() + let secretKey = try keystore.fetchKey(for: tag) + return secretKey + } + + private func dAppJsInjection() -> String { + let deviceInfo = TonConnect.DeviceInfo() + let info = Info( + isWalletBrowser: true, + deviceInfo: deviceInfo, + protocolVersion: 2 + ) + guard + let infoData = try? JSONEncoder().encode(info), + var infoString = String(data: infoData, encoding: .utf8) + else { + return "" + } + infoString = String(describing: infoString).replacingOccurrences(of: "\\", with: "") + return """ + (() => { + if (!window.\(Constants.windowKey)) { + window.rnPromises = {}; + window.rnEventListeners = []; + window.invokeRnFunc = (name, args, resolve, reject) => { + const invocationId = btoa(Math.random()).substring(0, 12); + const timeoutMs = null; + const timeoutId = timeoutMs ? setTimeout(() => reject(new Error('bridge timeout for function with name: '+name+'')), timeoutMs) : null; + window.rnPromises[invocationId] = { resolve, reject, timeoutId } + window.webkit.messageHandlers.dapp.postMessage(JSON.stringify({ + type: '\(DappBridgeMessageType.invokeRnFunc.rawValue)', + invocationId: invocationId, + name, + args, + })); + }; + + window.addEventListener('message', ({ data }) => { + try { + const message = data; + console.log('message bridge', JSON.stringify(message)); + if (message.type === '\(DappBridgeMessageType.functionResponse.rawValue)') { + const promise = window.rnPromises[message.invocationId]; + + if (!promise) { + return; + } + + if (promise.timeoutId) { + clearTimeout(promise.timeoutId); + } + + if (message.status === 'fulfilled') { + promise.resolve(JSON.parse(message.data)); + } else { + promise.reject(new Error(message.data)); + } + + delete window.rnPromises[message.invocationId]; + } + + if (message.type === '\(DappBridgeMessageType.event.rawValue)') { + window.rnEventListeners.forEach((listener) => listener(message.event)); + } + } catch { } + }); + } + + const listen = (cb) => { + window.rnEventListeners.push(cb); + return () => { + const index = window.rnEventListeners.indexOf(cb); + if (index > -1) { + window.rnEventListeners.splice(index, 1); + } + }; + }; + + window.\(Constants.windowKey) = { + tonconnect: Object.assign(\(infoString),{ send: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('send', args, resolve, reject))},connect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('connect', args, resolve, reject))},restoreConnection: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('restoreConnection', args, resolve, reject))},disconnect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('disconnect', args, resolve, reject))} },{ listen }), + } + })(); + """ + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectService.swift b/fearless/ApplicationLayer/Services/TonConnectService.swift new file mode 100644 index 0000000000..8b216340de --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectService.swift @@ -0,0 +1,72 @@ +import Foundation +import SSFModels + +/// Ton Connect has two different ways to establish a connection +/// 1. Ton JS Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#js-bridge +/// 2. HTTP Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge +protocol TonConnectService: ApplicationServiceProtocol { + + /// Adding listener for delegate: TonConnectServiceDelegate + func set( + listener: TonConnectServiceDelegate + ) async + + /// Load the Manifest and establish a connection via the Ton Connect service + func establishConnection( + with uri: String + ) async throws + + /// Loading Manifest + func fetchManifest( + with url: URL + ) async throws -> TonConnectManifest + + /// Confirm the connection via the Ton Connect service + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws + + /// Cancels the request from the Ton Connect service + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws + + /// Sending a message to the TON blockchain from the JS bridge event + func approveTonJsBridgeSend( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String + + /// Sending a message to the TON blockchain + /// and to the Ton Connect API + func confirmTonConnectRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws + + /// Getting the connected apps from the local repo + func getConnectedApp( + for wallet: MetaAccountModel + ) async throws -> [TonConnectApp] + + /// Saving a new connected app + /// External or Internal + func saveConnected( + app: TonConnectApp + ) async + + /// Deleting the connected app + /// External or Internal + func saveDisconnected( + app: TonConnectApp + ) async + + /// Disconnect from all apps and update event center + func disconnectAll() async +} diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift new file mode 100644 index 0000000000..e44b3c5274 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift @@ -0,0 +1,46 @@ +import Foundation +import SSFModels + +protocol TonConnectServiceDelegate: AnyObject { + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: WalletConnectProposalModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: WalletConnectSessionModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) + func didDisconnectedApp() +} + +extension TonConnectServiceDelegate { + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: WalletConnectProposalModuleOutput? + ) {} + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: WalletConnectSessionModuleOutput? + ) {} + func send( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) {} + func didDisconnectedApp() {} +} diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift new file mode 100644 index 0000000000..f069ed42b6 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -0,0 +1,364 @@ +import Foundation +import SSFTransferService +import SSFNetwork +import SSFModels +import TonConnectAPI +import RobinHood +import TonSwift + +enum TonConnectServiceError: Swift.Error { + case incorrectUrl + case incorrectClientId +} + +actor TonConnectServiceImpl: TonConnectService { + private let chainRegistry: ChainRegistryProtocol + private let tonSendService: TonSendService + private let networkWorker: SSFNetwork.NetworkWorker + private let messageBuilder: TonConnectMessageBuilder + private let appRepository: AsyncAnyRepository + private let eventCenter: TonConnectEventsCenter + private let logger: LoggerProtocol + + private var listeners: [WeakWrapper] = [] + + init( + chainRegistry: ChainRegistryProtocol, + tonService: TonSendService, + networkWorker: SSFNetwork.NetworkWorker, + messageBuilder: TonConnectMessageBuilder, + appRepository: AsyncAnyRepository, + eventCenter: TonConnectEventsCenter, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.tonSendService = tonService + self.networkWorker = networkWorker + self.messageBuilder = messageBuilder + self.appRepository = appRepository + self.eventCenter = eventCenter + self.logger = logger + } + + // MARK: - TonConnectService + + func set(listener: TonConnectServiceDelegate) async { + let weakListener = WeakWrapper(target: listener) + listeners.append(weakListener) + } + + func establishConnection(with uri: String) async throws { + let config = try getConfig(uri) + let manifest = try await fetchManifest(with: config.requestPayload.manifestUrl) + + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.suggestConnect( + manifest: manifest, + requestPayload: config, + invocationId: nil, + delegate: nil + ) + } + } + + func fetchManifest(with url: URL) async throws -> TonConnectManifest { + let request = SSFNetwork.RequestConfig( + baseURL: url, + method: .get, + endpoint: nil, + headers: nil, + body: nil + ) + let manifest: TonConnectManifest = try await networkWorker.performRequest(with: request) + return manifest + } + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws { + let connectSuccessResponseEvent: TonConnect.ConnectEventSuccess = try messageBuilder.getConnectEventSuccessResponse( + requestPayloadItems: params.requestPayload.items, + wallet: wallet, + manifest: manifest, + tonChainModel: tonChainModel + ) + + let sessionCrypto = try TonConnectSessionCrypto() + let encrypted = try messageBuilder.encryptSuccessResponse( + successResponse: connectSuccessResponseEvent, + clientId: params.clientId, + sessionCrypto: sessionCrypto + ) + + try await sendMessageConfirmConnectionRequest( + body: encrypted, + sessionCrypto: sessionCrypto, + parameters: params + ) + + await saveToStore( + wallet: wallet, + clientId: params.clientId, + appUrl: manifest.url, + sessionCrypto: sessionCrypto, + name: manifest.name, + iconUrl: manifest.iconUrl + ) + await updateEventCenter() + } + + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + let body = try messageBuilder.buildSendTransactionResponseError( + sessionCrypto: sessionCrypto, + errorCode: .userDeclinedTransaction, + id: appRequest.id, + clientId: app.clientId + ) + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func approveTonJsBridgeSend( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String { + guard + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + + try await tonSendService.sendTransaction(boc: boc) + return boc + } + + func confirmTonConnectRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws { + guard + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + try await tonSendService.sendTransaction(boc: boc) + + let body = try messageBuilder.buildSendTransactionResponseSuccess( + sessionCrypto: sessionCrypto, + boc: boc, + id: appRequest.id, + clientId: app.clientId + ) + + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] { + let apps = try await appRepository.fetchAll() + let walletApps = apps.filter { $0.walletId == wallet.metaId } + return walletApps + } + + func saveConnected(app: TonConnectApp) async { + await appRepository.save(models: [app]) + await updateEventCenter() + } + + func saveDisconnected(app: TonConnectApp) async { + await appRepository.remove(ids: [app.identifier]) + await updateEventCenter() + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() + } + } + + func disconnectAll() async { + guard let apps = try? await appRepository.fetchAll() else { + return + } + await appRepository.remove(ids: apps.map { $0.identifier }) + await updateEventCenter() + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() + } + } + + // MARK: - ApplicationServiceProtocol + + nonisolated func setup() { + Task { + await eventCenter.set(delegate: self) + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } + } + + nonisolated func throttle() { + Task { + await eventCenter.stop() + } + } + + // MARK: - Private methods + + private func updateEventCenter() async { + do { + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } catch { + logger.customError(error) + } + } + + private func saveToStore( + wallet: MetaAccountModel, + clientId: String, + appUrl: URL, + sessionCrypto: TonConnectSessionCrypto, + name: String, + iconUrl: URL? + ) async { + let app = TonConnectApp( + walletId: wallet.metaId, + clientId: clientId, + appUrl: appUrl, + name: name, + iconUrl: iconUrl, + publicKey: sessionCrypto.keyPair.publicKey.data, + privateKey: sessionCrypto.keyPair.privateKey.data, + connectionType: .http + ) + await appRepository.save(models: [app]) + } + + private func sendMessageConfirmConnectionRequest( + body: String, + sessionCrypto: TonConnectSessionCrypto, + parameters: TonConnectParameters + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let response = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: parameters.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + + _ = try response.ok.body.json + } + + private func getConfig(_ deeplink: String) throws -> TonConnectParameters { + guard + let url = URL(string: deeplink), + let components = URLComponents(url: url, resolvingAgainstBaseURL: true), + components.scheme == "tc", + let queryItems = components.queryItems, + let versionValue = queryItems.first(where: { $0.name == "v" })?.value, + let version = TonConnectParameters.Version(rawValue: versionValue), + let clientId = queryItems.first(where: { $0.name == "id" })?.value, + let requestPayloadValue = queryItems.first(where: { $0.name == "r" })?.value, + let requestPayloadData = requestPayloadValue.data(using: .utf8), + let requestPayload = try? JSONDecoder().decode(TonConnectRequestPayload.self, from: requestPayloadData) + else { + throw TonConnectServiceError.incorrectUrl + } + + return TonConnectParameters( + version: version, + clientId: clientId, + requestPayload: requestPayload + ) + } + + private func createBocFactory(for wallet: MetaAccountModel) throws -> BocFactory { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + let request = ChainAccountRequest( + chainId: "\(network)", + addressPrefix: 0, + ecosystem: .ton, + accountId: nil + ) + guard let accountResponse = wallet.fetch(for: request) else { + throw ConvenienceError(error: "Account response fetch error") + } + + let bocFactory = try ServiceAssembly.shared.tonBocFactory( + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return bocFactory + } +} + +// MARK: - TonConnectEventsCenterDelegate + +extension TonConnectServiceImpl: TonConnectEventsCenterDelegate { + func didReceive(event: TonConnectEventsCenter.Event) { + switch event { + case let .request(request, walletId, app): + switch request.method { + case .sendTransaction: + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.send( + request: request, + walletId: walletId, + app: app + ) + } + case .disconnect: + Task { await saveDisconnected(app: app) } + } + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift new file mode 100644 index 0000000000..3e764ee313 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift @@ -0,0 +1,62 @@ +import Foundation +import TweetNacl +import TonSwift + +struct TonConnectSessionCrypto { + private enum Constants { + static let nonceLength = 24 + } + + let sessionId: String + let keyPair: KeyPair + + init() throws { + let keyPair = try TweetNacl.NaclBox.keyPair() + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + init(privateKey: PrivateKey) throws { + let keyPair = try TweetNacl.NaclBox.keyPair(fromSecretKey: privateKey.data) + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + func encrypt(message: Data, receiverPublicKey: Data) throws -> Data { + let nonce = try createNonce() + let encrypted = try TweetNacl.NaclBox.box( + message: message, + nonce: nonce, + publicKey: receiverPublicKey, + secretKey: keyPair.privateKey.data + ) + return nonce + encrypted + } + + func decrypt(message: Data, senderPublicKey: Data) throws -> Data { + guard message.count >= Constants.nonceLength else { + return Data() + } + let nonce = message[0 ..< Constants.nonceLength] + let internalMessage = message[Constants.nonceLength ..< message.count] + let decrypted = try TweetNacl.NaclBox.open( + message: internalMessage, + nonce: nonce, + publicKey: senderPublicKey, + secretKey: keyPair.privateKey.data + ) + return decrypted + } +} + +private extension TonConnectSessionCrypto { + func createNonce() throws -> Data { + try TweetNacl.NaclUtil.secureRandomData(count: Constants.nonceLength) + } +} diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift index b3df8682ab..a014331681 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift @@ -27,7 +27,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let senderAddress = try EthereumAddress(rawAddress: senderAddress.hexToBytes()) @@ -56,7 +56,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer, baseFeePerGas: EthereumQuantity) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let call = EthereumCall(to: address) @@ -214,7 +214,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco // MARK: Transfers func submit(transfer: Transfer) async throws -> String { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: return try await transferNative(transfer: transfer) case .erc20, .bep20: diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift index edd13bd489..b1cecf22c0 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift @@ -4,6 +4,7 @@ import SSFExtrinsicKit import SSFSigner import SSFUtils import BigInt +import SSFCrypto final class SubstrateTransferService: TransferServiceProtocol { private let extrinsicService: SSFExtrinsicKit.ExtrinsicServiceProtocol @@ -25,7 +26,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId @@ -68,7 +69,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId diff --git a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift index 058e3bacbd..c9a79cbfe2 100644 --- a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift @@ -80,8 +80,8 @@ final class WalletConnectSignerImpl: WalletConnectSigner { let publicKeyData = try extractPublicKey(for: chain) let secretKeyData = try extractPrivateKey(for: chain) - return TransactionSignerAssembly.signer( - for: chain.chainBaseType, + return try TransactionSignerAssembly.signer( + for: chain.ecosystem, publicKeyData: publicKeyData, secretKeyData: secretKeyData, cryptoType: cryptoType @@ -93,9 +93,7 @@ final class WalletConnectSignerImpl: WalletConnectSigner { throw AutoNamespacesError.requiredAccountsNotSatisfied } let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift index c2cf93cb6d..2314a55851 100755 --- a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift @@ -48,7 +48,7 @@ public extension ABI.Element { return false } return true - case .bytes(length: _): + case .bytes: return true default: return true @@ -57,7 +57,7 @@ public extension ABI.Element { var isArray: Bool { switch self { - case .array(type: _, length: _): + case .array: return true default: return false @@ -108,9 +108,9 @@ public extension ABI.Element { var emptyValue: Any { switch self { - case .uint(bits: _): + case .uint: return BigUInt(0) - case .int(bits: _): + case .int: return BigUInt(0) case .address: return Address(address: "0x0000000000000000000000000000000000000000")! @@ -127,7 +127,7 @@ public extension ABI.Element { return Data() case .string: return "" - case .tuple(types: _): + case .tuple: return [Any]() } } diff --git a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift index 58b96a3778..a1470d5756 100755 --- a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift @@ -121,7 +121,7 @@ extension ABI.Input { func parse() throws -> ABI.Element.InOut { let name = self.name != nil ? self.name! : "" let parameterType = try ABITypeParser.parseTypeString(type) - if case .tuple(types: _) = parameterType { + if case .tuple = parameterType { let components = try self.components?.compactMap { (inp: ABI.Input) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type @@ -148,7 +148,7 @@ extension ABI.Output { let name = self.name != nil ? self.name! : "" let parameterType = try ABITypeParser.parseTypeString(type) switch parameterType { - case .tuple(types: _): + case .tuple: let components = try self.components?.compactMap { (inp: ABI.Output) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type @@ -158,7 +158,7 @@ extension ABI.Output { return nativeInput case let .array(type: subtype, length: length): switch subtype { - case .tuple(types: _): + case .tuple: let components = try self.components?.compactMap { (inp: ABI.Output) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type diff --git a/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift b/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift new file mode 100644 index 0000000000..dcd30cf7d5 --- /dev/null +++ b/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift @@ -0,0 +1,165 @@ +import Foundation +import SSFModels +import SSFNetwork +import RobinHood + +final class SoraSubqueryStakingRewardsFetcher { + private let chain: ChainModel + + init(chain: ChainModel) { + self.chain = chain + } + + func queryString( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) -> String { + var filter = """ + { + and: [], + method: {equalTo: "Rewarded"}, + address: {equalTo: "\(address)"}, + module: {equalTo: "staking"} + } + """ + + if let timestamp = startTimestamp { + let startTimestampValue = "\(timestamp)" + filter.append(", dataFrom: {greaterThanOrEqualTo: \(startTimestampValue)}") + } + if let timestamp = endTimestamp { + let endTimestampValue = "\(timestamp)" + filter.append(", dataTo: {lessThanOrEqualTo: \(endTimestampValue)}") + } + + return """ + { + historyElements( + after: null + orderBy: TIMESTAMP_DESC + filter: \(filter) + ) { + pageInfo { + startCursor + endCursor + } + nodes { + id + timestamp + address + data + method + module + blockHash + blockHeight + } + } + } + """ + } +} + +extension SoraSubqueryStakingRewardsFetcher: StakingRewardsFetcher { + func fetchAllRewards( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) async throws -> [RewardOrSlashData] { + guard let blockExplorer = chain.externalApi?.staking else { + throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) + } + + let queryString = queryString( + address: address, + startTimestamp: startTimestamp, + endTimestamp: endTimestamp + ) + + let request = try StakingRewardsRequest( + baseURL: blockExplorer.url, + query: queryString + ) + let worker = NetworkWorkerImpl() + let response: GraphQLResponse = try await worker.performRequest(with: request) + + switch response { + case let .data(data): + return data.data + case let .errors(error): + throw error + } + } +} + +extension SoraSubqueryStakingRewardsFetcher: RewardOperationFactoryProtocol { + func createLastRoundOperation() -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createAprOperation( + for _: @escaping () throws -> [AccountId], + dependingOn _: BaseOperation + ) -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createDelegatorRewardsOperation( + address _: String, + startTimestamp _: Int64?, + endTimestamp _: Int64? + ) -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createHistoryOperation( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) -> BaseOperation { + let requestFactory = BlockNetworkRequestFactory { [weak self] in + guard let strongSelf = self else { + throw CommonError.internal + } + guard let blockExplorer = strongSelf.chain.externalApi?.staking else { + throw StakingRewardsFetcherError.missingBlockExplorer(chain: strongSelf.chain.name) + } + + let queryString = strongSelf.queryString( + address: address, + startTimestamp: startTimestamp, + endTimestamp: endTimestamp + ) + + var request = URLRequest(url: blockExplorer.url) + + let info = JSON.dictionaryValue(["query": JSON.stringValue(queryString)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + + request.httpMethod = HttpMethod.post.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory { data in + let response = try JSONDecoder().decode( + GraphQLResponse.self, + from: data + ) + + switch response { + case let .errors(error): + throw error + case let .data(response): + return response + } + } + + let operation = NetworkOperation(requestFactory: requestFactory, resultFactory: resultFactory) + + return operation + } +} diff --git a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift index 321792be90..bb441b917d 100644 --- a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift +++ b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift @@ -17,7 +17,9 @@ final class StakingRewardsFetcherAssembly { return SoraStakingRewardsFetcher(chain: chain) case .reef: return ReefStakingRewardsFetcher(chain: chain) - case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .soraSubquery: + return SoraSubqueryStakingRewardsFetcher(chain: chain) + case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) } } diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift new file mode 100644 index 0000000000..3deb853f76 --- /dev/null +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -0,0 +1,91 @@ +import Foundation +import RobinHood +import SSFModels + +protocol TonJettonInjector { + func inject(jettonItems: [TonJettonBalance]) async + func inject(tonPriceData: [PriceData]) async +} + +actor TonJettonInjectorImpl: TonJettonInjector { + private let chainModelRepository: AsyncAnyRepository + private let logger: LoggerProtocol + private let eventCenter: EventCenterProtocol + + init( + chainModelRepository: AsyncAnyRepository, + eventCenter: EventCenterProtocol, + logger: LoggerProtocol + ) { + self.chainModelRepository = chainModelRepository + self.eventCenter = eventCenter + self.logger = logger + } + + func inject(jettonItems: [TonJettonBalance]) async { + do { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + var assetModels = map(jettonItems: jettonItems) + if let tonAsset = tonChain.utilityAssets().first { + assetModels.insert(tonAsset) + } + let updatedChainModel = tonChain.replacingAssets(Array(assetModels)) + await chainModelRepository.save(models: [updatedChainModel]) + let priceUpdatedEvent = PricesUpdated() + eventCenter.notify(with: priceUpdatedEvent) + + logger.info("The Open Network has been updated with new assets: \(assetModels.map { $0.name })") + } catch { + logger.customError(error) + } + } + + func inject(tonPriceData: [PriceData]) async { + do { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + guard let tonAsset = tonChain.utilityChainAssets().first else { + return + } + let updatedTonAsset = tonAsset.asset.replacingPrice(tonPriceData) + var jettons = Array(tonChain.assets.filter { !$0.isUtility }) + jettons.append(updatedTonAsset) + let updatedChain = tonChain.replacingAssets(jettons) + await chainModelRepository.save(models: [updatedChain]) + let priceUpdatedEvent = PricesUpdated() + eventCenter.notify(with: priceUpdatedEvent) + } catch { + logger.customError(error) + } + } + + private func map(jettonItems: [TonJettonBalance]) -> Set { + let mapped = jettonItems.map { balanceInfo in + AssetModel( + id: balanceInfo.item.walletAddress.toRaw(), + name: balanceInfo.item.jettonInfo.name, + symbol: balanceInfo.item.jettonInfo.symbol ?? balanceInfo.item.jettonInfo.name, + precision: UInt16(balanceInfo.item.jettonInfo.fractionDigits), + icon: balanceInfo.item.jettonInfo.imageURL, + currencyId: balanceInfo.item.jettonInfo.address.toRaw(), + existentialDeposit: nil, + color: nil, + isUtility: false, + isNative: false, + staking: nil, + purchaseProviders: nil, + assetType: .ton(tonType: .jetton), + priceProvider: nil, + coingeckoPriceId: nil, + priceData: balanceInfo.priceData + ) + } + + return Set(mapped) + } +} diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json new file mode 100644 index 0000000000..9804412c47 --- /dev/null +++ b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "crowdloansProfileIcon.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png new file mode 100644 index 0000000000..ad4eaed534 Binary files /dev/null and b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png differ diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json new file mode 100644 index 0000000000..2d3c27c783 --- /dev/null +++ b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "featuredBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf b/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf new file mode 100644 index 0000000000..bff3d3e407 Binary files /dev/null and b/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf differ diff --git a/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json b/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json new file mode 100644 index 0000000000..8938d9143b --- /dev/null +++ b/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "iconBrowser.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf b/fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf new file mode 100644 index 0000000000..58c576e735 Binary files /dev/null and b/fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf differ diff --git a/fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf b/fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf new file mode 100644 index 0000000000..6eb0834754 Binary files /dev/null and b/fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf differ diff --git a/fearless/Assets.xcassets/iconCoinbase.imageset/Contents.json b/fearless/Assets.xcassets/iconCoinbase.imageset/Contents.json new file mode 100644 index 0000000000..9632a563a2 --- /dev/null +++ b/fearless/Assets.xcassets/iconCoinbase.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Coinbase SVG Icon.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json b/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json index 2cb9c97d37..9f86f7a775 100644 --- a/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json +++ b/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "iconWalletConnect.pdf", + "filename" : "wallet_connect.pdf", "idiom" : "universal" } ], diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf b/fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf deleted file mode 100644 index 1de521c8bf..0000000000 Binary files a/fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf and /dev/null differ diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf b/fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf new file mode 100644 index 0000000000..bc7cc50b95 Binary files /dev/null and b/fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf differ diff --git a/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf b/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf index efffa9267b..6e3eebf768 100644 Binary files a/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf and b/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf differ diff --git a/fearless/Assets.xcassets/regularBanner.imageset/Contents.json b/fearless/Assets.xcassets/regularBanner.imageset/Contents.json new file mode 100644 index 0000000000..3986dd38d5 --- /dev/null +++ b/fearless/Assets.xcassets/regularBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "regularBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf b/fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf new file mode 100644 index 0000000000..ea01f0904a Binary files /dev/null and b/fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf differ diff --git a/fearless/Assets.xcassets/tonBanner.imageset/Contents.json b/fearless/Assets.xcassets/tonBanner.imageset/Contents.json new file mode 100644 index 0000000000..c2136bb8bc --- /dev/null +++ b/fearless/Assets.xcassets/tonBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tonBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/tonBanner.imageset/tonBanner.pdf b/fearless/Assets.xcassets/tonBanner.imageset/tonBanner.pdf new file mode 100644 index 0000000000..d7cbbed79a Binary files /dev/null and b/fearless/Assets.xcassets/tonBanner.imageset/tonBanner.pdf differ diff --git a/fearless/Assets.xcassets/tonIcon.imageset/Contents.json b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json new file mode 100644 index 0000000000..ecacd4f719 --- /dev/null +++ b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tonIcon.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf b/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf new file mode 100644 index 0000000000..1ed3ea59a7 Binary files /dev/null and b/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf differ diff --git a/fearless/CIKeys.stencil b/fearless/CIKeys.stencil index 22cc2ed7b2..d517db0348 100644 --- a/fearless/CIKeys.stencil +++ b/fearless/CIKeys.stencil @@ -65,3 +65,7 @@ enum ThirdPartyServicesApiKeys { enum DwellirNodeApiKey { static var dwellirApiKey: String = "{{ argument.dwellirApiKey }}" } + +enum TonNodeApiKey { + static var tonApiKey: String = "{{ argument.tonApiKey }}" +} diff --git a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift index 400e8dff64..bf548a9901 100644 --- a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift +++ b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift @@ -1,5 +1,6 @@ import RobinHood import SSFModels +import SSFCrypto enum AddressValidationResult { case valid(String) @@ -57,7 +58,7 @@ final class AddressChainDefiner { guard strongSelf.chainIsEnabled(chain: chain) else { return false } - return strongSelf.validate(address: address, for: chain).isValidOrSame + return strongSelf.validate(address: address, for: chain).isValidOrSame && strongSelf.validateEcosystem(for: chain) } continuation.resume(returning: posssibleChains) } @@ -68,12 +69,21 @@ final class AddressChainDefiner { guard let address = address, address.isNotEmpty, let accoundId = (try? AddressFactory.accountId(from: address, chain: chain)) else { return .invalid(address) } - if accoundId == wallet.substrateAccountId || accoundId == wallet.ethereumAddress { + if accoundId == wallet.ecosystem.substrateAccountId || accoundId == wallet.ecosystem.ethereumAddress { return .sameAddress(address) } return .valid(address) } + private func validateEcosystem(for chain: ChainModel) -> Bool { + switch wallet.ecosystem { + case .regular: + return !chain.ecosystem.isTon + case .ton: + return chain.ecosystem.isTon + } + } + private func chainIsEnabled(chain: ChainModel) -> Bool { let chainAssets = chain.chainAssets let enabledAssetIds: [String] = wallet.assetsVisibility diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index b5f885bb8c..de80b0e438 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -33,6 +33,7 @@ protocol ApplicationConfigProtocol { var appVersionURL: URL? { get } var scamListCsvURL: URL? { get } var polkaswapSettingsURL: URL? { get } + var dappSourceUrl: URL { get } } final class ApplicationConfig { @@ -143,17 +144,21 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { // MARK: - GitHub var chainsSourceUrl: URL { - #if F_DEV - GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) - #else - GitHubUrl.url(suffix: "chains/v11/chains.json") - #endif +#if F_DEV + return GitHubUrl.url(suffix: "chains/v13/chains_dev.json", branch: .developFree) +#else + return GitHubUrl.url(suffix: "chains/v13/chains.json") +#endif } var chainTypesSourceUrl: URL { GitHubUrl.url(suffix: "chains/all_chains_types.json") } + var dappSourceUrl: URL { + GitHubUrl.url(suffix: "appConfigs/dapps.json", branch: .developFree) + } + // MARK: - xcm var destinationFeeSourceUrl: URL { diff --git a/fearless/Common/Crypto/KeystoreExportWrapper.swift b/fearless/Common/Crypto/KeystoreExportWrapper.swift index 43159954c0..a1dd4ae1d1 100644 --- a/fearless/Common/Crypto/KeystoreExportWrapper.swift +++ b/fearless/Common/Crypto/KeystoreExportWrapper.swift @@ -40,9 +40,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { accountId: AccountId?, genesisHash: String? ) throws -> Data { - let secretKeyTag = chainAccount.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let secretKeyTag = KeystoreTagV2.secretKeyTag(for: chainAccount.ecosystem, metaId: metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: secretKeyTag) @@ -66,7 +64,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { let definition = try builder.build( from: keystoreData, password: password, - isEthereum: chainAccount.isEthereumBased + isEthereum: chainAccount.ecosystem.isEthereum || chainAccount.ecosystem.isEthereumBased ) return try jsonEncoder.encode(definition) diff --git a/fearless/Common/Crypto/SigningWrapper.swift b/fearless/Common/Crypto/SigningWrapper.swift index bbb7f6b374..ca6ba6764e 100644 --- a/fearless/Common/Crypto/SigningWrapper.swift +++ b/fearless/Common/Crypto/SigningWrapper.swift @@ -16,7 +16,7 @@ final class SigningWrapper: SigningWrapperProtocol { self.keystore = keystore self.metaId = metaId accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - isEthereumBased = accountResponse.isEthereumBased + isEthereumBased = accountResponse.ecosystem.isEthereumBased || accountResponse.ecosystem.isEthereum cryptoType = accountResponse.cryptoType publicKeyData = accountResponse.publicKey } diff --git a/fearless/Common/DataProvider/ExistentialDeposit.swift b/fearless/Common/DataProvider/ExistentialDeposit.swift index a6a345bf05..f25b6d784d 100644 --- a/fearless/Common/DataProvider/ExistentialDeposit.swift +++ b/fearless/Common/DataProvider/ExistentialDeposit.swift @@ -9,6 +9,10 @@ protocol ExistentialDepositServiceProtocol { chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) + + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt } final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepositServiceProtocol { @@ -16,18 +20,15 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos private let operationManager: OperationManagerProtocol private let chainRegistry: ChainRegistryProtocol - private let chainId: ChainModel.Id // MARK: - Constructor init( operationManager: OperationManagerProtocol, - chainRegistry: ChainRegistryProtocol, - chainId: ChainModel.Id + chainRegistry: ChainRegistryProtocol ) { self.operationManager = operationManager self.chainRegistry = chainRegistry - self.chainId = chainId } // MARK: - Public methods @@ -36,12 +37,12 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .equilibrium: fetchConstant( for: .equilibriumExistentialDeposit, @@ -61,13 +62,28 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos } } + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt { + try await withUnsafeThrowingContinuation { continuation in + fetchExistentialDeposit(chainAsset: chainAsset) { result in + switch result { + case let .success(success): + continuation.resume(returning: success) + case let .failure(failure): + continuation.resume(throwing: failure) + } + } + } + } + // MARK: - Private methods private func fetchSubAssetsExistentialDeposit( chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } @@ -106,11 +122,11 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } diff --git a/fearless/Common/DataProvider/Sources/DappDataSource.swift b/fearless/Common/DataProvider/Sources/DappDataSource.swift new file mode 100644 index 0000000000..562843db81 --- /dev/null +++ b/fearless/Common/DataProvider/Sources/DappDataSource.swift @@ -0,0 +1,85 @@ +import Foundation +import RobinHood + +struct DappCategory: Codable, Equatable { + let type: DappCategoryType + let apps: [TonDapp] +} + +enum DappCategoryType: String, Codable, Equatable { + case top + case connected + case featured + case utilities + case nft + case defi + case explorers +} + +final class DappDataSource: SingleValueProviderSourceProtocol { + static let fetchLocalData = false + typealias Model = [DappCategory] + + func fetchOperation() -> CompoundOperationWrapper<[DappCategory]?> { + if Self.fetchLocalData { + return localOperation() + } else { + return remoteOperation() + } + } + + // MARK: - Private methods + + private func remoteOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let requestFactory = BlockNetworkRequestFactory { + var request = URLRequest(url: ApplicationConfig.shared.dappSourceUrl) + request.httpMethod = HttpMethod.get.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory<[DappCategory]?> { data, response, error in + do { + if let data = data { + let response = try JSONDecoder().decode( + [DappCategory].self, + from: data + ) + + return .success(response) + } else if let error = error { + return .failure(error) + } else { + return .failure(ConvenienceError(error: "wrong data")) + } + } catch { + return .failure(error) + } + } + + let operation = NetworkOperation( + requestFactory: requestFactory, + resultFactory: resultFactory + ) + + return CompoundOperationWrapper( + targetOperation: operation, + dependencies: operation.dependencies + ) + } + + private func localOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let target = ClosureOperation { + guard let chainsUrl = Bundle.main.url(forResource: "dapps", withExtension: "json") else { + throw ChainSyncServiceError.missingLocalFile + } + + let data = try Data(contentsOf: chainsUrl) + let dapps = try JSONDecoder().decode([DappCategory]?.self, from: data) + return dapps + } + return CompoundOperationWrapper( + targetOperation: target, + dependencies: [] + ) + } +} diff --git a/fearless/Common/DataProvider/Sources/PriceDataSource.swift b/fearless/Common/DataProvider/Sources/PriceDataSource.swift index b0611e341d..6661707a45 100644 --- a/fearless/Common/DataProvider/Sources/PriceDataSource.swift +++ b/fearless/Common/DataProvider/Sources/PriceDataSource.swift @@ -205,7 +205,7 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { } extension PriceDataSource: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { currencies = (currencies.or([]) + [event.account.selectedCurrency]).uniq(predicate: { $0.id }) } } diff --git a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift index a0e3ceb27e..ee4ff69f12 100644 --- a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift @@ -43,7 +43,7 @@ final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { private var chainAssets: [ChainAsset] = [] private let chainsRepository: AsyncCoreDataRepositoryDefault - init() { + private init() { chainsRepository = ChainRepositoryFactory().createAsyncRepository() setup() } diff --git a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift index 637222bdff..aeef180b13 100644 --- a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift @@ -77,45 +77,45 @@ extension WalletLocalStorageSubscriber { return } - if chainAsset.chain.isEthereum { - handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } - - if chainAsset.chain.isSora, chainAsset.isUtility { - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + if chainAsset.chain.isSora, chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + return + } - switch chainAsset.chainAssetType { - case .normal: - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - case .equilibrium: - handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) - case .assets: - handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) - case .soraAsset: - if chainAsset.isUtility { + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - } else { + + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + case .equilibrium: + handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) + case .assets: + handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) + case .soraAsset: + if chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } else { + handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) } } diff --git a/fearless/Common/EventCenter/EventVisitor.swift b/fearless/Common/EventCenter/EventVisitor.swift index b105f90fe7..d11935fd11 100644 --- a/fearless/Common/EventCenter/EventVisitor.swift +++ b/fearless/Common/EventCenter/EventVisitor.swift @@ -29,6 +29,9 @@ protocol EventVisitorProtocol: AnyObject { func processLogout() func processAccountScoreSettingsChanged() func processPricesUpdated() + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) + func processTonConnectEstablished() + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) } extension EventVisitorProtocol { @@ -60,4 +63,7 @@ extension EventVisitorProtocol { func processLogout() {} func processAccountScoreSettingsChanged() {} func processPricesUpdated() {} + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) {} + func processTonConnectEstablished() {} + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) {} } diff --git a/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift b/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift new file mode 100644 index 0000000000..b9c41447eb --- /dev/null +++ b/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift @@ -0,0 +1,10 @@ +import Foundation +import SSFModels + +struct FeatureToggleConfigSyncComplete: EventProtocol { + let config: FeatureToggleConfig + + func accept(visitor: EventVisitorProtocol) { + visitor.processFeatureToggleConfigSyncComplete(event: self) + } +} diff --git a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift index 49c0272646..90b2705aa5 100644 --- a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift +++ b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct MetaAccountModelChangedEvent: EventProtocol { let account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift index f1e72e1c1e..583ec6fa8d 100644 --- a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift +++ b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct SelectedAccountChanged: EventProtocol { var account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift b/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift new file mode 100644 index 0000000000..e30b07a4f4 --- /dev/null +++ b/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift @@ -0,0 +1,10 @@ +import Foundation +import SSFModels + +struct SelectedCurrencyChangedEvent: EventProtocol { + let account: MetaAccountModel + + func accept(visitor: EventVisitorProtocol) { + visitor.processSelectedCurrencyChanged(event: self) + } +} diff --git a/fearless/Common/EventCenter/Events/TonConnectEstablished.swift b/fearless/Common/EventCenter/Events/TonConnectEstablished.swift new file mode 100644 index 0000000000..c095a1884d --- /dev/null +++ b/fearless/Common/EventCenter/Events/TonConnectEstablished.swift @@ -0,0 +1,7 @@ +import Foundation + +struct TonConnectEstablished: EventProtocol { + func accept(visitor: any EventVisitorProtocol) { + visitor.processTonConnectEstablished() + } +} diff --git a/fearless/Common/EventCenter/Events/WalletNameChanged.swift b/fearless/Common/EventCenter/Events/WalletNameChanged.swift index 1f72ac651d..4c9cdef190 100644 --- a/fearless/Common/EventCenter/Events/WalletNameChanged.swift +++ b/fearless/Common/EventCenter/Events/WalletNameChanged.swift @@ -1,3 +1,5 @@ +import SSFModels + struct WalletNameChanged: EventProtocol { let wallet: MetaAccountModel diff --git a/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift b/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift index 0cbdc18724..2ebf125b87 100644 --- a/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift +++ b/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import TonAPI struct ErrorContent { let title: String @@ -30,6 +31,10 @@ extension ErrorPresentable where Self: SheetAlertPresentable { return ErrorContent(title: title, message: message) } + + if let stringConvertibleError = error as? CustomStringConvertible { + return ErrorContent(title: "", message: stringConvertibleError.description) + } return nil }() diff --git a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift index 1a94b0e4e1..76dc9b1f94 100644 --- a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift +++ b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift @@ -96,4 +96,8 @@ extension NSPredicate { static func enabledCHain() -> NSPredicate { NSPredicate(format: "%K == false", #keyPath(CDChain.disabled)) } + + static func regularEcosystem() -> NSPredicate { + NSPredicate(format: "%K == nil", #keyPath(CDMetaAccount.tonAddress)) + } } diff --git a/fearless/Common/Extension/Foundation/String+Helpers.swift b/fearless/Common/Extension/Foundation/String+Helpers.swift index 7698c72f23..7e62793882 100644 --- a/fearless/Common/Extension/Foundation/String+Helpers.swift +++ b/fearless/Common/Extension/Foundation/String+Helpers.swift @@ -26,7 +26,7 @@ extension String { let size = self.size(withAttributes: fontAttributes) return size } - + func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat { let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude) let boundingBox = self.boundingRect( @@ -35,7 +35,7 @@ extension String { attributes: [NSAttributedString.Key.font: font], context: nil ) - + return ceil(boundingBox.height) } } diff --git a/fearless/Common/Extension/MetaAccountModel.swift b/fearless/Common/Extension/MetaAccountModel.swift new file mode 100644 index 0000000000..6a4542995c --- /dev/null +++ b/fearless/Common/Extension/MetaAccountModel.swift @@ -0,0 +1,14 @@ +import Foundation +import SSFModels +import UIKit + +extension MetaAccountModel { + func icon() -> UIImage { + switch ecosystem { + case .regular: + return R.image.iconBirdGreen()! + case .ton: + return R.image.tonIcon()! + } + } +} diff --git a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift index 051907a10f..c9cfd1d228 100644 --- a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift +++ b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift @@ -3,7 +3,7 @@ import Foundation extension AccountImportSource { func titleForLocale(_ locale: Locale) -> String { switch self { - case .mnemonic: + case .mnemonic, .tonMnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .seed: diff --git a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift index fbc6bcb22d..de02b16e5b 100644 --- a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift +++ b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift @@ -1,29 +1,35 @@ import Foundation +import SSFModels extension ExportOption { - func titleForLocale(_ locale: Locale, ethereumBased: Bool?) -> String { + func titleForLocale(_ locale: Locale, ecosystem: Ecosystem?) -> String { switch self { case .mnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .keystore: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRecoveryJson(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRecoveryJson(preferredLanguages: locale.rLanguages) } - return ethereumBased - ? R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) - : R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) case .seed: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRawSeed(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRawSeed(preferredLanguages: locale.rLanguages) } - - return ethereumBased - ? R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) - : R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) } } } diff --git a/fearless/Common/Extension/SettingsExtension.swift b/fearless/Common/Extension/SettingsExtension.swift index 9d9b578144..cb64fa409b 100644 --- a/fearless/Common/Extension/SettingsExtension.swift +++ b/fearless/Common/Extension/SettingsExtension.swift @@ -15,6 +15,8 @@ enum SettingsKey: String { case selectedCurrency case shouldPlayAssetManagementAnimateKey case accountScoreEnabled + case shouldShowAddWalletBanner + case dappEnabled } extension SettingsManagerProtocol { @@ -92,4 +94,24 @@ extension SettingsManagerProtocol { } } } + + var shouldShowAddWalletBanner: Bool { + get { + bool(for: SettingsKey.shouldShowAddWalletBanner.rawValue) ?? true + } + + set { + set(value: newValue, for: SettingsKey.shouldShowAddWalletBanner.rawValue) + } + } + + var dappEnabled: Bool { + get { + bool(for: SettingsKey.dappEnabled.rawValue) ?? false + } + + set { + set(value: newValue, for: SettingsKey.dappEnabled.rawValue) + } + } } diff --git a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift new file mode 100644 index 0000000000..8d7f2581ed --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift @@ -0,0 +1,32 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonConnectedApp: CoreDataCodable { + public func populate(from decoder: any Decoder, using _: NSManagedObjectContext) throws { + let app = try TonConnectApp(from: decoder) + identifier = app.identifier + + walletId = app.walletId + clientId = app.clientId + appUrl = app.appUrl + name = app.name + iconUrl = app.iconUrl + publicKey = app.publicKey + privateKey = app.privateKey + connectionType = app.connectionType.rawValue + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: TonConnectApp.CodingKeys.self) + + try container.encode(walletId, forKey: .walletId) + try container.encode(clientId, forKey: .clientId) + try container.encode(appUrl, forKey: .appUrl) + try container.encode(name, forKey: .name) + try container.encode(iconUrl, forKey: .iconUrl) + try container.encode(publicKey, forKey: .publicKey) + try container.encode(privateKey, forKey: .privateKey) + try container.encode(connectionType, forKey: .connectionType) + } +} diff --git a/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift new file mode 100644 index 0000000000..be9fb1e092 --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift @@ -0,0 +1,30 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonDapp: CoreDataCodable { + public func populate(from decoder: Decoder, using _: NSManagedObjectContext) throws { + let container = try decoder.container(keyedBy: TonDapp.CodingKeys.self) + + identifier = try container.decode(String.self, forKey: .identifier) + chains = try container.decode([String].self, forKey: .chains) as? NSArray + name = try container.decode(String.self, forKey: .name) + appDescription = try container.decode(String?.self, forKey: .description) + icon = try container.decode(URL?.self, forKey: .icon) + poster = try container.decode(URL?.self, forKey: .background) + url = try container.decode(URL.self, forKey: .url) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: TonDapp.CodingKeys.self) + + let chains = chains as? [String] + try container.encode(chains, forKey: .chains) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(appDescription, forKey: .description) + try container.encodeIfPresent(icon, forKey: .icon) + try container.encodeIfPresent(poster, forKey: .background) + try container.encode(url, forKey: .url) + try container.encode(identifier, forKey: .identifier) + } +} diff --git a/fearless/Common/Extension/Task.swift b/fearless/Common/Extension/Task.swift new file mode 100644 index 0000000000..20e61baa0c --- /dev/null +++ b/fearless/Common/Extension/Task.swift @@ -0,0 +1,17 @@ +import Foundation + +extension Task where Failure == Never, Success == Void { + init( + priority: TaskPriority? = nil, + operation: @escaping () async throws -> Void, + catch: @escaping (Error) -> Void + ) { + self.init(priority: priority) { + do { + _ = try await operation() + } catch { + `catch`(error) + } + } + } +} diff --git a/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift b/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift index 70bba9117d..543bf6ea5d 100644 --- a/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift +++ b/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift @@ -33,8 +33,9 @@ extension UIAlertController { alertController.addAction(copy) + let type: ChainModel.SubscanType = chain.ecosystem == .ton ? .tonAccount : .address chain.externalApi?.explorers?.forEach { explorer in - guard let url = explorer.explorerUrl(for: address, type: .address) else { + guard let url = explorer.explorerUrl(for: address, type: type) else { return } let title = explorer.type.actionTitle().value(for: locale) diff --git a/fearless/Common/Extension/UIKit/UITableView.swift b/fearless/Common/Extension/UIKit/UITableView.swift index faa676c486..e2416811bd 100644 --- a/fearless/Common/Extension/UIKit/UITableView.swift +++ b/fearless/Common/Extension/UIKit/UITableView.swift @@ -4,13 +4,16 @@ import UIKit extension UITableView { func setAndLayoutTableHeaderView(header: UIView) { tableHeaderView = header - tableHeaderView?.translatesAutoresizingMaskIntoConstraints = false - tableHeaderView?.snp.remakeConstraints { make in - make.width.equalTo(self.frame.width) - } + header.translatesAutoresizingMaskIntoConstraints = false + header.setNeedsLayout() header.layoutIfNeeded() header.frame.size = header.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) tableHeaderView = header + + header.snp.remakeConstraints { make in + make.width.equalTo(self.frame.width-32) + make.leading.equalToSuperview().inset(16) + } } } diff --git a/fearless/Common/Extension/UIKit/UIView.swift b/fearless/Common/Extension/UIKit/UIView.swift index 50aab54aeb..b6716165b5 100644 --- a/fearless/Common/Extension/UIKit/UIView.swift +++ b/fearless/Common/Extension/UIKit/UIView.swift @@ -17,3 +17,48 @@ extension UIView { layer.cornerRadius = frame.size.height / 2 } } + +extension UIView { + + // In order to create computed properties for extensions, we need a key to + // store and access the stored property + fileprivate struct AssociatedObjectKeys { + static var tapGestureRecognizer = "MediaViewerAssociatedObjectKey_mediaViewer" + } + + fileprivate typealias Action = (() -> Void)? + + // Set our computed property type to a closure + fileprivate var tapGestureRecognizerAction: Action? { + set { + if let newValue = newValue { + // Computed properties get stored as associated objects + objc_setAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + } + } + get { + let tapGestureRecognizerActionInstance = objc_getAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer) as? Action + return tapGestureRecognizerActionInstance + } + } + + // This is the meat of the sauce, here we create the tap gesture recognizer and + // store the closure the user passed to us in the associated object we declared above + public func addTapGestureRecognizer(action: (() -> Void)?) { + self.isUserInteractionEnabled = true + self.tapGestureRecognizerAction = action + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture)) + self.addGestureRecognizer(tapGestureRecognizer) + } + + // Every time the user taps on the UIImageView, this function gets called, + // which triggers the closure we stored + @objc fileprivate func handleTapGesture(sender: UITapGestureRecognizer) { + if let action = self.tapGestureRecognizerAction { + action?() + } else { + Logger.shared.error("No Action") + } + } + +} diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift index 2de7f34163..f632d8d637 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift @@ -4,6 +4,7 @@ import BigInt import IrohaCrypto import SSFUtils import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift index dfeb95380f..ae9ce51b75 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift @@ -5,6 +5,7 @@ import IrohaCrypto import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( @@ -208,8 +209,7 @@ extension AssetTransactionData { let signedData = extrinsic.signedData, let fee = signedData.fee, let partialFee = fee.partialFee, - let partialFeeDecimal = Decimal.fromSubstrateAmount(partialFee, precision: Int16(asset.precision)) - { + let partialFeeDecimal = Decimal.fromSubstrateAmount(partialFee, precision: Int16(asset.precision)) { let fee = AssetTransactionFee( identifier: asset.id, assetId: asset.id, diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift index ca503313a9..00d9256f8d 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift @@ -26,14 +26,14 @@ extension AssetTransactionData { context: nil ) - switch (item.module, item.method) { + switch (item.module?.lowercased(), item.method?.lowercased()) { case ("staking", "rewarded"): return createRewardTransaction( from: item, fee: transactionFee, status: status ) - case ("assets", "transfer"): + case (.some(_), "transfer"): return createTransferTransaction( from: item, address: address, diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift index 15d2b07309..35a4c4f3a1 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift index 457c09f3c8..d215d5c5bb 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift new file mode 100644 index 0000000000..68b8bcf8f7 --- /dev/null +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -0,0 +1,150 @@ +import Foundation +import BigInt +import SoraFoundation +import SSFModels +import TonSwift + +extension AssetTransactionData { + static func createTransaction( + event: TonAccountEvent, + action: AccountEventAction, + address: String, + chain _: ChainModel, + asset: AssetModel, + filters: [WalletTransactionHistoryFilter] + ) -> AssetTransactionData? { + let commitedStatus: AssetTransactionStatus = action.status == .ok ? .commited : .rejected + let status: AssetTransactionStatus = event.isInProgress ? .pending : commitedStatus + + var fees: [AssetTransactionFee] = [] + if let feeValue = BigUInt(string: String(abs(event.fee))), + let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { + let fee = AssetTransactionFee( + identifier: asset.id, + assetId: asset.id, + amount: AmountDecimal(value: feeValue), + context: nil + ) + fees.append(fee) + } + + switch action.type { + case let .tonTransfer(tonTransfer): + let amountString = String(tonTransfer.amount) + guard + filters.contains(where: { $0.type == .transfer && $0.selected }), + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + let senderFriendlyAddress = tonTransfer.sender.address.toFriendly().toString() + let recipientFriendlyAddress = tonTransfer.recipient.address.toFriendly().toString() + + let type: TransactionType = senderFriendlyAddress == address ? .outgoing : .incoming + let peerAddress = type == .incoming ? senderFriendlyAddress : recipientFriendlyAddress + + let peerName = try? TonSwift.Address.parse(peerAddress).toFriendly(bounceable: false).toString() + + var iconContext: [String: String] = [:] + if let iconUrl = asset.icon?.absoluteString { + iconContext["icon"] = iconUrl + } + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: peerName, + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: iconContext + ) + case let .contractDeploy(deploy): + guard filters.contains(where: { $0.type == .other && $0.selected }) else { + return nil + } + return AssetTransactionData( + transactionId: event.eventId, + status: .commited, + assetId: "", + peerId: "", + peerFirstName: action.preview.name, + peerLastName: action.preview.description, + peerName: deploy.address.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: .zero), + fees: fees, + timestamp: Int64(event.timestamp), + type: TransactionType.extrinsic.rawValue, + reason: "", + context: nil + ) + case let .jettonTransfer(jettonTransfer): + let amountString = String(jettonTransfer.amount) + guard + filters.contains(where: { $0.type == .transfer && $0.selected }), + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + let sender = jettonTransfer.sender?.address.toFriendly().toString() + let type: TransactionType = sender == address ? .outgoing : .incoming + + var iconContext: [String: String] = [:] + if let iconUrl = jettonTransfer.jettonInfo.imageURL?.absoluteString { + iconContext["icon"] = iconUrl + } + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: jettonTransfer.recipientAddress.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: iconContext + ) + case let .jettonSwap(swap): + + let amountDecimal = Decimal.fromSubstrateAmount( + swap.amountIn, + precision: Int16(asset.precision) + ) ?? .zero + let amount = AmountDecimal(value: amountDecimal) + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: swap.jettonInfoIn?.symbol ?? "", + peerId: swap.jettonInfoOut?.symbol ?? "", + peerFirstName: nil, + peerLastName: nil, + peerName: "", + details: String(swap.amountOut), + amount: amount, + fees: fees, + timestamp: .zero, + type: TransactionType.swap.rawValue, + reason: "", + context: nil + ) + default: + return nil + } + } +} diff --git a/fearless/Common/Helpers/AccountProviderFactory.swift b/fearless/Common/Helpers/AccountProviderFactory.swift index 915229769b..aa9a64fb82 100644 --- a/fearless/Common/Helpers/AccountProviderFactory.swift +++ b/fearless/Common/Helpers/AccountProviderFactory.swift @@ -2,6 +2,7 @@ import Foundation import IrohaCrypto import RobinHood import SSFAccountManagmentStorage +import SSFModels protocol AccountProviderFactoryProtocol { var operationManager: OperationManagerProtocol { get } diff --git a/fearless/Common/Helpers/AccountRepositoryFactory.swift b/fearless/Common/Helpers/AccountRepositoryFactory.swift index dd3fd12057..4bb3d4a383 100644 --- a/fearless/Common/Helpers/AccountRepositoryFactory.swift +++ b/fearless/Common/Helpers/AccountRepositoryFactory.swift @@ -1,6 +1,8 @@ import Foundation import IrohaCrypto import RobinHood +import SSFModels +import SSFAccountManagmentStorage protocol AccountRepositoryFactoryProtocol { // TODO: remove diff --git a/fearless/Common/Helpers/AddressConversion.swift b/fearless/Common/Helpers/AddressConversion.swift deleted file mode 100644 index ab60a53437..0000000000 --- a/fearless/Common/Helpers/AddressConversion.swift +++ /dev/null @@ -1,94 +0,0 @@ -import Foundation -import IrohaCrypto -import SSFCrypto -import SSFModels - -enum ChainFormat { - case ethereum - case substrate(_ prefix: UInt16) - - func asSfCrypto() -> SFChainFormat { - switch self { - case .ethereum: - return .sfEthereum - case let .substrate(prefix): - return .sfSubstrate(prefix) - } - } -} - -enum AddressFactory { - private static func chainFormat(of chain: ChainModel) -> ChainFormat { - chain.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) - } - - static func address(for accountId: AccountId, chain: ChainModel) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat(of: chain)) - } - - static func address(for accountId: AccountId, chainFormat: ChainFormat) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat) - } - - static func accountId(from address: AccountAddress, chain: ChainModel) throws -> AccountId { - try address.toAccountId(using: chainFormat(of: chain)) - } - - static func randomAccountId(for chain: ChainModel) -> AccountId { - switch chainFormat(of: chain) { - case .ethereum: - return Data(count: EthereumConstants.accountIdLength) - case .substrate: - return Data(count: SubstrateConstants.accountIdLength) - } - } -} - -extension AccountId { - func toAddress(using conversion: ChainFormat) throws -> AccountAddress { - switch conversion { - case .ethereum: - return toHex(includePrefix: true) - case let .substrate(prefix): - return try SS58AddressFactory().address(fromAccountId: self, type: prefix) - } - } -} - -extension AccountAddress { - func toAccountId(using conversion: ChainFormat) throws -> AccountId { - switch conversion { - case .ethereum: - return try AccountId(hexStringSSF: self) - case let .substrate(prefix): - return try SS58AddressFactory().accountId(fromAddress: self, type: prefix) - } - } - - func toAccountId() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - return try SS58AddressFactory().accountId(from: self) - } - } - - func toAccountIdWithTryExtractPrefix() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - let prefix = try SS58AddressFactory().type(fromAddress: self) - return try SS58AddressFactory().accountId(fromAddress: self, addressPrefix: prefix.uint16Value) - } - } -} - -extension ChainModel { - var chainFormat: ChainFormat { - if isEthereumBased { - return .ethereum - } else { - return .substrate(addressPrefix) - } - } -} diff --git a/fearless/Common/Helpers/AssetModelMapper.swift b/fearless/Common/Helpers/AssetModelMapper.swift index c3f7d12d1b..490f2afa25 100644 --- a/fearless/Common/Helpers/AssetModelMapper.swift +++ b/fearless/Common/Helpers/AssetModelMapper.swift @@ -80,6 +80,10 @@ extension AssetModelMapper: CoreDataMapperProtocol { return createPriceData(from: priceData) } + guard let assetType = ChainAssetType(storageValue: entity.type) else { + throw ConvenienceError(error: "ChainAssetType mapper error") + } + return AssetModel( id: entity.id!, name: name!, @@ -93,11 +97,11 @@ extension AssetModelMapper: CoreDataMapperProtocol { isNative: entity.isNative, staking: staking, purchaseProviders: purchaseProviders, - type: createChainAssetModelType(from: entity.type), - ethereumType: createEthereumAssetType(from: entity.ethereumType), + assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId, - priceData: priceDatas + priceData: priceDatas, + coinbaseUrl: entity.coinbaseUrl ) } @@ -115,11 +119,11 @@ extension AssetModelMapper: CoreDataMapperProtocol { entity.color = model.color entity.name = model.name entity.currencyId = model.currencyId - entity.type = model.type?.rawValue + entity.type = model.assetType.rawValue entity.isUtility = model.isUtility entity.isNative = model.isNative entity.staking = model.staking?.rawValue - entity.ethereumType = model.ethereumType?.rawValue + entity.coinbaseUrl = model.coinbaseUrl let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = model.priceProvider?.type.rawValue diff --git a/fearless/Common/Helpers/ChainAccountFetching.swift b/fearless/Common/Helpers/ChainAccountFetching.swift deleted file mode 100644 index 1333523f5c..0000000000 --- a/fearless/Common/Helpers/ChainAccountFetching.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -import SSFModels - -struct ChainAccountResponse: Equatable { - let chainId: ChainModel.Id - let accountId: AccountId - let publicKey: Data - let name: String - let cryptoType: CryptoType - let addressPrefix: UInt16 - let isEthereumBased: Bool - let isChainAccount: Bool - let walletId: String -} - -enum ChainAccountFetchingError: Error { - case accountNotExists -} - -extension ChainAccountResponse { - func toDisplayAddress() throws -> DisplayAddress { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - let address = try accountId.toAddress(using: chainFormat) - - return DisplayAddress(address: address, username: name) - } - - func toAddress() -> AccountAddress? { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - return try? accountId.toAddress(using: chainFormat) - } - - func chainFormat() -> ChainFormat { - isEthereumBased ? .ethereum : .substrate(addressPrefix) - } -} - -extension MetaAccountModel { - func fetch(for request: ChainAccountRequest) -> ChainAccountResponse? { - if let chainAccount = chainAccounts.first(where: { $0.chainId == request.chainId }) { - guard let cryptoType = CryptoType(rawValue: chainAccount.cryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: chainAccount.accountId, - publicKey: chainAccount.publicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: true, - walletId: metaId - ) - } - - if request.isEthereumBased { - guard let publicKey = ethereumPublicKey, let accountId = ethereumAddress else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey, - name: name, - cryptoType: .ecdsa, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: false, - walletId: metaId - ) - } - - guard let cryptoType = CryptoType(rawValue: substrateCryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: substrateAccountId, - publicKey: substratePublicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: false, - isChainAccount: false, - walletId: metaId - ) - } -} diff --git a/fearless/Common/Helpers/ChainAssetsFetching.swift b/fearless/Common/Helpers/ChainAssetsFetching.swift index 2f98e69488..08a0a298f7 100644 --- a/fearless/Common/Helpers/ChainAssetsFetching.swift +++ b/fearless/Common/Helpers/ChainAssetsFetching.swift @@ -36,7 +36,8 @@ final class ChainAssetsFetching: ChainAssetFetchingProtocol { case supportNfts case enabled(wallet: MetaAccountModel) case enabledChains - + case chainAssetId(_ chainAssetId: ChainAssetId) + var searchText: String? { switch self { case let .search(text): @@ -236,7 +237,14 @@ private extension ChainAssetsFetching { case let .chainIds(ids): return chainAssets.filter { ids.contains($0.chain.chainId) } case .supportNfts: - return chainAssets.filter { $0.chain.isEthereum } + return chainAssets.filter { + switch $0.chain.ecosystem { + case .ethereum, .ton: + return true + case .substrate, .ethereumBased: + return false + } + } case let .assetNames(names): return chainAssets.filter { names.map { $0.lowercased() }.contains($0.asset.symbol.lowercased()) } case let .enabled(wallet): @@ -246,6 +254,8 @@ private extension ChainAssetsFetching { return chainAssets.filter { enabled.contains($0.identifier) } case .enabledChains: return chainAssets.filter { !$0.chain.disabled } + case .chainAssetId(let chainAssetId): + return chainAssets.filter { $0.chainAssetId == chainAssetId } } } diff --git a/fearless/Common/Helpers/EthereumNodeFetching.swift b/fearless/Common/Helpers/EthereumNodeFetching.swift index af819436a1..9a8dbe95ed 100644 --- a/fearless/Common/Helpers/EthereumNodeFetching.swift +++ b/fearless/Common/Helpers/EthereumNodeFetching.swift @@ -2,6 +2,7 @@ import Foundation import SSFModels import Web3 import FearlessKeys +import SSFUtils enum EthereumChain: String { case ethereumMainnet = "1" diff --git a/fearless/Common/Helpers/WalletAssetsObserver.swift b/fearless/Common/Helpers/WalletAssetsObserver.swift index 7a8475b962..041b4f7089 100644 --- a/fearless/Common/Helpers/WalletAssetsObserver.swift +++ b/fearless/Common/Helpers/WalletAssetsObserver.swift @@ -37,6 +37,7 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { self.eventCenter = eventCenter self.logger = logger self.userDefaultsStorage = userDefaultsStorage + eventCenter.add(observer: self) } // MARK: - WalletAssetsObserver @@ -65,13 +66,16 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { // MARK: - ApplicationServiceProtocol func setup() { - eventCenter.add(observer: self) - chainRegistry.chainsSubscribe( - self, - runningInQueue: walletAssetsObserverQueue - ) { [weak self] changes in - self?.handleChains(changes: changes, accounts: nil) - } +// guard wallet.ecosystem.isRegular else { +// return +// } +// eventCenter.add(observer: self) +// chainRegistry.chainsSubscribe( +// self, +// runningInQueue: walletAssetsObserverQueue +// ) { [weak self] changes in +// self?.handleChains(changes: changes, accounts: nil) +// } } func throttle() { @@ -107,6 +111,9 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { returning: [ChainModel: [ChainAssetId: AccountInfo?]].self ) { group in chains.forEach { chain in + guard !chain.ecosystem.isTon else { + return + } group.addTask { do { let accountInfos = try await self.accountInfoRemote.fetchAccountInfos(for: chain, wallet: self.wallet) @@ -236,6 +243,8 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { } } +// MARK: - EventVisitorProtocol + extension WalletAssetsObserverImpl: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { wallet = event.account diff --git a/fearless/Common/LocalAuthentication/BiometryAuth.swift b/fearless/Common/LocalAuthentication/BiometryAuth.swift index db9510e7c1..774dab6db3 100644 --- a/fearless/Common/LocalAuthentication/BiometryAuth.swift +++ b/fearless/Common/LocalAuthentication/BiometryAuth.swift @@ -55,7 +55,7 @@ class BiometryAuth: BiometryAuthProtocol { context.evaluatePolicy( LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: localizedReason - ) { (result: Bool, _: Error?) -> Void in + ) { (result: Bool, _: Error?) in completionQueue.async { completionBlock(result) } diff --git a/fearless/Common/Model/AccountImportSource.swift b/fearless/Common/Model/AccountImportSource.swift index 6787fe0f21..08ab270d6d 100644 --- a/fearless/Common/Model/AccountImportSource.swift +++ b/fearless/Common/Model/AccountImportSource.swift @@ -1,6 +1,7 @@ import Foundation enum AccountImportSource: CaseIterable { + case tonMnemonic case mnemonic case seed case keystore diff --git a/fearless/Common/Model/AmountInputResult.swift b/fearless/Common/Model/AmountInputResult.swift index 326a424bac..19be166410 100644 --- a/fearless/Common/Model/AmountInputResult.swift +++ b/fearless/Common/Model/AmountInputResult.swift @@ -1,6 +1,6 @@ import Foundation -enum AmountInputResult { +enum AmountInputResult: Equatable { case rate(_ value: Decimal) case absolute(_ value: Decimal) @@ -12,4 +12,13 @@ enum AmountInputResult { return value } } + + var needsUpdateInputAfterChange: Bool { + switch self { + case .rate: + return true + case .absolute: + return false + } + } } diff --git a/fearless/Common/Model/AvailableExportOptionsProvider.swift b/fearless/Common/Model/AvailableExportOptionsProvider.swift index 6f8b64d684..17c32d97ba 100644 --- a/fearless/Common/Model/AvailableExportOptionsProvider.swift +++ b/fearless/Common/Model/AvailableExportOptionsProvider.swift @@ -1,63 +1,81 @@ import SoraKeystore +import SSFModels + protocol AvailableExportOptionsProviderProtocol { func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] } final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtocol { let keystore = Keychain() func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] { var options: [ExportOption] = [] - if mnemonicAvailable(for: account, accountId: accountId, isEthereum: isEthereum) { - options.append(.mnemonic) - } + switch ecosystem { + case .substrate, .ethereumBased, .ethereum: + if mnemonicAvailable(for: wallet, accountId: accountId, ecosystem: ecosystem) { + options.append(.mnemonic) + } - if seedAvailable(for: account, accountId: accountId) { - options.append(.seed) - } + if seedAvailable(for: wallet, accountId: accountId) { + options.append(.seed) + } - options.append(.keystore) + options.append(.keystore) + case .ton: + options.append(.mnemonic) + } return options } - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] { - var options: [ExportOption] = [] - - if mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: true), - mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: false) { - options.append(.mnemonic) - } - if seedAvailable(for: wallet, accountId: accountId) { - options.append(.seed) + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] { + switch wallet.ecosystem { + case .regular: + return [Ecosystem.ethereum, .ethereumBased, .substrate].map { + getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: $0) + } + .reduce([], +) + .uniq(predicate: { $0 }) + case .ton: + return getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: .ton) } - - options.append(.keystore) - - return options } } private extension AvailableExportOptionsProvider { - func mnemonicAvailable(for account: MetaAccountModel, accountId: AccountId?, isEthereum: Bool) -> Bool { - let entropyTag = KeystoreTagV2.entropyTagForMetaId(account.metaId, accountId: accountId) + func mnemonicAvailable( + for wallet: MetaAccountModel, + accountId: AccountId?, + ecosystem: Ecosystem + ) -> Bool { + let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try? keystore.fetchKey(for: entropyTag) - if isEthereum { - if !account.canExportEthereumMnemonic { + + switch ecosystem { + case .substrate, .ton: + return entropy != nil + case .ethereumBased, .ethereum: + if !wallet.canExportEthereumMnemonic { return false } - let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(account.metaId, accountId: accountId) + let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath = try? keystore.fetchKey(for: derivationPathTag) guard let path = derivationPath else { return false @@ -65,18 +83,17 @@ private extension AvailableExportOptionsProvider { let dpString = String(data: path, encoding: .utf8) return entropy != nil && dpString != nil } - return entropy != nil } - func seedAvailable(for account: MetaAccountModel, accountId: AccountId?) -> Bool { + func seedAvailable(for wallet: MetaAccountModel, accountId: AccountId?) -> Bool { let ethereumTag = KeystoreTagV2.ethereumSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let ethereumSeed = try? keystore.fetchKey(for: ethereumTag) let substrateTag = KeystoreTagV2.substrateSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let substrateSeed = try? keystore.fetchKey(for: substrateTag) diff --git a/fearless/Common/Model/ChainAction.swift b/fearless/Common/Model/ChainAction.swift index b8af3c3a21..fc4503963b 100644 --- a/fearless/Common/Model/ChainAction.swift +++ b/fearless/Common/Model/ChainAction.swift @@ -7,9 +7,9 @@ enum ChainAction { case subscan(url: URL) case etherscan(url: URL) case oklink(url: URL) + case tonviewer(url: URL) case switchNode case export - case replace case reefscan(url: URL) case claimCrowdloanRewards @@ -21,10 +21,8 @@ enum ChainAction { return R.image.iconRetry() case .copyAddress: return R.image.iconCopy() - case .polkascan, .subscan, .etherscan, .reefscan, .oklink: + case .polkascan, .subscan, .etherscan, .reefscan, .oklink, .tonviewer: return R.image.iconOpenWeb() - case .replace: - return R.image.iconReplace() case .claimCrowdloanRewards: return R.image.iconInfo() } @@ -44,8 +42,6 @@ enum ChainAction { case .subscan: return R.string.localizable .transactionDetailsViewSubscan(preferredLanguages: locale.rLanguages) - case .replace: - return R.string.localizable.replaceAccount(preferredLanguages: locale.rLanguages) case .etherscan: return R.string.localizable.transactionDetailsViewEtherscan(preferredLanguages: locale.rLanguages) case .reefscan: @@ -54,6 +50,8 @@ enum ChainAction { return R.string.localizable.poolStakingManagementClaimTitle(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return "Tonviewer" } } } diff --git a/fearless/Common/Model/ChainAsset.swift b/fearless/Common/Model/ChainAsset.swift index 9d3cb44232..ad39916c6c 100644 --- a/fearless/Common/Model/ChainAsset.swift +++ b/fearless/Common/Model/ChainAsset.swift @@ -5,36 +5,40 @@ import SSFModels extension ChainAsset { var assetDisplayInfo: AssetBalanceDisplayInfo { asset.displayInfo(with: chain.icon) } - var identifier: String { - [chain.identifier, asset.id].joined(separator: " : ") - } - var storagePath: StorageCodingPath { var storagePath: StorageCodingPath + switch chainAssetType { - case .normal, .equilibrium, .none: - storagePath = StorageCodingPath.account - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - storagePath = StorageCodingPath.tokens - case .assets: - storagePath = StorageCodingPath.assetsAccount - case .soraAsset: - if isUtility { + case .substrate(substrateType: let substrateType): + switch substrateType { + case .normal, .equilibrium: storagePath = StorageCodingPath.account - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: storagePath = StorageCodingPath.tokens + case .assets: + storagePath = StorageCodingPath.assetsAccount + case .soraAsset: + if isUtility { + storagePath = StorageCodingPath.account + } else { + storagePath = StorageCodingPath.tokens + } } + case .ethereum: + storagePath = .account + case .ton: + storagePath = .tokens } return storagePath diff --git a/fearless/Common/Model/ChainRegistry/ChainModel.swift b/fearless/Common/Model/ChainRegistry/ChainModel.swift index 8ed8c6cf36..13dff2201b 100644 --- a/fearless/Common/Model/ChainRegistry/ChainModel.swift +++ b/fearless/Common/Model/ChainRegistry/ChainModel.swift @@ -24,7 +24,7 @@ extension ChainModel { extension ChainModel { func match(_ caip2ChainId: Caip2ChainId) -> Bool { - switch chainBaseType { + switch ecosystem { case .substrate: let namespace = "polkadot" let knownChainCaip2ChainId = Caip2ChainId( @@ -32,13 +32,15 @@ extension ChainModel { reference: chainId ) return knownChainCaip2ChainId.reference.hasPrefix(caip2ChainId.reference) && namespace == caip2ChainId.namespace - case .ethereum: + case .ethereum, .ethereumBased: let namespace = "eip155" let knownChainCaip2ChainId = Caip2ChainId( namespace: namespace, reference: chainId.replacingOccurrences(of: "0x", with: "") ) return caip2ChainId == knownChainCaip2ChainId + case .ton: + return false } } } diff --git a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift index 3c89d31e1b..58291af1a7 100644 --- a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift +++ b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift @@ -16,6 +16,8 @@ extension ChainModel.ExternalApiExplorerType { return R.string.localizable.transactionDetailsViewReefscan(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return R.string.localizable.tonTonviewerActionTitle(preferredLanguages: locale.rLanguages) case .unknown: return "" } diff --git a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift index b109333010..2df5e44a63 100644 --- a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift +++ b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ManagedMetaAccountModel: Equatable { static let noOrder: UInt32 = 0 diff --git a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift deleted file mode 100644 index c39654f65a..0000000000 --- a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift +++ /dev/null @@ -1,281 +0,0 @@ -import Foundation -import RobinHood -import SSFModels - -typealias MetaAccountId = String - -struct MetaAccountModel: Equatable, Codable { - let metaId: MetaAccountId - let name: String - let substrateAccountId: Data - let substrateCryptoType: UInt8 - let substratePublicKey: Data - let ethereumAddress: Data? - let ethereumPublicKey: Data? - let chainAccounts: Set - let assetKeysOrder: [String]? - let canExportEthereumMnemonic: Bool - let unusedChainIds: [String]? - let selectedCurrency: Currency - let networkManagmentFilter: String? - let assetsVisibility: [AssetVisibility] - let hasBackup: Bool - let favouriteChainIds: [ChainModel.Id] - - var utilsModel: SSFModels.MetaAccountModel { - SSFModels.MetaAccountModel(metaId: metaId, name: name, substrateAccountId: substrateAccountId, substrateCryptoType: substrateCryptoType, substratePublicKey: substratePublicKey, ethereumAddress: ethereumAddress, ethereumPublicKey: ethereumPublicKey, chainAccounts: chainAccounts, assetKeysOrder: assetKeysOrder, assetFilterOptions: [], canExportEthereumMnemonic: canExportEthereumMnemonic, unusedChainIds: unusedChainIds, selectedCurrency: selectedCurrency, networkManagmentFilter: networkManagmentFilter, assetsVisibility: assetsVisibility, zeroBalanceAssetsHidden: false, hasBackup: hasBackup, favouriteChainIds: favouriteChainIds) - } -} - -extension MetaAccountModel { - var supportEthereum: Bool { - ethereumPublicKey != nil || chainAccounts.first(where: { $0.ethereumBased == true }) != nil - } -} - -extension MetaAccountModel: Identifiable { - var identifier: String { metaId } -} - -extension MetaAccountModel { - func isVisible(chainAsset: ChainAsset) -> Bool { - assetsVisibility.first(where: { $0.assetId == chainAsset.identifier })?.hidden == false - } - - func insertingChainAccount(_ newChainAccount: ChainAccountModel) -> MetaAccountModel { - var newChainAccounts = chainAccounts.filter { - $0.chainId != newChainAccount.chainId - } - - newChainAccounts.insert(newChainAccount) - - return MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: newChainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumAddress(_ newEthereumAddress: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: newEthereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumPublicKey(_ newEthereumPublicKey: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: newEthereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingName(_ walletName: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: walletName, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetKeysOrder(_ newAssetKeysOrder: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: newAssetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingUnusedChainIds(_ newUnusedChainIds: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: newUnusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingCurrency(_ currency: Currency) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: currency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingNetworkManagmentFilter(_ identifire: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: identifire, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetsVisibility(_ newAssetsVisibility: [AssetVisibility]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: newAssetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingIsBackuped(_ isBackuped: Bool) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: isBackuped, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingFavoutites(_ favouriteChainIds: [ChainModel.Id]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } -} diff --git a/fearless/Common/Model/DisplayAddress.swift b/fearless/Common/Model/DisplayAddress.swift deleted file mode 100644 index d6a77695d5..0000000000 --- a/fearless/Common/Model/DisplayAddress.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -struct DisplayAddress { - let address: AccountAddress - let username: String -} diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index 3681930f91..14ab2e4360 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels enum KeystoreTag: String, CaseIterable { case pincode @@ -12,6 +13,36 @@ enum KeystoreTag: String, CaseIterable { enum KeystoreTagV2: String, CaseIterable { case pincode + static func secretKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + return Self.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + return Self.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ton: + return Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) + } + } + + static func seedKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + return Self.substrateSeedTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + return Self.ethereumSeedTagForMetaId(metaId, accountId: accountId) + case .ton: + return "" + } + } + static func substrateSecretKeyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -26,6 +57,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSecretKey") } + static func tonSecretKeyTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSecretKey") + } + static func entropyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -61,6 +99,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSeed") } + static func tonSeedTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSeed") + } + private static func createTagForMetaId( _ metaId: String, accountId: AccountId?, diff --git a/fearless/Common/Model/TonConstansts.swift b/fearless/Common/Model/TonConstansts.swift new file mode 100644 index 0000000000..ee3f76a32e --- /dev/null +++ b/fearless/Common/Model/TonConstansts.swift @@ -0,0 +1,9 @@ +import Foundation +import SSFUtils + +struct TonConstants { + static let tonChainId = -239 + static let testnetChainId = -3 + static let tonAssetId = "2ba4723a-74b4-4a6f-a888-e51937773807-239" + static let tonIcon = URL(string: "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg")! +} diff --git a/fearless/Common/Model/WalletBalanceInfo.swift b/fearless/Common/Model/WalletBalanceInfo.swift index a68fddeff4..2f5453528b 100644 --- a/fearless/Common/Model/WalletBalanceInfo.swift +++ b/fearless/Common/Model/WalletBalanceInfo.swift @@ -1,7 +1,7 @@ import Foundation import SSFModels -struct WalletBalanceInfo { +struct WalletBalanceInfo: Equatable { let totalFiatValue: Decimal let enabledAssetFiatBalance: Decimal let dayChangePercent: Decimal diff --git a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift index 8f532655ef..0b1e67785e 100644 --- a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift +++ b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift @@ -8,3 +8,12 @@ struct SubqueryHistoryData: Decodable { let historyElements: HistoryElements } + +struct SoraSubqueryHistoryData: Decodable { + struct HistoryElements: Decodable { + let pageInfo: SubqueryPageInfo + let nodes: [SoraSubsquidHistoryElement] + } + + let historyElements: HistoryElements +} diff --git a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift index c3e8282eae..b8897f00c3 100644 --- a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift +++ b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift @@ -13,3 +13,101 @@ extension SubqueryRewardOrSlashData: RewardOrSlashResponse { historyElements.nodes } } + +struct SoraSubqueryRewardOrSlashData: Decodable { + struct HistoryElements: Decodable { + let nodes: [SoraSubqueryHistoryElement] + } + + let historyElements: HistoryElements +} + +extension SoraSubqueryRewardOrSlashData: RewardOrSlashResponse { + var data: [RewardOrSlashData] { + historyElements.nodes + } +} + +struct SoraSubqueryHistoryElement: Decodable, RewardOrSlashData { + + enum CodingKeys: String, CodingKey { + case timestamp + case id + case address + case data + case method + case module + case blockHash + case blockHeight + } + + let timestamp: String + let id: String + let address: String + let data: SoraSubqueryHistoryElementData + let method: String + let module: String + let blockHash: String + let blockHeight: Int + + var identifier: String { + id + } + + var rewardInfo: (any RewardOrSlash)? { + self + } + + init(from decoder: any Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + if let timestampInt = try? container.decode(Int.self, forKey: .timestamp) { + self.timestamp = String(timestampInt) + } else { + self.timestamp = "" + } + id = try container.decode(String.self, forKey: .id) + address = try container.decode(String.self, forKey: .address) + data = try container.decode(SoraSubqueryHistoryElementData.self, forKey: .data) + method = try container.decode(String.self, forKey: .method) + module = try container.decode(String.self, forKey: .module) + blockHash = try container.decode(String.self, forKey: .blockHash) + blockHeight = try container.decode(Int.self, forKey: .blockHeight) + } +} + +extension SoraSubqueryHistoryElement: RewardOrSlash { + var amount: String { + data.amount + } + + var isReward: Bool { + true + } + + var era: Int? { + data.era + } + + var validator: String? { + nil + } + + var stash: String? { + data.stash + } + + var eventIdx: String? { + id + } + + var assetId: String? { + nil + } +} + +struct SoraSubqueryHistoryElementData: Decodable { + let era: Int + let payee, stash: String + let amount, amountUSD: String +} diff --git a/fearless/Common/Operation/AccountOperationFactoryError.swift b/fearless/Common/Operation/AccountOperationFactoryError.swift index 6d1dd821e8..7279d6f6d0 100644 --- a/fearless/Common/Operation/AccountOperationFactoryError.swift +++ b/fearless/Common/Operation/AccountOperationFactoryError.swift @@ -6,4 +6,5 @@ enum AccountOperationFactoryError: Error { case unsupportedNetwork case decryption case missingUsername + case unsupportedImport } diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index eaf4845fcc..f13e73c7a2 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -1,19 +1,40 @@ import Foundation +import SSFAccountManagment import SSFUtils import IrohaCrypto import RobinHood import SoraKeystore import SSFModels import SSFCrypto +import TonSwift protocol MetaAccountOperationFactoryProtocol { - func newMetaAccountOperation(request: MetaAccountImportMnemonicRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportSeedRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportKeystoreRequest, isBackuped: Bool) -> BaseOperation - - func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportSeedRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportKeystoreRequest) -> BaseOperation + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportSeedRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportKeystoreRequest, + isBackedUp: Bool + ) -> BaseOperation + + func importChainAccountOperation( + request: ChainAccountImportMnemonicRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportSeedRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportKeystoreRequest + ) -> BaseOperation } final class MetaAccountOperationFactory { @@ -24,6 +45,14 @@ final class MetaAccountOperationFactory { let seed: Data } + private struct TonAccountQuery { + let publicKey: Data + let privateKey: Data + let address: TonSwift.Address + let seed: Data + let contractVersion: TonContractVersion + } + private enum SeedSource { case mnemonic(IRMnemonicProtocol) case seed(Data) @@ -84,13 +113,10 @@ private extension MetaAccountOperationFactory { func saveSecretKey( _ secretKey: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.secretKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(secretKey, with: tag) } @@ -123,13 +149,10 @@ private extension MetaAccountOperationFactory { func saveSeed( _ seed: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSeedTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSeedTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.seedKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(seed, with: tag) } @@ -223,33 +246,46 @@ private extension MetaAccountOperationFactory { ) } + private func getTonQuery( + mnemonic: String + ) throws -> TonAccountQuery { + let mnemonicArray = mnemonic.components(separatedBy: " ") + let seed = Mnemonic.mnemonicToSeed(mnemonicArray: mnemonicArray) + let keypair = try Mnemonic.mnemonicToPrivateKey(mnemonicArray: mnemonicArray) + + /// Currently support version 4 revision 2 + /// Do not forget to change contractVersion if will support v5 contract + let wallet = WalletV4R2(publicKey: keypair.publicKey.data) + let address = try wallet.address() + + return TonAccountQuery( + publicKey: keypair.publicKey.data, + privateKey: keypair.privateKey.data, + address: address, + seed: seed, + contractVersion: .v4R2 + ) + } + func createMetaAccount( name: String, - substratePublicKey: Data, - substrateCryptoType: CryptoType, - ethereumPublicKey: Data?, - isBackuped: Bool, - defaultChainId: ChainModel.Id? = nil + ecosystem: WalletEcosystem, + isBackedUp: Bool, + defaultChainId: ChainModel.Id? = nil, + assetsVisibility: [AssetVisibility] = [] ) throws -> MetaAccountModel { - let substrateAccountId = try substratePublicKey.publicKeyToAccountId() - let ethereumAddress = try ethereumPublicKey?.ethereumAddressFromPublicKey() - return MetaAccountModel( metaId: UUID().uuidString, name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType.rawValue, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, unusedChainIds: nil, selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: defaultChainId, - assetsVisibility: [], - hasBackup: isBackuped, + assetsVisibility: assetsVisibility, + hasBackup: isBackedUp, favouriteChainIds: [] ) } @@ -258,9 +294,42 @@ private extension MetaAccountOperationFactory { // MARK: - MetaAccountOperationFactoryProtocol extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation { + ClosureOperation { [self] in + let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + let ecosystem = WalletEcosystem.ton(.init( + tonAddress: tonQuery.address, + tonPublicKey: tonQuery.publicKey, + tonContractVersion: tonQuery.contractVersion + )) + let metaAccount = try createMetaAccount( + name: request.username, + ecosystem: ecosystem, + isBackedUp: isBackedUp, + defaultChainId: "\(TonConstants.tonChainId)", + assetsVisibility: [.init( + assetId: ["\(TonConstants.tonChainId)", TonConstants.tonAssetId].joined(separator: " : "), + hidden: false + )] + ) + + let metaId = metaAccount.metaId + try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) + guard let data = request.mnemonic.data(using: .utf8) else { + throw AccountCreateError.invalidMnemonicFormat + } + try saveEntropy(data, metaId: metaId) + + return metaAccount + } + } + func newMetaAccountOperation( request: MetaAccountImportMnemonicRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateQuery = try getQuery( @@ -277,24 +346,32 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ethereumBased: true ) + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery.publicKey + )) + let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery.publicKey, - isBackuped: isBackuped, + ecosystem: ecosystem, + isBackedUp: isBackedUp, defaultChainId: request.defaultChainId ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) - try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(request.ethereumDerivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveEntropy(request.mnemonic.entropy(), metaId: metaId) @@ -305,7 +382,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { // We use seed vs seed.miniSeed for mnemonic. Check if it works for SeedRequest. func newMetaAccountOperation( request: MetaAccountImportSeedRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateSeed = try Data(hexStringSSF: request.substrateSeed) @@ -328,24 +405,31 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ) } + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery?.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery?.publicKey + )) let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery?.publicKey, - isBackuped: isBackuped + ecosystem: ecosystem, + isBackedUp: isBackedUp ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) if let query = ethereumQuery, let derivationPath = request.ethereumDerivationPath { - try saveSecretKey(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(derivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) } return metaAccount @@ -354,7 +438,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { func newMetaAccountOperation( request: MetaAccountImportKeystoreRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let keystoreExtractor = KeystoreExtractor() @@ -410,19 +494,22 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { let metaId = UUID().uuidString let accountId = try substratePublicKey.rawData().publicKeyToAccountId() - try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ecosystem: .substrate) if let ethereumKeystore = ethereumKeystore { - try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ecosystem: .ethereumBased) } - return MetaAccountModel( - metaId: metaId, - name: request.username, + let ecosystem = WalletEcosystem.regular(.init( substrateAccountId: accountId, substrateCryptoType: request.cryptoType.rawValue, substratePublicKey: substratePublicKey.rawData(), ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey?.rawData(), + ethereumPublicKey: ethereumPublicKey?.rawData() + )) + return MetaAccountModel( + metaId: metaId, + name: request.username, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -430,150 +517,200 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: nil, assetsVisibility: [], - hasBackup: isBackuped, + hasBackup: isBackedUp, favouriteChainIds: [] ) } } - func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportMnemonicRequest + ) -> BaseOperation { ClosureOperation { [self] in - let query = try getQuery( - seedSource: .mnemonic(request.mnemonic), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: request.isEthereum - ) - - let metaId = request.meta.metaId - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + let metaId = request.wallet.metaId + let accountId: AccountId + let privateKey: Data + let publicKey: Data + switch chain.ecosystem { + case .substrate: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: false + ) + accountId = try query.publicKey.publicKeyToAccountId() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: chain.ecosystem) + case .ethereum, .ethereumBased: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: true + ) + accountId = try query.publicKey.ethereumAddressFromPublicKey() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: chain.ecosystem) + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } - try saveSecretKey( - query.privateKey, - metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum - ) + try saveSecretKey( + privateKey, + metaId: metaId, + ecosystem: chain.ecosystem, + accountId: accountId + ) - try saveDerivationPath( - request.derivationPath, - metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum - ) + try saveDerivationPath( + request.derivationPath, + metaId: metaId, + accountId: accountId, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - try saveSeed(query.seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) - try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) + try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: query.publicKey, - cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum - ) + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: publicKey, + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) - return request.meta.insertingChainAccount(chainAccount) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } + return updatedWallet } } - func importChainAccountOperation(request: ChainAccountImportSeedRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportSeedRequest + ) -> BaseOperation { ClosureOperation { [self] in - let seed = try Data(hexStringSSF: request.seed) - let query = try getQuery( - seedSource: .seed(seed), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: request.isEthereum - ) - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() - let metaId = request.meta.metaId + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + let seed = try Data(hexStringSSF: request.seed) + let query = try getQuery( + seedSource: .seed(seed), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - try saveSecretKey( - query.privateKey, - metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum - ) + let accountId: AccountId + switch chain.ecosystem { + case .substrate: + accountId = try query.publicKey.publicKeyToAccountId() + case .ethereum, .ethereumBased: + accountId = try query.publicKey.ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } + let metaId = request.wallet.metaId - try saveDerivationPath( - request.derivationPath, - metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum - ) + try saveSecretKey( + query.privateKey, + metaId: metaId, + ecosystem: chain.ecosystem, + accountId: accountId + ) - try saveSeed(seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) + try saveDerivationPath( + request.derivationPath, + metaId: metaId, + accountId: accountId, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: query.publicKey, - cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum - ) + try saveSeed(seed, metaId: metaId, ecosystem: chain.ecosystem) + + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: query.publicKey, + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) - return request.meta.insertingChainAccount(chainAccount) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } + return updatedWallet } } - func importChainAccountOperation(request: ChainAccountImportKeystoreRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportKeystoreRequest + ) -> BaseOperation { ClosureOperation { [self] in let keystoreExtractor = KeystoreExtractor() + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + guard let data = request.keystore.data(using: .utf8) else { + throw AccountOperationFactoryError.invalidKeystore + } - guard let data = request.keystore.data(using: .utf8) else { - throw AccountOperationFactoryError.invalidKeystore - } - - let keystoreDefinition = try JSONDecoder().decode( - KeystoreDefinition.self, - from: data - ) - - guard let keystore = try? keystoreExtractor - .extractFromDefinition(keystoreDefinition, password: request.password) - else { - throw AccountOperationFactoryError.decryption - } + let keystoreDefinition = try JSONDecoder().decode( + KeystoreDefinition.self, + from: data + ) - let publicKey: IRPublicKeyProtocol - if request.isEthereum { - if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { - publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() - } else { + guard let keystore = try? keystoreExtractor + .extractFromDefinition(keystoreDefinition, password: request.password) else { throw AccountOperationFactoryError.decryption } - } else { - switch request.cryptoType { - case .sr25519: - publicKey = try SNPublicKey(rawData: keystore.publicKeyData) - case .ed25519: - publicKey = try EDPublicKey(rawData: keystore.publicKeyData) - case .ecdsa: - publicKey = try SECPublicKey(rawData: keystore.publicKeyData) + + let publicKey: IRPublicKeyProtocol + let accountId: Data + switch chain.ecosystem { + case .substrate: + switch request.cryptoType { + case .sr25519: + publicKey = try SNPublicKey(rawData: keystore.publicKeyData) + case .ed25519: + publicKey = try EDPublicKey(rawData: keystore.publicKeyData) + case .ecdsa: + publicKey = try SECPublicKey(rawData: keystore.publicKeyData) + } + accountId = try publicKey.rawData().publicKeyToAccountId() + case .ethereum, .ethereumBased: + if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { + publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() + } else { + throw AccountOperationFactoryError.decryption + } + accountId = try publicKey.rawData().ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport } - } - let accountId = request.isEthereum ? - try publicKey.rawData().ethereumAddressFromPublicKey() : try publicKey.rawData().publicKeyToAccountId() - - try saveSecretKey( - keystore.secretKeyData, - metaId: request.meta.metaId, - accountId: accountId, - ethereumBased: request.isEthereum - ) - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey.rawData(), - cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum - ) + try saveSecretKey( + keystore.secretKeyData, + metaId: request.wallet.metaId, + ecosystem: chain.ecosystem, + accountId: accountId + ) + + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: publicKey.rawData(), + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } - return request.meta.insertingChainAccount(chainAccount) + return updatedWallet } } } diff --git a/fearless/Common/Operation/StorageKeyEncodingOperation.swift b/fearless/Common/Operation/StorageKeyEncodingOperation.swift index 2601ad8961..3201cbc1e0 100644 --- a/fearless/Common/Operation/StorageKeyEncodingOperation.swift +++ b/fearless/Common/Operation/StorageKeyEncodingOperation.swift @@ -4,7 +4,7 @@ import RobinHood import SSFStorageQueryKit import SSFRuntimeCodingService -protocol NMapKeyParamProtocol { +public protocol NMapKeyParamProtocol { func encode(encoder: DynamicScaleEncoding, type: String) throws -> Data } diff --git a/fearless/Common/Protocols/AccountFetching.swift b/fearless/Common/Protocols/AccountFetching.swift index 48365b74e9..ecac0078f9 100644 --- a/fearless/Common/Protocols/AccountFetching.swift +++ b/fearless/Common/Protocols/AccountFetching.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment protocol AccountFetching { func fetchAllMetaAccounts( @@ -74,17 +75,18 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat = chainAccount.ecosystem.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), + let substrateCryptoType = meta.ecosystem.substrateCryptoType, chainAddress == address { let account = ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: chainAccount.ethereumBased, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId ) @@ -156,14 +158,17 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { + guard let substrateCryptoType = meta.ecosystem.substrateCryptoType else { + continue + } responses.append(ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: false, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId )) @@ -204,7 +209,15 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat + switch chainAccount.ecosystem { + case .substrate: + chainFormat = .substrate(chain.addressPrefix) + case .ethereumBased, .ethereum: + chainFormat = .ethereum + case .ton: + chainFormat = .ton(bounceable: true) + } if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), chainAddress == address { closure(.success(meta)) diff --git a/fearless/Common/Protocols/AccountManagementPresentable.swift b/fearless/Common/Protocols/AccountManagementPresentable.swift index b23c7f77f7..70ba1c2837 100644 --- a/fearless/Common/Protocols/AccountManagementPresentable.swift +++ b/fearless/Common/Protocols/AccountManagementPresentable.swift @@ -1,7 +1,10 @@ import Foundation protocol AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem?, + from view: ControllerBackedProtocol? + ) func showImportWallet( defaultSource: AccountImportSource, from view: ControllerBackedProtocol? @@ -11,8 +14,11 @@ protocol AccountManagementPresentable { } extension AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem? = nil, + from view: ControllerBackedProtocol? + ) { + guard let usernameSetup = OnboardingMainViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } diff --git a/fearless/Common/Protocols/AccountSelectionPresentable.swift b/fearless/Common/Protocols/AccountSelectionPresentable.swift index be34f4d234..7dc284f143 100644 --- a/fearless/Common/Protocols/AccountSelectionPresentable.swift +++ b/fearless/Common/Protocols/AccountSelectionPresentable.swift @@ -1,4 +1,5 @@ import SoraFoundation +import SSFModels protocol AccountSelectionPresentable: AnyObject { func presentAccountSelection( diff --git a/fearless/Common/Protocols/RuntimeConstantFetching.swift b/fearless/Common/Protocols/RuntimeConstantFetching.swift index 9b6902fdd9..dbb08622ed 100644 --- a/fearless/Common/Protocols/RuntimeConstantFetching.swift +++ b/fearless/Common/Protocols/RuntimeConstantFetching.swift @@ -11,6 +11,12 @@ protocol RuntimeConstantFetching { closure: @escaping (Result) -> Void ) + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, @@ -64,6 +70,27 @@ extension RuntimeConstantFetching { operationManager.enqueue(operations: [constOperation, codingFactoryOperation], in: .transient) } + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T { + try await withUnsafeThrowingContinuation { continuation in + fetchConstant( + for: path, + runtimeCodingService: runtimeCodingService, + operationManager: operationManager + ) { (result: Swift.Result) in + switch result { + case let .success(constant): + continuation.resume(returning: constant) + case let .failure(error): + continuation.resume(throwing: error) + } + } + } + } + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, diff --git a/fearless/Common/PurchaseProvider/CoinbasePurchaseProvider.swift b/fearless/Common/PurchaseProvider/CoinbasePurchaseProvider.swift new file mode 100644 index 0000000000..f0b2b61c90 --- /dev/null +++ b/fearless/Common/PurchaseProvider/CoinbasePurchaseProvider.swift @@ -0,0 +1,46 @@ +import Foundation +import SSFModels +import FearlessKeys + +final class CoinbasePurchaseProvivder: PurchaseProviderProtocol { + enum Constants { + static let title = "Coinbase" + static let icon = R.image.iconCoinbase() + } + + static let baseUrlString = "https://pay.coinbase.com/buy/select-asset" + + private var chainName: String? + + func with(chainName: String) -> Self { + self.chainName = chainName + return self + } + + func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] { + if let url = buildURLForAsset(asset, address: address) { + return [PurchaseAction(title: Constants.title, url: url, icon: Constants.icon!)] + } + return [] + } + + private func buildURLForAsset(_ asset: AssetModel, address: String) -> URL? { + guard let chainName else { + return nil + } + + guard let endpoint = asset.coinbaseUrl?.replacingOccurrences(of: "{address}", with: address) else { + return nil + } + + var components = URLComponents(string: Self.baseUrlString.appending(endpoint)) + + let queryItems = [ + URLQueryItem(name: "appId", value: CoinbaseKeys.coinbaseAppId) + ] + + components?.queryItems = queryItems + + return components?.url + } +} diff --git a/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift b/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift index cf3a21610c..a0f4293804 100644 --- a/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift +++ b/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift @@ -1,7 +1,8 @@ import Foundation +import SSFModels extension PurchaseAggregator { - static func defaultAggregator(with purchaseProviders: [PurchaseProviderProtocol]?) -> PurchaseAggregator { + static func defaultAggregator(with purchaseProviders: [PurchaseProviderProtocol]?, chain: ChainModel) -> PurchaseAggregator { let config: ApplicationConfigProtocol = ApplicationConfig.shared let moonpaySecretKeyData = Data(MoonPayKeys.secretKey.utf8) @@ -11,12 +12,14 @@ extension PurchaseAggregator { MoonpayProviderFactory().createProvider( with: moonpaySecretKeyData, apiKey: config.moonPayApiKey - ) + ), + CoinbasePurchaseProvivder() ] return PurchaseAggregator(providers: purchaseProviders ?? defaultProviders) .with(appName: config.purchaseAppName) .with(logoUrl: config.logoURL) .with(colorCode: R.color.colorPink()!.hexRGB) .with(callbackUrl: config.purchaseRedirect) + .with(chainName: chain.name) } } diff --git a/fearless/Common/PurchaseProvider/PurchaseProvider.swift b/fearless/Common/PurchaseProvider/PurchaseProvider.swift index 26be84185b..62827fedcd 100644 --- a/fearless/Common/PurchaseProvider/PurchaseProvider.swift +++ b/fearless/Common/PurchaseProvider/PurchaseProvider.swift @@ -30,6 +30,11 @@ extension PurchaseAggregator: PurchaseProviderProtocol { providers = providers.map { $0.with(callbackUrl: callbackUrl) } return self } + + func with(chainName: String) -> Self { + providers = providers.map { $0.with(chainName: chainName ) } + return self + } func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] { providers.flatMap { $0.buildPurchaseActions(asset: asset, address: address) } diff --git a/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift b/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift index 9853468307..8301d314cb 100644 --- a/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift +++ b/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift @@ -13,6 +13,7 @@ protocol PurchaseProviderProtocol { func with(logoUrl: URL) -> Self func with(colorCode: String) -> Self func with(callbackUrl: URL) -> Self + func with(chainName: String) -> Self func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] } @@ -32,4 +33,8 @@ extension PurchaseProviderProtocol { func with(callbackUrl _: URL) -> Self { self } + + func with(chainName _: String) -> Self { + self + } } diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 7d21701be4..926b9f7066 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -6,6 +6,7 @@ import Web3 import SSFChainRegistry import SSFRuntimeCodingService import SSFChainConnection +import FearlessKeys protocol ChainRegistryProtocol: AnyObject { var availableChainIds: Set? { get } @@ -15,15 +16,19 @@ protocol ChainRegistryProtocol: AnyObject { func resetConnection(for chainId: ChainModel.Id) func retryConnection(for chainId: ChainModel.Id) func getConnection(for chainId: ChainModel.Id) -> ChainConnection? - func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? - func getChain(for chainId: ChainModel.Id) -> ChainModel? + func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? + func chainsSubscribe( _ target: AnyObject, runningInQueue: DispatchQueue, updateClosure: @escaping ([DataProviderChange]) -> Void ) - func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? func chainsUnsubscribe(_ target: AnyObject) + + func getTonApiAssembly() throws -> TonAPIAssembly + + func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? + func getChain(for chainId: ChainModel.Id) -> ChainModel? func syncUp() func performHotBoot() func performColdBoot() @@ -53,6 +58,8 @@ final class ChainRegistry { connectionPools.first(where: { $0 is EthereumConnectionPool }) as? EthereumConnectionPool } + private(set) var tonApiAssembly: TonAPIAssembly? + // MARK: - State private var chains: [ChainModel] = [] @@ -128,18 +135,24 @@ final class ChainRegistry { // MARK: - Private DataProviderChange handle methods private func handleInsert(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleNewEthereumChain(newChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleNewSubstrateChain(newChain: chain) + case .ethereum: + try handleNewEthereumChain(newChain: chain) + case .ton: + handle(ton: chain) } } private func handleUpdate(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleUpdatedEthereumChain(updatedChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleUpdatedSubstrateChain(updatedChain: chain) + case .ethereum: + try handleUpdatedEthereumChain(updatedChain: chain) + case .ton: + handle(ton: chain) } } @@ -148,10 +161,11 @@ final class ChainRegistry { return } - if removedChain.isEthereum { - handleDeletedEthereumChain(chainId: chainId) - } else { + switch removedChain.ecosystem { + case .substrate, .ethereumBased: handleDeletedSubstrateChain(chainId: chainId) + case .ethereum, .ton: + handleDeletedChain(chainId: chainId) } } @@ -181,13 +195,13 @@ final class ChainRegistry { return } - let connection = try substrateConnectionPool.setupConnection(for: newChain) let chainTypes = chainsTypesMap[newChain.chainId] - runtimeProviderPool.setupRuntimeProvider(for: newChain, chainTypes: chainTypes) + + let connection = try substrateConnectionPool.setupConnection(for: newChain) runtimeSyncService.register(chain: newChain, with: connection) setupRuntimeVersionSubscription(for: newChain, connection: connection) - + chains.append(newChain) } @@ -197,11 +211,11 @@ final class ChainRegistry { } clearRuntimeSubscription(for: updatedChain.chainId) - - let connection = try substrateConnectionPool.setupConnection(for: updatedChain) let chainTypes = chainsTypesMap[updatedChain.chainId] runtimeProviderPool.setupRuntimeProvider(for: updatedChain, chainTypes: chainTypes) + + let connection = try substrateConnectionPool.setupConnection(for: updatedChain) setupRuntimeVersionSubscription(for: updatedChain, connection: connection) chains = chains.filter { $0.chainId != updatedChain.chainId } @@ -253,16 +267,41 @@ final class ChainRegistry { chains.append(updatedChain) } - private func handleDeletedEthereumChain(chainId: ChainModel.Id) { - chains = chains.filter { $0.chainId != chainId } - } - private func resetEthereumConnection(for _: ChainModel.Id) { // TODO: Reset eth connection } + // MARK: - Private Ton methods + + private func handle(ton chain: ChainModel) { + chains = chains.filter { $0.chainId != chain.chainId } + chains.append(chain) + +// #if DEBUG + let token = TonNodeApiKeyDebug.tonApiKey +// #else +// let token = TonNodeApiKey.tonApiKey +// #endif + guard let tonBridgeURL = chain.tonBridgeUrl else { + logger?.error("Missing tonBridgeURL") + return + } + let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue + if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token, tonBridgeURL: tonBridgeURL) + tonApiAssembly = apiAssembly + } else if !chain.options.or([]).contains(.testnet), !isTesnet, let node = chain.nodes.first { + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token, tonBridgeURL: tonBridgeURL) + tonApiAssembly = apiAssembly + } + } + // MARK: - Private others methods + private func handleDeletedChain(chainId: ChainModel.Id) { + chains = chains.filter { $0.chainId != chainId } + } + private func syncUpServices() { chainSyncService.syncUp() chainsTypesSyncService.syncUp() @@ -273,7 +312,7 @@ final class ChainRegistry { extension ChainRegistry: ChainRegistryProtocol { var availableChainIds: Set? { - readLock.concurrentlyRead { Set(runtimeVersionSubscriptions.keys + chains.filter { $0.isEthereum }.map { $0.chainId }) } + readLock.concurrentlyRead { Set(chains.map { $0.chainId }) } } var availableChains: [ChainModel] { @@ -390,22 +429,29 @@ extension ChainRegistry: ChainRegistryProtocol { return } - if chain.isEthereum { - resetEthereumConnection(for: chain.chainId) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: resetSubstrateConnection(for: chain.chainId) + case .ethereum: + resetEthereumConnection(for: chain.chainId) + case .ton: + break } } func retryConnection(for chainId: ChainModel.Id) { - guard - let chain = chains.first(where: { $0.chainId == chainId }), - let currentConnection = getConnection(for: chainId) - else { + guard let currentConnection = getConnection(for: chainId) else { return } currentConnection.connectIfNeeded() } + + func getTonApiAssembly() throws -> TonAPIAssembly { + guard let tonApiAssembly else { + throw ChainRegistryError.connectionUnavailable + } + return tonApiAssembly + } } // MARK: - ConnectionPoolDelegate @@ -452,6 +498,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { guard let substrateConnectionPool = self.substrateConnectionPool else { throw ChainRegistryError.connectionUnavailable } + let connection = try substrateConnectionPool.setupConnection(for: chain) return connection } diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 4f974e47be..1d83b4c6ad 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -108,7 +108,7 @@ final class ChainSyncService { remoteChains: [ChainModel], localChains: [ChainModel] )> = ClosureOperation { - let localChains = try localFetchOperation.extractNoCancellableResultData() + let localChains = (try? localFetchOperation.extractNoCancellableResultData()) ?? [] return ( remoteChains: remoteChains, @@ -161,6 +161,9 @@ final class ChainSyncService { let newOrUpdated: [ChainModel] = remoteChains.compactMap { remoteItem in if let localItem = localMapping[remoteItem.chainId] { + if localItem.options?.contains(.remoteAssets) == true { + return compareForRemoteAssetsOption(localItem: localItem, remoteItem: remoteItem) + } return localItem != remoteItem ? remoteItem : nil } else { return remoteItem @@ -176,6 +179,25 @@ final class ChainSyncService { handle(syncChanges: syncChanges) } + private func compareForRemoteAssetsOption( + localItem: ChainModel, + remoteItem: ChainModel + ) -> ChainModel? { + let updatedLocalChain = localItem.replacingAssets([]) + let updatedRemoteChain = remoteItem.replacingAssets([]) + + let localUtilityAsset = localItem.assets.first(where: { $0.isUtility }) + let remoteUtilityAsset = remoteItem.assets.first(where: { $0.isUtility }) + + if updatedLocalChain != updatedRemoteChain || localUtilityAsset != remoteUtilityAsset { + let assets = localItem.assets.union(remoteItem.assets) + let remoteChain = remoteItem.replacingAssets(Array(assets)) + return remoteChain + } else { + return nil + } + } + private func handle(syncChanges: SyncChanges) { let localSaveOperation = repository.saveOperation({ syncChanges.newOrUpdatedItems @@ -184,6 +206,7 @@ final class ChainSyncService { }) localSaveOperation.completionBlock = { + print("save operation: ", localSaveOperation.result) DispatchQueue.global(qos: .userInitiated).async { [weak self] in self?.complete(result: .success(syncChanges)) } diff --git a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift index 6639e186d8..160b284cdf 100644 --- a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift +++ b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import Foundation import SSFRuntimeCodingService +import SSFCrypto enum DeprecatedAccountIssue { case controller(issue: ControllerAccountIssue) diff --git a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift index 188198ed1b..c8718313bc 100644 --- a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift +++ b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift @@ -4,6 +4,7 @@ import SSFUtils import IrohaCrypto import SSFModels import SSFRuntimeCodingService +import SSFCrypto typealias ExtrinsicBuilderClosure = (ExtrinsicBuilderProtocol) throws -> (ExtrinsicBuilderProtocol) typealias ExtrinsicBuilderIndexedClosure = (ExtrinsicBuilderProtocol, Int) throws -> (ExtrinsicBuilderProtocol) @@ -181,9 +182,9 @@ final class ExtrinsicOperationFactory { let era = try eraWrapper.targetOperation.extractNoCancellableResultData().extrinsicEra let eraBlockHash = try eraBlockOperation.extractNoCancellableResultData() - let account: MultiAddress = codingFactory.metadata.multiAddressParameter( + let account: MultiAddress = try codingFactory.metadata.multiAddressParameter( accountId: currentAccountId, - chainFormat: currentChainFormat.asSfCrypto() + chainFormat: currentChainFormat ) let extrinsics: [Data] = try (0 ..< numberOfExtrinsics).map { index in var builder: ExtrinsicBuilderProtocol = diff --git a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift index a2a162b3a2..67dd4c3c5d 100644 --- a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class NominatorPayoutInfoFactory: PayoutInfoFactoryProtocol { let addressPrefix: UInt16 diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift index 3a0b82b445..19e6e94249 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift @@ -3,6 +3,7 @@ import SSFUtils import BigInt import IrohaCrypto import SSFRuntimeCodingService +import SSFCrypto extension PayoutRewardsService { func createChainHistoryRangeOperationWrapper( diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift index 0918a5e843..f5c4a90a11 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto final class PayoutValidatorsForValidatorFactory: PayoutValidatorsFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift index ba08a36cb1..4f4ff03e4e 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift @@ -17,6 +17,8 @@ enum PayoutValidatorsFactoryAssembly { return SubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) case .sora: return SoraSubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) + case .soraSubquery: + return SoraSubqueryPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) default: return SubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) } diff --git a/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift new file mode 100644 index 0000000000..a2e7cf4b7d --- /dev/null +++ b/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift @@ -0,0 +1,106 @@ +import RobinHood +import Foundation +import SSFUtils +import IrohaCrypto +import SSFModels +import SSFCrypto + +final class SoraSubqueryPayoutValidatorsForNominatorFactory { + private let url: URL + private let chainAsset: ChainAsset + + init(url: URL, chainAsset: ChainAsset) { + self.url = url + self.chainAsset = chainAsset + } + + private func createRequestFactory( + address: AccountAddress, + historyRange: @escaping () -> EraRange? + ) -> NetworkRequestFactoryProtocol { + BlockNetworkRequestFactory { [weak self] in + guard let strongSelf = self else { + throw ConvenienceError(error: "factory unavailable") + } + + var request = URLRequest(url: strongSelf.url) + + let eraRange = historyRange() + let params = strongSelf.requestParams(accountAddress: address, eraRange: eraRange) + let info = JSON.dictionaryValue(["query": JSON.stringValue(params)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + request.httpMethod = HttpMethod.post.rawValue + return request + } + } + + private func createResultFactory() -> AnyNetworkResultFactory<[AccountId]> { + AnyNetworkResultFactory<[AccountId]> { [chainAsset] data in + guard + let resultData = try? JSONDecoder().decode(JSON.self, from: data), + let nodes = resultData.data?.stakingEraNominators?.nodes?.arrayValue + else { return [] } + let addresses = nodes.compactMap { $0.nominations } + .compactMap { $0.nodes } + .compactMap { $0.arrayValue?.first } + .compactMap { $0.validator } + .compactMap { $0.stakerId } + + return try addresses.compactMap { + guard let address = $0.stringValue else { + return nil + } + + return try AddressFactory.accountId(from: address, chain: chainAsset.chain) + } + } + } + + private func requestParams(accountAddress: AccountAddress, eraRange: EraRange?) -> String { + let eraFilter: String = eraRange.map { + "era: {index_gte: \($0.start), index_lte: \($0.end)}," + } ?? "" + + return """ + query MyQuery { + stakingEraNominators( + filter: { + and: { + \(eraFilter) + staker: { + id: {equalTo: "\(accountAddress)"} + } + } + } + ) { + nodes { + nominations { + nodes { + validator { + stakerId + } + } + } + } + } + } + """ + } +} + +extension SoraSubqueryPayoutValidatorsForNominatorFactory: PayoutValidatorsFactoryProtocol { + func createResolutionOperation( + for address: AccountAddress, + eraRangeClosure _: @escaping () throws -> EraRange? + ) -> CompoundOperationWrapper<[AccountId]> { + let requestFactory = createRequestFactory(address: address, historyRange: { nil }) + let resultFactory = createResultFactory() + + let networkOperation = NetworkOperation(requestFactory: requestFactory, resultFactory: resultFactory) + return CompoundOperationWrapper(targetOperation: networkOperation) + } +} diff --git a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift index 845aed97f0..4c8b0de9c1 100644 --- a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SoraSubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift index beabedccff..ef8bb23754 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubqueryPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift index e589631193..a32c32f657 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift index 96c9ce2669..2f262ebb2b 100644 --- a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class ValidatorPayoutInfoFactory: PayoutInfoFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 5a264d4413..2395c4302e 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -32,10 +32,18 @@ final class PricesService: PricesServiceProtocol { self.operationQueue = operationQueue self.logger = logger self.eventCenter = eventCenter + eventCenter.add(observer: self) } func setup() { eventCenter.add(observer: self) + } + + func updatePrices() { + pricesProvider?.refresh() + } + + private func subscribe() { let walletsOperation = walletRepository.fetchAllOperation(with: RepositoryFetchOptions()) let chainsOperation = chainRepository.fetchAllOperation(with: RepositoryFetchOptions()) let subscribeOperation = ClosureOperation { [weak self] in @@ -51,10 +59,6 @@ final class PricesService: PricesServiceProtocol { subscribeOperation.addDependency(chainsOperation) operationQueue.addOperations([subscribeOperation, walletsOperation, chainsOperation], waitUntilFinished: false) } - - func updatePrices() { - pricesProvider?.refresh() - } } extension PricesService: PriceLocalSubscriptionHandler { @@ -74,9 +78,12 @@ extension PricesService: PriceLocalSubscriptionHandler { } extension PricesService: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + subscribe() + } + func processChainSyncDidComplete(event: ChainSyncDidComplete) { - let updatedChainAssets = event.newOrUpdatedChains.map(\.chainAssets).reduce([], +).uniq(predicate: { $0.chainAssetId }) - observePrices(for: updatedChainAssets, currencies: currencies) + subscribe() } func processChainsUpdated(event: ChainsUpdatedEvent) { @@ -84,7 +91,7 @@ extension PricesService: EventVisitorProtocol { observePrices(for: updatedChainAssets, currencies: currencies) } - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { let currency = event.account.selectedCurrency observePrices(for: chainAssets, currencies: [currency]) } @@ -133,13 +140,16 @@ private extension PricesService { var updatedChains: [ChainModel] = [] let uniqChains: [ChainModel] = chainAssets.compactMap { $0.chain }.uniq { $0.chainId } uniqChains.forEach { chain in + guard !chain.ecosystem.isTon else { + return + } var updatedAssets: [AssetModel] = [] chain.chainAssets.forEach { chainAsset in - let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId } + let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId || $0.coingeckoPriceId == chainAsset.asset.coingeckoPriceId } let updatedAsset = chainAsset.asset.replacingPrice(assetPrices) updatedAssets.append(updatedAsset) } - let updatedChain = chain.replacing(updatedAssets) + let updatedChain = chain.replacingAssets(updatedAssets) updatedChains.append(updatedChain) } let saveOperation = chainRepository.saveOperation({ diff --git a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift index e8c41c1b14..21a04f6959 100644 --- a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift +++ b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift @@ -15,7 +15,6 @@ final class AccountInfoUpdatingService { private(set) var selectedMetaAccount: MetaAccountModel private let chainRegistry: ChainRegistryProtocol private let substrateRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol - private let ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol private let logger: LoggerProtocol? private let eventCenter: EventCenterProtocol private var chains: [ChainModel.Id: ChainModel] = [:] @@ -36,14 +35,12 @@ final class AccountInfoUpdatingService { selectedAccount: MetaAccountModel, chainRegistry: ChainRegistryProtocol, remoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, - ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, logger: LoggerProtocol?, eventCenter: EventCenterProtocol ) { selectedMetaAccount = selectedAccount self.chainRegistry = chainRegistry substrateRemoteSubscriptionService = remoteSubscriptionService - self.ethereumRemoteSubscriptionService = ethereumRemoteSubscriptionService self.logger = logger self.eventCenter = eventCenter } @@ -54,14 +51,6 @@ final class AccountInfoUpdatingService { } } - private func getRemoteSubscriptionService(for chainAsset: ChainAsset) -> WalletRemoteSubscriptionServiceProtocol { - if chainAsset.chain.isEthereum { - return ethereumRemoteSubscriptionService - } else { - return substrateRemoteSubscriptionService - } - } - private func handle(changes: [DataProviderChange]) { for change in changes { switch change { @@ -94,16 +83,16 @@ final class AccountInfoUpdatingService { private func addSubscriptionIfNeeded(for chainAsset: ChainAsset, closure: RemoteSubscriptionClosure? = nil) { Task { - guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { - logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") + guard chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased, selectedMetaAccount.ecosystem.isRegular else { return } - guard !chainAsset.chain.isEthereum else { + guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") return } - let maybeSubscriptionId = await getRemoteSubscriptionService(for: chainAsset).attachToAccountInfo( + let maybeSubscriptionId = await substrateRemoteSubscriptionService.attachToAccountInfo( of: accountId, chainAsset: chainAsset, queue: nil, @@ -142,7 +131,7 @@ final class AccountInfoUpdatingService { return } - getRemoteSubscriptionService(for: chainAsset).detachFromAccountInfo( + substrateRemoteSubscriptionService.detachFromAccountInfo( for: subscriptionInfo.subscriptionId, chainAssetKey: key, queue: nil diff --git a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift index 2e8f0ff7ff..ce8041b489 100644 --- a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift +++ b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift @@ -3,20 +3,21 @@ import SSFModels import Web3 import Web3ContractABI import RobinHood +import SSFCrypto final class EthereumWalletRemoteSubscriptionService { private let chainRegistry: ChainRegistryProtocol private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, logger: LoggerProtocol, repository: AnyDataProviderRepository, operationManager: OperationManagerProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.logger = logger @@ -26,7 +27,7 @@ final class EthereumWalletRemoteSubscriptionService { } private func handleNewBlock(ws: Web3.Eth, chainAsset: ChainAsset, accountId: AccountId) throws { - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: try fetchEthBalance(for: chainAsset, ws: ws, accountId: accountId) case .erc20, .bep20: @@ -42,7 +43,7 @@ final class EthereumWalletRemoteSubscriptionService { ws.getBalance(address: ethereumAddress, block: .latest) { [weak self] resp in if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } } @@ -55,7 +56,7 @@ final class EthereumWalletRemoteSubscriptionService { let ethAddress = try EthereumAddress(rawAddress: address.hexToBytes()) contract.balanceOf(address: ethAddress).call(completion: { [weak self] response, _ in if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } }) diff --git a/fearless/Common/Services/ServiceCoordinator.swift b/fearless/Common/Services/ServiceCoordinator.swift index d042b5fbd6..e8cb022348 100644 --- a/fearless/Common/Services/ServiceCoordinator.swift +++ b/fearless/Common/Services/ServiceCoordinator.swift @@ -6,6 +6,7 @@ import SSFUtils import SSFChainRegistry import SSFNetwork import SSFStorageQueryKit +import SSFModels protocol ServiceCoordinatorProtocol: ApplicationServiceProtocol { func updateOnAccountChange() @@ -20,6 +21,8 @@ final class ServiceCoordinator { private let walletConnect: WalletConnectService private let walletAssetsObserver: WalletAssetsObserver private let pricesService: PricesServiceProtocol + private let tonConnectService: TonConnectService + private let toggleService: LocalToggleService init( walletSettings: SelectedWalletSettings, @@ -29,7 +32,9 @@ final class ServiceCoordinator { polkaswapSettingsService: PolkaswapSettingsSyncServiceProtocol, walletConnect: WalletConnectService, walletAssetsObserver: WalletAssetsObserver, - pricesService: PricesServiceProtocol + pricesService: PricesServiceProtocol, + tonConnectService: TonConnectService, + toggleService: LocalToggleService ) { self.walletSettings = walletSettings self.accountInfoService = accountInfoService @@ -39,6 +44,8 @@ final class ServiceCoordinator { self.walletConnect = walletConnect self.walletAssetsObserver = walletAssetsObserver self.pricesService = pricesService + self.tonConnectService = tonConnectService + self.toggleService = toggleService } } @@ -62,6 +69,8 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { walletConnect.setup() walletAssetsObserver.setup() pricesService.setup() + tonConnectService.setup() + toggleService.setup() } func throttle() { @@ -69,6 +78,7 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { accountInfoService.throttle() walletConnect.throttle() walletAssetsObserver.throttle() + tonConnectService.throttle() } } @@ -93,47 +103,15 @@ extension ServiceCoordinator { logger: logger ) - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - - let ethereumWalletRemoteSubscription = EthereumWalletRemoteSubscriptionService( - chainRegistry: chainRegistry, - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - let accountInfoService = AccountInfoUpdatingService( selectedAccount: selectedMetaAccount, chainRegistry: chainRegistry, remoteSubscriptionService: walletRemoteSubscription, - ethereumRemoteSubscriptionService: ethereumWalletRemoteSubscription, logger: logger, eventCenter: EventCenter.shared ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let walletAssetsObserver = WalletAssetsObserverImpl( wallet: selectedMetaAccount, chainRegistry: chainRegistry, @@ -151,32 +129,9 @@ extension ServiceCoordinator { polkaswapSettingsService: polkaswapSettingsService, walletConnect: walletConnect, walletAssetsObserver: walletAssetsObserver, - pricesService: PricesService.shared - ) - } - - private static func createPackageChainRegistry() -> SSFChainRegistry.ChainRegistryProtocol { - let chainSyncService = SSFChainRegistry.ChainSyncService( - chainsUrl: ApplicationConfig.shared.chainsSourceUrl, - operationQueue: OperationQueue(), - dataFetchFactory: SSFNetwork.NetworkOperationFactory() - ) - - let chainsTypesSyncService = SSFChainRegistry.ChainsTypesSyncService( - url: ApplicationConfig.shared.chainTypesSourceUrl, - dataOperationFactory: SSFNetwork.NetworkOperationFactory(), - operationQueue: OperationQueue() - ) - - let runtimeSyncService = SSFChainRegistry.RuntimeSyncService(dataOperationFactory: NetworkOperationFactory()) - - let chainRegistry = SSFChainRegistry.ChainRegistry( - runtimeProviderPool: SSFChainRegistry.RuntimeProviderPool(), - connectionPool: SSFChainRegistry.ConnectionPool(), - chainSyncService: chainSyncService, - chainsTypesSyncService: chainsTypesSyncService, - runtimeSyncService: runtimeSyncService + pricesService: PricesService.shared, + tonConnectService: ServiceAssembly.shared.tonConnectService(), + toggleService: ServiceAssembly.shared.localToggle ) - return chainRegistry } } diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index aaae08320f..4acb8d295c 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -5,6 +5,10 @@ import SSFModels import SSFUtils final class ChainModelMapper { + enum MapperError: Error { + case missingEcosystem + } + var entityIdentifierFieldName: String { #keyPath(CDChain.chainId) } typealias DataProviderModel = ChainModel @@ -25,7 +29,7 @@ final class ChainModelMapper { ) } - private func createAsset(from entity: CDAsset) -> AssetModel? { + private func createAsset(from entity: CDAsset, ecosystem: Ecosystem) -> AssetModel? { var symbol: String? if let entitySymbol = entity.symbol { symbol = entitySymbol @@ -65,13 +69,32 @@ final class ChainModelMapper { priceProvider = PriceProvider(type: type, id: id, precision: Int16(precision)) } + guard let assetType: ChainAssetType = entity.type.map({ type in + if let type = ChainAssetType(storageValue: type) { + return type + } + switch ecosystem { + case .substrate, .ethereumBased: + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + return .substrate(substrateType: substrateType) + case .ethereum: + let ethereumType = EthereumAssetType(rawValue: type) ?? .normal + return .ethereum(ethereumType: ethereumType) + case .ton: + let tonType = TonAssetType(rawValue: type) ?? .normal + return .ton(tonType: tonType) + } + }) else { + return nil + } + let priceDatas: [PriceData] = entity.priceData.or([]).compactMap { data in guard let priceData = data as? CDPriceData else { return nil } return createPriceData(from: priceData) } - + print("CoinbaseURL debug: createAsset: coinbaseUrl: \(entity.coinbaseUrl)") return AssetModel( id: id, name: name, @@ -85,11 +108,11 @@ final class ChainModelMapper { isNative: entity.isNative, staking: staking, purchaseProviders: purchaseProviders, - type: createChainAssetModelType(from: entity.type), - ethereumType: createEthereumAssetType(from: entity.ethereumType), + assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId, - priceData: priceDatas + priceData: priceDatas, + coinbaseUrl: entity.coinbaseUrl ) } @@ -125,11 +148,11 @@ final class ChainModelMapper { assetEntity.color = assetModel.color assetEntity.name = assetModel.name assetEntity.currencyId = assetModel.currencyId - assetEntity.type = assetModel.type?.rawValue + assetEntity.type = assetModel.assetType.rawValue assetEntity.isUtility = assetModel.isUtility assetEntity.isNative = assetModel.isNative assetEntity.staking = assetModel.staking?.rawValue - assetEntity.ethereumType = assetModel.ethereumType?.rawValue + assetEntity.coinbaseUrl = assetModel.coinbaseUrl let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = assetModel.priceProvider?.type.rawValue @@ -147,15 +170,15 @@ final class ChainModelMapper { entity.currencyId = priceData.currencyId entity.priceId = priceData.priceId entity.price = priceData.price - entity.fiatDayByChange = String("\(priceData.fiatDayChange)") + entity.fiatDayByChange = NSDecimalNumber(decimal: priceData.fiatDayChange ?? .zero).stringValue entity.coingeckoPriceId = priceData.coingeckoPriceId return entity } if let oldAssets = entity.assets as? Set, - let updatedAsset = oldAssets.first(where: { cdAsset in - cdAsset.id == assetModel.id + let updatedAsset = oldAssets.first(where: { asset in + asset.id == assetModel.id }) { if let oldPrices = updatedAsset.priceData as? Set { oldPrices.forEach { cdPriceData in @@ -166,13 +189,14 @@ final class ChainModelMapper { } } assetEntity.priceData = Set(priceData) as NSSet + print("CoinbaseURL debug: updateEntityAsset: coinbaseUrl: \(assetEntity.coinbaseUrl)") return assetEntity } if let oldAssets = entity.assets as? Set { - oldAssets.forEach { cdAsset in - context.delete(cdAsset) + oldAssets.forEach { asset in + context.delete(asset) } } @@ -438,22 +462,6 @@ final class ChainModelMapper { entity.pricingApiUrl = apis?.pricing?.url } - private func createChainAssetModelType(from rawValue: String?) -> SubstrateAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return SubstrateAssetType(rawValue: rawValue) - } - - private func createEthereumAssetType(from rawValue: String?) -> EthereumAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return EthereumAssetType(rawValue: rawValue) - } - private func updateXcmConfig( in entity: CDChain, from xcmConfig: XcmChain?, @@ -502,6 +510,9 @@ final class ChainModelMapper { extension ChainModelMapper: CoreDataMapperProtocol { func transform(entity: CDChain) throws -> ChainModel { + guard let ecosystemRaw = entity.ecosystem, let ecosystem = Ecosystem(rawValue: ecosystemRaw) else { + throw ChainModelMapper.MapperError.missingEcosystem + } let nodes: [ChainNodeModel] = entity.nodes?.compactMap { anyNode in guard let node = anyNode as? CDChainNode else { return nil @@ -549,6 +560,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { } let chainModel = ChainModel( + ecosystem: ecosystem, rank: rank, disabled: entity.disabled, chainId: entity.chainId!, @@ -565,7 +577,8 @@ extension ChainModelMapper: CoreDataMapperProtocol { selectedNode: selectedNode, customNodes: customNodesSet, iosMinAppVersion: entity.minimalAppVersion, - identityChain: entity.identityChain + identityChain: entity.identityChain, + tonBridgeUrl: entity.tonBridgeUrl ) let assetsArray: [AssetModel] = entity.assets.or([]).compactMap { anyAsset in @@ -573,7 +586,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { return nil } - return createAsset(from: asset) + return createAsset(from: asset, ecosystem: ecosystem) } let assets = Set(assetsArray) @@ -590,6 +603,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { if let rank = model.rank { entity.rank = "\(rank)" } + entity.ecosystem = model.ecosystem.rawValue entity.disabled = model.disabled entity.chainId = model.chainId entity.paraId = model.paraId @@ -607,6 +621,8 @@ extension ChainModelMapper: CoreDataMapperProtocol { entity.minimalAppVersion = model.iosMinAppVersion entity.options = model.options?.map(\.rawValue) as? NSArray entity.identityChain = model.identityChain + entity.tonBridgeUrl = model.tonBridgeUrl + updateEntityAsset(for: entity, from: model, context: context) updateEntityNodes(for: entity, from: model, context: context) updateExternalApis(in: entity, from: model.externalApi) diff --git a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift b/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift deleted file mode 100644 index b728157b4c..0000000000 --- a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift +++ /dev/null @@ -1,156 +0,0 @@ -import Foundation -import RobinHood -import CoreData -import SSFAccountManagmentStorage -import SSFModels - -final class MetaAccountMapper { - var entityIdentifierFieldName: String { #keyPath(CDMetaAccount.metaId) } - - typealias DataProviderModel = MetaAccountModel - typealias CoreDataEntity = CDMetaAccount -} - -extension MetaAccountMapper: CoreDataMapperProtocol { - func transform(entity: CoreDataEntity) throws -> DataProviderModel { - let chainAccounts: [ChainAccountModel] = try entity.chainAccounts?.compactMap { entity in - guard let chainAccontEntity = entity as? CDChainAccount else { - return nil - } - - let ethereumBased = chainAccontEntity.ethereumBased - - let accountId = try Data(hexStringSSF: chainAccontEntity.accountId!) - return ChainAccountModel( - chainId: chainAccontEntity.chainId!, - accountId: accountId, - publicKey: chainAccontEntity.publicKey!, - cryptoType: UInt8(bitPattern: Int8(chainAccontEntity.cryptoType)), - ethereumBased: ethereumBased - ) - } ?? [] - - var selectedCurrency: Currency? - if let currency = entity.selectedCurrency, - let id = currency.id, - let symbol = currency.symbol, - let name = currency.name, - let icon = currency.icon { - selectedCurrency = Currency( - id: id, - symbol: symbol, - name: name, - icon: icon, - isSelected: currency.isSelected - ) - } - - let substrateAccountId = try Data(hexStringSSF: entity.substrateAccountId!) - let ethereumAddress = try entity.ethereumAddress.map { try Data(hexStringSSF: $0) } - let assetsVisibility: [AssetVisibility]? = (entity.assetsVisibility?.allObjects as? [CDAssetVisibility])?.compactMap { - guard let assetId = $0.assetId else { - return nil - } - - return AssetVisibility(assetId: assetId, hidden: $0.hidden) - } - var favouriteChainIds: [String] = [] - if let entityFavouriteChainIds = entity.favouriteChainIds { - favouriteChainIds = (entityFavouriteChainIds as? [String]) ?? [] - } - - return DataProviderModel( - metaId: entity.metaId!, - name: entity.name!, - substrateAccountId: substrateAccountId, - substrateCryptoType: UInt8(bitPattern: Int8(entity.substrateCryptoType)), - substratePublicKey: entity.substratePublicKey!, - ethereumAddress: ethereumAddress, - ethereumPublicKey: entity.ethereumPublicKey, - chainAccounts: Set(chainAccounts), - assetKeysOrder: entity.assetKeysOrder as? [String], - canExportEthereumMnemonic: entity.canExportEthereumMnemonic, - unusedChainIds: entity.unusedChainIds as? [String], - selectedCurrency: selectedCurrency ?? Currency.defaultCurrency(), - networkManagmentFilter: entity.networkManagmentFilter, - assetsVisibility: assetsVisibility ?? [], - hasBackup: entity.hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func populate( - entity: CoreDataEntity, - from model: DataProviderModel, - using context: NSManagedObjectContext - ) throws { - entity.metaId = model.metaId - entity.name = model.name - entity.substrateAccountId = model.substrateAccountId.toHex() - entity.substrateCryptoType = Int16(bitPattern: UInt16(model.substrateCryptoType)) - entity.substratePublicKey = model.substratePublicKey - entity.ethereumPublicKey = model.ethereumPublicKey - entity.ethereumAddress = model.ethereumAddress?.toHex() - entity.assetKeysOrder = model.assetKeysOrder as? NSArray - entity.canExportEthereumMnemonic = model.canExportEthereumMnemonic - entity.unusedChainIds = model.unusedChainIds as? NSArray - entity.networkManagmentFilter = model.networkManagmentFilter - entity.hasBackup = model.hasBackup - entity.favouriteChainIds = model.favouriteChainIds as NSArray - - for assetVisibility in model.assetsVisibility { - var assetVisibilityEntity = entity.assetsVisibility?.first { entity in - (entity as? CDAssetVisibility)?.assetId == assetVisibility.assetId - } as? CDAssetVisibility - - if assetVisibilityEntity == nil { - let newEntity = CDAssetVisibility(context: context) - entity.addToAssetsVisibility(newEntity) - assetVisibilityEntity = newEntity - } - - assetVisibilityEntity?.assetId = assetVisibility.assetId - assetVisibilityEntity?.hidden = assetVisibility.hidden - } - - for chainAccount in model.chainAccounts { - var chainAccountEntity = entity.chainAccounts?.first { - if let entity = $0 as? CDChainAccount, - entity.chainId == chainAccount.chainId { - return true - } else { - return false - } - } as? CDChainAccount - - if chainAccountEntity == nil { - let newEntity = CDChainAccount(context: context) - entity.addToChainAccounts(newEntity) - chainAccountEntity = newEntity - } - - chainAccountEntity?.accountId = chainAccount.accountId.toHex() - chainAccountEntity?.chainId = chainAccount.chainId - chainAccountEntity?.cryptoType = Int16(bitPattern: UInt16(chainAccount.cryptoType)) - chainAccountEntity?.publicKey = chainAccount.publicKey - chainAccountEntity?.ethereumBased = chainAccount.ethereumBased - } - - updatedEntityCurrency(for: entity, from: model, context: context) - } - - private func updatedEntityCurrency( - for entity: CoreDataEntity, - from model: DataProviderModel, - context: NSManagedObjectContext - ) { - let currencyEntity = CDCurrency(context: context) - currencyEntity.id = model.selectedCurrency.id - currencyEntity.name = model.selectedCurrency.name - currencyEntity.symbol = model.selectedCurrency.symbol - currencyEntity.icon = model.selectedCurrency.icon - currencyEntity.isSelected = model.selectedCurrency.isSelected ?? false - - entity.selectedCurrency = currencyEntity - } -} diff --git a/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift new file mode 100644 index 0000000000..a4dd718ea2 --- /dev/null +++ b/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift @@ -0,0 +1,32 @@ +import Foundation +import SSFModels +import CoreData + +class AssetSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + guard let updatedAssetModel = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first else { + throw ConvenienceError(error: "Can't create destination instance") + } + + if let ethereumType = sInstance.value(forKey: "ethereumType") as? String { + updatedAssetModel.setValue("ethereum-" + ethereumType, forKey: "type") + } else if let type = sInstance.value(forKey: "type") as? String { + updatedAssetModel.setValue("substrate-" + type, forKey: "type") + } + + manager.associate( + sourceInstance: sInstance, + withDestinationInstance: updatedAssetModel, + for: mapping + ) + } +} diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift new file mode 100644 index 0000000000..f03083a911 --- /dev/null +++ b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift @@ -0,0 +1,35 @@ +import Foundation +import SSFModels +import CoreData + +class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + guard let updatedChainModel = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first else { + throw ConvenienceError(error: "Can't create destination instance") + } + + let options = sInstance.value(forKey: "options") as? [String] + if options?.contains("ethereum") == true { + updatedChainModel.setValue("ethereum", forKey: "ecosystem") + } else if options?.contains("ethereumBased") == true { + updatedChainModel.setValue("ethereumBased", forKey: "ecosystem") + } else { + updatedChainModel.setValue("substrate", forKey: "ecosystem") + } + + manager.associate( + sourceInstance: sInstance, + withDestinationInstance: updatedChainModel, + for: mapping + ) + } +} diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift index 817bfc8d20..4d5c99a7cb 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift @@ -9,6 +9,7 @@ enum SubstrateStorageVersion: String, CaseIterable { case version6 = "SubstrateDataModel_v6" case version7 = "SubstrateDataModel_v7" case version8 = "SubstrateDataModel_v8" + case version9 = "SubstrateDataModel_v9" static var current: SubstrateStorageVersion { guard let currentVersion = allCases.last else { @@ -35,6 +36,8 @@ enum SubstrateStorageVersion: String, CaseIterable { case .version7: return .version8 case .version8: + return .version9 + case .version9: return nil } } diff --git a/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift new file mode 100644 index 0000000000..82eef8017a --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift @@ -0,0 +1,18 @@ +import CoreData + +class CDChainAccountMigrationPolicyV12: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "ecosystem") + } + } +} diff --git a/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift new file mode 100644 index 0000000000..74e0e44d15 --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift @@ -0,0 +1,46 @@ +// +// CDMetaAccountMigrationPolicy.swift +// fearless +// +// Created by Soramitsu on 04.11.2024. +// Copyright © 2024 Soramitsu. All rights reserved. +// + +import CoreData + +class CDMetaAccountMigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "tonAddress") + destination.setValue(nil, forKey: "tonContractVersion") + destination.setValue(nil, forKey: "tonPublicKey") + + if destination.value(forKey: "substrateAccountId") == nil { + destination.setValue(nil, forKey: "substrateAccountId") + } + if destination.value(forKey: "substrateCryptoType") == nil { + destination.setValue(0, forKey: "substrateCryptoType") + } + if destination.value(forKey: "substratePublicKey") == nil { + destination.setValue(nil, forKey: "substratePublicKey") + } +// let substrateAccountId = destination.value(forKey: "substrateAccountId") +// destination.setValue(substrateAccountId, forKey: "substrateAccountId") +// +// let substrateCryptoType = destination.value(forKey: "substrateCryptoType") +// destination.setValue(substrateAccountId, forKey: "substrateCryptoType") +// +// let substratePublicKey = destination.value(forKey: "substratePublicKey") +// destination.setValue(substrateAccountId, forKey: "substratePublicKey") + } + } +} diff --git a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift index b1535d2386..55bd17c276 100644 --- a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift +++ b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift @@ -13,6 +13,7 @@ enum UserStorageVersion: String, CaseIterable { case version10 = "MultiassetUserDataModel_v9" case version11 = "MultiassetUserDataModel_v10" case version12 = "MultiassetUserDataModel_v11" + case version13 = "MultiassetUserDataModel_v12" static var current: UserStorageVersion { guard let currentVersion = allCases.last else { @@ -47,6 +48,8 @@ enum UserStorageVersion: String, CaseIterable { case .version11: return .version12 case .version12: + return .version13 + case .version13: return nil } } diff --git a/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..a68d7fc758 --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml @@ -0,0 +1,316 @@ + + + + + + 134481920 + 492BE521-0877-4A2F-8735-F7E04AE37625 + 153 + + + + NSPersistenceFrameworkVersion + 1344 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + name + + + + 1 + assetsVisibility + + + + ecosystem + + + + name + + + + 1 + selectedCurrency + + + + networkManagmentFilter + + + + fearless.CDChainAccountMigrationPolicyV12 + CDChainAccount + Undefined + 4 + CDChainAccount + 1 + + + + + + issueMuted + + + + substrateAccountId + + + + favouriteChainIds + + + + 1 + chainAccounts + + + + assetKeysOrder + + + + icon + + + + assetFilterOptions + + + + name + + + + publicKey + + + + substrateCryptoType + + + + isSelected + + + + accountId + + + + symbol + + + + CDAssetVisibility + Undefined + 5 + CDAssetVisibility + 1 + + + + + + 1 + metaAccount + + + + data + + + + hidden + + + + chainId + + + + canExportEthereumMnemonic + + + + 1 + wallet + + + + + CDAccountInfo + Undefined + 1 + CDAccountInfo + 1 + + + + + + tonAddress + + + + order + + + + unusedChainIds + + + + tonContractVersion + + + + url + + + + substratePublicKey + + + + metaId + + + + hasBackup + + + + CDChainSettings + Undefined + 6 + CDChainSettings + 1 + + + + + + ethereumAddress + + + + CDCustomChainNode + Undefined + 2 + CDCustomChainNode + 1 + + + + + + id + + + + assetId + + + + cryptoType + + + + identifier + + + + tonPublicKey + + + + fearless.CDMetaAccountMigrationPolicy + CDMetaAccount + Undefined + 3 + CDMetaAccount + 1 + + + + + + zeroBalanceAssetsHidden + + + + ethereumPublicKey + + + + chainId + + + + isSelected + + + + autobalanced + + + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v11.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEEvQALAAwAGQA1ADYANwBLAEwATQBOAE8AUABRAFIAbQBuAG8AdQB2AIIAmACZAJoAmwCcAJ0AngCfAKAAoQC6AL0AxADKANkA6ADrAPoBCQEMAGwBHAErAS8BMwFCAUgBSQFRAWABYQFqAXQBdQF2AXcBjAGNAZUBlgGXAaMBtwG4AbkBugG7AbwBvQG+Ab8BzgHdAewB8AH/Ag4CDwIeAi0CPAJIAloCWwJcAl0CXgJfAmACYQJwAn8CjgKdAp4CrQK8AssC0wLoAukC8QLyAv4DEgMhAzADPwNDA1IDYQNwA38DjgOaA6wDrQOuA68DsAOxA7IDswAvA8ID0QPSA+ED8AQKBAsEEQQdBDMEQgRFBFQEYwRmBHUEhASHBJYEpQSpBLgExwTIBPQE9QT2BPcE+AT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUIBR0FHgUmBTIFRgVVBWQFcwV3BYYFlQWkBbMFwgXOBeAF7wX+Bg0GHAYrBjoGSQZeBl8GZwZzBocGlgalBrQGuAbHBtYG5Qb0BwMHDwchBzAHMQdAB08HXgdfB24HfQeMB6EHogeqB7YHygfZB+gH9wf7CAoIGQgoCDcIRghSCGQIcwiCCJEIoAihCLAIvwjACM8I5AjlCO0I+QkNCRwJKwk6CT4JTQlcCWsJegmJCZUJpwm2CcUJxgnVCeQJ8woCChEKGQouCi8KNwpDClcKZgp1CoQKiAqXCqYKtQrECtMK3wrxCwALDwseCy0LPAtLC1oLbwtwC3gLhAuYC6cLtgvFC8kL2AvnC/YMBQwUDCAMMgxBDFAMXwxuDH0MjAybDLAMsQy5DMUM2QzoDPcNBg0KDRkNKA03DUYNVQ1hDXMNgg2RDaANrw2+Dc0Nzg3dDfIN8w37DgcOGw4qDjkOSA5MDlsOag55DogOlw6jDrUOxA7TDuIO8Q8ADw8PHg8zDzQPPA9ID1wPaw96D4kPjQ+cD6sPug/JD9gP5A/2EAUQFBAjEDIQQRBQEFEQYBB1EHYQfhCKEJ4QrRC8EMsQzxDeEO0Q/BELERoRJhE4EUcRVhFlEXQRdRGEEZMRohG3EbgRwBHMEeAR7xH+Eg0SERIgEi8SPhJNElwSaBJ6EokSmBKnErYSxRLUEuMS+BL5EwETDRMhEzATPxNOE1ITYRNwE38TjhOdE6kTuRPIE+IT4xPpE/UUCxQaFB0ULBQ7FD4UTRRcFF8UbhR9FIEUkBSfFKAUrhSvFLAUsRTGFMcUzxTbFO8U/hUNFRwVIBUvFT4VTRVcFWsVdxWJFZgVpxW2FcUV1BXjFfIWBxYIFhAWHBYwFj8WThZdFmEWcBZ/Fo4WnRasFrgWyhbZFugW9xcGFxUXJBczF0gXSRdRF10XcReAF48XnheiF7EXwBfPF94X7Rf5GAsYGhgpGDgYRxhWGGUYdBiJGIoYkhieGLIYwRjQGN8Y4xjyGQEZEBkfGS4ZOhlMGVsZahl5GYgZlxmmGbUZyhnLGdMZ3xnzGgIaERogGiQaMxpCGlEaYBpvGnsajRqcGqsauhrJGtga5xr2Gvca+hsDGxIbIRswGz8bThtjG2QbbBt4G4wbmxuqG7kbvRvMG9sb6hv5HAgcFBwmHDUcRBxTHGIccRyAHI8cpBylHK0cuRzNHNwc6xz6HP4dDR0cHSsdOh1JHVUdZx12HYUdlB2jHbIdwR3QHeUd5h3uHfoeDh4dHiweOx4/Hk4eXR5sHnseih6WHqgetx7GHtUe5B7zHwIfAx8SHycfKB8wHzwfUB9fH24ffR+BH5Afnx+uH70fzB/YH+of+SAIIBcgJiBAIEEgRyBTIGkgeCB7IIogmSCcIKsguiC9IMwg2yDfIO4g/SD+IQ4hDyEQIREhEiETIRQhKSEqITIhPiFSIWEhcCF/IYMhkiGhIbAhvyHOIdoh7CH7IfwiCyIaIikiKiI5IkgiVyJsIm0idSKBIpUipCKzIsIixiLVIuQi8yMCIxEjHSMvIz4jTSNcI2sjeiOJI5gjrSOuI7YjwiPWI+Uj9CQDJAckFiQlJDQkQyRSJF4kcCR/JI4knSSsJLskyiTZJO4k7yT3JQMlFyUmJTUlRCVIJVclZiV1JYQlkyWfJbElwCXPJd4l7SX8JgsmGiYvJjAmOCZEJlgmZyZ2JoUmiSaYJqcmtibFJtQm4CbyJwEnECcfJy4nPSdMJ1sncCdxJ3knhSeZJ6gntyfGJ8on2SfoJ/coBigVKCEoMyhCKFEoYChvKH4ojSicKJ8orii9KMwo4SjiKOoo9ikKKRkpKCk3KTspSilZKWgpdymGKZIppCmzKcIp0SngKeEp8Cn/Kg4qIyokKiwqOCpMKlsqaip5Kn0qjCqbKqoquSrIKtQq5ir1KwQrEysiKzErQCtPK2QrZSttK3krjSucK6sruiu+K80r3CvrK/osCSwVLCcsNixFLFQsYyxyLIEskCylLKYsriy6LM4s3SzsLPss/y0OLR0tLC07LUotVi1oLXcthi2VLaQtsy3CLdEt1C3jLfIuAS4WLhcuHy4rLj8uTi5dLmwucC5/Lo4unS6sLrsuxy7ZLugu9y8GLxUvJC8zL0IvRS9fL2AvZi9yL4gvly+aL6kvuC+7L8ov2S/cL+sv+i/+MA0wHDAdMCUwJjA7MDwwRDBQMGQwczCCMJEwlTCkMLMwwjDRMOAw7DD+MQ0xHDErMToxSTFYMWcxfDF9MYUxkTGlMbQxwzHSMdYx5TH0MgMyEjIhMi0yPzJOMl0ybDJ7MnwyizKaMqkyrDLGMscyzTLZMu8y/jMBMxAzHzMiMzEzQDNDM1IzYTNlM3QzgzOEM4wzjTOOM6MzpDOsM7gzzDPbM+oz+TP9NAw0GzQqNDk0SDRUNGY0dTSENJM0ojSxNMA0zzTkNOU07TT5NQ01HDUrNTo1PjVNNVw1azV6NYk1lTWnNbY1xTXUNeM18jYBNhA2EzYtNi42NDZANlY2ZTZoNnc2hjaJNpg2pzaqNrk2yDbMNts26jbrNvU29jb3Nww3DTcVNyE3NTdEN1M3YjdmN3U3hDeTN6I3sTe9N8833jffN+43/TgMOBs4Kjg5OE44TzhXOGM4dziGOJU4pDioOLc4xjjVOOQ48zj/ORE5IDkvOT45TTlcOWs5ejmPOZA5mDmkObg5xznWOeU56Tn4Ogc6FjolOjQ6QDpSOmE6cDp/Oo46nTqsOrs6vjrCOsY6yjrSOtU62TraVSRudWxs1gANAA4ADwAQABEAEgATABQAFQAWABcAGF8QD194ZF9yb290UGFja2FnZVYkY2xhc3NdX3hkX21vZGVsTmFtZVxfeGRfY29tbWVudHNfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgQS8gACBBLmBBLqBBLveABoAGwAcAB0AHgAfACAADgAhACIAIwAkACUAJgAnACgAKQAJACcAFQAtAC4ALwAwADEAJwAnABVfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBLeBBLWAAYAEgACBBLaBBLgQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYECq4EDzoEEE4CAgQRYgQG/gCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECSYAEgA+BAkuABoAPgQPNgA4IEmhP0BxXb3JkZXJlZNMAOAA5AA4AcAByAEqhAHGAEaEAc4ASgCteWERfUFN0ZXJlb3R5cGXZAB8AIwB3AA4AJgB4ACEAXQB5AEMAcQBeAH0AFQAnAC8AbACBXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgA2AEYAPgDKAAIAECIAT0wA4ADkADgCDAI0ASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypAI4AjwCQAJEAkgCTAJQAlQCWgB2AIYAigCSAJYAngCmALIAwgCtfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZYRF9QU0tfZW50aXR5Q2xhc3NOYW1l3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUArQAVAHMAbABsAGwALwBsALQAhABsAGwAFQBsVV90eXBlWF9kZWZhdWx0XF9hc3NvY2lhdGlvbltfaXNSZWFkT25seVlfaXNTdGF0aWNZX2lzVW5pcXVlWl9pc0Rlcml2ZWRaX2lzT3JkZXJlZFxfaXNDb21wb3NpdGVXX2lzTGVhZoAAgB6AAIASCAgICIAggBQICIAACNIAOQAOALsAvKCAH9IAvgC/AMAAwVokY2xhc3NuYW1lWCRjbGFzc2VzXk5TTXV0YWJsZUFycmF5owDAAMIAw1dOU0FycmF5WE5TT2JqZWN00gC+AL8AxQDGXxAQWERVTUxQcm9wZXJ0eUltcKQAxwDIAMkAw18QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIASCAgICIAggBUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVANsAFQBzAGwAbABsAC8AbAC0AIYAbABsABUAbIAAgCOAAIASCAgICIAggBYICIAACNIAOQAOAOkAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIASCAgICIAggBcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAPwAFQBzAGwAbABsAC8AbAC0AIgAbABsABUAbIAAgCaAAIASCAgICIAggBgICIAACNIAOQAOAQoAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQBzAGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIASCAgICIAggBkICIAACAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEeABUAcwBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIAqgACAEggICAiAIIAaCAiAAAjTADgAOQAOASwBLQBKoKCAK9IAvgC/ATABMV8QE05TTXV0YWJsZURpY3Rpb25hcnmjATABMgDDXE5TRGljdGlvbmFyed8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVATUAFQBzAGwAbABsAC8AbAC0AIsAbABsABUAbIAAgC2AAIASCAgICIAggBsICIAACNYAIwAOACYAXQAfACEBQwFEABUAbAAVAC+ALoAvgAAIgABfEBRYREdlbmVyaWNSZWNvcmRDbGFzc9IAvgC/AUoBS11YRFVNTENsYXNzSW1wpgFMAU0BTgFPAVAAw11YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1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AbAAvAGwAtAGsAGwAbAAVAGyAAIAogACAqwgICAiAIIBFCAiAAAjZAB8AIwXDAA4AJgXEACEAXQXFBN8BkABeAH0AFQAnAC8AbAXNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgKiAO4APgDKAAIAECIC30wA4ADkADgXPBdcASqcCSgJLAkwCTQJOAk8CUIBSgFOAVIBVgFaAV4BYpwXYBdkF2gXbBdwF3QXegLiAuYC6gLuAvIC9gL6AK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkoAbABsABUAbIAAgACAAIC2CAgICIAggFIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQUkAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIC2CAgICIAggFMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkwAbABsABUAbIAAgACAAIC2CAgICIAggFQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVApAAFQUkAGwAbABsAC8AbAC0Ak0AbABsABUAbIAAgF2AAIC2CAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIC2CAgICIAggFYICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak8AbABsABUAbIAAgACAAIC2CAgICIAggFcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIC2CAgICIAggFgICIAACN8QEgCiAKMApAZKAB8ApgCnBksAIQClBkwAqAAOACMAqQCqACY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TADgAOQAOB/gH+QBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIDbCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQenAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAIDbCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIDbCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQenAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIDbCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIDbCAgICIAggEUICIAACNkAHwAjCEcADgAmCEgAIQBdCEkE4QGQAF4AfQAVACcALwBsCFFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA2IA7gA+AMoAAgAQIgOfTADgAOQAOCFMIWwBKpwJKAksCTAJNAk4CTwJQgFKAU4BUgFWAVoBXgFinCFwIXQheCF8IYAhhCGKA6IDpgOqA64DtgO6A8IAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCSgBsAGwAFQBsgACAAIAAgOYICAgIgCCAUggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVB6gAbABsAGwALwBsALQCSwBsAGwAFQBsgACAKIAAgOYICAgIgCCAUwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTABsAGwAFQBsgACAAIAAgOYICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIkwAVB6gAbABsAGwALwBsALQCTQBsAGwAFQBsgACA7IAAgOYICAgIgCCAVQgIgAAIEQcI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTgBsAGwAFQBsgACAAIAAgOYICAgIgCCAVggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIsgAVB6gAbABsAGwALwBsALQCTwBsAGwAFQBsgACA74AAgOYICAgIgCCAVwgIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQeoAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIDmCAgICIAggFgICIAACN8QEgCiAKMApAjQAB8ApgCnCNEAIQClCNIAqAAOACMAqQCqACYAqwAVABUAFQAnAEcAbABsCNoALwBsAF4AbALiBM0AbABsCOIAbF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgIAICIDzCIAPCIEBCYCXCAiA8ggSmEQ1MdMAOAA5AA4I5gjpAEqiAY8C7IA6gGWiCOoI64D0gP+AK9kAHwAjCO4ADgAmCO8AIQBdCPAE4gGPAF4AfQAVACcALwBsCPhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YA6gA+AMoAAgAQIgPXTADgAOQAOCPoJAwBKqAGlAaYBpwGoAakBqgGrAayAPoA/gECAQYBCgEOARIBFqAkECQUJBgkHCQgJCQkKCQuA9oD3gPiA+oD7gPyA/YD+gCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUI6gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACA9AgICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUI6gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACA9AgICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQktABUI6gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAID5gACA9AgICAiAIIBACAiAAAjTADgAOQAOCTsJPABKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAID0CAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQjqAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAID0CAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAID0CAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQjqAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAID0CAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAID0CAgICIAggEUICIAACNkAHwAjCYoADgAmCYsAIQBdCYwE4gLsAF4AfQAVACcALwBsCZRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YBlgA+AMoAAgAQIgQEA0wA4ADkADgmWCZ4ASqcDnAOdA54DnwOgA6EDooBzgHSAdYB2gHeAeIB5pwmfCaAJoQmiCaMJpAmlgQEBgQECgQEEgQEFgQE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AEXUAABF3AAARgAAAEYsAABGUAAARowAAEaoAABGyAAARuwAAEcQAABHXAAAR4AAAEfMAABIKAAASHAAAElsAABJdAAASXwAAEmEAABJjAAASZAAAEmUAABJmAAASZwAAEmkAABJrAAASbAAAEm0AABJvAAAScAAAEq8AABKxAAASswAAErUAABK3AAASuAAAErkAABK6AAASuwAAEr0AABK/AAASwAAAEsEAABLDAAASxAAAEs0AABLOAAAS0AAAEw8AABMRAAATEwAAExUAABMXAAATGAAAExkAABMaAAATGwAAEx0AABMfAAATIAAAEyEAABMjAAATJAAAE2MAABNlAAATZwAAE2kAABNrAAATbAAAE20AABNuAAATbwAAE3EAABNzAAATdAAAE3UAABN3AAATeAAAE4EAABOCAAAThAAAE8MAABPFAAATxwAAE8kAABPLAAATzAAAE80AABPOAAATzwAAE9EAABPTAAAT1AAAE9UAABPXAAAT2AAAE9kAABQYAAAUGgAAFBwAABQeAAAUIAAAFCEAABQiAAAUIwAAFCQAABQmAAAUKAAAFCkAABQqAAAULAAAFC0AABQ6AAAUOwAAFDwAABQ+AAAURwAAFF0AABRkAAAUcQAAFLAAABSyAAAUtAAAFLYAABS4AAAUuQAAFLoAABS7AAAUvAAAFL4AABTAAAAUwQAAFMIAABTEAAAUxQAAFN4AABTgAAAU4gAAFOQAABTlAAAU5wAAFP4AABUHAAAVFQAAFSIAABUwAAAVRQAAFVkAABVwAAAVggAAFcEAABXDAAAVxQAAFccAABXJAAAVygAAFcsAABXMAAAVzQAAFc8AABXRAAAV0gAAFdMAABXVAAAV1gAAFeoAABXzAAAWCAAAFhcAABYsAAAWOgAAFk8AABZjAAAWegAAFowAABaZAAAWoAAAFqIAABakAAAWpgAAFq0AABavAAAWsQAAFrQAABa2AAAWvgAAFsUAABbMAAAXFwAAFzoAABdaAAAXegAAF3wAABd+AAAXgAAAF4IAABeEAAAXhQAAF4YAABeIAAAXiQAAF4sAABeMAAAXjgAAF5AAABeRAAAXkgAAF5QAABeVAAAXmgAAF6cAABesAAAXrgAAF7AAABe1AAAXtwAAF7kAABe7AAAX0AAAF+UAABgKAAAYLgAAGFUAABh5AAAYewAAGH0AABh/AAAYgQAAGIMAABiFAAAYhgAAGIgAABiVAAAYpgAAGKgAABiqAAAYrAAAGK4AABiwAAAYsgAAGLQAABi2AAAYxwAAGMkAABjLAAAYzQAAGM8AABjRAAAY0wAAGNUAABjXAAAY2QAAGPcAABkVAAAZKAAAGTwAABlRAAAZbgAAGYIAABmYAAAZ1wAAGdkAABnbAAAZ3QAAGd8AABngAAAZ4QAAGeIAABnjAAAZ5QAAGecAABnoAAAZ6QAAGesAABnsAAAaKwAAGi0AABovAAAaMQAAGjMAABo0AAAaNQAAGjYAABo3AAAaOQAAGjsAABo8AAAaPQAAGj8AABpAAAAafwAAGoEAABqDAAAahQAAGocAABqIAAAaiQAAGooAABqLAAAajQAAGo8AABqQAAAakQAAGpMAABqUAAAaoQAAGqIAABqjAAAapQAAGuQAABrmAAAa6AAAGuoAABrsAAAa7QAAGu4AABrvAAAa8AAAGvIAABr0AAAa9QAAGvYAABr4AAAa+QAAGzgAABs6AAAbPAAAGz4AABtAAAAbQQAAG0IAABtDAAAbRAAAG0YAABtIAAAbSQAAG0oAABtMAAAbTQAAG04AABuNAAAbjwAAG5EAABuTAAAblQAAG5YAABuXAAAbmAAAG5kAABubAAAbnQAAG54AABufAAAboQAAG6IAABvhAAAb4wAAG+UAABvnAAAb6QAAG+oAABvrAAAb7AAAG+0AABvvAAAb8QAAG/IAABvzAAAb9QAAG/YAABw1AAAcNwAAHDkAABw7AAAcPQAAHD4AABw/AAAcQAAAHEEAABxDAAAcRQAAHEYAABxHAAAcSQAAHEoAABxvAAAckwAAHLoAABzeAAAc4AAAHOIAABzkAAAc5gAAHOgAABzqAAAc6wAAHO0AABz6AAAdCQAAHQsAAB0NAAAdDwAAHREAAB0TAAAdFQAAHRcAAB0mAAAdKAAAHSoAAB0sAAAdLgAAHTAAAB0yAAAdNAAAHTYAAB1WAAAdgQAAHZsAAB20AAAdzgAAHe4AAB4RAAAeUAAAHlIAAB5UAAAeVgAAHlgAAB5ZAAAeWgAAHlsAAB5cAAAeXgAAHmAAAB5hAAAeYgAAHmQAAB5lAAAepAAAHqYAAB6oAAAeqgAAHqwAAB6tAAAergAAHq8AAB6wAAAesgAAHrQAAB61AAAetgAAHrgAAB65AAAe+AAAHvoAAB78AAAe/gAAHwAAAB8BAAAfAgAAHwMAAB8EAAAfBgAAHwgAAB8JAAAfCgAAHwwAAB8NAAAfTAAAH04AAB9QAAAfUgAAH1QAAB9VAAAfVgAAH1cAAB9YAAAfWgAAH1wAAB9dAAAfXgAAH2AAAB9hAAAfZAAAH6MAAB+lAAAfpwAAH6kAAB+rAAAfrAAAH60AAB+uAAAfrwAAH7EAAB+zAAAftAAAH7UAAB+3AAAfuAAAH/cAAB/5AAAf+wAAH/0AAB//AAAgAAAAIAEAACACAAAgAwAAIAUAACAHAAAgCAAAIAkAACALAAAgDAAAIEsAACBNAAAgTwAAIFEAACBTAAAgVAAAIFUAACBWAAAgVwAAIFkAACBbAAAgXAAAIF0AACBfAAAgYAAAIGkAACB3AAAghAAAIJIAACCfAAAgsgAAIMkAACDbAAAhJgAAIUkAACFpAAAhiQAAIYsAACGNAAAhjwAAIZEAACGTAAAhlAAAIZUAACGXAAAhmAAAIZoAACGbAAAhngAAIaAAACGhAAAhogAAIaQAACGlAAAhqgAAIbcAACG8AAAhvgAAIcAAACHFAAAhxwAAIckAACHLAAAh3gAAIgMAACInAAAiTgAAInIAACJ0AAAidgAAIngAACJ6AAAifAAAIn4AACJ/AAAigQAAIo4AACKfAAAioQAAIqMAACKlAAAipwAAIqkAACKrAAAirQAAIq8AACLAAAAiwgAAIsQAACLGAAAiyAAAIsoAACLMAAAizgAAItAAACLSAAAjEQAAIxMAACMVAAAjFwAAIxkAACMaAAAjGwAAIxwAACMdAAAjHwAAIyEAACMiAAAjIwAAIyUAACMmAAAjZQAAI2cAACNpAAAjawAAI20AACNuAAAjbwAAI3AAACNxAAAjcwAAI3UAACN2AAAjdwAAI3kAACN6AAAjuQAAI7sAACO9AAAjvwAAI8EAACPCAAAjwwAAI8QAACPFAAAjxwAAI8kAACPKAAAjywAAI80AACPOAAAj2wAAI9wAACPdAAAj3wAAJB4AACQgAAAkIgAAJCQAACQmAAAkJwAAJCgAACQpAAAkKgAAJCwAACQuAAAkLwAAJDAAACQyAAAkMwAAJHIAACR0AAAkdgAAJHgAACR6AAAkewAAJHwAACR9AAAkfgAAJIAAACSCAAAkgwAAJIQAACSGAAAkhwAAJMYAACTIAAAkygAAJMwAACTOAAAkzwAAJNAAACTRAAAk0gAAJNQAACTWAAAk1wAAJNgAACTaAAAk2wAAJRoAACUcAAAlHgAAJSAAACUiAAAlIwAAJSQAACUlAAAlJgAAJSgAACUqAAAlKwAAJSwAACUuAAAlLwAAJW4AACVwAAAlcgAAJXQAACV2AAAldwAAJXgAACV5AAAlegAAJXwAACV+AAAlfwAAJYAAACWCAAAlgwAAJagAACXMAAAl8wAAJhcAACYZAAAmGwAAJh0AACYfAAAmIQAAJiMAACYkAAAmJgAAJjMAACZCAAAmRAAAJkYAACZIAAAmSgAAJkwAACZOAAAmUAAAJl8AACZhAAAmYwAAJmUAACZnAAAmagAAJm0AACZwAAAmcgAAJoQAACaYAAAmqgAAJr8AACbRAAAm4AAAJv0AACc8AAAnPgAAJ0AAACdCAAAnRAAAJ0UAACdGAAAnRwAAJ0gAACdKAAAnTAAAJ00AACdOAAAnUAAAJ1EAACeQAAAnkgAAJ5QAACeWAAAnmAAAJ5kAACeaAAAnmwAAJ5wAACeeAAAnoAAAJ6EAACeiAAAnpAAAJ6UAACenAAAn5gAAJ+gAACfqAAAn7AAAJ+4AACfvAAAn8AAAJ/EAACfyAAAn9AAAJ/YAACf3AAAn+AAAJ/oAACf7AAAoOgAAKDwAACg+AAAoQAAAKEIAAChDAAAoRAAAKEUAAChGAAAoSAAAKEoAAChLAAAoTAAAKE4AAChPAAAokgAAKLYAACjaAAAo/QAAKSQAAClEAAApawAAKZIAACmyAAAp1gAAKfoAACn8AAAp/gAAKgAAACoCAAAqBAAAKgYAACoJAAAqCwAAKg0AACoQAAAqEgAAKhQAACoXAAAqGQAAKhoAACofAAAqLAAAKi8AACoxAAAqNAAAKjYAACo4AAAqXQAAKoEAACqoAAAqzAAAKs4AACrQAAAq0gAAKtQAACrWAAAq2AAAKtkAACrbAAAq6AAAKvsAACr9AAAq/wAAKwEAACsDAAArBQAAKwcAACsJAAArCwAAKw0AACsgAAArIgAAKyQAACsmAAArKAAAKyoAACssAAArLgAAKzAAACsyAAArNAAAK3MAACt1AAArdwAAK3kAACt7AAArfAAAK30AACt+AAArfwAAK4EAACuDAAArhAAAK4UAACuHAAAriAAAK5EAACuSAAArlAAAK9MAACvVAAAr1wAAK9kAACvbAAAr3AAAK90AACveAAAr3wAAK+EAACvjAAAr5AAAK+UAACvnAAAr6AAALCcAACwpAAAsKwAALC0AACwvAAAsMAAALDEAACwyAAAsMwAALDUAACw3AAAsOAAALDkAACw7AAAsPAAALEUAACxGAAAsSAAALIcAACyJAAAsiwAALI0AACyPAAAskAAALJEAACySAAAskwAALJUAACyXAAAsmAAALJkAACybAAAsnAAALNsAACzdAAAs3wAALOEAACzjAAAs5AAALOUAACzmAAAs5wAALOkAACzrAAAs7AAALO0AACzvAAAs8AAALPkAACz6AAAs/AAALTsAAC09AAAtPwAALUEAAC1DAAAtRAAALUUAAC1GAAAtRwAALUkAAC1LAAAtTAAALU0AAC1PAAAtUAAALY8AAC2RAAAtkwAALZUAAC2XAAAtmAAALZkAAC2aAAAtmwAALZ0AAC2fAAAtoAAALaEAAC2jAAAtpAAALbEAAC2yAAAtswAALbUAAC30AAAt9gAALfgAAC36AAAt/AAALf0AAC3+AAAt/wAALgAAAC4CAAAuBAAALgUAAC4GAAAuCAAALgkAAC5IAAAuSgAALkwAAC5OAAAuUAAALlEAAC5SAAAuUwAALlQAAC5WAAAuWAAALlkAAC5aAAAuXAAALl0AAC5rAAAueAAALqMAAC6lAAAupwAALqkAAC6rAAAurQAALq8AAC6xAAAuswAALrUAAC63AAAuuQAALrsAAC69AAAuvwAALsEAAC7DAAAuxQAALscAAC7JAAAuywAALvYAAC74AAAu+gAALvwAAC7+AAAvAQAALwQAAC8HAAAvCgAALw0AAC8QAAAvEwAALxYAAC8ZAAAvHAAALx8AAC8iAAAvJQAALygAAC8rAAAvLgAALzAAAC9CAAAvXAAAL3EAAC+EAAAvjwAAL5QAAC+jAAAvrQAAL8EAAC/VAAAv7gAAMAEAADAWAAAwKwAAMDoAADBIAAAwTgAAMGoAADCAAAAwhwAAMNIAADD1AAAxFQAAMTUAADE3AAAxOQAAMTsAADE9AAAxPwAAMUAAADFBAAAxQwAAMUQAADFGAAAxRwAAMUkAADFLAAAxTAAAMU0AADFPAAAxUAAAMVUAADFiAAAxZwAAMWkAADFrAAAxcAAAMXIAADF0AAAxdgAAMZsAADG/AAAx5gAAMgoAADIMAAAyDgAAMhAAADISAAAyFAAAMhYAADIXAAAyGQAAMiYAADI3AAAyOQAAMjsAADI9AAAyPwAAMkEAADJDAAAyRQAAMkcAADJYAAAyWgAAMlwAADJeAAAyYAAAMmIAADJkAAAyZgAAMmgAADJqAAAyqQAAMqsAADKtAAAyrwAAMrEAADKyAAAyswAAMrQAADK1AAAytwAAMrkAADK6AAAyuwAAMr0AADK+AAAy/QAAMv8AADMBAAAzAwAAMwUAADMGAAAzBwAAMwgAADMJAAAzCwAAMw0AADMOAAAzDwAAMxEAADMSAAAzUQAAM1MAADNVAAAzVwAAM1kAADNaAAAzWwAAM1wAADNdAAAzXwAAM2EAADNiAAAzYwAAM2UAADNmAAAzcwAAM3QAADN1AAAzdwAAM7YAADO4AAAzugAAM7wAADO+AAAzvwAAM8AAADPBAAAzwgAAM8QAADPGAAAzxwAAM8gAADPKAAAzywAANAoAADQMAAA0DgAANBAAADQSAAA0EwAANBQAADQVAAA0FgAANBgAADQaAAA0GwAANBwAADQeAAA0HwAANF4AADRgAAA0YgAANGQAADRmAAA0ZwAANGgAADRpAAA0agAANGwAADRuAAA0bwAANHAAADRyAAA0cwAANLIAADS0AAA0tgAANLgAADS6AAA0uwAANLwAADS9AAA0vgAANMAAADTCAAA0wwAANMQAADTGAAA0xwAANQYAADUIAAA1CgAANQwAADUOAAA1DwAANRAAADURAAA1EgAANRQAADUWAAA1FwAANRgAADUaAAA1GwAANUAAADVkAAA1iwAANa8AADWxAAA1swAANbUAADW3AAA1uQAANbsAADW8AAA1vgAANcsAADXaAAA13AAANd4AADXgAAA14gAANeQAADXmAAA16AAANfcAADX5AAA1+wAANf0AADX/AAA2AQAANgMAADYFAAA2BwAANkYAADZIAAA2SgAANkwAADZOAAA2TwAANlAAADZRAAA2UgAANlQAADZWAAA2VwAANlgAADZaAAA2WwAANpoAADacAAA2ngAANqAAADaiAAA2owAANqQAADalAAA2pgAANqgAADaqAAA2qwAANqwAADauAAA2rwAANu4AADbwAAA28gAANvQAADb2AAA29wAANvgAADb5AAA2+gAANvwAADb+AAA2/wAANwAAADcCAAA3AwAAN0IAADdEAAA3RgAAN0gAADdKAAA3SwAAN0wAADdNAAA3TgAAN1AAADdSAAA3UwAAN1QAADdWAAA3VwAAN5YAADeYAAA3mgAAN5wAADeeAAA3nwAAN6AAADehAAA3ogAAN6QAADemAAA3pwAAN6gAADeqAAA3qwAAN+oAADfsAAA37gAAN/AAADfyAAA38wAAN/QAADf1AAA39gAAN/gAADf6AAA3+wAAN/wAADf+AAA3/wAAOD4AADhAAAA4QgAAOEQAADhGAAA4RwAAOEgAADhJAAA4SgAAOEwAADhOAAA4TwAAOFAAADhSAAA4UwAAOJ4AADjBAAA44QAAOQEAADkDAAA5BQAAOQcAADkJAAA5CwAAOQwAADkNAAA5DwAAORAAADkSAAA5EwAAORUAADkXAAA5GAAAORkAADkbAAA5HAAAOSEAADkuAAA5MwAAOTUAADk3AAA5PAAAOT4AADlAAAA5QgAAOWcAADmLAAA5sgAAOdYAADnYAAA52gAAOdwAADneAAA54AAAOeIAADnjAAA55QAAOfIAADoDAAA6BQAAOgcAADoJAAA6CwAAOg0AADoPAAA6EQAAOhMAADokAAA6JgAAOigAADoqAAA6LAAAOi4AADowAAA6MgAAOjQAADo2AAA6dQAAOncAADp5AAA6ewAAOn0AADp+AAA6fwAAOoAAADqBAAA6gwAAOoUAADqGAAA6hwAAOokAADqKAAA6yQAAOssAADrNAAA6zwAAOtEAADrSAAA60wAAOtQAADrVAAA61wAAOtkAADraAAA62wAAOt0AADreAAA7HQAAOx8AADshAAA7IwAAOyUAADsmAAA7JwAAOygAADspAAA7KwAAOy0AADsuAAA7LwAAOzEAADsyAAA7PwAAO0AAADtBAAA7QwAAO4IAADuEAAA7hgAAO4gAADuKAAA7iwAAO4wAADuNAAA7jgAAO5AAADuSAAA7kwAAO5QAADuWAAA7lwAAO9YAADvYAAA72gAAO9wAADveAAA73wAAO+AAADvhAAA74gAAO+QAADvmAAA75wAAO+gAADvqAAA76wAAPCoAADwsAAA8LgAAPDAAADwyAAA8MwAAPDQAADw1AAA8NgAAPDgAADw6AAA8OwAAPDwAADw+AAA8PwAAPH4AADyAAAA8ggAAPIQAADyGAAA8hwAAPIgAADyJAAA8igAAPIwAADyOAAA8jwAAPJAAADySAAA8kwAAPNIAADzUAAA81gAAPNgAADzaAAA82wAAPNwAADzdAAA83gAAPOAAADziAAA84wAAPOQAADzmAAA85wAAPQwAAD0wAAA9VwAAPXsAAD19AAA9fwAAPYEAAD2DAAA9hQAAPYcAAD2IAAA9igAAPZcAAD2mAAA9qAAAPaoAAD2sAAA9rgAAPbAAAD2yAAA9tAAAPcMAAD3FAAA9xwAAPckAAD3LAAA9zQAAPc8AAD3RAAA90wAAPhIAAD4UAAA+FgAAPhgAAD4aAAA+GwAAPhwAAD4dAAA+HgAAPiAAAD4iAAA+IwAAPiQAAD4mAAA+JwAAPioAAD5pAAA+awAAPm0AAD5vAAA+cQAAPnIAAD5zAAA+dAAAPnUAAD53AAA+eQAAPnoAAD57AAA+fQAAPn4AAD69AAA+vwAAPsEAAD7DAAA+xQAAPsYAAD7HAAA+yAAAPskAAD7LAAA+zQAAPs4AAD7PAAA+0QAAPtIAAD8RAAA/EwAAPxUAAD8XAAA/GQAAPxoAAD8bAAA/HAAAPx0AAD8fAAA/IQAAPyIAAD8jAAA/JQAAPyYAAD8pAAA/aAAAP2oAAD9sAAA/bgAAP3AAAD9xAAA/cgAAP3MAAD90AAA/dgAAP3gAAD95AAA/egAAP3wAAD99AAA/vAAAP74AAD/AAAA/wgAAP8QAAD/FAAA/xgAAP8cAAD/IAAA/ygAAP8wAAD/NAAA/zgAAP9AAAD/RAABAEAAAQBIAAEAUAABAFgAAQBgAAEAZAABAGgAAQBsAAEAcAABAHgAAQCAAAEAhAABAIgAAQCQAAEAlAABAcAAAQJMAAECzAABA0wAAQNUAAEDXAABA2QAAQNsAAEDdAABA3gAAQN8AAEDhAABA4gAAQOQAAEDlAABA5wAAQOkAAEDqAABA6wAAQO0AAEDuAABA8wAAQQAAAEEFAABBBwAAQQkAAEEOAABBEAAAQRIAAEEUAABBOQAAQV0AAEGEAABBqAAAQaoAAEGsAABBrgAAQbAAAEGyAABBtAAAQbUAAEG3AABBxAAAQdUAAEHXAABB2QAAQdsAAEHdAABB3wAAQeEAAEHjAABB5QAAQfYAAEH4AABB+gAAQfwAAEH+AABCAAAAQgIAAEIEAABCBgAAQggAAEJHAABCSQAAQksAAEJNAABCTwAAQlAAAEJRAABCUgAAQlMAAEJVAABCVwAAQlgAAEJZAABCWwAAQlwAAEKbAABCnQAAQp8AAEKhAABCowAAQqQAAEKlAABCpgAAQqcAAEKpAABCqwAAQqwAAEKtAABCrwAAQrAAAELvAABC8QAAQvMAAEL1AABC9wAAQvgAAEL5AABC+gAAQvsAAEL9AABC/wAAQwAAAEMBAABDAwAAQwQAAEMRAABDEgAAQxMAAEMVAABDVAAAQ1YAAENYAABDWgAAQ1wAAENdAABDXgAAQ18AAENgAABDYgAAQ2QAAENlAABDZgAAQ2gAAENpAABDqAAAQ6oAAEOsAABDrgAAQ7AAAEOxAABDsgAAQ7MAAEO0AABDtgAAQ7gAAEO5AABDugAAQ7wAAEO9AABD/AAAQ/4AAEQAAABEAgAARAQAAEQFAABEBgAARAcAAEQIAABECgAARAwAAEQNAABEDgAARBAAAEQRAABEUAAARFIAAERUAABEVgAARFgAAERZAABEWgAARFsAAERcAABEXgAARGAAAERhAABEYgAARGQAAERlAABEpAAARKYAAESoAABEqgAARKwAAEStAABErgAARK8AAESwAABEsgAARLQAAES1AABEtgAARLgAAES5AABE3gAARQIAAEUpAABFTQAARU8AAEVRAABFUwAARVUAAEVXAABFWQAARVoAAEVcAABFaQAARXgAAEV6AABFfAAARX4AAEWAAABFggAARYQAAEWGAABFlQAARZcAAEWZAABFmwAARZ0AAEWfAABFoQAARaMAAEWlAABF5AAAReYAAEXoAABF6gAARewAAEXtAABF7gAARe8AAEXwAABF8gAARfQAAEX1AABF9gAARfgAAEX5AABGOAAARjoAAEY8AABGPgAARkAAAEZBAABGQgAARkMAAEZEAABGRgAARkgAAEZJAABGSgAARkwAAEZNAABGjAAARo4AAEaQAABGkgAARpQAAEaVAABGlgAARpcAAEaYAABGmgAARpwAAEadAABGngAARqAAAEahAABG4AAARuIAAEbkAABG5gAARugAAEbpAABG6gAARusAAEbsAABG7gAARvAAAEbxAABG8gAARvQAAEb1AABG+AAARzcAAEc5AABHOwAARz0AAEc/AABHQAAAR0EAAEdCAABHQwAAR0UAAEdHAABHSAAAR0kAAEdLAABHTAAAR4sAAEeNAABHjwAAR5EAAEeTAABHlAAAR5UAAEeWAABHlwAAR5kAAEebAABHnAAAR50AAEefAABHoAAAR7wAAEf7AABH/QAAR/8AAEgBAABIAwAASAQAAEgFAABIBgAASAcAAEgJAABICwAASAwAAEgNAABIDwAASBAAAEhbAABIfgAASJ4AAEi+AABIwAAASMIAAEjEAABIxgAASMgAAEjJAABIygAASMwAAEjNAABIzwAASNAAAEjTAABI1QAASNYAAEjXAABI2QAASNoAAEjfAABI7AAASPEAAEjzAABI9QAASPoAAEj8AABI/gAASQAAAEklAABJSQAASXAAAEmUAABJlgAASZgAAEmaAABJnAAASZ4AAEmgAABJoQAASaMAAEmwAABJwQAAScMAAEnFAABJxwAASckAAEnLAABJzQAASc8AAEnRAABJ4gAASeQAAEnmAABJ6AAASeoAAEnsAABJ7gAASfAAAEnyAABJ9AAASjMAAEo1AABKNwAASjkAAEo7AABKPAAASj0AAEo+AABKPwAASkEAAEpDAABKRAAASkUAAEpHAABKSAAASocAAEqJAABKiwAASo0AAEqPAABKkAAASpEAAEqSAABKkwAASpUAAEqXAABKmAAASpkAAEqbAABKnAAAStsAAErdAABK3wAASuEAAErjAABK5AAASuUAAErmAABK5wAASukAAErrAABK7AAASu0AAErvAABK8AAASv0AAEr+AABK/wAASwEAAEtAAABLQgAAS0QAAEtGAABLSAAAS0kAAEtKAABLSwAAS0wAAEtOAABLUAAAS1EAAEtSAABLVAAAS1UAAEuUAABLlgAAS5gAAEuaAABLnAAAS50AAEueAABLnwAAS6AAAEuiAABLpAAAS6UAAEumAABLqAAAS6kAAEvoAABL6gAAS+wAAEvuAABL8AAAS/EAAEvyAABL8wAAS/QAAEv2AABL+AAAS/kAAEv6AABL/AAAS/0AAEw8AABMPgAATEAAAExCAABMRAAATEUAAExGAABMRwAATEgAAExKAABMTAAATE0AAExOAABMUAAATFEAAEyQAABMkgAATJQAAEyWAABMmAAATJkAAEyaAABMmwAATJwAAEyeAABMoAAATKEAAEyiAABMpAAATKUAAEzKAABM7gAATRUAAE05AABNOwAATT0AAE0/AABNQQAATUMAAE1FAABNRgAATUkAAE1WAABNZQAATWcAAE1pAABNawAATW0AAE1vAABNcQAATXMAAE2CAABNhQAATYgAAE2LAABNjgAATZEAAE2UAABNlwAATZkAAE3YAABN2gAATdwAAE3eAABN4AAATeEAAE3iAABN4wAATeQAAE3mAABN6AAATekAAE3qAABN7AAATe0AAE4sAABOLgAATjEAAE4zAABONQAATjYAAE43AABOOAAATjkAAE47AABOPQAATj4AAE4/AABOQQAATkIAAE5EAABOgwAAToUAAE6HAABOiQAATosAAE6MAABOjQAATo4AAE6PAABOkQAATpMAAE6UAABOlQAATpcAAE6YAABO1wAATtkAAE7bAABO3QAATt8AAE7gAABO4QAATuIAAE7jAABO5QAATucAAE7oAABO6QAATusAAE7sAABPKwAATy0AAE8vAABPMQAATzMAAE80AABPNQAATzYAAE83AABPOQAATzsAAE88AABPPQAATz8AAE9AAABPfwAAT4EAAE+DAABPhQAAT4cAAE+IAABPiQAAT4oAAE+LAABPjQAAT48AAE+QAABPkQAAT5MAAE+UAABP0wAAT9UAAE/XAABP2QAAT9sAAE/cAABP3QAAT94AAE/fAABP4QAAT+MAAE/kAABP5QAAT+cAAE/oAABP8QAAUAQAAFARAABQJAAAUDEAAFBEAABQWwAAUG0AAFC4AABQ2wAAUPsAAFEbAABRHQAAUR8AAFEhAABRIwAAUSUAAFEmAABRJwAAUSoAAFErAABRLQAAUS4AAFEwAABRMgAAUTMAAFE0AABRNwAAUTgAAFE9AABRSgAAUU8AAFFRAABRUwAAUVgAAFFbAABRXgAAUWAAAFGFAABRqQAAUdAAAFH0AABR9wAAUfkAAFH7AABR/QAAUf8AAFIBAABSAgAAUgUAAFISAABSIwAAUiUAAFInAABSKQAAUisAAFItAABSLwAAUjEAAFIzAABSRAAAUkcAAFJKAABSTQAAUlAAAFJTAABSVgAAUlkAAFJcAABSXgAAUp0AAFKfAABSoQAAUqMAAFKmAABSpwAAUqgAAFKpAABSqgAAUqwAAFKuAABSrwAAUrAAAFKyAABSswAAUvIAAFL0AABS9gAAUvgAAFL7AABS/AAAUv0AAFL+AABS/wAAUwEAAFMDAABTBAAAUwUAAFMHAABTCAAAU0cAAFNJAABTTAAAU04AAFNRAABTUgAAU1MAAFNUAABTVQAAU1cAAFNZAABTWgAAU1sAAFNdAABTXgAAU2sAAFNsAABTbQAAU28AAFOuAABTsAAAU7IAAFO0AABTtwAAU7gAAFO5AABTugAAU7sAAFO9AABTvwAAU8AAAFPBAABTwwAAU8QAAFQDAABUBQAAVAcAAFQJAABUDAAAVA0AAFQOAABUDwAAVBAAAFQSAABUFAAAVBUAAFQWAABUGAAAVBkAAFRYAABUWgAAVFwAAFReAABUYQAAVGIAAFRjAABUZAAAVGUAAFRnAABUaQAAVGoAAFRrAABUbQAAVG4AAFStAABUrwAAVLEAAFSzAABUtgAAVLcAAFS4AABUuQAAVLoAAFS8AABUvgAAVL8AAFTAAABUwgAAVMMAAFUCAABVBAAAVQYAAFUIAABVCwAAVQwAAFUNAABVDgAAVQ8AAFURAABVEwAAVRQAAFUVAABVFwAAVRgAAFU9AABVYQAAVYgAAFWsAABVrwAAVbEAAFWzAABVtQAAVbcAAFW5AABVugAAVb0AAFXKAABV2QAAVdsAAFXdAABV3wAAVeEAAFXjAABV5QAAVecAAFX2AABV+QAAVfwAAFX/AABWAgAAVgUAAFYIAABWCwAAVg0AAFZMAABWTgAAVlAAAFZSAABWVQAAVlYAAFZXAABWWAAAVlkAAFZbAABWXQAAVl4AAFZfAABWYQAAVmIAAFahAABWowAAVqUAAFanAABWqgAAVqsAAFasAABWrQAAVq4AAFawAABWsgAAVrMAAFa0AABWtgAAVrcAAFb2AABW+AAAVvoAAFb8AABW/wAAVwAAAFcBAABXAgAAVwMAAFcFAABXBwAAVwgAAFcJAABXCwAAVwwAAFdLAABXTQAAV08AAFdRAABXVAAAV1UAAFdWAABXVwAAV1gAAFdaAABXXAAAV10AAFdeAABXYAAAV2EAAFegAABXogAAV6QAAFemAABXqQAAV6oAAFerAABXrAAAV60AAFevAABXsQAAV7IAAFezAABXtQAAV7YAAFf1AABX9wAAV/kAAFf7AABX/gAAV/8AAFgAAABYAQAAWAIAAFgEAABYBgAAWAcAAFgIAABYCgAAWAsAAFhKAABYTAAAWE4AAFhQAABYUwAAWFQAAFhVAABYVgAAWFcAAFhZAABYWwAAWFwAAFhdAABYXwAAWGAAAFirAABYzgAAWO4AAFkOAABZEAAAWRIAAFkUAABZFgAAWRgAAFkZAABZGgAAWR0AAFkeAABZIAAAWSEAAFkjAABZJQAAWSYAAFknAABZKgAAWSsAAFkwAABZPQAAWUIAAFlEAABZRgAAWUsAAFlOAABZUQAAWVMAAFl4AABZnAAAWcMAAFnnAABZ6gAAWewAAFnuAABZ8AAAWfIAAFn0AABZ9QAAWfgAAFoFAABaFgAAWhgAAFoaAABaHAAAWh4AAFogAABaIgAAWiQAAFomAABaNwAAWjoAAFo9AABaQAAAWkMAAFpGAABaSQAAWkwAAFpPAABaUQAAWpAAAFqSAABalAAAWpYAAFqZAABamgAAWpsAAFqcAABanQAAWp8AAFqhAABaogAAWqMAAFqlAABapgAAWuUAAFrnAABa6QAAWusAAFruAABa7wAAWvAAAFrxAABa8gAAWvQAAFr2AABa9wAAWvgAAFr6AABa+wAAWzoAAFs8AABbPwAAW0EAAFtEAABbRQAAW0YAAFtHAABbSAAAW0oAAFtMAABbTQAAW04AAFtQAABbUQAAW14AAFtfAABbYAAAW2IAAFuhAABbowAAW6UAAFunAABbqgAAW6sAAFusAABbrQAAW64AAFuwAABbsgAAW7MAAFu0AABbtgAAW7cAAFv2AABb+AAAW/oAAFv8AABb/wAAXAAAAFwBAABcAgAAXAMAAFwFAABcBwAAXAgAAFwJAABcCwAAXAwAAFxLAABcTQAAXE8AAFxRAABcVAAAXFUAAFxWAABcVwAAXFgAAFxaAABcXAAAXF0AAFxeAABcYAAAXGEAAFygAABcogAAXKQAAFymAABcqQAAXKoAAFyrAABcrAAAXK0AAFyvAABcsQAAXLIAAFyzAABctQAAXLYAAFz1AABc9wAAXPkAAFz7AABc/gAAXP8AAF0AAABdAQAAXQIAAF0EAABdBgAAXQcAAF0IAABdCgAAXQsAAF0wAABdVAAAXXsAAF2fAABdogAAXaQAAF2mAABdqAAAXaoAAF2sAABdrQAAXbAAAF29AABdzAAAXc4AAF3QAABd0gAAXdQAAF3WAABd2AAAXdoAAF3pAABd7AAAXe8AAF3yAABd9QAAXfgAAF37AABd/gAAXgAAAF4/AABeQQAAXkMAAF5FAABeSAAAXkkAAF5KAABeSwAAXkwAAF5OAABeUAAAXlEAAF5SAABeVAAAXlUAAF6UAABelgAAXpgAAF6aAABenQAAXp4AAF6fAABeoAAAXqEAAF6jAABepQAAXqYAAF6nAABeqQAAXqoAAF7pAABe6wAAXu0AAF7vAABe8gAAXvMAAF70AABe9QAAXvYAAF74AABe+gAAXvsAAF78AABe/gAAXv8AAF8+AABfQAAAX0IAAF9EAABfRwAAX0gAAF9JAABfSgAAX0sAAF9NAABfTwAAX1AAAF9RAABfUwAAX1QAAF+TAABflQAAX5cAAF+ZAABfnAAAX50AAF+eAABfnwAAX6AAAF+iAABfpAAAX6UAAF+mAABfqAAAX6kAAF/oAABf6gAAX+wAAF/uAABf8QAAX/IAAF/zAABf9AAAX/UAAF/3AABf+QAAX/oAAF/7AABf/QAAX/4AAGA9AABgPwAAYEEAAGBDAABgRgAAYEcAAGBIAABgSQAAYEoAAGBMAABgTgAAYE8AAGBQAABgUgAAYFMAAGCeAABgwQAAYOEAAGEBAABhAwAAYQUAAGEHAABhCQAAYQsAAGEMAABhDQAAYRAAAGERAABhEwAAYRQAAGEWAABhGAAAYRkAAGEaAABhHQAAYR4AAGEjAABhMAAAYTUAAGE3AABhOQAAYT4AAGFBAABhRAAAYUYAAGFrAABhjwAAYbYAAGHaAABh3QAAYd8AAGHhAABh4wAAYeUAAGHnAABh6AAAYesAAGH4AABiCQAAYgsAAGINAABiDwAAYhEAAGITAABiFQAAYhcAAGIZAABiKgAAYi0AAGIwAABiMwAAYjYAAGI5AABiPAAAYj8AAGJCAABiRAAAYoMAAGKFAABihwAAYokAAGKMAABijQAAYo4AAGKPAABikAAAYpIAAGKUAABilQAAYpYAAGKYAABimQAAYtgAAGLaAABi3AAAYt4AAGLhAABi4gAAYuMAAGLkAABi5QAAYucAAGLpAABi6gAAYusAAGLtAABi7gAAYy0AAGMvAABjMgAAYzQAAGM3AABjOAAAYzkAAGM6AABjOwAAYz0AAGM/AABjQAAAY0EAAGNDAABjRAAAY1EAAGNSAABjUwAAY1UAAGOUAABjlgAAY5gAAGOaAABjnQAAY54AAGOfAABjoAAAY6EAAGOjAABjpQAAY6YAAGOnAABjqQAAY6oAAGPpAABj6wAAY+0AAGPvAABj8gAAY/MAAGP0AABj9QAAY/YAAGP4AABj+gAAY/sAAGP8AABj/gAAY/8AAGQ+AABkQAAAZEIAAGREAABkRwAAZEgAAGRJAABkSgAAZEsAAGRNAABkTwAAZFAAAGRRAABkUwAAZFQAAGSTAABklQAAZJcAAGSZAABknAAAZJ0AAGSeAABknwAAZKAAAGSiAABkpAAAZKUAAGSmAABkqAAAZKkAAGToAABk6gAAZOwAAGTuAABk8QAAZPIAAGTzAABk9AAAZPUAAGT3AABk+QAAZPoAAGT7AABk/QAAZP4AAGUjAABlRwAAZW4AAGWSAABllQAAZZcAAGWZAABlmwAAZZ0AAGWfAABloAAAZaMAAGWwAABlvwAAZcEAAGXDAABlxQAAZccAAGXJAABlywAAZc0AAGXcAABl3wAAZeIAAGXlAABl6AAAZesAAGXuAABl8QAAZfMAAGYyAABmNAAAZjYAAGY4AABmOwAAZjwAAGY9AABmPgAAZj8AAGZBAABmQwAAZkQAAGZFAABmRwAAZkgAAGaHAABmiQAAZosAAGaNAABmkAAAZpEAAGaSAABmkwAAZpQAAGaWAABmmAAAZpkAAGaaAABmnAAAZp0AAGbcAABm3gAAZuAAAGbiAABm5QAAZuYAAGbnAABm6AAAZukAAGbrAABm7QAAZu4AAGbvAABm8QAAZvIAAGcxAABnMwAAZzUAAGc3AABnOgAAZzsAAGc8AABnPQAAZz4AAGdAAABnQgAAZ0MAAGdEAABnRgAAZ0cAAGeGAABniAAAZ4oAAGeMAABnjwAAZ5AAAGeRAABnkgAAZ5MAAGeVAABnlwAAZ5gAAGeZAABnmwAAZ5wAAGfbAABn3QAAZ+AAAGfiAABn5QAAZ+YAAGfnAABn6AAAZ+kAAGfrAABn7QAAZ+4AAGfvAABn8QAAZ/IAAGgOAABoTQAAaE8AAGhRAABoUwAAaFYAAGhXAABoWAAAaFkAAGhaAABoXAAAaF4AAGhfAABoYAAAaGIAAGhjAABorgAAaNEAAGjxAABpEQAAaRMAAGkVAABpFwAAaRkAAGkbAABpHAAAaR0AAGkgAABpIQAAaSMAAGkkAABpJgAAaSgAAGkpAABpKgAAaS0AAGkuAABpNwAAaUQAAGlJAABpSwAAaU0AAGlSAABpVQAAaVgAAGlaAABpfwAAaaMAAGnKAABp7gAAafEAAGnzAABp9QAAafcAAGn5AABp+wAAafwAAGn/AABqDAAAah0AAGofAABqIQAAaiMAAGolAABqJwAAaikAAGorAABqLQAAaj4AAGpBAABqRAAAakcAAGpKAABqTQAAalAAAGpTAABqVgAAalgAAGqXAABqmQAAapsAAGqdAABqoAAAaqEAAGqiAABqowAAaqQAAGqmAABqqAAAaqkAAGqqAABqrAAAaq0AAGrsAABq7gAAavAAAGryAABq9QAAavYAAGr3AABq+AAAavkAAGr7AABq/QAAav4AAGr/AABrAQAAawIAAGtBAABrQwAAa0YAAGtIAABrSwAAa0wAAGtNAABrTgAAa08AAGtRAABrUwAAa1QAAGtVAABrVwAAa1gAAGtlAABrZgAAa2cAAGtpAABrqAAAa6oAAGusAABrrgAAa7EAAGuyAABrswAAa7QAAGu1AABrtwAAa7kAAGu6AABruwAAa70AAGu+AABr/QAAa/8AAGwBAABsAwAAbAYAAGwHAABsCAAAbAkAAGwKAABsDAAAbA4AAGwPAABsEAAAbBIAAGwTAABsUgAAbFQAAGxWAABsWAAAbFsAAGxcAABsXQAAbF4AAGxfAABsYQAAbGMAAGxkAABsZQAAbGcAAGxoAABspwAAbKkAAGyrAABsrQAAbLAAAGyxAABssgAAbLMAAGy0AABstgAAbLgAAGy5AABsugAAbLwAAGy9AABs/AAAbP4AAG0AAABtAgAAbQUAAG0GAABtBwAAbQgAAG0JAABtCwAAbQ0AAG0OAABtDwAAbREAAG0SAABtNwAAbVsAAG2CAABtpgAAbakAAG2rAABtrQAAba8AAG2xAABtswAAbbQAAG23AABtxAAAbdMAAG3VAABt1wAAbdkAAG3bAABt3QAAbd8AAG3hAABt8AAAbfMAAG32AABt+QAAbfwAAG3/AABuAgAAbgUAAG4HAABuRgAAbkgAAG5KAABuTAAAbk8AAG5QAABuUQAAblIAAG5TAABuVQAAblcAAG5YAABuWQAAblsAAG5cAABumwAAbp0AAG6fAABuoQAAbqQAAG6lAABupgAAbqcAAG6oAABuqgAAbqwAAG6tAABurgAAbrAAAG6xAABu8AAAbvIAAG70AABu9gAAbvkAAG76AABu+wAAbvwAAG79AABu/wAAbwEAAG8CAABvAwAAbwUAAG8GAABvRQAAb0cAAG9JAABvSwAAb04AAG9PAABvUAAAb1EAAG9SAABvVAAAb1YAAG9XAABvWAAAb1oAAG9bAABvmgAAb5wAAG+eAABvoAAAb6MAAG+kAABvpQAAb6YAAG+nAABvqQAAb6sAAG+sAABvrQAAb68AAG+wAABv7wAAb/EAAG/zAABv9QAAb/gAAG/5AABv+gAAb/sAAG/8AABv/gAAcAAAAHABAABwAgAAcAQAAHAFAABwRAAAcEYAAHBIAABwSgAAcE0AAHBOAABwTwAAcFAAAHBRAABwUwAAcFUAAHBWAABwVwAAcFkAAHBaAABwpQAAcMgAAHDoAABxCAAAcQoAAHEMAABxDgAAcRAAAHESAABxEwAAcRQAAHEXAABxGAAAcRoAAHEbAABxHQAAcR8AAHEgAABxIQAAcSQAAHElAABxKgAAcTcAAHE8AABxPgAAcUAAAHFFAABxSAAAcUsAAHFNAABxcgAAcZYAAHG9AABx4QAAceQAAHHmAABx6AAAceoAAHHsAABx7gAAce8AAHHyAABx/wAAchAAAHISAAByFAAAchYAAHIYAAByGgAAchwAAHIeAAByIAAAcjEAAHI0AAByNwAAcjoAAHI9AAByQAAAckMAAHJGAABySQAAcksAAHKKAAByjAAAco4AAHKQAABykwAAcpQAAHKVAABylgAAcpcAAHKZAABymwAAcpwAAHKdAABynwAAcqAAAHLfAABy4QAAcuMAAHLlAABy6AAAcukAAHLqAABy6wAAcuwAAHLuAABy8AAAcvEAAHLyAABy9AAAcvUAAHM0AABzNgAAczkAAHM7AABzPgAAcz8AAHNAAABzQQAAc0IAAHNEAABzRgAAc0cAAHNIAABzSgAAc0sAAHNYAABzWQAAc1oAAHNcAABzmwAAc50AAHOfAABzoQAAc6QAAHOlAABzpgAAc6cAAHOoAABzqgAAc6wAAHOtAABzrgAAc7AAAHOxAABz8AAAc/IAAHP0AABz9gAAc/kAAHP6AABz+wAAc/wAAHP9AABz/wAAdAEAAHQCAAB0AwAAdAUAAHQGAAB0RQA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AlwMAAJcGAACXBwAAlwgAAJcJAACXCgAAlwwAAJcOAACXDwAAlxAAAJcSAACXEwAAl1IAAJdUAACXVgAAl1gAAJdbAACXXAAAl10AAJdeAACXXwAAl2EAAJdjAACXZAAAl2UAAJdnAACXaAAAl6cAAJepAACXrAAAl64AAJexAACXsgAAl7MAAJe0AACXtQAAl7cAAJe5AACXugAAl7sAAJe9AACXvgAAl8sAAJfMAACXzQAAl88AAJgOAACYEAAAmBIAAJgUAACYFwAAmBgAAJgZAACYGgAAmBsAAJgdAACYHwAAmCAAAJghAACYIwAAmCQAAJhjAACYZQAAmGcAAJhpAACYbAAAmG0AAJhuAACYbwAAmHAAAJhyAACYdAAAmHUAAJh2AACYeAAAmHkAAJi4AACYugAAmLwAAJi+AACYwQAAmMIAAJjDAACYxAAAmMUAAJjHAACYyQAAmMoAAJjLAACYzQAAmM4AAJkNAACZDwAAmREAAJkTAACZFgAAmRcAAJkYAACZGQAAmRoAAJkcAACZHgAAmR8AAJkgAACZIgAAmSMAAJliAACZZAAAmWYAAJloAACZawAAmWwAAJltAACZbgAAmW8AAJlxAACZcwAAmXQAAJl1AACZdwAAmXgAAJmdAACZwQAAmegAAJoMAACaDwAAmhEAAJoTAACaFQAAmhcAAJoZAACaGgAAmh0AAJoqAACaOQAAmjsAAJo9AACaPwAAmkEAAJpDAACaRQAAmkcAAJpWAACaWQAAmlwAAJpfAACaYgAAmmUAAJpoAACaawAAmm0AAJqsAACargAAmrAAAJqyAACatQAAmrYAAJq3AACauAAAmrkAAJq7AACavQAAmr4AAJq/AACawQAAmsIAAJsBAACbAwAAmwUAAJsHAACbCgAAmwsAAJsMAACbDQAAmw4AAJsQAACbEgAAmxMAAJsUAACbFgAAmxcAAJtWAACbWAAAm1oAAJtcAACbXwAAm2AAAJthAACbYgAAm2MAAJtlAACbZwAAm2gAAJtpAACbawAAm2wAAJurAACbrQAAm68AAJuxAACbtAAAm7UAAJu2AACbtwAAm7gAAJu6AACbvAAAm70AAJu+AACbwAAAm8EAAJwAAACcAgAAnAQAAJwGAACcCQAAnAoAAJwLAACcDAAAnA0AAJwPAACcEQAAnBIAAJwTAACcFQAAnBYAAJxVAACcVwAAnFkAAJxbAACcXgAAnF8AAJxgAACcYQAAnGIAAJxkAACcZgAAnGcAAJxoAACcagAAnGsAAJyqAACcrAAAnK4AAJywAACcswAAnLQAAJy1AACctgAAnLcAAJy5AACcuwAAnLwAAJy9AACcvwAAnMAAAJ0LAACdLgAAnU4AAJ1uAACdcAAAnXIAAJ10AACddgAAnXkAAJ16AACdewAAnX4AAJ1/AACdgQAAnYIAAJ2EAACdhwAAnYgAAJ2JAACdjAAAnY0AAJ2SAACdnwAAnaQAAJ2mAACdqAAAna0AAJ2wAACdswAAnbUAAJ3aAACd/gAAniUAAJ5JAACeTAAAnk4AAJ5QAACeUgAAnlQAAJ5WAACeVwAAnloAAJ5nAACeeAAAnnoAAJ58AACefgAAnoAAAJ6CAACehAAAnoYAAJ6IAACemQAAnpwAAJ6fAACeogAAnqUAAJ6oAACeqwAAnq4AAJ6xAACeswAAnvIAAJ70AACe9gAAnvgAAJ77AACe/AAAnv0AAJ7+AACe/wAAnwEAAJ8DAACfBAAAnwUAAJ8HAACfCAAAn0cAAJ9JAACfSwAAn00AAJ9QAACfUQAAn1IAAJ9TAACfVAAAn1YAAJ9YAACfWQAAn1oAAJ9cAACfXQAAn5wAAJ+eAACfoQAAn6MAAJ+mAACfpwAAn6gAAJ+pAACfqgAAn6wAAJ+uAACfrwAAn7AAAJ+yAACfswAAn8AAAJ/BAACfwgAAn8QAAKADAACgBQAAoAcAAKAJAACgDAAAoA0AAKAOAACgDwAAoBAAAKASAACgFAAAoBUAAKAWAACgGAAAoBkAAKBYAACgWgAAoFwAAKBeAACgYQAAoGIAAKBjAACgZAAAoGUAAKBnAACgaQAAoGoAAKBrAACgbQAAoG4AAKCtAACgrwAAoLEAAKCzAACgtgAAoLcAAKC4AACguQAAoLoAAKC8AACgvgAAoL8AAKDAAACgwgAAoMMAAKECAAChBAAAoQYAAKEIAAChCwAAoQwAAKENAAChDgAAoQ8AAKERAAChEwAAoRQAAKEVAAChFwAAoRgAAKFXAAChWQAAoVsAAKFdAAChYAAAoWEAAKFiAAChYwAAoWQAAKFmAAChaAAAoWkAAKFqAAChbAAAoW0AAKGSAAChtgAAod0AAKIBAACiBAAAogYAAKIIAACiCgAAogwAAKIOAACiDwAAohIAAKIfAACiLgAAojAAAKIyAACiNAAAojYAAKI4AACiOgAAojwAAKJLAACiTgAAolEAAKJUAACiVwAAoloAAKJdAACiYAAAomIAAKKhAACiowAAoqUAAKKnAACiqgAAoqsAAKKsAACirQAAoq4AAKKwAACisgAAorMAAKK0AACitgAAorcAAKL2AACi+AAAovoAAKL8AACi/wAAowAAAKMBAACjAgAAowMAAKMFAACjBwAAowgAAKMJAACjCwAAowwAAKNLAACjTQAAo08AAKNRAACjVAAAo1UAAKNWAACjVwAAo1gAAKNaAACjXAAAo10AAKNeAACjYAAAo2EAAKOgAACjogAAo6QAAKOmAACjqQAAo6oAAKOrAACjrAAAo60AAKOvAACjsQAAo7IAAKOzAACjtQAAo7YAAKP1AACj9wAAo/kAAKP7AACj/gAAo/8AAKQAAACkAQAApAIAAKQEAACkBgAApAcAAKQIAACkCgAApAsAAKRKAACkTAAApE4AAKRQAACkUwAApFQAAKRVAACkVgAApFcAAKRZAACkWwAApFwAAKRdAACkXwAApGAAAKSfAACkoQAApKMAAKSlAACkqAAApKkAAKSqAACkqwAApKwAAKSuAACksAAApLEAAKSyAACktAAApLUAAKUAAAClIwAApUMAAKVjAAClZQAApWcAAKVpAAClawAApW4AAKVvAAClcAAApXMAAKV0AACldgAApXcAAKV5AAClfAAApX0AAKV+AAClgQAApYIAAKWHAACllAAApZkAAKWbAAClnQAApaIAAKWlAAClqAAApaoAAKXPAACl8wAAphoAAKY+AACmQQAApkMAAKZFAACmRwAApkkAAKZLAACmTAAApk8AAKZcAACmbQAApm8AAKZxAACmcwAApnUAAKZ3AACmeQAApnsAAKZ9AACmjgAAppEAAKaUAACmlwAAppoAAKadAACmoAAApqMAAKamAACmqAAApucAAKbpAACm6wAApu0AAKbwAACm8QAApvIAAKbzAACm9AAApvYAAKb4AACm+QAApvoAAKb8AACm/QAApzwAAKc+AACnQAAAp0IAAKdFAACnRgAAp0cAAKdIAACnSQAAp0sAAKdNAACnTgAAp08AAKdRAACnUgAAp5EAAKeTAACnlgAAp5gAAKebAACnnAAAp50AAKeeAACnnwAAp6EAAKejAACnpAAAp6UAAKenAACnqAAAp7UAAKe2AACntwAAp7kAAKf4AACn+gAAp/wAAKf+AACoAQAAqAIAAKgDAACoBAAAqAUAAKgHAACoCQAAqAoAAKgLAACoDQAAqA4AAKhNAACoTwAAqFEAAKhTAACoVgAAqFcAAKhYAACoWQAAqFoAAKhcAACoXgAAqF8AAKhgAACoYgAAqGMAAKiiAACopAAAqKYAAKioAACoqwAAqKwAAKitAACorgAAqK8AAKixAACoswAAqLQAAKi1AACotwAAqLgAAKj3AACo+QAAqPsAAKj9AACpAAAAqQEAAKkCAACpAwAAqQQAAKkGAACpCAAAqQkAAKkKAACpDAAAqQ0AAKlMAACpTgAAqVAAAKlSAACpVQAAqVYAAKlXAACpWAAAqVkAAKlbAACpXQAAqV4AAKlfAACpYQAAqWIAAKmHAACpqwAAqdIAAKn2AACp+QAAqfsAAKn9AACp/wAAqgEAAKoDAACqBAAAqgcAAKoUAACqIwAAqiUAAKonAACqKQAAqisAAKotAACqLwAAqjEAAKpAAACqQwAAqkYAAKpJAACqTAAAqk8AAKpSAACqVQAAqlcAAKqWAACqmAAAqpoAAKqcAACqnwAAqqAAAKqhAACqogAAqqMAAKqlAACqpwAAqqgAAKqpAACqqwAAqqwAAKrrAACq7QAAqu8AAKrxAACq9AAAqvUAAKr2AACq9wAAqvgAAKr6AACq/AAAqv0AAKr+AACrAAAAqwEAAKtAAACrQgAAq0QAAKtGAACrSQAAq0oAAKtLAACrTAAAq00AAKtPAACrUQAAq1IAAKtTAACrVQAAq1YAAKuVAACrlwAAq5kAAKubAACrngAAq58AAKugAACroQAAq6IAAKukAACrpgAAq6cAAKuoAACrqgAAq6sAAKvqAACr7AAAq+4AAKvwAACr8wAAq/QAAKv1AACr9gAAq/cAAKv5AACr+wAAq/wAAKv9AACr/wAArAAAAKw/AACsQQAArEMAAKxFAACsSAAArEkAAKxKAACsSwAArEwAAKxOAACsUAAArFEAAKxSAACsVAAArFUAAKyUAACslgAArJgAAKyaAACsnQAArJ4AAKyfAACsoAAArKEAAKyjAACspQAArKYAAKynAACsqQAArKoAAKz1AACtGAAArTgAAK1YAACtWgAArVwAAK1eAACtYAAArWMAAK1kAACtZQAArWgAAK1pAACtawAArWwAAK1uAACtcQAArXIAAK1zAACtdgAArXcAAK2AAACtjQAArZIAAK2UAACtlgAArZsAAK2eAACtoQAAraMAAK3IAACt7AAArhMAAK43AACuOgAArjwAAK4+AACuQAAArkIAAK5EAACuRQAArkgAAK5VAACuZgAArmgAAK5qAACubAAArm4AAK5wAACucgAArnQAAK52AACuhwAArooAAK6NAACukAAArpMAAK6WAACumQAArpwAAK6fAACuoQAAruAAAK7iAACu5AAAruYAAK7pAACu6gAArusAAK7sAACu7QAAru8AAK7xAACu8gAArvMAAK71AACu9gAArzUAAK83AACvOQAArzsAAK8+AACvPwAAr0AAAK9BAACvQgAAr0QAAK9GAACvRwAAr0gAAK9KAACvSwAAr4oAAK+MAACvjwAAr5EAAK+UAACvlQAAr5YAAK+XAACvmAAAr5oAAK+cAACvnQAAr54AAK+gAACvoQAAr64AAK+vAACvsAAAr7IAAK/xAACv8wAAr/UAAK/3AACv+gAAr/sAAK/8AACv/QAAr/4AALAAAACwAgAAsAMAALAEAACwBgAAsAcAALBGAACwSAAAsEoAALBMAACwTwAAsFAAALBRAACwUgAAsFMAALBVAACwVwAAsFgAALBZAACwWwAAsFwAALCbAACwnQAAsJ8AALChAACwpAAAsKUAALCmAACwpwAAsKgAALCqAACwrAAAsK0AALCuAACwsAAAsLEAALDwAACw8gAAsPQAALD2AACw+QAAsPoAALD7AACw/AAAsP0AALD/AACxAQAAsQIAALEDAACxBQAAsQYAALFFAACxRwAAsUkAALFLAACxTgAAsU8AALFQAACxUQAAsVIAALFUAACxVgAAsVcAALFYAACxWgAAsVsAALGAAACxpAAAscsAALHvAACx8gAAsfQAALH2AACx+AAAsfoAALH8AACx/QAAsgAAALINAACyHAAAsh4AALIgAACyIgAAsiQAALImAACyKAAAsioAALI5AACyPAAAsj8AALJCAACyRQAAskgAALJLAACyTgAAslAAALKPAACykQAAspMAALKVAACymAAAspkAALKaAACymwAAspwAALKeAACyoAAAsqEAALKiAACypAAAsqUAALLkAACy5gAAsugAALLqAACy7QAAsu4AALLvAACy8AAAsvEAALLzAACy9QAAsvYAALL3AACy+QAAsvoAALM5AACzOwAAsz0AALM/AACzQgAAs0MAALNEAACzRQAAs0YAALNIAACzSgAAs0sAALNMAACzTgAAs08AALOOAACzkAAAs5IAALOUAACzlwAAs5gAALOZAACzmgAAs5sAALOdAACznwAAs6AAALOhAACzowAAs6QAALPjAACz5QAAs+cAALPpAACz7AAAs+0AALPuAACz7wAAs/AAALPyAACz9AAAs/UAALP2AACz+AAAs/kAALQ4AAC0OgAAtDwAALQ+AAC0QQAAtEIAALRDAAC0RAAAtEUAALRHAAC0SQAAtEoAALRLAAC0TQAAtE4AALSNAAC0jwAAtJEAALSTAAC0lgAAtJcAALSYAAC0mQAAtJoAALScAAC0ngAAtJ8AALSgAAC0ogAAtKMAALTuAAC1EQAAtTEAALVRAAC1UwAAtVUAALVXAAC1WQAAtVwAALVdAAC1XgAAtWEAALViAAC1ZAAAtWUAALVnAAC1aQAAtWoAALVrAAC1bgAAtW8AALV4AAC1hQAAtYoAALWMAAC1jgAAtZMAALWWAAC1mQAAtZsAALXAAAC15AAAtgsAALYvAAC2MgAAtjQAALY2AAC2OAAAtjoAALY8AAC2PQAAtkAAALZNAAC2XgAAtmAAALZiAAC2ZAAAtmYAALZoAAC2agAAtmwAALZuAAC2fwAAtoIAALaFAAC2iAAAtosAALaOAAC2kQAAtpQAALaXAAC2mQAAttgAALbaAAC23AAAtt4AALbhAAC24gAAtuMAALbkAAC25QAAtucAALbpAAC26gAAtusAALbtAAC27gAAty0AALcvAAC3MQAAtzMAALc2AAC3NwAAtzgAALc5AAC3OgAAtzwAALc+AAC3PwAAt0AAALdCAAC3QwAAt4IAALeEAAC3hwAAt4kAALeMAAC3jQAAt44AALePAAC3kAAAt5IAALeUAAC3lQAAt5YAALeYAAC3mQAAt6YAALenAAC3qAAAt6oAALfpAAC36wAAt+0AALfvAAC38gAAt/MAALf0AAC39QAAt/YAALf4AAC3+gAAt/sAALf8AAC3/gAAt/8AALg+AAC4QAAAuEIAALhEAAC4RwAAuEgAALhJAAC4SgAAuEsAALhNAAC4TwAAuFAAALhRAAC4UwAAuFQAALiTAAC4lQAAuJcAALiZAAC4nAAAuJ0AALieAAC4nwAAuKAAALiiAAC4pAAAuKUAALimAAC4qAAAuKkAALjoAAC46gAAuOwAALjuAAC48QAAuPIAALjzAAC49AAAuPUAALj3AAC4+QAAuPoAALj7AAC4/QAAuP4AALk9AAC5PwAAuUEAALlDAAC5RgAAuUcAALlIAAC5SQAAuUoAALlMAAC5TgAAuU8AALlQAAC5UgAAuVMAALl4AAC5nAAAucMAALnnAAC56gAAuewAALnuAAC58AAAufIAALn0AAC59QAAufgAALoFAAC6FAAAuhYAALoYAAC6GgAAuhwAALoeAAC6IAAAuiIAALoxAAC6NAAAujcAALo6AAC6PQAAukAAALpDAAC6RgAAukgAALqHAAC6iQAAuosAALqNAAC6kAAAupEAALqSAAC6kwAAupQAALqWAAC6mAAAupkAALqaAAC6nAAAup0AALrcAAC63gAAuuAAALriAAC65QAAuuYAALrnAAC66AAAuukAALrrAAC67QAAuu4AALrvAAC68QAAuvIAALsxAAC7MwAAuzUAALs3AAC7OgAAuzsAALs8AAC7PQAAuz4AALtAAAC7QgAAu0MAALtEAAC7RgAAu0cAALuGAAC7iAAAu4oAALuMAAC7jwAAu5AAALuRAAC7kgAAu5MAALuVAAC7lwAAu5gAALuZAAC7mwAAu5wAALvbAAC73QAAu98AALvhAAC75AAAu+UAALvmAAC75wAAu+gAALvqAAC77AAAu+0AALvuAAC78AAAu/EAALwwAAC8MgAAvDQAALw2AAC8OQAAvDoAALw7AAC8PAAAvD0AALw/AAC8QQAAvEIAALxDAAC8RQAAvEYAALyFAAC8hwAAvIkAALyLAAC8jgAAvI8AALyQAAC8kQAAvJIAALyUAAC8lgAAvJcAALyYAAC8mgAAvJsAALymAAC8rwAAvLAAALyyAAC8uwAAvMYAALzVAAC84AAAvO4AAL0DAAC9FwAAvS4AAL1AAAC9fwAAvYEAAL2DAAC9hQAAvYgAAL2JAAC9igAAvYsAAL2MAAC9jgAAvZAAAL2RAAC9kgAAvZQAAL2VAAC91AAAvdYAAL3YAAC92gAAvd0AAL3eAAC93wAAveAAAL3hAAC94wAAveUAAL3mAAC95wAAvekAAL3qAAC+KQAAvisAAL4uAAC+MAAAvjMAAL40AAC+NQAAvjYAAL43AAC+OQAAvjsAAL48AAC+PQAAvj8AAL5AAAC+fwAAvoEAAL6DAAC+hQAAvogAAL6JAAC+igAAvosAAL6MAAC+jgAAvpAAAL6RAAC+kgAAvpQAAL6VAAC+1AAAvtYAAL7YAAC+2gAAvt0AAL7eAAC+3wAAvuAAAL7hAAC+4wAAvuUAAL7mAAC+5wAAvukAAL7qAAC/NQAAv1gAAL94AAC/mAAAv5oAAL+cAAC/ngAAv6AAAL+iAAC/owAAv6QAAL+nAAC/qAAAv6oAAL+rAAC/rQAAv68AAL+wAAC/sQAAv7QAAL+1AAC/ugAAv8cAAL/MAAC/zgAAv9AAAL/VAAC/2AAAv9sAAL/dAADAAgAAwCYAAMBNAADAcQAAwHQAAMB2AADAeAAAwHoAAMB8AADAfgAAwH8AAMCCAADAjwAAwKAAAMCiAADApAAAwKYAAMCoAADAqgAAwKwAAMCuAADAsAAAwMEAAMDEAADAxwAAwMoAAMDNAADA0AAAwNMAAMDWAADA2QAAwNsAAMEaAADBHAAAwR4AAMEgAADBIwAAwSQAAMElAADBJgAAwScAAMEpAADBKwAAwSwAAMEtAADBLwAAwTAAAMFvAADBcQAAwXMAAMF1AADBeAAAwXkAAMF6AADBewAAwXwAAMF+AADBgAAAwYEAAMGCAADBhAAAwYUAAMHEAADBxgAAwckAAMHLAADBzgAAwc8AAMHQAADB0QAAwdIAAMHUAADB1gAAwdcAAMHYAADB2gAAwdsAAMHoAADB6QAAweoAAMHsAADCKwAAwi0AAMIvAADCMQAAwjQAAMI1AADCNgAAwjcAAMI4AADCOgAAwjwAAMI9AADCPgAAwkAAAMJBAADCgAAAwoIAAMKEAADChgAAwokAAMKKAADCiwAAwowAAMKNAADCjwAAwpEAAMKSAADCkwAAwpUAAMKWAADC1QAAwtcAAMLZAADC2wAAwt4AAMLfAADC4AAAwuEAAMLiAADC5AAAwuYAAMLnAADC6AAAwuoAAMLrAADDKgAAwywAAMMuAADDMAAAwzMAAMM0AADDNQAAwzYAAMM3AADDOQAAwzsAAMM8AADDPQAAwz8AAMNAAADDfwAAw4EAAMODAADDhQAAw4gAAMOJAADDigAAw4sAAMOMAADDjgAAw5AAAMORAADDkgAAw5QAAMOVAADDugAAw94AAMQFAADEKQAAxCwAAMQuAADEMAAAxDIAAMQ0AADENgAAxDcAAMQ6AADERwAAxFYAAMRYAADEWgAAxFwAAMReAADEYAAAxGIAAMRkAADEcwAAxHYAAMR5AADEfAAAxH8AAMSCAADEhQAAxIgAAMSKAADEyQAAxMsAAMTNAADEzwAAxNIAAMTTAADE1AAAxNUAAMTWAADE2AAAxNoAAMTbAADE3AAAxN4AAMTfAADFHgAAxSAAAMUiAADFJAAAxScAAMUoAADFKQAAxSoAAMUrAADFLQAAxS8AAMUwAADFMQAAxTMAAMU0AADFcwAAxXUAAMV3AADFeQAAxXwAAMV9AADFfgAAxX8AAMWAAADFggAAxYQAAMWFAADFhgAAxYgAAMWJAADFyAAAxcoAAMXNAADFzwAAxdIAAMXTAADF1AAAxdUAAMXWAADF2AAAxdoAAMXbAADF3AAAxd4AAMXfAADGHgAAxiAAAMYiAADGJAAAxicAAMYoAADGKQAAxioAAMYrAADGLQAAxi8AAMYwAADGMQAAxjMAAMY0AADGcwAAxnUAAMZ3AADGeQAAxnwAAMZ9AADGfgAAxn8AAMaAAADGggAAxoQAAMaFAADGhgAAxogAAMaJAADGyAAAxsoAAMbMAADGzgAAxtEAAMbSAADG0wAAxtQAAMbVAADG1wAAxtkAAMbaAADG2wAAxt0AAMbeAADHKQAAx0wAAMdsAADHjAAAx44AAMeQAADHkgAAx5QAAMeWAADHlwAAx5gAAMebAADHnAAAx54AAMefAADHoQAAx6MAAMekAADHpQAAx6gAAMepAADHrgAAx7sAAMfAAADHwgAAx8QAAMfJAADHzAAAx88AAMfRAADH9gAAyBoAAMhBAADIZQAAyGgAAMhqAADIbAAAyG4AAMhwAADIcgAAyHMAAMh2AADIgwAAyJQAAMiWAADImAAAyJoAAMicAADIngAAyKAAAMiiAADIpAAAyLUAAMi4AADIuwAAyL4AAMjBAADIxAAAyMcAAMjKAADIzQAAyM8AAMkOAADJEAAAyRIAAMkUAADJFwAAyRgAAMkZAADJGgAAyRsAAMkdAADJHwAAySAAAMkhAADJIwAAySQAAMljAADJZQAAyWcAAMlpAADJbAAAyW0AAMluAADJbwAAyXAAAMlyAADJdAAAyXUAAMl2AADJeAAAyXkAAMm4AADJugAAyb0AAMm/AADJwgAAycMAAMnEAADJxQAAycYAAMnIAADJygAAycsAAMnMAADJzgAAyc8AAMncAADJ3QAAyd4AAMngAADKHwAAyiEAAMojAADKJQAAyigAAMopAADKKgAAyisAAMosAADKLgAAyjAAAMoxAADKMgAAyjQAAMo1AADKdAAAynYAAMp4AADKegAAyn0AAMp+AADKfwAAyoAAAMqBAADKgwAAyoUAAMqGAADKhwAAyokAAMqKAADKyQAAyssAAMrNAADKzwAAytIAAMrTAADK1AAAytUAAMrWAADK2AAAytoAAMrbAADK3AAAyt4AAMrfAADLHgAAyyAAAMsiAADLJAAAyycAAMsoAADLKQAAyyoAAMsrAADLLQAAyy8AAMswAADLMQAAyzMAAMs0AADLcwAAy3UAAMt3AADLeQAAy3wAAMt9AADLfgAAy38AAMuAAADLggAAy4QAAMuFAADLhgAAy4gAAMuJAADLrgAAy9IAAMv5AADMHQAAzCAAAMwiAADMJAAAzCYAAMwoAADMKgAAzCsAAMwuAADMOwAAzEoAAMxMAADMTgAAzFAAAMxSAADMVAAAzFYAAMxYAADMZwAAzGoAAMxtAADMcAAAzHMAAMx2AADMeQAAzHwAAMx+AADMvQAAzL8AAMzBAADMwwAAzMYAAMzHAADMyAAAzMkAAMzKAADMzAAAzM4AAMzPAADM0AAAzNIAAMzTAADNEgAAzRQAAM0WAADNGAAAzRsAAM0cAADNHQAAzR4AAM0fAADNIQAAzSMAAM0kAADNJQAAzScAAM0oAADNZwAAzWkAAM1rAADNbQAAzXAAAM1xAADNcgAAzXMAAM10AADNdgAAzXgAAM15AADNegAAzXwAAM19AADNvAAAzb4AAM3AAADNwgAAzcUAAM3GAADNxwAAzcgAAM3JAADNywAAzc0AAM3OAADNzwAAzdEAAM3SAADOEQAAzhMAAM4VAADOFwAAzhoAAM4bAADOHAAAzh0AAM4eAADOIAAAziIAAM4jAADOJAAAziYAAM4nAADOZgAAzmgAAM5qAADObAAAzm8AAM5wAADOcQAAznIAAM5zAADOdQAAzncAAM54AADOeQAAznsAAM58AADOuwAAzr0AAM6/AADOwQAAzsQAAM7FAADOxgAAzscAAM7IAADOygAAzswAAM7NAADOzgAAztAAAM7RAADPHAAAzz8AAM9fAADPfwAAz4EAAM+DAADPhQAAz4cAAM+JAADPigAAz4sAAM+OAADPjwAAz5EAAM+SAADPlAAAz5YAAM+XAADPmAAAz5sAAM+cAADPoQAAz64AAM+zAADPtQAAz7cAAM+8AADPvwAAz8IAAM/EAADP6QAA0A0AANA0AADQWAAA0FsAANBdAADQXwAA0GEAANBjAADQZQAA0GYAANBpAADQdgAA0IcAANCJAADQiwAA0I0AANCPAADQkQAA0JMAANCVAADQlwAA0KgAANCrAADQrgAA0LEAANC0AADQtwAA0LoAANC9AADQwAAA0MIAANEBAADRAwAA0QUAANEHAADRCgAA0QsAANEMAADRDQAA0Q4AANEQAADREgAA0RMAANEUAADRFgAA0RcAANFWAADRWAAA0VoAANFcAADRXwAA0WAAANFhAADRYgAA0WMAANFlAADRZwAA0WgAANFpAADRawAA0WwAANGrAADRrQAA0bAAANGyAADRtQAA0bYAANG3AADRuAAA0bkAANG7AADRvQAA0b4AANG/AADRwQAA0cIAANHPAADR0AAA0dEAANHTAADSEgAA0hQAANIWAADSGAAA0hsAANIcAADSHQAA0h4AANIfAADSIQAA0iMAANIkAADSJQAA0icAANIoAADSZwAA0mkAANJrAADSbQAA0nAAANJxAADScgAA0nMAANJ0AADSdgAA0ngAANJ5AADSegAA0nwAANJ9AADSvAAA0r4AANLAAADSwgAA0sUAANLGAADSxwAA0sgAANLJAADSywAA0s0AANLOAADSzwAA0tEAANLSAADTEQAA0xMAANMVAADTFwAA0xoAANMbAADTHAAA0x0AANMeAADTIAAA0yIAANMjAADTJAAA0yYAANMnAADTZgAA02gAANNqAADTbAAA028AANNwAADTcQAA03IAANNzAADTdQAA03cAANN4AADTeQAA03sAANN8AADToQAA08UAANPsAADUEAAA1BMAANQVAADUFwAA1BkAANQbAADUHQAA1B4AANQhAADULgAA1D0AANQ/AADUQQAA1EMAANRFAADURwAA1EkAANRLAADUWgAA1F0AANRgAADUYwAA1GYAANRpAADUbAAA1G8AANRxAADUsAAA1LIAANS0AADUtgAA1LkAANS6AADUuwAA1LwAANS9AADUvwAA1MEAANTCAADUwwAA1MUAANTGAADVBQAA1QcAANUJAADVCwAA1Q4AANUPAADVEAAA1REAANUSAADVFAAA1RYAANUXAADVGAAA1RoAANUbAADVWgAA1VwAANVeAADVYAAA1WMAANVkAADVZQAA1WYAANVnAADVaQAA1WsAANVsAADVbQAA1W8AANVwAADVrwAA1bEAANWzAADVtQAA1bgAANW5AADVugAA1bsAANW8AADVvgAA1cAAANXBAADVwgAA1cQAANXFAADWBAAA1gYAANYIAADWCgAA1g0AANYOAADWDwAA1hAAANYRAADWEwAA1hUAANYWAADWFwAA1hkAANYaAADWWQAA1lsAANZeAADWYAAA1mMAANZkAADWZQAA1mYAANZnAADWaQAA1msAANZsAADWbQAA1m8AANZwAADWjAAA1ssAANbNAADWzwAA1tEAANbUAADW1QAA1tYAANbXAADW2AAA1toAANbcAADW3QAA1t4AANbgAADW4QAA1ywAANdPAADXbwAA148AANeRAADXkwAA15UAANeXAADXmQAA15oAANebAADXngAA158AANehAADXogAA16UAANenAADXqAAA16kAANesAADXrQAA17IAANe/AADXxAAA18YAANfIAADXzQAA19AAANfTAADX1QAA1/oAANgeAADYRQAA2GkAANhsAADYbgAA2HAAANhyAADYdAAA2HYAANh3AADYegAA2IcAANiYAADYmgAA2JwAANieAADYoAAA2KIAANikAADYpgAA2KgAANi5AADYvAAA2L8AANjCAADYxQAA2MgAANjLAADYzgAA2NEAANjTAADZEgAA2RQAANkWAADZGAAA2RsAANkcAADZHQAA2R4AANkfAADZIQAA2SMAANkkAADZJQAA2ScAANkoAADZZwAA2WkAANlrAADZbQAA2XAAANlxAADZcgAA2XMAANl0AADZdgAA2XgAANl5AADZegAA2XwAANl9AADZvAAA2b4AANnBAADZwwAA2cYAANnHAADZyAAA2ckAANnKAADZzAAA2c4AANnPAADZ0AAA2dIAANnTAADZ4AAA2eEAANniAADZ5AAA2iMAANolAADaJwAA2ikAANosAADaLQAA2i4AANovAADaMAAA2jIAANo0AADaNQAA2jYAANo4AADaOQAA2ngAANp6AADafAAA2n4AANqBAADaggAA2oMAANqEAADahQAA2ocAANqJAADaigAA2osAANqNAADajgAA2s0AANrPAADa0QAA2tMAANrWAADa1wAA2tgAANrZAADa2gAA2twAANreAADa3wAA2uAAANriAADa4wAA2yIAANskAADbJgAA2ygAANsrAADbLAAA2y0AANsuAADbLwAA2zEAANszAADbNAAA2zUAANs3AADbOAAA23cAANt5AADbewAA230AANuAAADbgQAA24IAANuDAADbhAAA24YAANuIAADbiQAA24oAANuMAADbjQAA27IAANvWAADb/QAA3CEAANwkAADcJgAA3CgAANwqAADcLAAA3C4AANwvAADcMgAA3D8AANxOAADcUAAA3FIAANxUAADcVgAA3FgAANxaAADcXAAA3GsAANxuAADccQAA3HQAANx3AADcegAA3H0AANyAAADcggAA3MEAANzDAADcxQAA3McAANzKAADcywAA3MwAANzNAADczgAA3NAAANzSAADc0wAA3NQAANzWAADc1wAA3RYAAN0YAADdGwAA3R0AAN0gAADdIQAA3SIAAN0jAADdJAAA3SYAAN0oAADdKQAA3SoAAN0sAADdLQAA3WwAAN1uAADdcAAA3XIAAN11AADddgAA3XcAAN14AADdeQAA3XsAAN19AADdfgAA3X8AAN2BAADdggAA3cEAAN3DAADdxgAA3cgAAN3LAADdzAAA3c0AAN3OAADdzwAA3dEAAN3TAADd1AAA3dUAAN3XAADd2AAA3hsAAN4/AADeYwAA3oYAAN6tAADezQAA3vQAAN8bAADfOwAA318AAN+DAADfhQAA34gAAN+KAADfjAAA344AAN+RAADflAAA35YAAN+YAADfmwAA350AAN+fAADfogAA36UAAN+mAADfrwAA37wAAN+/AADfwQAA38QAAN/HAADfyQAA3+4AAOASAADgOQAA4F0AAOBgAADgYgAA4GQAAOBmAADgaAAA4GoAAOBrAADgbgAA4HsAAOCOAADgkAAA4JIAAOCUAADglgAA4JgAAOCaAADgnAAA4J4AAOCgAADgswAA4LYAAOC5AADgvAAA4L8AAODCAADgxQAA4MgAAODLAADgzgAA4NAAAOEPAADhEQAA4RQAAOEWAADhGQAA4RoAAOEbAADhHAAA4R0AAOEfAADhIQAA4SIAAOEjAADhJQAA4SYAAOEvAADhMAAA4TIAAOFxAADhcwAA4XUAAOF3AADhegAA4XsAAOF8AADhfQAA4X4AAOGAAADhggAA4YMAAOGEAADhhgAA4YcAAOHGAADhyAAA4csAAOHNAADh0AAA4dEAAOHSAADh0wAA4dQAAOHWAADh2AAA4dkAAOHaAADh3AAA4d0AAOHmAADh5wAA4ekAAOIoAADiKgAA4iwAAOIuAADiMQAA4jIAAOIzAADiNAAA4jUAAOI3AADiOQAA4joAAOI7AADiPQAA4j4AAOJ9AADifwAA4oIAAOKEAADihwAA4ogAAOKJAADiigAA4osAAOKNAADijwAA4pAAAOKRAADikwAA4pQAAOKdAADingAA4qAAAOLfAADi4QAA4uMAAOLlAADi6AAA4ukAAOLqAADi6wAA4uwAAOLuAADi8AAA4vEAAOLyAADi9AAA4vUAAOM0AADjNgAA4zkAAOM7AADjPgAA4z8AAONAAADjQQAA40IAAONEAADjRgAA40cAAONIAADjSgAA40sAAONYAADjWQAA41oAAONcAADjmwAA450AAOOfAADjoQAA46QAAOOlAADjpgAA46cAAOOoAADjqgAA46wAAOOtAADjrgAA47AAAOOxAADj8AAA4/IAAOP1AADj9wAA4/oAAOP7AADj/AAA4/0AAOP+AADkAAAA5AIAAOQDAADkBAAA5AYAAOQHAADkFgAA5CMAAOQwAADkMwAA5DYAAOQ5AADkPAAA5D8AAORCAADkTwAA5FIAAORVAADkWAAA5FsAAOReAADkYQAA5GMAAORuAADkdgAA5IAAAOSOAADkmAAA5KQAAOTvAADlEgAA5TIAAOVSAADlVAAA5VYAAOVYAADlWgAA5V0AAOVeAADlXwAA5WIAAOVjAADlZQAA5WYAAOVoAADlawAA5WwAAOVtAADlcAAA5XEAAOV2AADlgwAA5YgAAOWKAADljAAA5ZEAAOWUAADllwAA5ZkAAOW+AADl4gAA5gkAAOYtAADmMAAA5jIAAOY0AADmNgAA5jgAAOY6AADmOwAA5j4AAOZLAADmXAAA5l4AAOZgAADmYgAA5mQAAOZmAADmaAAA5moAAOZsAADmfQAA5oAAAOaDAADmhgAA5okAAOaMAADmjwAA5pIAAOaVAADmlwAA5tYAAObYAADm2gAA5twAAObfAADm4AAA5uEAAObiAADm4wAA5uUAAObnAADm6AAA5ukAAObrAADm7AAA5ysAAOctAADnLwAA5zEAAOc0AADnNQAA5zYAAOc3AADnOAAA5zoAAOc8AADnPQAA5z4AAOdAAADnQQAA54AAAOeCAADnhQAA54cAAOeKAADniwAA54wAAOeNAADnjgAA55AAAOeSAADnkwAA55QAAOeWAADnlwAA56QAAOelAADnpgAA56gAAOfnAADn6QAA5+sAAOftAADn8AAA5/EAAOfyAADn8wAA5/QAAOf2AADn+AAA5/kAAOf6AADn/AAA5/0AAOg8AADoPgAA6EAAAOhCAADoRQAA6EYAAOhHAADoSAAA6EkAAOhLAADoTQAA6E4AAOhPAADoUQAA6FIAAOiRAADokwAA6JUAAOiXAADomgAA6JsAAOicAADonQAA6J4AAOigAADoogAA6KMAAOikAADopgAA6KcAAOjmAADo6AAA6OoAAOjsAADo7wAA6PAAAOjxAADo8gAA6PMAAOj1AADo9wAA6PgAAOj5AADo+wAA6PwAAOk7AADpPQAA6T8AAOlBAADpRAAA6UUAAOlGAADpRwAA6UgAAOlKAADpTAAA6U0AAOlOAADpUAAA6VEAAOl2AADpmgAA6cEAAOnlAADp6AAA6eoAAOnsAADp7gAA6fAAAOnyAADp8wAA6fYAAOoDAADqEgAA6hQAAOoWAADqGAAA6hoAAOocAADqHgAA6iAAAOovAADqMgAA6jUAAOo4AADqOwAA6j4AAOpBAADqRAAA6kYAAOqFAADqhwAA6ooAAOqMAADqjwAA6pAAAOqRAADqkgAA6pMAAOqVAADqlwAA6pgAAOqZAADqmwAA6pwAAOqeAADq3QAA6t8AAOrhAADq4wAA6uYAAOrnAADq6AAA6ukAAOrqAADq7AAA6u4AAOrvAADq8AAA6vIAAOrzAADrMgAA6zQAAOs2AADrOAAA6zsAAOs8AADrPQAA6z4AAOs/AADrQQAA60MAAOtEAADrRQAA60cAAOtIAADrhwAA64kAAOuMAADrjgAA65EAAOuSAADrkwAA65QAAOuVAADrlwAA65kAAOuaAADrmwAA650AAOueAADroAAA698AAOvhAADr4wAA6+UAAOvoAADr6QAA6+oAAOvrAADr7AAA6+4AAOvwAADr8QAA6/IAAOv0AADr9QAA7DQAAOw2AADsOAAA7DoAAOw9AADsPgAA7D8AAOxAAADsQQAA7EMAAOxFAADsRgAA7EcAAOxJAADsSgAA7IkAAOyLAADsjQAA7I8AAOySAADskwAA7JQAAOyVAADslgAA7JgAAOyaAADsmwAA7JwAAOyeAADsnwAA7OoAAO0NAADtLQAA7U0AAO1PAADtUQAA7VMAAO1VAADtWAAA7VkAAO1aAADtXQAA7V4AAO1gAADtYQAA7WMAAO1mAADtZwAA7WgAAO1rAADtbAAA7XEAAO1+AADtgwAA7YUAAO2HAADtjAAA7Y8AAO2SAADtlAAA7bkAAO3dAADuBAAA7igAAO4rAADuLQAA7i8AAO4xAADuMwAA7jUAAO42AADuOQAA7kYAAO5XAADuWQAA7lsAAO5dAADuXwAA7mEAAO5jAADuZQAA7mcAAO54AADuewAA7n4AAO6BAADuhAAA7ocAAO6KAADujQAA7pAAAO6SAADu0QAA7tMAAO7VAADu1wAA7toAAO7bAADu3AAA7t0AAO7eAADu4AAA7uIAAO7jAADu5AAA7uYAAO7nAADvJgAA7ygAAO8qAADvLAAA7y8AAO8wAADvMQAA7zIAAO8zAADvNQAA7zcAAO84AADvOQAA7zsAAO88AADvewAA730AAO+AAADvggAA74UAAO+GAADvhwAA74gAAO+JAADviwAA740AAO+OAADvjwAA75EAAO+SAADvnwAA76AAAO+hAADvowAA7+IAAO/kAADv5gAA7+gAAO/rAADv7AAA7+0AAO/uAADv7wAA7/EAAO/zAADv9AAA7/UAAO/3AADv+AAA8DcAAPA5AADwOwAA8D0AAPBAAADwQQAA8EIAAPBDAADwRAAA8EYAAPBIAADwSQAA8EoAAPBMAADwTQAA8IwAAPCOAADwkAAA8JIAAPCVAADwlgAA8JcAAPCYAADwmQAA8JsAAPCdAADwngAA8J8AAPChAADwogAA8OEAAPDjAADw5QAA8OcAAPDqAADw6wAA8OwAAPDtAADw7gAA8PAAAPDyAADw8wAA8PQAAPD2AADw9wA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BDTcAAQ05AAENOgABDT0AAQ1AAAENQQABDUIAAQ1FAAENRgABDUsAAQ1YAAENXQABDV8AAQ1hAAENZgABDWkAAQ1sAAENbgABDZMAAQ23AAEN3gABDgIAAQ4FAAEOBwABDgkAAQ4LAAEODQABDg8AAQ4QAAEOEwABDiAAAQ4xAAEOMwABDjUAAQ43AAEOOQABDjsAAQ49AAEOPwABDkEAAQ5SAAEOVQABDlgAAQ5bAAEOXgABDmEAAQ5kAAEOZwABDmoAAQ5sAAEOqwABDq0AAQ6vAAEOsQABDrQAAQ61AAEOtgABDrcAAQ64AAEOugABDrwAAQ69AAEOvgABDsAAAQ7BAAEPAAABDwIAAQ8EAAEPBgABDwkAAQ8KAAEPCwABDwwAAQ8NAAEPDwABDxEAAQ8SAAEPEwABDxUAAQ8WAAEPVQABD1cAAQ9aAAEPXAABD18AAQ9gAAEPYQABD2IAAQ9jAAEPZQABD2cAAQ9oAAEPaQABD2sAAQ9sAAEPeQABD3oAAQ97AAEPfQABD7wAAQ++AAEPwAABD8IAAQ/FAAEPxgABD8cAAQ/IAAEPyQABD8sAAQ/NAAEPzgABD88AAQ/RAAEP0gABEBEAARATAAEQFQABEBcAARAaAAEQGwABEBwAARAdAAEQHgABECAAARAiAAEQIwABECQAARAmAAEQJwABEGYAARBoAAEQagABEGwAARBvAAEQcAABEHEAARByAAEQcwABEHUAARB3AAEQeAABEHkAARB7AAEQfAABELsAARC9AAEQvwABEMEAARDEAAEQxQABEMYAARDHAAEQyAABEMoAARDMAAEQzQABEM4AARDQAAEQ0QABERAAARESAAERFAABERYAAREZAAERGgABERsAAREcAAERHQABER8AAREhAAERIgABESMAARElAAERJgABEUsAARFvAAERlgABEboAARG9AAERvwABEcEAARHDAAERxQABEccAARHIAAERywABEdgAARHnAAER6QABEesAARHtAAER7wABEfEAARHzAAER9QABEgQAARIHAAESCgABEg0AARIQAAESEwABEhYAARIZAAESGwABEloAARJcAAESXgABEmAAARJjAAESZAABEmUAARJmAAESZwABEmkAARJrAAESbAABEm0AARJvAAEScAABEq8AARKxAAESswABErUAARK4AAESuQABEroAARK7AAESvAABEr4AARLAAAESwQABEsIAARLEAAESxQABEwQAARMGAAETCAABEwoAARMNAAETDgABEw8AARMQAAETEQABExMAARMVAAETFgABExcAARMZAAETGgABE1kAARNbAAETXQABE18AARNiAAETYwABE2QAARNlAAETZgABE2gAARNqAAETawABE2wAARNuAAETbwABE64AAROwAAETsgABE7QAARO3AAETuAABE7kAARO6AAETuwABE70AARO/AAETwAABE8EAARPDAAETxAABFAMAARQFAAEUBwABFAkAARQMAAEUDQABFA4AARQPAAEUEAABFBIAARQUAAEUFQABFBYAARQYAAEUGQABFFgAARRaAAEUXQABFF8AARRiAAEUYwABFGQAARRlAAEUZgABFGgAARRqAAEUawABFGwAARRuAAEUbwABFHgAARR5AAEUewABFLoAARS8AAEUvgABFMAAARTDAAEUxAABFMUAARTGAAEUxwABFMkAARTLAAEUzAABFM0AARTPAAEU0AABFQ8AARURAAEVEwABFRUAARUYAAEVGQABFRoAARUbAAEVHAABFR4AARUgAAEVIQABFSIAARUkAAEVJQABFWQAARVmAAEVaQABFWsAARVuAAEVbwABFXAAARVxAAEVcgABFXQAARV2AAEVdwABFXgAARV6AAEVewABFcYAARXpAAEWCQABFikAARYrAAEWLQABFi8AARYxAAEWMwABFjQAARY1AAEWOAABFjkAARY7AAEWPAABFj4AARZAAAEWQQABFkIAARZFAAEWRgABFksAARZYAAEWXQABFl8AARZhAAEWZgABFmkAARZsAAEWbgABFpMAARa3AAEW3gABFwIAARcFAAEXBwABFwkAARcLAAEXDQABFw8AARcQAAEXEwABFyAAARcxAAEXMwABFzUAARc3AAEXOQABFzsAARc9AAEXPwABF0EAARdSAAEXVQABF1gAARdbAAEXXgABF2EAARdkAAEXZwABF2oAARdsAAEXqwABF60AARevAAEXsQABF7QAARe1AAEXtgABF7cAARe4AAEXugABF7wAARe9AAEXvgABF8AAARfBAAEYAAABGAIAARgEAAEYBgABGAkAARgKAAEYCwABGAwAARgNAAEYDwABGBEAARgSAAEYEwABGBUAARgWAAEYVQABGFcAARhaAAEYXAABGF8AARhgAAEYYQABGGIAARhjAAEYZQABGGcAARhoAAEYaQABGGsAARhsAAEYeQABGHoAARh7AAEYfQABGLwAARi+AAEYwAABGMIAARjFAAEYxgABGMcAARjIAAEYyQABGMsAARjNAAEYzgABGM8AARjRAAEY0gABGREAARkTAAEZFQABGRcAARkaAAEZGwABGRwAARkdAAEZHgABGSAAARkiAAEZIwABGSQAARkmAAEZJwABGWYAARloAAEZagABGWwAARlvAAEZcAABGXEAARlyAAEZcwABGXUAARl3AAEZeAABGXkAARl7AAEZfAABGbsAARm9AAEZvwABGcEAARnEAAEZxQABGcYAARnHAAEZyAABGcoAARnMAAEZzQABGc4AARnQAAEZ0QABGhAAARoSAAEaFAABGhYAARoZAAEaGgABGhsAARocAAEaHQABGh8AARohAAEaIgABGiMAARolAAEaJgABGksAARpvAAEalgABGroAARq9AAEavwABGsEAARrDAAEaxQABGscAARrIAAEaywABGtgAARrnAAEa6QABGusAARrtAAEa7wABGvEAARrzAAEa9QABGwQAARsHAAEbCgABGw0AARsQAAEbEwABGxYAARsZAAEbGwABG1oAARtcAAEbXwABG2EAARtkAAEbZQABG2YAARtnAAEbaAABG2oAARtsAAEbbQABG24AARtwAAEbcQABG7AAARuyAAEbtAABG7YAARu5AAEbugABG7sAARu8AAEbvQABG78AARvBAAEbwgABG8MAARvFAAEbxgABHAUAARwHAAEcCQABHAsAARwOAAEcDwABHBAAARwRAAEcEgABHBQAARwWAAEcFwABHBgAARwaAAEcGwABHFoAARxcAAEcXwABHGEAARxkAAEcZQABHGYAARxnAAEcaAABHGoAARxsAAEcbQABHG4AARxwAAEccQABHHMAARyyAAEctAABHLYAARy4AAEcuwABHLwAARy9AAEcvgABHL8AARzBAAEcwwABHMQAARzFAAEcxwABHMgAAR0HAAEdCQABHQsAAR0NAAEdEAABHREAAR0SAAEdEwABHRQAAR0WAAEdGAABHRkAAR0aAAEdHAABHR0AAR1cAAEdXgABHWAAAR1iAAEdZQABHWYAAR1nAAEdaAABHWkAAR1rAAEdbQABHW4AAR1vAAEdcQABHXIAAR29AAEd4AABHgAAAR4gAAEeIgABHiQAAR4mAAEeKAABHioAAR4rAAEeLAABHi8AAR4wAAEeMgABHjMAAR41AAEeNwABHjgAAR45AAEePAABHj0AAR5CAAEeTwABHlQAAR5WAAEeWAABHl0AAR5gAAEeYwABHmUAAR6KAAEergABHtUAAR75AAEe/AABHv4AAR8AAAEfAgABHwQAAR8GAAEfBwABHwoAAR8XAAEfKAABHyoAAR8sAAEfLgABHzAAAR8yAAEfNAABHzYAAR84AAEfSQABH0wAAR9PAAEfUgABH1UAAR9YAAEfWwABH14AAR9hAAEfYwABH6IAAR+kAAEfpgABH6gAAR+rAAEfrAABH60AAR+uAAEfrwABH7EAAR+zAAEftAABH7UAAR+3AAEfuAABH/cAAR/5AAEf+wABH/0AASAAAAEgAQABIAIAASADAAEgBAABIAYAASAIAAEgCQABIAoAASAMAAEgDQABIEwAASBOAAEgUQABIFMAASBWAAEgVwABIFgAASBZAAEgWgABIFwAASBeAAEgXwABIGAAASBiAAEgYwABIHAAASBxAAEgcgABIHQAASCzAAEgtQABILcAASC5AAEgvAABIL0AASC+AAEgvwABIMAAASDCAAEgxAABIMUAASDGAAEgyAABIMkAASEIAAEhCgABIQwAASEOAAEhEQABIRIAASETAAEhFAABIRUAASEXAAEhGQABIRoAASEbAAEhHQABIR4AASFdAAEhXwABIWEAASFjAAEhZgABIWcAASFoAAEhaQABIWoAASFsAAEhbgABIW8AASFwAAEhcgABIXMAASGyAAEhtAABIbYAASG4AAEhuwABIbwAASG9AAEhvgABIb8AASHBAAEhwwABIcQAASHFAAEhxwABIcgAASIHAAEiCQABIgsAASINAAEiEAABIhEAASISAAEiEwABIhQAASIWAAEiGAABIhkAASIaAAEiHAABIh0AASJCAAEiZgABIo0AASKxAAEitAABIrYAASK4AAEiugABIrwAASK+AAEivwABIsIAASLPAAEi3gABIuAAASLiAAEi5AABIuYAASLoAAEi6gABIuwAASL7AAEi/gABIwEAASMEAAEjBwABIwoAASMNAAEjEAABIxIAASNRAAEjUwABI1UAASNXAAEjWgABI1sAASNcAAEjXQABI14AASNgAAEjYgABI2MAASNkAAEjZgABI2cAASOmAAEjqAABI6oAASOsAAEjrwABI7AAASOxAAEjsgABI7MAASO1AAEjtwABI7gAASO5AAEjuwABI7wAASP7AAEj/QABI/8AASQBAAEkBAABJAUAASQGAAEkBwABJAgAASQKAAEkDAABJA0AASQOAAEkEAABJBEAASRQAAEkUgABJFQAASRWAAEkWQABJFoAASRbAAEkXAABJF0AASRfAAEkYQABJGIAASRjAAEkZQABJGYAASSlAAEkpwABJKkAASSrAAEkrgABJK8AASSwAAEksQABJLIAASS0AAEktgABJLcAASS4AAEkugABJLsAAST6AAEk/AABJP4AASUAAAElAwABJQQAASUFAAElBgABJQcAASUJAAElCwABJQwAASUNAAElDwABJRAAASVPAAElUQABJVMAASVVAAElWAABJVkAASVaAAElWwABJVwAASVeAAElYAABJWEAASViAAElZAABJWUAASWwAAEl0wABJfMAASYTAAEmFQABJhcAASYZAAEmGwABJh0AASYeAAEmHwABJiIAASYjAAEmJQABJiYAASYoAAEmKgABJisAASYsAAEmLwABJjAAASY1AAEmQgABJkcAASZJAAEmSwABJlAAASZTAAEmVgABJlgAASZ9AAEmoQABJsgAASbsAAEm7wABJvEAASbzAAEm9QABJvcAASb5AAEm+gABJv0AAScKAAEnGwABJx0AAScfAAEnIQABJyMAASclAAEnJwABJykAAScrAAEnPAABJz8AASdCAAEnRQABJ0gAASdLAAEnTgABJ1EAASdUAAEnVgABJ5UAASeXAAEnmQABJ5sAASeeAAEnnwABJ6AAASehAAEnogABJ6QAASemAAEnpwABJ6gAASeqAAEnqwABJ+oAASfsAAEn7gABJ/AAASfzAAEn9AABJ/UAASf2AAEn9wABJ/kAASf7AAEn/AABJ/0AASf/AAEoAAABKD8AAShBAAEoRAABKEYAAShJAAEoSgABKEsAAShMAAEoTQABKE8AAShRAAEoUgABKFMAAShVAAEoVgABKGMAAShkAAEoZQABKGcAASimAAEoqAABKKoAASisAAEorwABKLAAASixAAEosgABKLMAASi1AAEotwABKLgAASi5AAEouwABKLwAASj7AAEo/QABKP8AASkBAAEpBAABKQUAASkGAAEpBwABKQgAASkKAAEpDAABKQ0AASkOAAEpEAABKREAASlQAAEpUgABKVQAASlWAAEpWQABKVoAASlbAAEpXAABKV0AASlfAAEpYQABKWIAASljAAEpZQABKWYAASmlAAEppwABKakAASmrAAEprgABKa8AASmwAAEpsQABKbIAASm0AAEptgABKbcAASm4AAEpugABKbsAASn6AAEp/AABKf4AASoAAAEqAwABKgQAASoFAAEqBgABKgcAASoJAAEqCwABKgwAASoNAAEqDwABKhAAASo1AAEqWQABKoAAASqkAAEqpwABKqkAASqrAAEqrQABKq8AASqxAAEqsgABKrUAASrCAAEq0QABKtMAASrVAAEq1wABKtkAASrbAAEq3QABKt8AASruAAEq8QABKvQAASr3AAEq+gABKv0AASsAAAErAwABKwUAAStEAAErRgABK0kAAStLAAErTgABK08AAStQAAErUQABK1IAAStUAAErVgABK1cAAStYAAErWgABK1sAASuaAAErnAABK54AASugAAErowABK6QAASulAAErpgABK6cAASupAAErqwABK6wAASutAAErrwABK7AAASvvAAEr8QABK/MAASv1AAEr+AABK/kAASv6AAEr+wABK/wAASv+AAEsAAABLAEAASwCAAEsBAABLAUAASxEAAEsRgABLEkAASxLAAEsTgABLE8AASxQAAEsUQABLFIAASxUAAEsVgABLFcAASxYAAEsWgABLFsAASyaAAEsnAABLJ4AASygAAEsowABLKQAASylAAEspgABLKcAASypAAEsqwABLKwAASytAAEsrwABLLAAASzvAAEs8QABLPMAASz1AAEs+AABLPkAASz6AAEs+wABLPwAASz+AAEtAAABLQEAAS0CAAEtBAABLQUAAS1EAAEtRgABLUgAAS1KAAEtTQABLU4AAS1PAAEtUAABLVEAAS1TAAEtVQABLVYAAS1XAAEtWQABLVoAAS2lAAEtyAABLegAAS4IAAEuCgABLgwAAS4OAAEuEAABLhIAAS4TAAEuFAABLhcAAS4YAAEuGgABLhsAAS4dAAEuHwABLiAAAS4hAAEuJAABLiUAAS4qAAEuNwABLjwAAS4+AAEuQAABLkUAAS5IAAEuSwABLk0AAS5yAAEulgABLr0AAS7hAAEu5AABLuYAAS7oAAEu6gABLuwAAS7uAAEu7wABLvIAAS7/AAEvEAABLxIAAS8UAAEvFgABLxgAAS8aAAEvHAABLx4AAS8gAAEvMQABLzQAAS83AAEvOgABLz0AAS9AAAEvQwABL0YAAS9JAAEvSwABL4oAAS+MAAEvjgABL5AAAS+TAAEvlAABL5UAAS+WAAEvlwABL5kAAS+bAAEvnAABL50AAS+fAAEvoAABL98AAS/hAAEv4wABL+UAAS/oAAEv6QABL+oAAS/rAAEv7AABL+4AAS/wAAEv8QABL/IAAS/0AAEv9QABMDQAATA2AAEwOQABMDsAATA+AAEwPwABMEAAATBBAAEwQgABMEQAATBGAAEwRwABMEgAATBKAAEwSwABMFgAATBZAAEwWgABMFwAATCbAAEwnQABMJ8AATChAAEwpAABMKUAATCmAAEwpwABMKgAATCqAAEwrAABMK0AATCuAAEwsAABMLEAATDwAAEw8gABMPQAATD2AAEw+QABMPoAATD7AAEw/AABMP0AATD/AAExAQABMQIAATEDAAExBQABMQYAATFFAAExRwABMUkAATFLAAExTgABMU8AATFQAAExUQABMVIAATFUAAExVgABMVcAATFYAAExWgABMVsAATGaAAExnAABMZ4AATGgAAExowABMaQAATGlAAExpgABMacAATGpAAExqwABMawAATGtAAExrwABMbAAATHvAAEx8QABMfMAATH1AAEx+AABMfkAATH6AAEx+wABMfwAATH+AAEyAAABMgEAATICAAEyBAABMgUAATIqAAEyTgABMnUAATKZAAEynAABMp4AATKgAAEyogABMqQAATKmAAEypwABMqoAATK3AAEyxgABMsgAATLKAAEyzAABMs4AATLQAAEy0gABMtQAATLjAAEy5gABMukAATLsAAEy7wABMvIAATL1AAEy+AABMvoAATM5AAEzOwABMz0AATM/AAEzQgABM0MAATNEAAEzRQABM0YAATNIAAEzSgABM0sAATNMAAEzTgABM08AATOOAAEzkAABM5IAATOUAAEzlwABM5gAATOZAAEzmgABM5sAATOdAAEznwABM6AAATOhAAEzowABM6QAATPjAAEz5QABM+cAATPpAAEz7AABM+0AATPuAAEz7wABM/AAATPyAAEz9AABM/UAATP2AAEz+AABM/kAATQ4AAE0OgABNDwAATQ+AAE0QQABNEIAATRDAAE0RAABNEUAATRHAAE0SQABNEoAATRLAAE0TQABNE4AATSNAAE0jwABNJEAATSTAAE0lgABNJcAATSYAAE0mQABNJoAATScAAE0ngABNJ8AATSgAAE0ogABNKMAATTiAAE05AABNOYAATToAAE06wABNOwAATTtAAE07gABNO8AATTxAAE08wABNPQAATT1AAE09wABNPgAATU3AAE1OQABNTsAATU9AAE1QAABNUEAATVCAAE1QwABNUQAATVGAAE1SAABNUkAATVKAAE1TAABNU0AATVWAAE1VwABNVkAATWYAAE1mgABNZwAATWeAAE1oAABNaEAATWiAAE1owABNaQAATWmAAE1qAABNakAATWqAAE1rAABNa0AATXsAAE17gABNfAAATXyAAE19AABNfUAATX2AAE19wABNfgAATX6AAE1/AABNf0AATX+AAE2AAABNgEAATZAAAE2QgABNkQAATZGAAE2SAABNkkAATZKAAE2SwABNkwAATZOAAE2UAABNlEAATZSAAE2VAABNlUAATagAAE2wwABNuMAATcDAAE3BQABNwcAATcJAAE3CwABNw0AATcOAAE3DwABNxIAATcTAAE3FQABNxYAATcYAAE3GgABNxsAATccAAE3HwABNyAAATcpAAE3NgABNzsAATc9AAE3PwABN0QAATdHAAE3SgABN0wAATdxAAE3lQABN7wAATfgAAE34wABN+UAATfnAAE36QABN+sAATftAAE37gABN/EAATf+AAE4DwABOBEAATgTAAE4FQABOBcAATgZAAE4GwABOB0AATgfAAE4MAABODMAATg2AAE4OQABODwAATg/AAE4QgABOEUAAThIAAE4SgABOIkAATiLAAE4jQABOI8AATiSAAE4kwABOJQAATiVAAE4lgABOJgAATiaAAE4mwABOJwAATieAAE4nwABON4AATjgAAE44gABOOQAATjnAAE46AABOOkAATjqAAE46wABOO0AATjvAAE48AABOPEAATjzAAE49AABOTMAATk1AAE5OAABOToAATk9AAE5PgABOT8AATlAAAE5QQABOUMAATlFAAE5RgABOUcAATlJAAE5SgABOVcAATlYAAE5WQABOVsAATmaAAE5nAABOZ4AATmgAAE5owABOaQAATmlAAE5pgABOacAATmpAAE5qwABOawAATmtAAE5rwABObAAATnvAAE58QABOfMAATn1AAE5+AABOfkAATn6AAE5+wABOfwAATn+AAE6AAABOgEAAToCAAE6BAABOgUAATpEAAE6RgABOkgAATpKAAE6TQABOk4AATpPAAE6UAABOlEAATpTAAE6VQABOlYAATpXAAE6WQABOloAATqZAAE6mwABOp0AATqfAAE6ogABOqMAATqkAAE6pQABOqYAATqoAAE6qgABOqsAATqsAAE6rgABOq8AATruAAE68AABOvIAATr0AAE69wABOvgAATr5AAE6+gABOvsAATr9AAE6/wABOwAAATsBAAE7AwABOwQAATspAAE7TQABO3QAATuYAAE7mwABO50AATufAAE7oQABO6MAATulAAE7pgABO6kAATu2AAE7xQABO8cAATvJAAE7ywABO80AATvPAAE70QABO9MAATviAAE75QABO+gAATvrAAE77gABO/EAATv0AAE79wABO/kAATw4AAE8OgABPDwAATw+AAE8QQABPEIAATxDAAE8RAABPEUAATxHAAE8SQABPEoAATxLAAE8TQABPE4AATyNAAE8jwABPJEAATyTAAE8lgABPJcAATyYAAE8mQABPJoAATycAAE8ngABPJ8AATygAAE8ogABPKMAATziAAE85AABPOYAATzoAAE86wABPOwAATztAAE87gABPO8AATzxAAE88wABPPQAATz1AAE89wABPPgAAT03AAE9OQABPTsAAT09AAE9QAABPUEAAT1CAAE9QwABPUQAAT1GAAE9SAABPUkAAT1KAAE9TAABPU0AAT2MAAE9jgABPZAAAT2SAAE9lQABPZYAAT2XAAE9mAABPZkAAT2bAAE9nQABPZ4AAT2fAAE9oQABPaIAAT3hAAE94wABPeUAAT3nAAE96gABPesAAT3sAAE97QABPe4AAT3wAAE98gABPfMAAT30AAE99gABPfcAAT42AAE+OAABPjoAAT48AAE+PwABPkAAAT5BAAE+QgABPkMAAT5FAAE+RwABPkgAAT5JAAE+SwABPkwAAT5VAAE+VgABPlgAAT6bAAE+vwABPuMAAT8GAAE/LQABP00AAT90AAE/mwABP7sAAT/fAAFAAwA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BV0IAAVdEAAFXRgABV0cAAVdKAAFXVwABV2oAAVdsAAFXbgABV3AAAVdyAAFXdAABV3YAAVd4AAFXegABV3wAAVePAAFXkgABV5UAAVeYAAFXmwABV54AAVehAAFXpAABV6cAAVeqAAFXrAABV+sAAVftAAFX8AABV/IAAVf1AAFX9gABV/cAAVf4AAFX+QABV/sAAVf9AAFX/gABV/8AAVgBAAFYAgABWAsAAVgMAAFYDgABWE0AAVhPAAFYUQABWFMAAVhWAAFYVwABWFgAAVhZAAFYWgABWFwAAVheAAFYXwABWGAAAVhiAAFYYwABWKIAAVikAAFYpwABWKkAAVisAAFYrQABWK4AAVivAAFYsAABWLIAAVi0AAFYtQABWLYAAVi4AAFYuQABWMIAAVjDAAFYxQABWQQAAVkGAAFZCAABWQoAAVkNAAFZDgABWQ8AAVkQAAFZEQABWRMAAVkVAAFZFgABWRcAAVkZAAFZGgABWVkAAVlbAAFZXgABWWAAAVljAAFZZAABWWUAAVlmAAFZZwABWWkAAVlrAAFZbAABWW0AAVlvAAFZcAABWXkAAVl6AAFZfAABWbsAAVm9AAFZvwABWcEAAVnEAAFZxQABWcYAAVnHAAFZyAABWcoAAVnMAAFZzQABWc4AAVnQAAFZ0QABWhAAAVoSAAFaFQABWhcAAVoaAAFaGwABWhwAAVodAAFaHgABWiAAAVoiAAFaIwABWiQAAVomAAFaJwABWjQAAVo1AAFaNgABWjgAAVp3AAFaeQABWnsAAVp9AAFagAABWoEAAVqCAAFagwABWoQAAVqGAAFaiAABWokAAVqKAAFajAABWo0AAVrMAAFazgABWtEAAVrTAAFa1gABWtcAAVrYAAFa2QABWtoAAVrcAAFa3gABWt8AAVrgAAFa4gABWuMAAVrxAAFa/gABWwMAAVsGAAFbCQABWw4AAVsRAAFbFAABWxYAAVsbAAFbJgABW3EAAVuUAAFbtAABW9QAAVvWAAFb2AABW9oAAVvcAAFb3wABW+AAAVvhAAFb5AABW+UAAVvnAAFb6AABW+oAAVvtAAFb7gABW+8AAVvyAAFb8wABW/gAAVwFAAFcCgABXAwAAVwOAAFcEwABXBYAAVwZAAFcGwABXEAAAVxkAAFciwABXK8AAVyyAAFctAABXLYAAVy4AAFcugABXLwAAVy9AAFcwAABXM0AAVzeAAFc4AABXOIAAVzkAAFc5gABXOgAAVzqAAFc7AABXO4AAVz/AAFdAgABXQUAAV0IAAFdCwABXQ4AAV0RAAFdFAABXRcAAV0ZAAFdWAABXVoAAV1cAAFdXgABXWEAAV1iAAFdYwABXWQAAV1lAAFdZwABXWkAAV1qAAFdawABXW0AAV1uAAFdrQABXa8AAV2xAAFdswABXbYAAV23AAFduAABXbkAAV26AAFdvAABXb4AAV2/AAFdwAABXcIAAV3DAAFeAgABXgQAAV4HAAFeCQABXgwAAV4NAAFeDgABXg8AAV4QAAFeEgABXhQAAV4VAAFeFgABXhgAAV4ZAAFeJgABXicAAV4oAAFeKgABXmkAAV5rAAFebQABXm8AAV5yAAFecwABXnQAAV51AAFedgABXngAAV56AAFeewABXnwAAV5+AAFefwABXr4AAV7AAAFewgABXsQAAV7HAAFeyAABXskAAV7KAAFeywABXs0AAV7PAAFe0AABXtEAAV7TAAFe1AABXxMAAV8VAAFfFwABXxkAAV8cAAFfHQABXx4AAV8fAAFfIAABXyIAAV8kAAFfJQABXyYAAV8oAAFfKQABX2gAAV9qAAFfbAABX24AAV9xAAFfcgABX3MAAV90AAFfdQABX3cAAV95AAFfegABX3sAAV99AAFffgABX70AAV+/AAFfwQABX8MAAV/GAAFfxwABX8gAAV/JAAFfygABX8wAAV/OAAFfzwABX9AAAV/SAAFf0wABX/gAAWAcAAFgQwABYGcAAWBqAAFgbAABYG4AAWBwAAFgcgABYHQAAWB1AAFgeAABYIUAAWCUAAFglgABYJgAAWCaAAFgnAABYJ4AAWCgAAFgogABYLEAAWC0AAFgtwABYLoAAWC9AAFgwAABYMMAAWDGAAFgyAABYQcAAWEJAAFhCwABYQ0AAWEQAAFhEQABYRIAAWETAAFhFAABYRYAAWEYAAFhGQABYRoAAWEcAAFhHQABYVwAAWFeAAFhYAABYWIAAWFlAAFhZgABYWcAAWFoAAFhaQABYWsAAWFtAAFhbgABYW8AAWFxAAFhcgABYbEAAWGzAAFhtQABYbcAAWG6AAFhuwABYbwAAWG9AAFhvgABYcAAAWHCAAFhwwABYcQAAWHGAAFhxwABYgYAAWIIAAFiCwABYg0AAWIQAAFiEQABYhIAAWITAAFiFAABYhYAAWIYAAFiGQABYhoAAWIcAAFiHQABYlwAAWJeAAFiYAABYmIAAWJlAAFiZgABYmcAAWJoAAFiaQABYmsAAWJtAAFibgABYm8AAWJxAAFicgABYrEAAWKzAAFitQABYrcAAWK6AAFiuwABYrwAAWK9AAFivgABYsAAAWLCAAFiwwABYsQAAWLGAAFixwABYwYAAWMIAAFjCgABYwwAAWMPAAFjEAABYxEAAWMSAAFjEwABYxUAAWMXAAFjGAABYxkAAWMbAAFjHAABY2cAAWOKAAFjqgABY8oAAWPMAAFjzgABY9AAAWPSAAFj1QABY9YAAWPXAAFj2gABY9sAAWPdAAFj3gABY+AAAWPjAAFj5AABY+UAAWPoAAFj6QABY/IAAWP/AAFkBAABZAYAAWQIAAFkDQABZBAAAWQTAAFkFQABZDoAAWReAAFkhQABZKkAAWSsAAFkrgABZLAAAWSyAAFktAABZLYAAWS3AAFkugABZMcAAWTYAAFk2gABZNwAAWTeAAFk4AABZOIAAWTkAAFk5gABZOgAAWT5AAFk/AABZP8AAWUCAAFlBQABZQgAAWULAAFlDgABZREAAWUTAAFlUgABZVQAAWVWAAFlWAABZVsAAWVcAAFlXQABZV4AAWVfAAFlYQABZWMAAWVkAAFlZQABZWcAAWVoAAFlpwABZakAAWWrAAFlrQABZbAAAWWxAAFlsgABZbMAAWW0AAFltgABZbgAAWW5AAFlugABZbwAAWW9AAFl/AABZf4AAWYBAAFmAwABZgYAAWYHAAFmCAABZgkAAWYKAAFmDAABZg4AAWYPAAFmEAABZhIAAWYTAAFmIAABZiEAAWYiAAFmJAABZmMAAWZlAAFmZwABZmkAAWZsAAFmbQABZm4AAWZvAAFmcAABZnIAAWZ0AAFmdQABZnYAAWZ4AAFmeQABZrgAAWa6AAFmvAABZr4AAWbBAAFmwgABZsMAAWbEAAFmxQABZscAAWbJAAFmygABZssAAWbNAAFmzgABZw0AAWcPAAFnEQABZxMAAWcWAAFnFwABZxgAAWcZAAFnGgABZxwAAWceAAFnHwABZyAAAWciAAFnIwABZ2IAAWdkAAFnZgABZ2gAAWdrAAFnbAABZ20AAWduAAFnbwABZ3EAAWdzAAFndAABZ3UAAWd3AAFneAABZ7cAAWe5AAFnuwABZ70AAWfAAAFnwQABZ8IAAWfDAAFnxAABZ8YAAWfIAAFnyQABZ8oAAWfMAAFnzQABZ/IAAWgWAAFoPQABaGEAAWhkAAFoZgABaGgAAWhqAAFobAABaG4AAWhvAAFocgABaH8AAWiOAAFokAABaJIAAWiUAAFolgABaJgAAWiaAAFonAABaKsAAWiuAAFosQABaLQAAWi3AAFougABaL0AAWjAAAFowgABaQEAAWkDAAFpBQABaQcAAWkKAAFpCwABaQwAAWkNAAFpDgABaRAAAWkSAAFpEwABaRQAAWkWAAFpFwABaVYAAWlYAAFpWgABaVwAAWlfAAFpYAABaWEAAWliAAFpYwABaWUAAWlnAAFpaAABaWkAAWlrAAFpbAABaasAAWmtAAFprwABabEAAWm0AAFptQABabYAAWm3AAFpuAABaboAAWm8AAFpvQABab4AAWnAAAFpwQABagAAAWoCAAFqBAABagYAAWoJAAFqCgABagsAAWoMAAFqDQABag8AAWoRAAFqEgABahMAAWoVAAFqFgABalUAAWpXAAFqWQABalsAAWpeAAFqXwABamAAAWphAAFqYgABamQAAWpmAAFqZwABamgAAWpqAAFqawABaqoAAWqsAAFqrgABarAAAWqzAAFqtAABarUAAWq2AAFqtwABarkAAWq7AAFqvAABar0AAWq/AAFqwAABav8AAWsBAAFrAwABawUAAWsIAAFrCQABawoAAWsLAAFrDAABaw4AAWsQAAFrEQABaxIAAWsUAAFrFQABax4AAWsfAAFrIQABa2QAAWuIAAFrrAABa88AAWv2AAFsFgABbD0AAWxkAAFshAABbKgAAWzMAAFszgABbNEAAWzTAAFs1QABbNcAAWzaAAFs3QABbN8AAWzhAAFs5AABbOYAAWzoAAFs6wABbO4AAWzvAAFs9AABbQEAAW0EAAFtBgABbQkAAW0MAAFtDgABbTMAAW1XAAFtfgABbaIAAW2lAAFtpwABbakAAW2rAAFtrQABba8AAW2wAAFtswABbcAAAW3TAAFt1QABbdcAAW3ZAAFt2wABbd0AAW3fAAFt4QABbeMAAW3lAAFt+AABbfsAAW3+AAFuAQABbgQAAW4HAAFuCgABbg0AAW4QAAFuEwABbhUAAW5UAAFuVgABblkAAW5bAAFuXgABbl8AAW5gAAFuYQABbmIAAW5kAAFuZgABbmcAAW5oAAFuagABbmsAAW50AAFudQABbncAAW62AAFuuAABbroAAW68AAFuvwABbsAAAW7BAAFuwgABbsMAAW7FAAFuxwABbsgAAW7JAAFuywABbswAAW8LAAFvDQABbxAAAW8SAAFvFQABbxYAAW8XAAFvGAABbxkAAW8bAAFvHQABbx4AAW8fAAFvIQABbyIAAW8rAAFvLAABby4AAW9tAAFvbwABb3EAAW9zAAFvdgABb3cAAW94AAFveQABb3oAAW98AAFvfgABb38AAW+AAAFvggABb4MAAW/CAAFvxAABb8cAAW/JAAFvzAABb80AAW/OAAFvzwABb9AAAW/SAAFv1AABb9UAAW/WAAFv2AABb9kAAW/iAAFv4wABb+UAAXAkAAFwJgABcCgAAXAqAAFwLQABcC4AAXAvAAFwMAABcDEAAXAzAAFwNQABcDYAAXA3AAFwOQABcDoAAXB5AAFwewABcH4AAXCAAAFwgwABcIQAAXCFAAFwhgABcIcAAXCJAAFwiwABcIwAAXCNAAFwjwABcJAAAXCdAAFwngABcJ8AAXChAAFw4AABcOIAAXDkAAFw5gABcOkAAXDqAAFw6wABcOwAAXDtAAFw7wABcPEAAXDyAAFw8wABcPUAAXD2AAFxNQABcTcAAXE6AAFxPAABcT8AAXFAAAFxQQABcUIAAXFDAAFxRQABcUcAAXFIAAFxSQABcUsAAXFMAAFxXgABcWsAAXFyAAFxdQABcXgAAXF7AAFxggABcYUAAXGIAAFxiwABcY0AAXGaAAFxpQABcfAAAXITAAFyMwABclMAAXJVAAFyVwABclkAAXJbAAFyXgABcl8AAXJgAAFyYwABcmQAAXJmAAFyZwABcmkAAXJsAAFybQABcm4AAXJxAAFycgABcncAAXKEAAFyiQABcosAAXKNAAFykgABcpUAAXKYAAFymgABcr8AAXLjAAFzCgABcy4AAXMxAAFzMwABczUAAXM3AAFzOQABczsAAXM8AAFzPwABc0wAAXNdAAFzXwABc2EAAXNjAAFzZQABc2cAAXNpAAFzawABc20AAXN+AAFzgQABc4QAAXOHAAFzigABc40AAXOQAAFzkwABc5YAAXOYAAFz1wABc9kAAXPbAAFz3QABc+AAAXPhAAFz4gABc+MAAXPkAAFz5gABc+gAAXPpAAFz6gABc+wAAXPtAAF0LAABdC4AAXQwAAF0MgABdDUAAXQ2AAF0NwABdDgAAXQ5AAF0OwABdD0AAXQ+AAF0PwABdEEAAXRCAAF0gQABdIMAAXSGAAF0iAABdIsAAXSMAAF0jQABdI4AAXSPAAF0kQABdJMAAXSUAAF0lQABdJcAAXSYAAF0pQABdKYAAXSnAAF0qQABdOgAAXTqAAF07AABdO4AAXTxAAF08gABdPMAAXT0AAF09QABdPcAAXT5AAF0+gABdPsAAXT9AAF0/gABdT0AAXU/AAF1QQABdUMAAXVGAAF1RwABdUgAAXVJAAF1SgABdUwAAXVOAAF1TwABdVAAAXVSAAF1UwABdZIAAXWUAAF1lgABdZgAAXWbAAF1nAABdZ0AAXWeAAF1nwABdaEAAXWjAAF1pAABdaUAAXWnAAF1qAABdecAAXXpAAF16wABde0AAXXwAAF18QABdfIAAXXzAAF19AABdfYAAXX4AAF1+QABdfoAAXX8AAF1/QABdjwAAXY+AAF2QAABdkIAAXZFAAF2RgABdkcAAXZIAAF2SQABdksAAXZNAAF2TgABdk8AAXZRAAF2UgABdncAAXabAAF2wgABduYAAXbpAAF26wABdu0AAXbvAAF28QABdvMAAXb0AAF29wABdwQAAXcTAAF3FQABdxcAAXcZAAF3GwABdx0AAXcfAAF3IQABdzAAAXczAAF3NgABdzkAAXc8AAF3PwABd0IAAXdFAAF3RwABd4YAAXeIAAF3iwABd40AAXeQAAF3kQABd5IAAXeTAAF3lAABd5YAAXeYAAF3mQABd5oAAXecAAF3nQABd6EAAXfgAAF34gABd+QAAXfmAAF36QABd+oAAXfrAAF37AABd+0AAXfvAAF38QABd/IAAXfzAAF39QABd/YAAXg1AAF4NwABeDkAAXg7AAF4PgABeD8AAXhAAAF4QQABeEIAAXhEAAF4RgABeEcAAXhIAAF4SgABeEsAAXiKAAF4jAABeI4AAXiQAAF4kwABeJQAAXiVAAF4lgABeJcAAXiZAAF4mwABeJwAAXidAAF4nwABeKAAAXjfAAF44QABeOMAAXjlAAF46AABeOkAAXjqAAF46wABeOwAAXjuAAF48AABePEAAXjyAAF49AABePUAAXk0AAF5NgABeTgAAXk6AAF5PQABeT4AAXk/AAF5QAABeUEAAXlDAAF5RQABeUYAAXlHAAF5SQABeUoAAXmJAAF5iwABeY0AAXmPAAF5kgABeZMAAXmUAAF5lQABeZYAAXmYAAF5mgABeZsAAXmcAAF5ngABeZ8AAXnqAAF6DQABei0AAXpNAAF6TwABelEAAXpTAAF6VQABelgAAXpZAAF6WgABel0AAXpeAAF6YAABemEAAXpjAAF6ZgABemcAAXpoAAF6awABemwAAXpxAAF6fgABeoMAAXqFAAF6hwABeowAAXqPAAF6kgABepQAAXq5AAF63QABewQAAXsoAAF7KwABey0AAXsvAAF7MQABezMAAXs1AAF7NgABezkAAXtGAAF7VwABe1kAAXtbAAF7XQABe18AAXthAAF7YwABe2UAAXtnAAF7eAABe3sAAXt+AAF7gQABe4QAAXuHAAF7igABe40AAXuQAAF7kgABe9EAAXvTAAF71QABe9cAAXvaAAF72wABe9wAAXvdAAF73gABe+AAAXviAAF74wABe+QAAXvmAAF75wABfCYAAXwoAAF8KgABfCwAAXwvAAF8MAABfDEAAXwyAAF8MwABfDUAAXw3AAF8OAABfDkAAXw7AAF8PAABfHsAAXx9AAF8gAABfIIAAXyFAAF8hgABfIcAAXyIAAF8iQABfIsAAXyNAAF8jgABfI8AAXyRAAF8kgABfJ8AAXygAAF8oQABfKMAAXziAAF85AABfOYAAXzoAAF86wABfOwAAXztAAF87gABfO8AAXzxAAF88wABfPQAAXz1AAF89wABfPgAAX03AAF9OQABfTsAAX09AAF9QAABfUEAAX1CAAF9QwABfUQAAX1GAAF9SAABfUkAAX1KAAF9TAABfU0AAX2MAAF9jgABfZAAAX2SAAF9lQABfZYAAX2XAAF9mAABfZkAAX2bAAF9nQABfZ4AAX2fAAF9oQABfaIAAX3hAAF94wABfeUAAX3nAAF96gABfesAAX3sAAF97QABfe4AAX3wAAF98gABffMAAX30AAF99gABffcAAX42AAF+OAABfjoAAX48AAF+PwABfkAAAX5BAAF+QgABfkMAAX5FAAF+RwABfkgAAX5JAAF+SwABfkwAAX5xAAF+lQABfrwAAX7gAAF+4wABfuUAAX7nAAF+6QA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 + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v12.xcdatamodel + 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uZmlndXJhdGlvbnNCeU5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgQUEgACBBQGBBQKBBQPeABoAGwAcAB0AHgAfACAADgAhACIAIwAkACUAJgAnACgAKQAJACcAFQAtAC4ALwAwADEAJwAnABVfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBP+BBP2AAYAEgACBBP6BBQAQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYEDUoEEFoEEW4CAgQSggQHwgCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECeoAEgA+BAnyABoAPgQQVgA4IEwAAAAEg8JdAV29yZGVyZWTTADgAOQAOAHAAcgBKoQBxgBGhAHOAEoArXlhEX1BTdGVyZW90eXBl2QAfACMAdwAOACYAeAAhAF0AeQBDAHEAXgB9ABUAJwAvAGwAgV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4AygACABAiAE9MAOAA5AA4AgwCNAEqpAIQAhQCGAIcAiACJAIoAiwCMgBSAFYAWgBeAGIAZgBqAG4AcqQCOAI8AkACRAJIAkwCUAJUAloAdgCGAIoAkgCWAJ4ApgCyAMIArXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAK0AFQBzAGwAbABsAC8AbAC0AIQAbABsABUAbFVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAegACAEggICAiAIIAUCAiAAAjSADkADgC7ALyggB/SAL4AvwDAAMFaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAwADCAMNXTlNBcnJheVhOU09iamVjdNIAvgC/AMUAxl8QEFhEVU1MUHJvcGVydHlJbXCkAMcAyADJAMNfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACFAGwAbAAVAGyAAIAAgACAEggICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQDbABUAcwBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIAjgACAEggICAiAIIAWCAiAAAjSADkADgDpALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACHAGwAbAAVAGyAAIAAgACAEggICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQD8ABUAcwBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIAmgACAEggICAiAIIAYCAiAAAjSADkADgEKALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUAcwBsAGwAbAAvAGwAtACJAGwAbAAVAGyAAIAogACAEggICAiAIIAZCAiAAAgI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBHgAVAHMAbABsAGwALwBsALQAigBsAGwAFQBsgACAKoAAgBIICAgIgCCAGggIgAAI0wA4ADkADgEsAS0ASqCggCvSAL4AvwEwATFfEBNOU011dGFibGVEaWN0aW9uYXJ5owEwATIAw1xOU0RpY3Rpb25hcnnfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQE1ABUAcwBsAGwAbAAvAGwAtACLAGwAbAAVAGyAAIAtgACAEggICAiAIIAbCAiAAAjWACMADgAmAF0AHwAhAUMBRAAVAGwAFQAvgC6AL4AACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSAL4AvwFKAUtdWERVTUxDbGFzc0ltcKYBTAFNAU4BTwFQAMNdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQFTABUAcwBsAGwAbAAvAGwAtACMAGwAbAAVAGyAAIAxgACAEggICAiAIIAcCAiAAAhfEBFDREFzc2V0VmlzaWJpbGl0edIAvgC/AWIBY18QElhEVU1MU3RlcmVvdHlwZUltcKcBZAFlAWYBZwFoAWkAw18QElhEVU1MU3RlcmVvdHlwZUltcF1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMAOAA5AA4BawFvAEqjAWwBbQFugDSANYA2owFwAXEBcoA3gGKBA/6AK1dhc3NldElkVndhbGxldFZoaWRkZW7fEBIAogCjAKQBeAAfAKYApwF5ACEApQF6AKgADgAjAKkAqgAmAKsAFQAVABUAJwBDAGwAbAGCAC8AbABeAGwBhgFsAGwAbAGKAGxfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIANCAiAOQiADwiAYYA0CAiAOAgSsjqcXdMAOAA5AA4BjgGRAEqiAY8BkIA6gDuiAZIBk4A8gFCAK18QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHwAjAZgADgAmAZkAIQBdAZoBcAGPAF4AfQAVACcALwBsAaJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmV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Ab4BwgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUC7gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACAZggICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUC7gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACAZggICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQMyABUC7gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAIBrgACAZggICAiAIIBACAiAAAjTADgAOQAOA0ADQQBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIBmCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AakAbABsABUAbIAAgCiAAIBmCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIBmCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQLuAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIBmCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIBmCAgICIAggEUICIAACNkAHwAjA48ADgAmA5AAIQBdA5EBcQLsAF4AfQAVACcALwBsA5lfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAYoBlgA+AMoAAgAQIgHLTADgAOQAOA5sDowBKpwOcA50DngOfA6ADoQOigHOAdIB1gHaAd4B4gHm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IgQSk0wA4ADkADjoNOhcASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypOhg6GToaOhs6HDodOh46HzoggQSlgQSngQSogQSqgQSrgQStgQSugQSwgQSxgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTokABU5/gBsAGwAbAAvAGwAtACEAGwAbAAVAGyAAIEEpoAAgQSjCAgICIAggBQICIAACNIAOQAOOjIAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIEEowgICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpFABU5/gBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIEEqYAAgQSjCAgICIAggBYICIAACNIAOQAOOlMAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIEEowgICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpmABU5/gBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIEErIAAgQSjCAgICIAggBgICIAACNIAOQAOOnQAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTn+AGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIEEowgICAiAIIAZCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTqHABU5/gBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIEEr4AAgQSjCAgICIAggBoICIAACNMAOAA5AA46lTqWAEqgoIAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBNQAVOf4AbABsAGwALwBsALQAiwBsAGwAFQBsgACALYAAgQSjCAgICIAggBsICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVOqkAFTn+AGwAbABsAC8AbAC0AIwAbABsABUAbIAAgQSygACBBKMICAgIgCCAHAgIgAAIXxAPQ0RDaGFpblNldHRpbmdz0wA4ADkADjq4OrwASqM6uSnUOruBBLSBA2eBBLWjOr06vjq/gQS2gQTOgQTlgCtcYXV0b2JhbGFuY2VkWmlzc3VlTXV0ZWTfEBIAogCjAKQ6xAAfAKYApzrFACEApTrGAKgADgAjAKkAqgAmAKsAFQAVABUAJwBIAGwAbDrOAC8AbABeAGwBhjq5AGwAbDrWAGxfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEEoAgIgQS4CIAPCIBhgQS0CAiBBLcIEoc06RLTADgAOQAOOto63QBKogGPAZCAOoA7ojreOt+BBLmBBMSAK9kAHwAjOuIADgAmOuMAIQBdOuQ6vQGPAF4AfQAVACcALwBsOuxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBLaAOoAPgDKAAIAECIEEutMAOAA5AA467jr3AEqoAaUBpgGnAagBqQGqAasBrIA+gD+AQIBBgEKAQ4BEgEWoOvg6+Tr6Ovs6/Dr9Ov46/4EEu4EEvIEEvYEEv4EEwIEEwYEEwoEEw4Ar3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVOt4AbABsAGwALwBsALQBpQBsAGwAFQBsgACAKIAAgQS5CAgICIAggD4ICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTreAGwAbABsAC8AbAC0AaYAbABsABUAbIAAgACAAIEEuQgICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTshABU63gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAIEEvoAAgQS5CAgICIAggEAICIAACNMAOAA5AA47LzswAEqgoIAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVOt4AbABsAGwALwBsALQBqABsAGwAFQBsgACAKIAAgQS5CAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTreAGwAbABsAC8AbAC0AakAbABsABUAbIAAgCiAAIEEuQgICAiAIIBCCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABU63gBsAGwAbAAvAGwAtAGqAGwAbAAVAGyAAIAogACBBLkICAgIgCCAQwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVOt4AbABsAGwALwBsALQBqwBsAGwAFQBsgACAAIAAgQS5CAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTreAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIEEuQgICAiAIIBFCAiAAAjZAB8AIzt+AA4AJjt/ACEAXTuAOr0BkABeAH0AFQAnAC8AbDuIXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQS2gDuAD4AygACABAiBBMXTADgAOQAOO4o7kgBKpwJKAksCTAJNAk4CTwJQgFKAU4BUgFWAVoBXgFinO5M7lDuVO5Y7lzuYO5mBBMaBBMiBBMmBBMqBBMuBBMyBBM2AK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVO50AFTrfAGwAbABsAC8AbAC0AkoAbABsABUAbIAAgQTHgACBBMQICAgIgCCAUggIgAAIU1lFU98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTrfAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIEExAgICAiAIIBTCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU63wBsAGwAbAAvAGwAtAJMAGwAbAAVAGyAAIAAgACBBMQICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUHWgAVOt8AbABsAGwALwBsALQCTQBsAGwAFQBsgACA14AAgQTECAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTrfAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIEExAgICAiAIIBWCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU63wBsAGwAbAAvAGwAtAJPAGwAbAAVAGyAAIAAgACBBMQICAgIgCCAVwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVOt8AbABsAGwALwBsALQCUABsAGwAFQBsgACAAIAAgQTECAgICIAggFgICIAACN8QEgCiAKMApDwGAB8ApgCnPAcAIQClPAgAqAAOACMAqQCqACYAqwAVABUAFQAnAEgAbABsPBAALwBsAF4AbAGGKdQAbABsPBgAbF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQSgCAiBBNAIgA8IgGGBA2cICIEEzwgSuf2WbNMAOAA5AA48HDwfAEqiAY8BkIA6gDuiPCA8IYEE0YEE3IAr2QAfACM8JAAOACY8JQAhAF08Jjq+AY8AXgB9ABUAJwAvAGw8Ll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEEzoA6gA+AMoAAgAQIgQTS0wA4ADkADjwwPDkASqgBpQGmAacBqAGpAaoBqwGsgD6AP4BAgEGAQoBDgESARag8Ojw7PDw8PTw+PD88QDxBgQTTgQTUgQTVgQTXgQTYgQTZgQTagQTbgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABU8IABsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACBBNEICAgIgCCAPggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVPCAAbABsAGwALwBsALQBpgBsAGwAFQBsgACAAIAAgQTRCAgICIAggD8ICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVPGMAFTwgAGwAbABsAC8AbAC0AacAbABsABUAbIAAgQTWgACBBNEICAgIgCCAQAgIgAAI0wA4ADkADjxxPHIASqCggCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABU8IABsAGwAbAAvAGwAtAGoAGwAbAAVAGyAAIAogACBBNEICAgIgCCAQQgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVPCAAbABsAGwALwBsALQBqQBsAGwAFQBsgACAKIAAgQTRCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTwgAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIEE0QgICAiAIIBDCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU8IABsAGwAbAAvAGwAtAGrAGwAbAAVAGyAAIAAgACBBNEICAgIgCCARAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVPCAAbABsAGwALwBsALQBrABsAGwAFQBsgACAKIAAgQTRCAgICIAggEUICIAACNkAHwAjPMAADgAmPMEAIQBdPMI6vgGQAF4AfQAVACcALwBsPMpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBM6AO4APgDKAAIAECIEE3dMAOAA5AA48zDzUAEqnAkoCSwJMAk0CTgJPAlCAUoBTgFSAVYBWgFeAWKc81TzWPNc82DzZPNo824EE3oEE34EE4IEE4YEE4oEE44EE5IAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVPCEAbABsAGwALwBsALQCSgBsAGwAFQBsgACAAIAAgQTcCAgICIAggFIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTwhAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIEE3AgICAiAIIBTCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU8IQBsAGwAbAAvAGwAtAJMAGwAbAAVAGyAAIAAgACBBNwICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUCkAAVPCEAbABsAGwALwBsALQCTQBsAGwAFQBsgACAXYAAgQTcCAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTwhAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIEE3AgICAiAIIBWCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU8IQBsAGwAbAAvAGwAtAJPAGwAbAAVAGyAAIAAgACBBNwICAgIgCCAVwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVPCEAbABsAGwALwBsALQCUABsAGwAFQBsgACAAIAAgQTcCAgICIAggFgICIAACN8QEgCiAKMApD1HAB8ApgCnPUgAIQClPUkAqAAOACMAqQCqACYAqwAVABUAFQAnAEgAbABsPVEALwBsAF4AbAGGOrsAbABsPVkAbF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQSgCAiBBOcIgA8IgGGBBLUICIEE5ggS++URbtMAOAA5AA49XT1gAEqiAY8BkIA6gDuiPWE9YoEE6IEE84Ar2QAfACM9ZQAOACY9ZgAhAF09Zzq/AY8AXgB9ABUAJwAvAGw9b18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEE5YA6gA+AMoAAgAQIgQTp0wA4ADkADj1xPXoASqgBpQGmAacBqAGpAaoBqwGsgD6AP4BAgEGAQoBDgESARag9ez18PX09fj1/PYA9gT2CgQTqgQTrgQTsgQTugQTvgQTwgQTxgQTygCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABU9YQBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACBBOgICAgIgCCAPggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVPWEAbABsAGwALwBsALQBpgBsAGwAFQBsgACAAIAAgQToCAgICIAggD8ICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVPaQAFT1hAGwAbABsAC8AbAC0AacAbABsABUAbIAAgQTtgACBBOgICAgIgCCAQAgIgAAI0wA4ADkADj2yPbMASqCggCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABU9YQBsAGwAbAAvAGwAtAGoAGwAbAAVAGyAAIAogACBBOgICAgIgCCAQQgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVPWEAbABsAGwALwBsALQBqQBsAGwAFQBsgACAKIAAgQToCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFT1hAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIEE6AgICAiAIIBDCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU9YQBsAGwAbAAvAGwAtAGrAGwAbAAVAGyAAIAAgACBBOgICAgIgCCARAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVPWEAbABsAGwALwBsALQBrABsAGwAFQBsgACAKIAAgQToCAgICIAggEUICIAACNkAHwAjPgEADgAmPgIAIQBdPgM6vwGQAF4AfQAVACcALwBsPgtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBOWAO4APgDKAAIAECIEE9NMAOAA5AA4+DT4VAEqnAkoCSwJMAk0CTgJPAlCAUoBTgFSAVYBWgFeAWKc+Fj4XPhg+GT4aPhs+HIEE9YEE9oEE94EE+IEE+YEE+oEE+4Ar3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUHLAAVPWIAbABsAGwALwBsALQCSgBsAGwAFQBsgACA04AAgQTzCAgICIAggFIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFT1iAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIEE8wgICAiAIIBTCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU9YgBsAGwAbAAvAGwAtAJMAGwAbAAVAGyAAIAAgACBBPMICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUHWgAVPWIAbABsAGwALwBsALQCTQBsAGwAFQBsgACA14AAgQTzCAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFT1iAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIEE8wgICAiAIIBWCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABU9YgBsAGwAbAAvAGwAtAJPAGwAbAAVAGyAAIAAgACBBPMICAgIgCCAVwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVPWIAbABsAGwALwBsALQCUABsAGwAFQBsgACAAIAAgQTzCAgICIAggFgICIAACNIAOQAOPogAvKCAH9MAOAA5AA4+iz6MAEqgoIAr0wA4ADkADj6PPpAASqCggCvTADgAOQAOPpM+lABKoKCAK9IAvgC/Ppc+mF5YRE1vZGVsUGFja2FnZaY+mT6aPps+nD6dAMNeWERNb2RlbFBhY2thZ2VfEA9YRFVNTFBhY2thZ2VJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w0gA5AA4+nwC8oIAf0wA4ADkADj6iPqMASqCggCtQ0gC+AL8+pz6oWVhEUE1Nb2RlbKM+pz6pAMNXWERNb2RlbAAAAAgAAAAZAAAAIgAAACwAAAAxAAAAOgAAAD8AAABRAAAAVgAAAFsAAABdAAAKawAACnEAAAqKAAAKnAAACqMAAAqxAAAKvgAACtYAAArwAAAK8gAACvUAAAr3AAAK+gAACv0AAAsAAAALOQAAC1gAAAt1AAALlAAAC6YAAAvGAAALzQAAC+sAAAv3AAAMEwAADBkAAAw7AAAMXAAADG8AAAxxAAAMdAAADHcAAAx5AAAMewAADH0AAAyAAAAMgwAADIUAAAyHAAAMiQAADIsAAAyNAAAMjwAADJAAAAyUAAAMoQAADKkAAAy0AAAMwwAADMUAAAzHAAAMyQAADMsAAAzNAAAMzwAADNEAAAzgAAAM4gAADOUAAAzoAAAM6wAADO0AAAzwAAAM8wAADPUAAA0JAAANGAAADSwAAA06AAANSAAADVoAAA1lAAANqAAADcwAAA3wAAAOEwAADjoAAA5aAAAOgQAADqgAAA7IAAAO7AAADxAAAA8cAAAPHgAADyAAAA8iAAAPJAAADyYAAA8oAAAPKwAADy0AAA8vAAAPMgAADzQAAA82AAAPOQAADzsAAA88AAAPRQAAD00AAA9aAAAPXQAAD18AAA9iAAAPZAAAD2YAAA91AAAPmgAAD74AAA/lAAAQCQAAEAsAABANAAAQDwAAEBEAABATAAAQFQAAEBYAABAYAAAQJQAAEDgAABA6AAAQPAAAED4AABBAAAAQQgAAEEQAABBGAAAQSAAAEEoAABBdAAAQXwAAEGEAABBjAAAQZQAAEGcAABBpAAAQawAAEG0AABBvAAAQcQAAEIcAABCaAAAQtgAAENMAABDvAAARAwAAERUAABErAAARRAAAEYMAABGJAAARkgAAEZ8AABGrAAARtQAAEb8AABHKAAAR1QAAEeIAABHqAAAR7AAAEe4AABHwAAAR8gAAEfMAABH0AAAR9QAAEfYAABH4AAAR+gAAEfsAABH8AAAR/gAAEf8AABIIAAASCQAAEgsAABIUAAASHwAAEigAABI3AAASPgAAEkYAABJPAAASWAAAEmsAABJ0AAAShwAAEp4AABKwAAAS7wAAEvEAABLzAAAS9QAAEvcAABL4AAAS+QAAEvoAABL7AAAS/QAAEv8AABMAAAATAQAAEwMAABMEAAATQwAAE0UAABNHAAATSQAAE0sAABNMAAATTQAAE04AABNPAAATUQAAE1MAABNUAAATVQAAE1cAABNYAAATYQAAE2IAABNkAAATowAAE6UAABOnAAATqQAAE6sAABOsAAATrQAAE64AABOvAAATsQAAE7MAABO0AAATtQAAE7cAABO4AAAT9wAAE/kAABP7AAAT/QAAE/8AABQAAAAUAQAAFAIAABQDAAAUBQAAFAcAABQIAAAUCQAAFAsAABQMAAAUFQAAFBYAABQYAAAUVwAAFFkAABRbAAAUXQAAFF8AABRgAAAUYQAAFGIAABRjAAAUZQAAFGcAABRoAAAUaQAAFGsAABRsAAAUbQAAFKwAABSuAAAUsAAAFLIAABS0AAAUtQAAFLYAABS3AAAUuAAAFLoAABS8AAAUvQAAFL4AABTAAAAUwQAAFM4AABTPAAAU0AAAFNIAABTbAAAU8QAAFPgAABUFAAAVRAAAFUYAABVIAAAVSgAAFUwAABVNAAAVTgAAFU8AABVQAAAVUgAAFVQAABVVAAAVVgAAFVgAABVZAAAVcgAAFXQAABV2AAAVeAAAFXkAABV7AAAVkgAAFZsAABWpAAAVtgAAFcQAABXZAAAV7QAAFgQAABYWAAAWVQAAFlcAABZZAAAWWwAAFl0AABZeAAAWXwAAFmAAABZhAAAWYwAAFmUAABZmAAAWZwAAFmkAABZqAAAWfgAAFocAABacAAAWqwAAFsAAABbOAAAW4wAAFvcAABcOAAAXIAAAFy0AABc0AAAXNgAAFzgAABc6AAAXQQAAF0MAABdFAAAXSAAAF0oAABdSAAAXWQAAF2AAABerAAAXzgAAF+4AABgOAAAYEAAAGBIAABgUAAAYFgAAGBgAABgZAAAYGgAAGBwAABgdAAAYHwAAGCAAABgiAAAYJAAAGCUAABgmAAAYKAAAGCkAABguAAAYOwAAGEAAABhCAAAYRAAAGEkAABhLAAAYTQAAGE8AABhkAAAYeQAAGJ4AABjCAAAY6QAAGQ0AABkPAAAZEQAAGRMAABkVAAAZFwAAGRkAABkaAAAZHAAAGSkAABk6AAAZPAAAGT4AABlAAAAZQgAAGUQAABlGAAAZSAAAGUoAABlbAAAZXQAAGV8AABlhAAAZYwAAGWUAABlnAAAZaQAAGWsAABltAAAZiwAAGakAABm8AAAZ0AAAGeUAABoCAAAaFgAAGiwAABprAAAabQAAGm8AABpxAAAacwAAGnQAABp1AAAadgAAGncAABp5AAAaewAAGnwAABp9AAAafwAAGoAAABq/AAAawQAAGsMAABrFAAAaxwAAGsgAABrJAAAaygAAGssAABrNAAAazwAAGtAAABrRAAAa0wAAGtQAABsTAAAbFQAAGxcAABsZAAAbGwAAGxwAABsdAAAbHgAAGx8AABshAAAbIwAAGyQAABslAAAbJwAAGygAABs1AAAbNgAAGzcAABs5AAAbeAAAG3oAABt8AAAbfgAAG4AAABuBAAAbggAAG4MAABuEAAAbhgAAG4gAABuJAAAbigAAG4wAABuNAAAbzAAAG84AABvQAAAb0gAAG9QAABvVAAAb1gAAG9cAABvYAAAb2gAAG9wAABvdAAAb3gAAG+AAABvhAAAb4gAAHCEAABwjAAAcJQAAHCcAABwpAAAcKgAAHCsAABwsAAAcLQAAHC8AABwxAAAcMgAAHDMAABw1AAAcNgAAHHUAABx3AAAceQAAHHsAABx9AAAcfgAAHH8AAByAAAAcgQAAHIMAAByFAAAchgAAHIcAAByJAAAcigAAHMkAABzLAAAczQAAHM8AABzRAAAc0gAAHNMAABzUAAAc1QAAHNcAABzZAAAc2gAAHNsAABzdAAAc3gAAHQMAAB0nAAAdTgAAHXIAAB10AAAddgAAHXgAAB16AAAdfAAAHX4AAB1/AAAdgQAAHY4AAB2dAAAdnwAAHaEAAB2jAAAdpQAAHacAAB2pAAAdqwAAHboAAB28AAAdvgAAHcAAAB3CAAAdxAAAHcYAAB3IAAAdygAAHeoAAB4VAAAeLwAAHkgAAB5iAAAeggAAHqUAAB7kAAAe5gAAHugAAB7qAAAe7AAAHu0AAB7uAAAe7wAAHvAAAB7yAAAe9AAAHvUAAB72AAAe+AAAHvkAAB84AAAfOgAAHzwAAB8+AAAfQAAAH0EAAB9CAAAfQwAAH0QAAB9GAAAfSAAAH0kAAB9KAAAfTAAAH00AAB+MAAAfjgAAH5AAAB+SAAAflAAAH5UAAB+WAAAflwAAH5gAAB+aAAAfnAAAH50AAB+eAAAfoAAAH6EAAB/gAAAf4gAAH+QAAB/mAAAf6AAAH+kAAB/qAAAf6wAAH+wAAB/uAAAf8AAAH/EAAB/yAAAf9AAAH/UAAB/4AAAgNwAAIDkAACA7AAAgPQAAID8AACBAAAAgQQAAIEIAACBDAAAgRQAAIEcAACBIAAAgSQAAIEsAACBMAAAgiwAAII0AACCPAAAgkQAAIJMAACCUAAAglQAAIJYAACCXAAAgmQAAIJsAACCcAAAgnQAAIJ8AACCgAAAg3wAAIOEAACDjAAAg5QAAIOcAACDoAAAg6QAAIOoAACDrAAAg7QAAIO8AACDwAAAg8QAAIPMAACD0AAAg/QAAIQsAACEYAAAhJgAAITMAACFGAAAhXQAAIW8AACG6AAAh3QAAIf0AACIdAAAiHwAAIiEAACIjAAAiJQAAIicAACIoAAAiKQAAIisAACIsAAAiLgAAIi8AACIyAAAiNAAAIjUAACI2AAAiOAAAIjkAACI+AAAiSwAAIlAAACJSAAAiVAAAIlkAACJbAAAiXQAAIl8AACJyAAAilwAAIrsAACLiAAAjBgAAIwgAACMKAAAjDAAAIw4AACMQAAAjEgAAIxMAACMVAAAjIgAAIzMAACM1AAAjNwAAIzkAACM7AAAjPQAAIz8AACNBAAAjQwAAI1QAACNWAAAjWAAAI1oAACNcAAAjXgAAI2AAACNiAAAjZAAAI2YAACOlAAAjpwAAI6kAACOrAAAjrQAAI64AACOvAAAjsAAAI7EAACOzAAAjtQAAI7YAACO3AAAjuQAAI7oAACP5AAAj+wAAI/0AACP/AAAkAQAAJAIAACQDAAAkBAAAJAUAACQHAAAkCQAAJAoAACQLAAAkDQAAJA4AACRNAAAkTwAAJFEAACRTAAAkVQAAJFYAACRXAAAkWAAAJFkAACRbAAAkXQAAJF4AACRfAAAkYQAAJGIAACRvAAAkcAAAJHEAACRzAAAksgAAJLQAACS2AAAkuAAAJLoAACS7AAAkvAAAJL0AACS+AAAkwAAAJMIAACTDAAAkxAAAJMYAACTHAAAlBgAAJQgAACUKAAAlDAAAJQ4AACUPAAAlEAAAJREAACUSAAAlFAAAJRYAACUXAAAlGAAAJRoAACUbAAAlWgAAJVwAACVeAAAlYAAAJWIAACVjAAAlZAAAJWUAACVmAAAlaAAAJWoAACVrAAAlbAAAJW4AACVvAAAlrgAAJbAAACWyAAAltAAAJbYAACW3AAAluAAAJbkAACW6AAAlvAAAJb4AACW/AAAlwAAAJcIAACXDAAAmAgAAJgQAACYGAAAmCAAAJgoAACYLAAAmDAAAJg0AACYOAAAmEAAAJhIAACYTAAAmFAAAJhYAACYXAAAmPAAAJmAAACaHAAAmqwAAJq0AACavAAAmsQAAJrMAACa1AAAmtwAAJrgAACa6AAAmxwAAJtYAACbYAAAm2gAAJtwAACbeAAAm4AAAJuIAACbkAAAm8wAAJvUAACb3AAAm+QAAJvsAACb+AAAnAQAAJwQAACcGAAAnGAAAJywAACc+AAAnUwAAJ2UAACd0AAAnkQAAJ9AAACfSAAAn1AAAJ9YAACfYAAAn2QAAJ9oAACfbAAAn3AAAJ94AACfgAAAn4QAAJ+IAACfkAAAn5QAAKCQAACgmAAAoKAAAKCoAACgsAAAoLQAAKC4AACgvAAAoMAAAKDIAACg0AAAoNQAAKDYAACg4AAAoOQAAKDsAACh6AAAofAAAKH4AACiAAAAoggAAKIMAACiEAAAohQAAKIYAACiIAAAoigAAKIsAACiMAAAojgAAKI8AACjOAAAo0AAAKNIAACjUAAAo1gAAKNcAACjYAAAo2QAAKNoAACjcAAAo3gAAKN8AACjgAAAo4gAAKOMAACkmAAApSgAAKW4AACmRAAApuAAAKdgAACn/AAAqJgAAKkYAACpqAAAqjgAAKpAAACqSAAAqlAAAKpYAACqYAAAqmgAAKp0AACqfAAAqoQAAKqQAACqmAAAqqAAAKqsAACqtAAAqrgAAKrMAACrAAAAqwwAAKsUAACrIAAAqygAAKswAACrxAAArFQAAKzwAACtgAAArYgAAK2QAACtmAAAraAAAK2oAACtsAAArbQAAK28AACt8AAArjwAAK5EAACuTAAArlQAAK5cAACuZAAArmwAAK50AACufAAAroQAAK7QAACu2AAAruAAAK7oAACu8AAArvgAAK8AAACvCAAArxAAAK8YAACvIAAAsBwAALAkAACwLAAAsDQAALA8AACwQAAAsEQAALBIAACwTAAAsFQAALBcAACwYAAAsGQAALBsAACwcAAAsJQAALCYAACwoAAAsZwAALGkAACxrAAAsbQAALG8AACxwAAAscQAALHIAACxzAAAsdQAALHcAACx4AAAseQAALHsAACx8AAAsuwAALL0AACy/AAAswQAALMMAACzEAAAsxQAALMYAACzHAAAsyQAALMsAACzMAAAszQAALM8AACzQAAAs2QAALNoAACzcAAAtGwAALR0AAC0fAAAtIQAALSMAAC0kAAAtJQAALSYAAC0nAAAtKQAALSsAAC0sAAAtLQAALS8AAC0wAAAtbwAALXEAAC1zAAAtdQAALXcAAC14AAAteQAALXoAAC17AAAtfQAALX8AAC2AAAAtgQAALYMAAC2EAAAtjQAALY4AAC2QAAAtzwAALdEAAC3TAAAt1QAALdcAAC3YAAAt2QAALdoAAC3bAAAt3QAALd8AAC3gAAAt4QAALeMAAC3kAAAuIwAALiUAAC4nAAAuKQAALisAAC4sAAAuLQAALi4AAC4vAAAuMQAALjMAAC40AAAuNQAALjcAAC44AAAuRQAALkYAAC5HAAAuSQAALogAAC6KAAAujAAALo4AAC6QAAAukQAALpIAAC6TAAAulAAALpYAAC6YAAAumQAALpoAAC6cAAAunQAALtwAAC7eAAAu4AAALuIAAC7kAAAu5QAALuYAAC7nAAAu6AAALuoAAC7sAAAu7QAALu4AAC7wAAAu8QAALv8AAC8MAAAvPQAALz8AAC9BAAAvQwAAL0UAAC9HAAAvSQAAL0sAAC9NAAAvTwAAL1EAAC9TAAAvVQAAL1cAAC9ZAAAvWwAAL10AAC9fAAAvYQAAL2MAAC9lAAAvZwAAL2kAAC9rAAAvnAAAL54AAC+gAAAvogAAL6QAAC+nAAAvqgAAL60AAC+wAAAvswAAL7YAAC+5AAAvvAAAL78AAC/CAAAvxQAAL8gAAC/LAAAvzgAAL9EAAC/UAAAv1wAAL9oAAC/dAAAv3wAAL/EAADALAAAwIAAAMDMAADA+AAAwSQAAME4AADBdAAAwZwAAMHQAADCIAAAwnAAAMLUAADDIAAAw3QAAMPIAADEBAAAxFgAAMRwAADEjAAAxPwAAMVUAADFjAAAxrgAAMdEAADHxAAAyEQAAMhMAADIVAAAyFwAAMhkAADIbAAAyHAAAMh0AADIfAAAyIAAAMiIAADIjAAAyJQAAMicAADIoAAAyKQAAMisAADIsAAAyMQAAMj4AADJDAAAyRQAAMkcAADJMAAAyTgAAMlAAADJSAAAydwAAMpsAADLCAAAy5gAAMugAADLqAAAy7AAAMu4AADLwAAAy8gAAMvMAADL1AAAzAgAAMxMAADMVAAAzFwAAMxkAADMbAAAzHQAAMx8AADMhAAAzIwAAMzQAADM2AAAzOAAAMzoAADM8AAAzPgAAM0AAADNCAAAzRAAAM0YAADOFAAAzhwAAM4kAADOLAAAzjQAAM44AADOPAAAzkAAAM5EAADOTAAAzlQAAM5YAADOXAAAzmQAAM5oAADPZAAAz2wAAM90AADPfAAAz4QAAM+IAADPjAAAz5AAAM+UAADPnAAAz6QAAM+oAADPrAAAz7QAAM+4AADQtAAA0LwAANDEAADQzAAA0NQAANDYAADQ3AAA0OAAANDkAADQ7AAA0PQAAND4AADQ/AAA0QQAANEIAADRPAAA0UAAANFEAADRTAAA0kgAANJQAADSWAAA0mAAANJoAADSbAAA0nAAANJ0AADSeAAA0oAAANKIAADSjAAA0pAAANKYAADSnAAA05gAANOgAADTqAAA07AAANO4AADTvAAA08AAANPEAADTyAAA09AAANPYAADT3AAA0+AAANPoAADT7AAA1OgAANTwAADU+AAA1QAAANUIAADVDAAA1RAAANUUAADVGAAA1SAAANUoAADVLAAA1TAAANU4AADVPAAA1jgAANZAAADWSAAA1lAAANZYAADWXAAA1mAAANZkAADWaAAA1nAAANZ4AADWfAAA1oAAANaIAADWjAAA14gAANeQAADXmAAA16AAANeoAADXrAAA17AAANe0AADXuAAA18AAANfIAADXzAAA19AAANfYAADX3AAA2HAAANkAAADZnAAA2iwAANo0AADaPAAA2kQAANpMAADaVAAA2lwAANpgAADaaAAA2pwAANrYAADa4AAA2ugAANrwAADa+AAA2wAAANsIAADbEAAA20wAANtUAADbXAAA22QAANtsAADbdAAA23wAANuEAADbjAAA3IgAANyQAADcmAAA3KAAANyoAADcrAAA3LAAANy0AADcuAAA3MAAANzIAADczAAA3NAAANzY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AAEKOAABCkAAAQpIAAEKUAABClQAAQpcAAEKkAABCtQAAQrcAAEK5AABCuwAAQr0AAEK/AABCwQAAQsMAAELFAABC1gAAQtgAAELaAABC3AAAQt4AAELgAABC4gAAQuQAAELmAABC6AAAQycAAEMpAABDKwAAQy0AAEMvAABDMAAAQzEAAEMyAABDMwAAQzUAAEM3AABDOAAAQzkAAEM7AABDPAAAQ3sAAEN9AABDfwAAQ4EAAEODAABDhAAAQ4UAAEOGAABDhwAAQ4kAAEOLAABDjAAAQ40AAEOPAABDkAAAQ88AAEPRAABD0wAAQ9UAAEPXAABD2AAAQ9kAAEPaAABD2wAAQ90AAEPfAABD4AAAQ+EAAEPjAABD5AAAQ/EAAEPyAABD8wAAQ/UAAEQ0AABENgAARDgAAEQ6AABEPAAARD0AAEQ+AABEPwAAREAAAERCAABERAAAREUAAERGAABESAAAREkAAESIAABEigAARIwAAESOAABEkAAARJEAAESSAABEkwAARJQAAESWAABEmAAARJkAAESaAABEnAAARJ0AAETcAABE3gAAROAAAETiAABE5AAAROUAAETmAABE5wAAROgAAETqAABE7AAARO0AAETuAABE8AAARPEAAEUwAABFMgAARTQAAEU2AABFOAAARTkAAEU6AABFOwAARTwAAEU+AABFQAAARUEAAEVCAABFRAAARUUAAEWEAABFhgAARYgAAEWKAABFjAAARY0AAEWOAABFjwAARZAAAEWSAABFlAAARZUAAEWWAABFmAAARZkAAEW+AABF4gAARgkAAEYtAABGLwAARjEAAEYzAABGNQAARjcAAEY5AABGOgAARjwAAEZJAABGWAAARloAAEZcAABGXgAARmAAAEZiAABGZAAARmYAAEZ1AABGdwAARnkAAEZ7AABGfQAARn8AAEaBAABGgwAARoUAAEbEAABGxgAARsgAAEbKAABGzAAARs0AAEbOAABGzwAARtAAAEbSAABG1AAARtUAAEbWAABG2AAARtkAAEcYAABHGgAARxwAAEceAABHIAAARyEAAEciAABHIwAARyQAAEcmAABHKAAARykAAEcqAABHLAAARy0AAEdsAABHbgAAR3AAAEdyAABHdAAAR3UAAEd2AABHdwAAR3gAAEd6AABHfAAAR30AAEd+AABHgAAAR4EAAEfAAABHwgAAR8QAAEfGAABHyAAAR8kAAEfKAABHywAAR8wAAEfOAABH0AAAR9EAAEfSAABH1AAAR9UAAEfYAABIFwAASBkAAEgbAABIHQAASB8AAEggAABIIQAASCIAAEgjAABIJQAASCcAAEgoAABIKQAASCsAAEgsAABIawAASG0AAEhvAABIcQAASHMAAEh0AABIdQAASHYAAEh3AABIeQAASHsAAEh8AABIfQAASH8AAEiAAABInAAASNsAAEjdAABI3wAASOEAAEjjAABI5AAASOUAAEjmAABI5wAASOkAAEjrAABI7AAASO0AAEjvAABI8AAASTsAAEleAABJfgAASZ4AAEmgAABJogAASaQAAEmmAABJqAAASakAAEmqAABJrAAASa0AAEmvAABJsAAASbMAAEm1AABJtgAASbcAAEm5AABJugAASb8AAEnMAABJ0QAASdMAAEnVAABJ2gAASdwAAEnfAABJ4QAASgYAAEoqAABKUQAASnUAAEp3AABKeQAASnsAAEp9AABKfwAASoEAAEqCAABKhAAASpEAAEqiAABKpAAASqYAAEqoAABKqgAASqwAAEquAABKsAAASrIAAErDAABKxQAASscAAErJAABKywAASs0AAErPAABK0gAAStUAAErXAABLFgAASxgAAEsaAABLHAAASx4AAEsfAABLIAAASyEAAEsiAABLJAAASyYAAEsnAABLKAAASyoAAEsrAABLagAAS2wAAEtuAABLcAAAS3IAAEtzAABLdAAAS3UAAEt2AABLeAAAS3oAAEt7AABLfAAAS34AAEt/AABLvgAAS8AAAEvCAABLxAAAS8YAAEvHAABLyAAAS8kAAEvKAABLzAAAS84AAEvPAABL0AAAS9IAAEvTAABL4AAAS+EAAEviAABL5AAATCMAAEwlAABMJwAATCkAAEwrAABMLAAATC0AAEwuAABMLwAATDEAAEwzAABMNAAATDUAAEw3AABMOAAATHcAAEx5AABMewAATH0AAEx/AABMgAAATIEAAEyCAABMgwAATIUAAEyHAABMiAAATIkAAEyLAABMjAAATMsAAEzNAABMzwAATNEAAEzTAABM1AAATNUAAEzWAABM1wAATNkAAEzbAABM3AAATN0AAEzfAABM4AAATR8AAE0hAABNIwAATSUAAE0nAABNKAAATSkAAE0qAABNKwAATS0AAE0vAABNMAAATTEAAE0zAABNNAAATXMAAE11AABNdwAATXkAAE17AABNfAAATX0AAE1+AABNfwAATYEAAE2DAABNhAAATYUAAE2HAABNiAAATa0AAE3RAABN+AAAThwAAE4eAABOIAAATiIAAE4kAABOJgAATigAAE4pAABOLAAATjkAAE5IAABOSgAATkwAAE5OAABOUAAATlIAAE5UAABOVgAATmUAAE5oAABOawAATm4AAE5xAABOdAAATncAAE56AABOfAAATrsAAE69AABOvwAATsEAAE7EAABOxQAATsYAAE7HAABOyAAATsoAAE7MAABOzQAATs4AAE7QAABO0QAATxAAAE8SAABPFQAATxcAAE8aAABPGwAATxwAAE8dAABPHgAATyAAAE8iAABPIwAATyQAAE8mAABPJwAATykAAE9oAABPagAAT2wAAE9uAABPcQAAT3IAAE9zAABPdAAAT3UAAE93AABPeQAAT3oAAE97AABPfQAAT34AAE+9AABPvwAAT8EAAE/DAABPxgAAT8cAAE/IAABPyQAAT8oAAE/MAABPzgAAT88AAE/QAABP0gAAT9MAAFASAABQFAAAUBYAAFAYAABQGwAAUBwAAFAdAABQHgAAUB8AAFAhAABQIwAAUCQAAFAlAABQJwAAUCgAAFBnAABQaQAAUGsAAFBtAABQcAAAUHEAAFByAABQcwAAUHQAAFB2AABQeAAAUHkAAFB6AABQfAAAUH0AAFC8AABQvgAAUMAAAFDCAABQxQAAUMYAAFDHAABQyAAAUMkAAFDLAABQzQAAUM4AAFDPAABQ0QAAUNIAAFDbAABQ7gAAUPsAAFEOAABRGwAAUS4AAFFFAABRVwAAUaIAAFHFAABR5QAAUgUAAFIHAABSCQAAUgsAAFINAABSDwAAUhAAAFIRAABSFAAAUhUAAFIXAABSGAAAUhoAAFIcAABSHQAAUh4AAFIhAABSIgAAUicAAFI0AABSOQAAUjsAAFI9AABSQgAAUkUAAFJIAABSSgAAUm8AAFKTAABSugAAUt4AAFLhAABS4wAAUuUAAFLnAABS6QAAUusAAFLsAABS7wAAUvwAAFMNAABTDwAAUxEAAFMTAABTFQAAUxcAAFMZAABTGwAAUx0AAFMuAABTMQAAUzQAAFM3AABTOgAAUz0AAFNAAABTQwAAU0YAAFNIAABThwAAU4kAAFOLAABTjQAAU5AAAFORAABTkgAAU5MAAFOUAABTlgAAU5gAAFOZAABTmgAAU5wAAFOdAABT3AAAU94AAFPgAABT4gAAU+UAAFPmAABT5wAAU+gAAFPpAABT6wAAU+0AAFPuAABT7wAAU/EAAFPyAABUMQAAVDMAAFQ2AABUOAAAVDsAAFQ8AABUPQAAVD4AAFQ/AABUQQAAVEMAAFREAABURQAAVEcAAFRIAABUVQAAVFYAAFRXAABUWQAAVJgAAFSaAABUnAAAVJ4AAFShAABUogAAVKMAAFSkAABUpQAAVKcAAFSpAABUqgAAVKsAAFStAABUrgAAVO0AAFTvAABU8QAAVPMAAFT2AABU9wAAVPgAAFT5AABU+gAAVPwAAFT+AABU/wAAVQAAAFUCAABVAwAAVUIAAFVEAABVRgAAVUgAAFVLAABVTAAAVU0AAFVOAABVTwAAVVEAAFVTAABVVAAAVVUAAFVXAABVWAAAVZcAAFWZAABVmwAAVZ0AAFWgAABVoQAAVaIAAFWjAABVpAAAVaYAAFWoAABVqQAAVaoAAFWsAABVrQAAVewAAFXuAABV8AAAVfIAAFX1AABV9gAAVfcAAFX4AABV+QAAVfsAAFX9AABV/gAAVf8AAFYBAABWAgAAVicAAFZLAABWcgAAVpYAAFaZAABWmwAAVp0AAFafAABWoQAAVqMAAFakAABWpwAAVrQAAFbDAABWxQAAVscAAFbJAABWywAAVs0AAFbPAABW0QAAVuAAAFbjAABW5gAAVukAAFbsAABW7wAAVvIAAFb1AABW9wAAVzYAAFc4AABXOgAAVzwAAFc/AABXQAAAV0EAAFdCAABXQwAAV0UAAFdHAABXSAAAV0kAAFdLAABXTAAAV4sAAFeNAABXjwAAV5EAAFeUAABXlQAAV5YAAFeXAABXmAAAV5oAAFecAABXnQAAV54AAFegAABXoQAAV+AAAFfiAABX5AAAV+YAAFfpAABX6gAAV+sAAFfsAABX7QAAV+8AAFfxAABX8gAAV/MAAFf1AABX9gAAWDUAAFg3AABYOQAAWDsAAFg+AABYPwAAWEAAAFhBAABYQgAAWEQAAFhGAABYRwAAWEgAAFhKAABYSwAAWIoAAFiMAABYjgAAWJAAAFiTAABYlAAAWJUAAFiWAABYlwAAWJkAAFibAABYnAAAWJ0AAFifAABYoAAAWN8AAFjhAABY4wAAWOUAAFjoAABY6QAAWOoAAFjrAABY7AAAWO4AAFjwAABY8QAAWPIAAFj0AABY9QAAWTQAAFk2AABZOAAAWToAAFk9AABZPgAAWT8AAFlAAABZQQAAWUMAAFlFAABZRgAAWUcAAFlJAABZSgAAWZUAAFm4AABZ2AAAWfgAAFn6AABZ/AAAWf4AAFoAAABaAgAAWgMAAFoEAABaBwAAWggAAFoKAABaCwAAWg0AAFoPAABaEAAAWhEAAFoUAABaFQAAWhoAAFonAABaLAAAWi4AAFowAABaNQAAWjgAAFo7AABaPQAAWmIAAFqGAABarQAAWtEAAFrUAABa1gAAWtgAAFraAABa3AAAWt4AAFrfAABa4gAAWu8AAFsAAABbAgAAWwQAAFsGAABbCAAAWwoAAFsMAABbDgAAWxAAAFshAABbJAAAWycAAFsqAABbLQAAWzAAAFszAABbNgAAWzkAAFs7AABbegAAW3wAAFt+AABbgAAAW4MAAFuEAABbhQAAW4YAAFuHAABbiQAAW4sAAFuMAABbjQAAW48AAFuQAABbzwAAW9EAAFvTAABb1QAAW9gAAFvZAABb2gAAW9sAAFvcAABb3gAAW+AAAFvhAABb4gAAW+QAAFvlAABcJAAAXCYAAFwpAABcKwAAXC4AAFwvAABcMAAAXDEAAFwyAABcNAAAXDYAAFw3AABcOAAAXDoAAFw7AABcSAAAXEkAAFxKAABcTAAAXIsAAFyNAABcjwAAXJEAAFyUAABclQAAXJYAAFyXAABcmAAAXJoAAFycAABcnQAAXJ4AAFygAABcoQAAXOAAAFziAABc5AAAXOYAAFzpAABc6gAAXOsAAFzsAABc7QAAXO8AAFzxAABc8gAAXPMAAFz1AABc9gAAXTUAAF03AABdOQAAXTsAAF0+AABdPwAAXUAAAF1BAABdQgAAXUQAAF1GAABdRwAAXUgAAF1KAABdSwAAXYoAAF2MAABdjgAAXZAAAF2TAABdlAAAXZUAAF2WAABdlwAAXZkAAF2bAABdnAAAXZ0AAF2fAABdoAAAXd8AAF3hAABd4wAAXeUAAF3oAABd6QAAXeoAAF3rAABd7AAAXe4AAF3wAABd8QAAXfIAAF30AABd9QAAXhoAAF4+AABeZQAAXokAAF6MAABejgAAXpAAAF6SAABelAAAXpYAAF6XAABemgAAXqcAAF62AABeuAAAXroAAF68AABevgAAXsAAAF7CAABexAAAXtMAAF7WAABe2QAAXtwAAF7fAABe4gAAXuUAAF7oAABe6gAAXykAAF8rAABfLQAAXy8AAF8yAABfMwAAXzQAAF81AABfNgAAXzgAAF86AABfOwAAXzwAAF8+AABfPwAAX34AAF+AAABfggAAX4QAAF+HAABfiAAAX4kAAF+KAABfiwAAX40AAF+PAABfkAAAX5EAAF+TAABflAAAX9MAAF/VAABf1wAAX9kAAF/cAABf3QAAX94AAF/fAABf4AAAX+IAAF/kAABf5QAAX+YAAF/oAABf6QAAYCgAAGAqAABgLQAAYC8AAGAyAABgMwAAYDQAAGA1AABgNgAAYDgAAGA6AABgOwAAYDwAAGA+AABgPwAAYEIAAGCBAABggwAAYIUAAGCHAABgigAAYIsAAGCMAABgjQAAYI4AAGCQAABgkgAAYJMAAGCUAABglgAAYJcAAGDWAABg2AAAYNoAAGDcAABg3wAAYOAAAGDhAABg4gAAYOMAAGDlAABg5wAAYOgAAGDpAABg6wAAYOwAAGErAABhLQAAYS8AAGExAABhNAAAYTUAAGE2AABhNwAAYTgAAGE6AABhPAAAYT0AAGE+AABhQAAAYUEAAGGMAABhrwAAYc8AAGHvAABh8QAAYfMAAGH1AABh9wAAYfkAAGH6AABh+wAAYf4AAGH/AABiAQAAYgIAAGIEAABiBgAAYgcAAGIIAABiCwAAYgwAAGIRAABiHgAAYiMAAGIlAABiJwAAYiwAAGIvAABiMgAAYjQAAGJZAABifQAAYqQAAGLIAABiywAAYs0AAGLPAABi0QAAYtMAAGLVAABi1gAAYtkAAGLmAABi9wAAYvkAAGL7AABi/QAAYv8AAGMBAABjAwAAYwUAAGMHAABjGAAAYxsAAGMeAABjIQAAYyQAAGMnAABjKgAAYy0AAGMwAABjMgAAY3EAAGNzAABjdQAAY3cAAGN6AABjewAAY3wAAGN9AABjfgAAY4AAAGOCAABjgwAAY4QAAGOGAABjhwAAY8YAAGPIAABjygAAY8wAAGPPAABj0AAAY9EAAGPSAABj0wAAY9UAAGPXAABj2AAAY9kAAGPbAABj3AAAZBsAAGQdAABkIAAAZCIAAGQlAABkJgAAZCcAAGQoAABkKQAAZCsAAGQtAABkLgAAZC8AAGQxAABkMgAAZD8AAGRAAABkQQAAZEMAAGSCAABkhAAAZIYAAGSIAABkiwAAZIwAAGSNAABkjgAAZI8AAGSRAABkkwAAZJQAAGSVAABklwAAZJgAAGTXAABk2QAAZNsAAGTdAABk4AAAZOEAAGTiAABk4wAAZOQAAGTmAABk6AAAZOkAAGTqAABk7AAAZO0AAGUsAABlLgAAZTAAAGUyAABlNQAAZTYAAGU3AABlOAAAZTkAAGU7AABlPQAAZT4AAGU/AABlQQAAZUIAAGWBAABlgwAAZYUAAGWHAABligAAZYsAAGWMAABljQAAZY4AAGWQAABlkgAAZZMAAGWUAABllgAAZZcAAGXWAABl2AAAZdoAAGXcAABl3wAAZeAAAGXhAABl4gAAZeMAAGXlAABl5wAAZegAAGXpAABl6wAAZewAAGYRAABmNQAAZlwAAGaAAABmgwAAZoUAAGaHAABmiQAAZosAAGaNAABmjgAAZpEAAGaeAABmrQAAZq8AAGaxAABmswAAZrUAAGa3AABmuQAAZrsAAGbKAABmzQAAZtAAAGbTAABm1gAAZtkAAGbcAABm3wAAZuEAAGcgAABnIgAAZyQAAGcmAABnKQAAZyoAAGcrAABnLAAAZy0AAGcvAABnMQAAZzIAAGczAABnNQAAZzYAAGd1AABndwAAZ3kAAGd7AABnfgAAZ38AAGeAAABngQAAZ4IAAGeEAABnhgAAZ4cAAGeIAABnigAAZ4sAAGfKAABnzAAAZ84AAGfQAABn0wAAZ9QAAGfVAABn1gAAZ9cAAGfZAABn2wAAZ9wAAGfdAABn3wAAZ+AAAGgfAABoIQAAaCMAAGglAABoKAAAaCkAAGgqAABoKwAAaCwAAGguAABoMAAAaDEAAGgyAABoNAAAaDUAAGh0AABodgAAaHgAAGh6AABofQAAaH4AAGh/AABogAAAaIEAAGiDAABohQAAaIYAAGiHAABoiQAAaIoAAGjJAABoywAAaM0AAGjPAABo0gAAaNMAAGjUAABo1QAAaNYAAGjYAABo2gAAaNsAAGjcAABo3gAAaN8AAGkeAABpIAAAaSIAAGkkAABpJwAAaSgAAGkpAABpKgAAaSsAAGktAABpLwAAaTAAAGkxAABpMwAAaTQAAGl/AABpogAAacIAAGniAABp5AAAaeYAAGnoAABp6gAAaewAAGntAABp7gAAafEAAGnyAABp9AAAafUAAGn3AABp+QAAafoAAGn7AABp/gAAaf8AAGoEAABqEQAAahYAAGoYAABqGgAAah8AAGoiAABqJQAAaicAAGpMAABqcAAAapcAAGq7AABqvgAAasAAAGrCAABqxAAAasYAAGrIAABqyQAAaswAAGrZAABq6gAAauwAAGruAABq8AAAavIAAGr0AABq9gAAavgAAGr6AABrCwAAaw4AAGsRAABrFAAAaxcAAGsaAABrHQAAayAAAGsjAABrJQAAa2QAAGtmAABraAAAa2oAAGttAABrbgAAa28AAGtwAABrcQAAa3MAAGt1AABrdgAAa3cAAGt5AABregAAa7kAAGu7AABrvQAAa78AAGvCAABrwwAAa8QAAGvFAABrxgAAa8gAAGvKAABrywAAa8wAAGvOAABrzwAAbA4AAGwQAABsEwAAbBUAAGwYAABsGQAAbBoAAGwbAABsHAAAbB4AAGwgAABsIQAAbCIAAGwkAABsJQAAbDIAAGwzAABsNAAAbDYAAGx1AABsdwAAbHkAAGx7AABsfgAAbH8AAGyAAABsgQAAbIIAAGyEAABshgAAbIcAAGyIAABsigAAbIsAAGzKAABszAAAbM4AAGzQAABs0wAAbNQAAGzVAABs1gAAbNcAAGzZAABs2wAAbNwAAGzdAABs3wAAbOAAAG0fAABtIQAAbSMAAG0lAABtKAAAbSkAAG0qAABtKwAAbSwAAG0uAABtMAAAbTEAAG0yAABtNAAAbTUAAG10AABtdgAAbXgAAG16AABtfQAAbX4AAG1/AABtgAAAbYEAAG2DAABthQAAbYYAAG2HAABtiQAAbYoAAG3JAABtywAAbc0AAG3PAABt0gAAbdMAAG3UAABt1QAAbdYAAG3YAABt2gAAbdsAAG3cAABt3gAAbd8AAG4EAABuKAAAbk8AAG5zAABudgAAbngAAG56AABufAAAbn4AAG6AAABugQAAboQAAG6RAABuoAAAbqIAAG6kAABupgAAbqgAAG6qAABurAAAbq4AAG69AABuwAAAbsMAAG7GAABuyQAAbswAAG7PAABu0gAAbtQAAG8TAABvFQAAbxcAAG8ZAABvHAAAbx0AAG8eAABvHwAAbyAAAG8iAABvJAAAbyUAAG8mAABvKAAAbykAAG9oAABvagAAb2wAAG9uAABvcQAAb3IAAG9zAABvdAAAb3UAAG93AABveQAAb3oAAG97AABvfQAAb34AAG+9AABvvwAAb8EAAG/DAABvxgAAb8cAAG/IAABvyQAAb8oAAG/MAABvzgAAb88AAG/QAABv0gAAb9MAAHASAABwFAAAcBYAAHAYAABwGwAAcBwAAHAdAABwHgAAcB8AAHAhAABwIwAAcCQAAHAlAABwJwAAcCgAAHBnAABwaQAAcGsAAHBtAABwcAAAcHEAAHByAABwcwAAcHQAAHB2AABweAAAcHkAAHB6AABwfAAAcH0AAHC8AABwvgAAcMEAAHDDAABwxgAAcMcAAHDIAABwyQAAcMoAAHDMAABwzgAAcM8AAHDQAABw0gAAcNMAAHDvAABxLgAAcTAAAHEyAABxNAAAcTcAAHE4AABxOQAAcToAAHE7AABxPQAAcT8AAHFAAABxQQAAcUMAAHFEAABxjwAAcbIAAHHSAABx8gAAcfQAAHH2AABx+AAAcfoAAHH8AABx/QAAcf4AAHIBAAByAgAAcgQAAHIFAAByBwAAcgkAAHIKAAByCwAAcg4AAHIPAAByFAAAciEAAHImAAByKAAAcioAAHIvAAByMgAAcjUAAHI3AAByXAAAcoAAAHKnAAByywAAcs4AAHLQAABy0gAActQAAHLWAABy2AAActkAAHLcAABy6QAAcvoAAHL8AABy/gAAcwAAAHMCAABzBAAAcwYAAHMIAABzCgAAcxsAAHMeAABzIQAAcyQAAHMnAABzKgAAcy0AAHMwAABzMwAAczUAAHN0AABzdgAAc3gAAHN6AABzfQAAc34AAHN/AABzgAAAc4EAAHODAABzhQAAc4YAAHOHAABziQAAc4oAAHPJAABzywAAc80AAHPPAABz0gAAc9MAAHPUAABz1QAAc9YAAHPYAABz2gAAc9sAAHPcAABz3gAAc98AAHQeAAB0IAAAdCMAAHQlAAB0KAAAdCkAAHQqAAB0KwAAdCwAAHQuAAB0MAAAdDEAAHQyAAB0NAAAdDUAAHRCAAB0QwAAdEQAAHRGAAB0hQAAdIcAAHSJAAB0iwAAdI4AAHSPAAB0kAAAdJEAAHSSAAB0lAAAdJYAAHSXAAB0mAAAdJoAAHSbAAB02gAAdNwAAHTeAAB04AAAdOMAAHTkAAB05QAAdOYAAHTnAAB06QAAdOsAAHTsAAB07QAAdO8AAHTwAAB1LwAAdTEAAHUzAAB1NQAAdTgAAHU5AAB1OgAAdTsAAHU8AAB1PgAAdUAAAHVBAAB1QgAAdUQAAHVFAAB1hAAAdYYAAHWIAAB1igAAdY0AAHWOAAB1jwAAdZAAAHWRAAB1kwAAdZUAAHWWAAB1lwAAdZkAAHWaAAB12QAAddsAAHXdAAB13wAAdeIAAHXjAAB15AAAdeUAAHXmAAB16AAAdeoAAHXrAAB17AAAde4AAHXvAAB2FAAAdjgAAHZfAAB2gwAAdoYAAHaIAAB2igAAdowAAHaOAAB2kAAAdpEAAHaUAAB2oQAAdrAAAHayAAB2tAAAdrYAAHa4AAB2ugAAdrwAAHa+AAB2zQAAdtAAAHbTAAB21gAAdtkAAHbcAAB23wAAduIAAHbkAAB3IwAAdyUAAHcnAAB3KQAAdywAAHctAAB3LgAAdy8AAHcwAAB3MgAAdzQAAHc1AAB3NgAAdzgAAHc5AAB3eAAAd3oAAHd8AAB3fgAAd4EAAHeCAAB3gwAAd4QAAHeFAAB3hwAAd4kAAHeKAAB3iwAAd40AAHeOAAB3zQAAd88AAHfRAAB30wAAd9YAAHfXAAB32AAAd9kAAHfaAAB33AAAd94AAHffAAB34AAAd+IAAHfjAAB4IgAAeCQAAHgmAAB4KAAAeCsAAHgsAAB4LQAAeC4AAHgvAAB4MQAAeDMAAHg0AAB4NQAAeDcAAHg4AAB4dwAAeHkAAHh7AAB4fQAAeIAAAHiBAAB4ggAAeIMAAHiEAAB4hgAAeIgAAHiJAAB4igAAeIwAAHiNAAB4zAAAeM4AAHjQAAB40gAAeNUAAHjWAAB41wAAeNgAAHjZAAB42wAAeN0AAHjeAAB43wAAeOEAAHjiAAB5IQAAeSMAAHklAAB5JwAAeSoAAHkrAAB5LAAAeS0AAHkuAAB5MAAAeTIAAHkzAAB5NAAAeTYAAHk3AAB5ggAAeaUAAHnFAAB55QAAeecAAHnpAAB56wAAee0AAHnvAAB58AAAefEAAHn0AAB59QAAefcAAHn4AAB5+gAAefwAAHn9AAB5/gAAegEAAHoCAAB6CwAAehgAAHodAAB6HwAAeiEAAHomAAB6KQAAeiwAAHouAAB6UwAAencAAHqeAAB6wgAAesUAAHrHAAB6yQAAessAAHrNAAB6zwAAetAAAHrTAAB64AAAevEAAHrzAAB69QAAevcAAHr5AAB6+wAAev0AAHr/AAB7AQAAexIAAHsVAAB7GAAAexsAAHseAAB7IQAAeyQAAHsnAAB7KgAAeywAAHtrAAB7bQAAe28AAHtxAAB7dAAAe3UAAHt2AAB7dwAAe3gAAHt6AAB7fAAAe30AAHt+AAB7gAAAe4EAAHvAAAB7wgAAe8QAAHvGAAB7yQAAe8oAAHvLAAB7zAAAe80AAHvPAAB70QAAe9IAAHvTAAB71QAAe9YAAHwVAAB8FwAAfBoAAHwcAAB8HwAAfCAAAHwhAAB8IgAAfCMAAHwlAAB8JwAAfCgAAHwpAAB8KwAAfCwAAHw5AAB8OgAAfDsAAHw9AAB8fAAAfH4AAHyAAAB8ggAAfIUAAHyGAAB8hwAAfIgAAHyJAAB8iwAAfI0AAHyOAAB8jwAAfJEAAHySAAB80QAAfNMAAHzVAAB81wAAfNoAAHzbAAB83AAAfN0AAHzeAAB84AAAfOIAAHzjAAB85AAAfOYAAHznAAB9JgAAfSgAAH0qAAB9LAAAfS8AAH0wAAB9MQAAfTIAAH0zAAB9NQAAfTcAAH04AAB9OQAAfTsAAH08AAB9ewAAfX0AAH1/AAB9gQAAfYQAAH2FAAB9hgAAfYcAAH2IAAB9igAAfYwAAH2NAAB9jgAAfZAAAH2RAAB90AAAfdIAAH3UAAB91gAAfdkAAH3aAAB92wAAfdwAAH3dAAB93wAAfeEAAH3iAAB94wAAfeUAAH3mAAB+CwAAfi8AAH5WAAB+egAAfn0AAH5/AAB+gQAAfoMAAH6FAAB+hwAAfogAAH6LAAB+mAAAfqcAAH6pAAB+qwAAfq0AAH6vAAB+sQAAfrMAAH61AAB+xAAAfscAAH7KAAB+zQAAftAAAH7TAAB+1gAAftkAAH7bAAB/GgAAfxwAAH8eAAB/IAAAfyMAAH8kAAB/JQAAfyYAAH8nAAB/KQAAfysAAH8sAAB/LQAAfy8AAH8wAAB/bwAAf3EAAH9zAAB/dQAAf3gAAH95AAB/egAAf3sAAH98AAB/fgAAf4AAAH+BAAB/ggAAf4QAAH+FAAB/xAAAf8YAAH/IAAB/ygAAf80AAH/OAAB/zwAAf9AAAH/RAAB/0wAAf9UAAH/WAAB/1wAAf9kAAH/aAACAGQAAgBsAAIAeAACAIAAAgCMAAIAkAACAJQAAgCYAAIAnAACAKQAAgCsAAIAsAACALQAAgC8AAIAwAACAbwAAgHEAAIBzAACAdQAAgHgAAIB5AACAegAAgHsAAIB8AACAfgAAgIAAAICBAACAggAAgIQAAICFAACAxAAAgMYAAIDIAACAygAAgM0AAIDOAACAzwAAgNAAAIDRAACA0wAAgNUAAIDWAACA1wAAgNkAAIDaAACBGQAAgRsAAIEdAACBHwAAgSIAAIEjAACBJAAAgSUAAIEmAACBKAAAgSoAAIErAACBLAAAgS4AAIEvAACBegAAgZ0AAIG9AACB3QAAgd8AAIHhAACB4wAAgeUAAIHnAACB6AAAgekAAIHsAACB7QAAge8AAIHwAACB8gAAgfQAAIH1AACB9gAAgfkAAIH6AACB/wAAggwAAIIRAACCEwAAghUAAIIaAACCHQAAgiAAAIIiAACCRwAAgmsAAIKSAACCtgAAgrkAAIK7AACCvQAAgr8AAILBAACCwwAAgsQAAILHAACC1AAAguUAAILnAACC6QAAgusAAILtAACC7wAAgvEAAILzAACC9QAAgwYAAIMJAACDDAAAgw8AAIMSAACDFQAAgxgAAIMbAACDHgAAgyAAAINfAACDYQAAg2MAAINlAACDaAAAg2kAAINqAACDawAAg2wAAINuAACDcAAAg3EAAINyAACDdAAAg3UAAIO0AACDtgAAg7gAAIO6AACDvQAAg74AAIO/AACDwAAAg8EAAIPDAACDxQAAg8YAAIPHAACDyQAAg8oAAIQJAACECwAAhA4AAIQQAACEEwAAhBQAAIQVAACEFgAAhBcAAIQZAACEGwAAhBwAAIQdAACEHwAAhCAAAIQtAACELgAAhC8AAIQxAACEcAAAhHIAAIR0AACEdgAAhHkAAIR6AACEewAAhHwAAIR9AACEfwAAhIEAAISCAACEgwAAhIUAAISGAACExQAAhMcAAITJAACEywAAhM4AAITPAACE0AAAhNEAAITSAACE1AAAhNYAAITXAACE2AAAhNoAAITbAACFGgAAhRwAAIUeAACFIAAAhSMAAIUkAACFJQAAhSYAAIUnAACFKQAAhSsAAIUsAACFLQAAhS8AAIUwAACFbwAAhXEAAIVzAACFdQAAhXgAAIV5AACFegAAhXsAAIV8AACFfgAAhYAAAIWBAACFggAAhYQAAIWFAACFxAAAhcYAAIXIAACFygAAhc0AAIXOAACFzwAAhdAAAIXRAACF0wAAhdUAAIXWAACF1wAAhdkAAIXaAACF/wAAhiMAAIZKAACGbgAAhnEAAIZzAACGdQAAhncAAIZ5AACGewAAhnwAAIZ/AACGjAAAhpsAAIadAACGnwAAhqEAAIajAACGpQAAhqcAAIapAACGuAAAhrsAAIa+AACGwQAAhsQAAIbHAACGygAAhs0AAIbPAACHDgAAhxAAAIcSAACHFAAAhxcAAIcYAACHGQAAhxoAAIcbAACHHQAAhx8AAIcgAACHIQAAhyMAAIckAACHYwAAh2UAAIdnAACHaQAAh2wAAIdtAACHbgAAh28AAIdwAACHcgAAh3QAAId1AACHdgAAh3gAAId5AACHuAAAh7oAAIe8AACHvgAAh8EAAIfCAACHwwAAh8QAAIfFAACHxwAAh8kAAIfKAACHywAAh80AAIfOAACIDQAAiA8AAIgRAACIEwAAiBYAAIgXAACIGAAAiBkAAIgaAACIHAAAiB4AAIgfAACIIAAAiCIAAIgjAACIYgAAiGQAAIhmAACIaAAAiGsAAIhsAACIbQAAiG4AAIhvAACIcQAAiHMAAIh0AACIdQAAiHcAAIh4AACItwAAiLkAAIi8AACIvgAAiMEAAIjCAACIwwAAiMQAAIjFAACIxwAAiMkAAIjKAACIywAAiM0AAIjOAACI6gAAiSkAAIkrAACJLQAAiS8AAIkyAACJMwAAiTQAAIk1AACJNgAAiTgAAIk6AACJOwAAiTwAAIk+AACJPwAAiYoAAImtAACJzQAAie0AAInvAACJ8QAAifMAAIn1AACJ9wAAifgAAIn5AACJ/AAAif0AAIn/AACKAAAAigIAAIoEAACKBQAAigYAAIoJAACKCgAAig8AAIocAACKIQAAiiMAAIolAACKKgAAii0AAIowAACKMgAAilcAAIp7AACKogAAisYAAIrJAACKywAAis0AAIrPAACK0QAAitMAAIrUAACK1wAAiuQAAIr1AACK9wAAivkAAIr7AACK/QAAiv8AAIsBAACLAwAAiwUAAIsWAACLGQAAixwAAIsfAACLIgAAiyUAAIsoAACLKwAAiy4AAIswAACLbwAAi3EAAItzAACLdQAAi3gAAIt5AACLegAAi3sAAIt8AACLfgAAi4AAAIuBAACLggAAi4QAAIuFAACLxAAAi8YAAIvIAACLygAAi80AAIvOAACLzwAAi9AAAIvRAACL0wAAi9UAAIvWAACL1wAAi9kAAIvaAACMGQAAjBsAAIweAACMIAAAjCMAAIwkAACMJQAAjCYAAIwnAACMKQAAjCsAAIwsAACMLQAAjC8AAIwwAACMPQAAjD4AAIw/AACMQQAAjIAAAIyCAACMhAAAjIYAAIyJAACMigAAjIsAAIyMAACMjQAAjI8AAIyRAACMkgAAjJMAAIyVAACMlgAAjNUAAIzXAACM2QAAjNsAAIzeAACM3wAAjOAAAIzhAACM4gAAjOQAAIzmAACM5wAAjOgAAIzqAACM6wAAjSoAAI0sAACNLgAAjTAAAI0zAACNNAAAjTUAAI02AACNNwAAjTkAAI07AACNPAAAjT0AAI0/AACNQAAAjX8AAI2BAACNgwAAjYUAAI2IAACNiQAAjYoAAI2LAACNjAAAjY4AAI2QAACNkQAAjZIAAI2UAACNlQAAjdQAAI3WAACN2AAAjdoAAI3dAACN3gAAjd8AAI3gAACN4QAAjeMAAI3lAACN5gAAjecAAI3pAACN6gAAjg8AAI4zAACOWgAAjn4AAI6BAACOgwAAjoUAAI6HAACOiQAAjosAAI6MAACOjwAAjpwAAI6rAACOrQAAjq8AAI6xAACOswAAjrUAAI63AACOuQAAjsgAAI7LAACOzgAAjtEAAI7UAACO1wAAjtoAAI7dAACO3wAAjx4AAI8gAACPIgAAjyQAAI8nAACPKAAAjykAAI8qAACPKwAAjy0AAI8vAACPMAAAjzEAAI8zAACPNAAAj3MAAI91AACPdwAAj3kAAI98AACPfQAAj34AAI9/AACPgAAAj4IAAI+EAACPhQAAj4YAAI+IAACPiQAAj8gAAI/KAACPzAAAj84AAI/RAACP0gAAj9MAAI/UAACP1QAAj9cAAI/ZAACP2gAAj9sAAI/dAACP3gAAkB0AAJAfAACQIgAAkCQAAJAnAACQKAAAkCkAAJAqAACQKwAAkC0AAJAvAACQMAAAkDEAAJAzAACQNAAAkHMAAJB1AACQdwAAkHkAAJB8AACQfQAAkH4AAJB/AACQgAAAkIIAAJCEAACQhQAAkIYAAJCIAACQiQAAkMgAAJDKAACQzAAAkM4AAJDRAACQ0gAAkNMAAJDUAACQ1QAAkNcAAJDZAACQ2gAAkNsAAJDdAACQ3gAAkR0AAJEfAACRIQAAkSMAAJEmAACRJwAAkSgAAJEpAACRKgAAkSwAAJEuAACRLwAAkTAAAJEyAACRMwAAkX4AAJGhAACRwQAAkeEAAJHjAACR5QAAkecAAJHpAACR6wAAkewAAJHtAACR8AAAkfEAAJHzAACR9AAAkfYAAJH4AACR+QAAkfoAAJH9AACR/gAAkgcAAJIUAACSGQAAkhsAAJIdAACSIgAAkiUAAJIoAACSKgAAkk8AAJJzAACSmgAAkr4AAJLBAACSwwAAksUAAJLHAACSyQAAkssAAJLMAACSzwAAktwAAJLtAACS7wAAkvEAAJLzAACS9QAAkvcAAJL5AACS+wAAkv0AAJMOAACTEQAAkxQAAJMXAACTGgAAkx0AAJMgAACTIwAAkyYAAJMoAACTZwAAk2kAAJNrAACTbQAAk3AAAJNxAACTcgAAk3MAAJN0AACTdgAAk3gAAJN5AACTegAAk3wAAJN9AACTvAAAk74AAJPAAACTwgAAk8UAAJPGAACTxwAAk8gAAJPJAACTywAAk80AAJPOAACTzwAAk9EAAJPSAACUEQAAlBMAAJQWAACUGAAAlBsAAJQcAACUHQAAlB4AAJQfAACUIQAAlCMAAJQkAACUJQAAlCcAAJQoAACUNQAAlDYAAJQ3AACUOQAAlHgAAJR6AACUfAAAlH4AAJSBAACUggAAlIMAAJSEAACUhQAAlIcAAJSJAACUigAAlIsAAJSNAACUjgAAlM0AAJTPAACU0QAAlNMAAJTWAACU1wAAlNgAAJTZAACU2gAAlNwAAJTeAACU3wAAlOAAAJTiAACU4wAAlSIAAJUkAACVJgAAlSgAAJUrAACVLAAAlS0AAJUuAACVLwAAlTEAAJUzAACVNAAAlTUAAJU3AACVOAAAlXcAAJV5AACVewAAlX0AAJWAAACVgQAAlYIAAJWDAACVhAAAlYYAAJWIAACViQAAlYoAAJWMAACVjQAAlcwAAJXOAACV0AAAldIAAJXVAACV1gAAldcAAJXYAACV2QAAldsAAJXdAACV3gAAld8AAJXhAACV4gAAlgcAAJYrAACWUgAAlnYAAJZ5AACWewAAln0AAJZ/AACWgQAAloMAAJaEAACWhwAAlpQAAJajAACWpQAAlqcAAJapAACWqwAAlq0AAJavAACWsQAAlsAAAJbDAACWxgAAlskAAJbMAACWzwAAltIAAJbVAACW1wAAlxYAAJcYAACXGgAAlxwAAJcfAACXIAAAlyEAAJciAACXIwAAlyUAAJcnAACXKAAAlykAAJcrAACXLAAAl2sAAJdtAACXbwAAl3EAAJd0AACXdQAAl3YAAJd3AACXeAAAl3oAAJd8AACXfQAAl34AAJeAAACXgQAAl8AAAJfCAACXxAAAl8YAAJfJAACXygAAl8sAAJfMAACXzQAAl88AAJfRAACX0gAAl9MAAJfVAACX1gAAmBUAAJgXAACYGQAAmBsAAJgeAACYHwAAmCAAAJghAACYIgAAmCQAAJgmAACYJwAAmCgAAJgqAACYKwAAmGoAAJhsAACYbgAAmHAAAJhzAACYdAAAmHUAAJh2AACYdwAAmHkAAJh7AACYfAAAmH0AAJh/AACYgAAAmL8AAJjBAACYwwAAmMUAAJjIAACYyQAAmMoAAJjLAACYzAAAmM4AAJjQAACY0QAAmNIAAJjUAACY1QAAmRQAAJkWAACZGAAAmRoAAJkdAACZHgAAmR8AAJkgAACZIQAAmSMAAJklAACZJgAAmScAAJkpAACZKgAAmXUAAJmYAACZuAAAmdgAAJnaAACZ3AAAmd4AAJngAACZ4gAAmeMAAJnkAACZ5wAAmegAAJnqAACZ6wAAme4AAJnwAACZ8QAAmfIAAJn1AACZ9gAAmfsAAJoIAACaDQAAmg8AAJoRAACaFgAAmhkAAJocAACaHgAAmkMAAJpnAACajgAAmrIAAJq1AACatwAAmrkAAJq7AACavQAAmr8AAJrAAACawwAAmtAAAJrhAACa4wAAmuUAAJrnAACa6QAAmusAAJrtAACa7wAAmvEAAJsCAACbBQAAmwgAAJsLAACbDgAAmxEAAJsUAACbFwAAmxoAAJscAACbWwAAm10AAJtfAACbYQAAm2QAAJtlAACbZgAAm2cAAJtoAACbagAAm2wAAJttAACbbgAAm3AAAJtxAACbsAAAm7IAAJu0AACbtgAAm7kAAJu6AACbuwAAm7wAAJu9AACbvwAAm8EAAJvCAACbwwAAm8UAAJvGAACcBQAAnAcAAJwKAACcDAAAnA8AAJwQAACcEQAAnBIAAJwTAACcFQAAnBcAAJwYAACcGQAAnBsAAJwcAACcKQAAnCoAAJwrAACcLQAAnGwAAJxuAACccAAAnHIAAJx1AACcdgAAnHcAAJx4AACceQAAnHsAAJx9AACcfgAAnH8AAJyBAACcggAAnMEAAJzDAACcxQAAnMcAAJzKAACcywAAnMwAAJzNAACczgAAnNAAAJzSAACc0wAAnNQAAJzWAACc1wAAnRYAAJ0YAACdGgAAnRwAAJ0fAACdIAAAnSEAAJ0iAACdIwAAnSUAAJ0nAACdKAAAnSkAAJ0rAACdLAAAnWsAAJ1tAACdbwAAnXEAAJ10AACddQAAnXYAAJ13AACdeAAAnXoAAJ18AACdfQAAnX4AAJ2AAACdgQAAncAAAJ3CAACdxAAAncYAAJ3JAACdygAAncsAAJ3MAACdzQAAnc8AAJ3RAACd0gAAndMAAJ3VAACd1gAAnfsAAJ4fAACeRgAAnmoAAJ5tAACebwAAnnEAAJ5zAACedQAAnncAAJ54AACeewAAnogAAJ6VAACelwAAnpkAAJ6bAACenQAAnp8AAJ6hAACergAAnrEAAJ60AACetwAAnroAAJ69AACewAAAnsIAAJ8BAACfAwAAnwYAAJ8IAACfCwAAnwwAAJ8NAACfDgAAnw8AAJ8RAACfEwAAnxQAAJ8VAACfFwAAnxgAAJ9bAACffwAAn6MAAJ/GAACf7QAAoA0AAKA0AACgWwAAoHsAAKCfAACgwwAAoMUAAKDIAACgygAAoMwAAKDOAACg0QAAoNQAAKDWAACg2AAAoNsAAKDdAACg3wAAoOIAAKDlAACg5gAAoOsAAKD4AACg+wAAoP0AAKEAAAChAwAAoQUAAKEqAAChTgAAoXUAAKGZAAChnAAAoZ4AAKGgAAChogAAoaQAAKGmAAChpwAAoaoAAKG3AAChygAAocwAAKHOAACh0AAAodIAAKHUAACh1gAAodgAAKHaAACh3AAAoe8AAKHyAACh9QAAofgAAKH7AACh/gAAogEAAKIEAACiBwAAogoAAKIMAACiSwAAok0AAKJQAACiUgAAolUAAKJWAACiVwAAolgAAKJZAACiWwAAol0AAKJeAACiXwAAomEAAKJiAACiawAAomwAAKJuAACirQAAoq8AAKKxAACiswAAorYAAKK3AACiuAAAorkAAKK6AACivAAAor4AAKK/AACiwAAAosIAAKLDAACjAgAAowQAAKMHAACjCQAAowwAAKMNAACjDgAAow8AAKMQAACjEgAAoxQAAKMVAACjFgAAoxgAAKMZAACjIgAAoyMAAKMlAACjZAAAo2YAAKNoAACjagAAo20AAKNuAACjbwAAo3AAAKNxAACjcwAAo3UAAKN2AACjdwAAo3kAAKN6AACjuQAAo7sAAKO+AACjwAAAo8MAAKPEAACjxQAAo8YAAKPHAACjyQAAo8sAAKPMAACjzQAAo88AAKPQAACj2QAAo9oAAKPcAACkGwAApB0AAKQfAACkIQAApCQAAKQlAACkJgAApCcAAKQoAACkKgAApCwAAKQtAACkLgAApDAAAKQxAACkcAAApHIAAKR1AACkdwAApHoAAKR7AACkfAAApH0AAKR+AACkgAAApIIAAKSDAACkhAAApIYAAKSHAACklAAApJUAAKSWAACkmAAApNcAAKTZAACk2wAApN0AAKTgAACk4QAApOIAAKTjAACk5AAApOYAAKToAACk6QAApOoAAKTsAACk7QAApSwAAKUuAAClMQAApTMAAKU2AAClNwAApTgAAKU5AAClOgAApTwAAKU+AAClPwAApUAAAKVCAAClQwAApU4AAKVbAAClZgAApWgAAKVrAAClbgAApXEAAKVzAAClfgAApYEAAKWEAAClhwAApYoAAKWNAACljwAApZIAAKWXAAClngAApekAAKYMAACmLAAApkwAAKZOAACmUAAAplIAAKZUAACmVwAAplgAAKZZAACmXAAApl0AAKZfAACmYAAApmIAAKZkAACmZQAApmYAAKZpAACmagAApnMAAKaAAACmhQAApocAAKaJAACmjgAAppEAAKaUAACmlgAAprsAAKbfAACnBgAApyoAAKctAACnLwAApzEAAKczAACnNQAApzcAAKc4AACnOwAAp0gAAKdZAACnWwAAp10AAKdfAACnYQAAp2MAAKdlAACnZwAAp2kAAKd6AACnfQAAp4AAAKeDAACnhgAAp4kAAKeMAACnjwAAp5IAAKeUAACn0wAAp9UAAKfXAACn2QAAp9wAAKfdAACn3gAAp98AAKfgAACn4gAAp+QAAKflAACn5gAAp+gAAKfpAACoKAAAqCoAAKgsAACoLgAAqDEAAKgyAACoMwAAqDQAAKg1AACoNwAAqDkAAKg6AACoOwAAqD0AAKg+AACofQAAqH8AAKiCAACohAAAqIcAAKiIAACoiQAAqIoAAKiLAACojQAAqI8AAKiQAACokQAAqJMAAKiUAACooQAAqKIAAKijAACopQAAqOQAAKjmAACo6AAAqOoAAKjtAACo7gAAqO8AAKjwAACo8QAAqPMAAKj1AACo9gAAqPcAAKj5AACo+gAAqTkAAKk7AACpPQAAqT8AAKlCAACpQwAAqUQAAKlFAACpRgAAqUgAAKlKAACpSwAAqUwAAKlOAACpTwAAqY4AAKmQAACpkgAAqZQAAKmXAACpmAAAqZkAAKmaAACpmwAAqZ0AAKmfAACpoAAAqaEAAKmjAACppAAAqeMAAKnlAACp5wAAqekAAKnsAACp7QAAqe4AAKnvAACp8AAAqfIAAKn0AACp9QAAqfYAAKn4AACp+QAAqjgAAKo6AACqPAAAqj4AAKpBAACqQgAAqkMAAKpEAACqRQAAqkcAAKpJAACqSgAAqksAAKpNAACqTgAAqnMAAKqXAACqvgAAquIAAKrlAACq5wAAqukAAKrrAACq7QAAqu8AAKrwAACq8wAAqwAAAKsPAACrEQAAqxMAAKsVAACrFwAAqxkAAKsbAACrHQAAqywAAKsvAACrMgAAqzUAAKs4AACrOwAAqz4AAKtBAACrQwAAq4IAAKuEAACrhgAAq4gAAKuLAACrjAAAq40AAKuOAACrjwAAq5EAAKuTAACrlAAAq5UAAKuXAACrmAAAq9cAAKvZAACr2wAAq90AAKvgAACr4QAAq+IAAKvjAACr5AAAq+YAAKvoAACr6QAAq+oAAKvsAACr7QAArCwAAKwuAACsMAAArDIAAKw1AACsNgAArDcAAKw4AACsOQAArDsAAKw9AACsPgAArD8AAKxBAACsQgAArIEAAKyDAACshQAArIcAAKyKAACsiwAArIwAAKyNAACsjgAArJAAAKySAACskwAArJQAAKyWAACslwAArNYAAKzYAACs2gAArNwAAKzfAACs4AAArOEAAKziAACs4wAArOUAAKznAACs6AAArOkAAKzrAACs7AAArSsAAK0tAACtLwAArTEAAK00AACtNQAArTYAAK03AACtOAAArToAAK08AACtPQAArT4AAK1AAACtQQAArYAAAK2CAACthAAArYYAAK2JAACtigAArYsAAK2MAACtjQAArY8AAK2RAACtkgAArZMAAK2VAACtlgAAreEAAK4EAACuJAAArkQAAK5GAACuSAAArkoAAK5MAACuTwAArlAAAK5RAACuVAAArlUAAK5XAACuWAAArloAAK5dAACuXgAArl8AAK5iAACuYwAArmgAAK51AACuegAArnwAAK5+AACugwAAroYAAK6JAACuiwAArrAAAK7UAACu+wAArx8AAK8iAACvJAAAryYAAK8oAACvKgAArywAAK8tAACvMAAArz0AAK9OAACvUAAAr1IAAK9UAACvVgAAr1gAAK9aAACvXAAAr14AAK9vAACvcgAAr3UAAK94AACvewAAr34AAK+BAACvhAAAr4cAAK+JAACvyAAAr8oAAK/MAACvzgAAr9EAAK/SAACv0wAAr9QAAK/VAACv1wAAr9kAAK/aAACv2wAAr90AAK/eAACwHQAAsB8AALAhAACwIwAAsCYAALAnAACwKAAAsCkAALAqAACwLAAAsC4AALAvAACwMAAAsDIAALAzAACwcgAAsHQAALB3AACweQAAsHwAALB9AACwfgAAsH8AALCAAACwggAAsIQAALCFAACwhgAAsIgAALCJAACwlgAAsJcAALCYAACwmgAAsNkAALDbAACw3QAAsN8AALDiAACw4wAAsOQAALDlAACw5gAAsOgAALDqAACw6wAAsOwAALDuAACw7wAAsS4AALEwAACxMgAAsTQAALE3AACxOAAAsTkAALE6AACxOwAAsT0AALE/AACxQAAAsUEAALFDAACxRAAAsYMAALGFAACxhwAAsYkAALGMAACxjQAAsY4AALGPAACxkAAAsZIAALGUAACxlQAAsZYAALGYAACxmQAAsdgAALHaAACx3AAAsd4AALHhAACx4gAAseMAALHkAACx5QAAsecAALHpAACx6gAAsesAALHtAACx7gAAsi0AALIvAACyMQAAsjMAALI2AACyNwAAsjgAALI5AACyOgAAsjwAALI+AACyPwAAskAAALJCAACyQwAAsmgAALKMAACyswAAstcAALLaAACy3AAAst4AALLgAACy4gAAsuQAALLlAACy6AAAsvUAALMEAACzBgAAswgAALMKAACzDAAAsw4AALMQAACzEgAAsyEAALMkAACzJwAAsyoAALMtAACzMAAAszMAALM2AACzOAAAs3cAALN5AACzewAAs30AALOAAACzgQAAs4IAALODAACzhAAAs4YAALOIAACziQAAs4oAALOMAACzjQAAs8wAALPOAACz0AAAs9IAALPVAACz1gAAs9cAALPYAACz2QAAs9sAALPdAACz3gAAs98AALPhAACz4gAAtCEAALQjAAC0JQAAtCcAALQqAAC0KwAAtCwAALQtAAC0LgAAtDAAALQyAAC0MwAAtDQAALQ2AAC0NwAAtHYAALR4AAC0egAAtHwAALR/AAC0gAAAtIEAALSCAAC0gwAAtIUAALSHAAC0iAAAtIkAALSLAAC0jAAAtMsAALTNAAC0zwAAtNEAALTUAAC01QAAtNYAALTXAAC02AAAtNoAALTcAAC03QAAtN4AALTgAAC04QAAtSAAALUiAAC1JAAAtSYAALUpAAC1KgAAtSsAALUsAAC1LQAAtS8AALUxAAC1MgAAtTMAALU1AAC1NgAAtXUAALV3AAC1eQAAtXsAALV+AAC1fwAAtYAAALWBAAC1ggAAtYQAALWGAAC1hwAAtYgAALWKAAC1iwAAtdYAALX5AAC2GQAAtjkAALY7AAC2PQAAtj8AALZBAAC2RAAAtkUAALZGAAC2SQAAtkoAALZMAAC2TQAAtk8AALZSAAC2UwAAtlQAALZXAAC2WAAAtl0AALZqAAC2bwAAtnEAALZzAAC2eAAAtnsAALZ+AAC2gAAAtqUAALbJAAC28AAAtxQAALcXAAC3GQAAtxsAALcdAAC3HwAAtyEAALciAAC3JQAAtzIAALdDAAC3RQAAt0cAALdJAAC3SwAAt00AALdPAAC3UQAAt1MAALdkAAC3ZwAAt2oAALdtAAC3cAAAt3MAALd2AAC3eQAAt3wAALd+AAC3vQAAt78AALfBAAC3wwAAt8YAALfHAAC3yAAAt8kAALfKAAC3zAAAt84AALfPAAC30AAAt9IAALfTAAC4EgAAuBQAALgWAAC4GAAAuBsAALgcAAC4HQAAuB4AALgfAAC4IQAAuCMAALgkAAC4JQAAuCcAALgoAAC4ZwAAuGkAALhsAAC4bgAAuHEAALhyAAC4cwAAuHQAALh1AAC4dwAAuHkAALh6AAC4ewAAuH0AALh+AAC4iwAAuIwAALiNAAC4jwAAuM4AALjQAAC40gAAuNQAALjXAAC42AAAuNkAALjaAAC42wAAuN0AALjfAAC44AAAuOEAALjjAAC45AAAuSMAALklAAC5JwAAuSkAALksAAC5LQAAuS4AALkvAAC5MAAAuTIAALk0AAC5NQAAuTYAALk4AAC5OQAAuXgAALl6AAC5fAAAuX4AALmBAAC5ggAAuYMAALmEAAC5hQAAuYcAALmJAAC5igAAuYsAALmNAAC5jgAAuc0AALnPAAC50QAAudMAALnWAAC51wAAudgAALnZAAC52gAAudwAALneAAC53wAAueAAALniAAC54wAAuiIAALokAAC6JgAAuigAALorAAC6LAAAui0AALouAAC6LwAAujEAALozAAC6NAAAujUAALo3AAC6OAAAul0AALqBAAC6qAAAuswAALrPAAC60QAAutMAALrVAAC61wAAutkAALraAAC63QAAuuoAALr5AAC6+wAAuv0AALr/AAC7AQAAuwMAALsFAAC7BwAAuxYAALsZAAC7HAAAux8AALsiAAC7JQAAuygAALsrAAC7LQAAu2wAALtuAAC7cAAAu3IAALt1AAC7dgAAu3cAALt4AAC7eQAAu3sAALt9AAC7fgAAu38AALuBAAC7ggAAu8EAALvDAAC7xQAAu8cAALvKAAC7ywAAu8wAALvNAAC7zgAAu9AAALvSAAC70wAAu9QAALvWAAC71wAAvBYAALwYAAC8GgAAvBwAALwfAAC8IAAAvCEAALwiAAC8IwAAvCUAALwnAAC8KAAAvCkAALwrAAC8LAAAvGsAALxtAAC8bwAAvHEAALx0AAC8dQAAvHYAALx3AAC8eAAAvHoAALx8AAC8fQAAvH4AALyAAAC8gQAAvMAAALzCAAC8xAAAvMYAALzJAAC8ygAAvMsAALzMAAC8zQAAvM8AALzRAAC80gAAvNMAALzVAAC81gAAvRUAAL0XAAC9GQAAvRsAAL0eAAC9HwAAvSAAAL0hAAC9IgAAvSQAAL0mAAC9JwAAvSgAAL0qAAC9KwAAvWoAAL1sAAC9bgAAvXAAAL1zAAC9dAAAvXUAAL12AAC9dwAAvXkAAL17AAC9fAAAvX0AAL1/AAC9gAAAvcsAAL3uAAC+DgAAvi4AAL4wAAC+MgAAvjQAAL42AAC+OQAAvjoAAL47AAC+PgAAvj8AAL5BAAC+QgAAvkQAAL5HAAC+SAAAvkkAAL5MAAC+TQAAvlIAAL5fAAC+ZAAAvmYAAL5oAAC+bQAAvnAAAL5zAAC+dQAAvpoAAL6+AAC+5QAAvwkAAL8MAAC/DgAAvxAAAL8SAAC/FAAAvxYAAL8XAAC/GgAAvycAAL84AAC/OgAAvzwAAL8+AAC/QAAAv0IAAL9EAAC/RgAAv0gAAL9ZAAC/XAAAv18AAL9iAAC/ZQAAv2gAAL9rAAC/bgAAv3EAAL9zAAC/sgAAv7QAAL+2AAC/uAAAv7sAAL+8AAC/vQAAv74AAL+/AAC/wQAAv8MAAL/EAAC/xQAAv8cAAL/IAADABwAAwAkAAMALAADADQAAwBAAAMARAADAEgAAwBMAAMAUAADAFgAAwBgAAMAZAADAGgAAwBwAAMAdAADAXAAAwF4AAMBhAADAYwAAwGYAAMBnAADAaAAAwGkAAMBqAADAbAAAwG4AAMBvAADAcAAAwHIAAMBzAADAgAAAwIEAAMCCAADAhAAAwMMAAMDFAADAxwAAwMkAAMDMAADAzQAAwM4AAMDPAADA0AAAwNIAAMDUAADA1QAAwNYAAMDYAADA2QAAwRgAAMEaAADBHAAAwR4AAMEhAADBIgAAwSMAAMEkAADBJQAAwScAAMEpAADBKgAAwSsAAMEtAADBLgAAwW0AAMFvAADBcQAAwXMAAMF2AADBdwAAwXgAAMF5AADBegAAwXwAAMF+AADBfwAAwYAAAMGCAADBgwAAwcIAAMHEAADBxgAAwcgAAMHLAADBzAAAwc0AAMHOAADBzwAAwdEAAMHTAADB1AAAwdUAAMHXAADB2AAAwhcAAMIZAADCGwAAwh0AAMIgAADCIQAAwiIAAMIjAADCJAAAwiYAAMIoAADCKQAAwioAAMIsAADCLQAAwlIAAMJ2AADCnQAAwsEAAMLEAADCxgAAwsgAAMLKAADCzAAAws4AAMLPAADC0gAAwt8AAMLuAADC8AAAwvIAAML0AADC9gAAwvgAAML6AADC/AAAwwsAAMMOAADDEQAAwxQAAMMXAADDGgAAwx0AAMMgAADDIgAAw2EAAMNjAADDZQAAw2cAAMNqAADDawAAw2wAAMNtAADDbgAAw3AAAMNyAADDcwAAw3QAAMN2AADDdwAAw7YAAMO4AADDugAAw7wAAMO/AADDwAAAw8EAAMPCAADDwwAAw8U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AAM8DAADPBAAAzwUAAM8HAADPCQAAzwoAAM8LAADPDQAAzw4AAM9NAADPTwAAz1EAAM9TAADPVgAAz1cAAM9YAADPWQAAz1oAAM9cAADPXgAAz18AAM9gAADPYgAAz2MAAM+iAADPpAAAz6YAAM+oAADPqwAAz6wAAM+tAADPrgAAz68AAM+xAADPswAAz7QAAM+1AADPtwAAz7gAANADAADQJgAA0EYAANBmAADQaAAA0GoAANBsAADQbgAA0HAAANBxAADQcgAA0HUAANB2AADQeAAA0HkAANB7AADQfQAA0H4AANB/AADQggAA0IMAANCMAADQmQAA0J4AANCgAADQogAA0KcAANCqAADQrQAA0K8AANDUAADQ+AAA0R8AANFDAADRRgAA0UgAANFKAADRTAAA0U4AANFQAADRUQAA0VQAANFhAADRcgAA0XQAANF2AADReAAA0XoAANF8AADRfgAA0YAAANGCAADRkwAA0ZYAANGZAADRnAAA0Z8AANGiAADRpQAA0agAANGrAADRrQAA0ewAANHuAADR8AAA0fIAANH1AADR9gAA0fcAANH4AADR+QAA0fsAANH9AADR/gAA0f8AANIBAADSAgAA0kEAANJDAADSRQAA0kcAANJKAADSSwAA0kwAANJNAADSTgAA0lAAANJSAADSUwAA0lQAANJWAADSVwAA0pYAANKYAADSmwAA0p0AANKgAADSoQAA0qIAANKjAADSpAAA0qYAANKoAADSqQAA0qoAANKsAADSrQAA0roAANK7AADSvAAA0r4AANL9AADS/wAA0wEAANMDAADTBgAA0wcAANMIAADTCQAA0woAANMMAADTDgAA0w8AANMQAADTEgAA0xMAANNSAADTVAAA01YAANNYAADTWwAA01wAANNdAADTXgAA018AANNhAADTYwAA02QAANNlAADTZwAA02gAANOnAADTqQAA06sAANOtAADTsAAA07EAANOyAADTswAA07QAANO2AADTuAAA07kAANO6AADTvAAA070AANP8AADT/gAA1AAAANQCAADUBQAA1AYAANQHAADUCAAA1AkAANQLAADUDQAA1A4AANQPAADUEQAA1BIAANRRAADUUwAA1FUAANRXAADUWgAA1FsAANRcAADUXQAA1F4AANRgAADUYgAA1GMAANRkAADUZgAA1GcAANSMAADUsAAA1NcAANT7AADU/gAA1QAAANUCAADVBAAA1QYAANUIAADVCQAA1QwAANUZAADVKAAA1SoAANUsAADVLgAA1TAAANUyAADVNAAA1TYAANVFAADVSAAA1UsAANVOAADVUQAA1VQAANVXAADVWgAA1VwAANWbAADVnQAA1Z8AANWhAADVpAAA1aUAANWmAADVpwAA1agAANWqAADVrAAA1a0AANWuAADVsAAA1bEAANXwAADV8gAA1fQAANX2AADV+QAA1foAANX7AADV/AAA1f0AANX/AADWAQAA1gIAANYDAADWBQAA1gYAANZFAADWRwAA1kkAANZLAADWTgAA1k8AANZQAADWUQAA1lIAANZUAADWVgAA1lcAANZYAADWWgAA1lsAANaaAADWnAAA1p8AANahAADWpAAA1qUAANamAADWpwAA1qgAANaqAADWrAAA1q0AANauAADWsAAA1rEAANbwAADW8gAA1vQAANb2AADW+QAA1voAANb7AADW/AAA1v0AANb/AADXAQAA1wIAANcDAADXBQAA1wYAANdFAADXRwAA10kAANdLAADXTgAA108AANdQAADXUQAA11IAANdUAADXVgAA11cAANdYAADXWgAA11sAANeaAADXnAAA154AANegAADXowAA16QAANelAADXpgAA16cAANepAADXqwAA16wAANetAADXrwAA17AAANf7AADYHgAA2D4AANheAADYYAAA2GIAANhkAADYZgAA2GgAANhpAADYagAA2G0AANhuAADYcAAA2HEAANhzAADYdQAA2HYAANh3AADYegAA2HsAANiAAADYjQAA2JIAANiUAADYlgAA2JsAANieAADYoQAA2KMAANjIAADY7AAA2RMAANk3AADZOgAA2TwAANk+AADZQAAA2UIAANlEAADZRQAA2UgAANlVAADZZgAA2WgAANlqAADZbAAA2W4AANlwAADZcgAA2XQAANl2AADZhwAA2YoAANmNAADZkAAA2ZMAANmWAADZmQAA2ZwAANmfAADZoQAA2eAAANniAADZ5AAA2eYAANnpAADZ6gAA2esAANnsAADZ7QAA2e8AANnxAADZ8gAA2fMAANn1AADZ9gAA2jUAANo3AADaOQAA2jsAANo+AADaPwAA2kAAANpBAADaQgAA2kQAANpGAADaRwAA2kgAANpKAADaSwAA2ooAANqMAADajwAA2pEAANqUAADalQAA2pYAANqXAADamAAA2poAANqcAADanQAA2p4AANqgAADaoQAA2q4AANqvAADasAAA2rIAANrxAADa8wAA2vUAANr3AADa+gAA2vsAANr8AADa/QAA2v4AANsAAADbAgAA2wMAANsEAADbBgAA2wcAANtGAADbSAAA20oAANtMAADbTwAA21AAANtRAADbUgAA21MAANtVAADbVwAA21gAANtZAADbWwAA21wAANubAADbnQAA258AANuhAADbpAAA26UAANumAADbpwAA26gAANuqAADbrAAA260AANuuAADbsAAA27EAANvwAADb8gAA2/QAANv2AADb+QAA2/oAANv7AADb/AAA2/0AANv/AADcAQAA3AIAANwDAADcBQAA3AYAANxFAADcRwAA3EkAANxLAADcTgAA3E8AANxQAADcUQAA3FIAANxUAADcVgAA3FcAANxYAADcWgAA3FsAANyAAADcpAAA3MsAANzvAADc8gAA3PQAANz2AADc+AAA3PoAANz8AADc/QAA3QAAAN0NAADdHAAA3R4AAN0gAADdIgAA3SQAAN0mAADdKAAA3SoAAN05AADdPAAA3T8AAN1CAADdRQAA3UgAAN1LAADdTgAA3VAAAN2PAADdkQAA3ZMAAN2VAADdmAAA3ZkAAN2aAADdmwAA3ZwAAN2eAADdoAAA3aEAAN2iAADdpAAA3aUAAN3kAADd5gAA3egAAN3qAADd7QAA3e4AAN3vAADd8AAA3fEAAN3zAADd9QAA3fYAAN33AADd+QAA3foAAN45AADeOwAA3j0AAN4/AADeQgAA3kMAAN5EAADeRQAA3kYAAN5IAADeSgAA3ksAAN5MAADeTgAA3k8AAN6OAADekAAA3pIAAN6UAADelwAA3pgAAN6ZAADemgAA3psAAN6dAADenwAA3qAAAN6hAADeowAA3qQAAN7jAADe5QAA3ucAAN7pAADe7AAA3u0AAN7uAADe7wAA3vAAAN7yAADe9AAA3vUAAN72AADe+AAA3vkAAN84AADfOgAA3zwAAN8+AADfQQAA30IAAN9DAADfRAAA30UAAN9HAADfSQAA30oAAN9LAADfTQAA304AAN+NAADfjwAA35EAAN+TAADflgAA35cAAN+YAADfmQAA35oAAN+cAADfngAA358AAN+gAADfogAA36MAAN/uAADgEQAA4DEAAOBRAADgUwAA4FUAAOBXAADgWQAA4FsAAOBcAADgXQAA4GAAAOBhAADgYwAA4GQAAOBmAADgaAAA4GkAAOBqAADgbQAA4G4AAOBzAADggAAA4IUAAOCHAADgiQAA4I4AAOCRAADglAAA4JYAAOC7AADg3wAA4QYAAOEqAADhLQAA4S8AAOExAADhMwAA4TUAAOE3AADhOAAA4TsAAOFIAADhWQAA4VsAAOFdAADhXwAA4WEAAOFjAADhZQAA4WcAAOFpAADhegAA4X0AAOGAAADhgwAA4YYAAOGJAADhjAAA4Y8AAOGSAADhlAAA4dMAAOHVAADh1wAA4dkAAOHcAADh3QAA4d4AAOHfAADh4AAA4eIAAOHkAADh5QAA4eYAAOHoAADh6QAA4igAAOIqAADiLAAA4i4AAOIxAADiMgAA4jMAAOI0AADiNQAA4jcAAOI5AADiOgAA4jsAAOI9AADiPgAA4n0AAOJ/AADiggAA4oQAAOKHAADiiAAA4okAAOKKAADiiwAA4o0AAOKPAADikAAA4pEAAOKTAADilAAA4qEAAOKiAADiowAA4qUAAOLkAADi5gAA4ugAAOLqAADi7QAA4u4AAOLvAADi8AAA4vEAAOLzAADi9QAA4vYAAOL3AADi+QAA4voAAOM5AADjOwAA4z0AAOM/AADjQgAA40MAAONEAADjRQAA40YAAONIAADjSgAA40sAAONMAADjTgAA408AAOOOAADjkAAA45IAAOOUAADjlwAA45gAAOOZAADjmgAA45sAAOOdAADjnwAA46AAAOOhAADjowAA46QAAOPjAADj5QAA4+cAAOPpAADj7AAA4+0AAOPuAADj7wAA4/AAAOPyAADj9AAA4/UAAOP2AADj+AAA4/kAAOQ4AADkOgAA5DwAAOQ+AADkQQAA5EIAAORDAADkRAAA5EUAAORHAADkSQAA5EoAAORLAADkTQAA5E4AAORzAADklwAA5L4AAOTiAADk5QAA5OcAAOTpAADk6wAA5O0AAOTvAADk8AAA5PMAAOUAAADlDwAA5REAAOUTAADlFQAA5RcAAOUZAADlGwAA5R0AAOUsAADlLwAA5TIAAOU1AADlOAAA5TsAAOU+AADlQQAA5UMAAOWCAADlhAAA5YYAAOWIAADliwAA5YwAAOWNAADljgAA5Y8AAOWRAADlkwAA5ZQAAOWVAADllwAA5ZgAAOXXAADl2QAA5dsAAOXdAADl4AAA5eEAAOXiAADl4wAA5eQAAOXmAADl6AAA5ekAAOXqAADl7AAA5e0AAOYsAADmLgAA5jAAAOYyAADmNQAA5jYAAOY3AADmOAAA5jkAAOY7AADmPQAA5j4AAOY/AADmQQAA5kIAAOaBAADmgwAA5oUAAOaHAADmigAA5osAAOaMAADmjQAA5o4AAOaQAADmkgAA5pMAAOaUAADmlgAA5pcAAObWAADm2AAA5toAAObcAADm3wAA5uAAAObhAADm4gAA5uMAAOblAADm5wAA5ugAAObpAADm6wAA5uwAAOcrAADnLQAA5zAAAOcyAADnNQAA5zYAAOc3AADnOAAA5zkAAOc7AADnPQAA5z4AAOc/AADnQQAA50IAAOdeAADnnQAA558AAOehAADnowAA56YAAOenAADnqAAA56kAAOeqAADnrAAA564AAOevAADnsAAA57IAAOezAADn/gAA6CEAAOhBAADoYQAA6GMAAOhlAADoZwAA6GkAAOhrAADobAAA6G0AAOhwAADocQAA6HMAAOh0AADodgAA6HgAAOh5AADoegAA6H0AAOh+AADohwAA6JQAAOiZAADomwAA6J0AAOiiAADopQAA6KgAAOiqAADozwAA6PMAAOkaAADpPgAA6UEAAOlDAADpRQAA6UcAAOlJAADpSwAA6UwAAOlPAADpXAAA6W0AAOlvAADpcQAA6XMAAOl1AADpdwAA6XkAAOl7AADpfQAA6Y4AAOmRAADplAAA6ZcAAOmaAADpnQAA6aAAAOmjAADppgAA6agAAOnnAADp6QAA6esAAOntAADp8AAA6fEAAOnyAADp8wAA6fQAAOn2AADp+AAA6fkAAOn6AADp/AAA6f0AAOo8AADqPgAA6kAAAOpCAADqRQAA6kYAAOpHAADqSAAA6kkAAOpLAADqTQAA6k4AAOpPAADqUQAA6lIAAOqRAADqkwAA6pYAAOqYAADqmwAA6pwAAOqdAADqngAA6p8AAOqhAADqowAA6qQAAOqlAADqpwAA6qgAAOq1AADqtgAA6rcAAOq5AADq+AAA6voAAOr8AADq/gAA6wEAAOsCAADrAwAA6wQAAOsFAADrBwAA6wkAAOsKAADrCwAA6w0AAOsOAADrTQAA608AAOtRAADrUwAA61YAAOtXAADrWAAA61kAAOtaAADrXAAA614AAOtfAADrYAAA62IAAOtjAADrogAA66QAAOumAADrqAAA66sAAOusAADrrQAA664AAOuvAADrsQAA67MAAOu0AADrtQAA67cAAOu4AADr9wAA6/kAAOv7AADr/QAA7AAAAOwBAADsAgAA7AMAAOwEAADsBgAA7AgAAOwJAADsCgAA7AwAAOwNAADsTAAA7E4AAOxQAADsUgAA7FUAAOxWAADsVwAA7FgAAOxZAADsWwAA7F0AAOxeAADsXwAA7GEAAOxiAADshwAA7KsAAOzSAADs9gAA7PkAAOz7AADs/QAA7P8AAO0BAADtAwAA7QQAAO0HAADtFAAA7SMAAO0lAADtJwAA7SkAAO0rAADtLQAA7S8AAO0xAADtQAAA7UMAAO1GAADtSQAA7UwAAO1PAADtUgAA7VUAAO1XAADtlgAA7ZgAAO2aAADtnAAA7Z8AAO2gAADtoQAA7aIAAO2jAADtpQAA7acAAO2oAADtqQAA7asAAO2sAADt6wAA7e0AAO3vAADt8QAA7fQAAO31AADt9gAA7fcAAO34AADt+gAA7fwAAO39AADt/gAA7gAAAO4BAADuQAAA7kIAAO5EAADuRgAA7kkAAO5KAADuSwAA7kwAAO5NAADuTwAA7lEAAO5SAADuUwAA7lUAAO5WAADulQAA7pcAAO6ZAADumwAA7p4AAO6fAADuoAAA7qEAAO6iAADupAAA7qYAAO6nAADuqAAA7qoAAO6rAADu6gAA7uwAAO7uAADu8AAA7vMAAO70AADu9QAA7vYAAO73AADu+QAA7vsAAO78AADu/QAA7v8AAO8AAADvPwAA70EAAO9DAADvRQAA70gAAO9JAADvSgAA70sAAO9MAADvTgAA71AAAO9RAADvUgAA71QAAO9VAADvlAAA75YAAO+YAADvmgAA750AAO+eAADvnwAA76AAAO+hAADvowAA76UAAO+mAADvpwAA76kAAO+qAADv9QAA8BgAAPA4AADwWAAA8FoAAPBcAADwXgAA8GAAAPBiAADwYwAA8GQAAPBnAADwaAAA8GoAAPBrAADwbQAA8G8AAPBwAADwcQAA8HQAAPB1AADwegAA8IcAAPCMAADwjgAA8JA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AAQF8AAEBfwABAYIAAQGFAAEBhwABAcYAAQHIAAEBygABAcwAAQHPAAEB0AABAdEAAQHSAAEB0wABAdUAAQHXAAEB2AABAdkAAQHbAAEB3AABAhsAAQIdAAECHwABAiEAAQIkAAECJQABAiYAAQInAAECKAABAioAAQIsAAECLQABAi4AAQIwAAECMQABAnAAAQJyAAECdQABAncAAQJ6AAECewABAnwAAQJ9AAECfgABAoAAAQKCAAECgwABAoQAAQKGAAEChwABApQAAQKVAAEClgABApgAAQLXAAEC2QABAtsAAQLdAAEC4AABAuEAAQLiAAEC4wABAuQAAQLmAAEC6AABAukAAQLqAAEC7AABAu0AAQMsAAEDLgABAzAAAQMyAAEDNQABAzYAAQM3AAEDOAABAzkAAQM7AAEDPQABAz4AAQM/AAEDQQABA0IAAQOBAAEDgwABA4UAAQOHAAEDigABA4sAAQOMAAEDjQABA44AAQOQAAEDkgABA5MAAQOUAAEDlgABA5cAAQPWAAED2AABA9oAAQPcAAED3wABA+AAAQPhAAED4gABA+MAAQPlAAED5wABA+gAAQPpAAED6wABA+wAAQQrAAEELQABBC8AAQQxAAEENAABBDUAAQQ2AAEENwABBDgAAQQ6AAEEPAABBD0AAQQ+AAEEQAABBEEAAQRmAAEEigABBLEAAQTVAAEE2AABBNoAAQTcAAEE3gABBOAAAQTiAAEE4wABBOYAAQTzAAEFAgABBQQAAQUGAAEFCAABBQoAAQUMAAEFDgABBRAAAQUfAAEFIgABBSUAAQUoAAEFKwABBS4AAQUxAAEFNAABBTYAAQV1AAEFdwABBXkAAQV7AAEFfgABBX8AAQWAAAEFgQABBYIAAQWEAAEFhgABBYcAAQWIAAEFigABBYsAAQXKAAEFzAABBc4AAQXQAAEF0wABBdQAAQXVAAEF1gABBdcAAQXZAAEF2wABBdwAAQXdAAEF3wABBeAAAQYfAAEGIQABBiMAAQYlAAEGKAABBikAAQYqAAEGKwABBiwAAQYuAAEGMAABBjEAAQYyAAEGNAABBjUAAQZ0AAEGdgABBngAAQZ6AAEGfQABBn4AAQZ/AAEGgAABBoEAAQaDAAEGhQABBoYAAQaHAAEGiQABBooAAQbJAAEGywABBs0AAQbPAAEG0gABBtMAAQbUAAEG1QABBtYAAQbYAAEG2gABBtsAAQbcAAEG3gABBt8AAQceAAEHIAABByIAAQckAAEHJwABBygAAQcpAAEHKgABBysAAQctAAEHLwABBzAAAQcxAAEHMwABBzQAAQdzAAEHdQABB3cAAQd5AAEHfAABB30AAQd+AAEHfwABB4AAAQeCAAEHhAABB4UAAQeGAAEHiAABB4kAAQfUAAEH9wABCBcAAQg3AAEIOQABCDsAAQg9AAEIPwABCEEAAQhCAAEIQwABCEYAAQhHAAEISQABCEoAAQhMAAEITgABCE8AAQhQAAEIUwABCFQAAQhZAAEIZgABCGsAAQhtAAEIbwABCHQAAQh3AAEIegABCHwAAQihAAEIxQABCOwAAQkQAAEJEwABCRUAAQkXAAEJGQABCRsAAQkdAAEJHgABCSEAAQkuAAEJPwABCUEAAQlDAAEJRQABCUcAAQlJAAEJSwABCU0AAQlPAAEJYAABCWMAAQlmAAEJaQABCWwAAQlvAAEJcgABCXUAAQl4AAEJegABCbkAAQm7AAEJvQABCb8AAQnCAAEJwwABCcQAAQnFAAEJxgABCcgAAQnKAAEJywABCcwAAQnOAAEJzwABCg4AAQoQAAEKEgABChQAAQoXAAEKGAABChkAAQoaAAEKGwABCh0AAQofAAEKIAABCiEAAQojAAEKJAABCmMAAQplAAEKaAABCmoAAQptAAEKbgABCm8AAQpwAAEKcQABCnMAAQp1AAEKdgABCncAAQp5AAEKegABCocAAQqIAAEKiQABCosAAQrKAAEKzAABCs4AAQrQAAEK0wABCtQAAQrVAAEK1gABCtcAAQrZAAEK2wABCtwAAQrdAAEK3wABCuAAAQsfAAELIQABCyMAAQslAAELKAABCykAAQsqAAELKwABCywAAQsuAAELMAABCzEAAQsyAAELNAABCzUAAQt0AAELdgABC3gAAQt6AAELfQABC34AAQt/AAELgAABC4EAAQuDAAELhQABC4YAAQuHAAELiQABC4oAAQvJAAELywABC80AAQvPAAEL0gABC9MAAQvUAAEL1QABC9YAAQvYAAEL2gABC9sAAQvcAAEL3gABC98AAQweAAEMIAABDCIAAQwkAAEMJwABDCgAAQwpAAEMKgABDCsAAQwtAAEMLwABDDAAAQwxAAEMMwABDDQAAQxZAAEMfQABDKQAAQzIAAEMywABDM0AAQzPAAEM0QABDNMAAQzVAAEM1gABDNkAAQzmAAEM9QABDPcAAQz5AAEM+wABDP0AAQz/AAENAQABDQMAAQ0SAAENFQABDRgAAQ0bAAENHgABDSEAAQ0kAAENJwABDSkAAQ1oAAENagABDW0AAQ1vAAENcgABDXMAAQ10AAENdQABDXYAAQ14AAENegABDXsAAQ18AAENfgABDX8AAQ2+AAENwAABDcIAAQ3EAAENxwABDcgAAQ3JAAENygABDcsAAQ3NAAENzwABDdAAAQ3RAAEN0wABDdQAAQ4TAAEOFQABDhcAAQ4ZAAEOHAABDh0AAQ4eAAEOHwABDiAAAQ4iAAEOJAABDiUAAQ4mAAEOKAABDikAAQ5oAAEOagABDm0AAQ5vAAEOcgABDnMAAQ50AAEOdQABDnYAAQ54AAEOegABDnsAAQ58AAEOfgABDn8AAQ6BAAEOwAABDsIAAQ7EAAEOxgABDskAAQ7KAAEOywABDswAAQ7NAAEOzwABDtEAAQ7SAAEO0wABDtUAAQ7WAAEPFQABDxcAAQ8ZAAEPGwABDx4AAQ8fAAEPIAABDyEAAQ8iAAEPJAABDyYAAQ8nAAEPKAABDyoAAQ8rAAEPagABD2wAAQ9uAAEPcAABD3MAAQ90AAEPdQABD3YAAQ93AAEPeQABD3sAAQ98AAEPfQABD38AAQ+AAAEPywABD+4AARAOAAEQLgABEDAAARAyAAEQNAABEDYAARA4AAEQOQABEDoAARA9AAEQPgABEEAAARBBAAEQRAABEEYAARBHAAEQSAABEEsAARBMAAEQUQABEF4AARBjAAEQZQABEGcAARBsAAEQbwABEHIAARB0AAEQmQABEL0AARDkAAERCAABEQsAARENAAERDwABEREAARETAAERFQABERYAAREZAAERJgABETcAARE5AAEROwABET0AARE/AAERQQABEUMAARFFAAERRwABEVgAARFbAAERXgABEWEAARFkAAERZwABEWoAARFtAAERcAABEXIAARGxAAERswABEbUAARG3AAERugABEbsAARG8AAERvQABEb4AARHAAAERwgABEcMAARHEAAERxgABEccAARIGAAESCAABEgoAARIMAAESDwABEhAAARIRAAESEgABEhMAARIVAAESFwABEhgAARIZAAESGwABEhwAARJbAAESXQABEmAAARJiAAESZQABEmYAARJnAAESaAABEmkAARJrAAESbQABEm4AARJvAAEScQABEnIAARJ/AAESgAABEoEAARKDAAESwgABEsQAARLGAAESyAABEssAARLMAAESzQABEs4AARLPAAES0QABEtMAARLUAAES1QABEtcAARLYAAETFwABExkAARMbAAETHQABEyAAARMhAAETIgABEyMAARMkAAETJgABEygAARMpAAETKgABEywAARMtAAETbAABE24AARNwAAETcgABE3UAARN2AAETdwABE3gAARN5AAETewABE30AARN+AAETfwABE4EAAROCAAETwQABE8MAARPFAAETxwABE8oAARPLAAETzAABE80AARPOAAET0AABE9IAARPTAAET1AABE9YAARPXAAEUFgABFBgAARQaAAEUHAABFB8AARQgAAEUIQABFCIAARQjAAEUJQABFCcAARQoAAEUKQABFCsAARQsAAEUUQABFHUAARScAAEUwAABFMMAARTFAAEUxwABFMkAARTLAAEUzQABFM4AARTRAAEU3gABFO0AARTvAAEU8QABFPMAART1AAEU9wABFPkAART7AAEVCgABFQ0AARUQAAEVEwABFRYAARUZAAEVHAABFR8AARUhAAEVYAABFWIAARVkAAEVZgABFWkAARVqAAEVawABFWwAARVtAAEVbwABFXEAARVyAAEVcwABFXUAARV2AAEVtQABFbcAARW6AAEVvAABFb8AARXAAAEVwQABFcIAARXDAAEVxQABFccAARXIAAEVyQABFcsAARXMAAEWCwABFg0AARYPAAEWEQABFhQAARYVAAEWFgABFhcAARYYAAEWGgABFhwAARYdAAEWHgABFiAAARYhAAEWYAABFmIAARZlAAEWZwABFmoAARZrAAEWbAABFm0AARZuAAEWcAABFnIAARZzAAEWdAABFnYAARZ3AAEWugABFt4AARcCAAEXJQABF0wAARdsAAEXkwABF7oAARfaAAEX/gABGCIAARgkAAEYJwABGCkAARgrAAEYLQABGDAAARgzAAEYNQABGDcAARg6AAEYPAABGD4AARhBAAEYRAABGEUAARhKAAEYVwABGFoAARhcAAEYXwABGGIAARhkAAEYiQABGK0AARjUAAEY+AABGPsAARj9AAEY/wABGQEAARkDAAEZBQABGQYAARkJAAEZFgABGSkAARkrAAEZLQABGS8AARkxAAEZMwABGTUAARk3AAEZOQABGTsAARlOAAEZUQABGVQAARlXAAEZWgABGV0AARlgAAEZYwABGWYAARlpAAEZawABGaoAARmsAAEZrwABGbEAARm0AAEZtQABGbYAARm3AAEZuAABGboAARm8AAEZvQABGb4AARnAAAEZwQABGcoAARnLAAEZzQABGgwAARoOAAEaEAABGhIAARoVAAEaFgABGhcAARoYAAEaGQABGhsAARodAAEaHgABGh8AARohAAEaIgABGmEAARpjAAEaZgABGmgAARprAAEabAABGm0AARpuAAEabwABGnEAARpzAAEadAABGnUAARp3AAEaeAABGoEAARqCAAEahAABGsMAARrFAAEaxwABGskAARrMAAEazQABGs4AARrPAAEa0AABGtIAARrUAAEa1QABGtYAARrYAAEa2QABGxgAARsaAAEbHQABGx8AARsiAAEbIwABGyQAARslAAEbJgABGygAARsqAAEbKwABGywAARsuAAEbLwABGzgAARs5AAEbOwABG3oAARt8AAEbfgABG4AAARuDAAEbhAABG4UAARuGAAEbhwABG4kAARuLAAEbjAABG40AARuPAAEbkAABG88AARvRAAEb1AABG9YAARvZAAEb2gABG9sAARvcAAEb3QABG98AARvhAAEb4gABG+MAARvlAAEb5gABG/MAARv0AAEb9QABG/cAARw2AAEcOAABHDoAARw8AAEcPwABHEAAARxBAAEcQgABHEMAARxFAAEcRwABHEgAARxJAAEcSwABHEwAARyLAAEcjQABHJAAARySAAEclQABHJYAARyXAAEcmAABHJkAARybAAEcnQABHJ4AARyfAAEcoQABHKIAARyxAAEcvgABHMsAARzOAAEc0QABHNQAARzXAAEc2gABHN0AARzqAAEc7QABHPAAARzzAAEc9gABHPkAARz8AAEc/gABHQkAAR0RAAEdGwABHSUAAR0xAAEdOwABHYYAAR2pAAEdyQABHekAAR3rAAEd7QABHe8AAR3xAAEd9AABHfUAAR32AAEd+QABHfoAAR38AAEd/QABHf8AAR4CAAEeAwABHgQAAR4HAAEeCAABHg0AAR4aAAEeHwABHiEAAR4jAAEeKAABHisAAR4uAAEeMAABHlUAAR55AAEeoAABHsQAAR7HAAEeyQABHssAAR7NAAEezwABHtEAAR7SAAEe1QABHuIAAR7zAAEe9QABHvcAAR75AAEe+wABHv0AAR7/AAEfAQABHwMAAR8UAAEfFwABHxoAAR8dAAEfIAABHyMAAR8mAAEfKQABHywAAR8uAAEfbQABH28AAR9xAAEfcwABH3YAAR93AAEfeAABH3kAAR96AAEffAABH34AAR9/AAEfgAABH4IAAR+DAAEfwgABH8QAAR/GAAEfyAABH8sAAR/MAAEfzQABH84AAR/PAAEf0QABH9MAAR/UAAEf1QABH9cAAR/YAAEgFwABIBkAASAcAAEgHgABICEAASAiAAEgIwABICQAASAlAAEgJwABICkAASAqAAEgKwABIC0AASAuAAEgOwABIDwAASA9AAEgPwABIH4AASCAAAEgggABIIQAASCHAAEgiAABIIkAASCKAAEgiwABII0AASCPAAEgkAABIJEAASCTAAEglAABINMAASDVAAEg1wABINkAASDcAAEg3QABIN4AASDfAAEg4AABIOIAASDkAAEg5QABIOYAASDoAAEg6QABISgAASEqAAEhLAABIS4AASExAAEhMgABITMAASE0AAEhNQABITcAASE5AAEhOgABITsAASE9AAEhPgABIX0AASF/AAEhgQABIYMAASGGAAEhhwABIYgAASGJAAEhigABIYwAASGOAAEhjwABIZAAASGSAAEhkwABIdIAASHUAAEh1gABIdgAASHbAAEh3AABId0AASHeAAEh3wABIeEAASHjAAEh5AABIeUAASHnAAEh6AABIg0AASIxAAEiWAABInwAASJ/AAEigQABIoMAASKFAAEihwABIokAASKKAAEijQABIpoAASKpAAEiqwABIq0AASKvAAEisQABIrMAASK1AAEitwABIsYAASLJAAEizAABIs8AASLSAAEi1QABItgAASLbAAEi3QABIxwAASMeAAEjIQABIyMAASMmAAEjJwABIygAASMpAAEjKgABIywAASMuAAEjLwABIzAAASMyAAEjMwABI3IAASN0AAEjdgABI3gAASN7AAEjfAABI30AASN+AAEjfwABI4EAASODAAEjhAABI4UAASOHAAEjiAABI8cAASPJAAEjywABI80AASPQAAEj0QABI9IAASPTAAEj1AABI9YAASPYAAEj2QABI9oAASPcAAEj3QABJBwAASQeAAEkIQABJCMAASQmAAEkJwABJCgAASQpAAEkKgABJCwAASQuAAEkLwABJDAAASQyAAEkMwABJHIAASR0AAEkdgABJHgAASR7AAEkfAABJH0AASR+AAEkfwABJIEAASSDAAEkhAABJIUAASSHAAEkiAABJMcAASTJAAEkywABJM0AASTQAAEk0QABJNIAASTTAAEk1AABJNYAASTYAAEk2QABJNoAASTcAAEk3QABJRwAASUeAAElIAABJSIAASUlAAElJgABJScAASUoAAElKQABJSsAASUtAAElLgABJS8AASUxAAElMgABJX0AASWgAAElwAABJeAAASXiAAEl5AABJeYAASXoAAEl6wABJewAASXtAAEl8AABJfEAASXzAAEl9AABJfYAASX5AAEl+gABJfsAASX+AAEl/wABJgQAASYRAAEmFgABJhgAASYaAAEmHwABJiIAASYlAAEmJwABJkwAASZwAAEmlwABJrsAASa+AAEmwAABJsIAASbEAAEmxgABJsgAASbJAAEmzAABJtkAASbqAAEm7AABJu4AASbwAAEm8gABJvQAASb2AAEm+AABJvoAAScLAAEnDgABJxEAAScUAAEnFwABJxoAAScdAAEnIAABJyMAASclAAEnZAABJ2YAASdoAAEnagABJ20AASduAAEnbwABJ3AAASdxAAEncwABJ3UAASd2AAEndwABJ3kAASd6AAEnuQABJ7sAASe9AAEnvwABJ8IAASfDAAEnxAABJ8UAASfGAAEnyAABJ8oAASfLAAEnzAABJ84AASfPAAEoDgABKBAAASgTAAEoFQABKBgAASgZAAEoGgABKBsAASgcAAEoHgABKCAAASghAAEoIgABKCQAASglAAEoMgABKDMAASg0AAEoNgABKHUAASh3AAEoeQABKHsAASh+AAEofwABKIAAASiBAAEoggABKIQAASiGAAEohwABKIgAASiKAAEoiwABKMoAASjMAAEozgABKNAAASjTAAEo1AABKNUAASjWAAEo1wABKNkAASjbAAEo3AABKN0AASjfAAEo4AABKR8AASkhAAEpIwABKSUAASkoAAEpKQABKSoAASkrAAEpLAABKS4AASkwAAEpMQABKTIAASk0AAEpNQABKXQAASl2AAEpeAABKXoAASl9AAEpfgABKX8AASmAAAEpgQABKYMAASmFAAEphgABKYcAASmJAAEpigABKckAASnLAAEpzQABKc8AASnSAAEp0wABKdQAASnVAAEp1gABKdgAASnaAAEp2wABKdwAASneAAEp3wABKgQAASooAAEqTwABKnMAASp2AAEqeAABKnoAASp8AAEqfgABKoAAASqBAAEqhAABKpEAASqgAAEqogABKqQAASqmAAEqqAABKqoAASqsAAEqrgABKr0AASrAAAEqwwABKsYAASrJAAEqzAABKs8AASrSAAEq1AABKxMAASsVAAErFwABKxkAASscAAErHQABKx4AASsfAAErIAABKyIAASskAAErJQABKyYAASsoAAErKQABK2gAAStqAAErbAABK24AAStxAAErcgABK3MAASt0AAErdQABK3cAASt5AAEregABK3sAASt9AAErfgABK70AASu/AAErwQABK8MAASvGAAErxwABK8gAASvJAAErygABK8wAASvOAAErzwABK9AAASvSAAEr0wABLBIAASwUAAEsFgABLBgAASwbAAEsHAABLB0AASweAAEsHwABLCEAASwjAAEsJAABLCUAASwnAAEsKAABLGcAASxpAAEsawABLG0AASxwAAEscQABLHIAASxzAAEsdAABLHYAASx4AAEseQABLHoAASx8AAEsfQABLLwAASy+AAEswAABLMIAASzFAAEsxgABLMcAASzIAAEsyQABLMsAASzNAAEszgABLM8AASzRAAEs0gABLREAAS0TAAEtFQABLRcAAS0aAAEtGwABLRwAAS0dAAEtHgABLSAAAS0iAAEtIwABLSQAAS0mAAEtJwABLXIAAS2VAAEttQABLdUAAS3XAAEt2QABLdsAAS3dAAEt4AABLeEAAS3iAAEt5QABLeYAAS3oAAEt6QABLesAAS3uAAEt7wABLfAAAS3zAAEt9AABLfkAAS4GAAEuCwABLg0AAS4PAAEuFAABLhcAAS4aAAEuHAABLkEAAS5lAAEujAABLrAAAS6zAAEutQABLrcAAS65AAEuuwABLr0AAS6+AAEuwQABLs4AAS7fAAEu4QABLuMAAS7lAAEu5wABLukAAS7rAAEu7QABLu8AAS8AAAEvAwABLwYAAS8JAAEvDAABLw8AAS8SAAEvFQABLxgAAS8aAAEvWQABL1sAAS9dAAEvXwABL2IAAS9jAAEvZAABL2UAAS9mAAEvaAABL2oAAS9rAAEvbAABL24AAS9vAAEvrgABL7AAAS+yAAEvtAABL7cAAS+4AAEvuQABL7oAAS+7AAEvvQABL78AAS/AAAEvwQABL8MAAS/EAAEwAwABMAUAATAIAAEwCgABMA0AATAOAAEwDwABMBAAATARAAEwEwABMBUAATAWAAEwFwABMBkAATAaAAEwJwABMCgAATApAAEwKwABMGoAATBsAAEwbgABMHAAATBzAAEwdAABMHUAATB2AAEwdwABMHkAATB7AAEwfAABMH0AATB/AAEwgAABML8AATDBAAEwwwABMMUAATDIAAEwyQABMMoAATDLAAEwzAABMM4AATDQAAEw0QABMNIAATDUAAEw1QABMRQAATEWAAExGAABMRoAATEdAAExHgABMR8AATEgAAExIQABMSMAATElAAExJgABMScAATEpAAExKgABMWkAATFrAAExbQABMW8AATFyAAExcwABMXQAATF1AAExdgABMXgAATF6AAExewABMXwAATF+AAExfwABMb4AATHAAAExwgABMcQAATHHAAExyAABMckAATHKAAExywABMc0AATHPAAEx0AABMdEAATHTAAEx1AABMfkAATIdAAEyRAABMmgAATJrAAEybQABMm8AATJxAAEycwABMnUAATJ2AAEyeQABMoYAATKVAAEylwABMpkAATKbAAEynQABMp8AATKhAAEyowABMrIAATK1AAEyuAABMrsAATK+AAEywQABMsQAATLHAAEyyQABMwgAATMKAAEzDAABMw4AATMRAAEzEgABMxMAATMUAAEzFQABMxcAATMZAAEzGgABMxsAATMdAAEzHgABM10AATNfAAEzYQABM2MAATNmAAEzZwABM2gAATNpAAEzagABM2wAATNuAAEzbwABM3AAATNyAAEzcwABM7IAATO0AAEztgABM7gAATO7AAEzvAABM70AATO+AAEzvwABM8EAATPDAAEzxAABM8UAATPHAAEzyAABNAcAATQJAAE0CwABNA0AATQQAAE0EQABNBIAATQTAAE0FAABNBYAATQYAAE0GQABNBoAATQcAAE0HQABNFwAATReAAE0YAABNGIAATRlAAE0ZgABNGcAATRoAAE0aQABNGsAATRtAAE0bgABNG8AATRxAAE0cgABNLEAATSzAAE0tQABNLcAATS6AAE0uwABNLwAATS9AAE0vgABNMAAATTCAAE0wwABNMQAATTGAAE0xwABNQYAATUIAAE1CgABNQwAATUPAAE1EAABNREAATUSAAE1EwABNRUAATUXAAE1GAABNRkAATUbAAE1HAABNWcAATWKAAE1qgABNcoAATXMAAE1zgABNdAAATXSAAE11QABNdYAATXXAAE12gABNdsAATXdAAE13gABNeAAATXjAAE15AABNeUAATXoAAE16QABNfIAATX/AAE2BAABNgYAATYIAAE2DQABNhAAATYTAAE2FQABNjoAATZeAAE2hQABNqkAATasAAE2rgABNrAAATayAAE2tAABNrYAATa3AAE2ugABNscAATbYAAE22gABNtwAATbeAAE24AABNuIAATbkAAE25gABNugAATb5AAE2/AABNv8AATcCAAE3BQABNwgAATcLAAE3DgABNxEAATcTAAE3UgABN1QAATdWAAE3WAABN1sAATdcAAE3XQABN14AATdfAAE3YQABN2MAATdkAAE3ZQABN2cAATdoAAE3pwABN6kAATerAAE3rQABN7AAATexAAE3sgABN7MAATe0AAE3tgABN7gAATe5AAE3ugABN7wAATe9AAE3/AABN/4AATgBAAE4AwABOAYAATgHAAE4CAABOAkAATgKAAE4DAABOA4AATgPAAE4EAABOBIAATgTAAE4IAABOCEAATgiAAE4JAABOGMAAThlAAE4ZwABOGkAAThsAAE4bQABOG4AAThvAAE4cAABOHIAATh0AAE4dQABOHYAATh4AAE4eQABOLgAATi6AAE4vAABOL4AATjBAAE4wgABOMMAATjEAAE4xQABOMcAATjJAAE4ygABOMsAATjNAAE4zgABOQ0AATkPAAE5EQABORMAATkWAAE5FwABORgAATkZAAE5GgABORwAATkeAAE5HwABOSAAATkiAAE5IwABOWIAATlkAAE5ZgABOWgAATlrAAE5bAABOW0AATluAAE5bwABOXEAATlzAAE5dAABOXUAATl3AAE5eAABObcAATm5AAE5uwABOb0AATnAAAE5wQABOcIAATnDAAE5xAABOcYAATnIAAE5yQABOcoAATnMAAE5zQABOfIAAToWAAE6PQABOmEAATpkAAE6ZgABOmgAATpqAAE6bAABOm4AATpvAAE6cgABOn8AATqOAAE6kAABOpIAATqUAAE6lgABOpgAATqaAAE6nAABOqsAATquAAE6sQABOrQAATq3AAE6ugABOr0AATrAAAE6wgABOwEAATsDAAE7BQABOwcAATsKAAE7CwABOwwAATsNAAE7DgABOxAAATsSAAE7EwABOxQAATsWAAE7FwABO1YAATtYAAE7WgABO1wAATtfAAE7YAABO2EAATtiAAE7YwABO2UAATtnAAE7aAABO2kAATtrAAE7bAABO6sAATutAAE7rwABO7EAATu0AAE7tQABO7YAATu3AAE7uAABO7oAATu8AAE7vQABO74AATvAAAE7wQABPAAAATwCAAE8BQABPAcAATwKAAE8CwABPAwAATwNAAE8DgABPBAAATwSAAE8EwABPBQAATwWAAE8FwABPFYAATxYAAE8WgABPFwAATxfAAE8YAABPGEAATxiAAE8YwABPGUAATxnAAE8aAABPGkAATxrAAE8bAABPKsAATytAAE8rwABPLEAATy0AAE8tQABPLYAATy3AAE8uAABPLoAATy8AAE8vQABPL4AATzAAAE8wQABPQAAAT0CAAE9BAABPQYAAT0JAAE9CgABPQsAAT0MAAE9DQABPQ8AAT0RAAE9EgABPRMAAT0VAAE9FgABPWEAAT2EAAE9pAABPcQAAT3GAAE9yAABPcoAAT3MAAE9zwABPdAAAT3RAAE91AABPdUAAT3XAAE92AABPdsAAT3eAAE93wABPeAAAT3jAAE95AABPekAAT32AAE9+wABPf0AAT3/AAE+BAABPgcAAT4KAAE+DAABPjEAAT5VAAE+fAABPqAAAT6jAAE+pQABPqcAAT6pAAE+qwABPq0AAT6uAAE+sQABPr4AAT7PAAE+0QABPtMAAT7VAAE+1wABPtkAAT7bAAE+3QABPt8AAT7wAAE+8wABPvYAAT75AAE+/AABPv8AAT8CAAE/BQABPwgAAT8KAAE/SQABP0sAAT9NAAE/TwABP1IAAT9TAAE/VAABP1UAAT9WAAE/WAABP1oAAT9bAAE/XAABP14AAT9fAAE/ngABP6AAAT+iAAE/pAABP6cAAT+oAAE/qQABP6oAAT+rAAE/rQABP68AAT+wAAE/sQABP7M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AAVAHAAFQCQABUC4AAVBSAAFQeQABUJ0AAVCgAAFQogABUKQAAVCmAAFQqAABUKoAAVCrAAFQrgABULsAAVDMAAFQzgABUNAAAVDSAAFQ1AABUNYAAVDYAAFQ2gABUNwAAVDtAAFQ8AABUPMAAVD2AAFQ+QABUPwAAVD/AAFRAgABUQUAAVEHAAFRRgABUUgAAVFKAAFRTAABUU8AAVFQAAFRUQABUVIAAVFTAAFRVQABUVcAAVFYAAFRWQABUVsAAVFcAAFRmwABUZ0AAVGfAAFRoQABUaQAAVGlAAFRpgABUacAAVGoAAFRqgABUawAAVGtAAFRrgABUbAAAVGxAAFR8AABUfIAAVH1AAFR9wABUfoAAVH7AAFR/AABUf0AAVH+AAFSAAABUgIAAVIDAAFSBAABUgYAAVIHAAFSFAABUhUAAVIWAAFSGAABUlcAAVJZAAFSWwABUl0AAVJgAAFSYQABUmIAAVJjAAFSZAABUmYAAVJoAAFSaQABUmoAAVJsAAFSbQABUqwAAVKuAAFSsAABUrIAAVK1AAFStgABUrcAAVK4AAFSuQABUrsAAVK9AAFSvgABUr8AAVLBAAFSwgABUwEAAVMDAAFTBQABUwcAAVMKAAFTCwABUwwAAVMNAAFTDgABUxAAAVMSAAFTEwABUxQAAVMWAAFTFwABU1YAAVNYAAFTWgABU1wAAVNfAAFTYAABU2EAAVNiAAFTYwABU2UAAVNnAAFTaAABU2kAAVNrAAFTbAABU6sAAVOtAAFTrwABU7EAAVO0AAFTtQABU7YAAVO3AAFTuAABU7oAAVO8AAFTvQABU74AAVPAAAFTwQABU+YAAVQKAAFUMQABVFUAAVRYAAFUWgABVFwAAVReAAFUYAABVGIAAVRjAAFUZgABVHMAAVSCAAFUhAABVIYAAVSIAAFUigABVIwAAVSOAAFUkAABVJ8AAVSiAAFUpQABVKgAAVSrAAFUrgABVLEAAVS0AAFUtgABVPUAAVT3AAFU+QABVPsAAVT+AAFU/wABVQAAAVUBAAFVAgABVQQAAVUGAAFVBwABVQgAAVUKAAFVCwABVUoAAVVMAAFVTgABVVAAAVVTAAFVVAABVVUAAVVWAAFVVwABVVkAAVVbAAFVXAABVV0AAVVfAAFVYAABVZ8AAVWhAAFVowABVaUAAVWoAAFVqQABVaoAAVWrAAFVrAABVa4AAVWwAAFVsQABVbIAAVW0AAFVtQABVfQAAVX2AAFV+AABVfoAAVX9AAFV/gABVf8AAVYAAAFWAQABVgMAAVYFAAFWBgABVgcAAVYJAAFWCgABVkkAAVZLAAFWTQABVk8AAVZSAAFWUwABVlQAAVZVAAFWVgABVlgAAVZaAAFWWwABVlwAAVZeAAFWXwABVp4AAVagAAFWogABVqQAAVanAAFWqAABVqkAAVaqAAFWqwABVq0AAVavAAFWsAABVrEAAVazAAFWtAABVvMAAVb1AAFW9wABVvkAAVb8AAFW/QABVv4AAVb/AAFXAAABVwIAAVcEAAFXBQABVwYAAVcIAAFXCQABVxIAAVcTAAFXFQABV1gAAVd8AAFXoAABV8MAAVfqAAFYCgABWDEAAVhYAAFYeAABWJwAAVjAAAFYwgABWMUAAVjHAAFYyQABWMsAAVjOAAFY0QABWNMAAVjVAAFY2AABWNoAAVjcAAFY3wABWOIAAVjjAAFY6AABWPUAAVj4AAFY+gABWP0AAVkAAAFZAgABWScAAVlLAAFZcgABWZYAAVmZAAFZmwABWZ0AAVmfAAFZoQABWaMAAVmkAAFZpwABWbQAAVnHAAFZyQABWcsAAVnNAAFZzwABWdEAAVnTAAFZ1QABWdcAAVnZAAFZ7AABWe8AAVnyAAFZ9QABWfgAAVn7AAFZ/gABWgEAAVoEAAFaBwABWgkAAVpIAAFaSgABWk0AAVpPAAFaUgABWlMAAVpUAAFaVQABWlYAAVpYAAFaWgABWlsAAVpcAAFaXgABWl8AAVpoAAFaaQABWmsAAVqqAAFarAABWq4AAVqwAAFaswABWrQAAVq1AAFatgABWrcAAVq5AAFauwABWrwAAVq9AAFavwABWsAAAVr/AAFbAQABWwQAAVsGAAFbCQABWwoAAVsLAAFbDAABWw0AAVsPAAFbEQABWxIAAVsTAAFbFQABWxYAAVsfAAFbIAABWyIAAVthAAFbYwABW2UAAVtnAAFbagABW2sAAVtsAAFbbQABW24AAVtwAAFbcgABW3MAAVt0AAFbdgABW3cAAVu2AAFbuAABW7sAAVu9AAFbwAABW8EAAVvCAAFbwwABW8QAAVvGAAFbyAABW8kAAVvKAAFbzAABW80AAVvWAAFb1wABW9kAAVwYAAFcGgABXBwAAVweAAFcIQABXCIAAVwjAAFcJAABXCUAAVwnAAFcKQABXCoAAVwrAAFcLQABXC4AAVxtAAFcbwABXHIAAVx0AAFcdwABXHgAAVx5AAFcegABXHsAAVx9AAFcfwABXIAAAVyBAAFcgwABXIQAAVyRAAFckgABXJMAAVyVAAFc1AABXNYAAVzYAAFc2gABXN0AAVzeAAFc3wABXOAAAVzhAAFc4wABXOUAAVzmAAFc5wABXOkAAVzqAAFdKQABXSsAAV0uAAFdMAABXTMAAV00AAFdNQABXTYAAV03AAFdOQABXTsAAV08AAFdPQABXT8AAV1AAAFdVAABXWEAAV1mAAFdaAABXWsAAV1wAAFdcwABXXYAAV14AAFdfAABXccAAV3qAAFeCgABXioAAV4sAAFeLgABXjAAAV4yAAFeNQABXjYAAV43AAFeOgABXjsAAV49AAFePgABXkAAAV5CAAFeQwABXkQAAV5HAAFeSAABXk0AAV5aAAFeXwABXmEAAV5jAAFeaAABXmsAAV5uAAFecAABXpUAAV65AAFe4AABXwQAAV8HAAFfCQABXwsAAV8NAAFfDwABXxEAAV8SAAFfFQABXyIAAV8zAAFfNQABXzcAAV85AAFfOwABXz0AAV8/AAFfQQABX0MAAV9UAAFfVwABX1oAAV9dAAFfYAABX2MAAV9mAAFfaQABX2wAAV9uAAFfrQABX68AAV+xAAFfswABX7YAAV+3AAFfuAABX7kAAV+6AAFfvAABX74AAV+/AAFfwAABX8IAAV/DAAFgAgABYAQAAWAGAAFgCAABYAsAAWAMAAFgDQABYA4AAWAPAAFgEQABYBMAAWAUAAFgFQABYBcAAWAYAAFgVwABYFkAAWBcAAFgXgABYGEAAWBiAAFgYwABYGQAAWBlAAFgZwABYGkAAWBqAAFgawABYG0AAWBuAAFgewABYHwAAWB9AAFgfwABYL4AAWDAAAFgwgABYMQAAWDHAAFgyAABYMkAAWDKAAFgywABYM0AAWDPAAFg0AABYNEAAWDTAAFg1AABYRMAAWEVAAFhFwABYRkAAWEcAAFhHQABYR4AAWEfAAFhIAABYSIAAWEkAAFhJQABYSYAAWEoAAFhKQABYWgAAWFqAAFhbAABYW4AAWFxAAFhcgABYXMAAWF0AAFhdQABYXcAAWF5AAFhegABYXsAAWF9AAFhfgABYb0AAWG/AAFhwQABYcMAAWHGAAFhxwABYcgAAWHJAAFhygABYcwAAWHOAAFhzwABYdAAAWHSAAFh0wABYhIAAWIUAAFiFgABYhgAAWIbAAFiHAABYh0AAWIeAAFiHwABYiEAAWIjAAFiJAABYiUAAWInAAFiKAABYk0AAWJxAAFimAABYrwAAWK/AAFiwQABYsMAAWLFAAFixwABYskAAWLKAAFizQABYtoAAWLpAAFi6wABYu0AAWLvAAFi8QABYvMAAWL1AAFi9wABYwYAAWMJAAFjDAABYw8AAWMSAAFjFQABYxgAAWMbAAFjHQABY1wAAWNeAAFjYAABY2IAAWNlAAFjZgABY2cAAWNoAAFjaQABY2sAAWNtAAFjbgABY28AAWNxAAFjcgABY7EAAWOzAAFjtQABY7cAAWO6AAFjuwABY7wAAWO9AAFjvgABY8AAAWPCAAFjwwABY8QAAWPGAAFjxwABZAYAAWQIAAFkCgABZAwAAWQPAAFkEAABZBEAAWQSAAFkEwABZBUAAWQXAAFkGAABZBkAAWQbAAFkHAABZFsAAWRdAAFkXwABZGEAAWRkAAFkZQABZGYAAWRnAAFkaAABZGoAAWRsAAFkbQABZG4AAWRwAAFkcQABZLAAAWSyAAFktAABZLYAAWS5AAFkugABZLsAAWS8AAFkvQABZL8AAWTBAAFkwgABZMMAAWTFAAFkxgABZQUAAWUHAAFlCQABZQsAAWUOAAFlDwABZRAAAWURAAFlEgABZRQAAWUWAAFlFwABZRgAAWUaAAFlGwABZVoAAWVcAAFlXgABZWAAAWVjAAFlZAABZWUAAWVmAAFlZwABZWkAAWVrAAFlbAABZW0AAWVvAAFlcAABZbsAAWXeAAFl/gABZh4AAWYgAAFmIgABZiQAAWYmAAFmKQABZioAAWYrAAFmLgABZi8AAWYxAAFmMgABZjQAAWY3AAFmOAABZjkAAWY8AAFmPQABZkYAAWZTAAFmWAABZloAAWZcAAFmYQABZmQAAWZnAAFmaQABZo4AAWayAAFm2QABZv0AAWcAAAFnAgABZwQAAWcGAAFnCAABZwoAAWcLAAFnDgABZxsAAWcsAAFnLgABZzAAAWcyAAFnNAABZzYAAWc4AAFnOgABZzwAAWdNAAFnUAABZ1MAAWdWAAFnWQABZ1wAAWdfAAFnYgABZ2UAAWdnAAFnpgABZ6gAAWeqAAFnrAABZ68AAWewAAFnsQABZ7IAAWezAAFntQABZ7cAAWe4AAFnuQABZ7sAAWe8AAFn+wABZ/0AAWf/AAFoAQABaAQAAWgFAAFoBgABaAcAAWgIAAFoCgABaAwAAWgNAAFoDgABaBAAAWgRAAFoUAABaFIAAWhVAAFoVwABaFoAAWhbAAFoXAABaF0AAWheAAFoYAABaGIAAWhjAAFoZAABaGYAAWhnAAFodAABaHUAAWh2AAFoeAABaLcAAWi5AAFouwABaL0AAWjAAAFowQABaMIAAWjDAAFoxAABaMYAAWjIAAFoyQABaMoAAWjMAAFozQABaQwAAWkOAAFpEAABaRIAAWkVAAFpFgABaRcAAWkYAAFpGQABaRsAAWkdAAFpHgABaR8AAWkhAAFpIgABaWEAAWljAAFpZQABaWcAAWlqAAFpawABaWwAAWltAAFpbgABaXAAAWlyAAFpcwABaXQAAWl2AAFpdwABabYAAWm4AAFpugABabwAAWm/AAFpwAABacEAAWnCAAFpwwABacUAAWnHAAFpyAABackAAWnLAAFpzAABagsAAWoNAAFqDwABahEAAWoUAAFqFQABahYAAWoXAAFqGAABahoAAWocAAFqHQABah4AAWogAAFqIQABakYAAWpqAAFqkQABarUAAWq4AAFqugABarwAAWq+AAFqwAABasIAAWrDAAFqxgABatMAAWriAAFq5AABauYAAWroAAFq6gABauwAAWruAAFq8AABav8AAWsCAAFrBQABawgAAWsLAAFrDgABaxEAAWsUAAFrFgABa1UAAWtXAAFrWQABa1sAAWteAAFrXwABa2AAAWthAAFrYgABa2QAAWtmAAFrZwABa2gAAWtqAAFrawABa6oAAWusAAFrrgABa7AAAWuzAAFrtAABa7UAAWu2AAFrtwABa7kAAWu7AAFrvAABa70AAWu/AAFrwAABa/8AAWwBAAFsAwABbAUAAWwIAAFsCQABbAoAAWwLAAFsDAABbA4AAWwQAAFsEQABbBIAAWwUAAFsFQABbFQAAWxWAAFsWQABbFsAAWxeAAFsXwABbGAAAWxhAAFsYgABbGQAAWxmAAFsZwABbGgAAWxqAAFsawABbG4AAWytAAFsrwABbLEAAWyzAAFstgABbLcAAWy4AAFsuQABbLoAAWy8AAFsvgABbL8AAWzAAAFswgABbMMAAW0CAAFtBAABbQYAAW0IAAFtCwABbQwAAW0NAAFtDgABbQ8AAW0RAAFtEwABbRQAAW0VAAFtFwABbRgAAW1XAAFtWQABbVsAAW1dAAFtYAABbWEAAW1iAAFtYwABbWQAAW1mAAFtaAABbWkAAW1qAAFtbAABbW0AAW12AAFtdwABbXkAAW28AAFt4AABbgQAAW4nAAFuTgABbm4AAW6VAAFuvAABbtwAAW8AAAFvJAABbyYAAW8pAAFvKwABby0AAW8vAAFvMgABbzUAAW83AAFvOQABbzwAAW8+AAFvQAABb0MAAW9GAAFvRwABb0wAAW9ZAAFvXAABb14AAW9hAAFvZAABb2YAAW+LAAFvrwABb9YAAW/6AAFv/QABb/8AAXABAAFwAwABcAUAAXAHAAFwCAABcAsAAXAYAAFwKwABcC0AAXAvAAFwMQABcDMAAXA1AAFwNwABcDkAAXA7AAFwPQABcFAAAXBTAAFwVgABcFkAAXBcAAFwXwABcGIAAXBlAAFwaAABcGsAAXBtAAFwrAABcK4AAXCxAAFwswABcLYAAXC3AAFwuAABcLkAAXC6AAFwvAABcL4AAXC/AAFwwAABcMIAAXDDAAFwzAABcM0AAXDPAAFxDgABcRAAAXESAAFxFAABcRcAAXEYAAFxGQABcRoAAXEbAAFxHQABcR8AAXEgAAFxIQABcSMAAXEkAAFxYwABcWUAAXFoAAFxagABcW0AAXFuAAFxbwABcXAAAXFxAAFxcwABcXUAAXF2AAFxdwABcXkAAXF6AAFxgwABcYQAAXGGAAFxxQABcccAAXHJAAFxywABcc4AAXHPAAFx0AABcdEAAXHSAAFx1AABcdYAAXHXAAFx2AABcdoAAXHbAAFyGgABchwAAXIfAAFyIQABciQAAXIlAAFyJgABcicAAXIoAAFyKgABciwAAXItAAFyLgABcjAAAXIxAAFyOgABcjsAAXI9AAFyfAABcn4AAXKAAAFyggABcoUAAXKGAAFyhwABcogAAXKJAAFyiwABco0AAXKOAAFyjwABcpEAAXKSAAFy0QABctMAAXLWAAFy2AABctsAAXLcAAFy3QABct4AAXLfAAFy4QABcuMAAXLkAAFy5QABcucAAXLoAAFy9QABcvYAAXL3AAFy+QABczgAAXM6AAFzPAABcz4AAXNBAAFzQgABc0MAAXNEAAFzRQABc0cAAXNJAAFzSgABc0sAAXNNAAFzTgABc40AAXOPAAFzkgABc5QAAXOXAAFzmAABc5kAAXOaAAFzmwABc50AAXOfAAFzoAABc6EAAXOjAAFzpAABc7IAAXO/AAFzxAABc8cAAXPKAAFzzwABc9IAAXPVAAFz1wABc9wAAXPnAAF0MgABdFUAAXR1AAF0lQABdJcAAXSZAAF0mwABdJ0AAXSgAAF0oQABdKIAAXSlAAF0pgABdKgAAXSpAAF0qwABdK4AAXSvAAF0sAABdLMAAXS0AAF0vQABdMoAAXTPAAF00QABdNMAAXTYAAF02wABdN4AAXTgAAF1BQABdSkAAXVQAAF1dAABdXcAAXV5AAF1ewABdX0AAXV/AAF1gQABdYIAAXWFAAF1kgABdaMAAXWlAAF1pwABdakAAXWrAAF1rQABda8AAXWxAAF1swABdcQAAXXHAAF1ygABdc0AAXXQAAF10wABddYAAXXZAAF13AABdd4AAXYdAAF2HwABdiEAAXYjAAF2JgABdicAAXYoAAF2KQABdioAAXYsAAF2LgABdi8AAXYwAAF2MgABdjMAAXZyAAF2dAABdnYAAXZ4AAF2ewABdnwAAXZ9AAF2fgABdn8AAXaBAAF2gwABdoQAAXaFAAF2hwABdogAAXbHAAF2yQABdswAAXbOAAF20QABdtIAAXbTAAF21AABdtUAAXbXAAF22QABdtoAAXbbAAF23QABdt4AAXbrAAF27AABdu0AAXbvAAF3LgABdzAAAXcyAAF3NAABdzcAAXc4AAF3OQABdzoAAXc7AAF3PQABdz8AAXdAAAF3QQABd0MAAXdEAAF3gwABd4UAAXeHAAF3iQABd4wAAXeNAAF3jgABd48AAXeQAAF3kgABd5QAAXeVAAF3lgABd5gAAXeZAAF32AABd9oAAXfcAAF33gABd+EAAXfiAAF34wABd+QAAXflAAF35wABd+kAAXfqAAF36wABd+0AAXfuAAF4LQABeC8AAXgxAAF4MwABeDYAAXg3AAF4OAABeDkAAXg6AAF4PAABeD4AAXg/AAF4QAABeEIAAXhDAAF4ggABeIQAAXiGAAF4iAABeIsAAXiMAAF4jQABeI4AAXiPAAF4kQABeJMAAXiUAAF4lQABeJcAAXiYAAF4vQABeOEAAXkIAAF5LAABeS8AAXkxAAF5MwABeTUAAXk3AAF5OQABeToAAXk9AAF5SgABeVkAAXlbAAF5XQABeV8AAXlhAAF5YwABeWUAAXlnAAF5dgABeXkAAXl8AAF5fwABeYIAAXmFAAF5iAABeYsAAXmNAAF5zAABec4AAXnQAAF50gABedUAAXnWAAF51wABedgAAXnZAAF52wABed0AAXneAAF53wABeeEAAXniAAF6IQABeiMAAXolAAF6JwABeioAAXorAAF6LAABei0AAXouAAF6MAABejIAAXozAAF6NAABejYAAXo3AAF6dgABengAAXp6AAF6fAABen8AAXqAAAF6gQABeoIAAXqDAAF6hQABeocAAXqIAAF6iQABeosAAXqMAAF6ywABes0AAXrQAAF60gABetUAAXrWAAF61wABetgAAXrZAAF62wABet0AAXreAAF63wABeuEAAXriAAF7IQABeyMAAXslAAF7JwABeyoAAXsrAAF7LAABey0AAXsuAAF7MAABezIAAXszAAF7NAABezYAAXs3AAF7dgABe3gAAXt6AAF7fAABe38AAXuAAAF7gQABe4IAAXuDAAF7hQABe4cAAXuIAAF7iQABe4sAAXuMAAF7ywABe80AAXvPAAF70QABe9QAAXvVAAF71gABe9cAAXvYAAF72gABe9wAAXvdAAF73gABe+AAAXvhAAF8LAABfE8AAXxvAAF8jwABfJEAAXyTAAF8lQABfJcAAXyaAAF8mwABfJwAAXyfAAF8oAABfKIAAXyjAAF8pQABfKgAAXypAAF8qgABfK0AAXyuAAF8swABfMAAAXzFAAF8xwABfMkAAXzOAAF80QABfNQAAXzWAAF8+wABfR8AAX1GAAF9agABfW0AAX1vAAF9cQABfXMAAX11AAF9dwABfXgAAX17AAF9iAABfZkAAX2bAAF9nQABfZ8AAX2hAAF9owABfaUAAX2nAAF9qQABfboAAX29AAF9wAABfcMAAX3GAAF9yQABfcwAAX3PAAF90gABfdQAAX4TAAF+FQABfhcAAX4ZAAF+HAABfh0AAX4eAAF+HwABfiAAAX4iAAF+JAABfiUAAX4mAAF+KAABfikAAX5oAAF+agABfmwAAX5uAAF+cQABfnIAAX5zAAF+dAABfnUAAX53AAF+eQABfnoAAX57AAF+fQABfn4AAX69AAF+vwABfsIAAX7EAAF+xwABfsgAAX7JAAF+ygABfssAAX7NAAF+zwABftAAAX7RAAF+0wABftQAAX7hAAF+4gABfuMAAX7lAAF/JAABfyYAAX8oAAF/KgABfy0AAX8uAAF/LwABfzAAAX8xAAF/MwABfzUAAX82AAF/NwABfzkAAX86AAF/eQABf3sAAX99AAF/fwABf4IAAX+DAAF/hAABf4UAAX+GAAF/iAABf4oAAX+LAAF/jAABf44AAX+PAAF/zgABf9AAAX/SAAF/1AABf9cAAX/YAAF/2QABf9oAAX/bAAF/3QABf98AAX/gAAF/4QABf+MAAX/kAAGAIwABgCUAAYAnAAGAKQABgCwAAYAtAAGALgABgC8AAYAwAAGAMgABgDQAAYA1AAGANgABgDgAAYA5AAGAeAABgHoAAYB8AAGAfgABgIEAAYCCAAGAgwABgIQAAYCFAAGAhwABgIkAAYCKAAGAiwABgI0AAYCOAAGAswABgNcAAYD+AAGBIgABgSUAAYEnAAGBKQABgSsAAYEtAAGBLwABgTAAAYEzAAGBQAABgU8AAYFRAAGBUwABgVUAAYFXAAGBWQABgVsAAYFdAAGBbAABgW8AAYFyAAGBdQABgXgAAYF7AAGBfgABgYEAAYGDAAGBwgABgcQAAYHGAAGByAABgcsAAYHMAAGBzQABgc4AAYHPAAGB0QABgdMAAYHUAAGB1QABgdcAAYHYAAGCFwABghkAAYIbAAGCHQABgiAAAYIhAAGCIgABgiMAAYIkAAGCJgABgigAAYIpAAGCKgABgiwAAYItAAGCbAABgm4AAYJwAAGCcgABgnUAAYJ2AAGCdwABgngAAYJ5AAGCewABgn0AAYJ+AAGCfwABgoEAAYKCAAGCwQABgsMAAYLFAAGCxwABgsoAAYLLAAGCzAABgs0AAYLOAAGC0AABgtIAAYLTAAGC1AABgtYAAYLXAAGDFgABgxgAAYMaAAGDHAABgx8AAYMgAAGDIQABgyIAAYMjAAGDJQABgycAAYMoAAGDKQABgysAAYMsAAGDawABg20AAYNvAAGDcQABg3QAAYN1AAGDdgABg3cAAYN4AAGDegABg3wAAYN9AAGDfgABg4AAAYOBAAGDwAABg8IAAYPEAAGDxgABg8kAAYPKAAGDywABg8wAAYPNAAGDzwABg9EAAYPSAAGD0wABg9UAAYPWAAGD3wABg+AAAYPiAAGEJQABhEkAAYRtAAGEkAABhLcAAYTXAAGE/gABhSUAAYVFAAGFaQABhY0AAYWPAAGFkgABhZQAAYWWAAGFmAABhZsAAYWeAAGFoAABhaIAAYWlAAGFpwABhakAAYWsAAGFrwABhbAAAYW5AAGFxgABhckAAYXLAAGFzgABhdEAAYXTAAGF+AABhhwAAYZDAAGGZwABhmoAAYZsAAGGbgABhnAAAYZyAAGGdAABhnUAAYZ4AAGGhQABhpgAAYaaAAGGnAABhp4AAYagAAGGogABhqQAAYamAAGGqAABhqoAAYa9AAGGwAABhsMAAYbGAAGGyQABhswAAYbPAAGG0gABhtUAAYbYAAGG2gABhxkAAYcbAAGHHgABhyAAAYcjAAGHJAABhyUAAYcmAAGHJwABhykAAYcrAAGHLAABhy0AAYcvAAGHMAABhzkAAYc6AAGHPAABh3sAAYd9AAGHfwABh4EAAYeEAAGHhQABh4YAAYeHAAGHiAABh4oAAYeMAAGHjQABh44AAYeQAAGHkQABh9AAAYfSAAGH1QABh9cAAYfaAAGH2wABh9wAAYfdAAGH3gABh+AAAYfiAAGH4wABh+QAAYfmAAGH5wABh/AAAYfxAAGH8wABiDIAAYg0AAGINgABiDgAAYg7AAGIPAABiD0AAYg+AAGIPwABiEEAAYhDAAGIRAABiEUAAYhHAAGISAABiIcAAYiJAAGIjAABiI4AAYiRAAGIkgABiJMAAYiUAAGIlQABiJcAAYiZAAGImgABiJsAAYidAAGIngABiKcAAYioAAGIqgABiOkAAYjrAAGI7QABiO8AAYjyAAGI8wABiPQAAYj1AAGI9gABiPgAAYj6AAGI+wABiPwAAYj+AAGI/wABiT4AAYlAAAGJQwABiUUAAYlIAAGJSQABiUoAAYlLAAGJTAABiU4AAYlQAAGJUQABiVIAAYlUAAGJVQABiWIAAYljAAGJZAABiWYAAYmlAAGJpwABiakAAYmrAAGJrgABia8AAYmwAAGJsQABibIAAYm0AAGJtgABibcAAYm4AAGJugABibsAAYn6AAGJ/AABif8AAYoBAAGKBAABigUAAYoGAAGKBwABiggAAYoKAAGKDAABig0AAYoOAAGKEAABihEAAYojAAGKMAABijcAAYo6AAGKPQABikAAAYpHAAGKSgABik0AAYpQAAGKUgABil8AAYpqAAGKtQABitgAAYr4AAGLGAABixoAAYscAAGLHgABiyAAAYsjAAGLJAABiyUAAYsoAAGLKQABiysAAYssAAGLLgABizEAAYsyAAGLMwABizYAAYs3AAGLPAABi0kAAYtOAAGLUAABi1IAAYtXAAGLWgABi10AAYtfAAGLhAABi6gAAYvPAAGL8wABi/YAAYv4AAGL+gABi/wAAYv+AAGMAAABjAEAAYwEAAGMEQABjCIAAYwkAAGMJgABjCgAAYwqAAGMLAABjC4AAYwwAAGMMgABjEMAAYxGAAGMSQABjEwAAYxPAAGMUgABjFUAAYxYAAGMWwABjF0AAYycAAGMngABjKAAAYyiAAGMpQABjKYAAYynAAGMqAABjKkAAYyrAAGMrQABjK4AAYyvAAGMsQABjLIAAYzxAAGM8wABjPUAAYz3AAGM+gABjPsAAYz8AAGM/QABjP4AAY0AAAGNAgABjQMAAY0EAAGNBgABjQcAAY1GAAGNSAABjUsAAY1NAAGNUAABjVEAAY1SAAGNUwABjVQAAY1WAAGNWAABjVkAAY1aAAGNXAABjV0AAY1qAAGNawABjWwAAY1uAAGNrQABja8AAY2xAAGNswABjbYAAY23AAGNuAABjbkAAY26AAGNvAABjb4AAY2/AAGNwAABjcIAAY3DAAGOAgABjgQAAY4GAAGOCAABjgsAAY4MAAGODQABjg4AAY4PAAGOEQABjhMAAY4UAAGOFQABjhcAAY4YAAGOVwABjlkAAY5bAAGOXQABjmAAAY5hAAGOYgABjmMAAY5kAAGOZgABjmgAAY5pAAGOagABjmwAAY5tAAGOrAABjq4AAY6wAAGOsgABjrUAAY62AAGOtwABjrgAAY65AAGOuwABjr0AAY6+AAGOvwABjsEAAY7CAAGPAQABjwMAAY8FAAGPBwABjwoAAY8LAAGPDAABjw0AAY8OAAGPEAABjxIAAY8TAAGPFAABjxYAAY8XAAGPPAABj2AAAY+HAAGPqwABj64AAY+wAAGPsgABj7QAAY+2AAGPuAABj7kAAY+8AAGPyQABj9gAAY/aAAGP3AABj94AAY/gAAGP4gABj+QAAY/mAAGP9QABj/gAAY/7AAGP/gABkAEAAZAEAAGQBwABkAoAAZAMAAGQSwABkE0AAZBQAAGQUgABkFUAAZBWAAGQVwABkFgAAZBZAAGQWwABkF0AAZBeAAGQXwABkGEAAZBiAAGQZgABkKUAAZCnAAGQqQABkKsAAZCuAAGQrwABkLAAAZCxAAGQsgABkLQAAZC2AAGQtwABkLgAAZC6AAGQuwABkPoAAZD8AAGQ/gABkQAAAZEDAAGRBAABkQUAAZEGAAGRBwABkQkAAZELAAGRDAABkQ0AAZEPAAGREAABkU8AAZFRAAGRUwABkVUAAZFYAAGRWQABkVoAAZFbAAGRXAABkV4AAZFgAAGRYQABkWIAAZFkAAGRZQABkaQAAZGmAAGRqAABkaoAAZGtAAGRrgABka8AAZGwAAGRsQABkbMAAZG1AAGRtgABkbcAAZG5AAGRugABkfkAAZH7AAGR/QABkf8AAZICAAGSAwABkgQAAZIFAAGSBgABkggAAZIKAAGSCwABkgwAAZIOAAGSDwABkk4AAZJQAAGSUgABklQAAZJXAAGSWAABklkAAZJaAAGSWwABkl0AAZJfAAGSYAABkmEAAZJjAAGSZAABkq8AAZLSAAGS8gABkxIAAZMUAAGTFgABkxgAAZMaAAGTHQABkx4AAZMfAAGTIgABkyMAAZMlAAGTJgABkygAAZMrAAGTLAABky0AAZMwAAGTMQABkzYAAZNDAAGTSAABk0oAAZNMAAGTUQABk1QAAZNXAAGTWQABk34AAZOiAAGTyQABk+0AAZPwAAGT8gABk/QAAZP2AAGT+AABk/oAAZP7AAGT/gABlAsAAZQcAAGUHgABlCAAAZQiAAGUJAABlCYAAZQoAAGUKgABlCwAAZQ9AAGUQAABlEMAAZRGAAGUSQABlEwAAZRPAAGUUgABlFUAAZRXAAGUlgABlJgAAZSaAAGUnAABlJ8AAZSgAAGUoQABlKIAAZSjAAGUpQABlKcAAZSoAAGUqQABlKsAAZSsAAGU6wABlO0AAZTvAAGU8QABlPQAAZT1AAGU9gABlPcAAZT4AAGU+gABlPwAAZT9AAGU/gABlQAAAZUBAAGVQAABlUIAAZVFAAGVRwABlUoAAZVLAAGVTAABlU0AAZVOAAGVUAABlVIAAZVTAAGVVAABlVYAAZVXAAGVZAABlWUAAZVmAAGVaAABlacAAZWpAAGVqwABla0AAZWwAAGVsQABlbIAAZWzAAGVtAABlbYAAZW4AAGVuQABlboAAZW8AAGVvQABlfwAAZX+AAGWAAABlgIAAZYFAAGWBgABlgcAAZYIAAGWCQABlgsAAZYNAAGWDgABlg8AAZYRAAGWEgABllEAAZZTAAGWVQABllcAAZZaAAGWWwABllwAAZZdAAGWXgABlmAAAZZiAAGWYwABlmQAAZZmAAGWZwABlqYAAZaoAAGWqgABlqwAAZavAAGWsAABlrEAAZayAAGWswABlrUAAZa3AAGWuAABlrkAAZa7AAGWvAABlvsAAZb9AAGW/wABlwEAAZcEAAGXBQABlwYAAZcHAAGXCAABlwoAAZcMAAGXDQABlw4AAZcQAAGXEQABlzYAAZdaAAGXgQABl6UAAZeoAAGXqgABl6wAAZeuAAGXsAABl7IAAZezAAGXtgABl8MAAZfSAAGX1AABl9YAAZfYAAGX2gABl9wAAZfeAAGX4AABl+8AAZfyAAGX9QABl/gAAZf7AAGX/gABmAEAAZgEAAGYBgABmEUAAZhHAAGYSQABmEsAAZhOAAGYTwABmFAAAZhRAAGYUgABmFQAAZhWAAGYVwABmFgAAZhaAAGYWwABmJoAAZicAAGYngABmKAAAZijAAGYpAABmKUAAZimAAGYpwABmKkAAZirAAGYrAABmK0AAZivAAGYsAABmO8AAZjxAAGY8wABmPUAAZj4AAGY+QABmPoAAZj7AAGY/AABmP4AAZkAAAGZAQABmQIAAZkEAAGZBQABmUQAAZlGAAGZSAABmUoAAZlNAAGZTgABmU8AAZlQAAGZUQABmVMAAZlVAAGZVgABmVcAAZlZAAGZWgABmZkAAZmbAAGZnQABmZ8AAZmiAAGZowABmaQAAZmlAAGZpgABmagAAZmqAAGZqwABmawAAZmuAAGZrwABme4AAZnwAAGZ8gABmfQAAZn3AAGZ+AABmfkAAZn6AAGZ+wABmf0AAZn/AAGaAAABmgEAAZoDAAGaBAABmkMAAZpFAAGaRwABmkkAAZpMAAGaTQABmk4AAZpPAAGaUAABmlIAAZpUAAGaVQABmlYAAZpYAAGaWQABmqQAAZrHAAGa5wABmwcAAZsJAAGbCwABmw0AAZsPAAGbEgABmxMAAZsUAAGbFwABmxgAAZsaAAGbGwABmx0AAZsgAAGbIQABmyIAAZslAAGbJgABmysAAZs4AAGbPQABmz8AAZtBAAGbRgABm0kAAZtMAAGbTgABm3MAAZuXAAGbvgABm+IAAZvlAAGb5wABm+kAAZvrAAGb7QABm+8AAZvwAAGb8wABnAAAAZwRAAGcEwABnBUAAZwXAAGcGQABnBsAAZwdAAGcHwABnCEAAZwyAAGcNQABnDgAAZw7AAGcPgABnEEAAZxEAAGcRwABnEoAAZxMAAGciwABnI0AAZyPAAGckQABnJQAAZyVAAGclgABnJcAAZyYAAGcmgABnJwAAZydAAGcngABnKAAAZyhAAGc4AABnOIAAZzkAAGc5gABnOkAAZzqAAGc6wABnOwAAZztAAGc7wABnPEAAZzyAAGc8wABnPUAAZz2AAGdNQABnTcAAZ06AAGdPAABnT8AAZ1AAAGdQQABnUIAAZ1DAAGdRQABnUcAAZ1IAAGdSQABnUsAAZ1MAAGdWQABnVoAAZ1bAAGdXQABnZwAAZ2eAAGdoAABnaIAAZ2lAAGdpgABnacAAZ2oAAGdqQABnasAAZ2tAAGdrgABna8AAZ2xAAGdsgABnfEAAZ3zAAGd9QABnfcAAZ36AAGd+wABnfwAAZ39AAGd/gABngAAAZ4CAAGeAwABngQAAZ4GAAGeBwABnkYAAZ5IAAGeSgABnkwAAZ5PAAGeUAABnlEAAZ5SAAGeUwABnlUAAZ5XAAGeWAABnlkAAZ5bAAGeXAABnpsAAZ6dAAGenwABnqEAAZ6kAAGepQABnqYAAZ6nAAGeqAABnqoAAZ6sAAGerQABnq4AAZ6wAAGesQABnvAAAZ7yAAGe9AABnvYAAZ75AAGe+gABnvsAAZ78AAGe/QABnv8AAZ8BAAGfAgABnwMAAZ8FAAGfBgABnysAAZ9PAAGfdgABn5oAAZ+dAAGfnwABn6EAAZ+jAAGfpQABn6cAAZ+oAAGfqwABn7gAAZ/HAAGfyQABn8sAAZ/NAAGfzwABn9EAAZ/TAAGf1QABn+QAAZ/nAAGf6gABn+0AAZ/wAAGf8wABn/YAAZ/5AAGf+wABoDoAAaA8AAGgPgABoEAAAaBDAAGgRAABoEUAAaBGAAGgRwABoEkAAaBLAAGgTAABoE0AAaBPAAGgUAABoI8AAaCRAAGgkwABoJUAAaCYAAGgmQABoJoAAaCbAAGgnAABoJ4AAaCgAAGgoQABoKIAAaCkAAGgpQABoOQAAaDmAAGg6AABoOoAAaDtAAGg7gABoO8AAaDwAAGg8QABoPMAAaD1AAGg9gABoPcAAaD5AAGg+gABoTkAAaE7AAGhPQABoT8AAaFCAAGhQwABoUQAAaFFAAGhRgABoUgAAaFKAAGhSwABoUwAAaFOAAGhTwABoY4AAaGQAAGhkgABoZQAAaGXAAGhmAABoZkAAaGaAAGhmwABoZ0AAaGfAAGhoAABoaEAAaGjAAGhpAABoeMAAaHlAAGh5wABoekAAaHsAAGh7QABoe4AAaHvAAGh8AABofIAAaH0AAGh9QABofYAAaH4AAGh+QABojgAAaI6AAGiPAABoj4AAaJBAAGiQgABokMAAaJEAAGiRQABokcAAaJJAAGiSgABoksAAaJNAAGiTgABolcAAaJYAAGiWgABomcAAaJoAAGiaQABomsAAaJ4AAGieQABonoAAaJ8AAGiiQABoooAAaKLAAGijQABopYAAaKlAAGisgABosEAAaLTAAGi5wABov4AAaMQAAGjGQABoxoAAaMcAAGjKQABoyoAAaMrAAGjLQABoy4AAaM3AAGjQQABo0gAAAAAAAAEAgAAAAAAAD6qAAAAAAAAAAAAAAAAAAGjUA== + + + + + CDCurrency + Undefined + 7 + CDCurrency + 1 + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..af7f629bcf --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml @@ -0,0 +1,853 @@ + + + + + + 134481920 + 3B8F7B38-9024-4E61-A927-14E19A7D73D4 + 264 + + + + NSPersistenceFrameworkVersion + 1414 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + icon + + + + identifier + + + + options + + + + isTestnet + + + + tonBridgeUrl + + + + pricingApiUrl + + + + 1 + assets + + + + updatedAt + + + + xcmVersion + + + + price + + + + stash + + + + 1 + asset + + + + callName + + + + receiver + + + + txIndex + + + + chains + + + + name + + + + identifier + + + + chainId + + + + subtype + + + + id + + + + CDExternalApi + Undefined + 1 + CDExternalApi + 1 + + + + + + CDChainXcmConfig + Undefined + 9 + CDChainXcmConfig + 1 + + + + + + CDRuntimeMetadataItem + Undefined + 18 + CDRuntimeMetadataItem + 1 + + + + + + CDChainNode + Undefined + 5 + CDChainNode + 1 + + + + + + CDChainStorageItem + Undefined + 13 + CDChainStorageItem + 1 + + + + + + types + + + + symbol + + + + currencyId + + + + id + + + + precision + + + + symbol + + + + 1 + priceData + + + + availableSources + + + + 1 + availableDexIds + + + + name + + + + url + + + + chainId + + + + iconUrl + + + + publicKey + + + + version + + + + hasCrowdloans + + + + crowdloansApiType + + + + isTipRequired + + + + Undefined + 14 + CDTonDapp + 1 + + + + + + rank + + + + identityChain + + + + 1 + customNodes + + + + paraId + + + + 1 + xcmConfig + + + + identifier + + + + 1 + chain + + + + types + + + + type + + + + 1 + nodes + + + + sender + + + + data + + + + icon + + + + poster + + + + publicKey + + + + 1 + availableAssets + + + + id + + + + fee + + + + priceId + + + + fearless.ChainSubstrateV8MigrationPolicy + CDChain + Undefined + 8 + CDChain + 1 + + + + + + CDContactItem + Undefined + 17 + CDContactItem + 1 + + + + + + CDPolkaswapDex + Undefined + 4 + CDPolkaswapDex + 1 + + + + + + CDTransactionHistoryItem + Undefined + 12 + CDTransactionHistoryItem + 1 + + + + + + CDPhishingItem + Undefined + 21 + CDPhishingItem + 1 + + + + + + url + + + + 1 + chain + + + + isNative + + + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v7.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEMzgALAAwAGQA1ADYANwBhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAI4AjwCQAJYAlwCjALkAugC7ALwAvQC+AL8AwADBAMIA2wDeAOUA6wD6AQkBDAEbASoBLQCNAT0BTAFQAVQBYwFpAWoBcgGBAYIBiwGXAZgBmQGaAZsBsAGxAbkBugG7AccB2wHcAd0B3gHfAeAB4QHiAeMB8gIBAhACFAIjAjICMwJCAlECYAJsAn4CfwKAAoECggKDAoQChQAvApQCowKkArMCwgLcAt0C4wLvAwUDFAMXAyYDNQM5Az0DPgNNA1wDXwNuA30DgQOQA58D4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQWBBcEHwQgBCwEQARPBF4EbQRxBIAEjwSeBK0EvATIBNoE2wTcBN0E3gTfBOAE4QTwBP8FDgUdBR4FLQU8BUsFUwVoBWkFcQV9BZEFoAWvBb4FwgXRBeAF7wX+Bg0GGQYrBjoGSQZYBmcGdgaFBpQGnAaxBrIGugbGBtoG6Qb4BwcHCwcaBykHOAdHB1YHYgd0B4MHhAeTB6IHsQeyB8EH0AffB/QH9Qf9CAkIHQgsCDsISghOCF0IbAh7CIoImQilCLcIxgjVCOQI8wkCCREJIAk1CTYJPglKCV4JbQl8CYsJjwmeCa0JvAnLCdoJ5gn4CgcKFgolCjQKQwpSCmEKdgp3Cn8KiwqfCq4KvQrMCtAK3wruCv0LDAsbCycLOQtIC1cLZgt1C3YLhQuUC5ULpAu5C7oLwgvOC+IL8QwADA8MEwwiDDEMQAxPDF4Magx8DIsMmgypDLgMuQzIDNcM5gz7DPwNBA0QDSQNMw1CDVENVQ1kDXMNgg2RDaANrA2+Dc0Nzg3dDewN+w38DgsOGg4pDj4OPw5HDlMOZw52DoUOlA6YDqcOtg7FDtQO4w7vDwEPEA8fDy4PPQ9MD1sPag9/D4APiA+UD6gPtw/GD9UP2Q/oD/cQBhAVECQQMBBCEFEQYBBvEH4QjRCcEKsQwBDBEMkQ1RDpEPgRBxEWERoRKRE4EUcRVhFlEXERgxGSEaERsBG/Ec4R3RH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uWPFZAFkPWRJZIVkwWTNZQllRWVVZZFlzWXRZgFmBWYJZl1mYWaBZrFnAWc9Z3lntWfFaAFoPWh5aLVo8WkhaWlppWnhah1qWWqVatFrDWtha2VrhWu1bAVsQWx9bLlsyW0FbUFtfW25bfVuJW5lbqFu3W8Zb1VvkW/NcCFwJXBFcHVwxXEBcT1xeXGJccVyAXI9cnlytXLlcy1zaXOlc+F0HXRZdJV00XUldSl1SXV5dcl2BXZBdn12jXbJdwV3QXd9d7l36XgxeG14qXjleSF5XXmZedV54Xodell6lXqhet17GXtVe6l7rXvNe/18TXyJfMV9AX0RfU19iX3FfgF+PX5tfrV+8X8tf2l/pX/hgB2AWYCtgLGA0YEBgVGBjYHJggWCFYJRgo2CyYMFg0GDcYO5g/WEMYRthKmE5YUhhV2FsYW1hdWGBYZVhpGGzYcJhxmHVYeRh82ICYhFiHWItYjxiS2JaYmlieGKHYopimWKoYrdizGLNYtVi4WL1YwRjE2MiYyZjNWNEY1NjYmNxY31jj2OeY61jvGPLY9pj6WPqY/lkDmQPZBdkI2Q3ZEZkVWRkZGhkd2SGZJVkpGSzZL9k0WTgZO9k/mUNZRxlK2U6ZU9lUGVYZWRleGWHZZZlpWWpZbhlx2XWZeVl9GYAZhJmIWYwZj9mTmZdZmxme2Z+ZphmmWafZqtmwWbQZtNm4mbxZvRnA2cSZxVnJGczZzdnRmdVZ1ZnZGdlZ2ZnZ2doZ2lnfmd/Z4dnk2enZ7ZnxWfUZ9hn52f2aAVoFGgjaC9oQWhQaF9obmh9aIxom2iqaL9owGjIaNRo6Gj3aQZpFWkZaShpN2lGaVVpZGlwaYJpkWmgaa9pvmnNadxp62oAagFqCWoVailqOGpHalZqWmppanhqh2qWaqVqsWrDatJq4Wrwav9rAGsPax5rLWtCa0NrS2tXa2tremuJa5hrnGura7pryWvYa+dr82wFbBRsI2wybEFsUGxfbG5sg2yEbIxsmGysbLtsymzZbN1s7Gz7bQptGW0obTRtRm1VbWRtc22CbZFtoG2vbbJtzG3NbdNt3231bgRuB24WbiVuKG43bkZuSW5Ybmdua256boluim6Ybplumm6bbpxunW6ybrNuu27Hbttu6m75bwhvDG8bbypvOW9Ib1dvY291b4Rvk2+ib7FvwG/Pb9Bv32/0b/Vv/XAJcB1wLHA7cEpwTnBdcGxwe3CKcJlwpXC3cMZw1XDkcPNxAnERcRJxIXE2cTdxP3FLcV9xbnF9cYxxkHGfca5xvXHMcdtx53H5cghyF3ImcjVyRHJTcmJyd3J4coByjHKgcq9yvnLNctFy4HLvcv5zDXMccyhzOHNHc2FzYnNoc3RzinOZc5xzq3O6c71zzHPbc95z7XP8dAB0D3QedB90KXQqdCt0QHRBdEl0VXRpdHh0h3SWdJp0qXS4dMd01nTldPF1A3USdSF1MHU/dU51XXVsdYF1gnWKdZZ1qnW5dch113Xbdep1+XYIdhd2JnYydkR2U3ZidnF2gHaPdp52rXbCdsN2y3bXdut2+ncJdxh3HHcrdzp3SXdYd2d3c3eFd5R3o3eyd8F3wnfRd+B373fyeAF4EHgfeC54PXhSeFN4W3hneHt4iniZeKh4rHi7eMp42XjoePd5A3kVeSR5M3lCeVF5YHlveX55gXmbeZx5onmuecR503nWeeV59Hn3egZ6FXoYeid6Nno6ekl6WHpZemF6Ynpjenh6eXqBeo16oXqwer96znrSeuF68Hr/ew57HXspezt7SntZe2h7d3uGe5V7pHu5e7p7wnvOe+J78XwAfA98E3wifDF8QHxPfF58anx8fIt8mnypfLh8x3zWfOV86H0CfQN9CX0VfSt9On09fUx9W31efW19fH1/fY59nX2hfbB9v33Afc59z33QfdF95n3nfe99+34Pfh5+LX48fkB+T35efm1+fH6Lfpd+qX64fsd+1n7lfuZ+9X8EfxN/KH8pfzF/PX9Rf2B/b39+f4J/kX+gf69/vn/Nf9l/63/6gAmAGIAngDaARYBUgGmAaoBygH6AkoChgLCAv4DDgNKA4YDwgP+BDoEagSyBO4FKgVmBaIF3gYaBlYGqgauBs4G/gdOB4oHxggCCBIITgiKCMYJAgk+CW4JtgnyCi4KagqmCuILHgtaC64LsgvSDAIMUgyODMoNBg0WDVINjg3KDgYOQg5yDroO9g8yD24Pqg/mECIQXhBqENIQ1hDuER4RdhGyEb4R+hI2EkISfhK6EsYTAhM+E04TihPGE8oT+hP+FAIUVhRaFHoUqhT6FTYVchWuFb4V+hY2FnIWrhbqFxoXYheeF9oYFhhSGI4YyhkGGVoZXhl+Ga4Z/ho6GnYashrCGv4bOht2G7Ib7hweHGYcohzeHRodVh2SHc4eCh5eHmIegh6yHwIfPh96H7YfxiACID4geiC2IPIhIiFqIaYh4iIeIloiliLSIw4jYiNmI4YjtiQGJEIkfiS6JMolBiVCJX4luiX2JiYmbiaqJuYnIideJ5on1igSKB4ohiiKKKIo0ikqKWYpcimuKeop9ioyKm4qeiq2KvIrAis+K3orfivmK+or7ivyK/Yr+iv+LAIsBiwKLA4sYixmLIYsti0GLUItfi26LcouBi5CLn4uui72LyYvbi+qL+YwIjBeMJow1jESMWYxajGKMboyCjJGMoIyvjLOMwozRjOCM74z+jQqNHI0rjTqNSY1YjWeNdo2FjZqNm42jja+Nw43SjeGN8I30jgOOEo4hjjCOP45Ljl2ObI57joqOmY6ojreOxo7bjtyO5I7wjwSPE48ijzGPNY9Ej1OPYo9xj4CPjI+ej62PvI/Lj9qP6Y/4kAeQHJAdkCWQMZBFkFSQY5BykHaQhZCUkKOQspDBkM2Q35DukP2RDJEbkSqROZFIkV2RXpFmkXKRhpGVkaSRs5G3kcaR1ZHkkfOSApIOkiCSL5I+kk2SXJJrknqSiZKekp+Sp5KzkseS1pLlkvSS+JMHkxaTJZM0k0OTT5Nhk3CTf5OOk52TrJO7k8qT35Pgk+iT9JQIlBeUJpQ1lDmUSJRXlGaUdZSElJCUopSxlMCUz5TelO2U/JULlSCVIZUplTWVSZVYlWeVdpV6lYmVmJWnlbaVxZXRleOV8pYBlhCWH5Yulj2WTJZhlmKWapZ2loqWmZaolreWu5bKltmW6Jb3lwaXEpcklzOXQpdRl2CXb5d+l42Xopejl6uXt5fLl9qX6Zf4l/yYC5gamCmYOJhHmFOYZZh0mIOYkpihmLCYv5jOmNGY65jsmPKY/pkUmSOZJpk1mUSZR5lWmWWZaJl3mYaZipmZmaiZspnHmciZ0JncmfCZ/5oOmh2aIZowmj+aTppdmmyaeJqKmpmaqJq3msaa1ZrkmvObCJsJmxGbHZsxm0CbT5tem2KbcZuAm4+bnputm7mby5vam+mb+JwHnBacJZw0nEmcSpxSnF6ccpyBnJCcn5yjnLKcwZzQnN+c7pz6nQydG50qnTmdSJ1XnWaddZ14nZKdk52ZnaWdu53Knc2d3J3rne6d/Z4Mng+eHp4tnjGeQJ5PnlCeWp5bnlyecZ5ynnqehp6anqmeuJ7Hnsue2p7pnvifB58WnyKfNJ9Dn1KfYZ9wn3+fjp+dn7Kfs5+7n8ef25/qn/mgCKAMoBugKqA5oEigV6BjoHWghKCToKKgsaDAoM+g3qDzoPSg/KEIoRyhK6E6oUmhTaFcoWuheqGJoZihpKG2ocWh1KHjofKiAaIQoh+iIqI8oj2iQ6JPomWidKJ3ooailaKYoqeitqK5osii16Lbouqi+aL6owKjA6MYoxmjIaMto0GjUKNfo26jcqOBo5Cjn6Ouo72jyaPbo+qj+aQIpBekJqQ1pESkWaRapGKkbqSCpJGkoKSvpLOkwqTRpOCk76T+pQqlHKUrpTqlSaVYpWeldqWFpYiljKWQpZSlnKWfpaNVJG51bGzWAA0ADgAPABAAEQASABMAFAAVABYAFwAYXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc11feGRfbW9kZWxOYW1lXF94ZF9jb21tZW50c18QFV9jb25maWd1cmF0aW9uc0J5TmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBDM2AAIEMy4EMzIEFTN4AGgAbABwAHQAeAB8AIAAOACEAIgAjACQAJQAmACcAKAApAAkAJwAVAC0ALgAvADAAMQAnACcAFV8QHFhEQnVja2V0Rm9yQ2xhc3Nlc3dhc0VuY29kZWRfEBpYREJ1Y2tldEZvclBhY2thZ2Vzc3RvcmFnZV8QHFhEQnVja2V0Rm9ySW50ZXJmYWNlc3N0b3JhZ2VfEA9feGRfb3duaW5nTW9kZWxfEB1YREJ1Y2tldEZvclBhY2thZ2Vzd2FzRW5jb2RlZFZfb3duZXJfEBtYREJ1Y2tldEZvckRhdGFUeXBlc3N0b3JhZ2VbX3Zpc2liaWxpdHlfEBlYREJ1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEMyYEMx4ABgASAAIEMyIEMyhAAgAWAA4AEgASAAFBTWUVT0wA4ADkADgA6AE0AYFdOUy5rZXlzWk5TLm9iamVjdHOvEBIAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEyABoAHgAiACYAKgAuADIANgA6AD4AQgBGAEoATgBSAFYAWgBevEBIATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF+AGIBrgQZigQIDgQf1gQiDgQYLgQlugQmzgQj0gQJ+gQo/gQT2gQqygQbtgQvOgQwngQyDgDZdQ0RFeHRlcm5hbEFwaVdDRENoYWluXxATQ0RYY21BdmFpbGFibGVBc3NldFdDREFzc2V0XUNEQ29udGFjdEl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzXxAQQ0RDaGFpblhjbUNvbmZpZ1tDRFN0YXNoSXRlbV8QFUNEUnVudGltZU1ldGFkYXRhSXRlbV5DRFBvbGthc3dhcERleF8QD0NEUHJpY2VQcm92aWRlclpDRFNjYW1JbmZvW0NEQ2hhaW5Ob2RlXxAYQ0RUcmFuc2FjdGlvbkhpc3RvcnlJdGVtXxAZQ0RYY21BdmFpbGFibGVEZXN0aW5hdGlvbllDRENvbnRhY3ReQ0RQaGlzaGluZ0l0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW3fEBAAdAB1AHYAdwAfAHgAeQAhAHoAewAOACMAfAB9ACYAfgB/AIAAJwAnABMAhACFAC8AJwB/AIgAOwB/AIsAjACNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gBqAPoAEgASAAoAbgQLvgASAGoEC8YAGgBqBB/SAGQgSTkZam1dvcmRlcmVk0wA4ADkADgCRAJMAYKEAkoAcoQCUgB2ANl5YRF9QU3RlcmVvdHlwZdkAHwAjAJgADgAmAJkAIQB+AJoATgCSAH8AngAVACcALwCNAKJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAGIAcgBqAPYAAgAQIgB7TADgAOQAOAKQArgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6kArwCwALEAsgCzALQAtQC2ALeAKIAsgC2AL4AwgDKANIA3gDuANl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQDOABUAlACNAI0AjQAvAI0A1QClAI0AjQAVAI1VX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAKYAAgB0ICAgIgCuAHwgIgAAI0gA5AA4A3ADdoIAq0gDfAOAA4QDiWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAOEA4wDkV05TQXJyYXlYTlNPYmplY3TSAN8A4ADmAOdfEBBYRFVNTFByb3BlcnR5SW1wpADoAOkA6gDkXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGV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IACEAyQAOACMAygDLACYAzAAVAFQAFUwKAI0AjQCNAC8AjQDVAnEAjQCNABUAjYAAgQYLgACBBgUICAgIgCuAYQgIgAAI3xAQTQNNBE0FTQYAH00HTQgAIU0JTQoADgAjTQtNDAAmAH4Af00OACcAJwATTRIAhQAvACcAfwCIAEEAf00ZTRoAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQYegASABIACgQYNgQLvgASAGoEC8YAMgBqBB2KBBgwIEsQ/FO/TADgAOQAOTR5NIABgoQCSgByhTSGBBg6ANtkAHwAjTSQADgAmTSUAIQB+TSYAVACSAH8AngAVACcALwCNTS5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBguAHIAagD2AAIAECIEGD9MAOAA5AA5NME06AGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAhgCKAI4AkgCWAJoAnqU07TTxNPU0+TT9NQE1BTUJNQ4EGEIEGEoEGE4EGFYEGFoEGGIEGGYEGG4EGHIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVNRwAVTSEAjQCNAI0ALwCNANUApQCNAI0AFQCNgACBBhGAAIEGDgg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CdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZRgEeAGoA9gACABAiBBmDTADgAOQAOUTVRPABgpgJxAnMCbgJvAnACcoBhgGOAXoBfgGCAYqZRPVE+UT9RQFFBUUKBBmGBBr2BBr6BBr+BBsCBBsGANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAFAAFVCKAI0AjQCNAC8AjQDVAnEAjQCNABUAjYAAgQZigACBBl8ICAgIgCuAYQgIgAAI3xAQUVRRVVFWUVcAH1FYUVkAIVFaUVsADgAjUVxRXQAmAH4Af1FfACcAJwATUWMAhQAvACcAfwCIAD0Af1FqUWsAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQZ1gASABIACgQZkgQLvgASAGoEC8YAIgBqBBryBBmMIEkZN6r7TADgAOQAOUW9RcQBgoQCSgByhUXKBBmWANtkAHwAjUXUADgAmUXYAIQB+UXcAUACSAH8AngAVACcALwCNUX9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBmKAHIAagD2AAIAECIEGZtMAOAA5AA5RgVGLAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIA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1AAAgnAAAIMAAACDCAAAgxAAAIMYAACDIAAAgygAAIMwAACDNAAAgzwAAINwAACDvAAAg8QAAIPMAACD1AAAg9wAAIPkAACD7AAAg/QAAIP8AACEBAAAhFAAAIRYAACEYAAAhGgAAIRwAACEeAAAhIAAAISIAACEkAAAhJgAAISgAACE+AAAhUQAAIW0AACGKAAAhpgAAIboAACHMAAAh4gAAIfsAACI6AAAiQAAAIkkAACJWAAAiYgAAImwAACJ2AAAigQAAIowAACKZAAAioQAAIqMAACKlAAAipwAAIqkAACKqAAAiqwAAIqwAACKtAAAirwAAIrEAACKyAAAiswAAIrUAACK2AAAivwAAIsAAACLCAAAiywAAItYAACLfAAAi7gAAIvUAACL9AAAjBgAAIw8AACMiAAAjKwAAIz4AACNVAAAjZwAAI6YAACOoAAAjqgAAI6wAACOuAAAjrwAAI7AAACOxAAAjsgAAI7QAACO2AAAjtwAAI7gAACO6AAAjuwAAI/oAACP8AAAj/gAAJAAAACQCAAAkAwAAJAQAACQFAAAkBgAAJAgAACQKAAAkCwAAJAwAACQOAAAkDwAAJBgAACQZAAAkGwAAJFoAACRcAAAkXgAAJGAAACRiAAAkYwAAJGQAACRlAAAkZgAAJGgAACRqAAAkawAAJGwAACRuAAAkbwAAJK4AACSwAAAksgAAJLQAACS2AAAktwAAJLgAACS5AAAkugAAJLwAACS+AAAkvwAAJMAAACTCAAAkwwAAJMwAACTNAAAkzwAAJQ4AACUQAAAlEgAAJRQAACUWAAAlFwAAJRgAACUZAAAlGgAAJRwAACUeAAAlHwAAJSAAACUiAAAlIwAAJSQAACVjAAAlZQAAJWcAACVpAAAlawAAJWwAACVtAAAlbgAAJW8AACVxAAAlcwAAJXQAACV1AAAldwAAJXgAACWFAAAlhgAAJYcAACWJAAAlkgAAJagAACWvAAAlvAAAJfsAACX9AAAl/wAAJgEAACYDAAAmBAAAJgUAACYGAAAmBwAAJgkAACYLAAAmDAAAJg0AACYPAAAmEAAAJikAACYrAAAmLQAAJi8AACYwAAAmMgAAJkkAACZSAAAmYAAAJm0AACZ7AAAmkAAAJqQAACa7AAAmzQAAJwwAACcOAAAnEAAAJxIAACcUAAAnFQAAJxYAACcXAAAnGAAAJxoAACccAAAnHQAAJx4AACcgAAAnIQAAJy8AACc4AAAnTQAAJ1wAACdxAAAnfwAAJ5QAACeoAAAnvwAAJ9EAACfeAAAn5wAAJ+kAACfrAAAn7QAAJ+8AACf4AAAn+gAAJ/0AACgAAAAoAwAAKAUAACgLAAAoEQAAKBYAACgaAAAoZQAAKIgAACioAAAoyAAAKMoAACjMAAAozgAAKNAAACjSAAAo0wAAKNQAACjWAAAo1wAAKNkAACjaAAAo3AAAKN4AACjfAAAo4AAAKOIAACjjAAAo6AAAKPUAACj6AAAo/AAAKP4AACkDAAApBQAAKQcAACkJAAApHgAAKTEAAClWAAApegAAKaEAACnFAAApxwAAKckAACnLAAApzQAAKc8AACnRAAAp0gAAKdQAACnhAAAp8gAAKfQAACn2AAAp+AAAKfoAACn8AAAp/gAAKgAAACoCAAAqEwAAKhUAACoXAAAqGQAAKhsAACodAAAqHwAAKiEAACojAAAqJQAAKkMAACphAAAqdAAAKogAACqdAAAqugAAKs4AACrkAAArIwAAKyUAACsnAAArKQAAKysAACssAAArLQAAKy4AACsvAAArMQAAKzMAACs0AAArNQAAKzcAACs4AAArdwAAK3kAACt7AAArfQAAK38AACuAAAArgQAAK4IAACuDAAArhQAAK4cAACuIAAAriQAAK4sAACuMAAArywAAK80AACvPAAAr0QAAK9MAACvUAAAr1QAAK9YAACvXAAAr2QAAK9sAACvcAAAr3QAAK98AACvgAAAr7QAAK+4AACvvAAAr8QAALDAAACwyAAAsNAAALDYAACw4AAAsOQAALDoAACw7AAAsPAAALD4AACxAAAAsQQAALEIAACxEAAAsRQAALIQAACyGAAAsiAAALIoAACyMAAAsjQAALI4AACyPAAAskAAALJIAACyUAAAslQAALJYAACyYAAAsmQAALJoAACzZAAAs2wAALN0AACzfAAAs4QAALOIAACzjAAAs5AAALOUAACznAAAs6QAALOoAACzrAAAs7QAALO4AAC0tAAAtLwAALTEAAC0zAAAtNQAALTYAAC03AAAtOAAALTkAAC07AAAtPQAALT4AAC0/AAAtQQAALUIAAC2BAAAtgwAALYUAAC2HAAAtiQAALYoAAC2LAAAtjAAALY0AAC2PAAAtkQAALZIAAC2TAAAtlQAALZYAAC27AAAt3wAALgYAAC4qAAAuLAAALi4AAC4wAAAuMgAALjQAAC42AAAuNwAALjkAAC5GAAAuVQAALlcAAC5ZAAAuWwAALl0AAC5fAAAuYQAALmMAAC5yAAAudAAALnYAAC54AAAuegAALn0AAC6AAAAugwAALoUAAC6XAAAuqwAALr0AAC7SAAAu5AAALvMAAC8QAAAvTwAAL1EAAC9TAAAvVQAAL1cAAC9YAAAvWQAAL1oAAC9bAAAvXQAAL18AAC9gAAAvYQAAL2MAAC9kAAAvowAAL6UAAC+nAAAvqQAAL6sAAC+sAAAvrQAAL64AAC+vAAAvsQAAL7MAAC+0AAAvtQAAL7cAAC+4AAAvugAAL/kAAC/7AAAv/QAAL/8AADABAAAwAgAAMAMAADAEAAAwBQAAMAcAADAJAAAwCgAAMAsAADANAAAwDgAAME0AADBPAAAwUQAAMFMAADBVAAAwVgAAMFcAADBYAAAwWQAAMFsAADBdAAAwXgAAMF8AADBhAAAwYgAAMKUAADDJAAAw7QAAMRAAADE3AAAxVwAAMX4AADGlAAAxxQAAMekAADINAAAyDwAAMhEAADITAAAyFQAAMhcAADIZAAAyHAAAMh4AADIgAAAyIwAAMiUAADInAAAyKgAAMiwAADItAAAyMgAAMj8AADJCAAAyRAAAMkcAADJJAAAySwAAMnAAADKUAAAyuwAAMt8AADLhAAAy4wAAMuUAADLnAAAy6QAAMusAADLsAAAy7gAAMvsAADMOAAAzEAAAMxIAADMUAAAzFgAAMxgAADMaAAAzHAAAMx4AADMgAAAzMwAAMzUAADM3AAAzOQAAMzsAADM9AAAzPwAAM0EAADNDAAAzRQAAM0cAADOGAAAziAAAM4oAADOMAAAzjgAAM48AADOQAAAzkQAAM5IAADOUAAAzlgAAM5cAADOYAAAzmgAAM5sAADOkAAAzpQAAM6cAADPmAAAz6AAAM+oAADPsAAAz7gAAM+8AADPwAAAz8QAAM/IAADP0AAAz9gAAM/cAADP4AAAz+gAAM/sAADQ6AAA0PAAAND4AADRAAAA0QgAANEMAADREAAA0RQAANEYAADRIAAA0SgAANEsAADRMAAA0TgAANE8AADRYAAA0WwAANF0AADRfAAA0aAAANGsAADRtAAA0bwAANHcAADS2AAA0uAAANLoAADS8AAA0vgAANL8AADTAAAA0wQAANMIAADTEAAA0xgAANMcAADTIAAA0ygAANMsAADUKAAA1DAAANQ4AADUQAAA1EgAANRMAADUUAAA1FQAANRYAADUYAAA1GgAANRsAADUcAAA1HgAANR8AADUoAAA1KQAANSsAADVqAAA1bAAANW4AADVwAAA1cgAANXMAADV0AAA1dQAANXYAADV4AAA1egAANXsAADV8AAA1fgAANX8AADW+AAA1wAAANcIAADXEAAA1xgAANccAADXIAAA1yQAANcoAADXMAAA1zgAANc8AADXQAAA10gAANdMAADXgAAA14QAANeIAADXkAAA2IwAANiUAADYnAAA2KQAANisAADYsAAA2LQAANi4AADYvAAA2MQAANjMAADY0AAA2NQAANjcAADY4AAA2dwAANnkAADZ7AAA2fQAANn8AADaAAAA2gQAANoIAADaDAAA2hQAANocAADaIAAA2iQAANosAADaMAAA2mQAANtwAADbeAAA24AAANuIAADbkAAA25gAANugAADbqAAA27AAANu4AADbwAAA28gAANvQAADb2AAA2+AAANvoAADb8AAA2/gAANwAAADcCAAA3BAAANwYAADcIAAA3CgAANwwAADcOAAA3EAAANxIAADcUAAA3FgAANxgAADcaAAA3HAAAN18AADdhAAA3YwAAN2UAADdnAAA3agAAN20AADdwAAA3cwAAN3YAADd5AAA3fAAAN38AADeCAAA3hQAAN4gAADeLAAA3jgAAN5EAADeUAAA3lwAAN5oAADedAAA3oAAAN6MAADemAAA3qQAAN6wAADevAAA3sgAAN7UAADe4AAA3uwAAN70AADfCAAA3zAAAN9oAADfpAAA38QAAN/8AADgNAAA4EgAAOCEAADgvAAA4PQAAOEIAADhWAAA4XQAAOGQAADhyAAA4fAAAOIsAADihAAA4qgAAOLAAADi3AAA4wAAAOM0AADjhAAA49AAAOP4AADkQAAA5HgAAOSoAADl1AAA5mAAAObgAADnYAAA52gAAOdwAADneAAA54AAAOeIAADnjAAA55AAAOeYAADnnAAA56QAAOeoAADnsAAA57gAAOe8AADnwAAA58gAAOfMAADn4AAA6BQAAOgoAADoMAAA6DgAAOhMAADoVAAA6FwAAOhkAADouAAA6UwAAOncAADqeAAA6wgAAOsQAADrGAAA6yAAAOsoAADrMAAA6zgAAOs8AADrRAAA63gAAOu8AADrxAAA68wAAOvUAADr3AAA6+QAAOvsAADr9AAA6/wAAOxAAADsSAAA7FAAAOxYAADsYAAA7GgAAOxwAADseAAA7IAAAOyIAADthAAA7YwAAO2UAADtnAAA7aQAAO2oAADtrAAA7bAAAO20AADtvAAA7cQAAO3IAADtzAAA7dQAAO3YAADu1AAA7twAAO7kAADu7AAA7vQAAO74AADu/AAA7wAAAO8EAADvDAAA7xQAAO8YAADvHAAA7yQAAO8oAADwJAAA8CwAAPA0AADwPAAA8EQAAPBIAADwTAAA8FAAAPBUAADwXAAA8GQAAPBoAADwbAAA8HQAAPB4AADwrAAA8LAAAPC0AADwvAAA8bgAAPHAAADxyAAA8dAAAPHYAADx3AAA8eAAAPHkAADx6AAA8fAAAPH4AADx/AAA8gAAAPIIAADyDAAA8wgAAPMQAADzGAAA8yAAAPMoAADzLAAA8zAAAPM0AADzOAAA80AAAPNIAADzTAAA81AAAPNYAADzXAAA9FgAAPRgAAD0aAAA9HAAAPR4AAD0fAAA9IAAAPSEAAD0iAAA9JAAAPSYAAD0nAAA9KAAAPSoAAD0rAAA9agAAPWwAAD1uAAA9cAAAPXIAAD1zAAA9dAAAPXUAAD12AAA9eAAAPXoAAD17AAA9fAAAPX4AAD1/AAA9vgAAPcAAAD3CAAA9xAAAPcYAAD3HAAA9yAAAPckAAD3KAAA9zAAAPc4AAD3PAAA90AAAPdIAAD3TAAA9+AAAPhwAAD5DAAA+ZwAAPmkAAD5rAAA+bQAAPm8AAD5xAAA+cwAAPnQAAD52AAA+gwAAPpIAAD6UAAA+lgAAPpgAAD6aAAA+nAAAPp4AAD6gAAA+rwAAPrEAAD6zAAA+tQAAPrcAAD65AAA+uwAAPr0AAD6/AAA+3wAAPwoAAD8kAAA/PQAAP1cAAD93AAA/mgAAP9kAAD/bAAA/3QAAP98AAD/hAAA/4gAAP+MAAD/kAAA/5QAAP+cAAD/pAAA/6gAAP+sAAD/tAAA/7gAAQC0AAEAvAABAMQAAQDMAAEA1AABANgAAQDcAAEA4AABAOQAAQDsAAEA9AABAPgAAQD8AAEBBAABAQgAAQIEAAECDAABAhQAAQIcAAECJAABAigAAQIsAAECMAABAjQAAQI8AAECRAABAkgAAQJMAAECVAABAlgAAQNUAAEDXAABA2QAAQNsAAEDdAABA3gAAQN8AAEDgAABA4QAAQOMAAEDlAABA5gAAQOcAAEDpAABA6gAAQO0AAEEsAABBLgAAQTAAAEEyAABBNAAAQTUAAEE2AABBNwAAQTgAAEE6AABBPAAAQT0AAEE+AABBQAAAQUEAAEGAAABBggAAQYQAAEGGAABBiAAAQYkAAEGKAABBiwAAQYwAAEGOAABBkAAAQZEAAEGSAABBlAAAQZUAAEHUAABB1gAAQdgAAEHaAABB3AAAQd0AAEHeAABB3wAAQeAAAEHiAABB5AAAQeUAAEHmAABB6AAAQekAAEHyAABCAAAAQg0AAEIbAABCKAAAQjsAAEJSAABCZAAAQq8AAELSAABC8gAAQxIAAEMUAABDFgAAQxgAAEMaAABDHAAAQx0AAEMeAABDIAAAQyEAAEMjAABDJAAAQyYAAEMoAABDKQAAQyoAAEMsAABDLQAAQzYAAENDAABDSAAAQ0oAAENMAABDUQAAQ1MAAENVAABDVwAAQ3wAAEOgAABDxwAAQ+sAAEPtAABD7wAAQ/EAAEPzAABD9QAAQ/cAAEP4AABD+gAARAcAAEQYAABEGgAARBwAAEQeAABEIAAARCIAAEQkAABEJgAARCgAAEQ5AABEOwAARD0AAEQ/AABEQQAAREMAAERFAABERwAAREkAAERLAABEigAARIwAAESOAABEkAAARJIAAESTAABElAAARJUAAESWAABEmAAARJoAAESbAABEnAAARJ4AAESfAABE3gAAROAAAETiAABE5AAAROYAAETnAABE6AAAROkAAETqAABE7AAARO4AAETvAABE8AAARPIAAETzAABFMgAARTQAAEU2AABFOAAARToAAEU7AABFPAAART0AAEU+AABFQAAARUIAAEVDAABFRAAARUYAAEVHAABFVAAARVUAAEVWAABFWAAARZcAAEWZAABFmwAARZ0AAEWfAABFoAAARaEAAEWiAABFowAARaUAAEWnAABFqAAARakAAEWrAABFrAAAResAAEXtAABF7wAARfEAAEXzAABF9AAARfUAAEX2AABF9wAARfkAAEX7AABF/AAARf0AAEX/AABGAAAARj8AAEZBAABGQwAARkUAAEZHAABGSAAARkkAAEZKAABGSwAARk0AAEZPAABGUAAARlEAAEZTAABGVAAARpMAAEaVAABGlwAARpkAAEabAABGnAAARp0AAEaeAABGnwAARqEAAEajAABGpAAARqUAAEanAABGqAAARucAAEbpAABG6wAARu0AAEbvAABG8AAARvEAAEbyAABG8wAARvUAAEb3AABG+AAARvkAAEb7AABG/AAARyEAAEdFAABHbAAAR5AAAEeSAABHlAAAR5YAAEeYAABHmgAAR5wAAEedAABHnwAAR6wAAEe7AABHvQAAR78AAEfBAABHwwAAR8UAAEfHAABHyQAAR9gAAEfaAABH3AAAR94AAEfgAABH4gAAR+QAAEfmAABH6AAASCcAAEgpAABIKwAASC0AAEgvAABIMAAASDEAAEgyAABIMwAASDUAAEg3AABIOAAASDkAAEg7AABIPAAASHsAAEh9AABIfwAASIEAAEiDAABIhAAASIUAAEiGAABIhwAASIkAAEiLAABIjAAASI0AAEiPAABIkAAASM8AAEjRAABI0wAASNUAAEjXAABI2AAASNkAAEjaAABI2wAASN0AAEjfAABI4AAASOEAAEjjAABI5AAASSMAAEklAABJJwAASSkAAEkrAABJLAAASS0AAEkuAABJLwAASTEAAEkzAABJNAAASTUAAEk3AABJOAAASXcAAEl5AABJewAASX0AAEl/AABJgAAASYEAAEmCAABJgwAASYUAAEmHAABJiAAASYkAAEmLAABJjAAAScsAAEnNAABJzwAASdEAAEnTAABJ1AAASdUAAEnWAABJ1wAASdkAAEnbAABJ3AAASd0AAEnfAABJ4AAASh8AAEohAABKIwAASiUAAEonAABKKAAASikAAEoqAABKKwAASi0AAEovAABKMAAASjEAAEozAABKNAAASj0AAEpQAABKXQAASnAAAEp9AABKkAAASqcAAEq5AABLBAAASycAAEtHAABLZwAAS2kAAEtrAABLbQAAS28AAEtxAABLcgAAS3MAAEt1AABLdgAAS3gAAEt5AABLewAAS30AAEt+AABLfwAAS4EAAEuCAABLhwAAS5QAAEuZAABLmwAAS50AAEuiAABLpAAAS6YAAEuoAABLzQAAS/EAAEwYAABMPAAATD4AAExAAABMQgAATEQAAExGAABMSAAATEkAAExLAABMWAAATGkAAExrAABMbQAATG8AAExxAABMcwAATHUAAEx3AABMeQAATIoAAEyMAABMjgAATJAAAEySAABMlAAATJYAAEyYAABMmgAATJwAAEzbAABM3QAATN8AAEzhAABM4wAATOQAAEzlAABM5gAATOcAAEzpAABM6wAATOwAAEztAABM7wAATPAAAE0vAABNMQAATTMAAE01AABNNwAATTgAAE05AABNOgAATTsAAE09AABNPwAATUAAAE1BAABNQwAATUQAAE2DAABNhQAATYcAAE2JAABNiwAATYwAAE2NAABNjgAATY8AAE2RAABNkwAATZQAAE2VAABNlwAATZgAAE2lAABNpgAATacAAE2pAABN6AAATeoAAE3sAABN7gAATfAAAE3xAABN8gAATfMAAE30AABN9gAATfgAAE35AABN+gAATfwAAE39AABOPAAATj4AAE5AAABOQgAATkQAAE5FAABORgAATkcAAE5IAABOSgAATkwAAE5NAABOTgAATlAAAE5RAABOkAAATpIAAE6UAABOlgAATpgAAE6ZAABOmgAATpsAAE6cAABOngAATqAAAE6hAABOogAATqQAAE6lAABO5AAATuYAAE7oAABO6gAATuwAAE7tAABO7gAATu8AAE7wAABO8gAATvQAAE71AABO9gAATvgAAE75AABPOAAATzoAAE88AABPPgAAT0AAAE9BAABPQgAAT0MAAE9EAABPRgAAT0gAAE9JAABPSgAAT0wAAE9NAABPcgAAT5YAAE+9AABP4QAAT+MAAE/lAABP5wAAT+kAAE/rAABP7QAAT+4AAE/wAABP/QAAUAwAAFAOAABQEAAAUBIAAFAUAABQFgAAUBgAAFAaAABQKQAAUCsAAFAtAABQLwAAUDEAAFAzAABQNQAAUDcAAFA5AABQeAAAUHoAAFB8AABQfgAAUIAAAFCBAABQggAAUIMAAFCEAABQhgAAUIgAAFCJAABQigAAUIwAAFCNAABQjwAAUM4AAFDQAABQ0gAAUNQAAFDWAABQ1wAAUNgAAFDZAABQ2gAAUNwAAFDeAABQ3wAAUOAAAFDiAABQ4wAAUSIAAFEkAABRJgAAUSgAAFEqAABRKwAAUSwAAFEtAABRLgAAUTAAAFEyAABRMwAAUTQAAFE2AABRNwAAUXYAAFF4AABRegAAUXwAAFF+AABRfwAAUYAAAFGBAABRggAAUYQAAFGGAABRhwAAUYgAAFGKAABRiwAAUY0AAFHMAABRzgAAUdAAAFHSAABR1AAAUdUAAFHWAABR1wAAUdgAAFHaAABR3AAAUd0AAFHeAABR4AAAUeEAAFIgAABSIgAAUiQAAFImAABSKAAAUikAAFIqAABSKwAAUiwAAFIuAABSMAAAUjEAAFIyAABSNAAAUjUAAFJ0AABSdgAAUngAAFJ6AABSfAAAUn0AAFJ+AABSfwAAUoAAAFKCAABShAAAUoUAAFKGAABSiAAAUokAAFLUAABS9wAAUxcAAFM3AABTOQAAUzsAAFM9AABTPwAAU0EAAFNCAABTQwAAU0UAAFNGAABTSAAAU0kAAFNLAABTTQAAU04AAFNPAABTUQAAU1IAAFNXAABTZAAAU2kAAFNrAABTbQAAU3IAAFN0AABTdgAAU3gAAFOdAABTwQAAU+gAAFQMAABUDgAAVBAAAFQSAABUFAAAVBYAAFQYAABUGQAAVBsAAFQoAABUOQAAVDsAAFQ9AABUPwAAVEEAAFRDAABURQAAVEcAAFRJAABUWgAAVFwAAFReAABUYAAAVGIAAFRkAABUZgAAVGgAAFRqAABUbAAAVKsAAFStAABUrwAAVLEAAFSzAABUtAAAVLUAAFS2AABUtwAAVLkAAFS7AABUvAAAVL0AAFS/AABUwAAAVP8AAFUBAABVAwAAVQUAAFUHAABVCAAAVQkAAFUKAABVCwAAVQ0AAFUPAABVEAAAVREAAFUTAABVFAAAVVMAAFVVAABVVwAAVVkAAFVbAABVXAAAVV0AAFVeAABVXwAAVWEAAFVjAABVZAAAVWUAAFVnAABVaAAAVXUAAFV2AABVdwAAVXkAAFW4AABVugAAVbwAAFW+AABVwAAAVcEAAFXCAABVwwAAVcQAAFXGAABVyAAAVckAAFXKAABVzAAAVc0AAFYMAABWDgAAVhAAAFYSAABWFAAAVhUAAFYWAABWFwAAVhgAAFYaAABWHAAAVh0AAFYeAABWIAAAViEAAFZgAABWYgAAVmQAAFZmAABWaAAAVmkAAFZqAABWawAAVmwAAFZuAABWcAAAVnEAAFZyAABWdAAAVnUAAFa0AABWtgAAVrgAAFa6AABWvAAAVr0AAFa+AABWvwAAVsAAAFbCAABWxAAAVsUAAFbGAABWyAAAVskAAFcIAABXCgAAVwwAAFcOAABXEAAAVxEAAFcSAABXEwAAVxQAAFcWAABXGAAAVxkAAFcaAABXHAAAVx0AAFdCAABXZgAAV40AAFexAABXswAAV7UAAFe3AABXuQAAV7sAAFe9AABXvgAAV8AAAFfNAABX3AAAV94AAFfgAABX4gAAV+QAAFfmAABX6AAAV+oAAFf5AABX/AAAV/8AAFgCAABYBQAAWAgAAFgLAABYDgAAWBAAAFhPAABYUQAAWFMAAFhVAABYVwAAWFgAAFhZAABYWgAAWFsAAFhdAABYXwAAWGAAAFhhAABYYwAAWGQAAFijAABYpQAAWKcAAFipAABYqwAAWKwAAFitAABYrgAAWK8AAFixAABYswAAWLQAAFi1AABYtwAAWLgAAFj3AABY+QAAWPsAAFj9AABY/wAAWQAAAFkBAABZAgAAWQMAAFkFAABZBwAAWQgAAFkJAABZCwAAWQwAAFlLAABZTQAAWU8AAFlRAABZUwAAWVQAAFlVAABZVgAAWVcAAFlZAABZWwAAWVwAAFldAABZXwAAWWAAAFmfAABZoQAAWaMAAFmlAABZpwAAWagAAFmpAABZqgAAWasAAFmtAABZrwAAWbAAAFmxAABZswAAWbQAAFnzAABZ9QAAWfcAAFn5AABZ+wAAWfwAAFn9AABZ/gAAWf8AAFoBAABaAwAAWgQAAFoFAABaBwAAWggAAFpHAABaSQAAWksAAFpNAABaTwAAWlAAAFpRAABaUgAAWlMAAFpVAABaVwAAWlgAAFpZAABaWwAAWlwAAFqnAABaygAAWuoAAFsKAABbDAAAWw4AAFsQAABbEgAAWxQAAFsVAABbFgAAWxkAAFsaAABbHAAAWx0AAFsfAABbIQAAWyIAAFsjAABbJgAAWycAAFssAABbOQAAWz4AAFtAAABbQgAAW0cAAFtKAABbTQAAW08AAFt0AABbmAAAW78AAFvjAABb5gAAW+gAAFvqAABb7AAAW+4AAFvwAABb8QAAW/QAAFwBAABcEgAAXBQAAFwWAABcGAAAXBoAAFwcAABcHgAAXCAAAFwiAABcMwAAXDYAAFw5AABcPAAAXD8AAFxCAABcRQAAXEgAAFxLAABcTQAAXIwAAFyOAABckAAAXJIAAFyVAABclgAAXJcAAFyYAABcmQAAXJsAAFydAABcngAAXJ8AAFyhAABcogAAXOEAAFzjAABc5QAAXOcAAFzqAABc6wAAXOwAAFztAABc7gAAXPAAAFzyAABc8wAAXPQAAFz2AABc9wAAXTYAAF04AABdOwAAXT0AAF1AAABdQQAAXUIAAF1DAABdRAAAXUYAAF1IAABdSQAAXUoAAF1MAABdTQAAXVoAAF1bAABdXAAAXV4AAF2dAABdnwAAXaEAAF2jAABdpgAAXacAAF2oAABdqQAAXaoAAF2sAABdrgAAXa8AAF2wAABdsgAAXbMAAF3yAABd9AAAXfYAAF34AABd+wAAXfwAAF39AABd/gAAXf8AAF4BAABeAwAAXgQAAF4FAABeBwAAXggAAF5HAABeSQAAXksAAF5NAABeUAAAXlEAAF5SAABeUwAAXlQAAF5WAABeWAAAXlkAAF5aAABeXAAAXl0AAF6cAABengAAXqAAAF6iAABepQAAXqYAAF6nAABeqAAAXqkAAF6rAABerQAAXq4AAF6vAABesQAAXrIAAF7xAABe8wAAXvUAAF73AABe+gAAXvsAAF78AABe/QAAXv4AAF8AAABfAgAAXwMAAF8EAABfBgAAXwcAAF8sAABfUAAAX3cAAF+bAABfngAAX6AAAF+iAABfpAAAX6YAAF+oAABfqQAAX6wAAF+5AABfyAAAX8oAAF/MAABfzgAAX9AAAF/SAABf1AAAX9YAAF/lAABf6AAAX+sAAF/uAABf8QAAX/QAAF/3AABf+gAAX/wAAGA7AABgPQAAYD8AAGBBAABgRAAAYEUAAGBGAABgRwAAYEgAAGBKAABgTAAAYE0AAGBOAABgUAAAYFEAAGCQAABgkgAAYJQAAGCWAABgmQAAYJoAAGCbAABgnAAAYJ0AAGCfAABgoQAAYKIAAGCjAABgpQAAYKYAAGDlAABg5wAAYOkAAGDrAABg7gAAYO8AAGDwAABg8QAAYPIAAGD0AABg9gAAYPcAAGD4AABg+gAAYPsAAGE6AABhPAAAYT4AAGFAAABhQwAAYUQAAGFFAABhRgAAYUcAAGFJAABhSwAAYUwAAGFNAABhTwAAYVAAAGGPAABhkQAAYZMAAGGVAABhmAAAYZkAAGGaAABhmwAAYZwAAGGeAABhoAAAYaEAAGGiAABhpAAAYaUAAGHkAABh5gAAYegAAGHqAABh7QAAYe4AAGHvAABh8AAAYfEAAGHzAABh9QAAYfYAAGH3AABh+QAAYfoAAGI5AABiOwAAYj0AAGI/AABiQgAAYkMAAGJEAABiRQAAYkYAAGJIAABiSgAAYksAAGJMAABiTgAAYk8AAGKaAABivQAAYt0AAGL9AABi/wAAYwEAAGMDAABjBQAAYwcAAGMIAABjCQAAYwwAAGMNAABjDwAAYxAAAGMSAABjFAAAYxUAAGMWAABjGQAAYxoAAGMfAABjLAAAYzEAAGMzAABjNQAAYzoAAGM9AABjQAAAY0IAAGNnAABjiwAAY7IAAGPWAABj2QAAY9sAAGPdAABj3wAAY+EAAGPjAABj5AAAY+cAAGP0AABkBQAAZAcAAGQJAABkCwAAZA0AAGQPAABkEQAAZBMAAGQVAABkJgAAZCkAAGQsAABkLwAAZDIAAGQ1AABkOAAAZDsAAGQ+AABkQAAAZH8AAGSBAABkgwAAZIUAAGSIAABkiQAAZIoAAGSLAABkjAAAZI4AAGSQAABkkQAAZJIAAGSUAABklQAAZNQAAGTWAABk2AAAZNoAAGTdAABk3gAAZN8AAGTgAABk4QAAZOMAAGTlAABk5gAAZOcAAGTpAABk6gAAZSkAAGUrAABlLgAAZTAAAGUzAABlNAAAZTUAAGU2AABlNwAAZTkAAGU7AABlPAAAZT0AAGU/AABlQAAAZU0AAGVOAABlTwAAZVEAAGWQAABlkgAAZZQAAGWWAABlmQAAZZoAAGWbAABlnAAAZZ0AAGWfAABloQAAZaIAAGWjAABlpQAAZaYAAGXlAABl5wAAZekAAGXrAABl7gAAZe8AAGXwAABl8QAAZfIAAGX0AABl9gAAZfcAAGX4AABl+gAAZfsAAGY6AABmPAAAZj4AAGZAAABmQwAAZkQAAGZFAABmRgAAZkcAAGZJAABmSwAAZkwAAGZNAABmTwAAZlAAAGaPAABmkQAAZpMAAGaVAABmmAAAZpkAAGaaAABmmwAAZpwAAGaeAABmoAAAZqEAAGaiAABmpAAAZqUAAGbkAABm5gAAZugAAGbqAABm7QAAZu4AAGbvAABm8AAAZvEAAGbzAABm9QAAZvYAAGb3AABm+QAAZvoAAGcfAABnQwAAZ2oAAGeOAABnkQAAZ5MAAGeVAABnlwAAZ5kAAGebAABnnAAAZ58AAGesAABnuwAAZ70AAGe/AABnwQAAZ8MAAGfFAABnxwAAZ8kAAGfYAABn2wAAZ94AAGfhAABn5AAAZ+cAAGfqAABn7QAAZ+8AAGguAABoMAAAaDIAAGg0AABoNwAAaDgAAGg5AABoOgAAaDsAAGg9AABoPwAAaEAAAGhBAABoQwAAaEQAAGiDAABohQAAaIcAAGiJAABojAAAaI0AAGiOAABojwAAaJAAAGiSAABolAAAaJUAAGiWAABomAAAaJkAAGjYAABo2gAAaNwAAGjeAABo4QAAaOIAAGjjAABo5AAAaOUAAGjnAABo6QAAaOoAAGjrAABo7QAAaO4AAGktAABpLwAAaTIAAGk0AABpNwAAaTgAAGk5AABpOgAAaTsAAGk9AABpPwAAaUAAAGlBAABpQwAAaUQAAGlHAABphgAAaYgAAGmKAABpjAAAaY8AAGmQAABpkQAAaZIAAGmTAABplQAAaZcAAGmYAABpmQAAaZsAAGmcAABp2wAAad0AAGngAABp4gAAaeUAAGnmAABp5wAAaegAAGnpAABp6wAAae0AAGnuAABp7wAAafEAAGnyAABqGQAAalgAAGpaAABqXAAAal4AAGphAABqYgAAamMAAGpkAABqZQAAamcAAGppAABqagAAamsAAGptAABqbgAAarkAAGrcAABq/AAAaxwAAGseAABrIAAAayIAAGskAABrJgAAaycAAGsoAABrKwAAaywAAGsuAABrLwAAazEAAGszAABrNAAAazUAAGs4AABrOQAAaz4AAGtLAABrUAAAa1IAAGtUAABrWQAAa1wAAGtfAABrYQAAa4YAAGuqAABr0QAAa/UAAGv4AABr+gAAa/wAAGv+AABsAAAAbAIAAGwDAABsBgAAbBMAAGwkAABsJgAAbCgAAGwqAABsLAAAbC4AAGwwAABsMgAAbDQAAGxFAABsSAAAbEsAAGxOAABsUQAAbFQAAGxXAABsWgAAbF0AAGxfAABsngAAbKAAAGyiAABspAAAbKcAAGyoAABsqQAAbKoAAGyrAABsrQAAbK8AAGywAABssQAAbLMAAGy0AABs8wAAbPUAAGz3AABs+QAAbPwAAGz9AABs/gAAbP8AAG0AAABtAgAAbQQAAG0FAABtBgAAbQgAAG0JAABtSAAAbUoAAG1NAABtTwAAbVIAAG1TAABtVAAAbVUAAG1WAABtWAAAbVoAAG1bAABtXAAAbV4AAG1fAABtbAAAbW0AAG1uAABtcAAAba8AAG2xAABtswAAbbUAAG24AABtuQAAbboAAG27AABtvAAAbb4AAG3AAABtwQAAbcIAAG3EAABtxQAAbgQAAG4GAABuCAAAbgoAAG4NAABuDgAAbg8AAG4QAABuEQAAbhMAAG4VAABuFgAAbhcAAG4ZAABuGgAAblkAAG5bAABuXQAAbl8AAG5iAABuYwAAbmQAAG5lAABuZgAAbmgAAG5qAABuawAAbmwAAG5uAABubwAAbq4AAG6wAABusgAAbrQAAG63AABuuAAAbrkAAG66AABuuwAAbr0AAG6/AABuwAAAbsEAAG7DAABuxAAAbwMAAG8FAABvBwAAbwkAAG8MAABvDQAAbw4AAG8PAABvEAAAbxIAAG8UAABvFQAAbxYAAG8YAABvGQAAbz4AAG9iAABviQAAb60AAG+wAABvsgAAb7QAAG+2AABvuAAAb7oAAG+7AABvvgAAb8sAAG/aAABv3AAAb94AAG/gAABv4gAAb+QAAG/mAABv6AAAb/cAAG/6AABv/QAAcAAAAHADAABwBgAAcAkAAHAMAABwDgAAcE0AAHBPAABwUQAAcFMAAHBWAABwVwAAcFgAAHBZAABwWgAAcFwAAHBeAABwXwAAcGAAAHBiAABwYwAAcKIAAHCkAABwpgAAcKgAAHCrAABwrAAAcK0AAHCuAABwrwAAcLEAAHCzAABwtAAAcLUAAHC3AABwuAAAcPcAAHD5AABw+wAAcP0AAHEAAABxAQAAcQIAAHEDAABxBAAAcQYAAHEIAABxCQAAcQoAAHEMAABxDQAAcUwAAHFOAABxUQAAcVMAAHFWAABxVwAAcVgAAHFZAABxWgAAcVwAAHFeAABxXwAAcWAAAHFiAABxYwAAcWYAAHGlAABxpwAAcakAAHGrAABxrgAAca8AAHGwAABxsQAAcbIAAHG0AABxtgAAcbcAAHG4AABxugAAcbsAAHH6AABx/AAAcf4AAHIAAAByAwAAcgQAAHIFAAByBgAAcgcAAHIJAAByCwAAcgwAAHINAAByDwAAchAAAHJPAAByUQAAclMAAHJVAAByWAAAclkAAHJaAAByWwAAclwAAHJeAAByYAAAcmEAAHJiAAByZAAAcmUAAHK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uAACI7wAAiPAAAIjyAACI8wAAiTIAAIk0AACJNgAAiTgAAIk7AACJPAAAiT0AAIk+AACJPwAAiUEAAIlDAACJRAAAiUUAAIlHAACJSAAAiYcAAImJAACJiwAAiY0AAImQAACJkQAAiZIAAImTAACJlAAAiZYAAImYAACJmQAAiZoAAImcAACJnQAAidwAAIneAACJ4AAAieIAAInlAACJ5gAAiecAAInoAACJ6QAAiesAAIntAACJ7gAAie8AAInxAACJ8gAAijEAAIozAACKNQAAijcAAIo6AACKOwAAijwAAIo9AACKPgAAikAAAIpCAACKQwAAikQAAIpGAACKRwAAipIAAIq1AACK1QAAivUAAIr3AACK+QAAivsAAIr9AACK/wAAiwAAAIsBAACLBAAAiwUAAIsHAACLCAAAiwoAAIsMAACLDQAAiw4AAIsRAACLEgAAixcAAIskAACLKQAAiysAAIstAACLMgAAizUAAIs4AACLOgAAi18AAIuDAACLqgAAi84AAIvRAACL0wAAi9UAAIvXAACL2QAAi9sAAIvcAACL3wAAi+wAAIv9AACL/wAAjAEAAIwDAACMBQAAjAcAAIwJAACMCwAAjA0AAIweAACMIQAAjCQAAIwnAACMKgAAjC0AAIwwAACMMwAAjDYAAIw4AACMdwAAjHkAAIx7AACMfQAAjIAAAIyBAACMggAAjIMAAIyEAACMhgAAjIgAAIyJAACMigAAjIwAAIyNAACMzAAAjM4AAIzQAACM0gAAjNUAAIzWAACM1wAAjNgAAIzZAACM2wAAjN0AAIzeAACM3wAAjOEAAIziAACNIQAAjSMAAI0mAACNKAAAjSsAAI0sAACNLQAAjS4AAI0vAACNMQAAjTMAAI00AACNNQAAjTcAAI04AACNRQAAjUYAAI1HAACNSQAAjYgAAI2KAACNjAAAjY4AAI2RAACNkgAAjZMAAI2UAACNlQAAjZcAAI2ZAACNmgAAjZsAAI2dAACNngAAjd0AAI3fAACN4QAAjeMAAI3mAACN5wAAjegAAI3pAACN6gAAjewAAI3uAACN7wAAjfAAAI3yAACN8wAAjjIAAI40AACONgAAjjgAAI47AACOPAAAjj0AAI4+AACOPwAAjkEAAI5DAACORAAAjkUAAI5HAACOSAAAjocAAI6JAACOiwAAjo0AAI6QAACOkQAAjpIAAI6TAACOlAAAjpYAAI6YAACOmQAAjpoAAI6cAACOnQAAjtwAAI7eAACO4AAAjuIAAI7lAACO5gAAjucAAI7oAACO6QAAjusAAI7tAACO7gAAju8AAI7xAACO8gAAjxcAAI87AACPYgAAj4YAAI+JAACPiwAAj40AAI+PAACPkQAAj5MAAI+UAACPlwAAj6QAAI+zAACPtQAAj7cAAI+5AACPuwAAj70AAI+/AACPwQAAj9AAAI/TAACP1gAAj9kAAI/cAACP3wAAj+IAAI/lAACP5wAAkCYAAJAoAACQKgAAkCwAAJAvAACQMAAAkDEAAJAyAACQMwAAkDUAAJA3AACQOAAAkDkAAJA7AACQPAAAkHsAAJB9AACQfwAAkIEAAJCEAACQhQAAkIYAAJCHAACQiAAAkIoAAJCMAACQjQAAkI4AAJCQAACQkQAAkNAAAJDSAACQ1AAAkNYAAJDZAACQ2gAAkNsAAJDcAACQ3QAAkN8AAJDhAACQ4gAAkOMAAJDlAACQ5gAAkSUAAJEnAACRKgAAkSwAAJEvAACRMAAAkTEAAJEyAACRMwAAkTUAAJE3AACROAAAkTkAAJE7AACRPAAAkXsAAJF9AACRfwAAkYEAAJGEAACRhQAAkYYAAJGHAACRiAAAkYoAAJGMAACRjQAAkY4AAJGQAACRkQAAkdAAAJHSAACR1AAAkdYAAJHZAACR2gAAkdsAAJHcAACR3QAAkd8AAJHhAACR4gAAkeMAAJHlAACR5gAAkiUAAJInAACSKQAAkisAAJIuAACSLwAAkjAAAJIxAACSMgAAkjQAAJI2AACSNwAAkjgAAJI6AACSOwAAkoYAAJKpAACSyQAAkukAAJLrAACS7QAAku8AAJLxAACS8wAAkvQAAJL1AACS+AAAkvkAAJL7AACS/AAAkv4AAJMAAACTAQAAkwIAAJMFAACTBgAAkwsAAJMYAACTHQAAkx8AAJMhAACTJgAAkykAAJMsAACTLgAAk1MAAJN3AACTngAAk8IAAJPFAACTxwAAk8kAAJPLAACTzQAAk88AAJPQAACT0wAAk+AAAJPxAACT8wAAk/UAAJP3AACT+QAAk/sAAJP9AACT/wAAlAEAAJQSAACUFQAAlBgAAJQbAACUHgAAlCEAAJQkAACUJwAAlCoAAJQsAACUawAAlG0AAJRvAACUcQAAlHQAAJR1AACUdgAAlHcAAJR4AACUegAAlHwAAJR9AACUfgAAlIAAAJSBAACUwAAAlMIAAJTEAACUxgAAlMkAAJTKAACUywAAlMwAAJTNAACUzwAAlNEAAJTSAACU0wAAlNUAAJTWAACVFQAAlRcAAJUaAACVHAAAlR8AAJUgAACVIQAAlSIAAJUjAACVJQAAlScAAJUoAACVKQAAlSsAAJUsAACVOQAAlToAAJU7AACVPQAAlXwAAJV+AACVgAAAlYIAAJWFAACVhgAAlYcAAJWIAACViQAAlYsAAJWNAACVjgAAlY8AAJWRAACVkgAAldEAAJXTAACV1QAAldcAAJXaAACV2wAAldwAAJXdAACV3gAAleAAAJXiAACV4wAAleQAAJXmAACV5wAAliYAAJYoAACWKgAAliwAAJYvAACWMAAAljEAAJYyAACWMwAAljUAAJY3AACWOAAAljkAAJY7AACWPAAAlnsAAJZ9AACWfwAAloEAAJaEAACWhQAAloYAAJaHAACWiAAAlooAAJaMAACWjQAAlo4AAJaQAACWkQAAltAAAJbSAACW1AAAltYAAJbZAACW2gAAltsAAJbcAACW3QAAlt8AAJbhAACW4gAAluMAAJblAACW5gAAlwsAAJcvAACXVgAAl3oAAJd9AACXfwAAl4EAAJeDAACXhQAAl4cAAJeIAACXiwAAl5gAAJenAACXqQAAl6sAAJetAACXrwAAl7EAAJezAACXtQAAl8QAAJfHAACXygAAl80AAJfQAACX0wAAl9YAAJfZAACX2wAAmBoAAJgcAACYHgAAmCAAAJgjAACYJAAAmCUAAJgmAACYJwAAmCkAAJgrAACYLAAAmC0AAJgvAACYMAAAmG8AAJhxAACYcwAAmHUAAJh4AACYeQAAmHoAAJh7AACYfAAAmH4AAJiAAACYgQAAmIIAAJiEAACYhQAAmMQAAJjGAACYyAAAmMoAAJjNAACYzgAAmM8AAJjQAACY0QAAmNMAAJjVAACY1gAAmNcAAJjZAACY2gAAmRkAAJkbAACZHgAAmSAAAJkjAACZJAAAmSUAAJkmAACZJwAAmSkAAJkrAACZLAAAmS0AAJkvAACZMAAAmW8AAJlxAACZcwAAmXUAAJl4AACZeQAAmXoAAJl7AACZfAAAmX4AAJmAAACZgQAAmYIAAJmEAACZhQAAmcQAAJnGAACZyAAAmcoAAJnNAACZzgAAmc8AAJnQAACZ0QAAmdMAAJnVAACZ1gAAmdcAAJnZAACZ2gAAmhkAAJobAACaHQAAmh8AAJoiAACaIwAAmiQAAJolAACaJgAAmigAAJoqAACaKwAAmiwAAJouAACaLwAAmnoAAJqdAACavQAAmt0AAJrfAACa4QAAmuMAAJrlAACa5wAAmugAAJrpAACa7AAAmu0AAJrvAACa8AAAmvIAAJr0AACa9QAAmvYAAJr5AACa+gAAmv8AAJsMAACbEQAAmxMAAJsVAACbGgAAmx0AAJsgAACbIgAAm0cAAJtrAACbkgAAm7YAAJu5AACbuwAAm70AAJu/AACbwQAAm8MAAJvEAACbxwAAm9QAAJvlAACb5wAAm+kAAJvrAACb7QAAm+8AAJvxAACb8wAAm/UAAJwGAACcCQAAnAwAAJwPAACcEgAAnBUAAJwYAACcGwAAnB4AAJwgAACcXwAAnGEAAJxjAACcZQAAnGgAAJxpAACcagAAnGsAAJxsAACcbgAAnHAAAJxxAACccgAAnHQAAJx1AACctAAAnLYAAJy4AACcugAAnL0AAJy+AACcvwAAnMAAAJzBAACcwwAAnMUAAJzGAACcxwAAnMkAAJzKAACdCQAAnQsAAJ0OAACdEAAAnRMAAJ0UAACdFQAAnRYAAJ0XAACdGQAAnRsAAJ0cAACdHQAAnR8AAJ0gAACdLQAAnS4AAJ0vAACdMQAAnXAAAJ1yAACddAAAnXYAAJ15AACdegAAnXsAAJ18AACdfQAAnX8AAJ2BAACdggAAnYMAAJ2FAACdhgAAncUAAJ3HAACdyQAAncsAAJ3OAACdzwAAndAAAJ3RAACd0gAAndQAAJ3WAACd1wAAndgAAJ3aAACd2wAAnhoAAJ4cAACeHgAAniAAAJ4jAACeJAAAniUAAJ4mAACeJwAAnikAAJ4rAACeLAAAni0AAJ4vAACeMAAAnm8AAJ5xAACecwAAnnUAAJ54AACeeQAAnnoAAJ57AACefAAAnn4AAJ6AAACegQAAnoIAAJ6EAACehQAAnsQAAJ7GAACeyAAAnsoAAJ7NAACezgAAns8AAJ7QAACe0QAAntMAAJ7VAACe1gAAntcAAJ7ZAACe2gAAnv8AAJ8jAACfSgAAn24AAJ9xAACfcwAAn3UAAJ93AACfeQAAn3sAAJ98AACffwAAn4wAAJ+bAACfnQAAn58AAJ+hAACfowAAn6UAAJ+nAACfqQAAn7gAAJ+7AACfvgAAn8EAAJ/EAACfxwAAn8oAAJ/NAACfzwAAoA4AAKAQAACgEgAAoBQAAKAXAACgGAAAoBkAAKAaAACgGwAAoB0AAKAfAACgIAAAoCEAAKAjAACgJAAAoGMAAKBlAACgZwAAoGkAAKBsAACgbQAAoG4AAKBvAACgcAAAoHIAAKB0AACgdQAAoHYAAKB4AACgeQAAoLgAAKC6AACgvAAAoL4AAKDBAACgwgAAoMMAAKDEAACgxQAAoMcAAKDJAACgygAAoMsAAKDNAACgzgAAoQ0AAKEPAAChEQAAoRMAAKEWAAChFwAAoRgAAKEZAAChGgAAoRwAAKEeAAChHwAAoSAAAKEiAAChIwAAoWIAAKFkAAChZgAAoWgAAKFrAAChbAAAoW0AAKFuAAChbwAAoXEAAKFzAAChdAAAoXUAAKF3AACheAAAobcAAKG5AAChuwAAob0AAKHAAAChwQAAocIAAKHDAAChxAAAocYAAKHIAAChyQAAocoAAKHMAAChzQAAogwAAKIOAACiEAAAohIAAKIVAACiFgAAohcAAKIYAACiGQAAohsAAKIdAACiHgAAoh8AAKIhAACiIgAAom0AAKKQAACisAAAotAAAKLSAACi1AAAotYAAKLYAACi2gAAotsAAKLcAACi3wAAouAAAKLiAACi4wAAouUAAKLnAACi6AAAoukAAKLsAACi7QAAovIAAKL/AACjBAAAowYAAKMIAACjDQAAoxAAAKMTAACjFQAAozoAAKNeAACjhQAAo6kAAKOsAACjrgAAo7AAAKOyAACjtAAAo7YAAKO3AACjugAAo8cAAKPYAACj2gAAo9wAAKPeAACj4AAAo+IAAKPkAACj5gAAo+gAAKP5AACj/AAAo/8AAKQCAACkBQAApAgAAKQLAACkDgAApBEAAKQTAACkUgAApFQAAKRWAACkWAAApFsAAKRcAACkXQAApF4AAKRfAACkYQAApGMAAKRkAACkZQAApGcAAKRoAACkpwAApKkAAKSrAACkrQAApLAAAKSxAACksgAApLMAAKS0AACktgAApLgAAKS5AACkugAApLwAAKS9AACk/AAApP4AAKUBAAClAwAApQYAAKUHAAClCAAApQkAAKUKAAClDAAApQ4AAKUPAAClEAAApRIAAKUTAAClIAAApSEAAKUiAAClJAAApWMAAKVlAAClZwAApWkAAKVsAAClbQAApW4AAKVvAAClcAAApXIAAKV0AACldQAApXYAAKV4AACleQAApbgAAKW6AAClvAAApb4AAKXBAAClwgAApcMAAKXEAAClxQAApccAAKXJAAClygAApcsAAKXNAAClzgAApg0AAKYPAACmEQAAphMAAKYWAACmFwAAphgAAKYZAACmGgAAphwAAKYeAACmHwAApiAAAKYiAACmIwAApmIAAKZkAACmZgAApmgAAKZrAACmbAAApm0AAKZuAACmbwAApnEAAKZzAACmdAAApnUAAKZ3AACmeAAAprcAAKa5AACmuwAApr0AAKbAAACmwQAApsIAAKbDAACmxAAApsYAAKbIAACmyQAApsoAAKbMAACmzQAApvIAAKcWAACnPQAAp2EAAKdkAACnZgAAp2gAAKdqAACnbAAAp24AAKdvAACncgAAp38AAKeOAACnkAAAp5IAAKeUAACnlgAAp5gAAKeaAACnnAAAp6sAAKeuAACnsQAAp7QAAKe3AACnugAAp70AAKfAAACnwgAAqAEAAKgDAACoBQAAqAcAAKgKAACoCwAAqAwAAKgNAACoDgAAqBAAAKgSAACoEwAAqBQAAKgWAACoFwAAqFYAAKhYAACoWgAAqFwAAKhfAACoYAAAqGEAAKhiAACoYwAAqGUAAKhnAACoaAAAqGkAAKhrAACobAAAqKsAAKitAACorwAAqLEAAKi0AACotQAAqLYAAKi3AACouAAAqLoAAKi8AACovQAAqL4AAKjAAACowQAAqQAAAKkCAACpBAAAqQYAAKkJAACpCgAAqQsAAKkMAACpDQAAqQ8AAKkRAACpEgAAqRMAAKkVAACpFgAAqVUAAKlXAACpWQAAqVsAAKleAACpXwAAqWAAAKlhAACpYgAAqWQAAKlmAACpZwAAqWgAAKlqAACpawAAqaoAAKmsAACprgAAqbAAAKmzAACptAAAqbUAAKm2AACptwAAqbkAAKm7AACpvAAAqb0AAKm/AACpwAAAqf8AAKoBAACqAwAAqgUAAKoIAACqCQAAqgoAAKoLAACqDAAAqg4AAKoQAACqEQAAqhIAAKoUAACqFQAAqmAAAKqDAACqowAAqsMAAKrFAACqxwAAqskAAKrLAACqzQAAqs4AAKrPAACq0gAAqtMAAKrVAACq1gAAqtgAAKraAACq2wAAqtwAAKrfAACq4AAAqukAAKr2AACq+wAAqv0AAKr/AACrBAAAqwcAAKsKAACrDAAAqzEAAKtVAACrfAAAq6AAAKujAACrpQAAq6cAAKupAACrqwAAq60AAKuuAACrsQAAq74AAKvPAACr0QAAq9MAAKvVAACr1wAAq9kAAKvbAACr3QAAq98AAKvwAACr8wAAq/YAAKv5AACr/AAAq/8AAKwCAACsBQAArAgAAKwKAACsSQAArEsAAKxNAACsTwAArFIAAKxTAACsVAAArFUAAKxWAACsWAAArFoAAKxbAACsXAAArF4AAKxfAACsngAArKAAAKyiAACspAAArKcAAKyoAACsqQAArKoAAKyrAACsrQAArK8AAKywAACssQAArLMAAKy0AACs8wAArPUAAKz4AACs+gAArP0AAKz+AACs/wAArQAAAK0BAACtAwAArQUAAK0GAACtBwAArQkAAK0KAACtFwAArRgAAK0ZAACtGwAArVoAAK1cAACtXgAArWAAAK1jAACtZAAArWUAAK1mAACtZwAArWkAAK1rAACtbAAArW0AAK1vAACtcAAAra8AAK2xAACtswAArbUAAK24AACtuQAArboAAK27AACtvAAArb4AAK3AAACtwQAArcIAAK3EAACtxQAArgQAAK4GAACuCAAArgoAAK4NAACuDgAArg8AAK4QAACuEQAArhMAAK4VAACuFgAArhcAAK4ZAACuGgAArlkAAK5bAACuXQAArl8AAK5iAACuYwAArmQAAK5lAACuZgAArmgAAK5qAACuawAArmwAAK5uAACubwAArq4AAK6wAACusgAArrQAAK63AACuuAAArrkAAK66AACuuwAArr0AAK6/AACuwAAArsEAAK7DAACuxAAArukAAK8NAACvNAAAr1gAAK9bAACvXQAAr18AAK9hAACvYwAAr2UAAK9mAACvaQAAr3YAAK+DAACvhQAAr4cAAK+JAACviwAAr40AAK+PAACvnAAAr58AAK+iAACvpQAAr6gAAK+rAACvrgAAr7AAAK/vAACv8QAAr/QAAK/2AACv+QAAr/oAAK/7AACv/AAAr/0AAK//AACwAQAAsAIAALADAACwBQAAsAYAALBJAACwbQAAsJEAALC0AACw2wAAsPsAALEiAACxSQAAsWkAALGNAACxsQAAsbMAALG2AACxuAAAsboAALG8AACxvwAAscIAALHEAACxxgAAsckAALHLAACxzQAAsdAAALHTAACx1AAAsdkAALHmAACx6QAAsesAALHuAACx8QAAsfMAALIYAACyPAAAsmMAALKHAACyigAAsowAALKOAACykAAAspIAALKUAACylQAAspgAALKlAACyuAAAsroAALK8AACyvgAAssAAALLCAACyxAAAssYAALLIAACyygAAst0AALLgAACy4wAAsuYAALLpAACy7AAAsu8AALLyAACy9QAAsvgAALL6AACzOQAAszsAALM+AACzQAAAs0MAALNEAACzRQAAs0YAALNHAACzSQAAs0sAALNMAACzTQAAs08AALNQAACzWQAAs1oAALNcAACzmwAAs50AALOfAACzoQAAs6QAALOlAACzpgAAs6cAALOoAACzqgAAs6wAALOtAACzrgAAs7AAALOxAACz8AAAs/IAALP1AACz9wAAs/oAALP7AACz/AAAs/0AALP+AAC0AAAAtAIAALQDAAC0BAAAtAYAALQHAAC0EAAAtBEAALQTAAC0UgAAtFQAALRWAAC0WAAAtFsAALRcAAC0XQAAtF4AALRfAAC0YQAAtGMAALRkAAC0ZQAAtGcAALRoAAC0pwAAtKkAALSsAAC0rgAAtLEAALSyAAC0swAAtLQAALS1AAC0twAAtLkAALS6AAC0uwAAtL0AALS+AAC0xwAAtMgAALTKAAC1CQAAtQsAALUNAAC1DwAAtRIAALUTAAC1FAAAtRUAALUWAAC1GAAAtRoAALUbAAC1HAAAtR4AALUfAAC1XgAAtWAAALVjAAC1ZQAAtWgAALVpAAC1agAAtWsAALVsAAC1bgAAtXAAALVxAAC1cgAAtXQAALV1AAC1ggAAtYMAALWEAAC1hgAAtcUAALXHAAC1yQAAtcsAALXOAAC1zwAAtdAAALXRAAC10gAAtdQAALXWAAC11wAAtdgAALXaAAC12wAAthoAALYcAAC2HgAAtiAAALYjAAC2JAAAtiUAALYmAAC2JwAAtikAALYrAAC2LAAAti0AALYvAAC2MAAAtj0AALZkAAC2ZwAAtmoAALZsAAC2bwAAtnIAALZ1AAC2eAAAtnsAALZ+AAC2gQAAtoQAALaHAAC2iQAAtowAALaPAAC2kgAAtpQAALaXAAC2vgAAtsEAALbEAAC2xwAAtsoAALbNAAC20AAAttMAALbWAAC22QAAttwAALbfAAC24gAAtuUAALboAAC26wAAtu4AALbxAAC29AAAtvYAALb5AAC3AQAAtw8AALcWAAC3JAAAtyoAALcwAAC3OAAAt0MAALdNAAC3VgAAt2MAALd4AAC3ggAAt5YAALfhAAC4BAAAuCQAALhEAAC4RgAAuEgAALhKAAC4TAAAuE8AALhQAAC4UQAAuFQAALhVAAC4VwAAuFgAALhaAAC4XQAAuF4AALhfAAC4YgAAuGMAALhoAAC4dQAAuHoAALh8AAC4fgAAuIMAALiGAAC4iQAAuIsAALiwAAC41AAAuPsAALkfAAC5IgAAuSQAALkmAAC5KAAAuSoAALksAAC5LQAAuTAAALk9AAC5TgAAuVAAALlSAAC5VAAAuVYAALlYAAC5WgAAuVwAALleAAC5bwAAuXIAALl1AAC5eAAAuXsAALl+AAC5gQAAuYQAALmHAAC5iQAAucgAALnKAAC5zAAAuc4AALnRAAC50gAAudMAALnUAAC51QAAudcAALnZAAC52gAAudsAALndAAC53gAAuh0AALofAAC6IQAAuiMAALomAAC6JwAAuigAALopAAC6KgAAuiwAALouAAC6LwAAujAAALoyAAC6MwAAunIAALp0AAC6dwAAunkAALp8AAC6fQAAun4AALp/AAC6gAAAuoIAALqEAAC6hQAAuoYAALqIAAC6iQAAupYAALqXAAC6mAAAupoAALrZAAC62wAAut0AALrfAAC64gAAuuMAALrkAAC65QAAuuYAALroAAC66gAAuusAALrsAAC67gAAuu8AALsuAAC7MAAAuzIAALs0AAC7NwAAuzgAALs5AAC7OgAAuzsAALs9AAC7PwAAu0AAALtBAAC7QwAAu0QAALuDAAC7hQAAu4cAALuJAAC7jAAAu40AALuOAAC7jwAAu5AAALuSAAC7lAAAu5UAALuWAAC7mAAAu5kAALvYAAC72gAAu9wAALveAAC74QAAu+IAALvjAAC75AAAu+UAALvnAAC76QAAu+oAALvrAAC77QAAu+4AALwtAAC8LwAAvDEAALwzAAC8NgAAvDcAALw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TAADNFgAAzRkAAM0cAADNHwAAzSEAAM1gAADNYgAAzWQAAM1mAADNaQAAzWoAAM1rAADNbAAAzW0AAM1vAADNcQAAzXIAAM1zAADNdQAAzXYAAM21AADNtwAAzbkAAM27AADNvgAAzb8AAM3AAADNwQAAzcIAAM3EAADNxgAAzccAAM3IAADNygAAzcsAAM4KAADODAAAzg4AAM4QAADOEwAAzhQAAM4VAADOFgAAzhcAAM4ZAADOGwAAzhwAAM4dAADOHwAAziAAAM5fAADOYQAAzmMAAM5lAADOaAAAzmkAAM5qAADOawAAzmwAAM5uAADOcAAAznEAAM5yAADOdAAAznUAAM60AADOtgAAzrgAAM66AADOvQAAzr4AAM6/AADOwAAAzsEAAM7DAADOxQAAzsYAAM7HAADOyQAAzsoAAM8JAADPCwAAzw0AAM8PAADPEgAAzxMAAM8UAADPFQAAzxYAAM8YAADPGgAAzxsAAM8cAADPHgAAzx8AAM9eAADPYAAAz2IAAM9kAADPZwAAz2gAAM9pAADPagAAz2sAAM9tAADPbwAAz3AAAM9xAADPcwAAz3QAAM+/AADP4gAA0AIAANAiAADQJAAA0CYAANAoAADQKgAA0C0AANAuAADQLwAA0DIAANAzAADQNQAA0DYAANA4AADQOwAA0DwAANA9AADQQAAA0EEAANBKAADQVwAA0FwAANBeAADQYAAA0GUAANBoAADQawAA0G0AANCSAADQtgAA0N0AANEBAADRBAAA0QYAANEIAADRCgAA0QwAANEOAADRDwAA0RIAANEfAADRMAAA0TIAANE0AADRNgAA0TgAANE6AADRPAAA0T4AANFAAADRUQAA0VQAANFXAADRWgAA0V0AANFgAADRYwAA0WYAANFpAADRawAA0aoAANGsAADRrgAA0bAAANGzAADRtAAA0bUAANG2AADRtwAA0bkAANG7AADRvAAA0b0AANG/AADRwAAA0f8AANIBAADSAwAA0gUAANIIAADSCQAA0goAANILAADSDAAA0g4AANIQAADSEQAA0hIAANIUAADSFQAA0lQAANJWAADSWQAA0lsAANJeAADSXwAA0mAAANJhAADSYgAA0mQAANJmAADSZwAA0mgAANJqAADSawAA0ngAANJ5AADSegAA0nwAANK7AADSvQAA0r8AANLBAADSxAAA0sUAANLGAADSxwAA0sgAANLKAADSzAAA0s0AANLOAADS0AAA0tEAANMQAADTEgAA0xQAANMWAADTGQAA0xoAANMbAADTHAAA0x0AANMfAADTIQAA0yIAANMjAADTJQAA0yYAANNlAADTZwAA02kAANNrAADTbgAA028AANNwAADTcQAA03IAANN0AADTdgAA03cAANN4AADTegAA03sAANO6AADTvAAA074AANPAAADTwwAA08QAANPFAADTxgAA08cAANPJAADTywAA08wAANPNAADTzwAA09AAANQPAADUEQAA1BMAANQVAADUGAAA1BkAANQaAADUGwAA1BwAANQeAADUIAAA1CEAANQiAADUJAAA1CUAANRKAADUbgAA1JUAANS5AADUvAAA1L4AANTAAADUwgAA1MQAANTGAADUxwAA1MoAANTXAADU5gAA1OgAANTqAADU7AAA1O4AANTwAADU8gAA1PQAANUDAADVBgAA1QkAANUMAADVDwAA1RIAANUVAADVGAAA1RoAANVZAADVWwAA1V0AANVfAADVYgAA1WMAANVkAADVZQAA1WYAANVoAADVagAA1WsAANVsAADVbgAA1W8AANWuAADVsAAA1bIAANW0AADVtwAA1bgAANW5AADVugAA1bsAANW9AADVvwAA1cAAANXBAADVwwAA1cQAANYDAADWBQAA1gcAANYJAADWDAAA1g0AANYOAADWDwAA1hAAANYSAADWFAAA1hUAANYWAADWGAAA1hkAANZYAADWWgAA1l0AANZfAADWYgAA1mMAANZkAADWZQAA1mYAANZoAADWagAA1msAANZsAADWbgAA1m8AANayAADW1gAA1voAANcdAADXRAAA12QAANeLAADXsgAA19IAANf2AADYGgAA2BwAANgfAADYIQAA2CMAANglAADYKAAA2CsAANgtAADYLwAA2DIAANg0AADYNgAA2DkAANg8AADYPQAA2EYAANhTAADYVgAA2FgAANhbAADYXgAA2GAAANiFAADYqQAA2NAAANj0AADY9wAA2PkAANj7AADY/QAA2P8AANkBAADZAgAA2QUAANkSAADZJQAA2ScAANkpAADZKwAA2S0AANkvAADZMQAA2TMAANk1AADZNwAA2UoAANlNAADZUAAA2VMAANlWAADZWQAA2VwAANlfAADZYgAA2WUAANlnAADZpgAA2agAANmrAADZrQAA2bAAANmxAADZsgAA2bMAANm0AADZtgAA2bgAANm5AADZugAA2bwAANm9AADZxgAA2ccAANnJAADaCAAA2goAANoMAADaDgAA2hEAANoSAADaEwAA2hQAANoVAADaFwAA2hkAANoaAADaGwAA2h0AANoeAADaXQAA2l8AANpiAADaZAAA2mcAANpoAADaaQAA2moAANprAADabQAA2m8AANpwAADacQAA2nMAANp0AADafQAA2n4AANqAAADavwAA2sEAANrDAADaxQAA2sgAANrJAADaygAA2ssAANrMAADazgAA2tAAANrRAADa0gAA2tQAANrVAADbFAAA2xYAANsZAADbGwAA2x4AANsfAADbIAAA2yEAANsiAADbJAAA2yYAANsnAADbKAAA2yoAANsrAADbNAAA2zUAANs3AADbdgAA23gAANt6AADbfAAA238AANuAAADbgQAA24IAANuDAADbhQAA24cAANuIAADbiQAA24sAANuMAADbywAA280AANvQAADb0gAA29UAANvWAADb1wAA29gAANvZAADb2wAA290AANveAADb3wAA2+EAANviAADb7wAA2/AAANvxAADb8wAA3DIAANw0AADcNgAA3DgAANw7AADcPAAA3D0AANw+AADcPwAA3EEAANxDAADcRAAA3EUAANxHAADcSAAA3IcAANyJAADcjAAA3I4AANyRAADckgAA3JMAANyUAADclQAA3JcAANyZAADcmgAA3JsAANydAADcngAA3LAAANy9AADcxgAA3MkAANzMAADczgAA3NEAANzaAADc3QAA3OAAANzjAADc5gAA3OgAANzuAADdOQAA3VwAAN18AADdnAAA3Z4AAN2gAADdogAA3aQAAN2nAADdqAAA3akAAN2sAADdrQAA3a8AAN2wAADdsgAA3bUAAN22AADdtwAA3boAAN27AADdxAAA3dEAAN3WAADd2AAA3doAAN3fAADd4gAA3eUAAN3nAADeDAAA3jAAAN5XAADeewAA3n4AAN6AAADeggAA3oQAAN6GAADeiAAA3okAAN6MAADemQAA3qoAAN6sAADergAA3rAAAN6yAADetAAA3rYAAN64AADeugAA3ssAAN7OAADe0QAA3tQAAN7XAADe2gAA3t0AAN7gAADe4wAA3uUAAN8kAADfJgAA3ygAAN8qAADfLQAA3y4AAN8vAADfMAAA3zEAAN8zAADfNQAA3zYAAN83AADfOQAA3zoAAN95AADfewAA330AAN9/AADfggAA34MAAN+EAADfhQAA34YAAN+IAADfigAA34sAAN+MAADfjgAA348AAN/OAADf0AAA39MAAN/VAADf2AAA39kAAN/aAADf2wAA39wAAN/eAADf4AAA3+EAAN/iAADf5AAA3+UAAN/yAADf8wAA3/QAAN/2AADgNQAA4DcAAOA5AADgOwAA4D4AAOA/AADgQAAA4EEAAOBCAADgRAAA4EYAAOBHAADgSAAA4EoAAOBLAADgigAA4IwAAOCOAADgkAAA4JMAAOCUAADglQAA4JYAAOCXAADgmQAA4JsAAOCcAADgnQAA4J8AAOCgAADg3wAA4OEAAODjAADg5QAA4OgAAODpAADg6gAA4OsAAODsAADg7gAA4PAAAODxAADg8gAA4PQAAOD1AADhNAAA4TYAAOE4AADhOgAA4T0AAOE+AADhPwAA4UAAAOFBAADhQwAA4UUAAOFGAADhRwAA4UkAAOFKAADhiQAA4YsAAOGNAADhjwAA4ZIAAOGTAADhlAAA4ZUAAOGWAADhmAAA4ZoAAOGbAADhnAAA4Z4AAOGfAADhxAAA4egAAOIPAADiMwAA4jYAAOI4AADiOgAA4jwAAOI+AADiQAAA4kEAAOJEAADiUQAA4mAAAOJiAADiZAAA4mYAAOJoAADiagAA4mwAAOJuAADifQAA4oAAAOKDAADihgAA4okAAOKMAADijwAA4pIAAOKUAADi0wAA4tUAAOLXAADi2QAA4twAAOLdAADi3gAA4t8AAOLgAADi4gAA4uQAAOLlAADi5gAA4ugAAOLpAADjKAAA4yoAAOMsAADjLgAA4zEAAOMyAADjMwAA4zQAAOM1AADjNwAA4zkAAOM6AADjOwAA4z0AAOM+AADjfQAA438AAOOBAADjgwAA44YAAOOHAADjiAAA44kAAOOKAADjjAAA444AAOOPAADjkAAA45IAAOOTAADj0gAA49QAAOPWAADj2AAA49sAAOPcAADj3QAA494AAOPfAADj4QAA4+MAAOPkAADj5QAA4+cAAOPoAADkJwAA5CkAAOQrAADkLQAA5DAAAOQxAADkMgAA5DMAAOQ0AADkNgAA5DgAAOQ5AADkOgAA5DwAAOQ9AADkfAAA5H4AAOSAAADkggAA5IUAAOSGAADkhwAA5IgAAOSJAADkiwAA5I0AAOSOAADkjwAA5JEAAOSSAADk0QAA5NMAAOTVAADk1wAA5NoAAOTbAADk3AAA5N0AAOTeAADk4AAA5OIAAOTjAADk5AAA5OYAAOTnAADlMgAA5VUAAOV1AADllQAA5ZcAAOWZAADlmwAA5Z0AAOWgAADloQAA5aIAAOWlAADlpgAA5agAAOWpAADlqwAA5a4AAOWvAADlsAAA5bMAAOW0AADluQAA5cYAAOXLAADlzQAA5c8AAOXUAADl1wAA5doAAOXcAADmAQAA5iUAAOZMAADmcAAA5nMAAOZ1AADmdwAA5nkAAOZ7AADmfQAA5n4AAOaBAADmjgAA5p8AAOahAADmowAA5qUAAOanAADmqQAA5qsAAOatAADmrwAA5sAAAObDAADmxgAA5skAAObMAADmzwAA5tIAAObVAADm2AAA5toAAOcZAADnGwAA5x0AAOcfAADnIgAA5yMAAOckAADnJQAA5yYAAOcoAADnKgAA5ysAAOcsAADnLgAA5y8AAOduAADncAAA53IAAOd0AADndwAA53gAAOd5AADnegAA53sAAOd9AADnfwAA54AAAOeBAADngwAA54QAAOfDAADnxQAA58gAAOfKAADnzQAA584AAOfPAADn0AAA59EAAOfTAADn1QAA59YAAOfXAADn2QAA59oAAOfnAADn6AAA5+kAAOfrAADoKgAA6CwAAOguAADoMAAA6DMAAOg0AADoNQAA6DYAAOg3AADoOQAA6DsAAOg8AADoPQAA6D8AAOhAAADofwAA6IEAAOiDAADohQAA6IgAAOiJAADoigAA6IsAAOiMAADojgAA6JAAAOiRAADokgAA6JQAAOiVAADo1AAA6NYAAOjYAADo2gAA6N0AAOjeAADo3wAA6OAAAOjhAADo4wAA6OUAAOjmAADo5wAA6OkAAOjqAADpKQAA6SsAAOktAADpLwAA6TIAAOkzAADpNAAA6TUAAOk2AADpOAAA6ToAAOk7AADpPAAA6T4AAOk/AADpfgAA6YAAAOmCAADphAAA6YcAAOmIAADpiQAA6YoAAOmLAADpjQAA6Y8AAOmQAADpkQAA6ZMAAOmUAADpuQAA6d0AAOoEAADqKAAA6isAAOotAADqLwAA6jEAAOozAADqNQAA6jYAAOo5AADqRgAA6lUAAOpXAADqWQAA6lsAAOpdAADqXwAA6mEAAOpjAADqcgAA6nUAAOp4AADqewAA6n4AAOqBAADqhAAA6ocAAOqJAADqyAAA6soAAOrMAADqzgAA6tEAAOrSAADq0wAA6tQAAOrVAADq1wAA6tkAAOraAADq2wAA6t0AAOreAADrHQAA6x8AAOshAADrIwAA6yYAAOsnAADrKAAA6ykAAOsqAADrLAAA6y4AAOsvAADrMAAA6zIAAOszAADrcgAA63QAAOt2AADreAAA63sAAOt8AADrfQAA634AAOt/AADrgQAA64MAAOuEAADrhQAA64cAAOuIAADrxwAA68kAAOvLAADrzQAA69AAAOvRAADr0gAA69MAAOvUAADr1gAA69gAAOvZAADr2gAA69wAAOvdAADsHAAA7B4AAOwgAADsIgAA7CUAAOwmAADsJwAA7CgAAOwpAADsKwAA7C0AAOwuAADsLwAA7DEAAOwyAADscQAA7HMAAOx1AADsdwAA7HoAAOx7AADsfAAA7H0AAOx+AADsgAAA7IIAAOyDAADshAAA7IYAAOyHAADsxgAA7MgAAOzKAADszAAA7M8AAOzQAADs0QAA7NIAAOzTAADs1QAA7NcAAOzYAADs2QAA7NsAAOzcAADtJwAA7UoAAO1qAADtigAA7YwAAO2OAADtkAAA7ZIAAO2VAADtlgAA7ZcAAO2aAADtmwAA7Z0AAO2eAADtoAAA7aIAAO2jAADtpAAA7acAAO2oAADtrQAA7boAAO2/AADtwQAA7cMAAO3IAADtywAA7c4AAO3QAADt9QAA7hkAAO5AAADuZAAA7mcAAO5pAADuawAA7m0AAO5vAADucQAA7nIAAO51AADuggAA7pMAAO6VAADulwAA7pkAAO6bAADunQAA7p8AAO6hAADuowAA7rQAAO63AADuugAA7r0AAO7AAADuwwAA7sYAAO7JAADuzAAA7s4AAO8NAADvDwAA7xEAAO8TAADvFgAA7xcAAO8YAADvGQAA7xoAAO8cAADvHgAA7x8AAO8gAADvIgAA7yMAAO9iAADvZAAA72YAAO9oAADvawAA72wAAO9tAADvbgAA728AAO9xAADvcwAA73QAAO91AADvdwAA73gAAO+3AADvuQAA77wAAO++AADvwQAA78IAAO/DAADvxAAA78UAAO/HAADvyQAA78oAAO/LAADvzQAA784AAO/bAADv3AAA790AAO/fAADwHgAA8CAAAPAiAADwJAAA8CcAAPAoAADwKQAA8CoAAPArAADwLQAA8C8AAPAwAADwMQAA8DMAAPA0AADwcwAA8HUAAPB3AADweQAA8HwAAPB9AADwfgAA8H8AAPCAAADwggAA8IQAAPCFAADwhgAA8IgAAPCJAADwyAAA8MoAAPDMAADwzgAA8NEAAPDSAADw0wAA8NQAAPDVAADw1wAA8NkAAPDaAADw2wAA8N0AAPDeAADxHQAA8R8AAPEhAADxIwAA8SYAAPEnAADxKAAA8SkAAPEqAADxLAAA8S4AAPEvAADxMAAA8TIAAPEzAADxcgAA8XQAAPF2AADxeAAA8XsAAPF8AADxfQAA8X4AAPF/AADxgQAA8YMAAPGEAADxhQAA8YcAAPGIAADxrQAA8dEAAPH4AADyHAAA8h8AAPIhAADyIwAA8iUAAPInAADyKQAA8ioAAPItAADyOgAA8kkAAPJLAADyTQAA8k8AAPJRAADyUwAA8lUAAPJXAADyZgAA8mkAAPJsAADybwAA8nIAAPJ1AADyeAAA8nsAAPJ9AADyvAAA8r4AAPLAAADywgAA8sUAAPLGAADyxwAA8sgAAPLJAADyywAA8s0AAPLOAADyzwAA8tEAAPLSAADzEQAA8xMAAPMVAADzFwAA8xoAAPMbAADzHAAA8x0AAPMeAADzIAAA8yIAAPMjAADzJAAA8yYAAPMnAADzZgAA82gAAPNqAADzbAAA828AAPNwAADzcQAA83IAAPNzAADzdQAA83cAAPN4AADzeQAA83sAAPN8AADzuwAA870AAPO/AADzwQAA88QAAPPFAADzxgAA88cAAPPIAADzygAA88wAAPPNAADzzgAA89AAAPPRAAD0EAAA9BIAAPQUAAD0FgAA9BkAAPQaAAD0GwAA9BwAAPQdAAD0HwAA9CEAAPQiAAD0IwAA9CUAAPQmAAD0ZQAA9GcAAPRpAAD0awAA9G4AAPRvAAD0cAAA9HEAAPRyAAD0dAAA9HYAAPR3AAD0eAAA9HoAAPR7AAD0ugAA9LwAAPS+AAD0wAAA9MMAAPTEAAD0xQAA9MYAAPTHAAD0yQAA9MsAAPT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LAAERTAABEU0AARFPAAERUQABEVIAARFTAAERVQABEVYAARFjAAERZAABEWUAARFnAAERpgABEagAARGqAAERrAABEa8AARGwAAERsQABEbIAARGzAAERtQABEbcAARG4AAERuQABEbsAARG8AAER+wABEf0AARH/AAESAQABEgQAARIFAAESBgABEgcAARIIAAESCgABEgwAARINAAESDgABEhAAARIRAAESUAABElIAARJUAAESVgABElkAARJaAAESWwABElwAARJdAAESXwABEmEAARJiAAESYwABEmUAARJmAAESpQABEqcAARKpAAESqwABEq4AARKvAAESsAABErEAARKyAAEStAABErYAARK3AAESuAABEroAARK7AAES+gABEvwAARL+AAETAAABEwMAARMEAAETBQABEwYAARMHAAETCQABEwsAARMMAAETDQABEw8AARMQAAETNQABE1kAAROAAAETpAABE6cAAROpAAETqwABE60AAROvAAETsQABE7IAARO1AAETwgABE9EAARPTAAET1QABE9cAARPZAAET2wABE90AARPfAAET7gABE/EAARP0AAET9wABE/oAARP9AAEUAAABFAMAARQFAAEURAABFEYAARRIAAEUSgABFE0AARROAAEUTwABFFAAARRRAAEUUwABFFUAARRWAAEUVwABFFkAARRaAAEUmQABFJsAARSdAAEUnwABFKIAARSjAAEUpAABFKUAARSmAAEUqAABFKoAARSrAAEUrAABFK4AARSvAAEU7gABFPAAARTyAAEU9AABFPcAART4AAEU+QABFPoAART7AAEU/QABFP8AARUAAAEVAQABFQMAARUEAAEVQwABFUUAARVHAAEVSQABFUwAARVNAAEVTgABFU8AARVQAAEVUgABFVQAARVVAAEVVgABFVgAARVZAAEVmAABFZoAARWcAAEVngABFaEAARWiAAEVowABFaQAARWlAAEVpwABFakAARWqAAEVqwABFa0AARWuAAEV7QABFe8AARXxAAEV8wABFfYAARX3AAEV+AABFfkAARX6AAEV/AABFf4AARX/AAEWAAABFgIAARYDAAEWQgABFkQAARZGAAEWSAABFksAARZMAAEWTQABFk4AARZPAAEWUQABFlMAARZUAAEWVQABFlcAARZYAAEWowABFsYAARbmAAEXBgABFwgAARcKAAEXDAABFw4AARcRAAEXEgABFxMAARcWAAEXFwABFxkAARcaAAEXHAABFx8AARcgAAEXIQABFyQAARclAAEXKgABFzcAARc8AAEXPgABF0AAARdFAAEXSAABF0sAARdNAAEXcgABF5YAARe9AAEX4QABF+QAARfmAAEX6AABF+oAARfsAAEX7gABF+8AARfyAAEX/wABGBAAARgSAAEYFAABGBYAARgYAAEYGgABGBwAARgeAAEYIAABGDEAARg0AAEYNwABGDoAARg9AAEYQAABGEMAARhGAAEYSQABGEsAARiKAAEYjAABGI4AARiQAAEYkwABGJQAARiVAAEYlgABGJcAARiZAAEYmwABGJwAARidAAEYnwABGKAAARjfAAEY4QABGOMAARjlAAEY6AABGOkAARjqAAEY6wABGOwAARjuAAEY8AABGPEAARjyAAEY9AABGPUAARk0AAEZNgABGTkAARk7AAEZPgABGT8AARlAAAEZQQABGUIAARlEAAEZRgABGUcAARlIAAEZSgABGUsAARlYAAEZWQABGVoAARlcAAEZmwABGZ0AARmfAAEZoQABGaQAARmlAAEZpgABGacAARmoAAEZqgABGawAARmtAAEZrgABGbAAARmxAAEZ8AABGfIAARn0AAEZ9gABGfkAARn6AAEZ+wABGfwAARn9AAEZ/wABGgEAARoCAAEaAwABGgUAARoGAAEaRQABGkcAARpJAAEaSwABGk4AARpPAAEaUAABGlEAARpSAAEaVAABGlYAARpXAAEaWAABGloAARpbAAEamgABGpwAARqeAAEaoAABGqMAARqkAAEapQABGqYAARqnAAEaqQABGqsAARqsAAEarQABGq8AARqwAAEa7wABGvEAARrzAAEa9QABGvgAARr5AAEa+gABGvsAARr8AAEa/gABGwAAARsBAAEbAgABGwQAARsFAAEbKgABG04AARt1AAEbmQABG5wAARueAAEboAABG6IAARukAAEbpgABG6cAARuqAAEbtwABG8YAARvIAAEbygABG8wAARvOAAEb0AABG9IAARvUAAEb4wABG+YAARvpAAEb7AABG+8AARvyAAEb9QABG/gAARv6AAEcOQABHDsAARw+AAEcQAABHEMAARxEAAEcRQABHEYAARxHAAEcSQABHEsAARxMAAEcTQABHE8AARxQAAEcjwABHJEAARyTAAEclQABHJgAARyZAAEcmgABHJsAARycAAEcngABHKAAARyhAAEcogABHKQAARylAAEc5AABHOYAARzoAAEc6gABHO0AARzuAAEc7wABHPAAARzxAAEc8wABHPUAARz2AAEc9wABHPkAARz6AAEdOQABHTsAAR0+AAEdQAABHUMAAR1EAAEdRQABHUYAAR1HAAEdSQABHUsAAR1MAAEdTQABHU8AAR1QAAEdjwABHZEAAR2TAAEdlQABHZgAAR2ZAAEdmgABHZsAAR2cAAEdngABHaAAAR2hAAEdogABHaQAAR2lAAEd5AABHeYAAR3oAAEd6gABHe0AAR3uAAEd7wABHfAAAR3xAAEd8wABHfUAAR32AAEd9wABHfkAAR36AAEeOQABHjsAAR49AAEePwABHkIAAR5DAAEeRAABHkUAAR5GAAEeSAABHkoAAR5LAAEeTAABHk4AAR5PAAEemgABHr0AAR7dAAEe/QABHv8AAR8BAAEfAwABHwUAAR8IAAEfCQABHwoAAR8NAAEfDgABHxAAAR8RAAEfEwABHxYAAR8XAAEfGAABHxsAAR8cAAEfIQABHy4AAR8zAAEfNQABHzcAAR88AAEfPwABH0IAAR9EAAEfaQABH40AAR+0AAEf2AABH9sAAR/dAAEf3wABH+EAAR/jAAEf5QABH+YAAR/pAAEf9gABIAcAASAJAAEgCwABIA0AASAPAAEgEQABIBMAASAVAAEgFwABICgAASArAAEgLgABIDEAASA0AAEgNwABIDoAASA9AAEgQAABIEIAASCBAAEggwABIIUAASCHAAEgigABIIsAASCMAAEgjQABII4AASCQAAEgkgABIJMAASCUAAEglgABIJcAASDWAAEg2AABINoAASDcAAEg3wABIOAAASDhAAEg4gABIOMAASDlAAEg5wABIOgAASDpAAEg6wABIOwAASErAAEhLQABITAAASEyAAEhNQABITYAASE3AAEhOAABITkAASE7AAEhPQABIT4AASE/AAEhQQABIUIAASFPAAEhUAABIVEAASFTAAEhkgABIZQAASGWAAEhmAABIZsAASGcAAEhnQABIZ4AASGfAAEhoQABIaMAASGkAAEhpQABIacAASGoAAEh5wABIekAASHrAAEh7QABIfAAASHxAAEh8gABIfMAASH0AAEh9gABIfgAASH5AAEh+gABIfwAASH9AAEiPAABIj4AASJAAAEiQgABIkUAASJGAAEiRwABIkgAASJJAAEiSwABIk0AASJOAAEiTwABIlEAASJSAAEikQABIpMAASKVAAEilwABIpoAASKbAAEinAABIp0AASKeAAEioAABIqIAASKjAAEipAABIqYAASKnAAEi5gABIugAASLqAAEi7AABIu8AASLwAAEi8QABIvIAASLzAAEi9QABIvcAASL4AAEi+QABIvsAASL8AAEjIQABI0UAASNsAAEjkAABI5MAASOVAAEjlwABI5kAASObAAEjnQABI54AASOhAAEjrgABI70AASO/AAEjwQABI8MAASPFAAEjxwABI8kAASPLAAEj2gABI90AASPgAAEj4wABI+YAASPpAAEj7AABI+8AASPxAAEkMAABJDIAASQ0AAEkNgABJDkAASQ6AAEkOwABJDwAASQ9AAEkPwABJEEAASRCAAEkQwABJEUAASRGAAEkhQABJIcAASSJAAEkiwABJI4AASSPAAEkkAABJJEAASSSAAEklAABJJYAASSXAAEkmAABJJoAASSbAAEk2gABJNwAASTeAAEk4AABJOMAASTkAAEk5QABJOYAASTnAAEk6QABJOsAASTsAAEk7QABJO8AASTwAAElLwABJTEAASUzAAElNQABJTgAASU5AAElOgABJTsAASU8AAElPgABJUAAASVBAAElQgABJUQAASVFAAElhAABJYYAASWIAAEligABJY0AASWOAAEljwABJZAAASWRAAElkwABJZUAASWWAAEllwABJZkAASWaAAEl2QABJdsAASXdAAEl3wABJeIAASXjAAEl5AABJeUAASXmAAEl6AABJeoAASXrAAEl7AABJe4AASXvAAEmLgABJjAAASYyAAEmNAABJjcAASY4AAEmOQABJjoAASY7AAEmPQABJj8AASZAAAEmQQABJkMAASZEAAEmjwABJrIAASbSAAEm8gABJvQAASb2AAEm+AABJvoAASb9AAEm/gABJv8AAScCAAEnAwABJwUAAScGAAEnCAABJwsAAScMAAEnDQABJxAAAScRAAEnFgABJyMAAScoAAEnKgABJywAAScxAAEnNAABJzcAASc5AAEnXgABJ4IAASepAAEnzQABJ9AAASfSAAEn1AABJ9YAASfYAAEn2gABJ9sAASfeAAEn6wABJ/wAASf+AAEoAAABKAIAASgEAAEoBgABKAgAASgKAAEoDAABKB0AASggAAEoIwABKCYAASgpAAEoLAABKC8AASgyAAEoNQABKDcAASh2AAEoeAABKHoAASh8AAEofwABKIAAASiBAAEoggABKIMAASiFAAEohwABKIgAASiJAAEoiwABKIwAASjLAAEozQABKM8AASjRAAEo1AABKNUAASjWAAEo1wABKNgAASjaAAEo3AABKN0AASjeAAEo4AABKOEAASkgAAEpIgABKSUAASknAAEpKgABKSsAASksAAEpLQABKS4AASkwAAEpMgABKTMAASk0AAEpNgABKTcAASlEAAEpRQABKUYAASlIAAEphwABKYkAASmLAAEpjQABKZAAASmRAAEpkgABKZMAASmUAAEplgABKZgAASmZAAEpmgABKZwAASmdAAEp3AABKd4AASngAAEp4gABKeUAASnmAAEp5wABKegAASnpAAEp6wABKe0AASnuAAEp7wABKfEAASnyAAEqMQABKjMAASo1AAEqNwABKjoAASo7AAEqPAABKj0AASo+AAEqQAABKkIAASpDAAEqRAABKkYAASpHAAEqhgABKogAASqKAAEqjAABKo8AASqQAAEqkQABKpIAASqTAAEqlQABKpcAASqYAAEqmQABKpsAASqcAAEq2wABKt0AASrfAAEq4QABKuQAASrlAAEq5gABKucAASroAAEq6gABKuwAASrtAAEq7gABKvAAASrxAAErFgABKzoAASthAAErhQABK4gAASuKAAErjAABK44AASuQAAErkgABK5MAASuWAAErowABK7IAASu0AAErtgABK7gAASu6AAErvAABK74AASvAAAErzwABK9IAASvVAAEr2AABK9sAASveAAEr4QABK+QAASvmAAEsJQABLCcAASwpAAEsKwABLC4AASwvAAEsMAABLDEAASwyAAEsNAABLDYAASw3AAEsOAABLDoAASw7AAEsegABLHwAASx+AAEsgAABLIMAASyEAAEshQABLIYAASyHAAEsiQABLIsAASyMAAEsjQABLI8AASyQAAEszwABLNEAASzTAAEs1QABLNgAASzZAAEs2gABLNsAASzcAAEs3gABLOAAASzhAAEs4gABLOQAASzlAAEtJAABLSYAAS0oAAEtKgABLS0AAS0uAAEtLwABLTAAAS0xAAEtMwABLTUAAS02AAEtNwABLTkAAS06AAEteQABLXsAAS19AAEtfwABLYIAAS2DAAEthAABLYUAAS2GAAEtiAABLYoAAS2LAAEtjAABLY4AAS2PAAEtzgABLdAAAS3SAAEt1AABLdcAAS3YAAEt2QABLdoAAS3bAAEt3QABLd8AAS3gAAEt4QABLeMAAS3kAAEuIwABLiUAAS4nAAEuKQABLiwAAS4tAAEuLgABLi8AAS4wAAEuMgABLjQAAS41AAEuNgABLjgAAS45AAEuhAABLqcAAS7HAAEu5wABLukAAS7rAAEu7QABLu8AAS7yAAEu8wABLvQAAS73AAEu+AABLvoAAS77AAEu/QABLwAAAS8BAAEvAgABLwUAAS8GAAEvCwABLxgAAS8dAAEvHwABLyEAAS8mAAEvKQABLywAAS8uAAEvUwABL3cAAS+eAAEvwgABL8UAAS/HAAEvyQABL8sAAS/NAAEvzwABL9AAAS/TAAEv4AABL/EAAS/zAAEv9QABL/cAAS/5AAEv+wABL/0AAS//AAEwAQABMBIAATAVAAEwGAABMBsAATAeAAEwIQABMCQAATAnAAEwKgABMCwAATBrAAEwbQABMG8AATBxAAEwdAABMHUAATB2AAEwdwABMHgAATB6AAEwfAABMH0AATB+AAEwgAABMIEAATDAAAEwwgABMMQAATDGAAEwyQABMMoAATDLAAEwzAABMM0AATDPAAEw0QABMNIAATDTAAEw1QABMNYAATEVAAExFwABMRoAATEcAAExHwABMSAAATEhAAExIgABMSMAATElAAExJwABMSgAATEpAAExKwABMSwAATE5AAExOgABMTsAATE9AAExfAABMX4AATGAAAExggABMYUAATGGAAExhwABMYgAATGJAAExiwABMY0AATGOAAExjwABMZEAATGSAAEx0QABMdMAATHVAAEx1wABMdoAATHbAAEx3AABMd0AATHeAAEx4AABMeIAATHjAAEx5AABMeYAATHnAAEyJgABMigAATIqAAEyLAABMi8AATIwAAEyMQABMjIAATIzAAEyNQABMjcAATI4AAEyOQABMjsAATI8AAEyewABMn0AATJ/AAEygQABMoQAATKFAAEyhgABMocAATKIAAEyigABMowAATKNAAEyjgABMpAAATKRAAEy0AABMtIAATLUAAEy1gABMtkAATLaAAEy2wABMtwAATLdAAEy3wABMuEAATLiAAEy4wABMuUAATLmAAEzCwABMy8AATNWAAEzegABM30AATN/AAEzgQABM4MAATOFAAEzhwABM4gAATOLAAEzmAABM6cAATOpAAEzqwABM60AATOvAAEzsQABM7MAATO1AAEzxAABM8cAATPKAAEzzQABM9AAATPTAAEz1gABM9kAATPbAAE0GgABNBwAATQeAAE0IAABNCMAATQkAAE0JQABNCYAATQnAAE0KQABNCsAATQsAAE0LQABNC8AATQwAAE0bwABNHEAATRzAAE0dQABNHgAATR5AAE0egABNHsAATR8AAE0fgABNIAAATSBAAE0ggABNIQAATSFAAE0xAABNMYAATTIAAE0ygABNM0AATTOAAE0zwABNNAAATTRAAE00wABNNUAATTWAAE01wABNNkAATTaAAE1GQABNRsAATUdAAE1HwABNSIAATUjAAE1JAABNSUAATUmAAE1KAABNSoAATUrAAE1LAABNS4AATUvAAE1bgABNXAAATVyAAE1dAABNXcAATV4AAE1eQABNXoAATV7AAE1fQABNX8AATWAAAE1gQABNYMAATWEAAE1wwABNcUAATXHAAE1yQABNcwAATXNAAE1zgABNc8AATXQAAE10gABNdQAATXVAAE11gABNdgAATXZAAE2GAABNhoAATYcAAE2HgABNiEAATYiAAE2IwABNiQAATYlAAE2JwABNikAATYqAAE2KwABNi0AATYuAAE2eQABNpwAATa8AAE23AABNt4AATbgAAE24gABNuQAATbnAAE26AABNukAATbsAAE27QABNu8AATbwAAE28gABNvUAATb2AAE29wABNvoAATb7AAE3BAABNxEAATcWAAE3GAABNxoAATcfAAE3IgABNyUAATcnAAE3TAABN3AAATeXAAE3uwABN74AATfAAAE3wgABN8QAATfGAAE3yAABN8kAATfMAAE32QABN+oAATfsAAE37gABN/AAATfyAAE39AABN/YAATf4AAE3+gABOAsAATgOAAE4EQABOBQAATgXAAE4GgABOB0AATggAAE4IwABOCUAAThkAAE4ZgABOGgAAThqAAE4bQABOG4AAThvAAE4cAABOHEAAThzAAE4dQABOHYAATh3AAE4eQABOHoAATi5AAE4uwABOL0AATi/AAE4wgABOMMAATjEAAE4xQABOMYAATjIAAE4ygABOMsAATjMAAE4zgABOM8AATkOAAE5EAABORMAATkVAAE5GAABORkAATkaAAE5GwABORwAATkeAAE5IAABOSEAATkiAAE5JAABOSUAATkyAAE5MwABOTQAATk2AAE5dQABOXcAATl5AAE5ewABOX4AATl/AAE5gAABOYEAATmCAAE5hAABOYYAATmHAAE5iAABOYoAATmLAAE5ygABOcwAATnOAAE50AABOdMAATnUAAE51QABOdYAATnXAAE52QABOdsAATncAAE53QABOd8AATngAAE6HwABOiEAATojAAE6JQABOigAATopAAE6KgABOisAATosAAE6LgABOjAAAToxAAE6MgABOjQAATo1AAE6dAABOnYAATp4AAE6egABOn0AATp+AAE6fwABOoAAATqBAAE6gwABOoUAATqGAAE6hwABOokAATqKAAE6yQABOssAATrNAAE6zwABOtIAATrTAAE61AABOtUAATrWAAE62AABOtoAATrbAAE63AABOt4AATrfAAE7BAABOygAATtPAAE7cwABO3YAATt4AAE7egABO3wAATt+AAE7gAABO4EAATuEAAE7kQABO6AAATuiAAE7pAABO6YAATuoAAE7qgABO6wAATuuAAE7vQABO8AAATvDAAE7xgABO8kAATvMAAE7zwABO9IAATvUAAE8EwABPBUAATwXAAE8GQABPBwAATwdAAE8HgABPB8AATwgAAE8IgABPCQAATwlAAE8JgABPCgAATwpAAE8aAABPGoAATxsAAE8bgABPHEAATxyAAE8cwABPHQAATx1AAE8dwABPHkAATx6AAE8ewABPH0AATx+AAE8vQABPL8AATzBAAE8wwABPMYAATzHAAE8yAABPMkAATzKAAE8zAABPM4AATzPAAE80AABPNIAATzTAAE9EgABPRQAAT0XAAE9GQABPRwAAT0dAAE9HgABPR8AAT0gAAE9IgABPSQAAT0lAAE9JgABPSgAAT0pAAE9aAABPWoAAT1sAAE9bgABPXEAAT1yAAE9cwABPXQAAT11AAE9dwABPXkAAT16AAE9ewABPX0AAT1+AAE9vQABPb8AAT3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JAAFJCwABSQwAAUkNAAFJDwABSRAAAUkdAAFJHgABSR8AAUkhAAFJYAABSWIAAUlkAAFJZgABSWkAAUlqAAFJawABSWwAAUltAAFJbwABSXEAAUlyAAFJcwABSXUAAUl2AAFJtQABSbcAAUm5AAFJuwABSb4AAUm/AAFJwAABScEAAUnCAAFJxAABScYAAUnHAAFJyAABScoAAUnLAAFKCgABSgwAAUoOAAFKEAABShMAAUoUAAFKFQABShYAAUoXAAFKGQABShsAAUocAAFKHQABSh8AAUogAAFKXwABSmEAAUpjAAFKZQABSmgAAUppAAFKagABSmsAAUpsAAFKbgABSnAAAUpxAAFKcgABSnQAAUp1AAFKtAABSrYAAUq4AAFKugABSr0AAUq+AAFKvwABSsAAAUrBAAFKwwABSsUAAUrGAAFKxwABSskAAUrKAAFK7wABSxMAAUs6AAFLXgABS2EAAUtjAAFLZQABS2cAAUtpAAFLawABS2wAAUtvAAFLfAABS4sAAUuNAAFLjwABS5EAAUuTAAFLlQABS5cAAUuZAAFLqAABS6sAAUuuAAFLsQABS7QAAUu3AAFLugABS70AAUu/AAFL/gABTAAAAUwCAAFMBAABTAcAAUwIAAFMCQABTAoAAUwLAAFMDQABTA8AAUwQAAFMEQABTBMAAUwUAAFMUwABTFUAAUxXAAFMWQABTFwAAUxdAAFMXgABTF8AAUxgAAFMYgABTGQAAUxlAAFMZgABTGgAAUxpAAFMqAABTKoAAUysAAFMrgABTLEAAUyyAAFMswABTLQAAUy1AAFMtwABTLkAAUy6AAFMuwABTL0AAUy+AAFM/QABTP8AAU0BAAFNAwABTQYAAU0HAAFNCAABTQkAAU0KAAFNDAABTQ4AAU0PAAFNEAABTRIAAU0TAAFNUgABTVQAAU1WAAFNWAABTVsAAU1cAAFNXQABTV4AAU1fAAFNYQABTWMAAU1kAAFNZQABTWcAAU1oAAFNpwABTakAAU2rAAFNrQABTbAAAU2xAAFNsgABTbMAAU20AAFNtgABTbgAAU25AAFNugABTbwAAU29AAFN/AABTf4AAU4AAAFOAgABTgUAAU4GAAFOBwABTggAAU4JAAFOCwABTg0AAU4OAAFODwABThEAAU4SAAFOXQABToAAAU6gAAFOwAABTsIAAU7EAAFOxgABTsgAAU7LAAFOzAABTs0AAU7QAAFO0QABTtMAAU7UAAFO1gABTtkAAU7aAAFO2wABTt4AAU7fAAFO5AABTvEAAU72AAFO+AABTvoAAU7/AAFPAgABTwUAAU8HAAFPLAABT1AAAU93AAFPmwABT54AAU+gAAFPogABT6QAAU+mAAFPqAABT6kAAU+sAAFPuQABT8oAAU/MAAFPzgABT9AAAU/SAAFP1AABT9YAAU/YAAFP2gABT+sAAU/uAAFP8QABT/QAAU/3AAFP+gABT/0AAVAAAAFQAwABUAUAAVBEAAFQRgABUEgAAVBKAAFQTQABUE4AAVBPAAFQUAABUFEAAVBTAAFQVQABUFYAAVBXAAFQWQABUFoAAVCZAAFQmwABUJ0AAVCfAAFQogABUKMAAVCkAAFQpQABUKYAAVCoAAFQqgABUKsAAVCsAAFQrgABUK8AAVDuAAFQ8AABUPMAAVD1AAFQ+AABUPkAAVD6AAFQ+wABUPwAAVD+AAFRAAABUQEAAVECAAFRBAABUQUAAVESAAFREwABURQAAVEWAAFRVQABUVcAAVFZAAFRWwABUV4AAVFfAAFRYAABUWEAAVFiAAFRZAABUWYAAVFnAAFRaAABUWoAAVFrAAFRqgABUawAAVGuAAFRsAABUbMAAVG0AAFRtQABUbYAAVG3AAFRuQABUbsAAVG8AAFRvQABUb8AAVHAAAFR/wABUgEAAVIDAAFSBQABUggAAVIJAAFSCgABUgsAAVIMAAFSDgABUhAAAVIRAAFSEgABUhQAAVIVAAFSVAABUlYAAVJYAAFSWgABUl0AAVJeAAFSXwABUmAAAVJhAAFSYwABUmUAAVJmAAFSZwABUmkAAVJqAAFSqQABUqsAAVKtAAFSrwABUrIAAVKzAAFStAABUrUAAVK2AAFSuAABUroAAVK7AAFSvAABUr4AAVK/AAFS5AABUwgAAVMvAAFTUwABU1YAAVNYAAFTWgABU1wAAVNeAAFTYAABU2EAAVNkAAFTcQABU4AAAVOCAAFThAABU4YAAVOIAAFTigABU4wAAVOOAAFTnQABU6AAAVOjAAFTpgABU6kAAVOsAAFTrwABU7IAAVO0AAFT8wABU/UAAVP3AAFT+QABU/wAAVP9AAFT/gABU/8AAVQAAAFUAgABVAQAAVQFAAFUBgABVAgAAVQJAAFUSAABVEoAAVRMAAFUTgABVFEAAVRSAAFUUwABVFQAAVRVAAFUVwABVFkAAVRaAAFUWwABVF0AAVReAAFUnQABVJ8AAVShAAFUowABVKYAAVSnAAFUqAABVKkAAVSqAAFUrAABVK4AAVSvAAFUsAABVLIAAVSzAAFU8gABVPQAAVT2AAFU+AABVPsAAVT8AAFU/QABVP4AAVT/AAFVAQABVQMAAVUEAAFVBQABVQcAAVUIAAFVRwABVUkAAVVLAAFVTQABVVAAAVVRAAFVUgABVVMAAVVUAAFVVgABVVgAAVVZAAFVWgABVVwAAVVdAAFVnAABVZ4AAVWgAAFVogABVaUAAVWmAAFVpwABVagAAVWpAAFVqwABVa0AAVWuAAFVrwABVbEAAVWyAAFV8QABVfMAAVX1AAFV9wABVfoAAVX7AAFV/AABVf0AAVX+AAFWAAABVgIAAVYDAAFWBAABVgYAAVYHAAFWUgABVnUAAVaVAAFWtQABVrcAAVa5AAFWuwABVr0AAVbAAAFWwQABVsIAAVbFAAFWxgABVsgAAVbJAAFWywABVs4AAVbPAAFW0AABVtMAAVbUAAFW2QABVuYAAVbrAAFW7QABVu8AAVb0AAFW9wABVvoAAVb8AAFXIQABV0UAAVdsAAFXkAABV5MAAVeVAAFXlwABV5kAAVebAAFXnQABV54AAVehAAFXrgABV78AAVfBAAFXwwABV8UAAVfHAAFXyQABV8sAAVfNAAFXzwABV+AAAVfjAAFX5gABV+kAAVfsAAFX7wABV/IAAVf1AAFX+AABV/oAAVg5AAFYOwABWD0AAVg/AAFYQgABWEMAAVhEAAFYRQABWEYAAVhIAAFYSgABWEsAAVhMAAFYTgABWE8AAViOAAFYkAABWJIAAViUAAFYlwABWJgAAViZAAFYmgABWJsAAVidAAFYnwABWKAAAVihAAFYowABWKQAAVjjAAFY5QABWOgAAVjqAAFY7QABWO4AAVjvAAFY8AABWPEAAVjzAAFY9QABWPYAAVj3AAFY+QABWPoAAVkHAAFZCAABWQkAAVkLAAFZSgABWUwAAVlOAAFZUAABWVMAAVlUAAFZVQABWVYAAVlXAAFZWQABWVsAAVlcAAFZXQABWV8AAVlgAAFZnwABWaEAAVmjAAFZpQABWagAAVmpAAFZqgABWasAAVmsAAFZrgABWbAAAVmxAAFZsgABWbQAAVm1AAFZ9AABWfYAAVn4AAFZ+gABWf0AAVn+AAFZ/wABWgAAAVoBAAFaAwABWgUAAVoGAAFaBwABWgkAAVoKAAFaSQABWksAAVpNAAFaTwABWlIAAVpTAAFaVAABWlUAAVpWAAFaWAABWloAAVpbAAFaXAABWl4AAVpfAAFangABWqAAAVqiAAFapAABWqcAAVqoAAFaqQABWqoAAVqrAAFarQABWq8AAVqwAAFasQABWrMAAVq0AAFa2QABWv0AAVskAAFbSAABW0sAAVtNAAFbTwABW1EAAVtTAAFbVQABW1YAAVtZAAFbZgABW3UAAVt3AAFbeQABW3sAAVt9AAFbfwABW4EAAVuDAAFbkgABW5UAAVuYAAFbmwABW54AAVuhAAFbpAABW6cAAVupAAFb6AABW+oAAVvsAAFb7gABW/EAAVvyAAFb8wABW/QAAVv1AAFb9wABW/kAAVv6AAFb+wABW/0AAVv+AAFcPQABXD8AAVxBAAFcQwABXEYAAVxHAAFcSAABXEkAAVxKAAFcTAABXE4AAVxPAAFcUAABXFIAAVxTAAFckgABXJQAAVyWAAFcmAABXJsAAVycAAFcnQABXJ4AAVyfAAFcoQABXKMAAVykAAFcpQABXKcAAVyoAAFc5wABXOkAAVzsAAFc7gABXPEAAVzyAAFc8wABXPQAAVz1AAFc9wABXPkAAVz6AAFc+wABXP0AAVz+AAFdPQABXT8AAV1BAAFdQwABXUYAAV1HAAFdSAABXUkAAV1KAAFdTAABXU4AAV1PAAFdUAABXVIAAV1TAAFdkgABXZQAAV2WAAFdmAABXZsAAV2cAAFdnQABXZ4AAV2fAAFdoQABXaMAAV2kAAFdpQABXacAAV2oAAFd5wABXekAAV3rAAFd7QABXfAAAV3xAAFd8gABXfMAAV30AAFd9gABXfgAAV35AAFd+gABXfwAAV39AAFeSAABXmsAAV6LAAFeqwABXq0AAV6vAAFesQABXrMAAV62AAFetwABXrgAAV67AAFevAABXr4AAV6/AAFewQABXsMAAV7EAAFexQABXsgAAV7JAAFe0gABXt8AAV7kAAFe5gABXugAAV7tAAFe8AABXvMAAV71AAFfGgABXz4AAV9lAAFfiQABX4wAAV+OAAFfkAABX5IAAV+UAAFflgABX5cAAV+aAAFfpwABX7gAAV+6AAFfvAABX74AAV/AAAFfwgABX8QAAV/GAAFfyAABX9kAAV/cAAFf3wABX+IAAV/lAAFf6AABX+sAAV/uAAFf8QABX/MAAWAyAAFgNAABYDYAAWA4AAFgOwABYDwAAWA9AAFgPgABYD8AAWBBAAFgQwABYEQAAWBFAAFgRwABYEgAAWCHAAFgiQABYIsAAWCNAAFgkAABYJEAAWCSAAFgkwABYJQAAWCWAAFgmAABYJkAAWCaAAFgnAABYJ0AAWDcAAFg3gABYOEAAWDjAAFg5gABYOcAAWDoAAFg6QABYOoAAWDsAAFg7gABYO8AAWDwAAFg8gABYPMAAWEAAAFhAQABYQIAAWEEAAFhQwABYUUAAWFHAAFhSQABYUwAAWFNAAFhTgABYU8AAWFQAAFhUgABYVQAAWFVAAFhVgABYVgAAWFZAAFhmAABYZoAAWGcAAFhngABYaEAAWGiAAFhowABYaQAAWGlAAFhpwABYakAAWGqAAFhqwABYa0AAWGuAAFh7QABYe8AAWHxAAFh8wABYfYAAWH3AAFh+AABYfkAAWH6AAFh/AABYf4AAWH/AAFiAAABYgIAAWIDAAFiQgABYkQAAWJGAAFiSAABYksAAWJMAAFiTQABYk4AAWJPAAFiUQABYlMAAWJUAAFiVQABYlcAAWJYAAFilwABYpkAAWKbAAFinQABYqAAAWKhAAFiogABYqMAAWKkAAFipgABYqgAAWKpAAFiqgABYqwAAWKtAAFi0gABYvYAAWMdAAFjQQABY0QAAWNGAAFjSAABY0oAAWNMAAFjTgABY08AAWNSAAFjXwABY24AAWNwAAFjcgABY3QAAWN2AAFjeAABY3oAAWN8AAFjiwABY44AAWORAAFjlAABY5cAAWOaAAFjnQABY6AAAWOiAAFj4QABY+MAAWPlAAFj5wABY+oAAWPrAAFj7AABY+0AAWPuAAFj8AABY/IAAWPzAAFj9AABY/YAAWP3AAFkNgABZDgAAWQ6AAFkPAABZD8AAWRAAAFkQQABZEIAAWRDAAFkRQABZEcAAWRIAAFkSQABZEsAAWRMAAFkiwABZI0AAWSPAAFkkQABZJQAAWSVAAFklgABZJcAAWSYAAFkmgABZJwAAWSdAAFkngABZKAAAWShAAFk4AABZOIAAWTkAAFk5gABZOkAAWTqAAFk6wABZOwAAWTtAAFk7wABZPEAAWTyAAFk8wABZPUAAWT2AAFlNQABZTcAAWU5AAFlOwABZT4AAWU/AAFlQAABZUEAAWVCAAFlRAABZUYAAWVHAAFlSAABZUoAAWVLAAFligABZYwAAWWOAAFlkAABZZMAAWWUAAFllQABZZYAAWWXAAFlmQABZZsAAWWcAAFlnQABZZ8AAWWgAAFl3wABZeEAAWXjAAFl5QABZegAAWXpAAFl6gABZesAAWXsAAFl7gABZfAAAWXxAAFl8gABZfQAAWX1AAFmQAABZmMAAWaDAAFmowABZqUAAWanAAFmqQABZqsAAWauAAFmrwABZrAAAWazAAFmtAABZrYAAWa3AAFmuQABZrwAAWa9AAFmvgABZsEAAWbCAAFmxwABZtQAAWbZAAFm2wABZt0AAWbiAAFm5QABZugAAWbqAAFnDwABZzMAAWdaAAFnfgABZ4EAAWeDAAFnhQABZ4cAAWeJAAFniwABZ4wAAWePAAFnnAABZ60AAWevAAFnsQABZ7MAAWe1AAFntwABZ7kAAWe7AAFnvQABZ84AAWfRAAFn1AABZ9cAAWfaAAFn3QABZ+AAAWfjAAFn5gABZ+gAAWgnAAFoKQABaCsAAWgtAAFoMAABaDEAAWgyAAFoMwABaDQAAWg2AAFoOAABaDkAAWg6AAFoPAABaD0AAWh8AAFofgABaIAAAWiCAAFohQABaIYAAWiHAAFoiAABaIkAAWiLAAFojQABaI4AAWiPAAFokQABaJIAAWjRAAFo0wABaNYAAWjYAAFo2wABaNwAAWjdAAFo3gABaN8AAWjhAAFo4wABaOQAAWjlAAFo5wABaOgAAWj1AAFo9gABaPcAAWj5AAFpOAABaToAAWk8AAFpPgABaUEAAWlCAAFpQwABaUQAAWlFAAFpRwABaUkAAWlKAAFpSwABaU0AAWlOAAFpjQABaY8AAWmRAAFpkwABaZYAAWmXAAFpmAABaZkAAWmaAAFpnAABaZ4AAWmfAAFpoAABaaIAAWmjAAFp4gABaeQAAWnmAAFp6AABaesAAWnsAAFp7QABae4AAWnvAAFp8QABafMAAWn0AAFp9QABafcAAWn4AAFqNwABajkAAWo7AAFqPQABakAAAWpBAAFqQgABakMAAWpEAAFqRgABakgAAWpJAAFqSgABakwAAWpNAAFqjAABao4AAWqQAAFqkgABapUAAWqWAAFqlwABapgAAWqZAAFqmwABap0AAWqeAAFqnwABaqEAAWqiAAFqxwABausAAWsSAAFrNgABazkAAWs7AAFrPQABaz8AAWtBAAFrQwABa0QAAWtHAAFrVAABa2MAAWtlAAFrZwABa2kAAWtrAAFrbQABa28AAWtxAAFrgAABa4MAAWuGAAFriQABa4wAAWuPAAFrkgABa5UAAWuXAAFr1gABa9gAAWvaAAFr3AABa98AAWvgAAFr4QABa+IAAWvjAAFr5QABa+cAAWvoAAFr6QABa+sAAWvsAAFsKwABbC0AAWwvAAFsMQABbDQAAWw1AAFsNgABbDcAAWw4AAFsOgABbDwAAWw9AAFsPgABbEAAAWxBAAFsgAABbIIAAWyEAAFshgABbIkAAWyKAAFsiwABbIwAAWyNAAFsjwABbJEAAWySAAFskwABbJUAAWyWAAFs1QABbNcAAWzaAAFs3AABbN8AAWzgAAFs4QABbOIAAWzjAAFs5QABbOcAAWzoAAFs6QABbOsAAWzsAAFtKwABbS0AAW0vAAFtMQABbTQAAW01AAFtNgABbTcAAW04AAFtOgABbTwAAW09AAFtPgABbUAAAW1BAAFtgAABbYIAAW2FAAFthwABbYoAAW2LAAFtjAABbY0AAW2OAAFtkAABbZIAAW2TAAFtlAABbZYAAW2XAAFtvgABbf0AAW3/AAFuAQABbgMAAW4GAAFuBwABbggAAW4JAAFuCgABbgwAAW4OAAFuDwABbhAAAW4SAAFuEwABbhwAAW4dAAFuHwABbl4AAW5gAAFuYgABbmQAAW5nAAFuaAABbmkAAW5qAAFuawABbm0AAW5vAAFucAABbnEAAW5zAAFudAABbrMAAW61AAFutwABbrkAAW68AAFuvQABbr4AAW6/AAFuwAABbsIAAW7EAAFuxQABbsYAAW7IAAFuyQABbwgAAW8KAAFvDAABbw4AAW8RAAFvEgABbxMAAW8UAAFvFQABbxcAAW8ZAAFvGgABbxsAAW8dAAFvHgABb10AAW9fAAFvYQABb2MAAW9mAAFvZwABb2gAAW9pAAFvagABb2wAAW9uAAFvbwABb3AAAW9yAAFvcwABb7IAAW+0AAFvtgABb7gAAW+7AAFvvAABb70AAW++AAFvvwABb8EAAW/DAAFvxAABb8UAAW/HAAFvyAABcBMAAXA2AAFwVgABcHYAAXB4AAFwegABcHwAAXB+AAFwgAABcIEAAXCCAAFwhQABcIYAAXCIAAFwiQABcIsAAXCNAAFwjgABcI8AAXCSAAFwkwABcJgAAXClAAFwqgABcKwAAXCuAAFwswABcLYAAXC5AAFwuwABcOAAAXEEAAFxKwABcU8AAXFSAAFxVAABcVYAAXFYAAFxWgABcVwAAXFdAAFxYAABcW0AAXF+AAFxgAABcYIAAXGEAAFxhgABcYgAAXGKAAFxjAABcY4AAXGfAAFxogABcaUAAXGoAAFxqwABca4AAXGxAAFxtAABcbcAAXG5AAFx+AABcfoAAXH8AAFx/gABcgEAAXICAAFyAwABcgQAAXIFAAFyBwABcgkAAXIKAAFyCwABcg0AAXIOAAFyTQABck8AAXJRAAFyUwABclYAAXJXAAFyWAABclkAAXJaAAFyXAABcl4AAXJfAAFyYAABcmIAAXJjAAFyogABcqQAAXKnAAFyqQABcqwAAXKtAAFyrgABcq8AAXKwAAFysgABcrQAAXK1AAFytgABcrgAAXK5AAFyxgABcscAAXLIAAFyygABcwkAAXMLAAFzDQABcw8AAXMSAAFzEwABcxQAAXMVAAFzFgABcxgAAXMaAAFzGwABcxwAAXMeAAFzHwABc14AAXNgAAFzYgABc2QAAXNnAAFzaAABc2kAAXNqAAFzawABc20AAXNvAAFzcAABc3EAAXNzAAFzdAABc7MAAXO1AAFztwABc7kAAXO8AAFzvQABc74AAXO/AAFzwAABc8IAAXPEAAFzxQABc8YAAXPIAAFzyQABdAgAAXQKAAF0DAABdA4AAXQRAAF0EgABdBMAAXQUAAF0FQABdBcAAXQZAAF0GgABdBsAAXQdAAF0HgABdF0AAXRfAAF0YQABdGMAAXRmAAF0ZwABdGgAAXRpAAF0agABdGwAAXRuAAF0bwABdHAAAXRyAAF0cwABdJgAAXS8AAF04wABdQcAAXUKAAF1DAABdQ4AAXUQAAF1EgABdRQAAXUVAAF1GAABdSUAAXU0AAF1NgABdTgAAXU6AAF1PAABdT4AAXVAAAF1QgABdVEAAXVUAAF1VwABdVoAAXVdAAF1YAABdWMAAXVmAAF1aAABdacAAXW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BAAGGQgABhkMAAYZEAAGGRQABhkcAAYZJAAGGSgABhksAAYZNAAGGTgABho0AAYaPAAGGkQABhpMAAYaWAAGGlwABhpgAAYaZAAGGmgABhpwAAYaeAAGGnwABhqAAAYaiAAGGowABhuIAAYbkAAGG5gABhugAAYbrAAGG7AABhu0AAYbuAAGG7wABhvEAAYbzAAGG9AABhvUAAYb3AAGG+AABhzcAAYc5AAGHOwABhz0AAYdAAAGHQQABh0IAAYdDAAGHRAABh0YAAYdIAAGHSQABh0oAAYdMAAGHTQABh4wAAYeOAAGHkAABh5IAAYeVAAGHlgABh5cAAYeYAAGHmQABh5sAAYedAAGHngABh58AAYehAAGHogABh+0AAYgQAAGIMAABiFAAAYhSAAGIVAABiFYAAYhYAAGIWgABiFsAAYhcAAGIXwABiGAAAYhiAAGIYwABiGUAAYhnAAGIaAABiGkAAYhsAAGIbQABiHYAAYiDAAGIiAABiIoAAYiMAAGIkQABiJQAAYiXAAGImQABiL4AAYjiAAGJCQABiS0AAYkwAAGJMgABiTQAAYk2AAGJOAABiToAAYk7AAGJPgABiUsAAYlcAAGJXgABiWAAAYliAAGJZAABiWYAAYloAAGJagABiWwAAYl9AAGJgAABiYMAAYmGAAGJiQABiYwAAYmPAAGJkgABiZUAAYmXAAGJ1gABidgAAYnaAAGJ3AABid8AAYngAAGJ4QABieIAAYnjAAGJ5QABiecAAYnoAAGJ6QABiesAAYnsAAGKKwABii0AAYovAAGKMQABijQAAYo1AAGKNgABijcAAYo4AAGKOgABijwAAYo9AAGKPgABikAAAYpBAAGKgAABioIAAYqFAAGKhwABiooAAYqLAAGKjAABio0AAYqOAAGKkAABipIAAYqTAAGKlAABipYAAYqXAAGKpAABiqUAAYqmAAGKqAABiucAAYrpAAGK6wABiu0AAYrwAAGK8QABivIAAYrzAAGK9AABivYAAYr4AAGK+QABivoAAYr8AAGK/QABizwAAYs+AAGLQAABi0IAAYtFAAGLRgABi0cAAYtIAAGLSQABi0sAAYtNAAGLTgABi08AAYtRAAGLUgABi5EAAYuTAAGLlQABi5cAAYuaAAGLmwABi5wAAYudAAGLngABi6AAAYuiAAGLowABi6QAAYu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aAAGW2wABlt0AAZbfAAGW4AABluEAAZbjAAGW5AABlyMAAZclAAGXJwABlykAAZcsAAGXLQABly4AAZcvAAGXMAABlzIAAZc0AAGXNQABlzYAAZc4AAGXOQABl3gAAZd6AAGXfAABl34AAZeBAAGXggABl4MAAZeEAAGXhQABl4cAAZeJAAGXigABl4sAAZeNAAGXjgABl9kAAZf8AAGYHAABmDwAAZg+AAGYQAABmEIAAZhEAAGYRgABmEcAAZhIAAGYSwABmEwAAZhOAAGYTwABmFEAAZhTAAGYVAABmFUAAZhYAAGYWQABmF4AAZhrAAGYcAABmHIAAZh0AAGYeQABmHwAAZh/AAGYgQABmKYAAZjKAAGY8QABmRUAAZkYAAGZGgABmRwAAZkeAAGZIAABmSIAAZkjAAGZJgABmTMAAZlEAAGZRgABmUgAAZlKAAGZTAABmU4AAZlQAAGZUgABmVQAAZllAAGZaAABmWsAAZluAAGZcQABmXQAAZl3AAGZegABmX0AAZl/AAGZvgABmcAAAZnCAAGZxAABmccAAZnIAAGZyQABmcoAAZnLAAGZzQABmc8AAZnQAAGZ0QABmdMAAZnUAAGaEwABmhUAAZoXAAGaGQABmhwAAZodAAGaHgABmh8AAZogAAGaIgABmiQAAZolAAGaJgABmigAAZopAAGaaAABmmoAAZptAAGabwABmnIAAZpzAAGadAABmnUAAZp2AAGaeAABmnoAAZp7AAGafAABmn4AAZp/AAGajAABmo0AAZqOAAGakAABms8AAZrRAAGa0wABmtUAAZrYAAGa2QABmtoAAZrbAAGa3AABmt4AAZrgAAGa4QABmuIAAZrkAAGa5QABmyQAAZsmAAGbKAABmyoAAZstAAGbLgABmy8AAZswAAGbMQABmzMAAZs1AAGbNgABmzcAAZs5AAGbOgABm3kAAZt7AAGbfQABm38AAZuCAAGbgwABm4QAAZuFAAGbhgABm4gAAZuKAAGbiwABm4wAAZuOAAGbjwABm84AAZvQAAGb0gABm9QAAZvXAAGb2AABm9kAAZvaAAGb2wABm90AAZvfAAGb4AABm+EAAZvjAAGb5AABnCMAAZwlAAGcJwABnCkAAZwsAAGcLQABnC4AAZwvAAGcMAABnDIAAZw0AAGcNQABnDYAAZw4AAGcOQABnF4AAZyCAAGcqQABnM0AAZzQAAGc0gABnNQAAZzWAAGc2AABnNoAAZzbAAGc3gABnOsAAZz6AAGc/AABnP4AAZ0AAAGdAgABnQQAAZ0GAAGdCAABnRcAAZ0aAAGdHQABnSAAAZ0jAAGdJgABnSkAAZ0sAAGdLgABnW0AAZ1vAAGdcQABnXMAAZ12AAGddwABnXgAAZ15AAGdegABnXwAAZ1+AAGdfwABnYAAAZ2CAAGdgwABncIAAZ3EAAGdxgABncgAAZ3LAAGdzAABnc0AAZ3OAAGdzwABndEAAZ3TAAGd1AABndUAAZ3XAAGd2AABnhcAAZ4ZAAGeGwABnh0AAZ4gAAGeIQABniIAAZ4jAAGeJAABniYAAZ4oAAGeKQABnioAAZ4sAAGeLQABnmwAAZ5uAAGecQABnnMAAZ52AAGedwABnngAAZ55AAGeegABnnwAAZ5+AAGefwABnoAAAZ6CAAGegwABnsIAAZ7EAAGexgABnsgAAZ7LAAGezAABns0AAZ7OAAGezwABntEAAZ7TAAGe1AABntUAAZ7XAAGe2AABnxcAAZ8ZAAGfGwABnx0AAZ8gAAGfIQABnyIAAZ8jAAGfJAABnyYAAZ8oAAGfKQABnyoAAZ8sAAGfLQABn2wAAZ9uAAGfcAABn3IAAZ91AAGfdgABn3cAAZ94AAGfeQABn3sAAZ99AAGffgABn38AAZ+BAAGfggABn80AAZ/wAAGgEAABoDAAAaAyAAGgNAABoDYAAaA4AAGgOgABoDsAAaA8AAGgPwABoEAAAaBCAAGgQwABoEUAAaBHAAGgSAABoEkAAaBMAAGgTQABoFIAAaBfAAGgZAABoGYAAaBoAAGgbQABoHAAAaBzAAGgdQABoJoAAaC+AAGg5QABoQkAAaEMAAGhDgABoRAAAaESAAGhFAABoRYAAaEXAAGhGgABoScAAaE4AAGhOgABoTwAAaE+AAGhQAABoUIAAaFEAAGhRgABoUgAAaFZAAGhXAABoV8AAaFiAAGhZQABoWgAAaFrAAGhbgABoXEAAaFzAAGhsgABobQAAaG2AAGhuAABobsAAaG8AAGhvQABob4AAaG/AAGhwQABocMAAaHEAAGhxQABoccAAaHIAAGiBwABogkAAaILAAGiDQABohAAAaIRAAGiEgABohMAAaIUAAGiFgABohgAAaIZAAGiGgABohwAAaIdAAGiXAABol4AAaJhAAGiYwABomYAAaJnAAGiaAABomkAAaJqAAGibAABom4AAaJvAAGicAABonIAAaJzAAGigAABooEAAaKCAAGihAABosMAAaLFAAGixwABoskAAaLMAAGizQABos4AAaLPAAGi0AABotIAAaLUAAGi1QABotYAAaLYAAGi2QABoxgAAaMaAAGjHAABox4AAaMhAAGjIgABoyMAAaMkAAGjJQABoycAAaMpAAGjKgABoysAAaMtAAGjLgABo20AAaNvAAGjcQABo3MAAaN2AAGjdwABo3gAAaN5AAGjegABo3wAAaN+AAGjfwABo4AAAaOCAAGjgwABo8IAAaPEAAGjxgABo8gAAaPLAAGjzAABo80AAaPOAAGjzwABo9EAAaPTAAGj1AABo9UAAaPXAAGj2AABpBcAAaQZAAGkGwABpB0AAaQgAAGkIQABpCIAAaQjAAGkJAABpCYAAaQoAAGkKQABpCoAAaQsAAGkLQABpFIAAaR2AAGknQABpMEAAaTEAAGkxgABpMgAAaTKAAGkzAABpM4AAaTPAAGk0gABpN8AAaTuAAGk8AABpPIAAaT0AAGk9gABpPgAAaT6AAGk/AABpQsAAaUOAAGlEQABpRQAAaUXAAGlGgABpR0AAaUgAAGlIgABpWEAAaVjAAGlZQABpWcAAaVqAAGlawABpWwAAaVtAAGlbgABpXAAAaVyAAGlcwABpXQAAaV2AAGldwABpbYAAaW4AAGlugABpbwAAaW/AAGlwAABpcEAAaXCAAGlwwABpcUAAaXHAAGlyAABpckAAaXLAAGlzAABpgsAAaYNAAGmDwABphEAAaYUAAGmFQABphYAAaYXAAGmGAABphoAAaYcAAGmHQABph4AAaYgAAGmIQABpmAAAaZiAAGmZAABpmYAAaZpAAGmagABpmsAAaZsAAGmbQABpm8AAaZxAAGmcgABpnMAAaZ1AAGmdgABprUAAaa3AAGmuQABprsAAaa+AAGmvwABpsAAAabBAAGmwgABpsQAAabGAAGmxwABpsgAAabKAAGmywABpwoAAacMAAGnDgABpxAAAacTAAGnFAABpxUAAacWAAGnFwABpxkAAacbAAGnHAABpx0AAacfAAGnIAABp18AAadhAAGnYwABp2UAAadoAAGnaQABp2oAAadrAAGnbAABp24AAadwAAGncQABp3IAAad0AAGndQABp8AAAafjAAGoAwABqCMAAaglAAGoJwABqCkAAagrAAGoLQABqC4AAagvAAGoMgABqDMAAag1AAGoNgABqDgAAag6AAGoOwABqDwAAag/AAGoQAABqEUAAahSAAGoVwABqFkAAahbAAGoYAABqGMAAahmAAGoaAABqI0AAaixAAGo2AABqPwAAaj/AAGpAQABqQMAAakFAAGpBwABqQkAAakKAAGpDQABqRoAAakrAAGpLQABqS8AAakxAAGpMwABqTUAAak3AAGpOQABqTsAAalMAAGpTwABqVIAAalVAAGpWAABqVsAAaleAAGpYQABqWQAAalmAAGppQABqacAAampAAGpqwABqa4AAamvAAGpsAABqbEAAamyAAGptAABqbYAAam3AAGpuAABqboAAam7AAGp+gABqfwAAan+AAGqAAABqgMAAaoEAAGqBQABqgYAAaoHAAGqCQABqgsAAaoMAAGqDQABqg8AAaoQAAGqTwABqlEAAapUAAGqVgABqlkAAapaAAGqWwABqlwAAapdAAGqXwABqmEAAapiAAGqYwABqmUAAapmAAGqcwABqnQAAap1AAGqdwABqrYAAaq4AAGqugABqrwAAaq/AAGqwAABqsEAAarCAAGqwwABqsUAAarHAAGqyAABqskAAarLAAGqzAABqwsAAasNAAGrDwABqxEAAasUAAGrFQABqxYAAasXAAGrGAABqxoAAascAAGrHQABqx4AAasgAAGrIQABq2AAAatiAAGrZAABq2YAAatpAAGragABq2sAAatsAAGrbQABq28AAatxAAGrcgABq3MAAat1AAGrdgABq7UAAau3AAGruQABq7sAAau+AAGrvwABq8AAAavBAAGrwgABq8QAAavGAAGrxwABq8gAAavKAAGrywABrAoAAawMAAGsDgABrBAAAawTAAGsFAABrBUAAawWAAGsFwABrBkAAawbAAGsHAABrB0AAawfAAGsIAABrEUAAaxpAAGskAABrLQAAay3AAGsuQABrLsAAay9AAGsvwABrMEAAazCAAGsxQABrNIAAazhAAGs4wABrOUAAaznAAGs6QABrOsAAaztAAGs7wABrP4AAa0BAAGtBAABrQcAAa0KAAGtDQABrRAAAa0TAAGtFQABrVQAAa1WAAGtWAABrVoAAa1dAAGtXgABrV8AAa1gAAGtYQABrWMAAa1lAAGtZgABrWcAAa1pAAGtagABrakAAa2rAAGtrgABrbAAAa2zAAGttAABrbUAAa22AAGttwABrbkAAa27AAGtvAABrb0AAa2/AAGtwAABrcIAAa4BAAGuAwABrgUAAa4HAAGuCgABrgsAAa4MAAGuDQABrg4AAa4QAAGuEgABrhMAAa4UAAGuFgABrhcAAa5WAAGuWAABrlsAAa5dAAGuYAABrmEAAa5iAAGuYwABrmQAAa5mAAGuaAABrmkAAa5qAAGubAABrm0AAa6wAAGu1AABrvgAAa8bAAGvQgABr2IAAa+JAAGvsAABr9AAAa/0AAGwGAABsBoAAbAdAAGwHwABsCEAAbAjAAGwJgABsCkAAbArAAGwLQABsDAAAbAyAAGwNAABsDcAAbA6AAGwOwABsEQAAbBRAAGwVAABsFYAAbBZAAGwXAABsF4AAbCDAAGwpwABsM4AAbDyAAGw9QABsPcAAbD5AAGw+wABsP0AAbD/AAGxAAABsQMAAbEQAAGxIwABsSUAAbEnAAGxKQABsSsAAbEtAAGxLwABsTEAAbEzAAGxNQABsUgAAbFLAAGxTgABsVEAAbFUAAGxVwABsVoAAbFdAAGxYAABsWMAAbFlAAGxpAABsaYAAbGpAAGxqwABsa4AAbGvAAGxsAABsbEAAbGyAAGxtAABsbYAAbG3AAGxuAABsboAAbG7AAGxxAABscUAAbHHAAGyBgABsggAAbIKAAGyDAABsg8AAbIQAAGyEQABshIAAbITAAGyFQABshcAAbIYAAGyGQABshsAAbIcAAGyWwABsl0AAbJgAAGyYgABsmUAAbJmAAGyZwABsmgAAbJpAAGyawABsm0AAbJuAAGybwABsnEAAbJyAAGyewABsn4AAbKBAAGygwABsowAAbKPAAGykQABspMAAbLSAAGy1AABstYAAbLYAAGy2wABstwAAbLdAAGy3gABst8AAbLhAAGy4wABsuQAAbLlAAGy5wABsugAAbMnAAGzKQABsywAAbMuAAGzMQABszIAAbMzAAGzNAABszUAAbM3AAGzOQABszoAAbM7AAGzPQABsz4AAbNHAAGzSAABs0oAAbOJAAGziwABs40AAbOPAAGzkgABs5MAAbOUAAGzlQABs5YAAbOYAAGzmgABs5sAAbO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NAAHETwABxFAAAcRRAAHEUwABxFQAAcSTAAHElQABxJcAAcSZAAHEnAABxJ0AAcSeAAHEnwABxKAAAcSiAAHEpAABxKUAAcSmAAHEqAABxKkAAcToAAHE6gABxO0AAcTvAAHE8gABxPMAAcT0AAHE9QABxPYAAcT4AAHE+gABxPsAAcT8AAHE/gABxP8AAcVKAAHFbQABxY0AAcWtAAHFrwABxbEAAcWzAAHFtQABxbgAAcW5AAHFugABxb0AAcW+AAHFwAABxcEAAcXDAAHFxQABxcYAAcXHAAHFygABxcsAAcXQAAHF3QABxeIAAcXkAAHF5gABxesAAcXuAAHF8QABxfMAAcYYAAHGPAABxmMAAcaHAAHGigABxowAAcaOAAHGkAABxpIAAcaUAAHGlQABxpgAAcalAAHGtgABxrgAAca6AAHGvAABxr4AAcbAAAHGwgABxsQAAcbGAAHG1wABxtoAAcbdAAHG4AABxuMAAcbmAAHG6QABxuwAAcbvAAHG8QABxzAAAccyAAHHNAABxzYAAcc5AAHHOgABxzsAAcc8AAHHPQABxz8AAcdBAAHHQgABx0MAAcdFAAHHRgABx4UAAceHAAHHiQABx4sAAceOAAHHjwABx5AAAceRAAHHkgABx5QAAceWAAHHlwABx5gAAceaAAHHmwABx9oAAcfcAAHH3wABx+EAAcfkAAHH5QABx+YAAcfnAAHH6AABx+oAAcfsAAHH7QABx+4AAcfwAAHH8QABx/4AAcf/AAHIAAAByAIAAchBAAHIQwAByEUAAchHAAHISgAByEsAAchMAAHITQAByE4AAchQAAHIUgAByFMAAchUAAHIVgAByFcAAciWAAHImAAByJoAAcicAAHInwAByKAAAcihAAHIogAByKMAAcilAAHIpwAByKgAAcipAAHIqwAByKwAAcjrAAHI7QAByO8AAcjxAAHI9AAByPUAAcj2AAHI9wAByPgAAcj6AAHI/AAByP0AAcj+AAHJAAAByQEAAclAAAHJQgAByUQAAclGAAHJSQAByUoAAclLAAHJTAAByU0AAclPAAHJUQAByVIAAclTAAHJVQAByVYAAcmVAAHJlwAByZkAAcmbAAHJngAByZ8AAcmgAAHJoQAByaIAAcmkAAHJpgAByacAAcmoAAHJqgAByasAAcnQAAHJ9AAByhsAAco/AAHKQgABykQAAcpGAAHKSAABykoAAcpMAAHKTQABylAAAcpdAAHKbAABym4AAcpwAAHKcgABynQAAcp2AAHKeAABynoAAcqJAAHKjAAByo8AAcqSAAHKlQABypgAAcqbAAHKngAByqAAAcrfAAHK4QAByuQAAcrmAAHK6QAByuoAAcrrAAHK7AAByu0AAcrvAAHK8QAByvIAAcrzAAHK9QAByvYAAcr3AAHLNgAByzgAAcs6AAHLPAAByz8AActAAAHLQQABy0IAActDAAHLRQABy0cAActIAAHLSQABy0sAActMAAHLiwABy40AAcuPAAHLkQABy5QAAcuVAAHLlgABy5cAAcuYAAHLmgABy5wAAcudAAHLngABy6AAAcuhAAHL4AABy+IAAcvkAAHL5gABy+kAAcvqAAHL6wABy+wAAcvtAAHL7wABy/EAAcvyAAHL8wABy/UAAcv2AAHMNQABzDcAAcw5AAHMOwABzD4AAcw/AAHMQAABzEEAAcxCAAHMRAABzEYAAcxHAAHMSAABzEoAAcxLAAHMigABzIwAAcyOAAHMkAABzJMAAcyUAAHMlQABzJYAAcyXAAHMmQABzJsAAcycAAHMnQABzJ8AAcygAAHM3wABzOEAAczjAAHM5QABzOgAAczpAAHM6gABzOsAAczsAAHM7gABzPAAAczxAAHM8gABzPQAAcz1AAHNQAABzWMAAc2DAAHNowABzaUAAc2nAAHNqQABzasAAc2uAAHNrwABzbAAAc2zAAHNtAABzbYAAc23AAHNuQABzbwAAc29AAHNvgABzcEAAc3CAAHNywABzdgAAc3dAAHN3wABzeEAAc3mAAHN6QABzewAAc3uAAHOEwABzjcAAc5eAAHOggABzoUAAc6HAAHOiQABzosAAc6NAAHOjwABzpAAAc6TAAHOoAABzrEAAc6zAAHOtQABzrcAAc65AAHOuwABzr0AAc6/AAHOwQABztIAAc7VAAHO2AABztsAAc7eAAHO4QABzuQAAc7nAAHO6gABzuwAAc8rAAHPLQABzy8AAc8xAAHPNAABzzUAAc82AAHPNwABzzgAAc86AAHPPAABzz0AAc8+AAHPQAABz0EAAc+AAAHPggABz4QAAc+GAAHPiQABz4oAAc+LAAHPjAABz40AAc+PAAHPkQABz5IAAc+TAAHPlQABz5YAAc/VAAHP1wABz9oAAc/cAAHP3wABz+AAAc/hAAHP4gABz+MAAc/lAAHP5wABz+gAAc/pAAHP6wABz+wAAc/5AAHP+gABz/sAAc/9AAHQPAAB0D4AAdBAAAHQQgAB0EUAAdBGAAHQRwAB0EgAAdBJAAHQSwAB0E0AAdBOAAHQTwAB0FEAAdBSAAHQkQAB0JMAAdCVAAHQlwAB0JoAAdCbAAHQnAAB0J0AAdCeAAHQoAAB0KIAAdCjAAHQpAAB0KYAAdCnAAHQ5gAB0OgAAdDqAAHQ7AAB0O8AAdDwAAHQ8QAB0PIAAdDzAAHQ9QAB0PcAAdD4AAHQ+QAB0PsAAdD8AAHROwAB0T0AAdE/AAHRQQAB0UQAAdFFAAHRRgAB0UcAAdFIAAHRSgAB0UwAAdFNAAHRTgAB0VAAAdFRAAHRkAAB0ZIAAdGUAAHRlgAB0ZkAAdGaAAHRmwAB0ZwAAdGdAAHRnwAB0aEAAdGiAAHRowAB0aUAAdGmAAHRywAB0e8AAdIWAAHSOgAB0j0AAdI/AAHSQQAB0kMAAdJFAAHSRwAB0kgAAdJLAAHSWAAB0mcAAdJpAAHSawAB0m0AAdJvAAHScQAB0nMAAdJ1AAHShAAB0ocAAdKKAAHSjQAB0pAAAdKTAAHSlgAB0pkAAdKbAAHS2gAB0twAAdLeAAHS4AAB0uMAAdLkAAHS5QAB0uYAAdLnAAHS6QAB0usAAdLsAAHS7QAB0u8AAdLwAAHTLwAB0zEAAdMzAAHTNQAB0zgAAdM5AAHTOgAB0zsAAdM8AAHTPgAB00AAAdNBAAHTQgAB00QAAdNFAAHThAAB04YAAdOIAAHTigAB040AAdOOAAHTjwAB05AAAdORAAHTkwAB05UAAdOWAAHTlwAB05kAAdOaAAHT2QAB09sAAdPdAAHT3wAB0+IAAdPjAAHT5AAB0+UAAdPmAAHT6AAB0+oAAdPrAAHT7AAB0+4AAdPvAAHULgAB1DAAAdQyAAHUNAAB1DcAAdQ4AAHUOQAB1DoAAdQ7AAHUPQAB1D8AAdRAAAHUQQAB1EMAAdREAAHUgwAB1IUAAdSHAAHUiQAB1IwAAdSNAAHUjgAB1I8AAdSQAAHUkgAB1JQAAdSVAAHUlgAB1JgAAdSZAAHU2AAB1NoAAdTcAAHU3gAB1OEAAdTiAAHU4wAB1OQAAdTlAAHU5wAB1OkAAdTqAAHU6wAB1O0AAdTuAAHVOQAB1VwAAdV8AAHVnAAB1Z4AAdWgAAHVogAB1aQAAdWnAAHVqAAB1akAAdWsAAHVrQAB1a8AAdWwAAHVsgAB1bUAAdW2AAHVtwAB1boAAdW7AAHVwAAB1c0AAdXSAAHV1AAB1dYAAdXbAAHV3gAB1eEAAdXjAAHWCAAB1iwAAdZTAAHWdwAB1noAAdZ8AAHWfgAB1oAAAdaCAAHWhAAB1oUAAdaIAAHWlQAB1qYAAdaoAAHWqgAB1qwAAdauAAHWsAAB1rIAAda0AAHWtgAB1scAAdbKAAHWzQAB1tAAAdbTAAHW1gAB1tkAAdbcAAHW3wAB1uEAAdcgAAHXIgAB1yQAAdcmAAHXKQAB1yoAAdcrAAHXLAAB1y0AAdcvAAHXMQAB1zIAAdczAAHXNQAB1zYAAdd1AAHXdwAB13kAAdd7AAHXfgAB138AAdeAAAHXgQAB14IAAdeEAAHXhgAB14cAAdeIAAHXigAB14sAAdfKAAHXzAAB188AAdfRAAHX1AAB19UAAdfWAAHX1wAB19gAAdfaAAHX3AAB190AAdfeAAHX4AAB1+EAAdfuAAHX7wAB1/AAAdfyAAHYMQAB2DMAAdg1AAHYNwAB2DoAAdg7AAHYPAAB2D0AAdg+AAHYQAAB2EIAAdhDAAHYRAAB2EYAAdhHAAHYhgAB2IgAAdiKAAHYjAAB2I8AAdiQAAHYkQAB2JIAAdiTAAHYlQAB2JcAAdiYAAHYmQAB2JsAAdicAAHY2wAB2N0AAdjfAAHY4QAB2OQAAdjlAAHY5gAB2OcAAdjoAAHY6gAB2OwAAdjtAAHY7gAB2PAAAdjxAAHZMAAB2TIAAdk0AAHZNgAB2TkAAdk6AAHZOwAB2TwAAdk9AAHZPwAB2UEAAdlCAAHZQwAB2UUAAdlGAAHZhQAB2YcAAdmJAAHZiwAB2Y4AAdmPAAHZkAAB2ZEAAdmSAAHZlAAB2ZYAAdmXAAHZmAAB2ZoAAdmbAAHZwAAB2eQAAdoLAAHaLwAB2jIAAdo0AAHaNgAB2jgAAdo6AAHaPAAB2j0AAdpAAAHaTQAB2lwAAdpeAAHaYAAB2mIAAdpkAAHaZgAB2mgAAdpqAAHaeQAB2nwAAdp/AAHaggAB2oUAAdqIAAHaiwAB2o4AAdqQAAHazwAB2tEAAdrTAAHa1QAB2tgAAdrZAAHa2gAB2tsAAdrcAAHa3gAB2uAAAdrhAAHa4gAB2uQAAdrlAAHbJAAB2yYAAdsoAAHbKgAB2y0AAdsuAAHbLwAB2zAAAdsxAAHbMwAB2zUAAds2AAHbNwAB2zkAAds6AAHbeQAB23sAAdt9AAHbfwAB24IAAduDAAHbhAAB24UAAduGAAHbiAAB24oAAduLAAHbjAAB244AAduPAAHbzgAB29AAAdvSAAHb1AAB29cAAdvYAAHb2QAB29oAAdvbAAHb3QAB298AAdvgAAHb4QAB2+MAAdvkAAHcIwAB3CUAAdwnAAHcKQAB3CwAAdwtAAHcLgAB3C8AAdwwAAHcMgAB3DQAAdw1AAHcNgAB3DgAAdw5AAHceAAB3HoAAdx8AAHcfgAB3IEAAdyCAAHcgwAB3IQAAdyFAAHchwAB3IkAAdyKAAHciwAB3I0AAdyOAAHczQAB3M8AAdzRAAHc0wAB3NYAAdzXAAHc2AAB3NkAAdzaAAHc3AAB3N4AAdzfAAHc4AAB3OIAAdzjAAHc7AAB3O0AAdzvAAHdLgAB3TAAAd0yAAHdNAAB3TcAAd04AAHdOQAB3ToAAd07AAHdPQAB3T8AAd1AAAHdQQAB3UMAAd1EAAHdgwAB3YUAAd2HAAHdiQAB3YwAAd2NAAHdjgAB3Y8AAd2QAAHdkgAB3ZQAAd2VAAHdlgAB3ZgAAd2ZAAHd2AAB3doAAd3dAAHd3wAB3eIAAd3jAAHd5AAB3eUAAd3mAAHd6AAB3eoAAd3rAAHd7AAB3e4AAd3vAAHeOgAB3l0AAd59AAHenQAB3p8AAd6hAAHeowAB3qUAAd6nAAHeqAAB3qkAAd6sAAHerQAB3q8AAd6wAAHesgAB3rQAAd61AAHetgAB3rkAAd66AAHevwAB3swAAd7RAAHe0wAB3tUAAd7aAAHe3QAB3uAAAd7iAAHfBwAB3ysAAd9SAAHfdgAB33kAAd97AAHffQAB338AAd+BAAHfgwAB34QAAd+HAAHflAAB36UAAd+nAAHfqQAB36sAAd+tAAHfrwAB37EAAd+zAAHftQAB38YAAd/JAAHfzAAB388AAd/SAAHf1QAB39gAAd/bAAHf3gAB3+AAAeAfAAHgIQAB4CMAAeAlAAHgKAAB4CkAAeAqAAHgKwAB4CwAAeAuAAHgMAAB4DEAAeAyAAHgNAAB4DUAAeB0AAHgdgAB4HgAAeB6AAHgfQAB4H4AAeB/AAHggAAB4IEAAeCDAAHghQAB4IYAAeCHAAHgiQAB4IoAAeDJAAHgywAB4M4AAeDQAAHg0wAB4NQAAeDVAAHg1gAB4NcAAeDZAAHg2wAB4NwAAeDdAAHg3wAB4OAAAeDtAAHg7gAB4O8AAeDxAAHhMAAB4TIAAeE0AAHhNgAB4TkAAeE6AAHhOwAB4TwAAeE9AAHhPwAB4UEAAeFCAAHhQwAB4UUAAeFGAAHhhQAB4YcAAeGJAAHhiwAB4Y4AAeGPAAHhkAAB4ZEAAeGSAAHhlAAB4ZYAAeGXAAHhmAAB4ZoAAeGbAAHh2gAB4dwAAeHeAAHh4AAB4eMAAeHkAAHh5QAB4eYAAeHnAAHh6QAB4esAAeHsAAHh7QAB4e8AAeHwAAHiLwAB4jEAAeIzAAHiNQAB4jgAAeI5AAHiOgAB4jsAAeI8AAHiPgAB4kAAAeJBAAHiQgAB4kQAAeJFAAHihAAB4oYAAeKIAAHiigAB4o0AAeKOAAHijwAB4pAAAeKRAAHikwAB4pUAAeKWAAHilwAB4pkAAeKaAAHivwAB4uMAAeMKAAHjLgAB4zEAAeMzAAHjNQAB4zcAAeM5AAHjOwAB4zwAAeM/AAHjTAAB41sAAeNdAAHjXwAB42EAAeNjAAHjZQAB42cAAeNpAAHjeAAB43sAAeN+AAHjgQAB44QAAeOHAAHjigAB440AAeOPAAHjzgAB49AAAePTAAHj1QAB49gAAePZAAHj2gAB49sAAePcAAHj3gAB4+AAAePhAAHj4gAB4+QAAePlAAHkJAAB5CYAAeQoAAHkKgAB5C0AAeQuAAHkLwAB5DAAAeQxAAHkMwAB5DUAAeQ2AAHkNwAB5DkAAeQ6AAHkeQAB5HsAAeR9AAHkfwAB5IIAAeSDAAHkhAAB5IUAAeSGAAHkiAAB5IoAAeSLAAHkjAAB5I4AAeSPAAHkzgAB5NAAAeTTAAHk1QAB5NgAAeTZAAHk2gAB5NsAAeTcAAHk3gAB5OAAAeThAAHk4gAB5OQAAeTlAAHlJAAB5SYAAeUoAAHlKgAB5S0AAeUuAAHlLwAB5TAAAeUxAAHlMwAB5TUAAeU2AAHlNwAB5TkAAeU6AAHleQAB5XsAAeV9AAHlfwAB5YIAAeWDAAHlhAAB5YUAAeWGAAHliAAB5YoAAeWLAAHljAAB5Y4AAeWPAAHlzgAB5dAAAeXSAAHl1AAB5dcAAeXYAAHl2QAB5doAAeXbAAHl3QAB5d8AAeXgAAHl4QAB5eMAAeXkAAHmLwAB5lIAAeZyAAHmkgAB5pQAAeaWAAHmmAAB5poAAeacAAHmnQAB5p4AAeahAAHmogAB5qQAAealAAHmpwAB5qkAAeaqAAHmqwAB5q4AAeavAAHmtAAB5sEAAebGAAHmyAAB5soAAebPAAHm0gAB5tUAAebXAAHm/AAB5yAAAedHAAHnawAB524AAedwAAHncgAB53QAAed2AAHneAAB53kAAed8AAHniQAB55oAAeecAAHnngAB56AAAeeiAAHnpAAB56YAAeeoAAHnqgAB57sAAee+AAHnwQAB58QAAefHAAHnygAB580AAefQAAHn0wAB59UAAegUAAHoFgAB6BgAAegaAAHoHQAB6B4AAegfAAHoIAAB6CEAAegjAAHoJQAB6CYAAegnAAHoKQAB6CoAAehpAAHoawAB6G0AAehvAAHocgAB6HMAAeh0AAHodQAB6HYAAeh4AAHoegAB6HsAAeh8AAHofgAB6H8AAei+AAHowAAB6MMAAejFAAHoyAAB6MkAAejKAAHoywAB6MwAAejOAAHo0AAB6NEAAejSAAHo1AAB6NUAAejiAAHo4wAB6OQAAejmAAHpJQAB6ScAAekpAAHpKwAB6S4AAekvAAHpMAAB6TEAAekyAAHpNAAB6TYAAek3AAHpOAAB6ToAAek7AAHpegAB6XwAAel+AAHpgAAB6YMAAemEAAHphQAB6YYAAemHAAHpiQAB6YsAAemMAAHpjQAB6Y8AAemQAAHpzwAB6dEAAenTAAHp1QAB6dgAAenZAAHp2gAB6dsAAencAAHp3gAB6eAAAenhAAHp4gAB6eQAAenlAAHqJAAB6iYAAeooAAHqKgAB6i0AAeouAAHqLwAB6jAAAeoxAAHqMwAB6jUAAeo2AAHqNwAB6jkAAeo6AAHqeQAB6nsAAep9AAHqfwAB6oIAAeqDAAHqhAAB6oUAAeqGAAHqiAAB6ooAAeqLAAHqjAAB6o4AAeqPAAHqtAAB6tgAAer/AAHrIwAB6yYAAesoAAHrKgAB6ywAAesuAAHrMAAB6zEAAes0AAHrQQAB61AAAetSAAHrVAAB61YAAetYAAHrWgAB61wAAeteAAHrbQAB63AAAetzAAHrdgAB63kAAet8AAHrfwAB64IAAeuEAAHrwwAB68UAAevHAAHryQAB68wAAevNAAHrzgAB688AAevQAAHr0gAB69QAAevVAAHr1gAB69gAAevZAAHsGAAB7BoAAewcAAHsHgAB7CEAAewiAAHsIwAB7CQAAewlAAHsJwAB7CkAAewqAAHsKwAB7C0AAewuAAHsbQAB7G8AAexxAAHscwAB7HYAAex3AAHseAAB7HkAAex6AAHsfAAB7H4AAex/AAHsgAAB7IIAAeyDAAHswgAB7MQAAezHAAHsyQAB7MwAAezNAAHszgAB7M8AAezQAAHs0gAB7NQAAezVAAHs1gAB7NgAAezZAAHtGAAB7RoAAe0cAAHtHgAB7SEAAe0iAAHtIwAB7SQAAe0lAAHtJwAB7SkAAe0qAAHtKwAB7S0AAe0uAAHtbQAB7W8AAe1xAAHtcwAB7XYAAe13AAHteAAB7XkAAe16AAHtfAAB7X4AAe1/AAHtgAAB7YIAAe2DAAHtwgAB7cQAAe3GAAHtyAAB7csAAe3MAAHtzQAB7c4AAe3PAAHt0QAB7dMAAe3UAAHt1QAB7dcAAe3YAAHuIwAB7kYAAe5mAAHuhgAB7ogAAe6KAAHujAAB7o4AAe6QAAHukQAB7pIAAe6VAAHulgAB7pgAAe6ZAAHumwAB7p0AAe6eAAHunwAB7qIAAe6jAAHurAAB7rkAAe6+AAHuwAAB7sIAAe7HAAHuygAB7s0AAe7PAAHu9AAB7xgAAe8/AAHvYwAB72YAAe9oAAHvagAB72wAAe9uAAHvcAAB73EAAe90AAHvgQAB75IAAe+UAAHvlgAB75gAAe+aAAHvnAAB754AAe+gAAHvogAB77MAAe+2AAHvuQAB77wAAe+/AAHvwgAB78UAAe/IAAHvywAB780AAfAMAAHwDgAB8BAAAfASAAHwFQAB8BYAAfAXAAHwGAAB8BkAAfAbAAHwHQAB8B4AAfAfAAHwIQAB8CIAAfBhAAHwYwAB8GUAAfBnAAHwagAB8GsAAfBsAAHwbQAB8G4AAfBwAAHwcgAB8HMAAfB0AAHwdgAB8HcAAfC2AAHwuAAB8LsAAfC9AAHwwAAB8MEAAfDCAAHwwwAB8MQAAfDGAAHwyAAB8MkAAfDKAAHwzAAB8M0AAfDaAAHw2wAB8NwAAfD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RAAIHkwACB5YAAgeXAAIHmAACB5kAAgeaAAIHnAACB54AAgefAAIHoAACB6IAAgejAAIH4gACB+QAAgfmAAIH6AACB+sAAgfsAAIH7QACB+4AAgfvAAIH8QACB/MAAgf0AAIH9QACB/cAAgf4AAIINwACCDkAAgg8AAIIPgACCEEAAghCAAIIQwACCEQAAghFAAIIRwACCEkAAghKAAIISwACCE0AAghOAAIIWwACCFwAAghdAAIIXwACCJ4AAgigAAIIogACCKQAAginAAIIqAACCKkAAgiqAAIIqwACCK0AAgivAAIIsAACCLEAAgizAAIItAACCPMAAgj1AAII9wACCPkAAgj8AAII/QACCP4AAgj/AAIJAAACCQIAAgkEAAIJBQACCQYAAgkIAAIJCQACCUgAAglKAAIJTAACCU4AAglRAAIJUgACCVMAAglUAAIJVQACCVcAAglZAAIJWgACCVsAAgldAAIJXgACCZ0AAgmfAAIJoQACCaMAAgmmAAIJpwACCagAAgmpAAIJqgACCawAAgmuAAIJrwACCbAAAgmyAAIJswACCfIAAgn0AAIJ9gACCfgAAgn7AAIJ/AACCf0AAgn+AAIJ/wACCgEAAgoDAAIKBAACCgUAAgoHAAIKCAACCi0AAgpRAAIKeAACCpwAAgqfAAIKoQACCqMAAgqlAAIKpwACCqkAAgqqAAIKrQACCroAAgrJAAIKywACCs0AAgrPAAIK0QACCtMAAgrVAAIK1wACCuYAAgrpAAIK7AACCu8AAgryAAIK9QACCvgAAgr7AAIK/QACCzwAAgs+AAILQAACC0IAAgtFAAILRgACC0cAAgtIAAILSQACC0sAAgtNAAILTgACC08AAgtRAAILUgACC5EAAguTAAILlQACC5cAAguaAAILmwACC5wAAgudAAILngACC6AAAguiAAILowACC6QAAgumAAILpwACC+YAAgvoAAIL6gACC+wAAgvvAAIL8AACC/EAAgvyAAIL8wACC/UAAgv3AAIL+AACC/kAAgv7AAIL/AACDDsAAgw9AAIMQAACDEIAAgxFAAIMRgACDEcAAgxIAAIMSQACDEsAAgxNAAIMTgACDE8AAgxRAAIMUgACDJUAAgy5AAIM3QACDQAAAg0nAAINRwACDW4AAg2VAAINtQACDdkAAg39AAIN/wACDgIAAg4EAAIOBgACDggAAg4LAAIODgACDhAAAg4SAAIOFQACDhcAAg4ZAAIOHAACDh8AAg4gAAIOJQACDjIAAg41AAIONwACDjoAAg49AAIOPwACDmQAAg6IAAIOrwACDtMAAg7WAAIO2AACDtoAAg7cAAIO3gACDuAAAg7hAAIO5AACDvEAAg8EAAIPBgACDwgAAg8KAAIPDAACDw4AAg8QAAIPEgACDxQAAg8WAAIPKQACDywAAg8vAAIPMgACDzUAAg84AAIPOwACDz4AAg9BAAIPRAACD0YAAg+FAAIPhwACD4oAAg+MAAIPjwACD5AAAg+RAAIPkgACD5MAAg+VAAIPlwACD5gAAg+ZAAIPmwACD5wAAg+lAAIPpgACD6gAAg/nAAIP6QACD+sAAg/tAAIP8AACD/EAAg/yAAIP8wACD/QAAg/2AAIP+AACD/kAAg/6AAIP/AACD/0AAhA8AAIQPgACEEEAAhBDAAIQRgACEEcAAhBIAAIQSQACEEoAAhBMAAIQTgACEE8AAhBQAAIQUgACEFMAAhBcAAIQXQACEF8AAhCeAAIQoAACEKIAAhCkAAIQpwACEKgAAhCpAAIQqgACEKsAAhCtAAIQrwACELAAAhCxAAIQswACELQAAhDzAAIQ9QACEPgAAhD6AAIQ/QACEP4AAhD/AAIRAAACEQEAAhEDAAIRBQACEQYAAhEHAAIRCQACEQoAAhETAAIRFAACERYAAhFVAAIRVwACEVkAAhFbAAIRXgACEV8AAhFgAAIRYQACEWIAAhFkAAIRZgACEWcAAhFoAAIRagACEWsAAhGqAAIRrAACEa8AAhGxAAIRtAACEbUAAhG2AAIRtwACEbgAAhG6AAIRvAACEb0AAhG+AAIRwAACEcEAAhHOAAIRzwACEdAAAhHSAAISEQACEhMAAhIVAAISFwACEhoAAhIbAAISHAACEh0AAhIeAAISIAACEiIAAhIjAAISJAACEiYAAhInAAISZgACEmgAAhJrAAISbQACEnAAAhJxAAIScgACEnMAAhJ0AAISdgACEngAAhJ5AAISegACEnwAAhJ9AAISkAACEp0AAhKoAAISqwACEq0AAhKwAAISswACErYAAhLBAAISxAACEscAAhLKAAISzQACEtAAAhLSAAIS6gACEvwAAhMHAAITHwACE2oAAhONAAITrQACE80AAhPPAAIT0QACE9MAAhPVAAIT2AACE9kAAhPaAAIT3QACE94AAhPgAAIT4QACE+MAAhPmAAIT5wACE+gAAhPrAAIT7AACE/EAAhP+AAIUAwACFAUAAhQHAAIUDAACFA8AAhQSAAIUFAACFDkAAhRdAAIUhAACFKgAAhSrAAIUrQACFK8AAhSxAAIUswACFLUAAhS2AAIUuQACFMYAAhTXAAIU2QACFNsAAhTdAAIU3wACFOEAAhTjAAIU5QACFOcAAhT4AAIU+wACFP4AAhUBAAIVBAACFQcAAhUKAAIVDQACFRAAAhUSAAIVUQACFVMAAhVVAAIVVwACFVoAAhVbAAIVXAACFV0AAhVeAAIVYAACFWIAAhVjAAIVZAACFWYAAhVnAAIVpgACFagAAhWqAAIVrAACFa8AAhWwAAIVsQACFbIAAhWzAAIVtQACFbcAAhW4AAIVuQACFbsAAhW8AAIV+wACFf0AAhYAAAIWAgACFgUAAhYGAAIWBwACFggAAhYJAAIWCwACFg0AAhYOAAIWDwACFhEAAhYSAAIWHwACFiAAAhYhAAIWIwACFmIAAhZkAAIWZgACFmgAAhZrAAIWbAACFm0AAhZuAAIWbwACFnEAAhZzAAIWdAACFnUAAhZ3AAIWeAACFrcAAha5AAIWuwACFr0AAhbAAAIWwQACFsIAAhbDAAIWxAACFsYAAhbIAAIWyQACFsoAAhbMAAIWzQACFwwAAhcOAAIXEAACFxIAAhcVAAIXFgACFxcAAhcYAAIXGQACFxsAAhcdAAIXHgACFx8AAhchAAIXIgACF2EAAhdjAAIXZQACF2cAAhdqAAIXawACF2wAAhdtAAIXbgACF3AAAhdyAAIXcwACF3QAAhd2AAIXdwACF7YAAhe4AAIXugACF7wAAhe/AAIXwAACF8EAAhfCAAIXwwACF8UAAhfHAAIXyAACF8kAAhfLAAIXzAACF/EAAhgVAAIYPAACGGAAAhhjAAIYZQACGGcAAhhpAAIYawACGG0AAhhuAAIYcQACGH4AAhiNAAIYjwACGJEAAhiTAAIYlQACGJcAAhiZAAIYmwACGKoAAhitAAIYsAACGLMAAhi2AAIYuQACGLwAAhi/AAIYwQACGQAAAhkCAAIZBAACGQYAAhkJAAIZCgACGQsAAhkMAAIZDQACGQ8AAhkRAAIZEgACGRMAAhkVAAIZFgACGVUAAhlXAAIZWQACGVsAAhleAAIZXwACGWAAAhlhAAIZYgACGWQAAhlmAAIZZwACGWgAAhlqAAIZawACGaoAAhmsAAIZrgACGbAAAhmzAAIZtAACGbUAAhm2AAIZtwACGbkAAhm7AAIZvAACGb0AAhm/AAIZwAACGf8AAhoBAAIaBAACGgYAAhoJAAIaCgACGgsAAhoMAAIaDQACGg8AAhoRAAIaEgACGhMAAhoVAAIaFgACGlUAAhpXAAIaWQACGlsAAhpeAAIaXwACGmAAAhphAAIaYgACGmQAAhpmAAIaZwACGmgAAhpqAAIaawACGqoAAhqsAAIargACGrAAAhqzAAIatAACGrUAAhq2AAIatwACGrkAAhq7AAIavAACGr0AAhq/AAIawAACGv8AAhsBAAIbAwACGwUAAhsIAAIbCQACGwoAAhsLAAIbDAACGw4AAhsQAAIbEQACGxIAAhsUAAIbFQACG2AAAhuDAAIbowACG8MAAhvFAAIbxwACG8kAAhvLAAIbzgACG88AAhvQAAIb0wACG9QAAhvWAAIb1wACG9kAAhvbAAIb3AACG90AAhvgAAIb4QACG+YAAhvzAAIb+AACG/oAAhv8AAIcAQACHAQAAhwHAAIcCQACHC4AAhxSAAIceQACHJ0AAhygAAIcogACHKQAAhymAAIcqAACHKoAAhyrAAIcrgACHLsAAhzMAAIczgACHNAAAhzSAAIc1AACHNYAAhzYAAIc2gACHNwAAhztAAIc8AACHPMAAhz2AAIc+QACHPwAAhz/AAIdAgACHQUAAh0HAAIdRgACHUgAAh1KAAIdTAACHU8AAh1QAAIdUQACHVIAAh1TAAIdVQACHVcAAh1YAAIdWQACHVsAAh1cAAIdmwACHZ0AAh2fAAIdoQACHaQAAh2lAAIdpgACHacAAh2oAAIdqgACHawAAh2tAAIdrgACHbAAAh2xAAId8AACHfIAAh31AAId9wACHfoAAh37AAId/AACHf0AAh3+AAIeAAACHgIAAh4DAAIeBAACHgYAAh4HAAIeFAACHhUAAh4WAAIeGAACHlcAAh5ZAAIeWwACHl0AAh5gAAIeYQACHmIAAh5jAAIeZAACHmYAAh5oAAIeaQACHmoAAh5sAAIebQACHqwAAh6uAAIesAACHrIAAh61AAIetgACHrcAAh64AAIeuQACHrsAAh69AAIevgACHr8AAh7BAAIewgACHwEAAh8DAAIfBQACHwcAAh8KAAIfCwACHwwAAh8NAAIfDgACHxAAAh8SAAIfEwACHxQAAh8WAAIfFwACH1YAAh9YAAIfWgACH1wAAh9fAAIfYAACH2EAAh9iAAIfYwACH2UAAh9nAAIfaAACH2kAAh9rAAIfbAACH6sAAh+tAAIfrwACH7EAAh+0AAIftQACH7YAAh+3AAIfuAACH7oAAh+8AAIfvQACH74AAh/AAAIfwQACH+YAAiAKAAIgMQACIFUAAiBYAAIgWgACIFwAAiBeAAIgYAACIGIAAiBjAAIgZgACIHMAAiCCAAIghAACIIYAAiCIAAIgigACIIwAAiCOAAIgkAACIJ8AAiCiAAIgpQACIKgAAiCrAAIgrgACILEAAiC0AAIgtgACIPUAAiD3AAIg+QACIPsAAiD+AAIg/wACIQAAAiEBAAIhAgACIQQAAiEGAAIhBwACIQgAAiEKAAIhCwACIUoAAiFMAAIhTgACIVAAAiFTAAIhVAACIVUAAiFWAAIhVwACIVkAAiFbAAIhXAACIV0AAiFfAAIhYAACIZ8AAiGhAAIhowACIaUAAiGoAAIhqQACIaoAAiGrAAIhrAACIa4AAiGwAAIhsQACIbIAAiG0AAIhtQACIfQAAiH2AAIh+AACIfoAAiH9AAIh/gACIf8AAiIAAAIiAQACIgMAAiIFAAIiBgACIgcAAiIJAAIiCgACIkkAAiJLAAIiTQACIk8AAiJSAAIiUwACIlQAAiJVAAIiVgACIlgAAiJaAAIiWwACIlwAAiJeAAIiXwACIp4AAiKgAAIiogACIqQAAiKnAAIiqAACIqkAAiKqAAIiqwACIq0AAiKvAAIisAACIrEAAiKzAAIitAACIvMAAiL1AAIi+AACIvoAAiL9AAIi/gACIv8AAiMAAAIjAQACIwMAAiMFAAIjBgACIwcAAiMJAAIjCgACI1UAAiN4AAIjmAACI7gAAiO6AAIjvAACI74AAiPAAAIjwwACI8QAAiPFAAIjyAACI8kAAiPLAAIjzAACI84AAiPRAAIj0gACI9MAAiPWAAIj1wACI9wAAiPpAAIj7gACI/AAAiPyAAIj9wACI/oAAiP9AAIj/wACJCQAAiRIAAIkbwACJJMAAiSWAAIkmAACJJoAAiScAAIkngACJKAAAiShAAIkpAACJLEAAiTCAAIkxAACJMYAAiTIAAIkygACJMwAAiTOAAIk0AACJNIAAiTjAAIk5gACJOkAAiTsAAIk7wACJPIAAiT1AAIk+AACJPsAAiT9AAIlPAACJT4AAiVAAAIlQgACJUUAAiVGAAIlRwACJUgAAiVJAAIlSwACJU0AAiVOAAIlTwACJVEAAiVSAAIlkQACJZMAAiWVAAIllwACJZoAAiWbAAIlnAACJZ0AAiWeAAIloAACJaIAAiWjAAIlpAACJaYAAiWnAAIl5gACJegAAiXrAAIl7QACJfAAAiXxAAIl8gACJfMAAiX0AAIl9gACJfgAAiX5AAIl+gACJfwAAiX9AAImCgACJgsAAiYMAAImDgACJk0AAiZPAAImUQACJlMAAiZWAAImVwACJlgAAiZZAAImWgACJlwAAiZeAAImXwACJmAAAiZiAAImYwACJqIAAiakAAImpgACJqgAAiarAAImrAACJq0AAiauAAImrwACJrEAAiazAAImtAACJrUAAia3AAImuAACJvcAAib5AAIm+wACJv0AAicAAAInAQACJwIAAicDAAInBAACJwYAAicIAAInCQACJwoAAicMAAInDQACJ0wAAidOAAInUAACJ1IAAidVAAInVgACJ1cAAidYAAInWQACJ1sAAiddAAInXgACJ18AAidhAAInYgACJ6EAAiejAAInpQACJ6cAAieqAAInqwACJ6wAAietAAInrgACJ7AAAieyAAInswACJ7QAAie2AAIntwACJ9wAAigAAAIoJwACKEsAAihOAAIoUAACKFIAAihUAAIoVgACKFgAAihZAAIoXAACKGkAAih2AAIoeAACKHoAAih8AAIofgACKIAAAiiCAAIojwACKJIAAiiVAAIomAACKJsAAiieAAIooQACKKMAAijiAAIo5AACKOcAAijpAAIo7AACKO0AAijuAAIo7wACKPAAAijyAAIo9AACKPUAAij2AAIo+AACKPkAAik8AAIpYAACKYQAAimnAAIpzgACKe4AAioVAAIqPAACKlwAAiqAAAIqpAACKqYAAiqpAAIqqwACKq0AAiqvAAIqsgACKrUAAiq3AAIquQACKrwAAiq+AAIqwAACKsMAAirGAAIqxwACKswAAirZAAIq3AACKt4AAirhAAIq5AACKuYAAisLAAIrLwACK1YAAit6AAIrfQACK38AAiuBAAIrgwACK4UAAiuHAAIriAACK4sAAiuYAAIrqwACK60AAiuvAAIrsQACK7MAAiu1AAIrtwACK7kAAiu7AAIrvQACK9AAAivTAAIr1gACK9kAAivcAAIr3wACK+IAAivlAAIr6AACK+sAAivtAAIsLAACLC4AAiwxAAIsMwACLDYAAiw3AAIsOAACLDkAAiw6AAIsPAACLD4AAiw/AAIsQAACLEIAAixDAAIsTAACLE0AAixPAAIsjgACLJAAAiySAAIslAACLJcAAiyYAAIsmQACLJoAAiybAAIsnQACLJ8AAiygAAIsoQACLKMAAiykAAIs4wACLOUAAizoAAIs6gACLO0AAizuAAIs7wACLPAAAizxAAIs8wACLPUAAiz2AAIs9wACLPkAAiz6AAItAwACLQQAAi0GAAItRQACLUcAAi1JAAItSwACLU4AAi1PAAItUAACLVEAAi1SAAItVAACLVYAAi1XAAItWAACLVoAAi1bAAItmgACLZwAAi2fAAItoQACLaQAAi2lAAItpgACLacAAi2oAAItqgACLawAAi2tAAItrgACLbAAAi2xAAItugACLbsAAi29AAIt/AACLf4AAi4AAAIuAgACLgUAAi4GAAIuBwACLggAAi4JAAIuCwACLg0AAi4OAAIuDwACLhEAAi4SAAIuUQACLlMAAi5WAAIuWAACLlsAAi5cAAIuXQACLl4AAi5fAAIuYQACLmMAAi5kAAIuZQACLmcAAi5oAAIudQACLnYAAi53AAIueQACLrgAAi66AAIuvAACLr4AAi7BAAIuwgACLsMAAi7EAAIuxQACLscAAi7JAAIuygACLssAAi7NAAIuzgACLw0AAi8PAAIvEgACLxQAAi8XAAIvGAACLxkAAi8aAAIvGwACLx0AAi8fAAIvIAACLyEAAi8jAAIvJAACLzoAAi9HAAIvTgACL1EAAi9UAAIvVwACL14AAi9hAAIvZAACL2cAAi9pAAIvcwACL74AAi/hAAIwAQACMCEAAjAjAAIwJQACMCcAAjApAAIwLAACMC0AAjAuAAIwMQACMDIAAjA0AAIwNQACMDcAAjA6AAIwOwACMDwAAjA/AAIwQAACMEUAAjBSAAIwVwACMFkAAjBbAAIwYAACMGMAAjBmAAIwaAACMI0AAjCxAAIw2AACMPwAAjD/AAIxAQACMQMAAjEFAAIxBwACMQkAAjEKAAIxDQACMRoAAjErAAIxLQACMS8AAjExAAIxMwACMTUAAjE3AAIxOQACMTsAAjFMAAIxTwACMVIAAjFVAAIxWAACMVsAAjFeAAIxYQACMWQAAjFmAAIxpQACMacAAjGpAAIxqwACMa4AAjGvAAIxsAACMbEAAjGyAAIxtAACMbYAAjG3AAIxuAACMboAAjG7AAIx+gACMfwAAjH+AAIyAAACMgMAAjIEAAIyBQACMgYAAjIHAAIyCQACMgsAAjIMAAIyDQACMg8AAjIQAAIyTwACMlEAAjJUAAIyVgACMlkAAjJaAAIyWwACMlwAAjJdAAIyXwACMmEAAjJiAAIyYwACMmUAAjJmAAIycwACMnQAAjJ1AAIydwACMrYAAjK4AAIyugACMrwAAjK/AAIywAACMsEAAjLCAAIywwACMsUAAjLHAAIyyAACMskAAjLLAAIyzAACMwsAAjMNAAIzDwACMxEAAjMUAAIzFQACMxYAAjMXAAIzGAACMxoAAjMcAAIzHQACMx4AAjMgAAIzIQACM2AAAjNiAAIzZAACM2YAAjNpAAIzagACM2sAAjNsAAIzbQACM28AAjNxAAIzcgACM3MAAjN1AAIzdgACM7UAAjO3AAIzuQACM7sAAjO+AAIzvwACM8AAAjPBAAIzwgACM8QAAjPGAAIzxwACM8gAAjPKAAIzywACNAoAAjQMAAI0DgACNBAAAjQTAAI0FAACNBUAAjQWAAI0FwACNBkAAjQbAAI0HAACNB0AAjQfAAI0IAACNEUAAjRpAAI0kAACNLQAAjS3AAI0uQACNLsAAjS9AAI0vwACNMEAAjTCAAI0xQACNNIAAjThAAI04wACNOUAAjTnAAI06QACNOsAAjTtAAI07wACNP4AAjUBAAI1BAACNQcAAjUKAAI1DQACNRAAAjUTAAI1FQACNVQAAjVWAAI1WAACNVoAAjVdAAI1XgACNV8AAjVgAAI1YQACNWMAAjVlAAI1ZgACNWcAAjVpAAI1agACNakAAjWrAAI1rQACNa8AAjWyAAI1swACNbQAAjW1AAI1tgACNbgAAjW6AAI1uwACNbwAAjW+AAI1vwACNf4AAjYAAAI2AgACNgQAAjYHAAI2CAACNgkAAjYKAAI2CwACNg0AAjY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nAAJGqAACRucAAkbpAAJG6wACRu0AAkbwAAJG8QACRvIAAkbzAAJG9AACRvYAAkb4AAJG+QACRvoAAkb8AAJG/QACRzwAAkc+AAJHQAACR0IAAkdFAAJHRgACR0cAAkdIAAJHSQACR0sAAkdNAAJHTgACR08AAkdRAAJHUgACR1sAAkdcAAJHXgACR50AAkefAAJHoQACR6MAAkemAAJHpwACR6gAAkepAAJHqgACR6wAAkeuAAJHrwACR7AAAkeyAAJHswACR/IAAkf0AAJH9gACR/gAAkf7AAJH/AACR/0AAkf+AAJH/wACSAEAAkgDAAJIBAACSAUAAkgHAAJICAACSEcAAkhJAAJISwACSE0AAkhQAAJIUQACSFIAAkhTAAJIVAACSFYAAkhYAAJIWQACSFoAAkhcAAJIXQACSJwAAkieAAJIoAACSKIAAkilAAJIpgACSKcAAkioAAJIqQACSKsAAkitAAJIrgACSK8AAkixAAJIsgACSPEAAkjzAAJI9QACSPcAAkj6AAJI+wACSPwAAkj9AAJI/gACSQAAAkkCAAJJAwACSQQAAkkGAAJJBwACSVIAAkl1AAJJlQACSbUAAkm3AAJJuQACSbsAAkm9AAJJwAACScEAAknCAAJJxQACScYAAknIAAJJyQACScsAAknOAAJJzwACSdAAAknTAAJJ1AACSdkAAknmAAJJ6wACSe0AAknvAAJJ9AACSfcAAkn6AAJJ/AACSiEAAkpFAAJKbAACSpAAAkqTAAJKlQACSpcAAkqZAAJKmwACSp0AAkqeAAJKoQACSq4AAkq/AAJKwQACSsMAAkrFAAJKxwACSskAAkrLAAJKzQACSs8AAkrgAAJK4wACSuYAAkrpAAJK7AACSu8AAkryAAJK9QACSvgAAkr6AAJLOQACSzsAAks9AAJLPwACS0IAAktDAAJLRAACS0UAAktGAAJLSAACS0oAAktLAAJLTAACS04AAktPAAJLjgACS5AAAkuSAAJLlAACS5cAAkuYAAJLmQACS5oAAkubAAJLnQACS58AAkugAAJLoQACS6MAAkukAAJL4wACS+UAAkvoAAJL6gACS+0AAkvuAAJL7wACS/AAAkvxAAJL8wACS/UAAkv2AAJL9wACS/kAAkv6AAJMBwACTAgAAkwJAAJMCwACTEoAAkxMAAJMTgACTFAAAkx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LAAJXTAACV4sAAleNAAJXjwACV5EAAleUAAJXlQACV5YAAleXAAJXmAACV5oAAlecAAJXnQACV54AAlegAAJXoQACV+AAAlfiAAJX5QACV+cAAlfqAAJX6wACV+wAAlftAAJX7gACV/AAAlfyAAJX8wACV/QAAlf2AAJX9wACWDoAAlheAAJYggACWKUAAljMAAJY7AACWRMAAlk6AAJZWgACWX4AAlmiAAJZpAACWacAAlmpAAJZqwACWa0AAlmwAAJZswACWbUAAlm3AAJZugACWbwAAlm+AAJZwQACWcQAAlnFAAJZygACWdcAAlnaAAJZ3AACWd8AAlniAAJZ5AACWgkAAlotAAJaVAACWngAAlp7AAJafQACWn8AAlqBAAJagwACWoUAAlqGAAJaiQACWpYAAlqpAAJaqwACWq0AAlqvAAJasQACWrMAAlq1AAJatwACWrkAAlq7AAJazgACWtEAAlrUAAJa1wACWtoAAlrdAAJa4AACWuMAAlrmAAJa6QACWusAAlsqAAJbLAACWy8AAlsxAAJbNAACWzUAAls2AAJbNwACWzgAAls6AAJbPAACWz0AAls+AAJbQAACW0EAAltKAAJbSwACW00AAluMAAJbjgACW5AAAluSAAJblQACW5YAAluXAAJbmAACW5kAAlubAAJbnQACW54AAlufAAJboQACW6IAAlvhAAJb4wACW+YAAlvoAAJb6wACW+wAAlvtAAJb7gACW+8AAlvxAAJb8wACW/QAAlv1AAJb9wACW/gAAlwBAAJcAgACXAQAAlxDAAJcRQACXEcAAlxJAAJcTAACXE0AAlxOAAJcTwACXFAAAlxSAAJcVAACXFUAAlxWAAJcWAACXFkAAlyYAAJcmgACXJ0AAlyfAAJcogACXKMAAlykAAJcpQACXKYAAlyoAAJcqgACXKsAAlysAAJcrgACXK8AAly4AAJcuQACXLsAAlz6AAJc/AACXP4AAl0AAAJdAwACXQQAAl0FAAJdBgACXQcAAl0JAAJdCwACXQwAAl0NAAJdDwACXRAAAl1PAAJdUQACXVQAAl1WAAJdWQACXVoAAl1bAAJdXAACXV0AAl1fAAJdYQACXWIAAl1jAAJdZQACXWYAAl1zAAJddAACXXUAAl13AAJdtgACXbgAAl26AAJdvAACXb8AAl3AAAJdwQACXcIAAl3DAAJdxQACXccAAl3IAAJdyQACXcsAAl3MAAJeCwACXg0AAl4QAAJeEgACXhUAAl4WAAJeFwACXhgAAl4ZAAJeGwACXh0AAl4eAAJeHwACXiEAAl4iAAJePgACXksAAl5UAAJeVgACXlgAAl5bAAJeXgACXmcAAl5qAAJebQACXnAAAl5zAAJedQACXokAAl6QAAJe2wACXv4AAl8eAAJfPgACX0AAAl9CAAJfRAACX0YAAl9JAAJfSgACX0sAAl9OAAJfTwACX1EAAl9SAAJfVAACX1YAAl9XAAJfWAACX1sAAl9cAAJfYQACX24AAl9zAAJfdQACX3cAAl98AAJffwACX4IAAl+EAAJfqQACX80AAl/0AAJgGAACYBsAAmAdAAJgHwACYCEAAmAjAAJgJQACYCYAAmApAAJgNgACYEcAAmBJAAJgSwACYE0AAmBPAAJgUQACYFMAAmBVAAJgVwACYGgAAmBrAAJgbgACYHEAAmB0AAJgdwACYHoAAmB9AAJggAACYIIAAmDBAAJgwwACYMUAAmDHAAJgygACYMsAAmDMAAJgzQACYM4AAmDQAAJg0gACYNMAAmDUAAJg1gACYNcAAmEWAAJhGAACYRoAAmEcAAJhHwACYSAAAmEhAAJhIgACYSMAAmElAAJhJwACYSgAAmEpAAJhKwACYSwAAmFrAAJhbQACYXAAAmFyAAJhdQACYXYAAmF3AAJheAACYXkAAmF7AAJhfQACYX4AAmF/AAJhgQACYYIAAmGPAAJhkAACYZEAAmGTAAJh0gACYdQAAmHWAAJh2AACYdsAAmHcAAJh3QACYd4AAmHfAAJh4QACYeMAAmHkAAJh5QACYecAAmHoAAJiJwACYikAAmIrAAJiLQACYjAAAmIxAAJiMgACYjMAAmI0AAJiNgACYjgAAmI5AAJiOgACYjwAAmI9AAJifAACYn4AAmKAAAJiggACYoUAAmKGAAJihwACYogAAmKJAAJiiwACYo0AAmKOAAJijwACYpEAAmKSAAJi0QACYtMAAmLVAAJi1wACYtoAAmLbAAJi3AACYt0AAmLeAAJi4AACYuIAAmLjAAJi5AACYuYAAmLnAAJjJgACYygAAmMqAAJjLAACYy8AAmMwAAJjMQACYzIAAmMzAAJjNQACYzcAAmM4AAJjOQACYzsAAmM8AAJjYQACY4UAAmOsAAJj0AACY9MAAmPVAAJj1wACY9kAAmPbAAJj3QACY94AAmPhAAJj7gACY/0AAmP/AAJkAQACZAMAAmQFAAJkBwACZAkAAmQLAAJkGgACZB0AAmQgAAJkIwACZCYAAmQpAAJkLAACZC8AAmQxAAJkcAACZHIAAmR0AAJkdgACZHkAAmR6AAJkewACZHwAAmR9AAJkfwACZIEAAmSCAAJkgwACZIUAAmSGAAJkxQACZMcAAmTJAAJkywACZM4AAmTPAAJk0AACZNEAAmTSAAJk1AACZNYAAmTXAAJk2AACZNoAAmTbAAJlGgACZRwAAmUeAAJlIAACZSMAAmUkAAJlJQACZSYAAmUnAAJlKQACZSsAAmUsAAJlLQACZS8AAmUwAAJlbwACZXEAAmVzAAJldQACZXgAAmV5AAJlegACZXsAAmV8AAJlfgACZYAAAmWBAAJlggACZYQAAmWFAAJlxAACZcYAAmXIAAJlygACZc0AAmXOAAJlzwACZdAAAmXRAAJl0wACZdUAAmXWAAJl1wACZdkAAmXaAAJmGQACZhsAAmYdAAJmHwACZiIAAmYjAAJmJAACZiUAAmYmAAJmKAACZioAAmYrAAJmLAACZi4AAmYvAAJmbgACZnAAAmZyAAJmdAACZncAAmZ4AAJmeQACZnoAAmZ7AAJmfQACZn8AAmaAAAJmgQACZoMAAmaEAAJmzwACZvIAAmcSAAJnMgACZzQAAmc2AAJnOAACZzoAAmc9AAJnPgACZz8AAmdCAAJnQwACZ0UAAmdGAAJnSAACZ0oAAmdLAAJnTAACZ08AAmdQAAJnVQACZ2IAAmdnAAJnaQACZ2sAAmdwAAJncwACZ3YAAmd4AAJnnQACZ8EAAmfoAAJoDAACaA8AAmgRAAJoEwACaBUAAmgXAAJoGQACaBoAAmgdAAJoKgACaDsAAmg9AAJoPwACaEEAAmhDAAJoRQACaEcAAmhJAAJoSwACaFwAAmhfAAJoYgACaGUAAmhoAAJoawACaG4AAmhxAAJodAACaHYAAmi1AAJotwACaLkAAmi7AAJovgACaL8AAmjAAAJowQACaMIAAmjEAAJoxgACaMcAAmjIAAJoygACaMsAAmkKAAJpDAACaQ4AAmkQAAJpEwACaRQAAmkVAAJpFgACaRcAAmkZAAJpGwACaRwAAmkdAAJpHwACaSAAAmlfAAJpYQACaWQAAmlmAAJpaQACaWoAAmlrAAJpbAACaW0AAmlvAAJpcQACaXIAAmlzAAJpdQACaXYAAmmDAAJphAACaYUAAmmHAAJpxgACacgAAmnKAAJpzAACac8AAmnQAAJp0QACadIAAmnTAAJp1QACadcAAmnYAAJp2QACadsAAmncAAJqGwACah0AAmofAAJqIQACaiQAAmolAAJqJgACaicAAmooAAJqKgACaiwAAmotAAJqLgACajAAAmoxAAJqcAACanIAAmp0AAJqdgACankAAmp6AAJqewACanwAAmp9AAJqfwACaoEAAmqCAAJqgwACaoUAAmqGAAJqxQACascAAmrJAAJqywACas4AAmrPAAJq0AACatEAAmrSAAJq1AACatYAAmrXAAJq2AACatoAAmrbAAJrGgACaxwAAmseAAJrIAACayMAAmskAAJrJQACayYAAmsnAAJrKQACaysAAmssAAJrLQACay8AAmswAAJrVQACa3kAAmugAAJrxAACa8cAAmvJAAJrywACa80AAmvPAAJr0QACa9IAAmvVAAJr4gACa+8AAmvxAAJr8wACa/UAAmv3AAJr+QACa/sAAmwIAAJsCwACbA4AAmwRAAJsFAACbBcAAmwaAAJsHAACbFsAAmxdAAJsYAACbGIAAmxlAAJsZgACbGcAAmxoAAJsaQACbGsAAmxtAAJsbgACbG8AAmxxAAJscgACbLEAAmyzAAJstQACbLcAAmy6AAJsuwACbLwAAmy9AAJsvgACbMAAAmzCAAJswwACbMQAAmzGAAJsxwACbQYAAm0IAAJtCgACbQwAAm0PAAJtEAACbREAAm0SAAJtEwACbRUAAm0XAAJtGAACbRkAAm0bAAJtHAACbVsAAm1dAAJtXwACbWEAAm1kAAJtZQACbWYAAm1nAAJtaAACbWoAAm1sAAJtbQACbW4AAm1wAAJtcQACbbAAAm2yAAJttAACbbYAAm25AAJtugACbbsAAm28AAJtvQACbb8AAm3BAAJtwgACbcMAAm3FAAJtxgACbgUAAm4HAAJuCQACbgsAAm4OAAJuDwACbhAAAm4RAAJuEgACbhQAAm4WAAJuFwACbhgAAm4aAAJuGwACbmYAAm6JAAJuqQACbskAAm7LAAJuzQACbs8AAm7RAAJu1AACbtUAAm7WAAJu2QACbtoAAm7cAAJu3QACbt8AAm7iAAJu4wACbuQAAm7nAAJu6AACbu0AAm76AAJu/wACbwEAAm8DAAJvCAACbwsAAm8OAAJvEAACbzUAAm9ZAAJvgAACb6QAAm+nAAJvqQACb6sAAm+tAAJvrwACb7EAAm+yAAJvtQACb8IAAm/TAAJv1QACb9cAAm/ZAAJv2wACb90AAm/fAAJv4QACb+MAAm/0AAJv9wACb/oAAm/9AAJwAAACcAMAAnAGAAJwCQACcAwAAnAOAAJwTQACcE8AAnBRAAJwUwACcFYAAnBXAAJwWAACcFkAAnBaAAJwXAACcF4AAnBfAAJwYAACcGIAAnBjAAJwogACcKQAAnCmAAJwqAACcKsAAnCsAAJwrQACcK4AAnCvAAJwsQACcLMAAnC0AAJwtQACcLcAAnC4AAJw9wACcPkAAnD8AAJw/gACcQEAAnECAAJxAwACcQQAAnEFAAJxBwACcQkAAnEKAAJxCwACcQ0AAnEOAAJxGwACcRwAAnEdAAJxHwACcV4AAnFgAAJxYgACcWQAAnFnAAJxaAACcWkAAnFqAAJxawACcW0AAnFvAAJxcAACcXEAAnFzAAJxdAACcbMAAnG1AAJxtwACcbkAAnG8AAJxvQACcb4AAnG/AAJxwAACccIAAnHEAAJxxQACccYAAnHIAAJxyQACcggAAnIKAAJyDAACcg4AAnIRAAJyEgACchMAAnIUAAJyFQACchcAAnIZAAJyGgACchsAAnIdAAJyHgACcl0AAnJfAAJyYQACcmMAAnJmAAJyZwACcmgAAnJpAAJyagACcmwAAnJuAAJybwACcnAAAnJyAAJycwACcrIAAnK0AAJytgACcrgAAnK7AAJyvAACcr0AAnK+AAJyvwACcsEAAnLDAAJyxAACcsUAAnLHAAJyyAACcu0AAnMRAAJzOAACc1wAAnNfAAJzYQACc2MAAnNlAAJzZwACc2kAAnNqAAJzbQACc3oAAnOJAAJziwACc40AAnOPAAJzkQACc5MAAnOVAAJzlwACc6YAAnOpAAJzrAACc68AAnOyAAJztQACc7gAAnO7AAJzvQACc/wAAnP+AAJ0AAACdAIAAnQFAAJ0BgACdAcAAnQIAAJ0CQACdAsAAnQNAAJ0DgACdA8AAnQRAAJ0EgACdFEAAnRTAAJ0VQACdFcAAnRaAAJ0WwACdFwAAnR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9AAKEvgAChL8AAoTAAAKEwQAChMMAAoTFAAKExgAChMcAAoTJAAKEygAChO8AAoUTAAKFOgAChV4AAoVhAAKFYwAChWUAAoVnAAKFaQAChWsAAoVsAAKFbwAChXwAAoWLAAKFjQAChY8AAoWRAAKFkwAChZUAAoWXAAKFmQAChagAAoWrAAKFrgAChbEAAoW0AAKFtwAChboAAoW9AAKFvwAChf4AAoYAAAKGAwAChgUAAoYIAAKGCQAChgoAAoYLAAKGDAAChg4AAoYQAAKGEQAChhIAAoYUAAKGFQAChlQAAoZWAAKGWAAChloAAoZdAAKGXgAChl8AAoZgAAKGYQAChmMAAoZlAAKGZgAChmcAAoZpAAKGagAChqkAAoarAAKGrQAChq8AAoayAAKGswAChrQAAoa1AAKGtgAChrgAAoa6AAKGuwAChrwAAoa+AAKGvwAChv4AAocAAAKHAwAChwUAAocIAAKHCQAChwoAAocLAAKHDAAChw4AAocQAAKHEQAChxIAAocUAAKHFQACh1QAAodWAAKHWAACh1oAAoddAAKHXgACh18AAodgAAKHYQACh2MAAodlAAKHZgACh2cAAodpAAKHagACh6kAAoerAAKHrQACh68AAoeyAAKHswACh7QAAoe1AAKHtgACh7gAAoe6AAKHuwACh7wAAoe+AAKHvwACh/4AAogAAAKIAgACiAQAAogHAAKICAACiAkAAogKAAKICwACiA0AAogPAAKIEAACiBEAAogTAAKIFAACiF8AAoiCAAKIogACiMIAAojEAAKIxgACiMgAAojKAAKIzAACiM0AAojOAAKI0QACiNIAAojUAAKI1QACiNcAAojZAAKI2gACiNsAAojeAAKI3wACiOQAAojxAAKI9gACiPgAAoj6AAKI/wACiQIAAokFAAKJBwACiSwAAolQAAKJdwACiZsAAomeAAKJoAACiaIAAomkAAKJpgACiagAAompAAKJrAACibkAAonKAAKJzAACic4AAonQAAKJ0gACidQAAonWAAKJ2AACidoAAonrAAKJ7gACifEAAon0AAKJ9wACifoAAon9AAKKAAACigMAAooFAAKKRAACikYAAopIAAKKSgACik0AAopOAAKKTwACilAAAopRAAKKUwACilUAAopWAAKKVwACilkAAopaAAKKmQACipsAAoqdAAKKnwACiqIAAoqjAAKKpAACiqUAAoqmAAKKqAACiqoAAoqrAAKKrAACiq4AAoqvAAKK7gACivAAAorzAAKK9QACivgAAor5AAKK+gACivsAAor8AAKK/gACiwAAAosBAAKLAgACiwQAAosFAAKLEgACixMAAosUAAKLFgACi1UAAotXAAKLWQACi1sAAoteAAKLXwACi2AAAothAAKLYgACi2QAAotmAAKLZwACi2gAAotqAAKLawACi6oAAousAAKLrgACi7AAAouzAAKLtAACi7UAAou2AAKLtwACi7kAAou7AAKLvAACi70AAou/AAKLwAACi/8AAowBAAKMAwACjAUAAowIAAKMCQACjAoAAowLAAKMDAACjA4AAowQAAKMEQACjBIAAowUAAKMFQACjFQAAoxWAAKMWAACjFoAAoxdAAKMXgACjF8AAoxgAAKMYQACjGMAAoxlAAKMZgACjGcAAoxpAAKMagACjKkAAoyrAAKMrQACjK8AAoyyAAKMswACjLQAAoy1AAKMtgACjLgAAoy6AAKMuwACjLwAAoy+AAKMvwACjOQAAo0IAAKNLwACjVMAAo1WAAKNWAACjVoAAo1cAAKNXgACjWAAAo1hAAKNZAACjXEAAo2AAAKNggACjYQAAo2GAAKNiAACjYoAAo2MAAKNjgACjZ0AAo2gAAKNowACjaYAAo2pAAKNrAACja8AAo2yAAKNtAACjfMAAo31AAKN9wACjfkAAo38AAKN/QACjf4AAo3/AAKOAAACjgIAAo4EAAKOBQACjgYAAo4IAAKOCQACjkgAAo5KAAKOTAACjk4AAo5RAAKOUgACjlMAAo5UAAKOVQACjlcAAo5ZAAKOWgACjlsAAo5dAAKOXgACjp0AAo6fAAKOoQACjqMAAo6mAAKOpwACjqgAAo6pAAKOqgACjqwAAo6uAAKOrwACjrAAAo6yAAKOswACjvIAAo70AAKO9wACjvkAAo78AAKO/QACjv4AAo7/AAKPAAACjwIAAo8EAAKPBQACjwYAAo8IAAKPCQACj0gAAo9KAAKPTAACj04AAo9RAAKPUgACj1MAAo9UAAKPVQACj1cAAo9ZAAKPWgACj1sAAo9dAAKPXgACj50AAo+fAAKPoQACj6MAAo+mAAKPpwACj6gAAo+pAAKPqgACj6wAAo+uAAKPrwACj7AAAo+yAAKPswACj/IAAo/0AAKP9gACj/gAAo/7AAKP/AACj/0AAo/+AAKP/wACkAEAApADAAKQBAACkAUAApAHAAKQCAACkFMAApB2AAKQlgACkLYAApC4AAKQugACkLwAApC+AAKQwAACkMEAApDCAAKQxQACkMYAApDIAAKQyQACkMsAApDNAAKQzgACkM8AApDSAAKQ0wACkNwAApDpAAKQ7gACkPAAApDyAAKQ9wACkPoAApD9AAKQ/wACkSQAApFIAAKRbwACkZMAApGWAAKRmAACkZoAApGcAAKRngACkaAAApGhAAKRpAACkbEAApHCAAKRxAACkcYAApHIAAKRygACkcwAApHOAAKR0AACkdIAApHjAAKR5gACkekAApHsAAKR7wACkfIAApH1AAKR+AACkfsAApH9AAKSPAACkj4AApJAAAKSQgACkkUAApJGAAKSRwACkkgAApJJAAKSSwACkk0AApJOAAKSTwACklEAApJSAAKSkQACkpMAApKVAAKSlwACkpoAApKbAAKSnAACkp0AApKeAAKSoAACkqIAApKjAAKSpAACkqYAApKnAAKS5gACkugAApLrAAKS7QACkvAAApLxAAKS8gACkvMAApL0AAKS9gACkvgAApL5AAKS+gACkvwAApL9AAKTCgACkwsAApMMAAKTDgACk00AApNPAAKTUQACk1MAApNWAAKTVwACk1gAApNZAAKTWgACk1wAApNeAAKTXwACk2AAApNiAAKTYwACk6IAApOkAAKTpgACk6gAApOrAAKTrAACk60AApOuAAKTrwACk7EAApOzAAKTtAACk7UAApO3AAKTuAACk/cAApP5AAKT+wACk/0AApQAAAKUAQAClAIAApQDAAKUBAAClAYAApQIAAKUCQAClAoAApQMAAKUDQAClEwAApROAAKUUAAClFIAApRVAAKUVgAClFcAApRYAAKUWQAClFsAApRdAAKUXgAClF8AApRhAAKUYgAClKEAApSjAAKUpQAClKcAApSqAAKUqwAClKwAApStAAKUrgAClLAAApSyAAKUswAClLQAApS2AAKUtwAClNwAApUAAAKVJwAClUsAApVOAAKVUAAClVIAApVUAAKVVgAClVgAApVZAAKVXAAClWkAApV2AAKVeAAClXoAApV8AAKVfgAClYAAApWCAAKVjwAClZIAApWVAAKVmAAClZsAApWeAAKVoQAClaMAApXiAAKV5AAClecAApXpAAKV7AACle0AApXuAAKV7wAClfAAApXyAAKV9AAClfUAApX2AAKV+AAClfkAApY4AAKWOgACljwAApY+AAKWQQAClkIAApZDAAKWRAAClkUAApZHAAKWSQAClkoAApZLAAKWTQAClk4AApaNAAKWjwAClpEAApaTAAKWlgAClpcAApaYAAKWmQAClpoAApacAAKWngAClp8AApagAAKWogAClqMAApbiAAKW5AAClucAApbpAAKW7AAClu0AApbuAAKW7wAClvAAApbyAAKW9AAClvUAApb2AAKW+AAClvkAApc4AAKXOgAClzwAApc+AAKXQQACl0IAApdDAAKXRAACl0UAApdHAAKXSQACl0oAApdLAAKXTQACl04AApeNAAKXjwACl5EAApeTAAKXlgACl5cAApeYAAKXmQACl5oAApecAAKXngACl58AApegAAKXogACl6MAApesAAKXrQACl68AApfuAAKX8AACl/IAApf0AAKX9gACl/cAApf4AAKX+QACl/oAApf8AAKX/gACl/8AApgAAAKYAgACmAMAAphCAAKYRAACmEYAAphIAAKYSgACmEsAAphMAAKYTQACmE4AAphQAAKYUgACmFMAAphUAAKYVgACmFcAApiWAAKYmAACmJoAApicAAKYngACmJ8AApigAAKYoQACmKIAApikAAKYpgACmKcAApioAAKYqgACmKsAApj2AAKZGQACmTkAAplZAAKZWwACmV0AAplfAAKZYQACmWMAAplkAAKZZQACmWgAAplpAAKZawACmWwAApluAAKZcAACmXEAAplyAAKZdQACmXYAApl7AAKZiAACmY0AApmPAAKZkQACmZYAApmZAAKZnAACmZ4AApnDAAKZ5wACmg4AApoyAAKaNQACmjcAApo5AAKaOwACmj0AApo/AAKaQAACmkMAAppQAAKaYQACmmMAApplAAKaZwACmmkAApprAAKabQACmm8AAppxAAKaggACmoUAApqIAAKaiwACmo4AApqRAAKalAACmpcAApqaAAKanAACmtsAAprdAAKa3wACmuEAAprkAAKa5QACmuYAAprnAAKa6AACmuoAAprsAAKa7QACmu4AAprwAAKa8QACmzAAApsyAAKbNAACmzYAAps5AAKbOgACmzsAAps8AAKbPQACmz8AAptBAAKbQgACm0MAAptFAAKbRgACm4UAApuHAAKbigACm4wAApuPAAKbkAACm5EAApuSAAKbkwACm5UAApuXAAKbmAACm5kAApubAAKbnAACm6kAApuqAAKbqwACm60AApvsAAKb7gACm/AAApvyAAKb9QACm/YAApv3AAKb+AACm/kAApv7AAKb/QACm/4AApv/AAKcAQACnAIAApxBAAKcQwACnEUAApxHAAKcSgACnEsAApxMAAKcTQACnE4AApxQAAKcUgACnFMAApxUAAKcVgACnFcAApyWAAKcmAACnJoAApycAAKcnwACnKAAApyhAAKcogACnKMAApylAAKcpwACnKgAApypAAKcqwACnKwAApzrAAKc7QACnO8AApzxAAKc9AACnPUAApz2AAKc9wACnPgAApz6AAKc/AACnP0AApz+AAKdAAACnQEAAp1AAAKdQgACnUQAAp1GAAKdSQACnUoAAp1LAAKdTAACnU0AAp1PAAKdUQACnVIAAp1TAAKdVQACnVYAAp17AAKdnwACncYAAp3qAAKd7QACne8AAp3xAAKd8wACnfUAAp33AAKd+AACnfsAAp4IAAKeFwACnhkAAp4bAAKeHQACnh8AAp4hAAKeIwACniUAAp40AAKeNwACnjoAAp49AAKeQAACnkMAAp5GAAKeSQACnksAAp6KAAKejAACno4AAp6QAAKekwACnpQAAp6VAAKelgACnpcAAp6ZAAKemwACnpwAAp6dAAKenwACnqAAAp7fAAKe4QACnuMAAp7lAAKe6AACnukAAp7qAAKe6wACnuwAAp7uAAKe8AACnvEAAp7yAAKe9AACnvUAAp80AAKfNgACnzgAAp86AAKfPQACnz4AAp8/AAKfQAACn0EAAp9DAAKfRQACn0YAAp9HAAKfSQACn0oAAp+JAAKfiwACn44AAp+QAAKfkwACn5QAAp+VAAKflgACn5cAAp+ZAAKfmwACn5wAAp+dAAKfnwACn6AAAp/fAAKf4QACn+MAAp/lAAKf6AACn+kAAp/qAAKf6wACn+wAAp/uAAKf8AACn/EAAp/yAAKf9AACn/UAAqA0AAKgNgACoDkAAqA7AAKgPgACoD8AAqBAAAKgQQACoEIAAqBEAAKgRgACoEcAAqBIAAKgSgACoEsAAqBnAAKgpgACoKgAAqCqAAKgrAACoK8AAqCwAAKgsQACoLIAAqCzAAKgtQACoLcAAqC4AAKguQACoLsAAqC8AAKhBwACoSoAAqFKAAKhagACoWwAAqFuAAKhcAACoXIAAqF0AAKhdQACoXYAAqF5AAKhegACoXwAAqF9AAKhfwACoYEAAqGCAAKhgwACoYYAAqGHAAKhkAACoZ0AAqGiAAKhpAACoaYAAqGrAAKhrgACobEAAqGzAAKh2AACofwAAqIjAAKiRwACokoAAqJMAAKiTgAColAAAqJSAAKiVAAColUAAqJYAAKiZQAConYAAqJ4AAKiegAConwAAqJ+AAKigAACooIAAqKEAAKihgACopcAAqKaAAKinQACoqAAAqKjAAKipgACoqkAAqKsAAKirwACorEAAqLwAAKi8gACovQAAqL2AAKi+QACovoAAqL7AAKi/AACov0AAqL/AAKjAQACowIAAqMDAAKjBQACowYAAqNFAAKjRwACo0kAAqNLAAKjTgACo08AAqNQAAKjUQACo1IAAqNUAAKjVgACo1cAAqNYAAKjWgACo1sAAqOaAAKjnAACo58AAqOhAAKjpAACo6UAAqOmAAKjpwACo6gAAqOqAAKjrAACo60AAqOuAAKjsAACo7EAAqO+AAKjvwACo8AAAqPCAAKkAQACpAMAAqQFAAKkBwACpAoAAqQLAAKkDAACpA0AAqQOAAKkEAACpBIAAqQTAAKkFAACpBYAAqQXAAKkVgACpFgAAqRaAAKkXAACpF8AAqRgAAKkYQACpGIAAqRjAAKkZQACpGcAAqRoAAKkaQACpGsAAqRsAAKkqwACpK0AAqSvAAKksQACpLQAAqS1AAKktgACpLcAAqS4AAKkugACpLwAAqS9AAKkvgACpMAAAqTBAAKlAAACpQIAAqUEAAKlBgACpQkAAqUKAAKlCwACpQwAAqUNAAKlDwACpREAAqUSAAKlEwACpRUAAqUWAAKlVQACpVcAAqVZAAKlWwACpV4AAqVfAAKlYAACpWEAAqViAAKlZAACpWYAAqVnAAKlaAACpWoAAqVrAAKlkAACpbQAAqXbAAKl/wACpgIAAqYEAAKmBgACpggAAqYKAAKmDAACpg0AAqYQAAKmHQACpiwAAqYuAAKmMAACpjIAAqY0AAKmNgACpjgAAqY6AAKmSQACpkwAAqZPAAKmUgACplUAAqZYAAKmWwACpl4AAqZgAAKmnwACpqEAAqajAAKmpQACpqgAAqapAAKmqgACpqsAAqasAAKmrgACprAAAqaxAAKmsgACprQAAqa1AAKm9AACpvYAAqb4AAKm+gACpv0AAqb+AAKm/wACpwAAAqcBAAKnAwACpwUAAqcGAAKnBwACpwkAAqcKAAKnSQACp0sAAqdNAAKnTwACp1IAAqdTAAKnVAACp1UAAqdWAAKnWAACp1oAAqdbAAKnXAACp14AAqdfAAKnngACp6AAAqeiAAKnpAACp6cAAqeoAAKnqQACp6oAAqerAAKnrQACp68AAqewAAKnsQACp7MAAqe0AAKn8wACp/UAAqf3AAKn+QACp/wAAqf9AAKn/gACp/8AAqgAAAKoAgACqAQAAqgFAAKoBgACqAgAAqgJAAKoSAACqEoAAqhMAAKoTgACqFEAAqhSAAKoUwACqFQAAqhVAAKoVwACqFkAAqhaAAKoWwACqF0AAqheAAKonQACqJ8AAqihAAKoowACqKYAAqinAAKoqAACqKkAAqiqAAKorAACqK4AAqivAAKosAACqLIAAqizAAKo/gACqSEAAqlBAAKpYQACqWMAAqllAAKpZwACqWkAAqlrAAKpbAACqW0AAqlwAAKpcQACqXMAAql0AAKpdgACqXgAAql5AAKpegACqX0AAql+AAKpgwACqZAAAqmVAAKplwACqZkAAqmeAAKpoQACqaQAAqmmAAKpywACqe8AAqoWAAKqOgACqj0AAqo/AAKqQQACqkMAAqpFAAKqRwACqkgAAqpLAAKqWAACqmkAAqprAAKqbQACqm8AAqpxAAKqcwACqnUAAqp3AAKqeQACqooAAqqNAAKqkAACqpMAAqqWAAKqmQACqpwAAqqfAAKqogACqqQAAqrjAAKq5QACqucAAqrpAAKq7AACqu0AAqruAAKq7wACqvAAAqryAAKq9AACqvUAAqr2AAKq+AACqvkAAqs4AAKrOgACqzwAAqs+AAKrQQACq0IAAqtDAAKrRAACq0UAAqtHAAKrSQACq0oAAqtLAAKrTQACq04AAquNAAKrjwACq5IAAquUAAKrlwACq5gAAquZAAKrmgACq5sAAqudAAKrnwACq6AAAquhAAKrowACq6QAAquxAAKrsgACq7MAAqu1AAKr9AACq/YAAqv4AAKr+gACq/0AAqv+AAKr/wACrAAAAqwBAAKsAwACrAUAAqwGAAKsBwACrAkAAqwKAAKsSQACrEsAAqxNAAKsTwACrFIAAqxTAAKsVAACrFUAAqxWAAKsWAACrFoAAqxbAAKsXAACrF4AAqxfAAKsngACrKAAAqyiAAKspAACrKcAAqyoAAKsqQACrKoAAqyrAAKsrQACrK8AAqywAAKssQACrLMAAqy0AAKs8wACrPUAAqz3AAKs+QACrPwAAqz9AAKs/gACrP8AAq0AAAKtAgACrQQAAq0FAAKtBgACrQgAAq0JAAKtSAACrUoAAq1MAAKtTgACrVEAAq1SAAKtUwACrVQAAq1VAAKtVwACrVkAAq1aAAKtWwACrV0AAq1eAAKtgwACracAAq3OAAKt8gACrfUAAq33AAKt+QACrfsAAq39AAKt/wACrgAAAq4DAAKuEAACrh8AAq4hAAKuIwACriUAAq4nAAKuKQACrisAAq4tAAKuPAACrj8AAq5CAAKuRQACrkgAAq5LAAKuTgACrlEAAq5TAAKukgACrpQAAq6WAAKumAACrpsAAq6cAAKunQACrp4AAq6fAAKuoQACrqMAAq6kAAKupQACrqcAAq6oAAKu5wACrukAAq7rAAKu7QACrvAAAq7xAAKu8gACrvMAAq70AAKu9gACrvgAAq75AAKu+gACrvwAAq79AAKvPAACrz4AAq9AAAKvQgACr0UAAq9GAAKvRwACr0gAAq9JAAKvSwACr00AAq9OAAKvTwACr1EAAq9SAAKvkQACr5MAAq+VAAKvlwACr5oAAq+bAAKvnAACr50AAq+eAAKvoAACr6IAAq+jAAKvpAACr6YAAq+nAAKv5gACr+gAAq/qAAKv7AACr+8AAq/wAAKv8QACr/IAAq/zAAKv9QACr/cAAq/4AAKv+QACr/sAAq/8AAKwOwACsD0AArA/AAKwQQACsEQAArBFAAKwRgACsEcAArBIAAKwSgACsEwAArBNAAKwTgACsFAAArBRAAKwkAACsJIAArCUAAKwlgACsJkAArCaAAKwmwACsJwAArCdAAKwnwACsKEAArCiAAKwowACsKUAArCmAAKwrwACsLAAArCyAAKw9QACsRkAArE9AAKxYAACsYcAArGnAAKxzgACsfUAArIVAAKyOQACsl0AArJfAAKyYgACsmQAArJmAAKyaAACsmsAArJuAAKycAACsnIAArJ1AAKydwACsnkAArJ8AAKyfwACsoAAArKFAAKykgACspUAArKXAAKymgACsp0AArKfAAKyxAACsugAArMPAAKzMwACszYAArM4AAKzOgACszwAArM+AAKzQAACs0EAArNEAAKzUQACs2QAArNmAAKzaAACs2oAArNsAAKzbgACs3AAArNyAAKzdAACs3YAArOJAAKzjAACs48AArOSAAKzlQACs5gAArObAAKzngACs6EAArOkAAKzpgACs+UAArPnAAKz6gACs+wAArPvAAKz8AACs/EAArPyAAKz8wACs/UAArP3AAKz+AACs/kAArP7AAKz/AACtAUAArQGAAK0CAACtEcAArRJAAK0SwACtE0AArRQAAK0UQACtFIAArRTAAK0VAACtFYAArRYAAK0WQACtFoAArRcAAK0XQACtJwAArSeAAK0oQACtKMAArSmAAK0pwACtKgAArSpAAK0qgACtKwAArSuAAK0rwACtLAAArSyAAK0swACtLwAArS9AAK0vwACtP4AArUAAAK1AgACtQQAArUHAAK1CAACtQkAArUKAAK1CwACtQ0AArUPAAK1EAACtREAArUTAAK1FAACtVMAArVVAAK1WAACtVoAArVdAAK1XgACtV8AArVgAAK1YQACtWMAArVlAAK1ZgACtWcAArVpAAK1agACtXMAArV0AAK1dgACtbUAArW3AAK1uQACtbsAArW+AAK1vwACtcAAArXBAAK1wgACtcQAArXGAAK1xwACtcgAArXKAAK1ywACtgoAArYMAAK2DwACthEAArYUAAK2FQACthYAArYXAAK2GAACthoAArYcAAK2HQACth4AArYgAAK2IQACti4AArYvAAK2MAACtjIAArZxAAK2cwACtnUAArZ3AAK2egACtnsAArZ8AAK2fQACtn4AAraAAAK2ggACtoMAAraEAAK2hgACtocAArbGAAK2yAACtssAArbNAAK20AACttEAArbSAAK20wACttQAArbWAAK22AACttkAArbaAAK23AACtt0AArbrAAK2+AACtwMAArcGAAK3CQACtwwAArcPAAK3EgACtx0AArcgAAK3IwACtyYAArcpAAK3LAACty4AArc6AAK3SAACt1IAArddAAK3ZgACt7EAArfUAAK39AACuBQAArgWAAK4GAACuBoAArgcAAK4HwACuCAAArghAAK4JAACuCUAArgnAAK4KAACuCoAArgtAAK4LgACuC8AArgyAAK4MwACuDgAArhFAAK4SgACuEwAArhOAAK4UwACuFYAArhZAAK4WwACuIAAArikAAK4ywACuO8AArjyAAK49AACuPYAArj4AAK4+gACuPwAArj9AAK5AAACuQ0AArkeAAK5IAACuSIAArkkAAK5JgACuSgAArkqAAK5LAACuS4AArk/AAK5QgACuUUAArlIAAK5SwACuU4AArlRAAK5VAACuVcAArlZAAK5mAACuZoAArmcAAK5ngACuaEAArmiAAK5owACuaQAArmlAAK5pwACuakAArmqAAK5qwACua0AArmuAAK57QACue8AArnxAAK58wACufYAArn3AAK5+AACufkAArn6AAK5/AACuf4AArn/AAK6AAACugIAAroDAAK6QgACukQAArpHAAK6SQACukwAArpNAAK6TgACuk8AArpQAAK6UgACulQAArpVAAK6VgACulgAArpZAAK6ZgACumcAArpoAAK6agACuqkAArqrAAK6rQACuq8AArqyAAK6swACurQAArq1AAK6tgACurgAArq6AAK6uwACurwAArq+AAK6vwACuv4AArsAAAK7AgACuwQAArsHAAK7CAACuwkAArsKAAK7CwACuw0AArsPAAK7EAACuxEAArsTAAK7FAACu1MAArtVAAK7VwACu1kAArtcAAK7XQACu14AArtfAAK7YAACu2IAArtkAAK7ZQACu2YAArtoAAK7aQACu6gAAruqAAK7rAACu64AAruxAAK7sgACu7MAAru0AAK7tQACu7cAAru5AAK7ugACu7sAAru9AAK7vgACu/0AArv/AAK8AQACvAMAArwGAAK8BwACvAgAArwJAAK8CgACvAwAArwOAAK8DwACvBAAArwSAAK8EwACvDgAArxcAAK8gwACvKcAAryqAAK8rAACvK4AArywAAK8sgACvLQAAry1AAK8uAACvMUAArzUAAK81gACvNgAArzaAAK83AACvN4AArzgAAK84gACvPEAArz0AAK89wACvPoAArz9AAK9AAACvQMAAr0GAAK9CAACvUcAAr1JAAK9SwACvU0AAr1QAAK9UQACvVIAAr1TAAK9VAACvVYAAr1YAAK9WQACvVoAAr1cAAK9XQACvZwAAr2eAAK9oAACvaIAAr2lAAK9pgACvacAAr2oAAK9qQACvasAAr2tAAK9rgACva8AAr2xAAK9sgACvfEAAr3zAAK99QACvfcAAr36AAK9+wACvfwAAr39AAK9/gACvgAAAr4CAAK+AwACvgQAAr4GAAK+BwACvkYAAr5IAAK+SgACvkwAAr5PAAK+UAACvlEAAr5SAAK+UwACvlUAAr5XAAK+WAACvlkAAr5bAAK+XAACvpsAAr6dAAK+nwACvqEAAr6kAAK+pQACvqYAAr6nAAK+qAACvqoAAr6sAAK+rQACvq4AAr6wAAK+sQACvvAAAr7yAAK+9AACvvYAAr75AAK++gACvvsAAr78AAK+/QACvv8AAr8BAAK/AgACvwMAAr8FAAK/BgACv0UAAr9HAAK/SQACv0sAAr9OAAK/TwACv1AAAr9RAAK/UgACv1QAAr9WAAK/VwACv1gAAr9aAAK/WwACv6YAAr/JAAK/6QACwAkAAsALAALADQACwA8AAsARAALAFAACwBUAAsAWAALAGQACwBoAAsAcAALAHQACwB8AAsAiAALAIwACwCQAAsAnAALAKAACwC0AAsA6AALAPwACwEEAAsBDAALASAACwEsAAsBOAALAUAACwHUAAsCZAALAwAACwOQAAsDnAALA6QACwOsAAsDtAALA7wACwPEAAsDyAALA9QACwQIAAsETAALBFQACwRcAAsEZAALBGwACwR0AAsEfAALBIQACwSMAAsE0AALBNwACwToAAsE9AALBQAACwUMAAsFGAALBSQACwUwAAsFOAALBjQACwY8AAsGRAALBkwACwZYAAsGXAALBmAACwZkAAsGaAALBnAACwZ4AAsGfAALBoAACwaIAAsGjAALB4gACweQAAsHmAALB6AACwesAAsHsAALB7QACwe4AAsHvAALB8QACwfMAAsH0AALB9QACwfcAAsH4AALCNwACwjkAAsI8AALCPgACwkEAAsJCAALCQwACwkQAAsJFAALCRwACwkkAAsJKAALCSwACwk0AAsJOAALCWwACwlwAAsJdAALCXwACwp4AAsKgAALCogACwqQAAsKnAALCqAACwqkAAsKqAALCqwACwq0AAsKvAALCsAACwrEAAsKzAALCtAACwvMAAsL1AALC9wACwvkAAsL8AALC/QACwv4AAsL/AALDAAACwwIAAsMEAALDBQACwwYAAsMIAALDCQACw0gAAsNKAALDTAACw04AAsNRAALDUgACw1MAAsNUAALDVQACw1cAAsNZAALDWgACw1sAAsNdAALDXgACw50AAsOfAALDoQACw6MAAsOmAALDpwACw6gAAsOpAALDqgACw6wAAsOuAALDrwACw7AAAsOyAALDswACw/IAAsP0AALD9gACw/gAAsP7AALD/AACw/0AAsP+AALD/wACxAEAAsQDAALEBAACxAUAAsQHAALECAACxC0AAsRRAALEeAACxJwAAsSfAALEoQACxKMAAsSlAALEpwACxKkAAsSqAALErQACxLoAAsTJAALEywACxM0AAsTPAALE0QACxNMAAsTVAALE1wACxOYAAsTpAALE7AACxO8AAsTyAALE9QACxPgAAsT7AALE/QACxTwAAsU+AALFQAACxUIAAsVFAALFRgACxUcAAsVIAALFSQACxUsAAsVNAALFTgACxU8AAsVRAALFUgACxZEAAsWTAALFlQACxZcAAsWaAALFmwACxZwAAsWdAALFngACxaAAAsWiAALFowACxaQAAsWmAALFpwACxeYAAsXoAALF6gACxewAAsXvAALF8AACxfEAAsXyAALF8wACxfUAAsX3AALF+AACxfkAAsX7AALF/AACxjsAAsY9AALGPwACxkEAAsZEAALGRQACxkYAAsZHAALGSAACxkoAAsZMAALGTQACxk4AAsZQAALGUQACxpAAAsaSAALGlAACxpYAAsaZAALGmgACxpsAAsacAALGnQACxp8AAsahAALGogACxqMAAsalAALGpgACxuUAAsbnAALG6QACxusAAsbuAALG7wACxvAAAsbxAALG8gACxvQAAsb2AALG9wACxvgAAsb6AALG+wACxzoAAsc8AALHPgACx0AAAsdDAALHRAACx0UAAsdGAALHRwACx0kAAsdLAALHTAACx00AAsdPAALHUAACx5sAAse+AALH3gACx/4AAsgAAALIAgACyAQAAsgGAALICQACyAoAAsgLAALIDgACyA8AAsgRAALIEgACyBQAAsgXAALIGAACyBkAAsgcAALIHQACyCIAAsgvAALINAACyDYAAsg4AALIPQACyEAAAshDAALIRQACyGoAAsiOAALItQACyNkAAsjcAALI3gACyOAAAsjiAALI5AACyOYAAsjnAALI6gACyPcAAskIAALJCgACyQwAAskOAALJEAACyRIAAskUAALJFgACyRgAAskpAALJLAACyS8AAskyAALJNQACyTgAAsk7AALJPgACyUEAAslDAALJggACyYQAAsmGAALJiAACyYsAAsmMAALJjQACyY4AAsmPAALJkQACyZMAAsmUAALJlQACyZcAAsmYAALJ1wACydkAAsnbAALJ3QACyeAAAsnhAALJ4gACyeMAAsnkAALJ5gACyegAAsnpAALJ6gACyewAAsntAALKLAACyi4AAsoxAALKMwACyjYAAso3AALKOAACyjkAAso6AALKPAACyj4AAso/AALKQAACykIAAspDAALKUAACylEAAspSAALKVAACypMAAsqVAALKlwACypkAAsqcAALKnQACyp4AAsqfAALKoAACyqIAAsqkAALKpQACyqYAAsqoAALKqQACyugAAsrqAALK7AACyu4AAsrxAALK8gACyvMAAsr0AALK9QACyvcAAsr5AALK+gACyvsAAsr9AALK/gACyz0AAss/AALLQQACy0MAAstGAALLRwACy0gAAstJAALLSgACy0wAAstOAALLTwACy1AAAstSAALLUwACy5IAAsuUAALLlgACy5gAAsubAALLnAACy50AAsueAALLnwACy6EAAsujAALLpAACy6UAAsunAALLqAACy+cAAsvpAALL6wACy+0AAsvwAALL8QACy/IAAsvzAALL9AACy/YAAsv4AALL+QACy/oAAsv8AALL/QACzCIAAsxGAALMbQACzJEAAsyUAALMlgACzJgAAsyaAALMnAACzJ4AAsyfAALMogACzK8AAsy+AALMwAACzMIAAszEAALMxgACzMgAAszKAALMzAACzNsAAszeAALM4QACzOQAAsznAALM6gACzO0AAszwAALM8gACzTEAAs0zAALNNQACzTcAAs06AALNOwACzTwAAs09AALNPgACzUAAAs1CAALNQwACzUQAAs1GAALNRwACzYYAAs2IAALNigACzYwAAs2PAALNkAACzZEAAs2SAALNkwACzZUAAs2XAALNmAACzZkAAs2bAALNnAACzdsAAs3dAALN3wACzeEAAs3kAALN5QACzeYAAs3nAALN6AACzeoAAs3sAALN7QACze4AAs3wAALN8QACzjAAAs4yAALONQACzjcAAs46AALOOwACzjwAAs49AALOPgACzkAAAs5CAALOQwACzkQAAs5GAALORwACzkoAAs6JAALOiwACzo0AAs6PAALOkgACzpMAAs6UAALOlQACzpYAAs6YAALOmgACzpsAAs6cAALOngACzp8AAs7eAALO4AACzuIAAs7kAALO5wACzugAAs7pAALO6gACzusAAs7tAALO7wACzvAAAs7xAALO8wACzvQAAs8zAALPNQACzzcAAs85AALPPAACzz0AAs8+AALPPwACz0AAAs9CAALPRAACz0UAAs9GAALPSAACz0kAAs+UAALPtwACz9cAAs/3AALP+QACz/sAAs/9AALP/wAC0AIAAtADAALQBAAC0AcAAtAIAALQCgAC0AsAAtANAALQEAAC0BEAAtASAALQFQAC0BYAAtAfAALQLAAC0DEAAtAzAALQNQAC0DoAAtA9AALQQAAC0EIAAtBnAALQiwAC0LIAAtDWAALQ2QAC0NsAAtDdAALQ3wAC0OEAAtDjAALQ5AAC0OcAAtD0AALRBQAC0QcAAtEJAALRCwAC0Q0AAtEPAALREQAC0RMAAtEVAALRJgAC0SkAAtEsAALRLwAC0TIAAtE1AALROAAC0TsAAtE+AALRQAAC0X8AAtGBAALRgwAC0YUAAtGIAALRiQAC0YoAAtGLAALRjAAC0Y4AAtGQAALRkQAC0ZIAAtGUAALRlQAC0dQAAtHWAALR2AAC0doAAtHdAALR3gAC0d8AAtHgAALR4QAC0eMAAtHlAALR5gAC0ecAAtHpAALR6gAC0ikAAtIrAALSLgAC0jAAAtIzAALSNAAC0jUAAtI2AALSNwAC0jkAAtI7AALSPAAC0j0AAtI/AALSQAAC0k0AAtJOAALSTwAC0lEAAtKQAALSkgAC0pQAAtKWAALSmQAC0poAAtKbAALSnAAC0p0AAtKfAALSoQAC0qIAAtKjAALSpQAC0qYAAtLlAALS5wAC0ukAAtLrAALS7gAC0u8AAtLwAALS8QAC0vIAAtL0AALS9gAC0vcAAtL4AALS+gAC0vsAAtM6AALTPAAC0z4AAtNAAALTQwAC00QAAtNFAALTRgAC00cAAtNJAALTSwAC00wAAtNNAALTTwAC01AAAtOPAALTkQAC05MAAtOVAALTmAAC05kAAtOaAALTmwAC05wAAtOeAALToAAC06EAAtOiAALTpAAC06UAAtPkAALT5gAC0+gAAtPqAALT7QAC0+4AAtPvAALT8AAC0/EAAtPzAALT9QAC0/YAAtP3AALT+QAC0/oAAtQfAALUQwAC1GoAAtSOAALUkQAC1JMAAtSVAALUlwAC1JkAAtSbAALUnAAC1J8AAtSsAALUuwAC1L0AAtS/AALUwQAC1MMAAtTFAALUxwAC1MkAAtTYAALU2wAC1N4AAtThAALU5AAC1OcAAtTqAALU7QAC1O8AAtUuAALVMAAC1TIAAtU0AALVNwAC1TgAAtU5AALVOgAC1TsAAtU9AALVPwAC1UAAAtVBAALVQwAC1UQAAtWDAALVhQAC1YcAAtWJAALVjAAC1Y0AAtWOAALVjwAC1ZAAAtWSAALVlAAC1ZUAAtWWAALVmAAC1ZkAAtXYAALV2gAC1dwAAtXeAALV4QAC1eIAAtXjAALV5AAC1eUAAtXnAALV6QAC1eoAAtXrAALV7QAC1e4AAtYtAALWLwAC1jEAAtYzAALWNgAC1jcAAtY4AALWOQAC1joAAtY8AALWPgAC1j8AAtZAAALWQgAC1kMAAtaCAALWhAAC1oYAAtaIAALWiwAC1owAAtaNAALWjgAC1o8AAtaRAALWkwAC1pQAAtaVAALWlwAC1pgAAtbXAALW2QAC1tsAAtbdAALW4AAC1uEAAtbiAALW4wAC1uQAAtbmAALW6AAC1ukAAtbqAALW7AAC1u0AAtcsAALXLgAC1zAAAtcyAALXNQAC1zYAAtc3AALXOAAC1zkAAtc7AALXPQAC1z4AAtc/AALXQQAC10IAAteNAALXsAAC19AAAtfwAALX8gAC1/QAAtf2AALX+AAC1/sAAtf8AALX/QAC2AAAAtgBAALYAwAC2AQAAtgGAALYCQAC2AoAAtgLAALYDgAC2A8AAtgUAALYIQAC2CYAAtgoAALYKgAC2C8AAtgyAALYNQAC2DcAAthcAALYgAAC2KcAAtjLAALYzgAC2NAAAtjSAALY1AAC2NYAAtjYAALY2QAC2NwAAtjpAALY+gAC2PwAAtj+AALZAAAC2QIAAtkEAALZBgAC2QgAAtkKAALZGwAC2R4AAtkhAALZJAAC2ScAAtkqAALZLQAC2TAAAtkzAALZNQAC2XQAAtl2AALZeAAC2XoAAtl9AALZfgAC2X8AAtmAAALZgQAC2YMAAtmFAALZhgAC2YcAAtmJAALZigAC2ckAAtnLAALZzQAC2c8AAtnSAALZ0wAC2dQAAtnVAALZ1gAC2dgAAtnaAALZ2wAC2dwAAtneAALZ3wAC2h4AAtogAALaIwAC2iUAAtooAALaKQAC2ioAAtorAALaLAAC2i4AAtowAALaMQAC2jIAAto0AALaNQAC2kIAAtpDAALaRAAC2kYAAtqFAALahwAC2okAAtqLAALajgAC2o8AAtqQAALakQAC2pIAAtqUAALalgAC2pcAAtqYAALamgAC2psAAtraAALa3AAC2t4AAtrgAALa4wAC2uQAAtrlAALa5gAC2ucAAtrpAALa6wAC2uwAAtrtAALa7wAC2vAAAtsvAALbMQAC2zMAAts1AALbOAAC2zkAAts6AALbOwAC2zwAAts+AALbQAAC20EAAttCAALbRAAC20UAAtuEAALbhgAC24gAAtuKAALbjQAC244AAtuPAALbkAAC25EAAtuTAALblQAC25YAAtuXAALbmQAC25oAAtvZAALb2wAC290AAtvfAALb4gAC2+MAAtvkAALb5QAC2+YAAtvoAALb6gAC2+sAAtvsAALb7gAC2+8AAtwUAALcOAAC3F8AAtyDAALchgAC3IgAAtyKAALcjAAC3I4AAtyQAALckQAC3JQAAtyhAALcsAAC3LIAAty0AALctgAC3LgAAty6AALcvAAC3L4AAtzNAALc0AAC3NMAAtzWAALc2QAC3NwAAtzfAALc4gAC3OQAAt0jAALdJQAC3ScAAt0pAALdLAAC3S0AAt0uAALdLwAC3TAAAt0yAALdNAAC3TUAAt02AALdOAAC3TkAAt14AALdegAC3XwAAt1+AALdgQAC3YIAAt2DAALdhAAC3YUAAt2HAALdiQAC3YoAAt2LAALdjQAC3Y4AAt3NAALdzwAC3dEAAt3TAALd1gAC3dcAAt3YAALd2QAC3doAAt3cAALd3gAC3d8AAt3gAALd4gAC3eMAAt4iAALeJAAC3iYAAt4oAALeKwAC3iwAAt4tAALeLgAC3i8AAt4xAALeMwAC3jQAAt41AALeNwAC3jgAAt53AALeeQAC3nsAAt59AALegAAC3oEAAt6CAALegwAC3oQAAt6GAALeiAAC3okAAt6KAALejAAC3o0AAt7MAALezgAC3tAAAt7SAALe1QAC3tYAAt7XAALe2AAC3tkAAt7bAALe3QAC3t4AAt7fAALe4QAC3uIAAt8hAALfIwAC3yUAAt8nAALfKgAC3ysAAt8sAALfLQAC3y4AAt8wAALfMgAC3zMAAt80AALfNgAC3zcAAt9AAALfQQAC30MAAt+GAALfqgAC384AAt/xAALgGAAC4DgAAuBfAALghgAC4KYAAuDKAALg7gAC4PAAAuDzAALg9QAC4PcAAuD5AALg/AAC4P8AAuEBAALhAwAC4QYAAuEIAALhCgAC4Q0AAuEQAALhEQAC4RYAAuEjAALhJgAC4SgAAuErAALhLgAC4TAAAuFVAALheQAC4aAAAuHEAALhxwAC4ckAAuHLAALhzQAC4c8AAuHRAALh0gAC4dUAAuHiAALh9QAC4fcAAuH5AALh+wAC4f0AAuH/AALiAQAC4gMAAuIFAALiBwAC4hoAAuIdAALiIAAC4iMAAuImAALiKQAC4iwAAuIvAALiMgAC4jUAAuI3AALidgAC4ngAAuJ7AALifQAC4oAAAuKBAALiggAC4oMAAuKEAALihgAC4ogAAuKJAALiigAC4owAAuKNAALilgAC4pcAAuKZAALi2AAC4toAAuLcAALi3gAC4uEAAuLiAALi4wAC4uQAAuLlAALi5wAC4ukAAuLqAALi6wAC4u0AAuLuAALjLQAC4y8AAuMyAALjNAAC4zcAAuM4AALjOQAC4zoAAuM7AALjPQAC4z8AAuNAAALjQQAC40MAAuNEAALjTQAC404AAuNQAALjjwAC45EAAuOTAALjlQAC45gAAuOZAALjmgAC45sAAuOcAALjngAC46AAAuOhAALjogAC46QAAuOlAALj5AAC4+YAAuPpAALj6wAC4+4AAuPvAALj8AAC4/EAAuPyAALj9AAC4/YAAuP3AALj+AAC4/oAAuP7AALkBAAC5AUAAuQHAALkRgAC5EgAAuRKAALkTAAC5E8AAuRQAALkUQAC5FIAAuRTAALkVQAC5FcAAuRYAALkWQAC5FsAAuRcAALkmwAC5J0AAuSgAALkogAC5KUAAuSmAALkpwAC5KgAAuSpAALkqwAC5K0AAuSuAALkrwAC5LEAAuSyAALkvwAC5MAAAuTBAALkwwAC5QIAAuUEAALlBgAC5QgAAuULAALlDAAC5Q0AAuUOAALlDwAC5REAAuUTAALlFAAC5RUAAuUXAALlGAAC5VcAAuVZAALlXAAC5V4AAuVhAALlYgAC5WMAAuVkAALlZQAC5WcAAuVpAALlagAC5WsAAuVtAALlbgAC5YoAAuWXAALlogAC5aUAAuWoAALlqwAC5a4AAuWxAALlvAAC5b8AAuXCAALlxQAC5cgAAuXLAALlzQAC5eAAAuXuAALl9wAC5gkAAuYRAALmXAAC5n8AAuafAALmvwAC5sEAAubDAALmxQAC5scAAubKAALmywAC5swAAubPAALm0AAC5tIAAubTAALm1QAC5tgAAubZAALm2gAC5t0AAubeAALm4wAC5vAAAub1AALm9wAC5vkAAub+AALnAQAC5wQAAucGAALnKwAC508AAud2AALnmgAC550AAuefAALnoQAC56MAAuelAALnpwAC56gAAuerAALnuAAC58kAAufLAALnzQAC588AAufRAALn0wAC59UAAufXAALn2QAC5+oAAuftAALn8AAC5/MAAuf2AALn+QAC5/wAAuf/AALoAgAC6AQAAuhDAALoRQAC6EcAAuhJAALoTAAC6E0AAuhOAALoTwAC6FAAAuhSAALoVAAC6FUAAuhWAALoWAAC6FkAAuiYAALomgAC6JwAAuieAALooQAC6KIAAuijAALopAAC6KUAAuinAALoqQAC6KoAAuirAALorQAC6K4AAujtAALo7wAC6PIAAuj0AALo9wAC6PgAAuj5AALo+gAC6PsAAuj9AALo/wAC6QAAAukBAALpAwAC6QQAAukRAALpEgAC6RMAAukVAALpVAAC6VYAAulYAALpWgAC6V0AAuleAALpXwAC6WAAAulhAALpYwAC6WUAAulmAALpZwAC6WkAAulqAALpqQAC6asAAumtAALprwAC6bIAAumzAALptAAC6bUAAum2AALpuAAC6boAAum7AALpvAAC6b4AAum/AALp/gAC6gAAAuoCAALqBAAC6gcAAuoIAALqCQAC6goAAuoLAALqDQAC6g8AAuoQAALqEQAC6hMAAuoUAALqUwAC6lUAAupXAALqWQAC6lwAAupdAALqXgAC6l8AAupgAALqYgAC6mQAAuplAALqZgAC6mgAAuppAALqqAAC6qoAAuqsAALqrgAC6rEAAuqyAALqswAC6rQAAuq1AALqtwAC6rkAAuq6AALquwAC6r0AAuq+AALq4wAC6wcAAusuAALrUgAC61UAAutXAALrWQAC61sAAutdAALrXwAC62AAAutjAALrcAAC638AAuuBAALrgwAC64UAAuuHAALriQAC64sAAuuNAALrnAAC658AAuuiAALrpQAC66gAAuurAALrrgAC67EAAuuzAALr8gAC6/QAAuv2AALr+AAC6/sAAuv8AALr/QAC6/4AAuv/AALsAQAC7AMAAuwEAALsBQAC7AcAAuwIAALsRwAC7EkAAuxLAALsTQAC7FAAAuxRAALsUgAC7FMAAuxUAALsVgAC7FgAAuxZAALsWgAC7FwAAuxdAALsnAAC7J4AAuygAALsogAC7KUAAuymAALspwAC7KgAAuypAALsqwAC7K0AAuyuAALsrwAC7LEAAuyyAALs8QAC7PMAAuz2AALs+AAC7PsAAuz8AALs/QAC7P4AAuz/AALtAQAC7QMAAu0EAALtBQAC7QcAAu0IAALtRwAC7UkAAu1LAALtTQAC7VAAAu1RAALtUgAC7VMAAu1UAALtVgAC7VgAAu1ZAALtWgAC7VwAAu1dAALtnAAC7Z4AAu2hAALtowAC7aYAAu2nAALtqAAC7akAAu2qAALtrAAC7a4AAu2vAALtsAAC7bIAAu2zAALt2gAC7hkAAu4bAALuHQAC7h8AAu4iAALuIwAC7iQAAu4lAALuJgAC7igAAu4qAALuKwAC7iwAAu4uAALuLwAC7noAAu6dAALuvQAC7t0AAu7fAALu4QAC7uMAAu7lAALu6AAC7ukAAu7qAALu7QAC7u4AAu7wAALu8QAC7vMAAu72AALu9wAC7vgAAu77AALu/AAC7wEAAu8OAALvEwAC7xUAAu8XAALvHAAC7x8AAu8iAALvJAAC70kAAu9tAALvlAAC77gAAu+7AALvvQAC778AAu/BAALvwwAC78UAAu/GAALvyQAC79YAAu/nAALv6QAC7+sAAu/tAALv7wAC7/EAAu/zAALv9QAC7/cAAvAIAALwCwAC8A4AAvARAALwFAAC8BcAAvAaAALwHQAC8CAAAvAiAALwYQAC8GMAAvBlAALwZwAC8GoAAvBrAALwbAAC8G0AAvBuAALwcAAC8HIAAvBzAALwdAAC8HYAAvB3AALwtgAC8LgAAvC6AALwvAAC8L8AAvDAAALwwQAC8MIAAvDDAALwxQAC8McAAvDIAALwyQAC8MsAAvDMAALxCwAC8Q0AAvEQAALxEgAC8RUAAvEWAALxFwAC8RgAAvEZAALxGwAC8R0AAvEeAALxHwAC8SEAAvEiAALxLwAC8TAAAvExAALxMwAC8XIAAvF0AALxdgAC8XgAAvF7AALxfAAC8X0AAvF+AALxfwAC8YEAAvGDAALxhAAC8YUAAvGHAALxiAAC8ccAAvHJAALxywAC8c0AAvHQAALx0QAC8dIAAvHTAALx1AAC8dYAAvHYAALx2QAC8doAAvHcAALx3QAC8hwAAvIeAALyIAAC8iIAAvIlAALyJgAC8icAAvIoAALyKQAC8isAAvItAALyLgAC8i8AAvIxAALyMgAC8nEAAvJzAALydQAC8ncAAvJ6AALyewAC8nwAAvJ9AALyfgAC8oAAAvKCAALygwAC8oQAAvKGAALyhwAC8sYAAvLIAALyygAC8swAAvLPAALy0AAC8tEAAvLSAALy0wAC8tUAAvLXAALy2AAC8tkAAvLbAALy3AAC8wEAAvMlAALzTAAC83AAAvNzAALzdQAC83cAAvN5AALzewAC830AAvN+AALzgQAC844AAvOdAALznwAC86EAAvOjAALzpQAC86cAAvOpAALzqwAC87oAAvO9AALzwAAC88MAAvPGAALzyQAC88wAAvPPAALz0QAC9BAAAvQSAAL0FAAC9BYAAvQZAAL0GgAC9BsAAvQcAAL0HQAC9B8AAvQhAAL0IgAC9CMAAvQlAAL0JgAC9GUAAvRnAAL0aQAC9GsAAvRuAAL0bwAC9HAAAvRxAAL0cgAC9HQAAvR2AAL0dwAC9HgAAvR6AAL0ewAC9LoAAvS8AAL0vgAC9MAAAvTDAAL0xAAC9MUAAvTGAAL0xwAC9MkAAvTLAAL0zAAC9M0AAvTPAAL00AAC9Q8AAvURAAL1FAAC9RYAAvUZAAL1GgAC9RsAAvUcAAL1HQAC9R8AAvUhAAL1IgAC9SMAAvUlAAL1JgAC9WUAAvVnAAL1aQAC9WsAAvVuAAL1bwAC9XAAAvVxAAL1cgAC9XQAAvV2AAL1dwAC9XgAAvV6AAL1ewAC9boAAvW8AAL1vwAC9cEAAvXEAAL1xQAC9cYAAvXHAAL1yAAC9coAAvXMAAL1zQAC9c4AAvXQAAL10QAC9fgAAvY3AAL2OQAC9jsAAvY9AAL2QAAC9kEAAvZ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mAAMTZwADE2oAAxNrAAMTcAADE30AAxOCAAMThAADE4YAAxOLAAMTjgADE5EAAxOTAAMTuAADE9wAAxQDAAMUJwADFCoAAxQsAAMULgADFDAAAxQyAAMUNAADFDUAAxQ4AAMURQADFFYAAxRYAAMUWgADFFwAAxReAAMUYAADFGIAAxRkAAMUZgADFHcAAxR6AAMUfQADFIAAAxSDAAMUhgADFIkAAxSMAAMUjwADFJEAAxTQAAMU0gADFNQAAxTWAAMU2QADFNoAAxTbAAMU3AADFN0AAxTfAAMU4QADFOIAAxTjAAMU5QADFOYAAxUlAAMVJwADFSkAAxUrAAMVLgADFS8AAxUwAAMVMQADFTIAAxU0AAMVNgADFTcAAxU4AAMVOgADFTsAAxV6AAMVfAADFX8AAxWBAAMVhAADFYUAAxWGAAMVhwADFYgAAxWKAAMVjAADFY0AAxWOAAMVkAADFZEAAxWeAAMVnwADFaAAAxWiAAMV4QADFeMAAxXlAAMV5wADFeoAAxXrAAMV7AADFe0AAxXuAAMV8AADFfIAAxXzAAMV9AADFfYAAxX3AAMWNgADFjgAAxY6AAMWPAADFj8AAxZAAAMWQQADFkIAAxZDAAMWRQADFkcAAxZIAAMWSQADFksAAxZMAAMWiwADFo0AAxaPAAMWkQADFpQAAxaVAAMWlgADFpcAAxaYAAMWmgADFpwAAxadAAMWngADFqAAAxahAAMW4AADFuIAAxbkAAMW5gADFukAAxbqAAMW6wADFuwAAxbtAAMW7wADFvEAAxbyAAMW8wADFvUAAxb2AAMXNQADFzcAAxc5AAMXOwADFz4AAxc/AAMXQAADF0EAAxdCAAMXRAADF0YAAxdHAAMXSAADF0oAAxdLAAMXcAADF5QAAxe7AAMX3wADF+IAAxfkAAMX5gADF+gAAxfqAAMX7AADF+0AAxfwAAMX/QADGAwAAxgOAAMYEAADGBIAAxgUAAMYFgADGBgAAxgaAAMYKQADGCwAAxgvAAMYMgADGDUAAxg4AAMYOwADGD4AAxhAAAMYfwADGIEAAxiDAAMYhQADGIgAAxiJAAMYigADGIsAAxiMAAMYjgADGJAAAxiRAAMYkgADGJQAAxiVAAMY1AADGNYAAxjYAAMY2gADGN0AAxjeAAMY3wADGOAAAxjhAAMY4wADGOUAAxjmAAMY5wADGOkAAxjqAAMZKQADGSsAAxktAAMZLwADGTIAAxkzAAMZNAADGTUAAxk2AAMZOAADGToAAxk7AAMZPAADGT4AAxk/AAMZfgADGYAAAxmCAAMZhAADGYcAAxmIAAMZiQADGYoAAxmLAAMZjQADGY8AAxmQAAMZkQADGZMAAxmUAAMZ0wADGdUAAxnXAAMZ2QADGdwAAxndAAMZ3gADGd8AAxngAAMZ4gADGeQAAxnlAAMZ5gADGegAAxnpAAMaKAADGioAAxosAAMaLgADGjEAAxoyAAMaMwADGjQAAxo1AAMaNwADGjkAAxo6AAMaOwADGj0AAxo+AAMafQADGn8AAxqBAAMagwADGoYAAxqHAAMaiAADGokAAxqKAAMajAADGo4AAxqPAAMakAADGpIAAxqTAAMa3gADGwEAAxshAAMbQQADG0MAAxtFAAMbRwADG0kAAxtMAAMbTQADG04AAxtRAAMbUgADG1QAAxtVAAMbVwADG1oAAxtbAAMbXAADG18AAxtgAAMbZQADG3IAAxt3AAMbeQADG3sAAxuAAAMbgwADG4YAAxuIAAMbrQADG9EAAxv4AAMcHAADHB8AAxwhAAMcIwADHCUAAxwnAAMcKQADHCoAAxwtAAMcOgADHEsAAxxNAAMcTwADHFEAAxxTAAMcVQADHFcAAxxZAAMcWwADHGwAAxxvAAMccgADHHUAAxx4AAMcewADHH4AAxyBAAMchAADHIYAAxzFAAMcxwADHMkAAxzLAAMczgADHM8AAxzQAAMc0QADHNIAAxzUAAMc1gADHNcAAxzYAAMc2gADHNsAAx0aAAMdHAADHR4AAx0gAAMdIwADHSQAAx0lAAMdJgADHScAAx0pAAMdKwADHSwAAx0tAAMdLwADHTAAAx1vAAMdcQADHXQAAx12AAMdeQADHXoAAx17AAMdfAADHX0AAx1/AAMdgQADHYIAAx2DAAMdhQADHYYAAx2TAAMdlAADHZUAAx2XAAMd1gADHdgAAx3aAAMd3AADHd8AAx3gAAMd4QADHeIAAx3jAAMd5QADHecAAx3oAAMd6QADHesAAx3sAAMeKwADHi0AAx4vAAMeMQADHjQAAx41AAMeNgADHjcAAx44AAMeOgADHjwAAx49AAMePgADHkAAAx5BAAMegAADHoIAAx6EAAMehgADHokAAx6KAAMeiwADHowAAx6NAAMejwADHpEAAx6SAAMekwADHpUAAx6WAAMe1QADHtcAAx7ZAAMe2wADHt4AAx7fAAMe4AADHuEAAx7iAAMe5AADHuYAAx7nAAMe6AADHuoAAx7rAAMfKgADHywAAx8uAAMfMAADHzMAAx80AAMfNQADHzYAAx83AAMfOQADHzsAAx88AAMfPQADHz8AAx9AAAMfZQADH4kAAx+wAAMf1AADH9cAAx/ZAAMf2wADH90AAx/fAAMf4QADH+IAAx/lAAMf8gADIAEAAyADAAMgBQADIAcAAyAJAAMgCwADIA0AAyAPAAMgHgADICEAAyAkAAMgJwADICoAAyAtAAMgMAADIDMAAyA1AAMgdAADIHYAAyB4AAMgegADIH0AAyB+AAMgfwADIIAAAyCBAAMggwADIIUAAyCGAAMghwADIIkAAyCKAAMgyQADIMsAAyDNAAMgzwADINIAAyDTAAMg1AADINUAAyDWAAMg2AADINoAAyDbAAMg3AADIN4AAyDfAAMhHgADISAAAyEiAAMhJAADIScAAyEoAAMhKQADISoAAyErAAMhLQADIS8AAyEwAAMhMQADITMAAyE0AAMhcwADIXUAAyF4AAMhegADIX0AAyF+AAMhfwADIYAAAyGBAAMhgwADIYUAAyGGAAMhhwADIYkAAyGKAAMhjAADIcsAAyHNAAMhzwADIdEAAyHUAAMh1QADIdYAAyHXAAMh2AADIdoAAyHcAAMh3QADId4AAyHgAAMh4QADIiAAAyIiAAMiJAADIiYAAyIpAAMiKgADIisAAyIsAAMiLQADIi8AAyIxAAMiMgADIjMAAyI1AAMiNgADInUAAyJ3AAMieQADInsAAyJ+AAMifwADIoAAAyKBAAMiggADIoQAAyKGAAMihwADIogAAyKKAAMiiwADIpQAAyKVAAMilwADItYAAyLYAAMi2gADItwAAyLfAAMi4AADIuEAAyLiAAMi4wADIuUAAyLnAAMi6AADIukAAyLrAAMi7AADIysAAyMtAAMjLwADIzEAAyM0AAMjNQADIzYAAyM3AAMjOAADIzoAAyM8AAMjPQADIz4AAyNAAAMjQQADI4AAAyOCAAMjhAADI4YAAyOJAAMjigADI4sAAyOMAAMjjQADI48AAyORAAMjkgADI5MAAyOVAAMjlgADI9UAAyPXAAMj2QADI9sAAyPeAAMj3wADI+AAAyPhAAMj4gADI+QAAyPmAAMj5wADI+gAAyPqAAMj6wADJCoAAyQsAAMkLgADJDAAAyQzAAMkNAADJDUAAyQ2AAMkNwADJDkAAyQ7AAMkPAADJD0AAyQ/AAMkQAADJIsAAySuAAMkzgADJO4AAyTwAAMk8gADJPQAAyT2AAMk+QADJPoAAyT7AAMk/gADJP8AAyUBAAMlAgADJQQAAyUHAAMlCAADJQkAAyUMAAMlDQADJRIAAyUfAAMlJAADJSYAAyUoAAMlLQADJTAAAyUzAAMlNQADJVoAAyV+AAMlpQADJckAAyXMAAMlzgADJdAAAyXSAAMl1AADJdYAAyXXAAMl2gADJecAAyX4AAMl+gADJfwAAyX+AAMmAAADJgIAAyYEAAMmBgADJggAAyYZAAMmHAADJh8AAyYiAAMmJQADJigAAyYrAAMmLgADJjEAAyYzAAMmcgADJnQAAyZ2AAMmeAADJnsAAyZ8AAMmfQADJn4AAyZ/AAMmgQADJoMAAyaEAAMmhQADJocAAyaIAAMmxwADJskAAybLAAMmzQADJtAAAybRAAMm0gADJtMAAybUAAMm1gADJtgAAybZAAMm2gADJtwAAybdAAMnHAADJx4AAychAAMnIwADJyYAAycnAAMnKAADJykAAycqAAMnLAADJy4AAycvAAMnMAADJzIAAyczAAMnQAADJ0EAAydCAAMnRAADJ4MAAyeFAAMnhwADJ4kAAyeMAAMnjQADJ44AAyePAAMnkAADJ5IAAyeUAAMnlQADJ5YAAyeYAAMnmQADJ9gAAyfaAAMn3AADJ94AAyfhAAMn4gADJ+MAAyfkAAMn5QADJ+cAAyfpAAMn6gADJ+sAAyftAAMn7gADKC0AAygvAAMoMQADKDMAAyg2AAMoNwADKDgAAyg5AAMoOgADKDwAAyg+AAMoPwADKEAAAyhCAAMoQwADKIIAAyiEAAMohgADKIgAAyiLAAMojAADKI0AAyiOAAMojwADKJEAAyiTAAMolAADKJUAAyiXAAMomAADKNcAAyjZAAMo2wADKN0AAyjgAAMo4QADKOIAAyjjAAMo5AADKOYAAyjoAAMo6QADKOoAAyjsAAMo7QADKRIAAyk2AAMpXQADKYEAAymEAAMphgADKYgAAymKAAMpjAADKY4AAymPAAMpkgADKZ8AAymuAAMpsAADKbIAAym0AAMptgADKbgAAym6AAMpvAADKcsAAynOAAMp0QADKdQAAynXAAMp2gADKd0AAyngAAMp4gADKiEAAyojAAMqJQADKicAAyoqAAMqKwADKiwAAyotAAMqLgADKjAAAyoyAAMqMwADKjQAAyo2AAMqNwADKnYAAyp4AAMqegADKnwAAyp/AAMqgAADKoEAAyqCAAMqgwADKoUAAyqHAAMqiAADKokAAyqLAAMqjAADKssAAyrNAAMqzwADKtEAAyrUAAMq1QADKtYAAyrXAAMq2AADKtoAAyrcAAMq3QADKt4AAyrgAAMq4QADKyAAAysiAAMrJAADKyYAAyspAAMrKgADKysAAyssAAMrLQADKy8AAysxAAMrMgADKzMAAys1AAMrNgADK3UAAyt3AAMreQADK3sAAyt+AAMrfwADK4AAAyuBAAMrggADK4QAAyuGAAMrhwADK4gAAyuKAAMriwADK8oAAyvMAAMrzgADK9AAAyvTAAMr1AADK9UAAyvWAAMr1wADK9kAAyvbAAMr3AADK90AAyvfAAMr4AADLB8AAywhAAMsIwADLCUAAywoAAMsKQADLCoAAywrAAMsLAADLC4AAywwAAMsMQADLDIAAyw0AAMsNQADLD4AAyw/AAMsQQADLIQAAyyoAAMszAADLO8AAy0WAAMtNgADLV0AAy2EAAMtpAADLcgAAy3sAAMt7gADLfEAAy3zAAMt9QADLfcAAy36AAMt/QADLf8AAy4BAAMuBAADLgYAAy4IAAMuCwADLg4AAy4PAAMuFAADLiEAAy4kAAMuJgADLikAAy4sAAMuLgADLlMAAy53AAMungADLsIAAy7FAAMuxwADLskAAy7LAAMuzQADLs8AAy7QAAMu0wADLuAAAy7zAAMu9QADLvcAAy75AAMu+wADLv0AAy7/AAMvAQADLwMAAy8FAAMvGAADLxsAAy8eAAMvIQADLyQAAy8nAAMvKgADLy0AAy8wAAMvMwADLzUAAy90AAMvdgADL3kAAy97AAMvfgADL38AAy+AAAMvgQADL4IAAy+EAAMvhgADL4cAAy+IAAMvigADL4sAAy+UAAMvlQADL5cAAy/WAAMv2AADL9oAAy/cAAMv3wADL+AAAy/hAAMv4gADL+MAAy/lAAMv5wADL+gAAy/pAAMv6wADL+wAAzArAAMwLQADMDAAAzAyAAMwNQADMDYAAzA3AAMwOAADMDkAAzA7AAMwPQADMD4AAzA/AAMwQQADMEIAAzBLAAMwTAADME4AAzCNAAMwjwADMJEAAzCTAAMwlgADMJcAAzCYAAMwmQADMJoAAzCcAAMwngADMJ8AAzCgAAMwogADMKMAAzDiAAMw5AADMOcAAzDpAAMw7AADMO0AAzDuAAMw7wADMPAAAzDyAAMw9AADMPUAAzD2AAMw+AADMPkAAzECAAMxAwADMQUAAzFEAAMxRgADMUgAAzFKAAMxTQADMU4AAzFPAAMxUAADMVEAAzFTAAMxVQADMVYAAzFXAAMxWQADMVoAAzGZAAMxmwADMZ4AAzGgAAMxowADMaQAAzGlAAMxpgADMacAAzGpAAMxqwADMawAAzGtAAMxrwADMbAAAzG9AAMxvgADMb8AAzHBAAMyAAADMgIAAzIEAAMyBgADMgkAAzIKAAMyCwADMgwAAzINAAMyDwADMhEAAzISAAMyEwADMhUAAzIWAAMyVQADMlcAAzJaAAMyXAADMl8AAzJgAAMyYQADMmIAAzJjAAMyZQADMmcAAzJoAAMyaQADMmsAAzJsAAMyeAADMoUAAzKKAAMyjQADMpAAAzKVAAMymAADMpsAAzKdAAMyowADMq4AAzL5AAMzHAADMzwAAzNcAAMzXgADM2AAAzNiAAMzZAADM2cAAzNoAAMzaQADM2wAAzNtAAMzbwADM3AAAzNyAAMzdQADM3YAAzN3AAMzegADM3sAAzOEAAMzkQADM5YAAzOYAAMzmgADM58AAzOiAAMzpQADM6cAAzPMAAMz8AADNBcAAzQ7AAM0PgADNEAAAzRCAAM0RAADNEYAAzRIAAM0SQADNEwAAzRZAAM0agADNGwAAzRuAAM0cAADNHIAAzR0AAM0dgADNHgAAzR6AAM0iwADNI4AAzSRAAM0lAADNJcAAzSaAAM0nQADNKAAAzSjAAM0pQADNOQAAzTmAAM06AADNOoAAzTtAAM07gADNO8AAzTwAAM08QADNPMAAzT1AAM09gADNPcAAzT5AAM0+gADNTkAAzU7AAM1PQADNT8AAzVCAAM1QwADNUQAAzVFAAM1RgADNUgAAzVKAAM1SwADNUwAAzVOAAM1TwADNY4AAzWQAAM1kwADNZUAAzWYAAM1mQADNZoAAzWbAAM1nAADNZ4AAzWgAAM1oQADNaIAAzWkAAM1pQADNbIAAzWzAAM1tAADNbYAAzX1AAM19wADNfkAAzX7AAM1/gADNf8AAzYAAAM2AQADNgIAAzYEAAM2BgADNgcAAzYIAAM2CgADNgsAAzZKAAM2TAADNk4AAzZQAAM2UwADNlQAAzZVAAM2VgADNlcAAzZZAAM2WwADNlwAAzZdAAM2XwADNmAAAzafAAM2oQADNqMAAzalAAM2qAADNqkAAzaqAAM2qwADNqwAAzauAAM2sAADNrEAAzayAAM2tAADNrUAAzb0AAM29gADNvgAAzb6AAM2/QADNv4AAzb/AAM3AAADNwEAAzcDAAM3BQADNwYAAzcHAAM3CQADNwoAAzdJAAM3SwADN00AAzdPAAM3UgADN1MAAzdUAAM3VQADN1YAAzdYAAM3WgADN1sAAzdcAAM3XgADN18AAzeEAAM3qAADN88AAzfzAAM39gADN/gAAzf6AAM3/AADN/4AAzgAAAM4AQADOAQAAzgRAAM4IAADOCIAAzgkAAM4JgADOCgAAzgqAAM4LAADOC4AAzg9AAM4QAADOEMAAzhGAAM4SQADOEwAAzhPAAM4UgADOFQAAziTAAM4lQADOJcAAziZAAM4nAADOJ0AAzieAAM4nwADOKAAAziiAAM4pAADOKUAAzimAAM4qAADOKkAAzjoAAM46gADOOwAAzjuAAM48QADOPIAAzjzAAM49AADOPUAAzj3AAM4+QADOPoAAzj7AAM4/QADOP4AAzk9AAM5PwADOUEAAzlDAAM5RgADOUcAAzlIAAM5SQADOUoAAzlMAAM5TgADOU8AAzlQAAM5UgADOVMAAzmSAAM5lAADOZYAAzmYAAM5mwADOZwAAzmdAAM5ngADOZ8AAzmhAAM5owADOaQAAzmlAAM5pwADOagAAznnAAM56QADOesAAzntAAM58AADOfEAAznyAAM58wADOfQAAzn2AAM5+AADOfkAAzn6AAM5/AADOf0AAzo8AAM6PgADOkAAAzpCAAM6RQADOkYAAzpHAAM6SAADOkkAAzpLAAM6TQADOk4AAzpPAAM6UQADOlIAAzqRAAM6kwADOpUAAzqXAAM6mgADOpsAAzqcAAM6nQADOp4AAzqgAAM6ogADOqMAAzqkAAM6pgADOqcAAzryAAM7FQADOzUAAztVAAM7VwADO1kAAztbAAM7XQADO2AAAzthAAM7YgADO2UAAztmAAM7aAADO2kAAztrAAM7bgADO28AAztwAAM7cwADO3QAAzt5AAM7hgADO4sAAzuNAAM7jwADO5QAAzuXAAM7mgADO5wAAzvBAAM75QADPAwAAzwwAAM8MwADPDUAAzw3AAM8OQADPDsAAzw9AAM8PgADPEEAAzxOAAM8XwADPGEAAzxjAAM8ZQADPGcAAzxpAAM8awADPG0AAzxvAAM8gAADPIMAAzyGAAM8iQADPIwAAzyPAAM8kgADPJUAAzyYAAM8mgADPNkAAzzbAAM83QADPN8AAzziAAM84wADPOQAAzzlAAM85gADPOgAAzzqAAM86wADPOwAAzzuAAM87wADPS4AAz0wAAM9MgADPTQAAz03AAM9OAADPTkAAz06AAM9OwADPT0AAz0/AAM9QAADPUEAAz1DAAM9RAADPYMAAz2FAAM9iAADPYoAAz2NAAM9jgADPY8AAz2QAAM9kQADPZMAAz2VAAM9lgADPZcAAz2ZAAM9mgADPacAAz2oAAM9qQADPasAAz3qAAM97AADPe4AAz3wAAM98wADPfQAAz31AAM99gADPfcAAz35AAM9+wADPfwAAz39AAM9/wADPgAAAz4/AAM+QQADPkMAAz5FAAM+SAADPkkAAz5KAAM+SwADPkwAAz5OAAM+UAADPlEAAz5SAAM+VAADPlUAAz6UAAM+lgADPpgAAz6aAAM+nQADPp4AAz6fAAM+oAADPqEAAz6jAAM+pQADPqYAAz6nAAM+qQADPqoAAz7pAAM+6wADPu0AAz7vAAM+8gADPvMAAz70AAM+9QADPvYAAz74AAM++gADPvsAAz78AAM+/gADPv8AAz8+AAM/QAADP0IAAz9EAAM/RwADP0gAAz9JAAM/SgADP0sAAz9NAAM/TwADP1AAAz9RAAM/UwADP1QAAz95AAM/nQADP8QAAz/oAAM/6wADP+0AAz/vAAM/8QADP/MAAz/1AAM/9gADP/kAA0AGAANAFQADQBcAA0AZAANAGwADQB0AA0AfAANAIQADQCMAA0AyAANANQADQDgAA0A7AANAPgADQEEAA0BEAANARwADQEkAA0CIAANAigADQIwAA0COAANAkQADQJIAA0CTAANAlAADQJUAA0CXAANAmQADQJoAA0CbAANAnQADQJ4AA0DdAANA3wADQOEAA0DjAANA5gADQOcAA0DoAANA6QADQOoAA0DsAANA7gADQO8AA0DwAANA8gADQPMAA0EyAANBNAADQTYAA0E4AANBOwADQTwAA0E9AANBPgADQT8AA0FBAANBQwADQUQAA0FFAANBRwADQUgAA0GHAANBiQADQYsAA0GNAANBkAADQZEAA0GSAANBkwADQZQAA0GWAANBmAADQZkAA0GaAANBnAADQZ0AA0HcAANB3gADQeAAA0HiAANB5QADQeYAA0HnAANB6AADQekAA0HrAANB7QADQe4AA0HvAANB8QADQfIAA0IxAANCMwADQjUAA0I3AANCOgADQjsAA0I8AANCPQADQj4AA0JAAANCQgADQkMAA0JEAANCRgADQkcAA0KGAANCiAADQooAA0KMAANCjwADQpAAA0KRAANCkgADQpMAA0KVAANClwADQpgAA0KZAANCmwADQpwAA0KlAANCpgADQqgAA0LrAANDDwADQzMAA0NWAANDfQADQ50AA0PEAAND6wADRAsAA0QvAANEUwADRFUAA0RYAANEWgADRFwAA0ReAANEYQADRGQAA0RmAANEaAADRGsAA0RtAANEbwADRHIAA0R1AANEdgADRHsAA0SIAANEiwADRI0AA0SQAANEkwADRJUAA0S6AANE3gADRQUAA0UpAANFLAADRS4AA0UwAANFMgADRTQAA0U2AANFNwADRToAA0VHAANFWgADRVwAA0VeAANFYAADRWIAA0VkAANFZgADRWgAA0VqAANFbAADRX8AA0WCAANFhQADRYgAA0WLAANFjgADRZEAA0WUAANFlwADRZoAA0WcAANF2wADRd0AA0XgAANF4gADReUAA0XmAANF5wADRegAA0XpAANF6wADRe0AA0XuAANF7wADRfEAA0XyAANF+wADRfwAA0X+AANGPQADRj8AA0ZBAANGQwADRkYAA0ZHAANGSAADRkkAA0ZKAANGTAADRk4AA0ZPAANGUAADRlIAA0ZTAANGkgADRpQAA0aXAANGmQADRpwAA0adAANGngADRp8AA0agAANGogADRqQAA0alAANGpgADRqgAA0apAANGsgADRrMAA0a1AANG9AADRvYAA0b4AANG+gADRv0AA0b+AANG/wADRwAAA0cBAANHAwADRwUAA0cGAANHBwADRwkAA0cKAANHSQADR0sAA0dOAANHUAADR1MAA0dUAANHVQADR1YAA0dXAANHWQADR1sAA0dcAANHXQADR18AA0dgAANHaQADR2oAA0dsAANHqwADR60AA0evAANHsQADR7QAA0e1AANHtgADR7cAA0e4AANHugADR7wAA0e9AANHvgADR8AAA0fBAANIAAADSAIAA0gFAANIBwADSAoAA0gLAANIDAADSA0AA0gOAANIEAADSBIAA0gTAANIFAADSBYAA0gXAANIJAADSCUAA0gmAANIKAADSGcAA0hpAANIawADSG0AA0hwAANIcQADSHIAA0hzAANIdAADSHYAA0h4AANIeQADSHoAA0h8AANIfQADSLwAA0i+AANIwQADSMMAA0jGAANIxwADSMgAA0jJAANIygADSMwAA0jOAANIzwADSNAAA0jSAANI0wADSOsAA0j4AANJAwADSQYAA0kJAANJDAADSQ8AA0kSAANJHQADSSAAA0kjAANJJgADSSkAA0ksAANJLgADSTcAA0lAAANJSgADSZUAA0m4AANJ2AADSfgAA0n6AANJ/AADSf4AA0oAAANKAwADSgQAA0oFAANKCAADSgkAA0oLAANKDAADSg4AA0oRAANKEgADShMAA0oWAANKFwADShwAA0opAANKLgADSjAAA0oyAANKNwADSjoAA0o9AANKPwADSmQAA0qIAANKrwADStMAA0rWAANK2AADStoAA0rcAANK3gADSuAAA0rhAANK5AADSvEAA0sCAANLBAADSwYAA0sIAANLCgADSwwAA0sOAANLEAADSxIAA0sjAANLJgADSykAA0ssAANLLwADSzIAA0s1AANLOAADSzsAA0s9AANLfAADS34AA0uAAANLggADS4UAA0uGAANLhwADS4gAA0uJAANLiwADS40AA0uOAANLjwADS5EAA0uSAANL0QADS9MAA0vVAANL1wADS9oAA0vbAANL3AADS90AA0veAANL4AADS+IAA0vjAANL5AADS+YAA0vnAANMJgADTCgAA0wrAANMLQADTDAAA0wxAANMMgADTDMAA0w0AANMNgADTDgAA0w5AANMOgADTDwAA0w9AANMSgADTEsAA0xMAANMTgADTI0AA0yPAANMkQADTJMAA0yWAANMlwADTJgAA0yZAANMmgADTJwAA0yeAANMnwADTKAAA0yiAANMowADTOIAA0zkAANM5gADTOgAA0zrAANM7AADTO0AA0zuAANM7wADTPEAA0zzAANM9AADTPUAA0z3AANM+AADTTcAA005AANNOwADTT0AA01AAANNQQADTUIAA01DAANNRAADTUYAA01IAANNSQADTUoAA01MAANNTQADTYwAA02OAANNkAADTZIAA02VAANNlgADTZcAA02YAANNmQADTZsAA02dAANNngADTZ8AA02hAANNogADTeEAA03jAANN5QADTecAA03qAANN6wADTewAA03tAANN7gADTfAAA03yAANN8wADTfQAA032AANN9wADThwAA05AAANOZwADTosAA06OAANOkAADTpIAA06UAANOlgADTpgAA06ZAANOnAADTqkAA064AANOugADTrwAA06+AANOwAADTsIAA07EAANOxgADTtUAA07YAANO2wADTt4AA07hAANO5AADTucAA07qAANO7AADTysAA08tAANPLwADTzEAA080AANPNQADTzYAA083AANPOAADTzoAA088AANPPQADTz4AA09AAANPQQADT4AAA0+CAANPhAADT4YAA0+JAANPigADT4sAA0+MAANPjQADT48AA0+RAANPkgADT5MAA0+VAANPlgADT9UAA0/XAANP2QADT9sAA0/eAANP3wADT+AAA0/hAANP4gADT+QAA0/mAANP5wADT+gAA0/qAANP6wADUCoAA1AsAANQLwADUDEAA1A0AANQNQADUDYAA1A3AANQOAADUDoAA1A8AANQPQADUD4AA1BAAANQQQADUEQAA1CDAANQhQADUIcAA1CJAANQjAADUI0AA1COAANQjwADUJAAA1CSAANQlAADUJUAA1CWAANQmAADUJkAA1DYAANQ2gADUNwAA1DeAANQ4QADUOIAA1DjAANQ5AADUOUAA1DnAANQ6QADUOoAA1DrAANQ7QADUO4AA1EtAANRLwADUTEAA1EzAANRNgADUTcAA1E4AANROQADUToAA1E8AANRPgADUT8AA1FAAANRQgADUUMAA1GOAANRsQADUdEAA1HxAANR8wADUfUAA1H3AANR+QADUfwAA1H9AANR/gADUgEAA1ICAANSBAADUgUAA1IHAANSCgADUgsAA1IMAANSDwADUhAAA1IVAANSIgADUicAA1IpAANSKwADUjAAA1IzAANSNgADUjgAA1JdAANSgQADUqgAA1LMAANSzwADUtEAA1LTAANS1QADUtcAA1LZAANS2gADUt0AA1LqAANS+wADUv0AA1L/AANTAQADUwMAA1MFAANTBwADUwkAA1MLAANTHAADUx8AA1MiAANTJQADUygAA1MrAANTLgADUzEAA1M0AANTNgADU3UAA1N3AANTeQADU3sAA1N+AANTfwADU4AAA1OBAANTggADU4QAA1OGAANThwADU4gAA1OKAANTiwADU8oAA1PMAANTzgADU9AAA1PTAANT1AADU9UAA1PWAANT1wADU9kAA1PbAANT3AADU90AA1PfAANT4AADVB8AA1QhAANUJAADVCYAA1QpAANUKgADVCsAA1QsAANULQADVC8AA1QxAANUMgADVDMAA1Q1AANUNgADVEMAA1REAANURQADVEcAA1SGAANUiAADVIoAA1SMAANUjwADVJAAA1SRAANUkgADVJMAA1SVAANUlwADVJgAA1SZAANUmwADVJwAA1TbAANU3QADVN8AA1ThAANU5AADVOUAA1TmAANU5wADVOgAA1TqAANU7AADVO0AA1TuAANU8AADVPEAA1UwAANVMgADVTQAA1U2AANVOQADVToAA1U7AANVPAADVT0AA1U/AANVQQADVUIAA1VDAANVRQADVUYAA1WFAANVhwADVYkAA1WLAANVjgADVY8AA1WQAANVkQADVZIAA1WUAANVlgADVZcAA1WYAANVmgADVZsAA1XaAANV3AADVd4AA1XgAANV4wADVeQAA1XlAANV5gADVecAA1XpAANV6wADVewAA1XtAANV7wADVfAAA1YVAANWOQADVmAAA1aEAANWhwADVokAA1aLAANWjQADVo8AA1aRAANWkgADVpUAA1aiAANWsQADVrMAA1a1AANWtwADVrkAA1a7AANWvQADVr8AA1bOAANW0QADVtQAA1bXAANW2gADVt0AA1bgAANW4wADVuUAA1ckAANXJgADVygAA1cqAANXLQADVy4AA1cvAANXMAADVzEAA1czAANXNQADVzYAA1c3AANXOQADVzoAA1d5AANXewADV30AA1d/AANXggADV4MAA1eEAANXhQADV4YAA1eIAANXigADV4sAA1eMAANXjgADV48AA1fOAANX0AADV9IAA1fUAANX1wADV9gAA1fZAANX2gADV9sAA1fdAANX3wADV+AAA1fhAANX4wADV+QAA1gjAANYJQADWCgAA1gqAANYLQADWC4AA1gvAANYMAADWDEAA1gzAANYNQADWDYAA1g3AANYOQADWDoAA1h5AANYewADWH0AA1h/AANYggADWIMAA1iEAANYhQADWIYAA1iIAANYigADWIsAA1iMAANYjgADWI8AA1jOAANY0AADWNIAA1jUAANY1wADWNgAA1jZAANY2gADWNsAA1jdAANY3wADWOAAA1jhAANY4wADWOQAA1kjAANZJQADWScAA1kpAANZLAADWS0AA1kuAANZLwADWTAAA1kyAANZNAADWTUAA1k2AANZOAADWTkAA1mEAANZpwADWccAA1nnAANZ6QADWesAA1ntAANZ7wADWfIAA1nzAANZ9AADWfcAA1n4AANZ+gADWfsAA1n9AANaAAADWgEAA1oCAANaBQADWgYAA1oLAANaGAADWh0AA1ofAANaIQADWiYAA1opAANaLAADWi4AA1pTAANadwADWp4AA1rCAANaxQADWscAA1rJAANaywADWs0AA1rPAANa0AADWtMAA1rgAANa8QADWvMAA1r1AANa9wADWvkAA1r7AANa/QADWv8AA1sBAANbEgADWxUAA1sYAANbGwADWx4AA1shAANbJAADWycAA1sqAANbLAADW2sAA1ttAANbbwADW3EAA1t0AANbdQADW3YAA1t3AANbeAADW3oAA1t8AANbfQADW34AA1uAAANbgQADW8AAA1vCAANbxAADW8YAA1vJAANbygADW8sAA1vMAANbzQADW88AA1vRAANb0gADW9MAA1vVAANb1gADXBUAA1wXAANcGgADXBwAA1wfAANcIAADXCEAA1wiAANcIwADXCUAA1wnAANcKAADXCkAA1wrAANcLAADXDkAA1w6AANcOwADXD0AA1x8AANcfgADXIAAA1yCAANchQADXIYAA1yHAANciAADXIkAA1yLAANcjQADXI4AA1yPAANckQADXJIAA1zRAANc0wADXNUAA1zXAANc2gADXNsAA1zcAANc3QADXN4AA1zgAANc4gADXOMAA1zkAANc5gADXOcAA10mAANdKAADXSoAA10sAANdLwADXTAAA10xAANdMgADXTMAA101AANdNwADXTgAA105AANdOwADXTwAA117AANdfQADXX8AA12BAANdhAADXYUAA12GAANdhwADXYgAA12KAANdjAADXY0AA12OAANdkAADXZEAA13QAANd0gADXdQAA13WAANd2QADXdoAA13bAANd3AADXd0AA13fAANd4QADXeIAA13jAANd5QADXeYAA14LAANeLwADXlYAA156AANefQADXn8AA16BAANegwADXoUAA16HAANeiAADXosAA16YAANepwADXqkAA16rAANerQADXq8AA16xAANeswADXrUAA17EAANexwADXsoAA17NAANe0AADXtMAA17WAANe2QADXtsAA18aAANfHAADXx4AA18gAANfIwADXyQAA18lAANfJgADXycAA18pAANfKwADXywAA18tAANfLwADXzAAA19vAANfcQADX3MAA191AANfeAADX3kAA196AANfewADX3wAA19+AANfgAADX4EAA1+CAANfhAADX4UAA1/EAANfxgADX8gAA1/KAANfzQADX84AA1/PAANf0AADX9EAA1/TAANf1QADX9YAA1/XAANf2QADX9oAA2AZAANgGwADYB0AA2AfAANgIgADYCMAA2AkAANgJQADYCYAA2AoAANgKgADYCsAA2AsAANgLgADYC8AA2BuAANgcAADYHIAA2B0AANgdwADYHgAA2B5AANgegADYHsAA2B9AANgfwADYIAAA2CBAANggwADYIQAA2DDAANgxQADYMcAA2DJAANgzAADYM0AA2DOAANgzwADYNAAA2DSAANg1AADYNUAA2DWAANg2AADYNkAA2EYAANhGgADYRwAA2EeAANhIQADYSIAA2EjAANhJAADYSUAA2EnAANhKQADYSoAA2ErAANhLQADYS4AA2F5AANhnAADYbwAA2HcAANh3gADYeAAA2HiAANh5AADYecAA2HoAANh6QADYewAA2HtAANh7wADYfAAA2HyAANh9QADYfYAA2H3AANh+gADYfsAA2IAAANiDQADYhIAA2IUAANiFgADYhsAA2IeAANiIQADYiMAA2JIAANibAADYpMAA2K3AANiugADYrwAA2K+AANiwAADYsIAA2LEAANixQADYsgAA2LVAANi5gADYugAA2LqAANi7AADYu4AA2LwAANi8gADYvQAA2L2AANjBwADYwoAA2MNAANjEAADYxMAA2MWAANjGQADYxwAA2MfAANjIQADY2AAA2NiAANjZAADY2YAA2NpAANjagADY2sAA2NsAANjbQADY28AA2NxAANjcgADY3MAA2N1AANjdgADY7UAA2O3AANjuQADY7sAA2O+AANjvwADY8AAA2PBAANjwgADY8QAA2PGAANjxwADY8gAA2PKAANjywADZAoAA2QMAANkDwADZBEAA2QUAANkFQADZBYAA2QXAANkGAADZBoAA2QcAANkHQADZB4AA2QgAANkIQADZC4AA2QvAANkMAADZDIAA2RxAANkcwADZHUAA2R3AANkegADZHsAA2R8AANkfQADZH4AA2SAAANkggADZIMAA2SEAANkhgADZIcAA2TGAANkyAADZMoAA2TMAANkzwADZNAAA2TRAANk0gADZNMAA2TVAANk1wADZNgAA2TZAANk2wADZNwAA2UbAANlHQADZR8AA2UhAANlJAADZSUAA2UmAANlJwADZSgAA2UqAANlLAADZS0AA2UuAANlMAADZTEAA2VwAANlcgADZXQAA2V2AANleQADZXoAA2V7AANlfAADZX0AA2V/AANlgQADZYIAA2WDAANlhQADZYYAA2XFAANlxwADZckAA2XLAANlzgADZc8AA2XQAANl0QADZdIAA2XUAANl1gADZdcAA2XYAANl2gADZdsAA2YAAANmJAADZksAA2ZvAANmcgADZnQAA2Z2AANmeAADZnoAA2Z8AANmfQADZoAAA2aNAANmnAADZp4AA2agAANmogADZqQAA2amAANmqAADZqoAA2a5AANmvAADZr8AA2bCAANmxQADZsgAA2bLAANmzgADZtAAA2cPAANnEQADZxMAA2cVAANnGAADZxkAA2caAANnGwADZxwAA2ceAANnIAADZyEAA2ciAANnJAADZyUAA2dkAANnZgADZ2gAA2dqAANnbQADZ24AA2dvAANncAADZ3EAA2dzAANndQADZ3YAA2d3AANneQADZ3oAA2e5AANnuwADZ70AA2e/AANnwgADZ8MAA2fEAANnxQADZ8YAA2fIAANnygADZ8sAA2fMAANnzgADZ88AA2gOAANoEAADaBMAA2gVAANoGAADaBkAA2gaAANoGwADaBwAA2geAANoIAADaCEAA2giAANoJAADaCUAA2hkAANoZgADaGgAA2hqAANobQADaG4AA2hvAANocAADaHEAA2hzAANodQADaHYAA2h3AANoeQADaHoAA2i5AANouwADaL0AA2i/AANowgADaMMAA2jEAANoxQADaMYAA2jIAANoygADaMsAA2jMAANozgADaM8AA2kOAANpEAADaRIAA2kUAANpFwADaRgAA2kZAANpGgADaRsAA2kdAANpHwADaSAAA2khAANpIwADaSQAA2lvAANpkgADabIAA2nSAANp1AADadYAA2nYAANp2gADad0AA2neAANp3wADaeIAA2njAANp5QADaeYAA2noAANp6wADaewAA2ntAANp8AADafEAA2n2AANqAwADaggAA2oKAANqDAADahEAA2oUAANqFwADahkAA2o+AANqYgADaokAA2qtAANqsAADarIAA2q0AANqtgADargAA2q6AANquwADar4AA2rLAANq3AADat4AA2rgAANq4gADauQAA2rmAANq6AADauoAA2rsAANq/QADawAAA2sDAANrBgADawkAA2sMAANrDwADaxIAA2sVAANrFwADa1YAA2tYAANrWgADa1wAA2tfAANrYAADa2EAA2tiAANrYwADa2UAA2tnAANraAADa2kAA2trAANrbAADa6sAA2utAANrrwADa7EAA2u0AANrtQADa7YAA2u3AANruAADa7oAA2u8AANrvQADa74AA2vAAANrwQADbAAAA2wCAANsBQADbAcAA2wKAANsCwADbAwAA2wNAANsDgADbBAAA2wSAANsEwADbBQAA2wWAANsFwADbCQAA2wlAANsJgADbCgAA2xnAANsaQADbGsAA2xtAANscAADbHEAA2xyAANscwADbHQAA2x2AANseAADbHkAA2x6AANsfAADbH0AA2y8AANsvgADbMAAA2zCAANsxQADbMYAA2zHAANsyAADbMkAA2zLAANszQADbM4AA2zPAANs0QADbNIAA20RAANtEwADbRUAA20XAANtGgADbRsAA20cAANtHQADbR4AA20gAANtIgADbSMAA20kAANtJgADbScAA21mAANtaAADbWoAA21sAANtbwADbXAAA21xAANtcgADbXMAA211AANtdwADbXgAA215AANtewADbXwAA227AANtvQADbb8AA23BAANtxAADbcUAA23GAANtxwADbcgAA23KAANtzAADbc0AA23OAANt0AADbdEAA232AANuGgADbkEAA25lAANuaAADbmoAA25sAANubgADbnAAA25yAANucwADbnYAA26DAANukgADbpQAA26WAANumAADbpoAA26cAANungADbqAAA26vAANusgADbrUAA264AANuuwADbr4AA27BAANuxAADbsYAA28FAANvBwADbwkAA28LAANvDgADbw8AA28QAANvEQADbxIAA28UAANvFgADbxcAA28YAANvGgADbxsAA29aAANvXAADb14AA29gAANvYwADb2QAA29lAANvZgADb2cAA29pAANvawADb2wAA29tAANvbwADb3AAA2+vAANvsQADb7MAA2+1AANvuAADb7kAA2+6AANvuwADb7wAA2++AANvwAADb8EAA2/CAANvxAADb8UAA3AEAANwBgADcAkAA3ALAANwDgADcA8AA3AQAANwEQADcBIAA3AUAANwFgADcBcAA3AYAANwGgADcBsAA3BaAANwXAADcF4AA3BgAANwYwADcGQAA3BlAANwZgADcGcAA3BpAANwawADcGwAA3BtAANwbwADcHAAA3CvAANwsQADcLMAA3C1AANwuAADcLkAA3C6AANwuwADcLwAA3C+AANwwAADcMEAA3DCAANwxAADcMUAA3EEAANxBgADcQgAA3EKAANxDQADcQ4AA3EPAANxEAADcREAA3ETAANxFQADcRYAA3EXAANxGQADcRoAA3EjAANxJAADcSYAA3FpAANxjQADcbEAA3HUAANx+wADchsAA3JCAANyaQADcokAA3KtAANy0QADctMAA3LWAANy2AADctoAA3LcAANy3wADcuIAA3LkAANy5gADcukAA3LrAANy7QADcvAAA3LzAANy9AADcvkAA3MGAANzCQADcwsAA3MOAANzEQADcxMAA3M4AANzXAADc4MAA3OnAANzqgADc6wAA3OuAANzsAADc7IAA3O0AANztQADc7gAA3PFAANz2AADc9oAA3PcAANz3gADc+AAA3PiAANz5AADc+YAA3PoAANz6gADc/0AA3QAAAN0AwADdAYAA3QJAAN0DAADdA8AA3QSAAN0FQADdBgAA3QaAAN0WQADdFsAA3ReAAN0YAADdGMAA3RkAAN0ZQADdGYAA3RnAAN0aQADdGsAA3RsAAN0bQADdG8AA3RwAAN0eQADdHoAA3R8AAN0uwADdL0AA3S/AAN0wQADdMQAA3TFAAN0xgADdMcAA3TIAAN0ygADdMwAA3TNAAN0zgADdNAAA3TRAAN1EAADdRIAA3UVAAN1FwADdRoAA3UbAAN1HAADdR0AA3UeAAN1IAADdSIAA3UjAAN1JAADdSYAA3UnAAN1MAADdTEAA3UzAAN1cgADdXQAA3V2AAN1eAADdXsAA3V8AAN1fQADdX4AA3V/AAN1gQADdYMAA3WEAAN1hQADdYcAA3WIAAN1xwADdckAA3XMAAN1zgADddEAA3XSAAN10wADddQAA3XVAAN11wADddkAA3XaAAN12wADdd0AA3XeAAN15wADdegAA3XqAAN2KQADdisAA3YtAAN2LwADdjIAA3YzAAN2NAADdjUAA3Y2AAN2OAADdjoAA3Y7AAN2PAADdj4AA3Y/AAN2fgADdoAAA3aDAAN2hQADdogAA3aJAAN2igADdosAA3aMAAN2jgADdpAAA3aRAAN2kgADdpQAA3aVAAN2ogADdqMAA3akAAN2pgADduUAA3bnAAN26QADdusAA3buAAN27wADdvAAA3bxAAN28gADdvQAA3b2AAN29wADdvgAA3b6AAN2+wADdzoAA3c8AAN3PwADd0EAA3dEAAN3RQADd0YAA3dHAAN3SAADd0oAA3dMAAN3TQADd04AA3dQAAN3UQADd1wAA3dpAAN3cgADd3QAA3d2AAN3eQADd3wAA3eFAAN3iAADd4sAA3eOAAN3kQADd5MAA3ebAAN3owADd+4AA3gRAAN4MQADeFEAA3hTAAN4VQADeFcAA3hZAAN4XAADeF0AA3heAAN4YQADeGIAA3hkAAN4ZQADeGcAA3hpAAN4agADeGsAA3huAAN4bwADeHQAA3iBAAN4hgADeIgAA3iKAAN4jwADeJIAA3iVAAN4lwADeLwAA3jgAAN5BwADeSsAA3kuAAN5MAADeTIAA3k0AAN5NgADeTgAA3k5AAN5PAADeUkAA3laAAN5XAADeV4AA3lgAAN5YgADeWQAA3lmAAN5aAADeWoAA3l7AAN5fgADeYEAA3mEAAN5hwADeYoAA3mNAAN5kAADeZMAA3mVAAN51AADedYAA3nYAAN52gADed0AA3neAAN53wADeeAAA3nhAAN54wADeeUAA3nmAAN55wADeekAA3nqAAN6KQADeisAA3otAAN6LwADejIAA3ozAAN6NAADejUAA3o2AAN6OAADejoAA3o7AAN6PAADej4AA3o/AAN6fgADeoAAA3qDAAN6hQADeogAA3qJAAN6igADeosAA3qMAAN6jgADepAAA3qRAAN6kgADepQAA3qVAAN6ogADeqMAA3qkAAN6pgADeuUAA3rnAAN66QADeusAA3ruAAN67wADevAAA3rxAAN68gADevQAA3r2AAN69wADevgAA3r6AAN6+wADezoAA3s8AAN7PgADe0AAA3tDAAN7RAADe0UAA3tGAAN7RwADe0kAA3tLAAN7TAADe00AA3tPAAN7UAADe48AA3uRAAN7kwADe5UAA3uYAAN7mQADe5oAA3ubAAN7nAADe54AA3ugAAN7oQADe6IAA3ukAAN7pQADe+QAA3vmAAN76AADe+oAA3vtAAN77gADe+8AA3vwAAN78QADe/MAA3v1AAN79gADe/cAA3v5AAN7+gADfDkAA3w7AAN8PQADfD8AA3xCAAN8QwADfEQAA3xFAAN8RgADfEgAA3xKAAN8SwADfEwAA3xOAAN8TwADfHQAA3yYAAN8vwADfOMAA3zmAAN86AADfOoAA3zsAAN87gADfPAAA3zxAAN89AADfQEAA30QAAN9EgADfRQAA30WAAN9GAADfRoAA30cAAN9HgADfS0AA30wAAN9MwADfTYAA305AAN9PAADfT8AA31CAAN9RAADfYMAA32FAAN9hwADfYkAA32MAAN9jQADfY4AA32PAAN9kAADfZIAA32UAAN9lQADfZYAA32YAAN9mQADfdgAA33aAAN93AADfd4AA33hAAN94gADfeMAA33kAAN95QADfecAA33pAAN96gADfesAA33tAAN97gADfi0AA34vAAN+MQADfjMAA342AAN+NwADfjgAA345AAN+OgADfjwAA34+AAN+PwADfkAAA35CAAN+QwADfoIAA36EAAN+hgADfogAA36LAAN+jAADfo0AA36OAAN+jwADfpEAA36TAAN+lAADfpUAA36XAAN+mAADftcAA37ZAAN+2wADft0AA37gAAN+4QADfuIAA37jAAN+5AADfuYAA37oAAN+6QADfuoAA37sAAN+7QADfywAA38uAAN/MAADfzIAA381AAN/NgADfzcAA384AAN/OQADfzsAA389AAN/PgADfz8AA39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QAAOK0gADitQAA4rXAAOK2AADitkAA4raAAOK2wADit0AA4rfAAOK4AADiuEAA4rjAAOK5AADiyMAA4slAAOLJwADiykAA4ssAAOLLQADiy4AA4svAAOLMAADizIAA4s0AAOLNQADizYAA4s4AAOLOQADi3gAA4t6AAOLfAADi34AA4uBAAOLggADi4MAA4uEAAOLhQADi4cAA4uJAAOLigADi4sAA4uNAAOLjgADi80AA4vPAAOL0QADi9MAA4vWAAOL1wADi9gAA4vZAAOL2gADi9wAA4veAAOL3wADi+AAA4viAAOL4wADjCIAA4wkAAOMJgADjCgAA4wrAAOMLAADjC0AA4wuAAOMLwADjDEAA4wzAAOMNAADjDUAA4w3AAOMOAADjF0AA4yBAAOMqAADjMwAA4zPAAOM0QADjNMAA4zVAAOM1wADjNkAA4zaAAOM3QADjOoAA4z5AAOM+wADjP0AA4z/AAONAQADjQMAA40FAAONBwADjRYAA40ZAAONHAADjR8AA40iAAONJQADjSgAA40rAAONLQADjWwAA41uAAONcAADjXIAA411AAONdgADjXcAA414AAONeQADjXsAA419AAONfgADjX8AA42BAAONggADjcEAA43DAAONxQADjccAA43KAAONywADjcwAA43NAAONzgADjdAAA43SAAON0wADjdQAA43WAAON1wADjhYAA44YAAOOGgADjhwAA44fAAOOIAADjiEAA44iAAOOIwADjiUAA44nAAOOKAADjikAA44rAAOOLAADjmsAA45tAAOObwADjnEAA450AAOOdQADjnYAA453AAOOeAADjnoAA458AAOOfQADjn4AA46AAAOOgQADjsAAA47CAAOOxAADjsYAA47JAAOOygADjssAA47MAAOOzQADjs8AA47RAAOO0gADjtMAA47VAAOO1gADjxUAA48XAAOPGQADjxsAA48eAAOPHwADjyAAA48hAAOPIgADjyQAA48mAAOPJwADjygAA48qAAOPKwADj2oAA49sAAOPbgADj3AAA49zAAOPdAADj3UAA492AAOPdwADj3kAA497AAOPfAADj30AA49/AAOPgAADj8sAA4/uAAOQDgADkC4AA5AwAAOQMgADkDQAA5A2AAOQOQADkDoAA5A7AAOQPgADkD8AA5BBAAOQQgADkEQAA5BHAAOQSAADkEkAA5BMAAOQTQADkFIAA5BfAAOQZAADkGYAA5BoAAOQbQADkHAAA5BzAAOQdQADkJoAA5C+AAOQ5QADkQkAA5EMAAORDgADkRAAA5ESAAORFAADkRYAA5EXAAORGgADkScAA5E4AAOROgADkTwAA5E+AAORQAADkUIAA5FEAAORRgADkUgAA5FZAAORXAADkV8AA5FiAAORZQADkWgAA5FrAAORbgADkXEAA5FzAAORsgADkbQAA5G2AAORuAADkbsAA5G8AAORvQADkb4AA5G/AAORwQADkcMAA5HEAAORxQADkccAA5HIAAOSBwADkgkAA5ILAAOSDQADkhAAA5IRAAOSEgADkhMAA5IUAAOSFgADkhgAA5IZAAOSGgADkhwAA5IdAAOSXAADkl4AA5JhAAOSYwADkmYAA5JnAAOSaAADkmkAA5JqAAOSbAADkm4AA5JvAAOScAADknIAA5JzAAOSgAADkoEAA5KCAAOShAADksMAA5LFAAOSxwADkskAA5LMAAOSzQADks4AA5LPAAOS0AADktIAA5LUAAOS1QADktYAA5LYAAOS2QADkxgAA5MaAAOTHAADkx4AA5MhAAOTIgADkyMAA5MkAAOTJQADkycAA5MpAAOTKgADkysAA5MtAAOTLgADk20AA5NvAAOTcQADk3MAA5N2AAOTdwADk3gAA5N5AAOTegADk3wAA5N+AAOTfwADk4AAA5OCAAOTgwADk8IAA5PEAAOTxgADk8gAA5PLAAOTzAADk80AA5POAAOTzwADk9EAA5PTAAOT1AADk9UAA5PXAAOT2AADlBcAA5QZAAOUGwADlB0AA5QgAAOUIQADlCIAA5QjAAOUJAADlCYAA5QoAAOUKQADlCoAA5QsAAOULQADlFIAA5R2AAOUnQADlMEAA5TEAAOUxgADlMgAA5TKAAOUzAADlM4AA5TPAAOU0gADlN8AA5TuAAOU8AADlPIAA5T0AAOU9gADlPgAA5T6AAOU/AADlQsAA5UOAAOVEQADlRQAA5UXAAOVGgADlR0AA5UgAAOVIgADlWEAA5VjAAOVZQADlWcAA5VqAAOVawADlWwAA5VtAAOVbgADlXAAA5VyAAOVcwADlXQAA5V2AAOVdwADlbYAA5W4AAOVugADlbwAA5W/AAOVwAADlcEAA5XCAAOVwwADlcUAA5XHAAOVyAADlckAA5XLAAOVzAADlgsAA5YNAAOWDwADlhEAA5YUAAOWFQADlhYAA5YXAAOWGAADlhoAA5YcAAOWHQADlh4AA5YgAAOWIQADlmAAA5ZiAAOWZAADlmYAA5ZpAAOWagADlmsAA5ZsAAOWbQADlm8AA5ZxAAOWcgADlnMAA5Z1AAOWdgADlrUAA5a3AAOWuQADlrsAA5a+AAOWvwADlsAAA5bBAAOWwgADlsQAA5bGAAOWxwADlsgAA5bKAAOWywADlwoAA5cMAAOXDgADlxAAA5cTAAOXFAADlxUAA5cWAAOXFwADlxkAA5cbAAOXHAADlx0AA5cfAAOXIAADl18AA5dhAAOXYwADl2UAA5doAAOXaQADl2oAA5drAAOXbAADl24AA5dwAAOXcQADl3IAA5d0AAOXdQADl34AA5d/AAOXgQADl8QAA5foAAOYDAADmC8AA5hWAAOYdgADmJ0AA5jEAAOY5AADmQgAA5ksAAOZLgADmTEAA5kzAAOZNQADmTcAA5k6AAOZPQADmT8AA5lBAAOZRAADmUYAA5lIAAOZSwADmU4AA5lPAAOZVAADmWEAA5lkAAOZZgADmWkAA5lsAAOZbgADmZMAA5m3AAOZ3gADmgIAA5oFAAOaBwADmgkAA5oLAAOaDQADmg8AA5oQAAOaEwADmiAAA5ozAAOaNQADmjcAA5o5AAOaOwADmj0AA5o/AAOaQQADmkMAA5pFAAOaWAADmlsAA5peAAOaYQADmmQAA5pnAAOaagADmm0AA5pwAAOacwADmnUAA5q0AAOatgADmrkAA5q7AAOavgADmr8AA5rAAAOawQADmsIAA5rEAAOaxgADmscAA5rIAAOaygADmssAA5rUAAOa1QADmtcAA5sWAAObGAADmxoAA5scAAObHwADmyAAA5shAAObIgADmyMAA5slAAObJwADmygAA5spAAObKwADmywAA5trAAObbQADm3AAA5tyAAObdQADm3YAA5t3AAObeAADm3kAA5t7AAObfQADm34AA5t/AAObgQADm4IAA5uLAAObjAADm44AA5vNAAObzwADm9EAA5vTAAOb1gADm9cAA5vYAAOb2QADm9oAA5vcAAOb3gADm98AA5vgAAOb4gADm+MAA5wiAAOcJAADnCcAA5wpAAOcLAADnC0AA5wuAAOcLwADnDAAA5wyAAOcNAADnDUAA5w2AAOcOAADnDkAA5xCAAOcQwADnEUAA5yEAAOchgADnIgAA5yKAAOcjQADnI4AA5yPAAOckAADnJEAA5yTAAOclQADnJYAA5yXAAOcmQADnJoAA5zZAAOc2wADnN4AA5zgAAOc4wADnOQAA5zlAAOc5gADnOcAA5zpAAOc6wADnOwAA5ztAAOc7wADnPAAA5z9AAOc/gADnP8AA50BAAOdQAADnUIAA51EAAOdRgADnUkAA51KAAOdSwADnUwAA51NAAOdTwADnVEAA51SAAOdUwADnVUAA51WAAOdlQADnZcAA52aAAOdnAADnZ8AA52gAAOdoQADnaIAA52jAAOdpQADnacAA52oAAOdqQADnasAA52sAAOdxwADndQAA53rAAOd7gADnfEAA530AAOd9wADnfoAA539AAOeAAADngMAA54GAAOeCQADngwAA54jAAOeJgADnikAA54sAAOeLwADnjIAA541AAOeOAADnjsAA54+AAOeQQADnkQAA55GAAOeTQADnlQAA55dAAOeYgADnm0AA555AAOeggADnoYAA56QAAOemAADnuMAA58GAAOfJgADn0YAA59IAAOfSgADn0wAA59OAAOfUQADn1IAA59TAAOfVgADn1cAA59ZAAOfWgADn1wAA59fAAOfYAADn2EAA59kAAOfZQADn2oAA593AAOffAADn34AA5+AAAOfhQADn4gAA5+LAAOfjQADn7IAA5/WAAOf/QADoCEAA6AkAAOgJgADoCgAA6AqAAOgLAADoC4AA6AvAAOgMgADoD8AA6BQAAOgUgADoFQAA6BWAAOgWAADoFoAA6BcAAOgXgADoGAAA6BxAAOgdAADoHcAA6B6AAOgfQADoIAAA6CDAAOghgADoIkAA6CLAAOgygADoMwAA6DOAAOg0AADoNMAA6DUAAOg1QADoNYAA6DXAAOg2QADoNsAA6DcAAOg3QADoN8AA6DgAAOhHwADoSEAA6EjAAOhJQADoSgAA6EpAAOhKgADoSsAA6EsAAOhLgADoTAAA6ExAAOhMgADoTQAA6E1AAOhdAADoXYAA6F5AAOhewADoX4AA6F/AAOhgAADoYEAA6GCAAOhhAADoYYAA6GHAAOhiAADoYoAA6GLAAOhmAADoZkAA6GaAAOhnAADodsAA6HdAAOh3wADoeEAA6HkAAOh5QADoeYAA6HnAAOh6AADoeoAA6HsAAOh7QADoe4AA6HwAAOh8QADojAAA6IyAAOiNAADojYAA6I5AAOiOgADojsAA6I8AAOiPQADoj8AA6JBAAOiQgADokMAA6JFAAOiRgADooUAA6KHAAOiiQADoosAA6KOAAOijwADopAAA6KRAAOikgADopQAA6KWAAOilwADopgAA6KaAAOimwADotoAA6LcAAOi3gADouAAA6LjAAOi5AADouUAA6LmAAOi5wADoukAA6LrAAOi7AADou0AA6LvAAOi8AADoy8AA6MxAAOjMwADozUAA6M4AAOjOQADozoAA6M7AAOjPAADoz4AA6NAAAOjQQADo0IAA6NEAAOjRQADo2oAA6OOAAOjtQADo9kAA6PcAAOj3gADo+AAA6PiAAOj5AADo+YAA6PnAAOj6gADo/cAA6QGAAOkCAADpAoAA6QMAAOkDgADpBAAA6QSAAOkFAADpCMAA6QmAAOkKQADpCwAA6QvAAOkMgADpDUAA6Q4AAOkOgADpHkAA6R7AAOkfQADpH8AA6SCAAOkgwADpIQAA6SFAAOkhgADpIgAA6SKAAOkiwADpIwAA6SOAAOkjwADpM4AA6TQAAOk0gADpNQAA6TXAAOk2AADpNkAA6TaAAOk2wADpN0AA6TfAAOk4AADpOEAA6TjAAOk5AADpSMAA6UlAAOlJwADpSkAA6UsAAOlLQADpS4AA6UvAAOlMAADpTIAA6U0AAOlNQADpTYAA6U4AAOlOQADpXgAA6V6AAOlfAADpX4AA6WBAAOlggADpYMAA6WEAAOlhQADpYcAA6WJAAOligADpYsAA6WNAAOljgADpc0AA6XPAAOl0QADpdMAA6XWAAOl1wADpdgAA6XZAAOl2gADpdwAA6XeAAOl3wADpeAAA6XiAAOl4wADpiIAA6YkAAOmJgADpigAA6YrAAOmLAADpi0AA6YuAAOmLwADpjEAA6YzAAOmNAADpjUAA6Y3AAOmOAADpncAA6Z5AAOmewADpn0AA6aAAAOmgQADpoIAA6aDAAOmhAADpoYAA6aIAAOmiQADpooAA6aMAAOmjQADptgAA6b7AAOnGwADpzsAA6c9AAOnPwADp0EAA6dDAAOnRgADp0cAA6dIAAOnSwADp0wAA6dOAAOnTwADp1EAA6dUAAOnVQADp1YAA6dZAAOnWgADp18AA6dsAAOncQADp3MAA6d1AAOnegADp30AA6eAAAOnggADp6cAA6fLAAOn8gADqBYAA6gZAAOoGwADqB0AA6gfAAOoIQADqCMAA6gkAAOoJwADqDQAA6hFAAOoRwADqEkAA6hLAAOoTQADqE8AA6hRAAOoUwADqFUAA6hmAAOoaQADqGwAA6hvAAOocgADqHUAA6h4AAOoewADqH4AA6iAAAOovwADqMEAA6jDAAOoxQADqMgAA6jJAAOoygADqMsAA6jMAAOozgADqNAAA6jRAAOo0gADqNQAA6jVAAOpFAADqRYAA6kYAAOpGgADqR0AA6keAAOpHwADqSAAA6khAAOpIwADqSUAA6kmAAOpJwADqSkAA6kqAAOpaQADqWsAA6luAAOpcAADqXMAA6l0AAOpdQADqXYAA6l3AAOpeQADqXsAA6l8AAOpfQADqX8AA6mAAAOpjQADqY4AA6mPAAOpkQADqdAAA6nSAAOp1AADqdYAA6nZAAOp2gADqdsAA6ncAAOp3QADqd8AA6nhAAOp4gADqeMAA6nlAAOp5gADqiUAA6onAAOqKQADqisAA6ouAAOqLwADqjAAA6oxAAOqMgADqjQAA6o2AAOqNwADqjgAA6o6AAOqOwADqnoAA6p8AAOqfgADqoAAA6qDAAOqhAADqoUAA6qGAAOqhwADqokAA6qLAAOqjAADqo0AA6qPAAOqkAADqs8AA6rRAAOq0wADqtUAA6rYAAOq2QADqtoAA6rbAAOq3AADqt4AA6rgAAOq4QADquIAA6rkAAOq5QADqyQAA6smAAOrKAADqyoAA6stAAOrLgADqy8AA6swAAOrMQADqzMAA6s1AAOrNgADqzcAA6s5AAOrOgADq18AA6uDAAOrqgADq84AA6vRAAOr0wADq9UAA6vXAAOr2QADq9sAA6vcAAOr3wADq+wAA6v7AAOr/QADq/8AA6wBAAOsAwADrAUAA6wHAAOsCQADrBgAA6wbAAOsHgADrCEAA6wkAAOsJwADrCoAA6wtAAOsLwADrG4AA6xwAAOscgADrHQAA6x3AAOseAADrHkAA6x6AAOsewADrH0AA6x/AAOsgAADrIEAA6yDAAOshAADrMMAA6zFAAOsxwADrMkAA6zMAAOszQADrM4AA6zPAAOs0AADrNIAA6zUAAOs1QADrNYAA6zYAAOs2QADrRgAA60aAAOtHAADrR4AA60hAAOtIgADrSMAA60kAAOtJQADrScAA60pAAOtKgADrSsAA60tAAOtLgADrW0AA61vAAOtcQADrXMAA612AAOtdwADrXgAA615AAOtegADrXwAA61+AAOtfwADrYAAA62CAAOtgwADrcIAA63EAAOtxgADrcgAA63LAAOtzAADrc0AA63OAAOtzwADrdEAA63TAAOt1AADrdUAA63XAAOt2AADrhcAA64ZAAOuGwADrh0AA64gAAOuIQADriIAA64jAAOuJAADriYAA64oAAOuKQADrioAA64sAAOuLQADrmwAA65uAAOucAADrnIAA651AAOudgADrncAA654AAOueQADrnsAA659AAOufgADrn8AA66BAAOuggADrs0AA67wAAOvEAADrzAAA68yAAOvNAADrzYAA684AAOvOwADrzwAA689AAOvQAADr0EAA69DAAOvRAADr0YAA69JAAOvSgADr0sAA69OAAOvTwADr1QAA69hAAOvZgADr2gAA69qAAOvbwADr3IAA691AAOvdwADr5wAA6/AAAOv5wADsAsAA7AOAAOwEAADsBIAA7AUAAOwFgADsBgAA7AZAAOwHAADsCkAA7A6AAOwPAADsD4AA7BAAAOwQgADsEQAA7BGAAOwSAADsEoAA7BbAAOwXgADsGEAA7BkAAOwZwADsGoAA7BtAAOwcAADsHMAA7B1AAOwtAADsLYAA7C4AAOwugADsL0AA7C+AAOwvwADsMAAA7DBAAOwwwADsMUAA7DGAAOwxwADsMkAA7DKAAOxCQADsQsAA7ENAAOxDwADsRIAA7ETAAOxFAADsRUAA7EWAAOxGAADsRoAA7EbAAOxHAADsR4AA7EfAAOxXgADsWAAA7FjAAOxZQADsWgAA7FpAAOxagADsWsAA7FsAAOxbgADsXAAA7FxAAOxcgADsXQAA7F1AAOxggADsYMAA7GEAAOxhgADscUAA7HHAAOxyQADscsAA7HOAAOxzwADsdAAA7HRAAOx0gADsdQAA7HWAAOx1wADsdgAA7HaAAOx2wADshoAA7IcAAOyHgADsiAAA7IjAAOyJAADsiUAA7ImAAOyJwADsikAA7IrAAOyLAADsi0AA7IvAAOyMAADsm8AA7JxAAOycwADsnUAA7J4AAOyeQADsnoAA7J7AAOyfAADsn4AA7KAAAOygQADsoIAA7KEAAOyhQADssQAA7LGAAOyyAADssoAA7LNAAOyzgADss8AA7LQAAOy0QADstMAA7LVAAOy1gADstcAA7LZAAOy2gADsxkAA7MbAAOzHQADsx8AA7MiAAOzIwADsyQAA7MlAAOzJgADsygAA7MqAAOzKwADsywAA7MuAAOzLwADs1QAA7N4AAOznwADs8MAA7PGAAOzyAADs8oAA7PMAAOzzgADs9AAA7PRAAOz1AADs+EAA7PwAAOz8gADs/QAA7P2AAOz+AADs/oAA7P8AAOz/gADtA0AA7QQAAO0EwADtBYAA7QZAAO0HAADtB8AA7QiAAO0JAADtGMAA7RlAAO0ZwADtGkAA7RsAAO0bQADtG4AA7RvAAO0cAADtHIAA7R0AAO0dQADtHYAA7R4AAO0eQADtLgAA7S6AAO0vAADtL4AA7TBAAO0wgADtMMAA7TEAAO0xQADtMcAA7TJAAO0ygADtMsAA7TNAAO0zgADtQ0AA7UPAAO1EQADtRMAA7UWAAO1FwADtRgAA7UZAAO1GgADtRwAA7UeAAO1HwADtSAAA7UiAAO1IwADtWIAA7VkAAO1ZgADtWgAA7VrAAO1bAADtW0AA7VuAAO1bwADtXEAA7VzAAO1dAADtXUAA7V3AAO1eAADtbcAA7W5AAO1uwADtb0AA7XAAAO1wQADtcIAA7XDAAO1xAADtcYAA7XIAAO1yQADtcoAA7XMAAO1zQADtgwAA7YOAAO2EAADthIAA7YVAAO2FgADthcAA7YYAAO2GQADthsAA7YdAAO2HgADth8AA7YhAAO2IgADtmEAA7ZjAAO2ZQADtmcAA7ZqAAO2awADtmwAA7ZtAAO2bgADtnAAA7ZyAAO2cwADtnQAA7Z2AAO2dwADtsIAA7blAAO3BQADtyUAA7cnAAO3KQADtysAA7ctAAO3MAADtzEAA7cyAAO3NQADtzYAA7c4AAO3OQADtzsAA7c+AAO3PwADt0AAA7dDAAO3RAADt0kAA7dWAAO3WwADt10AA7dfAAO3ZAADt2cAA7dqAAO3bAADt5EAA7e1AAO33AADuAAAA7gDAAO4BQADuAcAA7gJAAO4CwADuA0AA7gOAAO4EQADuB4AA7gvAAO4MQADuDMAA7g1AAO4NwADuDkAA7g7AAO4PQADuD8AA7hQAAO4UwADuFYAA7hZAAO4XAADuF8AA7hiAAO4ZQADuGgAA7hqAAO4qQADuKsAA7itAAO4rwADuLIAA7izAAO4tAADuLUAA7i2AAO4uAADuLoAA7i7AAO4vAADuL4AA7i/AAO4/gADuQAAA7kCAAO5BAADuQcAA7kIAAO5CQADuQoAA7kLAAO5DQADuQ8AA7kQAAO5EQADuRMAA7kUAAO5UwADuVUAA7lYAAO5WgADuV0AA7leAAO5XwADuWAAA7lhAAO5YwADuWUAA7lmAAO5ZwADuWkAA7lqAAO5dwADuXgAA7l5AAO5ewADuboAA7m8AAO5vgADucAAA7nDAAO5xAADucUAA7nGAAO5xwADuckAA7nLAAO5zAADuc0AA7nPAAO50AADug8AA7oRAAO6EwADuhUAA7oYAAO6GQADuhoAA7obAAO6HAADuh4AA7ogAAO6IQADuiIAA7okAAO6JQADumQAA7pmAAO6aAADumoAA7ptAAO6bgADum8AA7pwAAO6cQADunMAA7p1AAO6dgADuncAA7p5AAO6egADurkAA7q7AAO6vQADur8AA7rCAAO6wwADusQAA7rFAAO6xgADusgAA7rKAAO6ywADuswAA7rOAAO6zwADuw4AA7sQAAO7EgADuxQAA7sXAAO7GAADuxkAA7saAAO7GwADux0AA7sfAAO7IAADuyEAA7sjAAO7JAADu0kAA7ttAAO7lAADu7gAA7u7AAO7vQADu78AA7vBAAO7wwADu8UAA7vGAAO7yQADu9YAA7vlAAO75wADu+kAA7vrAAO77QADu+8AA7vxAAO78wADvAIAA7wFAAO8CAADvAsAA7wOAAO8EQADvBQAA7wXAAO8GQADvFgAA7xaAAO8XAADvF4AA7xhAAO8YgADvGMAA7xkAAO8ZQADvGcAA7xpAAO8agADvGsAA7xtAAO8bgADvK0AA7yvAAO8sQADvLMAA7y2AAO8twADvLgAA7y5AAO8ugADvLwAA7y+AAO8vwADvMAAA7zCAAO8wwADvQIAA70EAAO9BgADvQgAA70LAAO9DAADvQ0AA70OAAO9DwADvREAA70TAAO9FAADvRUAA70XAAO9GAADvVcAA71ZAAO9XAADvV4AA71hAAO9YgADvWMAA71kAAO9ZQADvWcAA71pAAO9agADvWsAA71tAAO9bgADva0AA72vAAO9sQADvbMAA722AAO9twADvbgAA725AAO9ugADvbwAA72+AAO9vwADvcAAA73CAAO9wwADvgIAA74EAAO+BgADvggAA74LAAO+DAADvg0AA74OAAO+DwADvhEAA74TAAO+FAADvhUAA74XAAO+GAADvlcAA75ZAAO+WwADvl0AA75gAAO+YQADvmIAA75jAAO+ZAADvmYAA75oAAO+aQADvmoAA75sAAO+bQADvrgAA77bAAO++wADvxsAA78dAAO/HwADvyEAA78jAAO/JgADvycAA78oAAO/KwADvywAA78uAAO/LwADvzEAA780AAO/NQADvzYAA785AAO/OgADvz8AA79MAAO/UQADv1MAA79VAAO/WgADv10AA79gAAO/YgADv4cAA7+rAAO/0gADv/YAA7/5AAO/+wADv/0AA7//AAPAAQADwAMAA8AEAAPABwADwBQAA8AlAAPAJwADwCkAA8ArAAPALQADwC8AA8AxAAPAMwADwDUAA8BGAAPASQADwEwAA8BPAAPAUgADwFUAA8BYAAPAWwADwF4AA8BgAAPAnwADwKEAA8CjAAPApQADwKgAA8CpAAPAqgADwKsAA8CsAAPArgADwLAAA8CxAAPAsgADwLQAA8C1AAPA9AADwPYAA8D4AAPA+gADwP0AA8D+AAPA/wADwQAAA8EBAAPBAwADwQUAA8EGAAPBBwADwQkAA8EKAAPBSQADwUsAA8FOAAPBUAADwVMAA8FUAAPBVQADwVYAA8FXAAPBWQADwVsAA8FcAAPBXQADwV8AA8FgAAPBbQADwW4AA8FvAAPBcQADwbAAA8GyAAPBtAADwbYAA8G5AAPBugADwbsAA8G8AAPBvQADwb8AA8HBAAPBwgADwcMAA8HFAAPBxgADwgUAA8IHAAPCCQADwgsAA8IOAAPCDwADwhAAA8IRAAPCEgADwhQAA8IWAAPCFwADwhgAA8IaAAPCGwADwloAA8JcAAPCXgADwmAAA8JjAAPCZAADwmUAA8JmAAPCZwADwmkAA8JrAAPCbAADwm0AA8JvAAPCcAADwq8AA8KxAAPCswADwrUAA8K4AAPCuQADwroAA8K7AAPCvAADwr4AA8LAAAPCwQADwsIAA8LEAAPCxQADwwQAA8MGAAPDCAADwwoAA8MNAAPDDgADww8AA8MQAAPDEQADwxMAA8MVAAPDFgADwxcAA8MZAAPDGgADwz8AA8NjAAPDigADw64AA8OxAAPDswADw7UAA8O3AAPDuQADw7sAA8O8AAPDvwADw8wAA8PbAAPD3QADw98AA8PhAAPD4wADw+UAA8PnAAPD6QADw/gAA8P7AAPD/gADxAEAA8QEAAPEBwADxAoAA8QNAAPEDwADxE4AA8RQAAPEUgADxFQAA8RXAAPEWAADxFkAA8RaAAPEWwADxF0AA8RfAAPEYAADxGEAA8RjAAPEZAADxKMAA8SlAAPEpwADxKkAA8SsAAPErQADxK4AA8SvAAPEsAADxLIAA8S0AAPEtQADxLYAA8S4AAPEuQADxPgAA8T6AAPE/AADxP4AA8UBAAPFAgADxQMAA8UEAAPFBQADxQcAA8UJAAPFCgADxQsAA8UNAAPFDgADxU0AA8VPAAPFUQADxVMAA8VWAAPFVwADxVgAA8VZAAPFWgADxVwAA8VeAAPFXwADxWAAA8ViAAPFYwADxaIAA8WkAAPFpgADxagAA8WrAAPFrAADxa0AA8WuAAPFrwADxbEAA8WzAAPFtAADxbUAA8W3AAPFuAADxfcAA8X5AAPF+wADxf0AA8YAAAPGAQADxgIAA8YDAAPGBAADxgYAA8YIAAPGCQADxgoAA8YMAAPGDQADxkwAA8ZOAAPGUAADxlIAA8ZVAAPGVgADxlcAA8ZYAAPGWQADxlsAA8ZdAAPGXgADxl8AA8ZhAAPGYgADxq0AA8bQAAPG8AADxxAAA8cSAAPHFAADxxYAA8cYAAPHGwADxxwAA8cdAAPHIAADxyEAA8cjAAPHJAADxyYAA8cpAAPHKgADxysAA8cuAAPHLwADxzgAA8dFAAPHSgADx0wAA8dOAAPHUwADx1YAA8dZAAPHWwADx4AAA8ekAAPHywADx+8AA8fyAAPH9AADx/YAA8f4AAPH+gADx/wAA8f9AAPIAAADyA0AA8geAAPIIAADyCIAA8gkAAPIJgADyCgAA8gqAAPILAADyC4AA8g/AAPIQgADyEUAA8hIAAPISwADyE4AA8hRAAPIVAADyFcAA8hZAAPImAADyJoAA8icAAPIngADyKEAA8iiAAPIowADyKQAA8ilAAPIpwADyKkAA8iqAAPIqwADyK0AA8iuAAPI7QADyO8AA8jxAAPI8wADyPYAA8j3AAPI+AADyPkAA8j6AAPI/AADyP4AA8j/AAPJAAADyQIAA8kDAAPJQgADyUQAA8lHAAPJSQADyUwAA8lNAAPJTgADyU8AA8lQAAPJUgADyVQAA8lVAAPJVgADyVgAA8lZAAPJZgADyWcAA8loAAPJagADyakAA8mrAAPJrQADya8AA8myAAPJswADybQAA8m1AAPJtgADybgAA8m6AAPJuwADybwAA8m+AAPJvwADyf4AA8oAAAPKAgADygQAA8oHAAPKCAADygkAA8oKAAPKCwADyg0AA8oPAAPKEAADyhEAA8oTAAPKFAADylMAA8pVAAPKVwADylkAA8pcAAPKXQADyl4AA8pfAAPKYAADymIAA8pkAAPKZQADymYAA8poAAPKaQADyqgAA8qqAAPKrAADyq4AA8qxAAPKsgADyrMAA8q0AAPKtQADyrcAA8q5AAPKugADyrsAA8q9AAPKvgADyv0AA8r/AAPLAQADywMAA8sGAAPLBwADywgAA8sJAAPLCgADywwAA8sOAAPLDwADyxAAA8sSAAPLEwADyzgAA8tcAAPLgwADy6cAA8uqAAPLrAADy64AA8uwAAPLsgADy7QAA8u1AAPLuAADy8UAA8vUAAPL1gADy9gAA8vaAAPL3AADy94AA8vgAAPL4gADy/EAA8v0AAPL9wADy/oAA8v9AAPMAAADzAMAA8wGAAPMCAADzEcAA8xJAAPMSwADzE0AA8xQAAPMUQADzFIAA8xTAAPMVAADzFYAA8xYAAPMWQADzFoAA8xcAAPMXQADzJwAA8yeAAPMoAADzKIAA8ylAAPMpgADzKcAA8yoAAPMqQADzKsAA8ytAAPMrgADzK8AA8yxAAPMsgADzPEAA8zzAAPM9QADzPcAA8z6AAPM+wADzPwAA8z9AAPM/gADzQAAA80CAAPNAwADzQQAA80GAAPNBwADzUYAA81IAAPNSwADzU0AA81QAAPNUQADzVIAA81TAAPNVAADzVYAA81YAAPNWQADzVoAA81cAAPNXQADzZwAA82eAAPNoAADzaIAA82lAAPNpgADzacAA82oAAPNqQADzasAA82tAAPNrgADza8AA82xAAPNsgADzfEAA83zAAPN9QADzfcAA836AAPN+wADzfwAA839AAPN/gADzgAAA84CAAPOAwADzgQAA84GAAPOBwADzkYAA85IAAPOSgADzkwAA85PAAPOUAADzlEAA85SAAPOUwADzlUAA85XAAPOWAADzlkAA85bAAPOXAADzqcAA87KAAPO6gADzwoAA88MAAPPDgADzxAAA88SAAPPFQADzxYAA88XAAPPGgADzxsAA88dAAPPHgADzyAAA88jAAPPJAADzyUAA88oAAPPKQADzy4AA887AAPPQAADz0IAA89EAAPPSQADz0wAA89PAAPPUQADz3YAA8+aAAPPwQADz+UAA8/oAAPP6gADz+wAA8/uAAPP8AADz/IAA8/zAAPP9gAD0AMAA9AUAAPQFgAD0BgAA9AaAAPQHAAD0B4AA9AgAAPQIgAD0CQAA9A1AAPQOAAD0DsAA9A+AAPQQQAD0EQAA9BHAAPQSgAD0E0AA9BPAAPQjgAD0JAAA9CSAAPQlAAD0JcAA9CYAAPQmQAD0JoAA9CbAAPQnQAD0J8AA9CgAAPQoQAD0KMAA9CkAAPQ4wAD0OUAA9DnAAPQ6QAD0OwAA9DtAAPQ7gAD0O8AA9DwAAPQ8gAD0PQAA9D1AAPQ9gAD0PgAA9D5AAPROAAD0ToAA9E9AAPRPwAD0UIAA9FDAAPRRAAD0UUAA9FGAAPRSAAD0UoAA9FLAAPRTAAD0U4AA9FPAAPRXAAD0V0AA9FeAAPRYAAD0Z8AA9GhAAPRowAD0aUAA9GoAAPRqQAD0aoAA9GrAAPRrAAD0a4AA9GwAAPRsQAD0bIAA9G0AAPRtQAD0fQAA9H2AAPR+AAD0foAA9H9AAPR/gAD0f8AA9IAAAPSAQAD0gMAA9IFAAPSBgAD0gcAA9IJAAPSCgAD0kkAA9JLAAPSTQAD0k8AA9JSAAPSUwAD0lQAA9JVAAPSVgAD0lgAA9JaAAPSWwAD0lwAA9JeAAPSXwAD0p4AA9KgAAPSogAD0qQAA9KnAAPSqAAD0qkAA9KqAAPSqwAD0q0AA9KvAAPSsAAD0rEAA9KzAAPStAAD0vMAA9L1AAPS9wAD0vkAA9L8AAPS/QAD0v4AA9L/AAPTAAAD0wIAA9MEAAPTBQAD0wYAA9MIAAPTCQAD0y4AA9NSAAPTeQAD050AA9OgAAPTogAD06QAA9OmAAPTqAAD06oAA9OrAAPTrgAD07sAA9PKAAPTzAAD084AA9PQAAPT0gAD09QAA9PWAAPT2AAD0+cAA9PqAAPT7QAD0/AAA9PzAAPT9gAD0/kAA9P8AAPT/gAD1D0AA9Q/AAPUQQAD1EMAA9RGAAPURwAD1EgAA9RJAAPUSgAD1EwAA9ROAAPUTwAD1FAAA9RSAAPUUwAD1JIAA9SUAAPUlgAD1JgAA9SbAAPUnAAD1J0AA9SeAAPUnwAD1KEAA9SjAAPUpAAD1KUAA9SnAAPUqAAD1OcAA9TpAAPU6wAD1O0AA9TwAAPU8QAD1PIAA9TzAAPU9AAD1PYAA9T4AAPU+QAD1PoAA9T8AAPU/QAD1TwAA9U+AAPVQAAD1UIAA9VFAAPVRgAD1UcAA9VIAAPVSQAD1UsAA9VNAAPVTgAD1U8AA9VRAAPVUgAD1ZEAA9WTAAPVlQAD1ZcAA9WaAAPVmwAD1ZwAA9WdAAPVngAD1aAAA9WiAAPVowAD1aQAA9WmAAPVpwAD1eYAA9XoAAPV6gAD1ewAA9XvAAPV8AAD1fEAA9XyAAPV8wAD1fUAA9X3AAPV+AAD1fkAA9X7AAPV/AAD1jsAA9Y9AAPWPwAD1kEAA9ZEAAPWRQAD1kYAA9ZHAAPWSAAD1koAA9ZMAAPWTQAD1k4AA9ZQAAPWUQAD1pwAA9a/AAPW3wAD1v8AA9cBAAPXAwAD1wUAA9cHAAPXCgAD1wsAA9cMAAPXDwAD1xAAA9cSAAPXEwAD1xUAA9cYAAPXGQAD1xoAA9cdAAPXHgAD1yMAA9cwAAPXNQAD1zcAA9c5AAPXPgAD10EAA9dEAAPXRgAD12sAA9ePAAPXtgAD19oAA9fdAAPX3wAD1+EAA9fjAAPX5QAD1+cAA9foAAPX6wAD1/gAA9gJAAPYCwAD2A0AA9gPAAPYEQAD2BMAA9gVAAPYFwAD2BkAA9gqAAPYLQAD2DAAA9gzAAPYNgAD2DkAA9g8AAPYPwAD2EIAA9hEAAPYgwAD2IUAA9iHAAPYiQAD2IwAA9iNAAPYjgAD2I8AA9iQAAPYkgAD2JQAA9iVAAPYlgAD2JgAA9iZAAPY2AAD2NoAA9jcAAPY3gAD2OEAA9jiAAPY4wAD2OQAA9jlAAPY5wAD2OkAA9jqAAPY6wAD2O0AA9juAAPZLQAD2S8AA9kyAAPZNAAD2TcAA9k4AAPZOQAD2ToAA9k7AAPZPQAD2T8AA9lAAAPZQQAD2UMAA9lEAAPZUQAD2VIAA9lTAAPZVQAD2ZQAA9mWAAPZmAAD2ZoAA9mdAAPZngAD2Z8AA9mgAAPZoQAD2aMAA9mlAAPZpgAD2acAA9mpAAPZqgAD2ekAA9nrAAPZ7QAD2e8AA9nyAAPZ8wAD2fQAA9n1AAPZ9gAD2fgAA9n6AAPZ+wAD2fwAA9n+AAPZ/wAD2j4AA9pAAAPaQgAD2kQAA9pHAAPaSAAD2kkAA9pKAAPaSwAD2k0AA9pPAAPaUAAD2lEAA9pTAAPaVAAD2pMAA9qVAAPalwAD2pkAA9qcAAPanQAD2p4AA9qfAAPaoAAD2qIAA9qkAAPapQAD2qYAA9qoAAPaqQAD2ugAA9rqAAPa7AAD2u4AA9rxAAPa8gAD2vMAA9r0AAPa9QAD2vcAA9r5AAPa+gAD2vsAA9r9AAPa/gAD2yMAA9tHAAPbbgAD25IAA9uVAAPblwAD25kAA9ubAAPbnQAD258AA9ugAAPbowAD27AAA9u/AAPbwQAD28MAA9vFAAPbxwAD28kAA9vLAAPbzQAD29wAA9vfAAPb4gAD2+UAA9voAAPb6wAD2+4AA9vxAAPb8wAD3DIAA9w0AAPcNgAD3DgAA9w7AAPcPAAD3D0AA9w+AAPcPwAD3EEAA9xDAAPcRAAD3EUAA9xHAAPcSAAD3IcAA9yJAAPciwAD3I0AA9yQAAPckQAD3JIAA9yTAAPclAAD3JYAA9yYAAPcmQAD3JoAA9ycAAPcnQAD3NwAA9zeAAPc4AAD3OIAA9zlAAPc5gAD3OcAA9zoAAPc6QAD3OsAA9ztAAPc7gAD3O8AA9zxAAPc8gAD3TEAA90zAAPdNQAD3TcAA906AAPdOwAD3TwAA909AAPdPgAD3UAAA91CAAPdQwAD3UQAA91GAAPdRwAD3YYAA92IAAPdigAD3YwAA92PAAPdkAAD3ZEAA92SAAPdkwAD3ZUAA92XAAPdmAAD3ZkAA92bAAPdnAAD3dsAA93dAAPd3wAD3eEAA93kAAPd5QAD3eYAA93nAAPd6AAD3eoAA93sAAPd7QAD3e4AA93wAAPd8QAD3jAAA94yAAPeNAAD3jYAA945AAPeOgAD3jsAA948AAPePQAD3j8AA95BAAPeQgAD3kMAA95FAAPeRgAD3pEAA960AAPe1AAD3vQAA972AAPe+AAD3voAA978AAPe/wAD3wAAA98BAAPfBAAD3wUAA98HAAPfCAAD3woAA98NAAPfDgAD3w8AA98SAAPfEwAD3xgAA98lAAPfKgAD3ywAA98uAAPfMwAD3zYAA985AAPfOwAD32AAA9+EAAPfqwAD388AA9/SAAPf1AAD39YAA9/YAAPf2gAD39wAA9/dAAPf4AAD3+0AA9/+AAPgAAAD4AIAA+AEAAPgBgAD4AgAA+AKAAPgDAAD4A4AA+AfAAPgIgAD4CUAA+AoAAPgKwAD4C4AA+AxAAPgNAAD4DcAA+A5AAPgeAAD4HoAA+B8AAPgfgAD4IEAA+CCAAPggwAD4IQAA+CFAAPghwAD4IkAA+CKAAPgiwAD4I0AA+COAAPgzQAD4M8AA+DRAAPg0wAD4NYAA+DXAAPg2AAD4NkAA+DaAAPg3AAD4N4AA+DfAAPg4AAD4OIAA+DjAAPhIgAD4SQAA+EnAAPhKQAD4SwAA+EtAAPhLgAD4S8AA+EwAAPhMgAD4TQAA+E1AAPhNgAD4TgAA+E5AAPhRgAD4UcAA+FIAAPhSgAD4YkAA+GLAAPhjQAD4Y8AA+GSAAPhkwAD4ZQAA+GVAAPhlgAD4ZgAA+GaAAPhmwAD4ZwAA+GeAAPhnwAD4d4AA+HgAAPh4gAD4eQAA+HnAAPh6AAD4ekAA+HqAAPh6wAD4e0AA+HvAAPh8AAD4fEAA+HzAAPh9AAD4jMAA+I1AAPiNwAD4jkAA+I8AAPiPQAD4j4AA+I/AAPiQAAD4kIAA+JEAAPiRQAD4kYAA+JIAAPiSQAD4ogAA+KKAAPijAAD4o4AA+KRAAPikgAD4pMAA+KUAAPilQAD4pcAA+KZAAPimgAD4psAA+KdAAPingAD4t0AA+LfAAPi4QAD4uMAA+LmAAPi5wAD4ugAA+LpAAPi6gAD4uwAA+LuAAPi7wAD4vAAA+LyAAPi8wAD4xgAA+M8AAPjYwAD44cAA+OKAAPjjAAD444AA+OQAAPjkgAD45QAA+OVAAPjmAAD46UAA+O0AAPjtgAD47gAA+O6AAPjvAAD474AA+PAAAPjwgAD49EAA+PUAAPj1wAD49oAA+PdAAPj4AAD4+MAA+PmAAPj6AAD5CcAA+QpAAPkKwAD5C0AA+QwAAPkMQAD5DIAA+QzAAPkNAAD5DYAA+Q4AAPkOQAD5DoAA+Q8AAPkPQAD5HwAA+R+AAPkgAAD5IIAA+SFAAPkhgAD5IcAA+SIAAPkiQAD5IsAA+SNAAPkjgAD5I8AA+SRAAPkkgAD5NEAA+TTAAPk1QAD5NcAA+TaAAPk2wAD5NwAA+TdAAPk3gAD5OAAA+TiAAPk4wAD5OQAA+TmAAPk5wAD5SYAA+UoAAPlKgAD5SwAA+UvAAPlMAAD5TEAA+UyAAPlMwAD5TUAA+U3AAPlOAAD5TkAA+U7AAPlPAAD5XsAA+V9AAPlfwAD5YEAA+WEAAPlhQAD5YYAA+WHAAPliAAD5YoAA+WMAAPljQAD5Y4AA+WQAAPlkQAD5dAAA+XSAAPl1AAD5dYAA+XZAAPl2gAD5dsAA+XcAAPl3QAD5d8AA+XhAAPl4gAD5eMAA+XlAAPl5gAD5iUAA+YnAAPmKQAD5isAA+YuAAPmLwAD5jAAA+YxAAPmMgAD5jQAA+Y2AAPmNwAD5jgAA+Y6AAPmOwAD5oYAA+apAAPmyQAD5ukAA+brAAPm7QAD5u8AA+bxAAPm9AAD5vUAA+b2AAPm+QAD5voAA+b8AAPm/QAD5v8AA+cCAAPnAwAD5wQAA+cHAAPnCAAD5w0AA+caAAPnHwAD5yEAA+cjAAPnKAAD5ysAA+cuAAPnMAAD51UAA+d5AAPnoAAD58QAA+fHAAPnyQAD58sAA+fNAAPnzwAD59EAA+fSAAPn1QAD5+IAA+fzAAPn9QAD5/cAA+f5AAPn+wAD5/0AA+f/AAPoAQAD6AMAA+gUAAPoFwAD6BoAA+gdAAPoIAAD6CMAA+gmAAPoKQAD6CwAA+guAAPobQAD6G8AA+hxAAPocwAD6HYAA+h3AAPoeAAD6HkAA+h6AAPofAAD6H4AA+h/AAPogAAD6IIAA+iDAAPowgAD6MQAA+jGAAPoyAAD6MsAA+jMAAPozQAD6M4AA+jPAAPo0QAD6NMAA+jUAAPo1QAD6NcAA+jYAAPpFwAD6RkAA+kcAAPpHgAD6SEAA+kiAAPpIwAD6SQAA+klAAPpJwAD6SkAA+kqAAPpKwAD6S0AA+kuAAPpOwAD6TwAA+k9AAPpPwAD6X4AA+mAAAPpggAD6YQAA+mHAAPpiAAD6YkAA+mKAAPpiwAD6Y0AA+mPAAPpkAAD6ZEAA+mTAAPplAAD6dMAA+nVAAPp1wAD6dkAA+ncAAPp3QAD6d4AA+nfAAPp4AAD6eIAA+nkAAPp5QAD6eYAA+noAAPp6QAD6igAA+oqAAPqLAAD6i4AA+oxAAPqMgAD6jMAA+o0AAPqNQAD6jcAA+o5AAPqOgAD6jsAA+o9AAPqPgAD6n0AA+p/AAPqgQAD6oMAA+qGAAPqhwAD6ogAA+qJAAPqigAD6owAA+qOAAPqjwAD6pAAA+qSAAPqkwAD6tIAA+rUAAPq1gAD6tgAA+rbAAPq3AAD6t0AA+reAAPq3wAD6uEAA+rjAAPq5AAD6uUAA+rnAAPq6AAD6w0AA+sxAAPrWAAD63wAA+t/AAPrgQAD64MAA+uFAAPrhwAD64kAA+uKAAPrjQAD65oAA+upAAPrqwAD660AA+uvAAPrsQAD67MAA+u1AAPrtwAD68YAA+vJAAPrzAAD688AA+vSAAPr1QAD69gAA+vbAAPr3QAD7BwAA+weAAPsIAAD7CIAA+wlAAPsJgAD7CcAA+woAAPsKQAD7CsAA+wtAAPsLgAD7C8AA+wxAAPsMgAD7HEAA+xzAAPsdQAD7HcAA+x6AAPsewAD7HwAA+x9AAPsfgAD7IAAA+yCAAPsgwAD7IQAA+yGAAPshwAD7MYAA+zIAAPsygAD7MwAA+zPAAPs0AAD7NEAA+zSAAPs0wAD7NUAA+zXAAPs2AAD7NkAA+zbAAPs3AAD7RsAA+0dAAPtIAAD7SIAA+0lAAPtJgAD7ScAA+0oAAPtKQAD7SsAA+0tAAPtLgAD7S8AA+0xAAPtMgAD7XEAA+1zAAPtdQAD7XcAA+16AAPtewAD7XwAA+19AAPtfgAD7YAAA+2CAAPtgwAD7YQAA+2GAAPthwAD7cYAA+3IAAPtygAD7cwAA+3PAAPt0AAD7dEAA+3SAAPt0wAD7dUAA+3XAAPt2AAD7dkAA+3bAAPt3AAD7hsAA+4dAAPuHwAD7iEAA+4kAAPuJQAD7iYAA+4nAAPuKAAD7ioAA+4sAAPuLQAD7i4AA+4wAAPuMQAD7nwAA+6fAAPuvwAD7t8AA+7hAAPu4wAD7uUAA+7nAAPu6gAD7usAA+7sAAPu7wAD7vAAA+7yAAPu8wAD7vUAA+74AAPu+QAD7voAA+79AAPu/gAD7wMAA+8QAAPvFQAD7xcAA+8ZAAPvHgAD7yEAA+8kAAPvJgAD70sAA+9vAAPvlgAD77oAA++9AAPvvwAD78EAA+/DAAPvxQAD78cAA+/IAAPvywAD79gAA+/pAAPv6wAD7+0AA+/vAAPv8QAD7/MAA+/1AAPv9wAD7/kAA/AKAAPwDQAD8BAAA/ATAAPwFgAD8BkAA/AcAAPwHwAD8CIAA/AkAAPwYwAD8GUAA/BnAAPwaQAD8GwAA/BtAAPwbgAD8G8AA/BwAAPwcgAD8HQAA/B1AAPwdgAD8HgAA/B5AAPwuAAD8LoAA/C8AAPwvgAD8MEAA/DCAAPwwwAD8MQAA/DFAAPwxwAD8MkAA/DKAAPwywAD8M0AA/DOAAPxDQAD8Q8AA/ESAAPxFAAD8RcAA/EYAAPxGQAD8RoAA/EbAAPxHQAD8R8AA/EgAAPxIQAD8SMAA/EkAAPxMQAD8TIAA/EzAAPxNQAD8XQAA/F2AAPxeAAD8XoAA/F9AAPxfgAD8X8AA/GAAAPxgQAD8YMAA/GFAAPxhgAD8YcAA/GJAAPxigAD8ckAA/HLAAPxzQAD8c8AA/HSAAPx0wAD8dQAA/HVAAPx1gAD8dgAA/HaAAPx2wAD8dwAA/HeAAPx3wAD8h4AA/IgAAPyIgAD8iQAA/InAAPyKAAD8ikAA/IqAAPyKwAD8i0AA/IvAAPyMAAD8jEAA/IzAAPyNAAD8nMAA/J1AAPydwAD8nkAA/J8AAPyfQAD8n4AA/J/AAPygAAD8oIAA/KEAAPyhQAD8oYAA/KIAAPyiQAD8sgAA/LKAAPyzAAD8s4AA/LRAAPy0gAD8tMAA/LUAAPy1QAD8tcAA/LZAAPy2gAD8tsAA/LdAAPy3gAD8wMAA/MnAAPzTgAD83IAA/N1AAPzdwAD83kAA/N7AAPzfQAD838AA/OAAAPzgwAD85AAA/OfAAPzoQAD86MAA/OlAAPzpwAD86kAA/OrAAPzrQAD87wAA/O/AAPzwgAD88UAA/PIAAPzywAD884AA/PRAAPz0wAD9BIAA/QUAAP0FgAD9BgAA/QbAAP0HAAD9B0AA/QeAAP0HwAD9CEAA/QjAAP0JAAD9CUAA/QnAAP0KAAD9GcAA/RpAAP0awAD9G0AA/RwAAP0cQAD9HIAA/RzAAP0dAAD9HYAA/R4AAP0eQAD9HoAA/R8AAP0fQAD9LwAA/S+AAP0wAAD9MIAA/TFAAP0xgAD9McAA/TIAAP0yQAD9MsAA/TNAAP0zgAD9M8AA/TRAAP00gAD9REAA/UTAAP1FQAD9RcAA/UaAAP1GwAD9RwAA/UdAAP1HgAD9SAAA/UiAAP1IwAD9SQAA/UmAAP1JwAD9WYAA/VoAAP1agAD9WwAA/V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VAAQHFwAEBxkABAcaAAQHGwAEBx0ABAceAAQHXQAEB18ABAdiAAQHZAAEB2cABAdoAAQHaQAEB2oABAdrAAQHbQAEB28ABAdwAAQHcQAEB3MABAd0AAQHgQAEB4IABAeDAAQHhQAEB8QABAfGAAQHyAAEB8oABAfNAAQHzgAEB88ABAfQAAQH0QAEB9MABAfVAAQH1gAEB9cABAfZAAQH2gAECBkABAgbAAQIHQAECB8ABAgiAAQIIwAECCQABAglAAQIJgAECCgABAgqAAQIKwAECCwABAguAAQILwAECG4ABAhwAAQIcgAECHQABAh3AAQIeAAECHkABAh6AAQIewAECH0ABAh/AAQIgAAECIEABAiDAAQIhAAECMMABAjFAAQIxwAECMkABAjMAAQIzQAECM4ABAjPAAQI0AAECNIABAjUAAQI1QAECNYABAjYAAQI2QAECRgABAkaAAQJHAAECR4ABAkhAAQJIgAECSMABAkkAAQJJQAECScABAkpAAQJKgAECSsABAktAAQJLgAECVMABAl3AAQJngAECcIABAnFAAQJxwAECckABAnLAAQJzQAECc8ABAnQAAQJ0wAECeAABAnvAAQJ8QAECfMABAn1AAQJ9wAECfkABAn7AAQJ/QAECgwABAoPAAQKEgAEChUABAoYAAQKGwAECh4ABAohAAQKIwAECmIABApkAAQKZgAECmgABAprAAQKbAAECm0ABApuAAQKbwAECnEABApzAAQKdAAECnUABAp3AAQKeAAECrcABAq5AAQKuwAECr0ABArAAAQKwQAECsIABArDAAQKxAAECsYABArIAAQKyQAECsoABArMAAQKzQAECwwABAsOAAQLEAAECxIABAsVAAQLFgAECxcABAsYAAQLGQAECxsABAsdAAQLHgAECx8ABAshAAQLIgAEC2EABAtjAAQLZQAEC2cABAtqAAQLawAEC2wABAttAAQLbgAEC3AABAtyAAQLcwAEC3QABAt2AAQLdwAEC7YABAu4AAQLugAEC7wABAu/AAQLwAAEC8EABAvCAAQLwwAEC8UABAvHAAQLyAAEC8kABAvLAAQLzAAEDAsABAwNAAQMDwAEDBEABAwUAAQMFQAEDBYABAwXAAQMGAAEDBoABAwcAAQMHQAEDB4ABAwgAAQMIQAEDGAABAxiAAQMZAAEDGYABAx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AAAQYgQAEGIMABBjCAAQYxAAEGMYABBjIAAQYywAEGMwABBjNAAQYzgAEGM8ABBjRAAQY0wAEGNQABBjVAAQY1wAEGNgABBkXAAQZGQAEGRwABBkeAAQZIQAEGSIABBkjAAQZJAAEGSUABBknAAQZKQAEGSoABBkrAAQZLQAEGS4ABBk3AAQZOAAEGToABBl5AAQZewAEGX0ABBl/AAQZggAEGYMABBmEAAQZhQAEGYYABBmIAAQZigAEGYsABBmMAAQZjgAEGY8ABBnOAAQZ0AAEGdMABBnVAAQZ2AAEGdkABBnaAAQZ2wAEGdwABBneAAQZ4AAEGeEABBniAAQZ5AAEGeUABBnyAAQZ8wAEGfQABBn2AAQaNQAEGjcABBo5AAQaOwAEGj4ABBo/AAQaQAAEGkEABBpCAAQaRAAEGkYABBpHAAQaSAAEGkoABBpLAAQaigAEGowABBqPAAQakQAEGpQABBqVAAQalgAEGpcABBqYAAQamgAEGpwABBqdAAQangAEGqAABBqhAAQasAAEGr0ABBrEAAQaxwAEGsoABBrNAAQa1AAEGtcABBraAAQa3QAEGt8ABBrmAAQa8AAEGzsABBteAAQbfgAEG54ABBugAAQbogAEG6QABBumAAQbqQAEG6oABBurAAQbrgAEG68ABBuxAAQbsgAEG7QABBu3AAQbuAAEG7kABBu8AAQbvQAEG8YABBvTAAQb2AAEG9oABBvcAAQb4QAEG+QABBvnAAQb6QAEHA4ABBwyAAQcWQAEHH0ABByAAAQcggAEHIQABByGAAQciAAEHIoABByLAAQcjgAEHJsABBysAAQcrgAEHLAABByyAAQctAAEHLYABBy4AAQcugAEHLwABBzNAAQc0AAEHNMABBzWAAQc2QAEHNwABBzfAAQc4gAEHOUABBznAAQdJgAEHSgABB0qAAQdLAAEHS8ABB0wAAQdMQAEHTIABB0zAAQdNQAEHTcABB04AAQdOQAEHTsABB08AAQdewAEHX0ABB1/AAQdgQAEHYQABB2FAAQdhgAEHYcABB2IAAQdigAEHYwABB2NAAQdjgAEHZAABB2RAAQd0AAEHdIABB3VAAQd1wAEHdoABB3bAAQd3AAEHd0ABB3eAAQd4AAEHeIABB3jAAQd5AAEHeYABB3nAAQd9AAEHfUABB32AAQd+AAEHjcABB45AAQeOwAEHj0ABB5AAAQeQQAEHkIABB5DAAQeRAAEHkYABB5IAAQeSQAEHkoABB5MAAQeTQAEHowABB6OAAQekAAEHpIABB6VAAQelgAEHpcABB6YAAQemQAEHpsABB6dAAQengAEHp8ABB6hAAQeogAEHuEABB7jAAQe5QAEHucABB7qAAQe6wAEHuwABB7tAAQe7gAEHvAABB7yAAQe8wAEHvQABB72AAQe9wAEHzYABB84AAQfOgAEHzwABB8/AAQfQAAEH0EABB9CAAQfQwAEH0UABB9HAAQfSAAEH0kABB9LAAQfTAAEH4sABB+NAAQfjwAEH5EABB+UAAQflQAEH5YABB+XAAQfmAAEH5oABB+cAAQfnQAEH54ABB+gAAQfoQAEH8YABB/qAAQgEQAEIDUABCA4AAQgOgAEIDwABCA+AAQgQAAEIEIABCBDAAQgRgAEIFMABCBiAAQgZAAEIGYABCBoAAQgagAEIGwABCBuAAQgcAAEIH8ABCCCAAQghQAEIIgABCCLAAQgjgAEIJEABCCUAAQglgAEINUABCDXAAQg2QAEINsABCDeAAQg3wAEIOAABCDhAAQg4gAEIOQABCDmAAQg5wAEIOgABCDqAAQg6wAEISoABCEsAAQhLgAEITAABCEzAAQhNAAEITUABCE2AAQhNwAEITkABCE7AAQhPAAEIT0ABCE/AAQhQAAEIX8ABCGBAAQhgwAEIYUABCGIAAQhiQAEIYoABCGLAAQhjAAEIY4ABCGQAAQhkQAEIZIABCGUAAQhlQAEIdQABCHWAAQh2AAEIdoABCHdAAQh3gAEId8ABCHgAAQh4QAEIeMABCHlAAQh5gAEIecABCHpAAQh6gAEIikABCIrAAQiLQAEIi8ABCIyAAQiMwAEIjQABCI1AAQiNgAEIjgABCI6AAQiOwAEIjwABCI+AAQiPwAEIn4ABCKAAAQiggAEIoQABCKHAAQiiAAEIokABCKKAAQiiwAEIo0ABCKPAAQikAAEIpEABCKTAAQilAAEItMABCLVAAQi1wAEItkABCLcAAQi3QAEIt4ABCLfAAQi4AAEIuIABCLkAAQi5QAEIuYABCLoAAQi6QAEIzQABCNXAAQjdwAEI5cABCOZAAQjmwAEI50ABCOfAAQjogAEI6MABCOkAAQjpwAEI6gABCOqAAQjqwAEI60ABCOwAAQjsQAEI7IABCO1AAQjtgAEI7sABCPIAAQjzQAEI88ABCPRAAQj1gAEI9kABCPcAAQj3gAEJAMABCQnAAQkTgAEJHIABCR1AAQkdwAEJHkABCR7AAQkfQAEJH8ABCSAAAQkgwAEJJAABCShAAQkowAEJKUABCSnAAQkqQAEJKsABCStAAQkrwAEJLEABCTCAAQkxQAEJMgABCTLAAQkzgAEJNEABCTUAAQk1wAEJNoABCTcAAQlGwAEJR0ABCUfAAQlIQAEJSQABCUlAAQlJgAEJScABCUoAAQlKgAEJSwABCUtAAQlLgAEJTAABCUxAAQlcAAEJXIABCV0AAQldgAEJXkABCV6AAQlewAEJXwABCV9AAQlfwAEJYEABCWCAAQlgwAEJYUABCWGAAQlxQAEJccABCXKAAQlzAAEJc8ABCXQAAQl0QAEJdIABCXTAAQl1QAEJdcABCXYAAQl2QAEJdsABCXcAAQl6QAEJeoABCXrAAQl7QAEJiwABCYuAAQmMAAEJjIABCY1AAQmNgAEJjcABCY4AAQmOQAEJjsABCY9AAQmPgAEJj8ABCZBAAQmQgAEJoEABCaDAAQmhQAEJocABCaKAAQmiwAEJowABCaNAAQmjgAEJpAABCaSAAQmkwAEJpQABCaWAAQmlwAEJtYABCbYAAQm2gAEJtwABCbfAAQm4AAEJuEABCbiAAQm4wAEJuUABCbnAAQm6AAEJukABCbrAAQm7AAEJysABCctAAQnLwAEJzEABCc0AAQnNQAEJzYABCc3AAQnOAAEJzoABCc8AAQnPQAEJz4ABCdAAAQnQQAEJ4AABCeCAAQnhAAEJ4YABCeJAAQnigAEJ4sABCeMAAQnjQAEJ48ABCeRAAQnkgAEJ5MABCeVAAQnlgAEJ7sABCffAAQoBgAEKCoABCgtAAQoLwAEKDEABCgzAAQoNQAEKDcABCg4AAQoOwAEKEgABChXAAQoWQAEKFsABChdAAQoXwAEKGEABChjAAQoZQAEKHQABCh3AAQoegAEKH0ABCiAAAQogwAEKIYABCiJAAQoiwAEKMoABCjMAAQozgAEKNAABCjTAAQo1AAEKNUABCjWAAQo1wAEKNkABCjbAAQo3AAEKN0ABCjfAAQo4AAEKR8ABCkhAAQpIwAEKSUABCkoAAQpKQAEKSoABCkrAAQpLAAEKS4ABCkwAAQpMQAEKTIABCk0AAQpNQAEKXQABCl2AAQpeAAEKXoABCl9AAQpfgAEKX8ABCmAAAQpgQAEKYMABCmFAAQphgAEKYcABCmJAAQpigAEKckABCnLAAQpzQAEKc8ABCnSAAQp0wAEKdQABCnVAAQp1gAEKdgABCnaAAQp2wAEKdwABCneAAQp3wAEKh4ABCogAAQqIgAEKiQABConAAQqKAAEKikABCoqAAQqKwAEKi0ABCovAAQqMAAEKjEABCozAAQqNAAEKnMABCp1AAQqdwAEKnkABCp8AAQqfQAEKn4ABCp/AAQqgAAEKoIABCqEAAQqhQAEKoYABCqIAAQqiQAEKsgABCrKAAQqzAAEKs4ABCrRAAQq0gAEKtMABCrUAAQq1QAEKtcABCrZAAQq2gAEKtsABCrdAAQq3gAEKykABCtMAAQrbAAEK4wABCuOAAQrkAAEK5IABCuUAAQrlwAEK5gABCuZAAQrnAAEK50ABCufAAQroAAEK6IABCulAAQrpgAEK6cABCuqAAQrqwAEK7AABCu9AAQrwgAEK8QABCvGAAQrywAEK84ABCvRAAQr0wAEK/gABCwcAAQsQwAELGcABCxqAAQsbAAELG4ABCxwAAQscgAELHQABCx1AAQseAAELIUABCyWAAQsmAAELJoABCycAAQsngAELKAABCyiAAQspAAELKYABCy3AAQsugAELL0ABCzAAAQswwAELMYABCzJAAQszAAELM8ABCzRAAQtEAAELRIABC0UAAQtFgAELRkABC0aAAQtGwAELRwABC0dAAQtHwAELSEABC0iAAQtIwAELSUABC0mAAQtZQAELWcABC1pAAQtawAELW4ABC1vAAQtcAAELXEABC1yAAQtdAAELXYABC13AAQteAAELXoABC17AAQtugAELbwABC2/AAQtwQAELcQABC3FAAQtxgAELccABC3IAAQtygAELcwABC3NAAQtzgAELdAABC3RAAQt3gAELd8ABC3gAAQt4gAELiEABC4jAAQuJQAELicABC4qAAQuKwAELiwABC4tAAQuLgAELjAABC4yAAQuMwAELjQABC42AAQuNwAELnYABC54AAQuegAELnwABC5/AAQugAAELoEABC6CAAQugwAELoUABC6HAAQuiAAELokABC6LAAQujAAELssABC7NAAQuzwAELtEABC7UAAQu1QAELtYABC7XAAQu2AAELtoABC7cAAQu3QAELt4ABC7gAAQu4QAELyAABC8iAAQvJAAELyYABC8pAAQvKgAELysABC8sAAQvLQAELy8ABC8xAAQvMgAELzMABC81AAQvNgAEL3UABC93AAQveQAEL3sABC9+AAQvfwAEL4AABC+BAAQvggAEL4QABC+GAAQvhwAEL4gABC+KAAQviwAEL7AABC/UAAQv+wAEMB8ABDAiAAQwJAAEMCYABDAoAAQwKgAEMCwABDAtAAQwMAAEMD0ABDBMAAQwTgAEMFAABDBSAAQwVAAEMFYABDBYAAQwWgAEMGkABDBsAAQwbwAEMHIABDB1AAQweAAEMHsABDB+AAQwgAAEML8ABDDBAAQwwwAEMMUABDDIAAQwyQAEMMoABDDLAAQwzAAEMM4ABDDQAAQw0QAEMNIABDDUAAQw1QAEMRQABDEWAAQxGAAEMRoABDEdAAQxHgAEMR8ABDEgAAQxIQAEMSMABDElAAQxJgAEMScABDEpAAQxKgAEMWkABDFrAAQxbQAEMW8ABDFyAAQxcwAEMXQABDF1AAQxdgAEMXgABDF6AAQxewAEMXwABDF+AAQxfwAEMb4ABDHAAAQxwgAEMcQABDHHAAQxyAAEMckABDHKAAQxywAEMc0ABDHPAAQx0AAEMdEABDHTAAQx1AAEMhMABDIVAAQyFwAEMhkABDIcAAQyHQAEMh4ABDIfAAQyIAAEMiIABDIkAAQyJQAEMiYABDIoAAQyKQAEMmgABDJqAAQybAAEMm4ABDJxAAQycgAEMnMABDJ0AAQydQAEMncABDJ5AAQyegAEMnsABDJ9AAQyfgAEMr0ABDK/AAQywQAEMsMABDLGAAQyxwAEMsgABDLJAAQyygAEMswABDLOAAQyzwAEMtAABDLSAAQy0wAEMtwABDLdAAQy3wAEMyIABDNGAAQzagAEM40ABDO0AAQz1AAEM/sABDQiAAQ0QgAENGYABDSKAAQ0jAAENI8ABDSRAAQ0kwAENJUABDSYAAQ0mwAENJ0ABDSfAAQ0ogAENKQABDSmAAQ0qQAENKwABDStAAQ0sgAENL8ABDTCAAQ0xAAENMcABDTKAAQ0zAAENPEABDUVAAQ1PAAENWAABDVjAAQ1ZQAENWcABDVpAAQ1awAENW0ABDVuAAQ1cQAENX4ABDWRAAQ1kwAENZUABDWXAAQ1mQAENZsABDWdAAQ1nwAENaEABDWjAAQ1tgAENbkABDW8AAQ1vwAENcIABDXFAAQ1yAAENcsABDXOAAQ10QAENdMABDYSAAQ2FAAENhcABDYZAAQ2HAAENh0ABDYeAAQ2HwAENiAABDYiAAQ2JAAENiUABDYmAAQ2KAAENikABDYyAAQ2MwAENjUABDZ0AAQ2dgAENngABDZ6AAQ2fQAENn4ABDZ/AAQ2gAAENoEABDaDAAQ2hQAENoYABDaHAAQ2iQAENooABDbJAAQ2ywAENs4ABDbQAAQ20wAENtQABDbVAAQ21gAENtcABDbZAAQ22wAENtwABDbdAAQ23wAENuAABDbpAAQ26gAENuwABDcrAAQ3LQAENy8ABDcxAAQ3NAAENzUABDc2AAQ3NwAENzgABDc6AAQ3PAAENz0ABDc+AAQ3QAAEN0EABDeAAAQ3ggAEN4UABDeHAAQ3igAEN4sABDeMAAQ3jQAEN44ABDeQAAQ3kgAEN5MABDeUAAQ3lgAEN5cABDegAAQ3oQAEN6MABDfiAAQ35AAEN+YABDfoAAQ36wAEN+wABDftAAQ37gAEN+8ABDfxAAQ38wAEN/QABDf1AAQ39wAEN/gABDg3AAQ4OQAEODwABDg+AAQ4QQAEOEIABDhDAAQ4RAAEOEUABDhHAAQ4SQAEOEoABDhLAAQ4TQAEOE4ABDhbAAQ4XAAEOF0ABDhfAAQ4ngAEOKAABDiiAAQ4pAAEOKcABDioAAQ4qQAEOKoABDirAAQ4rQAEOK8ABDiwAAQ4sQAEOLMABDi0AAQ48wAEOPUABDj4AAQ4+gAEOP0ABDj+AAQ4/wAEOQAABDkBAAQ5AwAEOQUABDkGAAQ5BwAEOQkABDkKAAQ5HwAEOSwABDkxAAQ5NAAEOTcABDk8AAQ5PwAEOUIABDlEAAQ5SQAEOZQABDm3AAQ51wAEOfcABDn5AAQ5+wAEOf0ABDn/AAQ6AgAEOgMABDoEAAQ6BwAEOggABDoKAAQ6CwAEOg0ABDoQAAQ6EQAEOhIABDoVAAQ6FgAEOhsABDooAAQ6LQAEOi8ABDoxAAQ6NgAEOjkABDo8AAQ6PgAEOmMABDqHAAQ6rgAEOtIABDrVAAQ61wAEOtkABDrbAAQ63QAEOt8ABDrgAAQ64wAEOvAABDsBAAQ7AwAEOwUABDsHAAQ7CQAEOwsABDsNAAQ7DwAEOxEABDsiAAQ7JQAEOygABDsrAAQ7LgAEOzEABDs0AAQ7NwAEOzoABDs8AAQ7ewAEO30ABDt/AAQ7gQAEO4QABDuFAAQ7hgAEO4cABDuIAAQ7igAEO4wABDuNAAQ7jgAEO5AABDuRAAQ70AAEO9IABDvUAAQ71gAEO9kABDvaAAQ72wAEO9wABDvdAAQ73wAEO+EABDviAAQ74wAEO+UABDvmAAQ8JQAEPCcABDwqAAQ8LAAEPC8ABDwwAAQ8MQAEPDIABDwzAAQ8NQAEPDcABDw4AAQ8OQAEPDsABDw8AAQ8SQAEPEoABDxLAAQ8TQAEPIwABDyOAAQ8kAAEPJIABDyVAAQ8lgAEPJcABDyYAAQ8mQAEPJsABDydAAQ8ngAEPJ8ABDyhAAQ8ogAEPOEABDzjAAQ85QAEPOcABDzqAAQ86wAEPOwABDztAAQ87gAEPPAABDzyAAQ88wAEPPQABDz2AAQ89wAEPTYABD04AAQ9OgAEPTwABD0/AAQ9QAAEPUEABD1CAAQ9QwAEPUUABD1HAAQ9SAAEPUkABD1LAAQ9TAAEPYsABD2NAAQ9jwAEPZEABD2UAAQ9lQAEPZYABD2XAAQ9mAAEPZoABD2cAAQ9nQAEPZ4ABD2gAAQ9oQAEPeAABD3iAAQ95AAEPeYABD3pAAQ96gAEPesABD3sAAQ97QAEPe8ABD3xAAQ98gAEPfMABD31AAQ99gAEPhsABD4/AAQ+ZgAEPooABD6NAAQ+jwAEPpEABD6TAAQ+lQAEPpcABD6YAAQ+mwAEPqgABD63AAQ+uQAEPrsABD69AAQ+vwAEPsEABD7DAAQ+xQAEPtQABD7XAAQ+2gAEPt0ABD7gAAQ+4wAEPuYABD7pAAQ+6wAEPyoABD8sAAQ/LgAEPzAABD8zAAQ/NAAEPzUABD82AAQ/NwAEPzkABD87AAQ/PAAEPz0ABD8/AAQ/QAAEP38ABD+BAAQ/gwAEP4UABD+IAAQ/iQAEP4oABD+LAAQ/jAAEP44ABD+QAAQ/kQAEP5IABD+UAAQ/lQAEP9QABD/WAAQ/2AAEP9oABD/dAAQ/3gAEP98ABD/gAAQ/4QAEP+MABD/lAAQ/5gAEP+cABD/pAAQ/6gAEQCkABEArAARALgAEQDAABEAzAARANAAEQDUABEA2AARANwAEQDkABEA7AARAPAAEQD0ABEA/AARAQAAEQH8ABECBAARAgwAEQIUABECIAARAiQAEQIoABECLAARAjAAEQI4ABECQAARAkQAEQJIABECUAARAlQAEQNQABEDWAARA2AAEQNoABEDdAARA3gAEQN8ABEDgAARA4QAEQOMABEDlAARA5gAEQOcABEDpAARA6gAEQSkABEErAARBLQAEQS8ABEEyAARBMwAEQTQABEE1AARBNgAEQTgABEE6AARBOwAEQTwABEE+AARBPwAEQYoABEGtAARBzQAEQe0ABEHvAARB8QAEQfMABEH1AARB+AAEQfkABEH6AARB/QAEQf4ABEIAAARCAQAEQgMABEIGAARCBwAEQggABEILAARCDAAEQhEABEIeAARCIwAEQiUABEInAARCLAAEQi8ABEIyAARCNAAEQlkABEJ9AARCpAAEQsgABELLAARCzQAEQs8ABELRAARC0wAEQtUABELWAARC2QAEQuYABEL3AARC+QAEQvsABEL9AARC/wAEQwEABEMDAARDBQAEQwcABEMYAARDGwAEQx4ABEMhAARDJAAEQycABEMqAARDLQAEQzAABEMyAARDcQAEQ3MABEN1AARDdwAEQ3oABEN7AARDfAAEQ30ABEN+AARDgAAEQ4IABEODAARDhAAEQ4YABEOHAARDxgAEQ8gABEPKAARDzAAEQ88ABEPQAARD0QAEQ9IABEPTAARD1QAEQ9cABEPYAARD2QAEQ9sABEPcAAREGwAERB0ABEQgAAREIgAERCUABEQmAAREJwAERCgABEQpAAREKwAERC0ABEQuAARELwAERDEABEQyAAREPwAEREAABERBAAREQwAERIIABESEAAREhgAERIgABESLAAREjAAERI0ABESOAAREjwAERJEABESTAARElAAERJUABESXAAREmAAERNcABETZAARE2wAERN0ABETgAARE4QAEROIABETjAARE5AAEROYABEToAARE6QAEROoABETsAARE7QAERSwABEUuAARFMAAERTIABEU1AARFNgAERTcABEU4AARFOQAERTsABEU9AARFPgAERT8ABEVBAARFQgAERYEABEWDAARFhQAERYcABEWKAARFiwAERYwABEWNAARFjgAERZAABEWSAARFkwAERZQABEWWAARFlwAERdYABEXYAARF2gAERdwABEXfAARF4AAEReEABEXiAARF4wAEReUABEXnAARF6AAERekABEXrAARF7AAERhEABEY1AARGXAAERoAABEaDAARGhQAERocABEaJAARGiwAERo0ABEaOAARGkQAERp4ABEatAARGrwAERrEABEazAARGtQAERrcABEa5AARGuwAERsoABEbNAARG0AAERtMABEbWAARG2QAERtwABEbfAARG4QAERyAABEciAARHJAAERyYABEcpAARHKgAERysABEcsAARHLQAERy8ABEcxAARHMgAERzMABEc1AARHNgAER3UABEd3AARHeQAER3sABEd+AARHfwAER4AABEeBAARHggAER4QABEeGAARHhwAER4gABEeKAARHiwAER8oABEfMAARHzgAER9AABEfTAARH1AAER9UABEfWAARH1wAER9kABEfbAARH3AAER90ABEffAARH4AAESB8ABEghAARIIwAESCUABEgoAARIKQAESCoABEgrAARILAAESC4ABEgwAARIMQAESDIABEg0AARINQAESHQABEh2AARIeAAESHoABEh9AARIfgAESH8ABEiAAARIgQAESIMABEiFAARIhgAESIcABEiJAARIigAESMkABEjLAARIzQAESM8ABEjSAARI0wAESNQABEjVAARI1gAESNgABEjaAARI2wAESNwABEjeAARI3wAESR4ABEkgAARJIgAESSQABEknAARJKAAESSkABEkqAARJKwAESS0ABEkvAARJMAAESTEABEkzAARJNAAEST0ABEk+AARJQAAESU0ABElOAARJTwAESVEABEleAARJXwAESWAABEliAARJbwAESXAABElxAARJcwAESXwABEmLAARJmAAESacABEm5AARJzQAESeQABEn2AARJ/wAESgAABEoCAARKDwAEShAABEoRAARKEwAEShwABEomAARKLQAAAAAAAAQCAAAAAAAApacAAAAAAAAAAAAAAAAABEo1 + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPLQALAAwAGQA1ADYANwBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AJcAmACZAJ8AoACsAMIAwwDEAMUAxgDHAMgAyQDKAMsA5ADnAO4A9AEDARIBFQEkATMBNgCWAUYBVQFZAV0BbAFyAXMBewGKAYsBlAGcAZ0BngGzAbQBvAG9Ab4BygHeAd8B4AHhAeIB4wHkAeUB5gH1AgQCEwIXAiYCNQI2AkUCVAJjAm8CgQKCAoMChAKFAoYChwKIApcCpgK1AsQCxQLUAuMC8gL6Aw8DEAMYAyQDOANHA1YDZQNpA3gDhwOWA6UDtAPAA9ID4QPwA/8EDgQdBCwEOwQ8BD8ESARiBGMEaQR1BIsEmgSdBKwEuwS+BM0E3ATfBO4E/QUBBRAFHwUgBSoFKwUsBS0FQgVDBUsFVwVrBXoFiQWYBZwFqwW6BckF2AXnBfMGBQYUBiMGMgZBBlAGXwZuBoMGhAaMBpgGrAa7BsoG2QbdBuwG+wcKBxkHKAc0B0YHVQdkB3MHggeRB6AHrwfEB8UHzQfZB+0H/AgLCBoIHggtCDwISwhaCGkIdQiHCJYIpQi0CMMI0gjhCPAI8wkNCQ4JFAkgCTYJRQlICVcJZglqCW4Jbwl+CY0JkAmfCa4JsgnBCdAKGAoZChoKGwocCh0KHgofCiAKIQoiCiMKJAolCiYKJwooCikKKgorCiwKLQouCi8KMAoxCjIKMwo0CjUKNgo3CjgKOQpOCk8KVwpjCncKhgqVCqQKqAq3CsYK1QrkCvMK/wsRCyALLws+C00LTgtdC2wLewuQC5ELmQulC7kLyAvXC+YL6gv5DAgMFwwmDDUMQQxTDGIMcQyADI8MngytDLwM0QzSDNoM5gz6DQkNGA0nDSsNOg1JDVgNZw12DYINlA2jDaQNsw3CDdEN0g3hDfAN/w4UDhUOHQ4pDj0OTA5bDmoObg59DowOmw6qDrkOxQ7XDuYO9Q8EDxMPIg8xD0APVQ9WD14Pag9+D40PnA+rD68Pvg/ND9wP6w/6EAYQGBAnEDYQRRBUEGMQchCBEJYQlxCfEKsQvxDOEN0Q7BDwEP8RDhEdESwROxFHEVkRaBF3EYYRlRGkEbMRwhHXEdgR4BH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QV9FX2VflV/lYCFgXWCZYKlg5WEhYV1hmWHVYgViTWKJYsVjAWM9Y3ljtWPxZEVkSWRpZJlk6WUlZWFlnWWtZelmJWZhZp1m2WcJZ1FnjWfJaAVoQWh9aLlo9WlJaU1pbWmdae1qKWplaqFqsWrtaylrZWuha91sDWxVbJFszW0JbUVtgW29bfluTW5RbnFuoW7xby1vaW+lb7Vv8XAtcGlwpXDhcRFxWXGVcdFyDXJJcoVywXL9c1FzVXN1c6Vz9XQxdG10qXS5dPV1MXVtdal15XYVdl12mXbVdxF3TXeJd8V4AXhVeFl4eXipePl5NXlxea15vXn5ejV6cXqteul7GXthe5172XwVfFF8jXzJfQV9EX1NfYl9xX4Zfh1+PX5tfr1++X81f3F/gX+9f/mANYBxgK2A3YElgWGBnYHZghWCUYKNgsmDHYMhg0GDcYPBg/2EOYR1hIWEwYT9hTmFdYWxheGGKYZlhqGG3YcZh1WHkYfNiCGIJYhFiHWIxYkBiT2JeYmJicWKAYo9inmKtYrliy2LaYuli+GMHYxZjJWM0Y0ljSmNSY15jcmOBY5Bjn2OjY7JjwWPQY99j7mP6ZAxkG2QqZDlkSGRXZGZkdWSKZItkk2SfZLNkwmTRZOBk5GTzZQJlEWUgZS9lO2VNZVxla2V6ZYllmGWnZbZly2XMZdRl4GX0ZgNmEmYhZiVmNGZDZlJmYWZwZnxmjmadZqxmu2bKZtlm6Gb3ZwxnDWcVZyFnNWdEZ1NnYmdmZ3VnhGeTZ6JnsWe9Z89n3mftZ/xoC2gaaCloOGhNaE5oVmhiaHZohWiUaKNop2i2aMVo1GjjaPJo/mkQaR9pLmk9aUxpW2lqaWtpemmPaZBpmGmkabhpx2nWaeVp6Wn4agdqFmolajRqQGpSamFqcGp/ao5qnWqsartq0GrRatlq5Wr5awhrF2smayprOWtIa1drZmt1a4Frk2uia7FrwGvPa95r7Wv8bBFsEmwabCZsOmxJbFhsZ2xrbHpsiWyYbKdstmzCbNRs42zybQFtEG0fbS5tPW1SbVNtW21nbXttim2ZbahtrG27bcpt2W3obfduA24VbiRuM25CblFuYG5vbn5ugW6Qbp9urm7DbsRuzG7Ybuxu+28KbxlvHW8sbztvSm9Zb2hvdG+Gb5VvpG+zb8Jv0W/gb+9wBHAFcA1wGXAtcDxwS3BacF5wbXB8cItwmnCpcLVwx3DWcOVw9HEDcRJxIXEwcUVxRnFOcVpxbnF9cYxxm3Gfca5xvXHMcdtx6nH2cghyF3ImcjVyRHJTcmJycXKGcodyj3Kbcq9yvnLNctxy4HLvcv5zDXMccytzN3NJc1hzZ3N2c4VzlHOjc7JztXPPc9Bz1nPic/h0B3QKdBl0KHQrdDp0SXRMdFt0anRudH10jHSgdKF0onSjdKR0pXS6dLt0w3TPdON08nUBdRB1FHUjdTJ1QXVQdV91a3V9dYx1m3Wqdbl1yHXXdeZ1+3X8dgR2EHYkdjN2QnZRdlV2ZHZzdoJ2kXagdqx2vnbNdtx263b6dwl3GHcZdyh3PXc+d0Z3Undmd3V3hHeTd5d3pne1d8R303fid+54AHgPeB54LXg8eEt4WnhpeH54f3iHeJN4p3i2eMV41HjYeOd49nkFeRR5I3kveUF5UHlfeW55fXmMeZt5qnm/ecB5yHnUeeh593oGehV6GXooejd6RnpVemR6cHqCepF6oHqver56zXrceut7AHsBewl7FXspezh7R3tWe1p7aXt4e4d7lnule7F7w3vSe+F78Hv/fA58HXwsfEF8QnxKfFZ8anx5fIh8l3ybfKp8uXzIfNd85nzyfQR9E30ifTF9QH1PfV59bX2CfYN9i32Xfat9un3Jfdh93H3rffp+CX4Yfid+M35FflR+Y35yfoF+kH6ffq5+sX7Lfsx+0n7efvR/A38GfxV/JH8nfzZ/RX9If1d/Zn9qf3l/iH+Jf51/nn+ff6B/oX+if6N/uH+5f8F/zX/hf/B//4AOgBKAIYAwgD+AToBdgGmAe4CKgJmAqIC3gMaA1YDkgPmA+oECgQ6BIoExgUCBT4FTgWKBcYGAgY+BnoGqgbyBy4HagemB+IIHghaCJYI6gjuCQ4JPgmOCcoKBgpCClIKjgrKCwYLQgt+C64L9gwyDG4MqgzmDSINXg2aDe4N8g4SDkIOkg7ODwoPRg9WD5IPzhAKEEYQghCyEPoRNhFyEa4R6hImEmISnhLyEvYTFhNGE5YT0hQOFEoUWhSWFNIVDhVKFYYVthX+FjoWdhayFu4XKhdmF6IX9hf6GBoYShiaGNYZEhlOGV4ZmhnWGhIaThqKGrobAhs+G3obthvyG/YcMhxuHKoc/h0CHSIdUh2iHd4eGh5WHmYeoh7eHxofVh+SH8IgCiBGIIIgviD6ITYhciGuIgIiBiImIlYipiLiIx4jWiNqI6Yj4iQeJFokliTGJQ4lSiWGJcIl/iY6JnYmsia+JyYnKidCJ3InyigGKBIoTiiKKJYo0ikOKRopVimSKaIp3ioaKh4qTipSKlYqqiquKs4q/itOK4orxiwCLBIsTiyKLMYtAi0+LW4tti3yLi4uai6mLuIvHi9aL64vsi/SMAIwUjCOMMoxBjEWMVIxjjHKMgYyQjJyMroy9jMyM24zqjPmNCI0XjSyNLY01jUGNVY1kjXONgo2GjZWNpI2zjcKN0Y3dje+N/o4NjhyOK446jkmOWI5tjm6Odo6CjpaOpY60jsOOx47WjuWO9I8DjxKPHo8wjz+PTo9dj2yPe4+Kj5mPnI+2j7ePvY/Jj9+P7o/xkACQD5ASkCGQMJAzkEKQUZBVkGSQc5B0kI6Qj5CQkJGQkpCTkJSQlZCWkJeQmJCtkK6QtpDCkNaQ5ZD0kQORB5EWkSWRNJFDkVKRXpFwkX+RjpGdkayRu5HKkdmR7pHvkfeSA5IXkiaSNZJEkkiSV5JmknWShJKTkp+SsZLAks+S3pLtkvyTC5Maky+TMJM4k0STWJNnk3aThZOJk5iTp5O2k8WT1JPgk/KUAZQQlB+ULpQ9lEyUW5RwlHGUeZSFlJmUqJS3lMaUypTZlOiU95UGlRWVIZUzlUKVUZVglW+VfpWNlZyVsZWylbqVxpXalemV+JYHlguWGpYpljiWR5ZWlmKWdJaDlpKWoZawlr+WzpbdlvKW85b7lweXG5cqlzmXSJdMl1uXapd5l4iXl5ejl7WXxJfTl+KX8ZfymAGYEJgfmDSYNZg9mEmYXZhsmHuYipiOmJ2YrJi7mMqY2ZjlmPeZBpkVmSSZM5lCmVGZYJl1mXaZfpmKmZ6ZrZm8mcuZz5neme2Z/JoLmhqaJpo4mkeaVpplmnSag5qSmqGatpq3mr+ay5rfmu6a/ZsMmxCbH5sumz2bTJtbm2ebeZuIm5ebppu1m8Sb05vim/eb+JwAnAycIJwvnD6cTZxRnGCcb5x+nI2cnJyonLqcyZzYnOec9p0FnRSdI504nTmdQZ1NnWGdcJ1/nY6dkp2hnbCdv53Ond2d6Z37ngqeGZ4onjeeRp5VnmSeZ56BnoKeiJ6UnqqeuZ68nsue2p7dnuye+57+nw2fHJ8gny+fPp8/n0efSJ9dn16fZp9yn4aflZ+kn7Oft5/Gn9Wf5J/zoAKgDqAgoC+gPqBNoFyga6B6oImgnqCfoKegs6DHoNag5aD0oPihB6EWoSWhNKFDoU+hYaFwoX+hjqGdoayhu6HKoc2h56Hooe6h+qIQoh+iIqIxokCiQ6JSomGiZKJzooKihqKVoqSipaKzorSitaK2oreizKLNotWi4aL1owSjE6MioyajNaNEo1OjYqNxo32jj6Oeo62jvKPLo9qj6aP4pA2kDqQWpCKkNqRFpFSkY6RnpHakhaSUpKOksqS+pNCk36TupP2lDKUbpSqlOaVOpU+lV6VjpXelhqWVpaSlqKW3pcal1aXkpfOl/6YRpiCmL6Y+pk2mXKZrpnqmj6aQppimpKa4psem1qblpumm+KcHpxanJac0p0CnUqdhp3Cnf6eOp4+nnqetp7yn0afSp9qn5qf6qAmoGKgnqCuoOqhJqFioZ6h2qIKolKijqLKowajQqN+o7qj9qQCpGqkbqSGpLalDqVKpValkqXOpdqmFqZSpl6mmqbWpuanIqdep2Knmqeep6Knpqeqp/6oAqgiqFKooqjeqRqpVqlmqaKp3qoaqlaqkqrCqwqrRquCq76r+qw2rHKsdqyyrQatCq0qrVqtqq3mriKuXq5urqqu5q8ir16vmq/KsBKwTrCKsMaxArE+sXqxfrG6sg6yErIysmKysrLusyqzZrN2s7Kz7rQqtGa0orTStRq1VrWStc62CrZGtoK2vrcStxa3Nrdmt7a38rguuGq4eri2uPK5Lrlquaa51roWulK6urq+uta7Brteu5q7prvivB68KrxmvKK8rrzqvSa9Nr1yva69sr3avd694r42vjq+Wr6Kvtq/Fr9Sv46/nr/awBbAUsCOwMrA+sFCwX7BusH2wjLCbsKqwubDOsM+w17DjsPexBrEVsSSxKLE3sUaxVbFksXOxf7GRsaCxr7G+sc2x3LHrsfqyD7IQshiyJLI4skeyVrJlsmmyeLKHspaypbK0ssCy0rLhsvCy/7MOsx2zLLM7sz6zTbNcs2uzerOJs56zn7Ons7Ozx7PWs+Wz9LP4tAe0FrQltDS0Q7RPtGG0cLR/tI60nbSstLu0yrTNtOe06LTutPq1ELUftSK1MbVAtUO1UrVhtWS1c7WCtYa1lbWkta61w7XEtcy12LXstfu2CrYZth22LLY7tkq2WbZotnS2hraVtqS2s7bCttG24LbvtwS3BbcNtxm3Lbc8t0u3Wrdet223fLeLt5q3qbe1t8e31rflt/S4A7gSuCG4MLhFuEa4TrhauG64fbiMuJu4n7iuuL24zLjbuOq49rkIuRe5Jrk1uUS5U7liuXG5dLmOuY+5lbmhube5xrnJudi557nqufm6CLoLuhq6Kbotujy6S7pMulq6W7pcul26XrpzunS6fLqIupy6q7q6usm6zbrcuuu6+rsJuxi7JLs2u0W7VLtju3K7gbuQu5+7tLu1u727ybvdu+y7+7wKvA68HbwsvDu8SrxZvGW8d7yGvJW8pLyzvMK80bzgvPW89rz+vQq9Hr0tvTy9S71PvV69bb18vYu9mr2mvbi9x73WveW99L4DvhK+Ib42vje+P75Lvl++br59voy+kL6fvq6+vb7Mvtu+5775vwi/F78mvzW/RL9Tv2K/d794v4C/jL+gv6+/vr/Nv9G/4L/vv/7ADcAcwCjAOsBJwFjAZ8B2wIXAlMCjwKbAwMDBwMfA08DpwPjA+8EKwRnBHMErwTrBPcFMwVvBX8FuwX3BfsGIwYnBnsGfwafBs8HHwdbB5cH0wfjCB8IWwiXCNMJDwk/CYcJwwn/CjsKdwqzCu8LKwt/C4MLowvTDCMMXwybDNcM5w0jDV8Nmw3XDhMOQw6LDscPAw8/D3sPtw/zEC8QgxCHEKcQ1xEnEWMRnxHbEesSJxJjEp8S2xMXE0cTjxPLFAcUQxR/FLsU9xUzFT8VTxVfFW8VjxWbFalUkbnVsbNYADQAOAA8AEAARABIAEwAUABUAFgAXABhfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXV94ZF9tb2RlbE5hbWVcX3hkX2NvbW1lbnRzXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXxAXX21vZGVsVmVyc2lvbklkZW50aWZpZXKAAoEPLIAAgQ8qgQ8rgQJM3gAaABsAHAAdAB4AHwAgAA4AIQAiACMAJAAlACYAJwAoACkACQAnABUALQAuAC8AMAAxACcAJwAVXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQ8ogQ8mgAGABIAAgQ8ngQ8pEACABYADgASABIAAUFNZRVPTADgAOQAOADoAUABmV05TLmtleXNaTlMub2JqZWN0c68QFQA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4AT4AGgAeACIAJgAqAC4AMgA2ADoAPgBCAEYASgBOAFIAVgBaAF4AYgBmAGq8QFQBRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZYAbgImA5oEGOoEI9oEJyIEKnIELD4EMLIEMcIEM/YEB2IEN5oEG2oEOP4ED4IEOy4EF2oEFC4EEZ4ENbYA5W0NEU3Rhc2hJdGVtXxATQ0RYY21BdmFpbGFibGVBc3NldFdDRENoYWluXxAPQ0RQcmljZVByb3ZpZGVyWUNEVG9uRGFwcF8QEUNEVG9uQ29ubmVjdGVkQXBwWkNEU2NhbUluZm9fEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW1fEBVDRFJ1bnRpbWVNZXRhZGF0YUl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzW0NEQ2hhaW5Ob2RlWUNEQ29udGFjdFtDRFByaWNlRGF0YV1DRENvbnRhY3RJdGVtXxAQQ0RDaGFpblhjbUNvbmZpZ15DRFBoaXNoaW5nSXRlbVdDREFzc2V0XUNERXh0ZXJuYWxBcGlfEBlDRFhjbUF2YWlsYWJsZURlc3RpbmF0aW9uXkNEUG9sa2Fzd2FwRGV43xAQAH0AfgB/AIAAHwCBAIIAIQCDAIQADgAjAIUAhgAmAIcAiACJACcAJwATAI0AjgAvACcAiACRADsAiACUAJUAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAdgEGABIAEgAKAHoCGgASAHYCIgAaAHYCHgBwIElL5LtlXb3JkZXJlZNMAOAA5AA4AmgCcAGahAJuAH6EAnYAggDleWERfUFN0ZXJlb3R5cGXZAB8AIwChAA4AJgCiACEAhwCjAFEAmwCIAKcAFQAnAC8AlgCrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgBuAH4AdgECAAIAECIAh0wA4ADkADgCtALcAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpALgAuQC6ALsAvAC9AL4AvwDAgCuAL4AwgDKAM4A1gDeAOoA+gDlfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZ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AH05mTmcAIU5oTmkADgAjTmpOawAmAIcAiE5tACcAJwATTnEAjgAvACcAiACRAD4AiE54TnkAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAdgQZNgASABIACgQY8gIaABIAdgIiACYAdgQargQY7CBLCxbSG0wA4ADkADk59Tn8AZqEAm4AfoU6AgQY9gDnZAB8AI06DAA4AJk6EACEAh06FAFQAmwCIAKcAFQAnAC8Alk6NXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQY6gB+AHYBAgACABAiBBj7TADgAOQAOTo9OmQBmqQCuAK8AsACxALIAswC0ALUAtoAigCOAJIAlgCaAJ4AogCmAKqlOmk6bTpxOnU6eTp9OoE6hTqKBBj+BBkGBBkKBBkSBBkWBBkeBBkiBBkqBBkuAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVTqYAFU6AAJYAlgCWAC8AlgDeAK4AlgCWABUAloAAgQZAgACBBj0ICAgIgC6AIggIgAAI0gA5AA5OtADmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVToAAlgCWAJYALwCWAN4ArwCWAJYAFQCWgACAAIAAgQY9CAgICIAugCMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVTscAFU6AAJYAlgCWAC8AlgDeALAAlgCWABUAloAAgQZDgACBBj0ICAgIgC6AJAgIgAAI0gA5AA5O1QDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVToAAlgCWAJYALwCWAN4AsQCWAJYAFQCWgACAAIAAgQY9CAgICIAugCUICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVTugAFU6AAJYAlgCWAC8AlgDeALIAlgCWABUAloAAgQZGgACBBj0ICAgIgC6AJggIgAAI0gA5AA5O9gDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVToAAlgCWAJYALwCWAN4AswCWAJYAFQCWgACANoAAgQY9CAgICIAugCcICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVTwkAFU6AAJYAlgCWAC8AlgDeALQAlgCWABUAloAAgQZJgACBBj0ICAgIgC6AKAgIgAAI0wA4ADkADk8XTxgAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQFfABVOgACWAJYAlgAvAJYA3gC1AJYAlgAVAJaAAIA7gACBBj0ICAgIgC6AKQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVPKwAVToAAlgCWAJYALwCWAN4AtgCWAJYAFQCWgACBBkyAAIEGPQgICAiALoAqCAiAAAhfEA9DRFByaWNlUHJvdmlkZXLTADgAOQAOTzpPPwBmpAUiSqc/rk8+gJ2BBfSBBR+BBk6kT0BPQU9CT0OBBk+BBmaBBn2BBpSAOVVhc3NldN8QEgDMAM0Azk9HAB8A0ADRT0gAIQDPT0kA0gAOACMA0wDUACYA1QAVABUAFQAnAFQAlgCWT1EALwCWAIgAlgGtBSIAlgCWT1kAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQY6CAiBBlEIgB0IgG6AnQgIgQZQCBLwoVfs0wA4ADkADk9dT2AAZqIBtgG3gEeASKJPYU9igQZSgQZdgDnZAB8AI09lAA4AJk9mACEAh09nT0ABtgCIAKcAFQAnAC8Alk9vXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZPgEeAHYBAgACABAiBBlPTADgAOQAOT3FPegBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqE97T3xPfU9+T39PgE+BT4KBBlSBBlWBBlaBBliBBlmBBlqBBluBBlyAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFU9hAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEGUggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVPYQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBBlIICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVPpAAVT2EAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBBleAAIEGUggICAiALoBNCAiAAAjTADgAOQAOT7JPswBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFU9hAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEGUggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVPYQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBBlIICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVT2EAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQZSCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFU9hAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEGUggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVPYQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBBlIICAgIgC6AUggIgAAI2QAfACNQAQAOACZQAgAhAIdQA09AAbcAiACnABUAJwAvAJZQC18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGT4BIgB2AQIAAgAQIgQZe0wA4ADkADlANUBUAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp1AWUBdQGFAZUBpQG1AcgQZfgQZggQZhgQZigQZjgQZkgQZlgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVPYgCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBBl0ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVT2IAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQZdCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFU9iAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEGXQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABVPYgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBBl0ICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVT2IAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQZdCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFU9iAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEGXQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVPYgCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBBl0ICAgIgC6AZQgIgAAI3xASAMwAzQDOUIgAHwDQANFQiQAhAM9QigDSAA4AIwDTANQAJgDVABUAFQAVACcAVACWAJZQkgAvAJYAiACWAa1KpwCWAJZQmgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBjoICIEGaAiAHQiAboEF9AgIgQZnCBJ+2ZgG0wA4ADkADlCeUKEAZqIBtgG3gEeASKJQolCjgQZpgQZ0gDnZAB8AI1CmAA4AJlCnACEAh1CoT0EBtgCIAKcAFQAnAC8AllCwXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZmgEeAHYBAgACABAiBBmrTADgAOQAOULJQuwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqFC8UL1QvlC/UMBQwVDCUMOBBmuBBmyBBm2BBm+BBnCBBnGBBnKBBnOAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVCiAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEGaQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVQogCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBBmkICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVQ5QAVUKIAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBBm6AAIEGaQgICAiALoBNCAiAAAjTADgAOQAOUPNQ9ABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVCiAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEGaQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVQogCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBBmkICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUKIAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQZpCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVCiAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEGaQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVQogCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBBmkICAgIgC6AUggIgAAI2QAfACNRQgAOACZRQwAhAIdRRE9BAbcAiACnABUAJwAvAJZRTF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGZoBIgB2AQIAAgAQIgQZ10wA4ADkADlFOUVYAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp1FXUVhRWVFaUVtRXFFdgQZ2gQZ3gQZ4gQZ5gQZ6gQZ7gQZ8gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVQowCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBBnQICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUKMAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQZ0CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVCjAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEGdAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABVQowCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBBnQICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVUKMAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQZ0CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVCjAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEGdAgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVQowCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBBnQICAgIgC6AZQgIgAAI3xASAMwAzQDOUckAHwDQANFRygAhAM9RywDSAA4AIwDTANQAJgDVABUAFQAVACcAVACWAJZR0wAvAJYAiACWAa0/rgCWAJZR2wCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBjoICIEGfwiAHQiAboEFHwgIgQZ+CBLuNAHU0wA4ADkADlHfUeIAZqIBtgG3gEeASKJR41HkgQaAgQaLgDnZAB8AI1HnAA4AJlHoACEAh1HpT0IBtgCIAKcAFQAnAC8AllHxXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZ9gEeAHYBAgACABAiBBoHTADgAOQAOUfNR/ABmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqFH9Uf5R/1IAUgFSAlIDUgSBBoKBBoOBBoSBBoaBBoeBBoiBBomBBoqAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVHjAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEGgAgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVR4wCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBBoAICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVSJgAVUeMAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBBoWAAIEGgAgICAiALoBNCAiAAAjTADgAOQAOUjRSNQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVHjAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEGgAgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVR4wCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBBoAICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUeMAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQaACAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVHjAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEGgAgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVR4wCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBBoAICAgIgC6AUggIgAAI2QAfACNSgwAOACZShAAhAIdShU9CAbcAiACnABUAJwAvAJZSjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGfYBIgB2AQIAAgAQIgQaM0wA4ADkADlKPUpcAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp1KYUplSmlKbUpxSnVKegQaNgQaOgQaPgQaQgQaRgQaSgQaTgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVR5ACWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBBosICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUeQAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQaLCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVHkAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEGiwgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABVR5ACWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBBosICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVUeQAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQaLCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVHkAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEGiwgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVR5ACWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBBosICAgIgC6AZQgIgAAI3xASAMwAzQDOUwoAHwDQANFTCwAhAM9TDADSAA4AIwDTANQAJgDVABUAFQAVACcAVACWAJZTFAAvAJYAiACWExJPPgCWAJZTHACWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBjoICIEGlgiAHQiBAjqBBk4ICIEGlQgSmU+2C9MAOAA5AA5TIFMjAGaiAbYTHIBHgQHDolMkUyWBBpeBBqKAOdkAHwAjUygADgAmUykAIQCHUypPQwG2AIgApwAVACcALwCWUzJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBpSAR4AdgECAAIAECIEGmNMAOAA5AA5TNFM9AGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoUz5TP1NAU0FTQlNDU0RTRYEGmYEGmoEGm4EGnYEGnoEGn4EGoIEGoYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUyQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQaXCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVMkAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEGlwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVNnABVTJACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEGnIAAgQaXCAgICIAugE0ICIAACNMAOAA5AA5TdVN2AGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUyQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQaXCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFVMkAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEGlwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVTJACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBBpcICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVUyQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQaXCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVMkAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEGlwgICAiALoBSCAiAAAjZAB8AI1PEAA4AJlPFACEAh1PGT0MTHACIAKcAFQAnAC8AllPOXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQaUgQHDgB2AQIAAgAQIgQaj0wA4ADkADlPQU9gAZqcTzhPPE9ATzBPRE80W7YEB04EB1IEB1YEB0YEB1oEB0oECGKdT2VPaU9tT3FPdU95T34EGpIEGpYEGpoEGp4EGqIEGqYEGqoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUW+gAVUyUAlgCWAJYALwCWAN4TzgCWAJYAFQCWgACBAhqAAIEGoggICAiALoEB0wgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUXGQAVUyUAlgCWAJYALwCWAN4TzwCWAJYAFQCWgACBAh6AAIEGoggICAiALoEB1AgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUXGQAVUyUAlgCWAJYALwCWAN4T0ACWAJYAFQCWgACBAh6AAIEGoggICAiALoEB1QgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAYgAVUyUAlgCWAJYALwCWAN4TzACWAJYAFQCWgACBBdqAAIEGoggICAiALoEB0QgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVUyUAlgCWAJYALwCWAN4T0QCWAJYAFQCWgACANoAAgQaiCAgICIAugQHWCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVTJQCWAJYAlgAvAJYA3hPNAJYAlgAVAJaAAIA2gACBBqIICAgIgC6BAdIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVSrAAFVMlAJYAlgCWAC8AlgDeFu0AlgCWABUAloAAgQYmgACBBqIICAgIgC6BAhgICIAACNIAOQAOVEsA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFU1pAJYAlgCWAC8AlgDeE9EAlgCWABUAloAAgDaAAIEGNAgICAiALoEB1ggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVTWkAlgCWAJYALwCWAN4TzQCWAJYAFQCWgACANoAAgQY0CAgICIAugQHSCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFU9DABVNaQCWAJYAlgAvAJYA3hbtAJYAlgAVAJaAAIEGlIAAgQY0CAgICIAugQIYCAiAAAjfEBIAzADNAM5UewAfANAA0VR8ACEAz1R9ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAllSFAC8AlgCIAJYBrQUjAJYAllSNAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQaxCIAdCIBugJ4ICIEGsAgS6/t4Z9MAOAA5AA5UkVSUAGaiAbYBt4BHgEiiVJVUloEGsoEGvYA52QAfACNUmQAOACZUmgAhAIdUm0qxAbYAiACnABUAJwAvAJZUo18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGr4BHgB2AQIAAgAQIgQaz0wA4ADkADlSlVK4AZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhUr1SwVLFUslSzVLRUtVS2gQa0gQa1gQa2gQa4gQa5gQa6gQa7gQa8gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVUlQCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBBrIICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVVJUAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQayCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVVNgAFVSVAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQa3gACBBrIICAgIgC6ATQgIgAAI0wA4ADkADlTmVOcAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVUlQCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBBrIICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVVJUAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQayCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVSVAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEGsggICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVUlQCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBBrIICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVVJUAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQayCAgICIAugFIICIAACNkAHwAjVTUADgAmVTYAIQCHVTdKsQG3AIgApwAVACcALwCWVT9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBq+ASIAdgECAAIAECIEGvtMAOAA5AA5VQVVJAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadVSlVLVUxVTVVOVU9VUIEGv4EGwIEGwYEGwoEGw4EGxIEGxYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVVJYAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQa9CAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVSWAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEGvQgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVUlgCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBBr0ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVVJYAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQa9CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVSWAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEGvQgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVUlgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBBr0ICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVVJYAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQa9CAgICIAugGUICIAACN8QEgDMAM0AzlW8AB8A0ADRVb0AIQDPVb4A0gAOACMA0wDUACYA1QAVABUAFQAnAGIAlgCWVcYALwCWAIgAlhMSSqAAlgCWVc4All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQXaCAiBBsgIgB0IgQI6gQXuCAiBBscIEpJn5P/TADgAOQAOVdJV1QBmogG2ExyAR4EBw6JV1lXXgQbJgQbUgDnZAB8AI1XaAA4AJlXbACEAh1XcSrIBtgCIAKcAFQAnAC8AllXkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQbGgEeAHYBAgACABAiBBsrTADgAOQAOVeZV7wBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqFXwVfFV8lXzVfRV9VX2VfeBBsuBBsyBBs2BBs+BBtCBBtGBBtKBBtOAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVXWAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEGyQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVV1gCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBBskICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVWGQAVVdYAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBBs6AAIEGyQgICAiALoBNCAiAAAjTADgAOQAOVidWKABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVXWAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEGyQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVV1gCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBBskICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVVdYAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQbJCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVXWAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEGyQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVV1gCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBBskICAgIgC6AUggIgAAI2QAfACNWdgAOACZWdwAhAIdWeEqyExwAiACnABUAJwAvAJZWgF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGxoEBw4AdgECAAIAECIEG1dMAOAA5AA5WglaKAGanE84TzxPQE8wT0RPNFu2BAdOBAdSBAdWBAdGBAdaBAdKBAhinVotWjFaNVo5Wj1aQVpGBBtaBBteBBtiBBtmBB32BB36BB3+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVFvoAFVXXAJYAlgCWAC8AlgDeE84AlgCWABUAloAAgQIagACBBtQICAgIgC6BAdMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVFwkAFVXXAJYAlgCWAC8AlgDeE88AlgCWABUAloAAgQIcgACBBtQICAgIgC6BAdQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVFvoAFVXXAJYAlgCWAC8AlgDeE9AAlgCWABUAloAAgQIagACBBtQICAgIgC6BAdUICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAF4AFVXXAJYAlgCWAC8AlgDeE8wAlgCWABUAloAAgQbagACBBtQICAgIgC6BAdEICIAACN8QEFbQVtFW0lbTAB9W1FbVACFW1lbXAA4AI1bYVtkAJgCHAIhW2wAnACcAE1bfAI4ALwAnAIgAkQBIAIhW5lbnAJZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAHYEG7YAEgASAAoEG3ICGgASAHYCIgBOAHYEHfIEG2wgSiapEYdMAOAA5AA5W61btAGahAJuAH6FW7oEG3YA52QAfACNW8QAOACZW8gAhAIdW8wBeAJsAiACnABUAJwAvAJZW+18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEG2oAfgB2AQIAAgAQIgQbe0wA4ADkADlb9VwcAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpVwhXCVcKVwtXDFcNVw5XD1cQgQbfgQbhgQbigQbkgQblgQbngQbogQbqgQbrgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVcUABVW7gCWAJYAlgAvAJYA3gCuAJYAlgAVAJaAAIEG4IAAgQbdCAgICIAugCIICIAACNIAOQAOVyIA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVbuAJYAlgCWAC8AlgDeAK8AlgCWABUAloAAgACAAIEG3QgICAiALoAjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVc1ABVW7gCWAJYAlgAvAJYA3gCwAJYAlgAVAJaAAIEG44AAgQbdCAgICIAugCQICIAACNIAOQAOV0MA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVbuAJYAlgCWAC8AlgDeALEAlgCWABUAloAAgACAAIEG3QgICAiALoAlCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVdWABVW7gCWAJYAlgAvAJYA3gCyAJYAlgAVAJaAAIEG5oAAgQbdCAgICIAugCYICIAACNIAOQAOV2QA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVbuAJYAlgCWAC8AlgDeALMAlgCWABUAloAAgDaAAIEG3QgICAiALoAnCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVd3ABVW7gCWAJYAlgAvAJYA3gC0AJYAlgAVAJaAAIEG6YAAgQbdCAgICIAugCgICIAACNMAOAA5AA5XhVeGAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBXwAVVu4AlgCWAJYALwCWAN4AtQCWAJYAFQCWgACAO4AAgQbdCAgICIAugCkICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVV5kAFVbuAJYAlgCWAC8AlgDeALYAlgCWABUAloAAgQbsgACBBt0ICAgIgC6AKggIgAAIW0NEUHJpY2VEYXRh0wA4ADkADleoV68AZqZKo08+V6tXrFetV66BBfCBBk6BBu6BBu+BBvCBBvGmV7BXsVeyV7NXtFe1gQbygQcJgQcggQc3gQdOgQdlgDlaY3VycmVuY3lJZFVwcmljZV8QD2ZpYXREYXlCeUNoYW5nZV8QEGNvaW5nZWNrb1ByaWNlSWTfEBIAzADNAM5XvAAfANAA0Ve9ACEAz1e+ANIADgAjANMA1AAmANUAFQAVABUAJwBeAJYAllfGAC8AlgCIAJYBrUqjAJYAllfOAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEG2ggIgQb0CIAdCIBugQXwCAiBBvMIEqbkmbvTADgAOQAOV9JX1QBmogG2AbeAR4BIolfWV9eBBvWBBwCAOdkAHwAjV9oADgAmV9sAIQCHV9xXsAG2AIgApwAVACcALwCWV+RfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBvKAR4AdgECAAIAECIEG9tMAOAA5AA5X5lfvAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoV/BX8VfyV/NX9Ff1V/ZX94EG94EG+IEG+YEG+4EG/IEG/YEG/oEG/4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVV9YAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQb1CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVfWAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEG9QgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVgZABVX1gCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEG+oAAgQb1CAgICIAugE0ICIAACNMAOAA5AA5YJ1goAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVV9YAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQb1CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVfWAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIEG9QgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVX1gCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBBvUICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVV9YAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQb1CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVfWAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEG9QgICAiALoBSCAiAAAjZAB8AI1h2AA4AJlh3ACEAh1h4V7ABtwCIAKcAFQAnAC8AlliAXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQbygEiAHYBAgACABAiBBwHTADgAOQAOWIJYigBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnWItYjFiNWI5Yj1iQWJGBBwKBBwOBBwSBBwWBBwaBBweBBwiAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVfXAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEHAAgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVX1wCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBBwAICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVV9cAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQcACAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFVfXAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEHAAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVX1wCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBBwAICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVV9cAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQcACAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVfXAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEHAAgICAiALoBlCAiAAAjfEBIAzADNAM5Y/QAfANAA0Vj+ACEAz1j/ANIADgAjANMA1AAmANUAFQAVABUAJwBeAJYAllkHAC8AlgCIAJYTEk8+AJYAllkPAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEG2ggIgQcLCIAdCIECOoEGTggIgQcKCBMAAAABGYu4Q9MAOAA5AA5ZE1kWAGaiAbYTHIBHgQHDolkXWRiBBwyBBxeAOdkAHwAjWRsADgAmWRwAIQCHWR1XsQG2AIgApwAVACcALwCWWSVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBwmAR4AdgECAAIAECIEHDdMAOAA5AA5ZJ1kwAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoWTFZMlkzWTRZNVk2WTdZOIEHDoEHD4EHEIEHEoEHE4EHFIEHFYEHFoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVWRcAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQcMCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVkXAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEHDAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVlaABVZFwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEHEYAAgQcMCAgICIAugE0ICIAACNMAOAA5AA5ZaFlpAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVWRcAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQcMCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFVkXAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEHDAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVZFwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBBwwICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVWRcAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQcMCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVkXAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEHDAgICAiALoBSCAiAAAjZAB8AI1m3AA4AJlm4ACEAh1m5V7ETHACIAKcAFQAnAC8AllnBXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQcJgQHDgB2AQIAAgAQIgQcY0wA4ADkADlnDWcsAZqcTzhPPE9ATzBPRE80W7YEB04EB1IEB1YEB0YEB1oEB0oECGKdZzFnNWc5Zz1nQWdFZ0oEHGYEHGoEHG4EHHIEHHYEHHoEHH4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUW+gAVWRgAlgCWAJYALwCWAN4TzgCWAJYAFQCWgACBAhqAAIEHFwgICAiALoEB0wgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUXCQAVWRgAlgCWAJYALwCWAN4TzwCWAJYAFQCWgACBAhyAAIEHFwgICAiALoEB1AgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUXGQAVWRgAlgCWAJYALwCWAN4T0ACWAJYAFQCWgACBAh6AAIEHFwgICAiALoEB1QgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAYgAVWRgAlgCWAJYALwCWAN4TzACWAJYAFQCWgACBBdqAAIEHFwgICAiALoEB0QgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVWRgAlgCWAJYALwCWAN4T0QCWAJYAFQCWgACANoAAgQcXCAgICIAugQHWCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVZGACWAJYAlgAvAJYA3hPNAJYAlgAVAJaAAIA2gACBBxcICAgIgC6BAdIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVSrIAFVkYAJYAlgCWAC8AlgDeFu0AlgCWABUAloAAgQbGgACBBxcICAgIgC6BAhgICIAACN8QEgDMAM0Azlo+AB8A0ADRWj8AIQDPWkAA0gAOACMA0wDUACYA1QAVABUAFQAnAF4AlgCWWkgALwCWAIgAlgGtV6sAlgCWWlAAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbaCAiBByIIgB0IgG6BBu4ICIEHIQgSZVEH3dMAOAA5AA5aVFpXAGaiAbYBt4BHgEiiWlhaWYEHI4EHLoA52QAfACNaXAAOACZaXQAhAIdaXleyAbYAiACnABUAJwAvAJZaZl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHIIBHgB2AQIAAgAQIgQck0wA4ADkADlpoWnEAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhaclpzWnRadVp2WndaeFp5gQclgQcmgQcngQcpgQcqgQcrgQcsgQctgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVaWACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBByMICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVWlgAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQcjCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVWpsAFVpYAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQcogACBByMICAgIgC6ATQgIgAAI0wA4ADkADlqpWqoAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVaWACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBByMICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVWlgAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQcjCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVpYAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEHIwgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVaWACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBByMICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVWlgAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQcjCAgICIAugFIICIAACNkAHwAjWvgADgAmWvkAIQCHWvpXsgG3AIgApwAVACcALwCWWwJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBByCASIAdgECAAIAECIEHL9MAOAA5AA5bBFsMAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadbDVsOWw9bEFsRWxJbE4EHMIEHMYEHMoEHM4EHNIEHNYEHNoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVWlkAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQcuCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVpZAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEHLggICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVaWQCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBBy4ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVWlkAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQcuCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVpZAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEHLggICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVaWQCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBBy4ICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVWlkAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQcuCAgICIAugGUICIAACN8QEgDMAM0Azlt/AB8A0ADRW4AAIQDPW4EA0gAOACMA0wDUACYA1QAVABUAFQAnAF4AlgCWW4kALwCWAIgAlgGtV6wAlgCWW5EAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbaCAiBBzkIgB0IgG6BBu8ICIEHOAgSmQvbHNMAOAA5AA5blVuYAGaiAbYBt4BHgEiiW5lbmoEHOoEHRYA52QAfACNbnQAOACZbngAhAIdbn1ezAbYAiACnABUAJwAvAJZbp18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHN4BHgB2AQIAAgAQIgQc70wA4ADkADlupW7IAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhbs1u0W7Vbtlu3W7hbuVu6gQc8gQc9gQc+gQdAgQdBgQdCgQdDgQdEgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVbmQCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBBzoICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVW5kAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQc6CAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVW9wAFVuZAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQc/gACBBzoICAgIgC6ATQgIgAAI0wA4ADkADlvqW+sAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVbmQCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBBzoICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVW5kAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQc6CAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVuZAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEHOggICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVbmQCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBBzoICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVW5kAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQc6CAgICIAugFIICIAACNkAHwAjXDkADgAmXDoAIQCHXDtXswG3AIgApwAVACcALwCWXENfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBzeASIAdgECAAIAECIEHRtMAOAA5AA5cRVxNAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadcTlxPXFBcUVxSXFNcVIEHR4EHSIEHSYEHSoEHS4EHTIEHTYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVW5oAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQdFCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVuaAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEHRQgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVbmgCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBB0UICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVW5oAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQdFCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVuaAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEHRQgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVbmgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBB0UICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVW5oAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQdFCAgICIAugGUICIAACN8QEgDMAM0AzlzAAB8A0ADRXMEAIQDPXMIA0gAOACMA0wDUACYA1QAVABUAFQAnAF4AlgCWXMoALwCWAIgAlgGtV60AlgCWXNIAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbaCAiBB1AIgB0IgG6BBvAICIEHTwgSMeRSX9MAOAA5AA5c1lzZAGaiAbYBt4BHgEiiXNpc24EHUYEHXIA52QAfACNc3gAOACZc3wAhAIdc4Fe0AbYAiACnABUAJwAvAJZc6F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHToBHgB2AQIAAgAQIgQdS0wA4ADkADlzqXPMAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhc9Fz1XPZc91z4XPlc+lz7gQdTgQdUgQdVgQdXgQdYgQdZgQdagQdbgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVc2gCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBB1EICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXNoAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQdRCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVXR0AFVzaAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQdWgACBB1EICAgIgC6ATQgIgAAI0wA4ADkADl0rXSwAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVc2gCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBB1EICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVXNoAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQdRCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVzaAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEHUQgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVc2gCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBB1EICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVXNoAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQdRCAgICIAugFIICIAACNkAHwAjXXoADgAmXXsAIQCHXXxXtAG3AIgApwAVACcALwCWXYRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB06ASIAdgECAAIAECIEHXdMAOAA5AA5dhl2OAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaddj12QXZFdkl2TXZRdlYEHXoEHX4EHYIEHYYEHYoEHY4EHZIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXNsAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQdcCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFVzbAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEHXAgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVc2wCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBB1wICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVXNsAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQdcCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFVzbAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEHXAgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVc2wCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBB1wICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXNsAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQdcCAgICIAugGUICIAACN8QEgDMAM0Azl4BAB8A0ADRXgIAIQDPXgMA0gAOACMA0wDUACYA1QAVABUAFQAnAF4AlgCWXgsALwCWAIgAlgGtV64AlgCWXhMAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbaCAiBB2cIgB0IgG6BBvEICIEHZggS3W33jtMAOAA5AA5eF14aAGaiAbYBt4BHgEiiXhteHIEHaIEHc4A52QAfACNeHwAOACZeIAAhAIdeIVe1AbYAiACnABUAJwAvAJZeKV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHZYBHgB2AQIAAgAQIgQdp0wA4ADkADl4rXjQAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqheNV42XjdeOF45XjpeO148gQdqgQdrgQdsgQdugQdvgQdwgQdxgQdygDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVeGwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBB2gICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXhsAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQdoCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVXl4AFV4bAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQdtgACBB2gICAgIgC6ATQgIgAAI0wA4ADkADl5sXm0AZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVeGwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBB2gICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVXhsAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQdoCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFV4bAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEHaAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVeGwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBB2gICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVXhsAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQdoCAgICIAugFIICIAACNkAHwAjXrsADgAmXrwAIQCHXr1XtQG3AIgApwAVACcALwCWXsVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB2WASIAdgECAAIAECIEHdNMAOAA5AA5ex17PAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZade0F7RXtJe017UXtVe1oEHdYEHdoEHd4EHeIEHeYEHeoEHe4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXhwAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQdzCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFV4cAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEHcwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVeHACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBB3MICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVXhwAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQdzCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFV4cAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEHcwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVeHACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBB3MICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVXhwAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQdzCAgICIAugGUICIAACNIAOQAOX0IA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFVXXAJYAlgCWAC8AlgDeE9EAlgCWABUAloAAgFmAAIEG1AgICAiALoEB1ggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVVdcAlgCWAJYALwCWAN4TzQCWAJYAFQCWgACANoAAgQbUCAgICIAugQHSCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFVexABVV1wCWAJYAlgAvAJYA3hbtAJYAlgAVAJaAAIEHCYAAgQbUCAgICIAugQIYCAiAAAjfEBIAzADNAM5fcgAfANAA0V9zACEAz190ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAll98AC8AlgCIAJYBrT+uAJYAll+EAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQeCCIAdCIBugQUfCAiBB4EIEm7XdH3TADgAOQAOX4hfiwBmogG2AbeAR4BIol+MX42BB4OBB46AOdkAHwAjX5AADgAmX5EAIQCHX5JKswG2AIgApwAVACcALwCWX5pfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB4CAR4AdgECAAIAECIEHhNMAOAA5AA5fnF+lAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoX6Zfp1+oX6lfql+rX6xfrYEHhYEHhoEHh4EHiYEHioEHi4EHjIEHjYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVX4wAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQeDCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFV+MAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEHgwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFV/PABVfjACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEHiIAAgQeDCAgICIAugE0ICIAACNMAOAA5AA5f3V/eAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVX4wAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQeDCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFV+MAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEHgwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVfjACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB4MICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVX4wAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQeDCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFV+MAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEHgwgICAiALoBSCAiAAAjZAB8AI2AsAA4AJmAtACEAh2AuSrMBtwCIAKcAFQAnAC8AlmA2XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQeAgEiAHYBAgACABAiBB4/TADgAOQAOYDhgQABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnYEFgQmBDYERgRWBGYEeBB5CBB5GBB5KBB5OBB5SBB5WBB5aAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFV+NAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEHjggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVfjQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBB44ICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVX40AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQeOCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFV+NAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEHjggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVfjQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBB44ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVX40AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQeOCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFV+NAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEHjggICAiALoBlCAiAAAjfEBIAzADNAM5gswAfANAA0WC0ACEAz2C1ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmC9AC8AlgCIAJYBrUqiAJYAlmDFAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQeZCIAdCIBugQXvCAiBB5gIEl2kDH7TADgAOQAOYMlgzABmogG2AbeAR4BIomDNYM6BB5qBB6WAOdkAHwAjYNEADgAmYNIAIQCHYNNKtAG2AIgApwAVACcALwCWYNtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB5eAR4AdgECAAIAECIEHm9MAOAA5AA5g3WDmAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoYOdg6GDpYOpg62DsYO1g7oEHnIEHnYEHnoEHoIEHoYEHooEHo4EHpIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVYM0AlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQeaCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWDNAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEHmggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWEQABVgzQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEHn4AAgQeaCAgICIAugE0ICIAACNMAOAA5AA5hHmEfAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVYM0AlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQeaCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWDNAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEHmggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVgzQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB5oICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYM0AlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQeaCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWDNAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEHmggICAiALoBSCAiAAAjZAB8AI2FtAA4AJmFuACEAh2FvSrQBtwCIAKcAFQAnAC8AlmF3XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQeXgEiAHYBAgACABAiBB6bTADgAOQAOYXlhgQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnYYJhg2GEYYVhhmGHYYiBB6eBB6iBB6mBB6qBB6uBB6yBB62AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWDOAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEHpQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVgzgCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBB6UICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYM4AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQelCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFWDOAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEHpQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVgzgCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBB6UICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYM4AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQelCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWDOAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEHpQgICAiALoBlCAiAAAjfEBIAzADNAM5h9AAfANAA0WH1ACEAz2H2ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmH+AC8AlgCIAJYBrUqjAJYAlmIGAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQewCIAdCIBugQXwCAiBB68IEsJJmJbTADgAOQAOYgpiDQBmogG2AbeAR4BIomIOYg+BB7GBB7yAOdkAHwAjYhIADgAmYhMAIQCHYhRKtQG2AIgApwAVACcALwCWYhxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB66AR4AdgECAAIAECIEHstMAOAA5AA5iHmInAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoYihiKWIqYitiLGItYi5iL4EHs4EHtIEHtYEHt4EHuIEHuYEHuoEHu4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVYg4AlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQexCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWIOAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEHsQgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWJRABViDgCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEHtoAAgQexCAgICIAugE0ICIAACNMAOAA5AA5iX2JgAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVYg4AlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQexCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWIOAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEHsQgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABViDgCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB7EICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYg4AlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQexCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWIOAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEHsQgICAiALoBSCAiAAAjZAB8AI2KuAA4AJmKvACEAh2KwSrUBtwCIAKcAFQAnAC8AlmK4XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQeugEiAHYBAgACABAiBB73TADgAOQAOYrpiwgBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnYsNixGLFYsZix2LIYsmBB76BB7+BB8CBB8GBB8KBB8OBB8SAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWIPAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEHvAgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABViDwCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBB7wICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYg8AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQe8CAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFWIPAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEHvAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABViDwCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBB7wICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVYg8AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQe8CAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWIPAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEHvAgICAiALoBlCAiAAAjfEBIAzADNAM5jNQAfANAA0WM2ACEAz2M3ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmM/AC8AlgCIAJYBrUqkAJYAlmNHAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQfHCIAdCIBugQXxCAiBB8YIEvg+jSjTADgAOQAOY0tjTgBmogG2AbeAR4BIomNPY1CBB8iBB9OAOdkAHwAjY1MADgAmY1QAIQCHY1VKtgG2AIgApwAVACcALwCWY11fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB8WAR4AdgECAAIAECIEHydMAOAA5AA5jX2NoAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoY2ljamNrY2xjbWNuY29jcIEHyoEHy4EHzIEHzoEHz4EH0IEH0YEH0oA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVY08AlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQfICAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWNPAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEHyAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWOSABVjTwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEHzYAAgQfICAgICIAugE0ICIAACNMAOAA5AA5joGOhAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVY08AlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQfICAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWNPAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEHyAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVjTwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB8gICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVY08AlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQfICAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWNPAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEHyAgICAiALoBSCAiAAAjZAB8AI2PvAA4AJmPwACEAh2PxSrYBtwCIAKcAFQAnAC8AlmP5XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQfFgEiAHYBAgACABAiBB9TTADgAOQAOY/tkAwBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnZARkBWQGZAdkCGQJZAqBB9WBB9aBB9eBB9iBB9mBB9qBB9uAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWNQAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEH0wgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVjUACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBB9MICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVY1AAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQfTCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFWNQAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEH0wgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVjUACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBB9MICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVY1AAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQfTCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWNQAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEH0wgICAiALoBlCAiAAAjfEBIAzADNAM5kdgAfANAA0WR3ACEAz2R4ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmSAAC8AlgCIAJYBrUqlAJYAlmSIAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQfeCIAdCIBugQXyCAiBB90IEqQeSE7TADgAOQAOZIxkjwBmogG2AbeAR4BIomSQZJGBB9+BB+qAOdkAHwAjZJQADgAmZJUAIQCHZJZKtwG2AIgApwAVACcALwCWZJ5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB9yAR4AdgECAAIAECIEH4NMAOAA5AA5koGSpAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoZKpkq2SsZK1krmSvZLBksYEH4YEH4oEH44EH5YEH5oEH54EH6IEH6YA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVZJAAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQffCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWSQAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEH3wgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWTTABVkkACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEH5IAAgQffCAgICIAugE0ICIAACNMAOAA5AA5k4WTiAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVZJAAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQffCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWSQAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEH3wgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVkkACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB98ICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZJAAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQffCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWSQAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEH3wgICAiALoBSCAiAAAjZAB8AI2UwAA4AJmUxACEAh2UySrcBtwCIAKcAFQAnAC8AlmU6XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQfcgEiAHYBAgACABAiBB+vTADgAOQAOZTxlRABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnZUVlRmVHZUhlSWVKZUuBB+yBB+2BB+6BB++BB/CBB/GBB/KAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWSRAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEH6ggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVkkQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBB+oICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZJEAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQfqCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFWSRAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEH6ggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVkkQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBB+oICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZJEAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQfqCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWSRAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEH6ggICAiALoBlCAiAAAjfEBIAzADNAM5ltwAfANAA0WW4ACEAz2W5ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmXBAC8AlgCIAJYBrUqmAJYAlmXJAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQf1CIAdCIBugQXzCAiBB/QIEi3WqhXTADgAOQAOZc1l0ABmogG2AbeAR4BIomXRZdKBB/aBCAGAOdkAHwAjZdUADgAmZdYAIQCHZddKuAG2AIgApwAVACcALwCWZd9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB/OAR4AdgECAAIAECIEH99MAOAA5AA5l4WXqAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoZetl7GXtZe5l72XwZfFl8oEH+IEH+YEH+oEH/IEH/YEH/oEH/4EIAIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVZdEAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQf2CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWXRAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEH9ggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWYUABVl0QCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEH+4AAgQf2CAgICIAugE0ICIAACNMAOAA5AA5mImYjAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVZdEAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQf2CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWXRAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEH9ggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVl0QCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBB/YICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZdEAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQf2CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWXRAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEH9ggICAiALoBSCAiAAAjZAB8AI2ZxAA4AJmZyACEAh2ZzSrgBtwCIAKcAFQAnAC8AlmZ7XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQfzgEiAHYBAgACABAiBCALTADgAOQAOZn1mhQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnZoZmh2aIZolmimaLZoyBCAOBCASBCAWBCAaBCAeBCAiBCAmAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWXSAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEIAQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVl0gCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCAEICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZdIAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQgBCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVDcQAFWXSAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQFggACBCAEICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZdIAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQgBCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWXSAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEIAQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVl0gCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCAEICAgIgC6AZQgIgAAI3xASAMwAzQDOZvgAHwDQANFm+QAhAM9m+gDSAA4AIwDTANQAJgDVABUAFQAVACcAYgCWAJZnAgAvAJYAiACWAa1KpwCWAJZnCgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBdoICIEIDAiAHQiAboEF9AgIgQgLCBJXgtoJ0wA4ADkADmcOZxEAZqIBtgG3gEeASKJnEmcTgQgNgQgYgDnZAB8AI2cWAA4AJmcXACEAh2cYSrkBtgCIAKcAFQAnAC8AlmcgXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQgKgEeAHYBAgACABAiBCA7TADgAOQAOZyJnKwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqGcsZy1nLmcvZzBnMWcyZzOBCA+BCBCBCBGBCBOBCBSBCBWBCBaBCBeAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWcSAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEIDQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVnEgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCA0ICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVnVQAVZxIAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCBKAAIEIDQgICAiALoBNCAiAAAjTADgAOQAOZ2NnZABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWcSAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEIDQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVnEgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIA2gACBCA0ICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVZxIAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQgNCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWcSAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEIDQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVnEgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCA0ICAgIgC6AUggIgAAI2QAfACNnsgAOACZnswAhAIdntEq5AbcAiACnABUAJwAvAJZnvF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEICoBIgB2AQIAAgAQIgQgZ0wA4ADkADme+Z8YAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp2fHZ8hnyWfKZ8tnzGfNgQgagQgbgQgcgQgdgQgegQgfgQgggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFSFbABVnEwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIEC3YAAgQgYCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWcTAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEIGAgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVnEwCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCBgICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUhiQAVZxMAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBAuGAAIEIGAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVnEwCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCBgICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVZxMAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQgYCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWcTAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEIGAgICAiALoBlCAiAAAjfEBIAzADNAM5oOQAfANAA0Wg6ACEAz2g7ANIADgAjANMA1AAmANUAFQAVABUAJwBiAJYAlmhDAC8AlgCIAJYBrUqoAJYAlmhLAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEF2ggIgQgjCIAdCIBugQX1CAiBCCIIErxtMcbTADgAOQAOaE9oUgBmogG2AbeAR4BIomhTaFSBCCSBCC+AOdkAHwAjaFcADgAmaFgAIQCHaFlKugG2AIgApwAVACcALwCWaGFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCCGAR4AdgECAAIAECIEIJdMAOAA5AA5oY2hsAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoaG1obmhvaHBocWhyaHNodIEIJoEIJ4EIKIEIKoEIK4EILIEILYEILoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVaFMAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQgkCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWhTAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEIJAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFWiWABVoUwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEIKYAAgQgkCAgICIAugE0ICIAACNMAOAA5AA5opGilAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVaFMAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQgkCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFWhTAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEIJAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVoUwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCCQICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaFMAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQgkCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWhTAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEIJAgICAiALoBSCAiAAAjZAB8AI2jzAA4AJmj0ACEAh2j1SroBtwCIAKcAFQAnAC8Almj9XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQghgEiAHYBAgACABAiBCDDTADgAOQAOaP9pBwBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnaQhpCWkKaQtpDGkNaQ6BCDGBCDKBCDOBCDSBCDWBCDaBCDiAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWhUAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEILwgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVoVACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCC8ICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaFQAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQgvCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVJU0AFWhUAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQMngACBCC8ICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaFQAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQgvCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVaV0AFWhUAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgQg3gACBCC8ICAgIgC6AZAgIgAAIXxAkTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0YVRyYW5zZm9ybWVy3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaFQAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQgvCAgICIAugGUICIAACN8QEgDMAM0Azml7AB8A0ADRaXwAIQDPaX0A0gAOACMA0wDUACYA1QAVABUAFQAnAGIAlgCWaYUALwCWAIgAlgGtSqkAlgCWaY0All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQXaCAiBCDsIgB0IgG6BBfYICIEIOggSq0Fa8NMAOAA5AA5pkWmUAGaiAbYBt4BHgEiiaZVploEIPIEIR4A52QAfACNpmQAOACZpmgAhAIdpm0q7AbYAiACnABUAJwAvAJZpo18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIOYBHgB2AQIAAgAQIgQg90wA4ADkADmmlaa4AZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhpr2mwabFpsmmzabRptWm2gQg+gQg/gQhAgQhCgQhDgQhEgQhFgQhGgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVplQCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCDwICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaZUAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQg8CAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVadgAFWmVAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQhBgACBCDwICAgIgC6ATQgIgAAI0wA4ADkADmnmaecAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVplQCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCDwICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVaZUAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQg8CAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWmVAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEIPAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVplQCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCDwICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVaZUAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQg8CAgICIAugFIICIAACNkAHwAjajUADgAmajYAIQCHajdKuwG3AIgApwAVACcALwCWaj9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCDmASIAdgECAAIAECIEISNMAOAA5AA5qQWpJAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadqSmpLakxqTWpOak9qUIEISYEISoEIS4EITIEITYEIToEIT4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaZYAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQhHCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWmWAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEIRwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVplgCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCEcICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVaZYAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQhHCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWmWAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEIRwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVplgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCEcICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVaZYAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQhHCAgICIAugGUICIAACN8QEgDMAM0Azmq8AB8A0ADRar0AIQDPar4A0gAOACMA0wDUACYA1QAVABUAFQAnAGIAlgCWasYALwCWAIgAlgGtCdIAlgCWas4All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQXaCAiBCFIIgB0IgG6A+wgIgQhRCBLQ1dvV0wA4ADkADmrSatUAZqIBtgG3gEeASKJq1mrXgQhTgQhegDnZAB8AI2raAA4AJmrbACEAh2rcSrwBtgCIAKcAFQAnAC8AlmrkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQhQgEeAHYBAgACABAiBCFTTADgAOQAOauZq7wBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqGrwavFq8mrzavRq9Wr2aveBCFWBCFaBCFeBCFmBCFqBCFuBCFyBCF2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWrWAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEIUwgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVq1gCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCFMICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVrGQAVatYAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCFiAAIEIUwgICAiALoBNCAiAAAjTADgAOQAOaydrKABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWrWAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEIUwgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVq1gCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCFMICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVatYAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQhTCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWrWAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEIUwgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVq1gCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCFMICAgIgC6AUggIgAAI2QAfACNrdgAOACZrdwAhAIdreEq8AbcAiACnABUAJwAvAJZrgF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIUIBIgB2AQIAAgAQIgQhf0wA4ADkADmuCa4oAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp2uLa4xrjWuOa49rkGuRgQhggQhhgQhigQhjgQhkgQhlgQhmgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVq1wCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCF4ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVatcAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQheCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWrXAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEIXggICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQtAABVq1wCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEBMIAAgQheCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWrXAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEIXggICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVq1wCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCF4ICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVatcAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQheCAgICIAugGUICIAACN8QEgDMAM0Azmv9AB8A0ADRa/4AIQDPa/8A0gAOACMA0wDUACYA1QAVABUAFQAnAGIAlgCWbAcALwCWAIgAlgGtCeQAlgCWbA8All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQXaCAiBCGkIgB0IgG6BAQ0ICIEIaAgS7pdv6tMAOAA5AA5sE2wWAGaiAbYBt4BHgEiibBdsGIEIaoEIdYA52QAfACNsGwAOACZsHAAhAIdsHUq9AbYAiACnABUAJwAvAJZsJV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIZ4BHgB2AQIAAgAQIgQhr0wA4ADkADmwnbDAAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhsMWwybDNsNGw1bDZsN2w4gQhsgQhtgQhugQhwgQhxgQhygQhzgQh0gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVsFwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCGoICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbBcAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQhqCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVbFoAFWwXAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQhvgACBCGoICAgIgC6ATQgIgAAI0wA4ADkADmxobGkAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVsFwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCGoICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVbBcAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQhqCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWwXAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEIaggICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVsFwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCGoICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVbBcAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQhqCAgICIAugFIICIAACNkAHwAjbLcADgAmbLgAIQCHbLlKvQG3AIgApwAVACcALwCWbMFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCGeASIAdgECAAIAECIEIdtMAOAA5AA5sw2zLAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadszGzNbM5sz2zQbNFs0oEId4EIeIEIeYEIeoEIe4EIfIEIfYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbBgAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQh1CAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFWwYAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEIdQgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVsGACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCHUICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVbBgAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQh1CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFWwYAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEIdQgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVsGACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCHUICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbBgAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQh1CAgICIAugGUICIAACN8QEgDMAM0Azm0+AB8A0ADRbT8AIQDPbUAA0gAOACMA0wDUACYA1QAVABUAFQAnAGIAlgCWbUgALwCWAIgAlgGtSqwAlgCWbVAAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQXaCAiBCIAIgB0IgG6BBfcICIEIfwgSXhgbLdMAOAA5AA5tVG1XAGaiAbYBt4BHgEiibVhtWYEIgYEIjIA52QAfACNtXAAOACZtXQAhAIdtXkq+AbYAiACnABUAJwAvAJZtZl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIfoBHgB2AQIAAgAQIgQiC0wA4ADkADm1obXEAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhtcm1zbXRtdW12bXdteG15gQiDgQiEgQiFgQiHgQiIgQiJgQiKgQiLgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVtWACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCIEICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbVgAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQiBCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVbZsAFW1YAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQiGgACBCIEICAgIgC6ATQgIgAAI0wA4ADkADm2pbaoAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVtWACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCIEICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVbVgAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQiBCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFW1YAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEIgQgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVtWACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCIEICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVbVgAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQiBCAgICIAugFIICIAACNkAHwAjbfgADgAmbfkAIQCHbfpKvgG3AIgApwAVACcALwCWbgJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCH6ASIAdgECAAIAECIEIjdMAOAA5AA5uBG4MAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaduDW4Obg9uEG4RbhJuE4EIjoEIj4EIkIEIkYEIkoEIk4EIlIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbVkAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQiMCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFW1ZAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEIjAgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVtWQCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCIwICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUNxAAVbVkAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBAWCAAIEIjAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVtWQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCIwICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbVkAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQiMCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFW1ZAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEIjAgICAiALoBlCAiAAAjSADkADm5/AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVIywCWAJYAlgAvAJYA3hPRAJYAlgAVAJaAAIBZgACBBdQICAgIgC6BAdYICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFUjLAJYAlgCWAC8AlgDeE80AlgCWABUAloAAgDaAAIEF1AgICAiALoEB0ggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVKrwAVSMsAlgCWAJYALwCWAN4W7QCWAJYAFQCWgACBBg+AAIEF1AgICAiALoECGAgIgAAI3xASAMwAzQDObq8AHwDQANFusAAhAM9usQDSAA4AIwDTANQAJgDVABUAFQAVACcAUwCWAJZuuQAvAJYAiACWAa0J8ACWAJZuwQCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASA5ggIgQibCIAdCIBugQEYCAiBCJoIElJyYsbTADgAOQAObsVuyABmogG2AbeAR4BIom7JbsqBCJyBCKeAOdkAHwAjbs0ADgAmbs4AIQCHbs8KEwG2AIgApwAVACcALwCWbtdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCJmAR4AdgECAAIAECIEIndMAOAA5AA5u2W7iAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKobuNu5G7lbuZu527obulu6oEInoEIn4EIoIEIooEIo4EIpIEIpYEIpoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVbskAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQicCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFW7JAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEInAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFW8MABVuyQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEIoYAAgQicCAgICIAugE0ICIAACNMAOAA5AA5vGm8bAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVbskAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQicCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFW7JAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIEInAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVuyQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCJwICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbskAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQicCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFW7JAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEInAgICAiALoBSCAiAAAjZAB8AI29pAA4AJm9qACEAh29rChMBtwCIAKcAFQAnAC8Alm9zXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQiZgEiAHYBAgACABAiBCKjTADgAOQAOb3VvfQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnb35vf2+Ab4Fvgm+Db4SBCKmBCKqBCKuBCKyBCK2BCK6BCK+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVDZYAFW7KAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgQFcgACBCKcICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVbsoAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQinCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFW7KAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEIpwgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQ3EABVuygCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEBYIAAgQinCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFW7KAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEIpwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVuygCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCKcICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVbsoAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQinCAgICIAugGUICIAACN8QEgDMAM0Azm/wAB8A0ADRb/EAIQDPb/IA0gAOACMA0wDUACYA1QAVABUAFQAnAFMAlgCWb/oALwCWAIgAlgGtCfEAlgCWcAIAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgOYICIEIsgiAHQiAboEBGQgIgQixCBJEtoBU0wA4ADkADnAGcAkAZqIBtgG3gEeASKJwCnALgQizgQi+gDnZAB8AI3AOAA4AJnAPACEAh3AQChQBtgCIAKcAFQAnAC8AlnAYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQiwgEeAHYBAgACABAiBCLTTADgAOQAOcBpwIwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqHAkcCVwJnAncChwKXAqcCuBCLWBCLaBCLeBCLmBCLqBCLuBCLyBCL2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXAKAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEIswgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVwCgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCLMICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVwTQAVcAoAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCLiAAIEIswgICAiALoBNCAiAAAjTADgAOQAOcFtwXABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXAKAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEIswgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABVwCgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCLMICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVcAoAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQizCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXAKAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEIswgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVwCgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCLMICAgIgC6AUggIgAAI2QAfACNwqgAOACZwqwAhAIdwrAoUAbcAiACnABUAJwAvAJZwtF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIsIBIgB2AQIAAgAQIgQi/0wA4ADkADnC2cL4AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp3C/cMBwwXDCcMNwxHDFgQjAgQjBgQjCgQjDgQjEgQjFgQjGgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVwCwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCL4ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVcAsAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQi+CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXALAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEIvggICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABVwCwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCL4ICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVcAsAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQi+CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXALAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEIvggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVwCwCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCL4ICAgIgC6AZQgIgAAI3xASAMwAzQDOcTEAHwDQANFxMgAhAM9xMwDSAA4AIwDTANQAJgDVABUAFQAVACcAUwCWAJZxOwAvAJYAiACWAa0J8gCWAJZxQwCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASA5ggIgQjJCIAdCIBugQEaCAiBCMgIEve24UbTADgAOQAOcUdxSgBmogG2AbeAR4BIonFLcUyBCMqBCNWAOdkAHwAjcU8ADgAmcVAAIQCHcVEKFQG2AIgApwAVACcALwCWcVlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCMeAR4AdgECAAIAECIEIy9MAOAA5AA5xW3FkAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKocWVxZnFncWhxaXFqcWtxbIEIzIEIzYEIzoEI0IEI0YEI0oEI04EI1IA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVcUsAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQjKCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXFLAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEIyggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFXGOABVxSwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEIz4AAgQjKCAgICIAugE0ICIAACNMAOAA5AA5xnHGdAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVcUsAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQjKCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFXFLAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEIyggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVxSwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCMoICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVcUsAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQjKCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXFLAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEIyggICAiALoBSCAiAAAjZAB8AI3HrAA4AJnHsACEAh3HtChUBtwCIAKcAFQAnAC8AlnH1XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQjHgEiAHYBAgACABAiBCNbTADgAOQAOcfdx/wBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWncgByAXICcgNyBHIFcgaBCNeBCNiBCNmBCNqBCNuBCNyBCN2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXFMAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEI1QgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVxTACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCNUICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVcUwAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQjVCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFXFMAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEI1QgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVxTACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCNUICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVcUwAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQjVCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXFMAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEI1QgICAiALoBlCAiAAAjfEBIAzADNAM5ycgAfANAA0XJzACEAz3J0ANIADgAjANMA1AAmANUAFQAVABUAJwBTAJYAlnJ8AC8AlgCIAJYBrQnzAJYAlnKEAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIDmCAiBCOAIgB0IgG6BARsICIEI3wgSWSCECNMAOAA5AA5yiHKLAGaiAbYBt4BHgEiicoxyjYEI4YEI7IA52QAfACNykAAOACZykQAhAIdykgoWAbYAiACnABUAJwAvAJZyml8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEI3oBHgB2AQIAAgAQIgQji0wA4ADkADnKccqUAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqhypnKncqhyqXKqcqtyrHKtgQjjgQjkgQjlgQjngQjogQjpgQjqgQjrgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVyjACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCOEICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVcowAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQjhCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVcs8AFXKMAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQjmgACBCOEICAgIgC6ATQgIgAAI0wA4ADkADnLdct4AZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVyjACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCOEICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVcowAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQjhCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXKMAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEI4QgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVyjACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCOEICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVcowAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQjhCAgICIAugFIICIAACNkAHwAjcywADgAmcy0AIQCHcy4KFgG3AIgApwAVACcALwCWczZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCN6ASIAdgECAAIAECIEI7dMAOAA5AA5zOHNAAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZadzQXNCc0NzRHNFc0ZzR4EI7oEI74EI8IEI8YEI8oEI84EI9IA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVco0AlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQjsCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXKNAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEI7AgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVyjQCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCOwICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABULQAAVco0AlgCWAJYALwCWAN4CdACWAJYAFQCWgACBATCAAIEI7AgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVyjQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCOwICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVco0AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQjsCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXKNAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEI7AgICAiALoBlCAiAAAjSADkADnOzAOaggC3fEBBztnO3c7hzuQAfc7pzuwAhc7xzvQAOACNzvnO/ACYAhwCIc8EAJwAnABNzxQCOAC8AJwCIAJEAPwCIc8xzzQCWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BCQiABIAEgAKBCPiAhoAEgB2AiIAKgB2BCceBCPcIErxiUdnTADgAOQAOc9Fz0wBmoQCbgB+hc9SBCPmAOdkAHwAjc9cADgAmc9gAIQCHc9kAVQCbAIgApwAVACcALwCWc+FfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCPaAH4AdgECAAIAECIEI+tMAOAA5AA5z43PtAGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqXPuc+9z8HPxc/Jz83P0c/Vz9oEI+4EI/YEI/oEJAIEJAYEJA4EJBIEJBoEJB4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABVz+gAVc9QAlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBCPyAAIEI+QgICAiALoAiCAiAAAjSADkADnQIAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVz1ACWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBCPkICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV0GwAVc9QAlgCWAJYALwCWAN4AsACWAJYAFQCWgACBCP+AAIEI+QgICAiALoAkCAiAAAjSADkADnQpAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABVz1ACWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBCPkICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV0PAAVc9QAlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBCQKAAIEI+QgICAiALoAmCAiAAAjSADkADnRKAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABVz1ACWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBCPkICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV0XQAVc9QAlgCWAJYALwCWAN4AtACWAJYAFQCWgACBCQWAAIEI+QgICAiALoAoCAiAAAjTADgAOQAOdGt0bABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFXPUAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIEI+QgICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQA/ABVz1ACWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIAKgACBCPkICAgIgC6AKggIgAAI0wA4ADkADnSNdJYAZqh0jnSPdJAUaHSSdJMJ5AnSgQkJgQkKgQkLgQHjgQkMgQkNgQENgPuodJd0mHSZdJp0m3ScdJ10noEJDoEJJYEJPYEJVIEJa4EJgoEJmYEJsIA5VnBvc3RlclZjaGFpbnNeYXBwRGVzY3JpcHRpb25aaWRlbnRpZmllcltpc0Nvbm5lY3RlZN8QEgDMAM0AznSmAB8A0ADRdKcAIQDPdKgA0gAOACMA0wDUACYA1QAVABUAFQAnAFUAlgCWdLAALwCWAIgAlgGtdI4AlgCWdLgAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQj2CAiBCRAIgB0IgG6BCQkICIEJDwgSj8poONMAOAA5AA50vHS/AGaiAbYBt4BHgEiidMB0wYEJEYEJHIA52QAfACN0xAAOACZ0xQAhAId0xnSXAbYAiACnABUAJwAvAJZ0zl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJDoBHgB2AQIAAgAQIgQkS0wA4ADkADnTQdNkAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqh02nTbdNx03XTedN904HThgQkTgQkUgQkVgQkXgQkYgQkZgQkagQkbgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV0wACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCREICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdMAAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQkRCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVdQMAFXTAAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQkWgACBCREICAgIgC6ATQgIgAAI0wA4ADkADnURdRIAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV0wACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCREICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVdMAAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQkRCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXTAAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEJEQgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV0wACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCREICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVdMAAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQkRCAgICIAugFIICIAACNkAHwAjdWAADgAmdWEAIQCHdWJ0lwG3AIgApwAVACcALwCWdWpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCQ6ASIAdgECAAIAECIEJHdMAOAA5AA51bHV0AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZad1dXV2dXd1eHV5dXp1e4EJHoEJH4EJIIEJIYEJIoEJI4EJJIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdMEAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQkcCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXTBAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEJHAgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV0wQCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCRwICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABULQAAVdMEAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBATCAAIEJHAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV0wQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCRwICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdMEAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQkcCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXTBAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEJHAgICAiALoBlCAiAAAjfEBIAzADNAM515wAfANAA0XXoACEAz3XpANIADgAjANMA1AAmANUAFQAVABUAJwBVAJYAlnXxAC8AlgCIAJYBrXSPAJYAlnX5AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEI9ggIgQknCIAdCIBugQkKCAiBCSYIEphjUd7TADgAOQAOdf12AABmogG2AbeAR4BIonYBdgKBCSiBCTOAOdkAHwAjdgUADgAmdgYAIQCHdgd0mAG2AIgApwAVACcALwCWdg9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCSWAR4AdgECAAIAECIEJKdMAOAA5AA52EXYaAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKodht2HHYddh52H3YgdiF2IoEJKoEJK4EJLIEJLoEJL4EJMIEJMYEJMoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVdgEAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQkoCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXYBAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEJKAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFXZEABV2AQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEJLYAAgQkoCAgICIAugE0ICIAACNMAOAA5AA52UnZTAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVdgEAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQkoCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFXYBAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEJKAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV2AQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCSgICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdgEAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQkoCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXYBAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEJKAgICAiALoBSCAiAAAjZAB8AI3ahAA4AJnaiACEAh3ajdJgBtwCIAKcAFQAnAC8AlnarXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQklgEiAHYBAgACABAiBCTTTADgAOQAOdq12tQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWndrZ2t3a4drl2una7dryBCTWBCTaBCTeBCTiBCTmBCTqBCTyAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXYCAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEJMwgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV2AgCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCTMICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdgIAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQkzCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVJU0AFXYCAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQMngACBCTMICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVdgIAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQkzCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVdwsAFXYCAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgQk7gACBCTMICAgIgC6AZAgIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXYCAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEJMwgICAiALoBlCAiAAAjfEBIAzADNAM53KQAfANAA0XcqACEAz3crANIADgAjANMA1AAmANUAFQAVABUAJwBVAJYAlnczAC8AlgCIAJYBrXSQAJYAlnc7AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEI9ggIgQk/CIAdCIBugQkLCAiBCT4IEmsgYQXTADgAOQAOdz93QgBmogG2AbeAR4BIondDd0SBCUCBCUuAOdkAHwAjd0cADgAmd0gAIQCHd0l0mQG2AIgApwAVACcALwCWd1FfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCT2AR4AdgECAAIAECIEJQdMAOAA5AA53U3dcAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKod113Xndfd2B3YXdid2N3ZIEJQoEJQ4EJRIEJRoEJR4EJSIEJSYEJSoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVd0MAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQlACAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXdDAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEJQAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFXeGABV3QwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEJRYAAgQlACAgICIAugE0ICIAACNMAOAA5AA53lHeVAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVd0MAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQlACAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFXdDAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEJQAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV3QwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCUAICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVd0MAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQlACAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXdDAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEJQAgICAiALoBSCAiAAAjZAB8AI3fjAA4AJnfkACEAh3fldJkBtwCIAKcAFQAnAC8AlnftXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQk9gEiAHYBAgACABAiBCUzTADgAOQAOd+939wBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnd/h3+Xf6d/t3/Hf9d/6BCU2BCU6BCU+BCVCBCVGBCVKBCVOAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXdEAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEJSwgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV3RACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCUsICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVd0QAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQlLCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFXdEAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEJSwgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV3RACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCUsICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVd0QAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQlLCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXdEAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEJSwgICAiALoBlCAiAAAjfEBIAzADNAM54agAfANAA0XhrACEAz3hsANIADgAjANMA1AAmANUAFQAVABUAJwBVAJYAlnh0AC8AlgCIAJYBrRRoAJYAlnh8AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEI9ggIgQlWCIAdCIBugQHjCAiBCVUIEmD4rUHTADgAOQAOeIB4gwBmogG2AbeAR4BIoniEeIWBCVeBCWKAOdkAHwAjeIgADgAmeIkAIQCHeIp0mgG2AIgApwAVACcALwCWeJJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCVSAR4AdgECAAIAECIEJWNMAOAA5AA54lHidAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoeJ54n3igeKF4onijeKR4pYEJWYEJWoEJW4EJXYEJXoEJX4EJYIEJYYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVeIQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQlXCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXiEAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEJVwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFXjHABV4hACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEJXIAAgQlXCAgICIAugE0ICIAACNMAOAA5AA541XjWAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVeIQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQlXCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFXiEAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEJVwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV4hACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCVcICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVeIQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQlXCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXiEAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEJVwgICAiALoBSCAiAAAjZAB8AI3kkAA4AJnklACEAh3kmdJoBtwCIAKcAFQAnAC8AlnkuXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQlUgEiAHYBAgACABAiBCWPTADgAOQAOeTB5OABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWneTl5Onk7eTx5PXk+eT+BCWSBCWWBCWaBCWeBCWiBCWmBCWqAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXiFAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEJYggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV4hQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCWIICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVeIUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQliCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVC0AAFXiFAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQEwgACBCWIICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVeIUAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQliCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXiFAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEJYggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV4hQCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCWIICAgIgC6AZQgIgAAI3xASAMwAzQDOeasAHwDQANF5rAAhAM95rQDSAA4AIwDTANQAJgDVABUAFQAVACcAVQCWAJZ5tQAvAJYAiACWAa10kgCWAJZ5vQCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCPYICIEJbQiAHQiAboEJDAgIgQlsCBI8NuqR0wA4ADkADnnBecQAZqIBtgG3gEeASKJ5xXnGgQlugQl5gDnZAB8AI3nJAA4AJnnKACEAh3nLdJsBtgCIAKcAFQAnAC8AlnnTXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQlrgEeAHYBAgACABAiBCW/TADgAOQAOedV53gBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqHnfeeB54XnieeN55HnleeaBCXCBCXGBCXKBCXSBCXWBCXaBCXeBCXiAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXnFAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEJbggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV5xQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCW4ICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV6CAAVecUAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCXOAAIEJbggICAiALoBNCAiAAAjTADgAOQAOehZ6FwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXnFAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEJbggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABV5xQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCW4ICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVecUAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQluCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXnFAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEJbggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV5xQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCW4ICAgIgC6AUggIgAAI2QAfACN6ZQAOACZ6ZgAhAId6Z3SbAbcAiACnABUAJwAvAJZ6b18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJa4BIgB2AQIAAgAQIgQl60wA4ADkADnpxenkAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp3p6ent6fHp9en56f3qAgQl7gQl8gQl9gQl+gQl/gQmAgQmBgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV5xgCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCXkICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVecYAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQl5CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXnGAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEJeQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABV5xgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCXkICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVecYAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQl5CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXnGAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEJeQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV5xgCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCXkICAgIgC6AZQgIgAAI3xASAMwAzQDOeuwAHwDQANF67QAhAM967gDSAA4AIwDTANQAJgDVABUAFQAVACcAVQCWAJZ69gAvAJYAiACWAa10kwCWAJZ6/gCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCPYICIEJhAiAHQiAboEJDQgIgQmDCBI3Ds1P0wA4ADkADnsCewUAZqIBtgG3gEeASKJ7BnsHgQmFgQmQgDnZAB8AI3sKAA4AJnsLACEAh3sMdJwBtgCIAKcAFQAnAC8AlnsUXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQmCgEeAHYBAgACABAiBCYbTADgAOQAOexZ7HwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqHsgeyF7InsjeyR7JXsmeyeBCYeBCYiBCYmBCYuBCYyBCY2BCY6BCY+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXsGAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEJhQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV7BgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCYUICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV7SQAVewYAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCYqAAIEJhQgICAiALoBNCAiAAAjTADgAOQAOe1d7WABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXsGAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEJhQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABV7BgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCYUICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVewYAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQmFCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXsGAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEJhQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV7BgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCYUICAgIgC6AUggIgAAI2QAfACN7pgAOACZ7pwAhAId7qHScAbcAiACnABUAJwAvAJZ7sF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJgoBIgB2AQIAAgAQIgQmR0wA4ADkADnuye7oAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp3u7e7x7vXu+e797wHvBgQmSgQmTgQmUgQmVgQmWgQmXgQmYgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV7BwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCZAICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVewcAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQmQCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXsHAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEJkAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQ3EABV7BwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEBYIAAgQmQCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXsHAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEJkAgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV7BwCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCZAICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVewcAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQmQCAgICIAugGUICIAACN8QEgDMAM0AznwtAB8A0ADRfC4AIQDPfC8A0gAOACMA0wDUACYA1QAVABUAFQAnAFUAlgCWfDcALwCWAIgAlgGtCeQAlgCWfD8All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQj2CAiBCZsIgB0IgG6BAQ0ICIEJmggSt2k4l9MAOAA5AA58Q3xGAGaiAbYBt4BHgEiifEd8SIEJnIEJp4A52QAfACN8SwAOACZ8TAAhAId8TXSdAbYAiACnABUAJwAvAJZ8VV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJmYBHgB2AQIAAgAQIgQmd0wA4ADkADnxXfGAAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqh8YXxifGN8ZHxlfGZ8Z3xogQmegQmfgQmggQmigQmjgQmkgQmlgQmmgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV8RwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCZwICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVfEcAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQmcCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVfIoAFXxHAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQmhgACBCZwICAgIgC6ATQgIgAAI0wA4ADkADnyYfJkAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV8RwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCZwICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVfEcAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQmcCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXxHAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEJnAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV8RwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCZwICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVfEcAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQmcCAgICIAugFIICIAACNkAHwAjfOcADgAmfOgAIQCHfOl0nQG3AIgApwAVACcALwCWfPFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCZmASIAdgECAAIAECIEJqNMAOAA5AA5883z7AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZad8/Hz9fP58/30AfQF9AoEJqYEJqoEJq4EJrIEJrYEJroEJr4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVfEgAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQmnCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFXxIAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEJpwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV8SACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCacICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVfEgAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQmnCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFXxIAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEJpwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV8SACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCacICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVfEgAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQmnCAgICIAugGUICIAACN8QEgDMAM0Azn1uAB8A0ADRfW8AIQDPfXAA0gAOACMA0wDUACYA1QAVABUAFQAnAFUAlgCWfXgALwCWAIgAlgGtCdIAlgCWfYAAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQj2CAiBCbIIgB0IgG6A+wgIgQmxCBLP6hDl0wA4ADkADn2EfYcAZqIBtgG3gEeASKJ9iH2JgQmzgQm+gDnZAB8AI32MAA4AJn2NACEAh32OdJ4BtgCIAKcAFQAnAC8Aln2WXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQmwgEeAHYBAgACABAiBCbTTADgAOQAOfZh9oQBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqH2ifaN9pH2lfaZ9p32ofamBCbWBCbaBCbeBCbmBCbqBCbuBCbyBCb2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFX2IAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEJswgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV9iACWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCbMICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABV9ywAVfYgAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCbiAAIEJswgICAiALoBNCAiAAAjTADgAOQAOfdl92gBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFX2IAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEJswgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABV9iACWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCbMICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVfYgAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQmzCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX2IAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEJswgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV9iACWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCbMICAgIgC6AUggIgAAI2QAfACN+KAAOACZ+KQAhAId+KnSeAbcAiACnABUAJwAvAJZ+Ml8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJsIBIgB2AQIAAgAQIgQm/0wA4ADkADn40fjwAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp349fj5+P35AfkF+Qn5DgQnAgQnBgQnCgQnDgQnEgQnFgQnGgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV9iQCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCb4ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVfYkAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQm+CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX2JAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEJvggICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQtAABV9iQCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEBMIAAgQm+CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX2JAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEJvggICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV9iQCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCb4ICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVfYkAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQm+CAgICIAugGUICIAACNIAOQAOfq8A5qCALd8QEH6yfrN+tH61AB9+tn63ACF+uH65AA4AI366frsAJgCHAIh+vQAnACcAE37BAI4ALwAnAIgAkQBAAIh+yH7JAJZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAHYEJ24AEgASAAoEJyoCGgASAHYCIgAuAHYEKm4EJyQgSxRo79tMAOAA5AA5+zX7PAGahAJuAH6F+0IEJy4A52QAfACN+0wAOACZ+1AAhAId+1QBWAJsAiACnABUAJwAvAJZ+3V8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJyIAfgB2AQIAAgAQIgQnM0wA4ADkADn7ffukAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpfup+637sfu1+7n7vfvB+8X7ygQnNgQnPgQnQgQnSgQnTgQnVgQnWgQnYgQnZgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFX72ABV+0ACWAJYAlgAvAJYA3gCuAJYAlgAVAJaAAIEJzoAAgQnLCAgICIAugCIICIAACNIAOQAOfwQA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX7QAJYAlgCWAC8AlgDeAK8AlgCWABUAloAAgACAAIEJywgICAiALoAjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFX8XABV+0ACWAJYAlgAvAJYA3gCwAJYAlgAVAJaAAIEJ0YAAgQnLCAgICIAugCQICIAACNIAOQAOfyUA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX7QAJYAlgCWAC8AlgDeALEAlgCWABUAloAAgACAAIEJywgICAiALoAlCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFX84ABV+0ACWAJYAlgAvAJYA3gCyAJYAlgAVAJaAAIEJ1IAAgQnLCAgICIAugCYICIAACNIAOQAOf0YA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFX7QAJYAlgCWAC8AlgDeALMAlgCWABUAloAAgDaAAIEJywgICAiALoAnCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFX9ZABV+0ACWAJYAlgAvAJYA3gC0AJYAlgAVAJaAAIEJ14AAgQnLCAgICIAugCgICIAACNMAOAA5AA5/Z39oAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBXwAVftAAlgCWAJYALwCWAN4AtQCWAJYAFQCWgACAO4AAgQnLCAgICIAugCkICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVf3sAFX7QAJYAlgCWAC8AlgDeALYAlgCWABUAloAAgQnagACBCcsICAgIgC6AKggIgAAIXxARQ0RUb25Db25uZWN0ZWRBcHDTADgAOQAOf4p/kwBmqH+Lf4x/jX+OdJJ/kH+RCeSBCdyBCd2BCd6BCd+BCQyBCeCBCeGBAQ2of5R/lX+Wf5d/mH+Zf5p/m4EJ4oEJ+YEKEIEKJ4EKPoEKVYEKbYEKhIA5VmFwcFVybFh3YWxsZXRJZFdpY29uVXJsWGNsaWVudElkWXB1YmxpY0tleVpwcml2YXRlS2V53xASAMwAzQDOf6QAHwDQANF/pQAhAM9/pgDSAA4AIwDTANQAJgDVABUAFQAVACcAVgCWAJZ/rgAvAJYAiACWAa1/iwCWAJZ/tgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCcgICIEJ5AiAHQiAboEJ3AgIgQnjCBI94jwo0wA4ADkADn+6f70AZqIBtgG3gEeASKJ/vn+/gQnlgQnwgDnZAB8AI3/CAA4AJn/DACEAh3/Ef5QBtgCIAKcAFQAnAC8Aln/MXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQnigEeAHYBAgACABAiBCebTADgAOQAOf85/1wBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqH/Yf9l/2n/bf9x/3X/ef9+BCeeBCeiBCemBCeuBCeyBCe2BCe6BCe+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFX++AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEJ5QgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV/vgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCeUICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWAAQAVf74AlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCeqAAIEJ5QgICAiALoBNCAiAAAjTADgAOQAOgA+AEABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFX++AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEJ5QgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV/vgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIA2gACBCeUICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVf74AlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQnlCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX++AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEJ5QgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABV/vgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCeUICAgIgC6AUggIgAAI2QAfACOAXgAOACaAXwAhAIeAYH+UAbcAiACnABUAJwAvAJaAaF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJ4oBIgB2AQIAAgAQIgQnx0wA4ADkADoBqgHIAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp4BzgHSAdYB2gHeAeIB5gQnygQnzgQn0gQn1gQn2gQn3gQn4gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV/vwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCfAICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVf78AlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQnwCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX+/AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEJ8AgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQtAABV/vwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEBMIAAgQnwCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFX+/AJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEJ8AgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABV/vwCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCfAICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVf78AlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQnwCAgICIAugGUICIAACN8QEgDMAM0AzoDlAB8A0ADRgOYAIQDPgOcA0gAOACMA0wDUACYA1QAVABUAFQAnAFYAlgCWgO8ALwCWAIgAlgGtf4wAlgCWgPcAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQnICAiBCfsIgB0IgG6BCd0ICIEJ+ggSs/sYZNMAOAA5AA6A+4D+AGaiAbYBt4BHgEiigP+BAIEJ/IEKB4A52QAfACOBAwAOACaBBAAhAIeBBX+VAbYAiACnABUAJwAvAJaBDV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJ+YBHgB2AQIAAgAQIgQn90wA4ADkADoEPgRgAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiBGYEagRuBHIEdgR6BH4EggQn+gQn/gQoAgQoCgQoDgQoEgQoFgQoGgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWA/wCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCfwICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgP8AlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQn8CAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVgUIAFYD/AJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQoBgACBCfwICAgIgC6ATQgIgAAI0wA4ADkADoFQgVEAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWA/wCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCfwICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVgP8AlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQn8CAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYD/AJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEJ/AgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWA/wCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCfwICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVgP8AlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQn8CAgICIAugFIICIAACNkAHwAjgZ8ADgAmgaAAIQCHgaF/lQG3AIgApwAVACcALwCWgalfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCfmASIAdgECAAIAECIEKCNMAOAA5AA6Bq4GzAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeBtIG1gbaBt4G4gbmBuoEKCYEKCoEKC4EKDIEKDYEKDoEKD4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgQAAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQoHCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYEAAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEKBwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWBAACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCgcICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVgQAAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQoHCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYEAAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEKBwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWBAACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCgcICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgQAAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQoHCAgICIAugGUICIAACN8QEgDMAM0AzoImAB8A0ADRgicAIQDPgigA0gAOACMA0wDUACYA1QAVABUAFQAnAFYAlgCWgjAALwCWAIgAlgGtf40AlgCWgjgAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQnICAiBChIIgB0IgG6BCd4ICIEKEQgSnmjxI9MAOAA5AA6CPII/AGaiAbYBt4BHgEiigkCCQYEKE4EKHoA52QAfACOCRAAOACaCRQAhAIeCRn+WAbYAiACnABUAJwAvAJaCTl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKEIBHgB2AQIAAgAQIgQoU0wA4ADkADoJQglkAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiCWoJbglyCXYJegl+CYIJhgQoVgQoWgQoXgQoZgQoagQobgQocgQodgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWCQACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBChMICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgkAAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQoTCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVgoMAFYJAAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQoYgACBChMICAgIgC6ATQgIgAAI0wA4ADkADoKRgpIAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWCQACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBChMICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVgkAAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQoTCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYJAAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEKEwgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWCQACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBChMICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVgkAAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQoTCAgICIAugFIICIAACNkAHwAjguAADgAmguEAIQCHguJ/lgG3AIgApwAVACcALwCWgupfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBChCASIAdgECAAIAECIEKH9MAOAA5AA6C7IL0AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeC9YL2gveC+IL5gvqC+4EKIIEKIYEKIoEKI4EKJIEKJYEKJoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgkEAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQoeCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYJBAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEKHggICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWCQQCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCh4ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABULQAAVgkEAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBATCAAIEKHggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWCQQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCh4ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVgkEAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQoeCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYJBAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEKHggICAiALoBlCAiAAAjfEBIAzADNAM6DZwAfANAA0YNoACEAz4NpANIADgAjANMA1AAmANUAFQAVABUAJwBWAJYAloNxAC8AlgCIAJYBrX+OAJYAloN5AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJyAgIgQopCIAdCIBugQnfCAiBCigIEq/J5VPTADgAOQAOg32DgABmogG2AbeAR4BIooOBg4KBCiqBCjWAOdkAHwAjg4UADgAmg4YAIQCHg4d/lwG2AIgApwAVACcALwCWg49fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCieAR4AdgECAAIAECIEKK9MAOAA5AA6DkYOaAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKog5uDnIOdg56Dn4Ogg6GDooEKLIEKLYEKLoEKMIEKMYEKMoEKM4EKNIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVg4EAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQoqCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYOBAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEKKggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYPEABWDgQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEKL4AAgQoqCAgICIAugE0ICIAACNMAOAA5AA6D0oPTAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVg4EAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQoqCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYOBAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIEKKggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWDgQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCioICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVg4EAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQoqCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYOBAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEKKggICAiALoBSCAiAAAjZAB8AI4QhAA4AJoQiACEAh4Qjf5cBtwCIAKcAFQAnAC8AloQrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQongEiAHYBAgACABAiBCjbTADgAOQAOhC2ENQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnhDaEN4Q4hDmEOoQ7hDyBCjeBCjiBCjmBCjqBCjuBCjyBCj2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYOCAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEKNQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWDggCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCjUICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVg4IAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQo1CAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFYOCAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEKNQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWDggCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCjUICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVg4IAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQo1CAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYOCAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEKNQgICAiALoBlCAiAAAjfEBIAzADNAM6EqAAfANAA0YSpACEAz4SqANIADgAjANMA1AAmANUAFQAVABUAJwBWAJYAloSyAC8AlgCIAJYBrXSSAJYAloS6AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJyAgIgQpACIAdCIBugQkMCAiBCj8IEvRCZVLTADgAOQAOhL6EwQBmogG2AbeAR4BIooTChMOBCkGBCkyAOdkAHwAjhMYADgAmhMcAIQCHhMh/mAG2AIgApwAVACcALwCWhNBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCj6AR4AdgECAAIAECIEKQtMAOAA5AA6E0oTbAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKohNyE3YTehN+E4IThhOKE44EKQ4EKRIEKRYEKR4EKSIEKSYEKSoEKS4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVhMIAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQpBCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYTCAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEKQQgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYUFABWEwgCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEKRoAAgQpBCAgICIAugE0ICIAACNMAOAA5AA6FE4UUAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVhMIAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQpBCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFYTCAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEKQQgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWEwgCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBCkEICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhMIAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQpBCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYTCAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEKQQgICAiALoBSCAiAAAjZAB8AI4ViAA4AJoVjACEAh4Vkf5gBtwCIAKcAFQAnAC8AloVsXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQo+gEiAHYBAgACABAiBCk3TADgAOQAOhW6FdgBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnhXeFeIV5hXqFe4V8hX2BCk6BCk+BClCBClGBClKBClOBClSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYTDAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEKTAgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWEwwCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCkwICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhMMAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQpMCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFYTDAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEKTAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWEwwCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBCkwICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhMMAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQpMCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYTDAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEKTAgICAiALoBlCAiAAAjfEBIAzADNAM6F6QAfANAA0YXqACEAz4XrANIADgAjANMA1AAmANUAFQAVABUAJwBWAJYAloXzAC8AlgCIAJYBrX+QAJYAloX7AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJyAgIgQpXCIAdCIBugQngCAiBClYIEufWYt/TADgAOQAOhf+GAgBmogG2AbeAR4BIooYDhgSBCliBCmOAOdkAHwAjhgcADgAmhggAIQCHhgl/mQG2AIgApwAVACcALwCWhhFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBClWAR4AdgECAAIAECIEKWdMAOAA5AA6GE4YcAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKohh2GHoYfhiCGIYYihiOGJIEKWoEKW4EKXIEKXoEKX4EKYIEKYYEKYoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVhgMAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQpYCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYYDAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEKWAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYZGABWGAwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEKXYAAgQpYCAgICIAugE0ICIAACNMAOAA5AA6GVIZVAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVhgMAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQpYCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYYDAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIEKWAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWGAwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBClgICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhgMAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQpYCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYYDAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEKWAgICAiALoBSCAiAAAjZAB8AI4ajAA4AJoakACEAh4alf5kBtwCIAKcAFQAnAC8AloatXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQpVgEiAHYBAgACABAiBCmTTADgAOQAOhq+GtwBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnhriGuYa6hruGvIa9hr6BCmWBCmaBCmeBCmiBCmqBCmuBCmyAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYYEAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEKYwgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWGBACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBCmMICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhgQAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQpjCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVhu8AFYYEAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQppgACBCmMICAgIgC6AYggIgAAIEQPo3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVhgQAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQpjCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYYEAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEKYwgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWGBACWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCmMICAgIgC6AZQgIgAAI3xASAMwAzQDOhysAHwDQANGHLAAhAM+HLQDSAA4AIwDTANQAJgDVABUAFQAVACcAVgCWAJaHNQAvAJYAiACWAa1/kQCWAJaHPQCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCcgICIEKbwiAHQiAboEJ4QgIgQpuCBLwizPq0wA4ADkADodBh0QAZqIBtgG3gEeASKKHRYdGgQpwgQp7gDnZAB8AI4dJAA4AJodKACEAh4dLf5oBtgCIAKcAFQAnAC8AlodTXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQptgEeAHYBAgACABAiBCnHTADgAOQAOh1WHXgBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqIdfh2CHYYdih2OHZIdlh2aBCnKBCnOBCnSBCnaBCneBCniBCnmBCnqAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYdFAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEKcAgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWHRQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCnAICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWHiAAVh0UAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCnWAAIEKcAgICAiALoBNCAiAAAjTADgAOQAOh5aHlwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYdFAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEKcAgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWHRQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIA2gACBCnAICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVh0UAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQpwCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYdFAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEKcAgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWHRQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCnAICAgIgC6AUggIgAAI2QAfACOH5QAOACaH5gAhAIeH53+aAbcAiACnABUAJwAvAJaH718QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKbYBIgB2AQIAAgAQIgQp80wA4ADkADofxh/kAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp4f6h/uH/If9h/6H/4gAgQp9gQp+gQp/gQqAgQqBgQqCgQqDgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWHRgCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCnsICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVh0YAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQp7CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYdGAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEKewgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYbvABWHRgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEKaYAAgQp7CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYdGAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEKewgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWHRgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCnsICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVh0YAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQp7CAgICIAugGUICIAACN8QEgDMAM0AzohsAB8A0ADRiG0AIQDPiG4A0gAOACMA0wDUACYA1QAVABUAFQAnAFYAlgCWiHYALwCWAIgAlgGtCeQAlgCWiH4All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQnICAiBCoYIgB0IgG6BAQ0ICIEKhQgS0Rw2ftMAOAA5AA6IgoiFAGaiAbYBt4BHgEiiiIaIh4EKh4EKkoA52QAfACOIigAOACaIiwAhAIeIjH+bAbYAiACnABUAJwAvAJaIlF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKhIBHgB2AQIAAgAQIgQqI0wA4ADkADoiWiJ8AZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiIoIihiKKIo4ikiKWIpoingQqJgQqKgQqLgQqNgQqOgQqPgQqQgQqRgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWIhgCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCocICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAViIYAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQqHCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAViMkAFYiGAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQqMgACBCocICAgIgC6ATQgIgAAI0wA4ADkADojXiNgAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWIhgCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCocICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAViIYAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQqHCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYiGAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEKhwgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWIhgCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCocICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAViIYAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQqHCAgICIAugFIICIAACNkAHwAjiSYADgAmiScAIQCHiSh/mwG3AIgApwAVACcALwCWiTBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCoSASIAdgECAAIAECIEKk9MAOAA5AA6JMok6AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeJO4k8iT2JPok/iUCJQYEKlIEKlYEKloEKl4EKmIEKmYEKmoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAViIcAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQqSCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYiHAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEKkggICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWIhwCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCpIICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAViIcAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQqSCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYiHAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEKkggICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWIhwCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCpIICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAViIcAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQqSCAgICIAugGUICIAACNIAOQAOia0A5qCALd8QEImwibGJsomzAB+JtIm1ACGJtom3AA4AI4m4ibkAJgCHAIiJuwAnACcAE4m/AI4ALwAnAIgAkQBBAIiJxonHAJZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAHYEKr4AEgASAAoEKnoCGgASAHYCIgAyAHYELDoEKnQgScpCz1dMAOAA5AA6Jy4nNAGahAJuAH6GJzoEKn4A52QAfACOJ0QAOACaJ0gAhAIeJ0wBXAJsAiACnABUAJwAvAJaJ218QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKnIAfgB2AQIAAgAQIgQqg0wA4ADkADondiecAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpieiJ6YnqieuJ7Intie6J74nwgQqhgQqjgQqkgQqmgQqngQqpgQqqgQqsgQqtgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYn0ABWJzgCWAJYAlgAvAJYA3gCuAJYAlgAVAJaAAIEKooAAgQqfCAgICIAugCIICIAACNIAOQAOigIA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYnOAJYAlgCWAC8AlgDeAK8AlgCWABUAloAAgACAAIEKnwgICAiALoAjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYoVABWJzgCWAJYAlgAvAJYA3gCwAJYAlgAVAJaAAIEKpYAAgQqfCAgICIAugCQICIAACNIAOQAOiiMA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYnOAJYAlgCWAC8AlgDeALEAlgCWABUAloAAgACAAIEKnwgICAiALoAlCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYo2ABWJzgCWAJYAlgAvAJYA3gCyAJYAlgAVAJaAAIEKqIAAgQqfCAgICIAugCYICIAACNIAOQAOikQA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYnOAJYAlgCWAC8AlgDeALMAlgCWABUAloAAgDaAAIEKnwgICAiALoAnCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYpXABWJzgCWAJYAlgAvAJYA3gC0AJYAlgAVAJaAAIEKq4AAgQqfCAgICIAugCgICIAACNMAOAA5AA6KZYpmAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBXwAVic4AlgCWAJYALwCWAN4AtQCWAJYAFQCWgACAO4AAgQqfCAgICIAugCkICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVinkAFYnOAJYAlgCWAC8AlgDeALYAlgCWABUAloAAgQqugACBCp8ICAgIgC6AKggIgAAIWkNEU2NhbUluZm/TADgAOQAOioiKjQBmpD+uCeSKi4qMgQUfgQENgQqwgQqxpIqOio+KkIqRgQqygQrJgQrggQr3gDlXc3VidHlwZVdhZGRyZXNz3xASAMwAzQDOipYAHwDQANGKlwAhAM+KmADSAA4AIwDTANQAJgDVABUAFQAVACcAVwCWAJaKoAAvAJYAiACWAa0/rgCWAJaKqACWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCpwICIEKtAiAHQiAboEFHwgIgQqzCBJ1Q80R0wA4ADkADoqsiq8AZqIBtgG3gEeASKKKsIqxgQq1gQrAgDnZAB8AI4q0AA4AJoq1ACEAh4q2io4BtgCIAKcAFQAnAC8Aloq+XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQqygEeAHYBAgACABAiBCrbTADgAOQAOisCKyQBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqIrKisuKzIrNis6Kz4rQitGBCreBCriBCrmBCruBCryBCr2BCr6BCr+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYqwAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEKtQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWKsACWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCrUICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWK8wAVirAAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCrqAAIEKtQgICAiALoBNCAiAAAjTADgAOQAOiwGLAgBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYqwAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEKtQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWKsACWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCrUICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVirAAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQq1CAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYqwAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEKtQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWKsACWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCrUICAgIgC6AUggIgAAI2QAfACOLUAAOACaLUQAhAIeLUoqOAbcAiACnABUAJwAvAJaLWl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKsoBIgB2AQIAAgAQIgQrB0wA4ADkADotci2QAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp4tli2aLZ4toi2mLaotrgQrCgQrDgQrEgQrFgQrGgQrHgQrIgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWKsQCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCsAICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVirEAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQrACAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYqxAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEKwAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABWKsQCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCsAICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVirEAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQrACAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYqxAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEKwAgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWKsQCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCsAICAgIgC6AZQgIgAAI3xASAMwAzQDOi9cAHwDQANGL2AAhAM+L2QDSAA4AIwDTANQAJgDVABUAFQAVACcAVwCWAJaL4QAvAJYAiACWAa0J5ACWAJaL6QCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCpwICIEKywiAHQiAboEBDQgIgQrKCBKU6lrf0wA4ADkADovti/AAZqIBtgG3gEeASKKL8YvygQrMgQrXgDnZAB8AI4v1AA4AJov2ACEAh4v3io8BtgCIAKcAFQAnAC8Alov/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQrJgEeAHYBAgACABAiBCs3TADgAOQAOjAGMCgBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqIwLjAyMDYwOjA+MEIwRjBKBCs6BCs+BCtCBCtKBCtOBCtSBCtWBCtaAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYvxAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEKzAgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWL8QCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCswICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWMNAAVi/EAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCtGAAIEKzAgICAiALoBNCAiAAAjTADgAOQAOjEKMQwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFYvxAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEKzAgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWL8QCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCswICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVi/EAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQrMCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYvxAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEKzAgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWL8QCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCswICAgIgC6AUggIgAAI2QAfACOMkQAOACaMkgAhAIeMk4qPAbcAiACnABUAJwAvAJaMm18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKyYBIgB2AQIAAgAQIgQrY0wA4ADkADoydjKUAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp4ymjKeMqIypjKqMq4ysgQrZgQragQrbgQrcgQrdgQregQrfgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWL8gCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCtcICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVi/IAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQrXCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYvyAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEK1wgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABWL8gCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCtcICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVi/IAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQrXCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFYvyAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEK1wgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWL8gCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCtcICAgIgC6AZQgIgAAI3xASAMwAzQDOjRgAHwDQANGNGQAhAM+NGgDSAA4AIwDTANQAJgDVABUAFQAVACcAVwCWAJaNIgAvAJYAiACWAa2KiwCWAJaNKgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCpwICIEK4giAHQiAboEKsAgIgQrhCBKGnQ4F0wA4ADkADo0ujTEAZqIBtgG3gEeASKKNMo0zgQrjgQrugDnZAB8AI402AA4AJo03ACEAh404ipABtgCIAKcAFQAnAC8Alo1AXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQrggEeAHYBAgACABAiBCuTTADgAOQAOjUKNSwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqI1MjU2NTo1PjVCNUY1SjVOBCuWBCuaBCueBCumBCuqBCuuBCuyBCu2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFY0yAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEK4wgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWNMgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCuMICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWNdQAVjTIAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCuiAAIEK4wgICAiALoBNCAiAAAjTADgAOQAOjYONhABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFY0yAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEK4wgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWNMgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCuMICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVjTIAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQrjCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY0yAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEK4wgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWNMgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCuMICAgIgC6AUggIgAAI2QAfACON0gAOACaN0wAhAIeN1IqQAbcAiACnABUAJwAvAJaN3F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEK4IBIgB2AQIAAgAQIgQrv0wA4ADkADo3ejeYAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp43njeiN6Y3qjeuN7I3tgQrwgQrxgQrygQrzgQr0gQr1gQr2gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWNMwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCu4ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVjTMAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQruCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY0zAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEK7ggICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABWNMwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCu4ICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVjTMAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQruCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY0zAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEK7ggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWNMwCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCu4ICAgIgC6AZQgIgAAI3xASAMwAzQDOjlkAHwDQANGOWgAhAM+OWwDSAA4AIwDTANQAJgDVABUAFQAVACcAVwCWAJaOYwAvAJYAiACWAa2KjACWAJaOawCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCpwICIEK+QiAHQiAboEKsQgIgQr4CBLbW4L10wA4ADkADo5vjnIAZqIBtgG3gEeASKKOc450gQr6gQsFgDnZAB8AI453AA4AJo54ACEAh455ipEBtgCIAKcAFQAnAC8Alo6BXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQr3gEeAHYBAgACABAiBCvvTADgAOQAOjoOOjABmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqI6Njo6Oj46QjpGOko6TjpSBCvyBCv2BCv6BCwCBCwGBCwKBCwOBCwSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFY5zAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEK+ggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWOcwCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBCvoICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWOtgAVjnMAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBCv+AAIEK+ggICAiALoBNCAiAAAjTADgAOQAOjsSOxQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFY5zAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEK+ggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWOcwCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBCvoICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVjnMAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQr6CAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY5zAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEK+ggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWOcwCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBCvoICAgIgC6AUggIgAAI2QAfACOPEwAOACaPFAAhAIePFYqRAbcAiACnABUAJwAvAJaPHV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEK94BIgB2AQIAAgAQIgQsG0wA4ADkADo8fjycAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp48ojymPKo8rjyyPLY8ugQsHgQsIgQsJgQsKgQsLgQsMgQsNgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWOdACWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBCwUICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVjnQAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQsFCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY50AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIELBQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABWOdACWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBCwUICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVjnQAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQsFCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFY50AJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIELBQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWOdACWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBCwUICAgIgC6AZQgIgAAI0gA5AA6PmgDmoIAt3xAQj52Pno+fj6AAH4+hj6IAIY+jj6QADgAjj6WPpgAmAIcAiI+oACcAJwATj6wAjgAvACcAiACRAEIAiI+zj7QAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAdgQsigASABIACgQsRgIaABIAdgIiADYAdgQwrgQsQCBIx10os0wA4ADkADo+4j7oAZqEAm4AfoY+7gQsSgDnZAB8AI4++AA4AJo+/ACEAh4/AAFgAmwCIAKcAFQAnAC8Alo/IXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQsPgB+AHYBAgACABAiBCxPTADgAOQAOj8qP1ABmqQCuAK8AsACxALIAswC0ALUAtoAigCOAJIAlgCaAJ4AogCmAKqmP1Y/Wj9eP2I/Zj9qP24/cj92BCxSBCxaBCxeBCxmBCxqBCxyBCx2BCx+BCyCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVj+EAFY+7AJYAlgCWAC8AlgDeAK4AlgCWABUAloAAgQsVgACBCxIICAgIgC6AIggIgAAI0gA5AA6P7wDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVj7sAlgCWAJYALwCWAN4ArwCWAJYAFQCWgACAAIAAgQsSCAgICIAugCMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVkAIAFY+7AJYAlgCWAC8AlgDeALAAlgCWABUAloAAgQsYgACBCxIICAgIgC6AJAgIgAAI0gA5AA6QEADmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVj7sAlgCWAJYALwCWAN4AsQCWAJYAFQCWgACAAIAAgQsSCAgICIAugCUICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVkCMAFY+7AJYAlgCWAC8AlgDeALIAlgCWABUAloAAgQsbgACBCxIICAgIgC6AJggIgAAI0gA5AA6QMQDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVj7sAlgCWAJYALwCWAN4AswCWAJYAFQCWgACANoAAgQsSCAgICIAugCcICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVkEQAFY+7AJYAlgCWAC8AlgDeALQAlgCWABUAloAAgQsegACBCxIICAgIgC6AKAgIgAAI0wA4ADkADpBSkFMAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQFfABWPuwCWAJYAlgAvAJYA3gC1AJYAlgAVAJaAAIA7gACBCxIICAgIgC6AKQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWQZgAVj7sAlgCWAJYALwCWAN4AtgCWAJYAFQCWgACBCyGAAIELEggICAiALoAqCAiAAAhfEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW3TADgAOQAOkHWQgQBmq5B2kHeQeJB5kHqQe5B8dJKQfpB/kICBCyOBCySBCyWBCyaBCyeBCyiBCymBCQyBCyqBCyuBCyyrkIKQg5CEkIWQhpCHkIiQiZCKkIuQjIELLYELRIELW4ELcoELiYELoIELuIELz4EL5oEL/YEMFIA5VnNlbmRlclZzdGF0dXNYcmVjZWl2ZXJUY2FsbFptb2R1bGVOYW1lW2Jsb2NrTnVtYmVyWGNhbGxOYW1lU2ZlZVl0aW1lc3RhbXBXdHhJbmRleN8QEgDMAM0AzpCZAB8A0ADRkJoAIQDPkJsA0gAOACMA0wDUACYA1QAVABUAFQAnAFgAlgCWkKMALwCWAIgAlgGtkHYAlgCWkKsAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQsPCAiBCy8IgB0IgG6BCyMICIELLggS7Wgb4tMAOAA5AA6Qr5CyAGaiAbYBt4BHgEiikLOQtIELMIELO4A52QAfACOQtwAOACaQuAAhAIeQuZCCAbYAiACnABUAJwAvAJaQwV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELLYBHgB2AQIAAgAQIgQsx0wA4ADkADpDDkMwAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiQzZDOkM+Q0JDRkNKQ05DUgQsygQszgQs0gQs2gQs3gQs4gQs5gQs6gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWQswCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBCzAICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkLMAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQswCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVkPYAFZCzAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQs1gACBCzAICAgIgC6ATQgIgAAI0wA4ADkADpEEkQUAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWQswCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBCzAICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVkLMAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQswCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZCzAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIELMAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWQswCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBCzAICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVkLMAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQswCAgICIAugFIICIAACNkAHwAjkVMADgAmkVQAIQCHkVWQggG3AIgApwAVACcALwCWkV1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCy2ASIAdgECAAIAECIELPNMAOAA5AA6RX5FnAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeRaJFpkWqRa5FskW2RboELPYELPoELP4ELQIELQYELQoELQ4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkLQAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQs7CAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZC0AJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIELOwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWQtACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBCzsICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVkLQAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQs7CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZC0AJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIELOwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWQtACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBCzsICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkLQAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQs7CAgICIAugGUICIAACN8QEgDMAM0AzpHaAB8A0ADRkdsAIQDPkdwA0gAOACMA0wDUACYA1QAVABUAFQAnAFgAlgCWkeQALwCWAIgAlgGtkHcAlgCWkewAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQsPCAiBC0YIgB0IgG6BCyQICIELRQgSsDyBnNMAOAA5AA6R8JHzAGaiAbYBt4BHgEiikfSR9YELR4ELUoA52QAfACOR+AAOACaR+QAhAIeR+pCDAbYAiACnABUAJwAvAJaSAl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELRIBHgB2AQIAAgAQIgQtI0wA4ADkADpIEkg0AZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiSDpIPkhCSEZISkhOSFJIVgQtJgQtKgQtLgQtNgQtOgQtPgQtQgQtRgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWR9ACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBC0cICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkfQAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQtHCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVkjcAFZH0AJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQtMgACBC0cICAgIgC6ATQgIgAAI0wA4ADkADpJFkkYAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWR9ACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBC0cICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVkfQAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQtHCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZH0AJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIELRwgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWR9ACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBC0cICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVkfQAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQtHCAgICIAugFIICIAACNkAHwAjkpQADgAmkpUAIQCHkpaQgwG3AIgApwAVACcALwCWkp5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC0SASIAdgECAAIAECIELU9MAOAA5AA6SoJKoAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeSqZKqkquSrJKtkq6Sr4ELVIELVYELVoELV4ELWIELWYELWoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUhWwAVkfUAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACBAt2AAIELUggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWR9QCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBC1IICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkfUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQtSCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVIYkAFZH1AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQLhgACBC1IICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkfUAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQtSCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZH1AJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIELUggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWR9QCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBC1IICAgIgC6AZQgIgAAI3xASAMwAzQDOkxsAHwDQANGTHAAhAM+THQDSAA4AIwDTANQAJgDVABUAFQAVACcAWACWAJaTJQAvAJYAiACWAa2QeACWAJaTLQCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCw8ICIELXQiAHQiAboELJQgIgQtcCBJhZTHd0wA4ADkADpMxkzQAZqIBtgG3gEeASKKTNZM2gQtegQtpgDnZAB8AI5M5AA4AJpM6ACEAh5M7kIQBtgCIAKcAFQAnAC8AlpNDXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQtbgEeAHYBAgACABAiBC1/TADgAOQAOk0WTTgBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqJNPk1CTUZNSk1OTVJNVk1aBC2CBC2GBC2KBC2SBC2WBC2aBC2eBC2iAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZM1AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIELXggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWTNQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBC14ICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWTeAAVkzUAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBC2OAAIELXggICAiALoBNCAiAAAjTADgAOQAOk4aThwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZM1AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIELXggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWTNQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBC14ICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVkzUAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQteCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZM1AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIELXggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWTNQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBC14ICAgIgC6AUggIgAAI2QAfACOT1QAOACaT1gAhAIeT15CEAbcAiACnABUAJwAvAJaT318QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELW4BIgB2AQIAAgAQIgQtq0wA4ADkADpPhk+kAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp5Pqk+uT7JPtk+6T75PwgQtrgQtsgQttgQtugQtvgQtwgQtxgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWTNgCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBC2kICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVkzYAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQtpCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZM2AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIELaQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABWTNgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBC2kICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVkzYAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQtpCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZM2AJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIELaQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWTNgCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBC2kICAgIgC6AZQgIgAAI3xASAMwAzQDOlFwAHwDQANGUXQAhAM+UXgDSAA4AIwDTANQAJgDVABUAFQAVACcAWACWAJaUZgAvAJYAiACWAa2QeQCWAJaUbgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCw8ICIELdAiAHQiAboELJggIgQtzCBI+u/kK0wA4ADkADpRylHUAZqIBtgG3gEeASKKUdpR3gQt1gQuAgDnZAB8AI5R6AA4AJpR7ACEAh5R8kIUBtgCIAKcAFQAnAC8AlpSEXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQtygEeAHYBAgACABAiBC3bTADgAOQAOlIaUjwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqJSQlJGUkpSTlJSUlZSWlJeBC3eBC3iBC3mBC3uBC3yBC32BC36BC3+AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZR2AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIELdQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWUdgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBC3UICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWUuQAVlHYAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBC3qAAIELdQgICAiALoBNCAiAAAjTADgAOQAOlMeUyABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZR2AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIELdQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWUdgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBC3UICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVlHYAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQt1CAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZR2AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIELdQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWUdgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBC3UICAgIgC6AUggIgAAI2QAfACOVFgAOACaVFwAhAIeVGJCFAbcAiACnABUAJwAvAJaVIF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELcoBIgB2AQIAAgAQIgQuB0wA4ADkADpUilSoAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp5UrlSyVLZUulS+VMJUxgQuCgQuDgQuEgQuFgQuGgQuHgQuIgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWUdwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBC4AICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVlHcAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQuACAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZR3AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIELgAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFYbvABWUdwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEKaYAAgQuACAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZR3AJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIELgAgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWUdwCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBC4AICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlHcAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQuACAgICIAugGUICIAACN8QEgDMAM0AzpWdAB8A0ADRlZ4AIQDPlZ8A0gAOACMA0wDUACYA1QAVABUAFQAnAFgAlgCWlacALwCWAIgAlgGtkHoAlgCWla8All8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQsPCAiBC4sIgB0IgG6BCycICIELiggS+wroXdMAOAA5AA6Vs5W2AGaiAbYBt4BHgEiilbeVuIELjIELl4A52QAfACOVuwAOACaVvAAhAIeVvZCGAbYAiACnABUAJwAvAJaVxV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELiYBHgB2AQIAAgAQIgQuN0wA4ADkADpXHldAAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiV0ZXSldOV1JXVldaV15XYgQuOgQuPgQuQgQuSgQuTgQuUgQuVgQuWgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWVtwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBC4wICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlbcAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQuMCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVlfoAFZW3AJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQuRgACBC4wICAgIgC6ATQgIgAAI0wA4ADkADpYIlgkAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWVtwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBC4wICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVlbcAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACANoAAgQuMCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZW3AJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIELjAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWVtwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBC4wICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVlbcAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQuMCAgICIAugFIICIAACNkAHwAjllcADgAmllgAIQCHllmQhgG3AIgApwAVACcALwCWlmFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC4mASIAdgECAAIAECIELmNMAOAA5AA6WY5ZrAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeWbJZtlm6Wb5ZwlnGWcoELmYELmoELm4ELnIELnYELnoELn4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlbgAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQuXCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZW4AJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIELlwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWVuACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBC5cICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVlbgAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQuXCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZW4AJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIELlwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWVuACWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBC5cICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlbgAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQuXCAgICIAugGUICIAACN8QEgDMAM0AzpbeAB8A0ADRlt8AIQDPluAA0gAOACMA0wDUACYA1QAVABUAFQAnAFgAlgCWlugALwCWAIgAlgGtkHsAlgCWlvAAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQsPCAiBC6IIgB0IgG6BCygICIELoQgS9nurH9MAOAA5AA6W9Jb3AGaiAbYBt4BHgEiilviW+YELo4ELroA52QAfACOW/AAOACaW/QAhAIeW/pCHAbYAiACnABUAJwAvAJaXBl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELoIBHgB2AQIAAgAQIgQuk0wA4ADkADpcIlxEAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiXEpcTlxSXFZcWlxeXGJcZgQulgQumgQungQupgQuqgQurgQusgQutgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWW+ACWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBC6MICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlvgAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQujCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVlzsAFZb4AJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQuogACBC6MICAgIgC6ATQgIgAAI0wA4ADkADpdJl0oAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWW+ACWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBC6MICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVlvgAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQujCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZb4AJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIELowgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWW+ACWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBC6MICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVlvgAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQujCAgICIAugFIICIAACNkAHwAjl5gADgAml5kAIQCHl5qQhwG3AIgApwAVACcALwCWl6JfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC6CASIAdgECAAIAECIELr9MAOAA5AA6XpJesAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaeXrZeul6+XsJexl7KXs4ELsIELsYELsoELs4ELtYELtoELt4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlvkAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQuuCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZb5AJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIELrggICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWW+QCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBC64ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWX5AAVlvkAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBC7SAAIELrggICAiALoBiCAiAAAgRASzfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWW+QCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBC64ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVlvkAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQuuCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZb5AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIELrggICAiALoBlCAiAAAjfEBIAzADNAM6YIAAfANAA0ZghACEAz5giANIADgAjANMA1AAmANUAFQAVABUAJwBYAJYAlpgqAC8AlgCIAJYBrZB8AJYAlpgyAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELDwgIgQu6CIAdCIBugQspCAiBC7kIEn52yi/TADgAOQAOmDaYOQBmogG2AbeAR4BIopg6mDuBC7uBC8aAOdkAHwAjmD4ADgAmmD8AIQCHmECQiAG2AIgApwAVACcALwCWmEhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC7iAR4AdgECAAIAECIELvNMAOAA5AA6YSphTAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKomFSYVZhWmFeYWJhZmFqYW4ELvYELvoELv4ELwYELwoELw4ELxIELxYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmDoAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQu7CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZg6AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIELuwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZh9ABWYOgCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIELwIAAgQu7CAgICIAugE0ICIAACNMAOAA5AA6Yi5iMAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmDoAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQu7CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZg6AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIELuwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWYOgCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBC7sICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmDoAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQu7CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZg6AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIELuwgICAiALoBSCAiAAAjZAB8AI5jaAA4AJpjbACEAh5jckIgBtwCIAKcAFQAnAC8AlpjkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQu4gEiAHYBAgACABAiBC8fTADgAOQAOmOaY7gBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnmO+Y8JjxmPKY85j0mPWBC8iBC8mBC8qBC8uBC8yBC82BC86AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZg7AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIELxggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWYOwCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBC8YICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmDsAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQvGCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFZg7AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIELxggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWYOwCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBC8YICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmDsAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQvGCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZg7AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIELxggICAiALoBlCAiAAAjfEBIAzADNAM6ZYQAfANAA0ZliACEAz5ljANIADgAjANMA1AAmANUAFQAVABUAJwBYAJYAlplrAC8AlgCIAJYBrXSSAJYAlplzAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELDwgIgQvRCIAdCIBugQkMCAiBC9AIEvgeRATTADgAOQAOmXeZegBmogG2AbeAR4BIopl7mXyBC9KBC92AOdkAHwAjmX8ADgAmmYAAIQCHmYGQiQG2AIgApwAVACcALwCWmYlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC8+AR4AdgECAAIAECIEL09MAOAA5AA6Zi5mUAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKomZWZlpmXmZiZmZmamZuZnIEL1IEL1YEL1oEL2IEL2YEL2oEL24EL3IA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmXsAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQvSCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZl7AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEL0ggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZm+ABWZewCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEL14AAgQvSCAgICIAugE0ICIAACNMAOAA5AA6ZzJnNAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmXsAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQvSCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFZl7AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEL0ggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWZewCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBC9IICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmXsAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQvSCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZl7AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEL0ggICAiALoBSCAiAAAjZAB8AI5obAA4AJpocACEAh5odkIkBtwCIAKcAFQAnAC8AlpolXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQvPgEiAHYBAgACABAiBC97TADgAOQAOmieaLwBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnmjCaMZoymjOaNJo1mjaBC9+BC+CBC+GBC+KBC+OBC+SBC+WAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZl8AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEL3QgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWZfACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBC90ICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmXwAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQvdCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFZl8AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEL3QgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWZfACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBC90ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmXwAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQvdCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZl8AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEL3QgICAiALoBlCAiAAAjfEBIAzADNAM6aogAfANAA0ZqjACEAz5qkANIADgAjANMA1AAmANUAFQAVABUAJwBYAJYAlpqsAC8AlgCIAJYBrZB+AJYAlpq0AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELDwgIgQvoCIAdCIBugQsqCAiBC+cIEsv7VcbTADgAOQAOmriauwBmogG2AbeAR4BIopq8mr2BC+mBC/SAOdkAHwAjmsAADgAmmsEAIQCHmsKQigG2AIgApwAVACcALwCWmspfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC+aAR4AdgECAAIAECIEL6tMAOAA5AA6azJrVAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKomtaa15rYmtma2prbmtya3YEL64EL7IEL7YEL74EL8IEL8YEL8oEL84A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmrwAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQvpCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZq8AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEL6QgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZr/ABWavACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEL7oAAgQvpCAgICIAugE0ICIAACNMAOAA5AA6bDZsOAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVmrwAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQvpCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFZq8AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEL6QgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWavACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBC+kICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmrwAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQvpCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZq8AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEL6QgICAiALoBSCAiAAAjZAB8AI5tcAA4AJptdACEAh5tekIoBtwCIAKcAFQAnAC8AlptmXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQvmgEiAHYBAgACABAiBC/XTADgAOQAOm2ibcABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnm3Gbcptzm3SbdZt2m3eBC/aBC/eBC/iBC/mBC/qBC/uBC/yAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZq9AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEL9AgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWavQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBC/QICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmr0AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQv0CAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFZq9AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEL9AgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWavQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBC/QICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVmr0AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQv0CAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZq9AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEL9AgICAiALoBlCAiAAAjfEBIAzADNAM6b4wAfANAA0ZvkACEAz5vlANIADgAjANMA1AAmANUAFQAVABUAJwBYAJYAlpvtAC8AlgCIAJYBrZB/AJYAlpv1AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELDwgIgQv/CIAdCIBugQsrCAiBC/4IEt/DIxnTADgAOQAOm/mb/ABmogG2AbeAR4BIopv9m/6BDACBDAuAOdkAHwAjnAEADgAmnAIAIQCHnAOQiwG2AIgApwAVACcALwCWnAtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC/2AR4AdgECAAIAECIEMAdMAOAA5AA6cDZwWAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKonBecGJwZnBqcG5wcnB2cHoEMAoEMA4EMBIEMBoEMB4EMCIEMCYEMCoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVm/0AlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQwACAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZv9AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEMAAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZxAABWb/QCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEMBYAAgQwACAgICIAugE0ICIAACNMAOAA5AA6cTpxPAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVm/0AlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQwACAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFZv9AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEMAAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWb/QCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDAAICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVm/0AlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQwACAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZv9AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEMAAgICAiALoBSCAiAAAjZAB8AI5ydAA4AJpyeACEAh5yfkIsBtwCIAKcAFQAnAC8AlpynXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQv9gEiAHYBAgACABAiBDAzTADgAOQAOnKmcsQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnnLKcs5y0nLWctpy3nLiBDA2BDA6BDA+BDBCBDBGBDBKBDBOAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVIVsAFZv+AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgQLdgACBDAsICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVm/4AlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQwLCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZv+AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEMCwgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZfkABWb/gCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIELtIAAgQwLCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZv+AJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEMCwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWb/gCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBDAsICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVm/4AlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQwLCAgICIAugGUICIAACN8QEgDMAM0Azp0kAB8A0ADRnSUAIQDPnSYA0gAOACMA0wDUACYA1QAVABUAFQAnAFgAlgCWnS4ALwCWAIgAlgGtkIAAlgCWnTYAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQsPCAiBDBYIgB0IgG6BCywICIEMFQgSU56brdMAOAA5AA6dOp09AGaiAbYBt4BHgEiinT6dP4EMF4EMIoA52QAfACOdQgAOACadQwAhAIedRJCMAbYAiACnABUAJwAvAJadTF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMFIBHgB2AQIAAgAQIgQwY0wA4ADkADp1OnVcAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqidWJ1ZnVqdW51cnV2dXp1fgQwZgQwagQwbgQwdgQwegQwfgQwggQwhgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWdPgCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBDBcICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVnT4AlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQwXCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVnYEAFZ0+AJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQwcgACBDBcICAgIgC6ATQgIgAAI0wA4ADkADp2PnZAAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWdPgCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBDBcICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVnT4AlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQwXCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZ0+AJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEMFwgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWdPgCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBDBcICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVnT4AlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQwXCAgICIAugFIICIAACNkAHwAjnd4ADgAmnd8AIQCHneCQjAG3AIgApwAVACcALwCWnehfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDBSASIAdgECAAIAECIEMI9MAOAA5AA6d6p3yAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaed8530nfWd9p33nfid+YEMJIEMJYEMJoEMJ4EMKIEMKYEMKoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVnT8AlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQwiCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZ0/AJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEMIggICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWdPwCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDCIICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUhiQAVnT8AlgCWAJYALwCWAN4CdACWAJYAFQCWgACBAuGAAIEMIggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWdPwCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDCIICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVnT8AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQwiCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZ0/AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEMIggICAiALoBlCAiAAAjSADkADp5lAOaggC3fEBCeaJ5pnmqeawAfnmyebQAhnm6ebwAOACOecJ5xACYAhwCInnMAJwAnABOedwCOAC8AJwCIAJEAQwCInn6efwCWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BDD+ABIAEgAKBDC6AhoAEgB2AiIAOgB2BDG+BDC0IEuY2/5vTADgAOQAOnoOehQBmoQCbgB+hnoaBDC+AOdkAHwAjnokADgAmnooAIQCHnosAWQCbAIgApwAVACcALwCWnpNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDCyAH4AdgECAAIAECIEMMNMAOAA5AA6elZ6fAGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqZ6gnqGeop6jnqSepZ6mnqeeqIEMMYEMM4EMNIEMNoEMN4EMOYEMOoEMPIEMPYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWerAAVnoYAlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBDDKAAIEMLwgICAiALoAiCAiAAAjSADkADp66AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWehgCWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBDC8ICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWezQAVnoYAlgCWAJYALwCWAN4AsACWAJYAFQCWgACBDDWAAIEMLwgICAiALoAkCAiAAAjSADkADp7bAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWehgCWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBDC8ICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWe7gAVnoYAlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBDDiAAIEMLwgICAiALoAmCAiAAAjSADkADp78AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWehgCWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBDC8ICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWfDwAVnoYAlgCWAJYALwCWAN4AtACWAJYAFQCWgACBDDuAAIEMLwgICAiALoAoCAiAAAjTADgAOQAOnx2fHgBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFZ6GAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIEMLwgICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFZ8xABWehgCWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIEMPoAAgQwvCAgICIAugCoICIAACF8QEkNEQ2hhaW5TdG9yYWdlSXRlbdMAOAA5AA6fQJ9DAGain0F0koEMQIEJDKKfRJ9FgQxBgQxYgDlUZGF0Yd8QEgDMAM0Azp9JAB8A0ADRn0oAIQDPn0sA0gAOACMA0wDUACYA1QAVABUAFQAnAFkAlgCWn1MALwCWAIgAlgGtn0EAlgCWn1sAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQwsCAiBDEMIgB0IgG6BDEAICIEMQggSf8qI9tMAOAA5AA6fX59iAGaiAbYBt4BHgEiin2OfZIEMRIEMT4A52QAfACOfZwAOACafaAAhAIefaZ9EAbYAiACnABUAJwAvAJafcV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMQYBHgB2AQIAAgAQIgQxF0wA4ADkADp9zn3wAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiffZ9+n3+fgJ+Bn4Kfg5+EgQxGgQxHgQxIgQxKgQxLgQxMgQxNgQxOgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWfYwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBDEQICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVn2MAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQxECAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVn6YAFZ9jAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQxJgACBDEQICAgIgC6ATQgIgAAI0wA4ADkADp+0n7UAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWfYwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBDEQICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVn2MAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQxECAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZ9jAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEMRAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWfYwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBDEQICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVn2MAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQxECAgICIAugFIICIAACNkAHwAjoAMADgAmoAQAIQCHoAWfRAG3AIgApwAVACcALwCWoA1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDEGASIAdgECAAIAECIEMUNMAOAA5AA6gD6AXAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaegGKAZoBqgG6AcoB2gHoEMUYEMUoEMU4EMVIEMVYEMVoEMV4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVn2QAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQxPCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFZ9kAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEMTwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWfZACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDE8ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWG7wAVn2QAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBCmmAAIEMTwgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWfZACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDE8ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVn2QAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQxPCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFZ9kAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEMTwgICAiALoBlCAiAAAjfEBIAzADNAM6gigAfANAA0aCLACEAz6CMANIADgAjANMA1AAmANUAFQAVABUAJwBZAJYAlqCUAC8AlgCIAJYBrXSSAJYAlqCcAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEMLAgIgQxaCIAdCIBugQkMCAiBDFkIEnhQpr7TADgAOQAOoKCgowBmogG2AbeAR4BIoqCkoKWBDFuBDGaAOdkAHwAjoKgADgAmoKkAIQCHoKqfRQG2AIgApwAVACcALwCWoLJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDFiAR4AdgECAAIAECIEMXNMAOAA5AA6gtKC9AGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKooL6gv6DAoMGgwqDDoMSgxYEMXYEMXoEMX4EMYYEMYoEMY4EMZIEMZYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVoKQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQxbCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaCkAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEMWwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaDnABWgpACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEMYIAAgQxbCAgICIAugE0ICIAACNMAOAA5AA6g9aD2AGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVoKQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQxbCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFaCkAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEMWwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWgpACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDFsICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVoKQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQxbCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaCkAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEMWwgICAiALoBSCAiAAAjZAB8AI6FEAA4AJqFFACEAh6FGn0UBtwCIAKcAFQAnAC8AlqFOXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQxYgEiAHYBAgACABAiBDGfTADgAOQAOoVChWABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnoVmhWqFboVyhXaFeoV+BDGiBDGmBDGqBDGuBDGyBDG2BDG6AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaClAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEMZggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWgpQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDGYICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVoKUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQxmCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFaClAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEMZggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWgpQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDGYICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVoKUAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQxmCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaClAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEMZggICAiALoBlCAiAAAjSADkADqHLAOaggC3fEBChzqHPodCh0QAfodKh0wAhodSh1QAOACOh1qHXACYAhwCIodkAJwAnABOh3QCOAC8AJwCIAJEARACIoeSh5QCWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BDIOABIAEgAKBDHKAhoAEgB2AiIAPgB2BDPyBDHEIEsILM53TADgAOQAOoemh6wBmoQCbgB+hoeyBDHOAOdkAHwAjoe8ADgAmofAAIQCHofEAWgCbAIgApwAVACcALwCWoflfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDHCAH4AdgECAAIAECIEMdNMAOAA5AA6h+6IFAGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqaIGogeiCKIJogqiC6IMog2iDoEMdYEMd4EMeIEMeoEMe4EMfYEMfoEMgIEMgYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWiEgAVoewAlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBDHaAAIEMcwgICAiALoAiCAiAAAjSADkADqIgAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWh7ACWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBDHMICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWiMwAVoewAlgCWAJYALwCWAN4AsACWAJYAFQCWgACBDHmAAIEMcwgICAiALoAkCAiAAAjSADkADqJBAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWh7ACWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBDHMICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWiVAAVoewAlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBDHyAAIEMcwgICAiALoAmCAiAAAjSADkADqJiAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWh7ACWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBDHMICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWidQAVoewAlgCWAJYALwCWAN4AtACWAJYAFQCWgACBDH+AAIEMcwgICAiALoAoCAiAAAjTADgAOQAOooOihABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFaHsAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIEMcwgICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaKXABWh7ACWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIEMgoAAgQxzCAgICIAugCoICIAACF8QFUNEUnVudGltZU1ldGFkYXRhSXRlbdMAOAA5AA6ipqKsAGaloqeiqHSSoqqiq4EMhIEMhYEJDIEMhoEMh6WiraKuoq+isKKxgQyIgQyfgQy2gQzNgQzlgDlYbWV0YWRhdGFYcmVzb2x2ZXJZdHhWZXJzaW9uV3ZlcnNpb27fEBIAzADNAM6iuAAfANAA0aK5ACEAz6K6ANIADgAjANMA1AAmANUAFQAVABUAJwBaAJYAlqLCAC8AlgCIAJYBraKnAJYAlqLKAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEMcAgIgQyKCIAdCIBugQyECAiBDIkIEvVwaV3TADgAOQAOos6i0QBmogG2AbeAR4BIoqLSotOBDIuBDJaAOdkAHwAjotYADgAmotcAIQCHotiirQG2AIgApwAVACcALwCWouBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDIiAR4AdgECAAIAECIEMjNMAOAA5AA6i4qLrAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoouyi7aLuou+i8KLxovKi84EMjYEMjoEMj4EMkYEMkoEMk4EMlIEMlYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVotIAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQyLCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaLSAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEMiwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaMVABWi0gCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEMkIAAgQyLCAgICIAugE0ICIAACNMAOAA5AA6jI6MkAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVotIAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQyLCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFaLSAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEMiwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWi0gCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDIsICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVotIAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQyLCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaLSAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEMiwgICAiALoBSCAiAAAjZAB8AI6NyAA4AJqNzACEAh6N0oq0BtwCIAKcAFQAnAC8AlqN8XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQyIgEiAHYBAgACABAiBDJfTADgAOQAOo36jhgBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWno4ejiKOJo4qji6OMo42BDJiBDJmBDJqBDJuBDJyBDJ2BDJ6AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaLTAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEMlggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWi0wCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDJYICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVotMAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQyWCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVhu8AFaLTAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQppgACBDJYICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVotMAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQyWCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaLTAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEMlggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWi0wCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDJYICAgIgC6AZQgIgAAI3xASAMwAzQDOo/kAHwDQANGj+gAhAM+j+wDSAA4AIwDTANQAJgDVABUAFQAVACcAWgCWAJakAwAvAJYAiACWAa2iqACWAJakCwCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDHAICIEMoQiAHQiAboEMhQgIgQygCBMAAAABGqQFiNMAOAA5AA6kD6QSAGaiAbYBt4BHgEiipBOkFIEMooEMrYA52QAfACOkFwAOACakGAAhAIekGaKuAbYAiACnABUAJwAvAJakIV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMn4BHgB2AQIAAgAQIgQyj0wA4ADkADqQjpCwAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqikLaQupC+kMKQxpDKkM6Q0gQykgQylgQymgQyogQypgQyqgQyrgQysgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWkEwCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBDKIICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpBMAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQyiCAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVpFYAFaQTAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQyngACBDKIICAgIgC6ATQgIgAAI0wA4ADkADqRkpGUAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWkEwCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBDKIICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVpBMAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQyiCAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaQTAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEMoggICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWkEwCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBDKIICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVpBMAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQyiCAgICIAugFIICIAACNkAHwAjpLMADgAmpLQAIQCHpLWirgG3AIgApwAVACcALwCWpL1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDJ+ASIAdgECAAIAECIEMrtMAOAA5AA6kv6THAGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaekyKTJpMqky6TMpM2kzoEMr4EMsIEMsYEMsoEMs4EMtIEMtYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpBQAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQytCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaQUAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEMrQgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWkFACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDK0ICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWG7wAVpBQAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBCmmAAIEMrQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWkFACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDK0ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpBQAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQytCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaQUAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEMrQgICAiALoBlCAiAAAjfEBIAzADNAM6lOgAfANAA0aU7ACEAz6U8ANIADgAjANMA1AAmANUAFQAVABUAJwBaAJYAlqVEAC8AlgCIAJYBrXSSAJYAlqVMAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEMcAgIgQy4CIAdCIBugQkMCAiBDLcIEjUQ/JLTADgAOQAOpVClUwBmogG2AbeAR4BIoqVUpVWBDLmBDMSAOdkAHwAjpVgADgAmpVkAIQCHpVqirwG2AIgApwAVACcALwCWpWJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDLaAR4AdgECAAIAECIEMutMAOAA5AA6lZKVtAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKopW6lb6VwpXGlcqVzpXSldYEMu4EMvIEMvYEMv4EMwIEMwYEMwoEMw4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVpVQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQy5CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaVUAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEMuQgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaWXABWlVACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEMvoAAgQy5CAgICIAugE0ICIAACNMAOAA5AA6lpaWmAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVpVQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQy5CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFaVUAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEMuQgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWlVACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDLkICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpVQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQy5CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaVUAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEMuQgICAiALoBSCAiAAAjZAB8AI6X0AA4AJqX1ACEAh6X2oq8BtwCIAKcAFQAnAC8AlqX+XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQy2gEiAHYBAgACABAiBDMXTADgAOQAOpgCmCABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnpgmmCqYLpgymDaYOpg+BDMaBDMeBDMiBDMmBDMqBDMuBDMyAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaVVAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEMxAgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWlVQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDMQICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpVUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQzECAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFaVVAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEMxAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWlVQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDMQICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVpVUAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQzECAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaVVAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEMxAgICAiALoBlCAiAAAjfEBIAzADNAM6mewAfANAA0aZ8ACEAz6Z9ANIADgAjANMA1AAmANUAFQAVABUAJwBaAJYAlqaFAC8AlgCIAJYBraKqAJYAlqaNAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEMcAgIgQzPCIAdCIBugQyGCAiBDM4IEl6IliXTADgAOQAOppGmlABmogG2AbeAR4BIoqaVppaBDNCBDNuAOdkAHwAjppkADgAmppoAIQCHppuisAG2AIgApwAVACcALwCWpqNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDM2AR4AdgECAAIAECIEM0dMAOAA5AA6mpaauAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKopq+msKaxprKms6a0prWmtoEM0oEM04EM1IEM1oEM14EM2IEM2YEM2oA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVppUAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQzQCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaaVAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEM0AgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFabYABWmlQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEM1YAAgQzQCAgICIAugE0ICIAACNMAOAA5AA6m5qbnAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVppUAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQzQCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFaaVAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEM0AgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWmlQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDNAICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVppUAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQzQCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaaVAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEM0AgICAiALoBSCAiAAAjZAB8AI6c1AA4AJqc2ACEAh6c3orABtwCIAKcAFQAnAC8Alqc/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQzNgEiAHYBAgACABAiBDNzTADgAOQAOp0GnSQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnp0qnS6dMp02nTqdPp1CBDN2BDN6BDN+BDOCBDOKBDOOBDOSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVIVsAFaaWAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgQLdgACBDNsICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVppYAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQzbCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaaWAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEM2wgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaeBABWmlgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEM4YAAgQzbCAgICIAugGIICIAACBDI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVppYAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQzbCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaaWAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEM2wgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWmlgCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDNsICAgIgC6AZQgIgAAI3xASAMwAzQDOp70AHwDQANGnvgAhAM+nvwDSAA4AIwDTANQAJgDVABUAFQAVACcAWgCWAJanxwAvAJYAiACWAa2iqwCWAJanzwCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDHAICIEM5wiAHQiAboEMhwgIgQzmCBLBMGLr0wA4ADkADqfTp9YAZqIBtgG3gEeASKKn16fYgQzogQzzgDnZAB8AI6fbAA4AJqfcACEAh6fdorEBtgCIAKcAFQAnAC8AlqflXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQzlgEeAHYBAgACABAiBDOnTADgAOQAOp+en8ABmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqKfxp/Kn86f0p/Wn9qf3p/iBDOqBDOuBDOyBDO6BDO+BDPCBDPGBDPKAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFafXAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEM6AgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWn1wCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDOgICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWoGgAVp9cAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDO2AAIEM6AgICAiALoBNCAiAAAjTADgAOQAOqCioKQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFafXAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEM6AgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABWn1wCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDOgICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVp9cAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQzoCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFafXAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEM6AgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWn1wCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDOgICAgIgC6AUggIgAAI2QAfACOodwAOACaoeAAhAIeoeaKxAbcAiACnABUAJwAvAJaogV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEM5YBIgB2AQIAAgAQIgQz00wA4ADkADqiDqIsAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp6iMqI2ojqiPqJCokaiSgQz1gQz2gQz3gQz4gQz5gQz6gQz7gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFSFbABWn2ACWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIEC3YAAgQzzCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFafYAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEM8wgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWn2ACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDPMICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWngQAVp9gAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBDOGAAIEM8wgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWn2ACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDPMICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVp9gAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQzzCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFafYAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEM8wgICAiALoBlCAiAAAjSADkADqj+AOaggC3fEBCpAakCqQOpBAAfqQWpBgAhqQepCAAOACOpCakKACYAhwCIqQwAJwAnABOpEACOAC8AJwCIAJEARQCIqRepGACWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BDRCABIAEgAKBDP+AhoAEgB2AiIAQgB2BDeWBDP4IEpsnKLHTADgAOQAOqRypHgBmoQCbgB+hqR+BDQCAOdkAHwAjqSIADgAmqSMAIQCHqSQAWwCbAIgApwAVACcALwCWqSxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDP2AH4AdgECAAIAECIENAdMAOAA5AA6pLqk4AGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqak5qTqpO6k8qT2pPqk/qUCpQYENAoENBIENBYENB4ENCIENCoENC4ENDYENDoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWpRQAVqR8AlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBDQOAAIENAAgICAiALoAiCAiAAAjSADkADqlTAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWpHwCWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBDQAICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWpZgAVqR8AlgCWAJYALwCWAN4AsACWAJYAFQCWgACBDQaAAIENAAgICAiALoAkCAiAAAjSADkADql0AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWpHwCWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBDQAICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWphwAVqR8AlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBDQmAAIENAAgICAiALoAmCAiAAAjSADkADqmVAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWpHwCWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBDQAICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWpqAAVqR8AlgCWAJYALwCWAN4AtACWAJYAFQCWgACBDQyAAIENAAgICAiALoAoCAiAAAjTADgAOQAOqbaptwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFakfAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIENAAgICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFanKABWpHwCWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIEND4AAgQ0ACAgICIAugCoICIAACF8QGUNEUG9sa2Fzd2FwUmVtb3RlU2V0dGluZ3PTADgAOQAOqdmp3wBmpanaqdup3KndoquBDRGBDRKBDROBDRSBDIelqeCp4aniqeOp5IENFYENLYENRYENXIENzoA5XxAQYXZhaWxhYmxlU291cmNlc11mb3JjZVNtYXJ0SWRzWHhzdHVzZElkXxAPYXZhaWxhYmxlRGV4SWRz3xASAMwAzQDOqesAHwDQANGp7AAhAM+p7QDSAA4AIwDTANQAJgDVABUAFQAVACcAWwCWAJap9QAvAJYAiACWAa2p2gCWAJap/QCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDP0ICIENFwiAHQiAboENEQgIgQ0WCBKQ1xa/0wA4ADkADqoBqgQAZqIBtgG3gEeASKKqBaoGgQ0YgQ0jgDnZAB8AI6oJAA4AJqoKACEAh6oLqeABtgCIAKcAFQAnAC8AlqoTXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ0VgEeAHYBAgACABAiBDRnTADgAOQAOqhWqHgBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqKofqiCqIaoiqiOqJKolqiaBDRqBDRuBDRyBDR6BDR+BDSCBDSGBDSKAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaoFAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIENGAgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWqBQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDRgICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWqSAAVqgUAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDR2AAIENGAgICAiALoBNCAiAAAjTADgAOQAOqlaqVwBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFaoFAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIENGAgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWqBQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIA2gACBDRgICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVqgUAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ0YCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaoFAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIENGAgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWqBQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDRgICAgIgC6AUggIgAAI2QAfACOqpQAOACaqpgAhAIeqp6ngAbcAiACnABUAJwAvAJaqr18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYENFYBIgB2AQIAAgAQIgQ0k0wA4ADkADqqxqrkAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp6q6qruqvKq9qr6qv6rAgQ0lgQ0mgQ0ngQ0ogQ0pgQ0qgQ0sgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWqBgCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDSMICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVqgYAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ0jCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaoGAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIENIwgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFSVNABWqBgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEDJ4AAgQ0jCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaoGAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIENIwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFasPABWqBgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIENK4AAgQ0jCAgICIAugGQICIAACF8QJE5TU2VjdXJlVW5hcmNoaXZlRnJvbURhdGFUcmFuc2Zvcm1lct8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFaoGAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIENIwgICAiALoBlCAiAAAjfEBIAzADNAM6rLQAfANAA0asuACEAz6svANIADgAjANMA1AAmANUAFQAVABUAJwBbAJYAlqs3AC8AlgCIAJYBranbAJYAlqs/AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEM/QgIgQ0vCIAdCIBugQ0SCAiBDS4IEtdfa2zTADgAOQAOq0OrRgBmogG2AbeAR4BIoqtHq0iBDTCBDTuAOdkAHwAjq0sADgAmq0wAIQCHq02p4QG2AIgApwAVACcALwCWq1VfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDS2AR4AdgECAAIAECIENMdMAOAA5AA6rV6tgAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKoq2GrYqtjq2SrZatmq2eraIENMoENM4ENNIENNoENN4ENOIENOYENOoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVq0cAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ0wCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFatHAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIENMAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFauKABWrRwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIENNYAAgQ0wCAgICIAugE0ICIAACNMAOAA5AA6rmKuZAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVq0cAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ0wCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFatHAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIENMAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWrRwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDTAICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVq0cAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ0wCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFatHAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIENMAgICAiALoBSCAiAAAjZAB8AI6vnAA4AJqvoACEAh6vpqeEBtwCIAKcAFQAnAC8AlqvxXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ0tgEiAHYBAgACABAiBDTzTADgAOQAOq/Or+wBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnq/yr/av+q/+sAKwBrAKBDT2BDT6BDT+BDUCBDUGBDUKBDUSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFatIAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIENOwgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWrSACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDTsICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVq0gAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ07CAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVJU0AFatIAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgQMngACBDTsICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVq0gAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ07CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrFEAFatIAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgQ1DgACBDTsICAgIgC6AZAgIgAAIXxAkTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0YVRyYW5zZm9ybWVy3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVq0gAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQ07CAgICIAugGUICIAACN8QEgDMAM0AzqxvAB8A0ADRrHAAIQDPrHEA0gAOACMA0wDUACYA1QAVABUAFQAnAFsAlgCWrHkALwCWAIgAlgGtqdwAlgCWrIEAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQz9CAiBDUcIgB0IgG6BDRMICIENRggSf5hJFtMAOAA5AA6shayIAGaiAbYBt4BHgEiirImsioENSIENU4A52QAfACOsjQAOACasjgAhAIesj6niAbYAiACnABUAJwAvAJasl18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYENRYBHgB2AQIAAgAQIgQ1J0wA4ADkADqyZrKIAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqiso6ykrKWspqynrKisqayqgQ1KgQ1LgQ1MgQ1OgQ1PgQ1QgQ1RgQ1SgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWsiQCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBDUgICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVrIkAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQ1ICAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrMwAFayJAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQ1NgACBDUgICAgIgC6ATQgIgAAI0wA4ADkADqzarNsAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWsiQCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBDUgICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVrIkAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQ1ICAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFayJAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIENSAgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWsiQCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBDUgICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVrIkAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQ1ICAgICIAugFIICIAACNkAHwAjrSkADgAmrSoAIQCHrSup4gG3AIgApwAVACcALwCWrTNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDUWASIAdgECAAIAECIENVNMAOAA5AA6tNa09AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZaetPq0/rUCtQa1CrUOtRIENVYENVoENV4ENWIENWYENWoENW4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVrIoAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQ1TCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFayKAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIENUwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWsigCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDVMICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVrIoAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQ1TCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFayKAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIENUwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWsigCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBDVMICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVrIoAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQ1TCAgICIAugGUICIAACN8QEgDMAM0Azq2wAB8A0ADRrbEAIQDPrbIA0gAOACMA0wDUACYA1QAVABUAFQAnAFsAlgCWrboALwCWAIgAlhMSqd0AlgCWrcIAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQz9CAiBDV4IgB0IgQI6gQ0UCAiBDV0IEq3Be7bTADgAOQAOrcatyQBmogG2ExyAR4EBw6Ktyq3LgQ1fgQ1qgDnZAB8AI63OAA4AJq3PACEAh63QqeMBtgCIAKcAFQAnAC8Alq3YXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ1cgEeAHYBAgACABAiBDWDTADgAOQAOrdqt4wBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqK3kreWt5q3nreit6a3qreuBDWGBDWKBDWOBDWWBDWaBDWeBDWiBDWmAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFa3KAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIENXwgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWtygCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDV8ICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWuDQAVrcoAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDWSAAIENXwgICAiALoBNCAiAAAjTADgAOQAOrhuuHABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFa3KAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIENXwgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWtygCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIA2gACBDV8ICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVrcoAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ1fCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFa3KAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIENXwgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWtygCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDV8ICAgIgC6AUggIgAAI2QAfACOuagAOACauawAhAIeubKnjExwAiACnABUAJwAvAJaudF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYENXIEBw4AdgECAAIAECIENa9MAOAA5AA6udq59AGamE8wTzRPOE88T0BPRgQHRgQHSgQHTgQHUgQHVgQHWpq5+rn+ugK6BroKug4ENbIENyYENyoENy4ENzIENzYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAZQAVrcsAlgCWAJYALwCWAN4TzACWAJYAFQCWgACBDW2AAIENaggICAiALoEB0QgIgAAI3xAQrpWulq6XrpgAH66ZrpoAIa6brpwADgAjrp2ungAmAIcAiK6gACcAJwATrqQAjgAvACcAiACRAE8AiK6rrqwAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAdgQ2AgASABIACgQ1vgIaABIAdgIiAGoAdgQ3IgQ1uCBLLRS760wA4ADkADq6wrrIAZqEAm4Afoa6zgQ1wgDnZAB8AI662AA4AJq63ACEAh664AGUAmwCIAKcAFQAnAC8Alq7AXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ1tgB+AHYBAgACABAiBDXHTADgAOQAOrsKuzABmqQCuAK8AsACxALIAswC0ALUAtoAigCOAJIAlgCaAJ4AogCmAKqmuza7Ors+u0K7RrtKu067UrtWBDXKBDXSBDXWBDXeBDXiBDXqBDXuBDX2BDX6AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrtkAFa6zAJYAlgCWAC8AlgDeAK4AlgCWABUAloAAgQ1zgACBDXAICAgIgC6AIggIgAAI0gA5AA6u5wDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVrrMAlgCWAJYALwCWAN4ArwCWAJYAFQCWgACAAIAAgQ1wCAgICIAugCMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrvoAFa6zAJYAlgCWAC8AlgDeALAAlgCWABUAloAAgQ12gACBDXAICAgIgC6AJAgIgAAI0gA5AA6vCADmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVrrMAlgCWAJYALwCWAN4AsQCWAJYAFQCWgACAAIAAgQ1wCAgICIAugCUICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrxsAFa6zAJYAlgCWAC8AlgDeALIAlgCWABUAloAAgQ15gACBDXAICAgIgC6AJggIgAAI0gA5AA6vKQDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVrrMAlgCWAJYALwCWAN4AswCWAJYAFQCWgACANoAAgQ1wCAgICIAugCcICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVrzwAFa6zAJYAlgCWAC8AlgDeALQAlgCWABUAloAAgQ18gACBDXAICAgIgC6AKAgIgAAI0wA4ADkADq9Kr0sAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQFfABWuswCWAJYAlgAvAJYA3gC1AJYAlgAVAJaAAIA7gACBDXAICAgIgC6AKQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWvXgAVrrMAlgCWAJYALwCWAN4AtgCWAJYAFQCWgACBDX+AAIENcAgICAiALoAqCAiAAAheQ0RQb2xrYXN3YXBEZXjTADgAOQAOr22vcQBmo69uCeSvcIENgYEBDYENgqOvcq9zr3SBDYOBDZqBDbGAOVdhc3NldElkVGNvZGXfEBIAzADNAM6veQAfANAA0a96ACEAz697ANIADgAjANMA1AAmANUAFQAVABUAJwBlAJYAlq+DAC8AlgCIAJYBra9uAJYAlq+LAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIENbQgIgQ2FCIAdCIBugQ2BCAiBDYQIEsmbKerTADgAOQAOr4+vkgBmogG2AbeAR4BIoq+Tr5SBDYaBDZGAOdkAHwAjr5cADgAmr5gAIQCHr5mvcgG2AIgApwAVACcALwCWr6FfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDYOAR4AdgECAAIAECIENh9MAOAA5AA6vo6+sAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKor62vrq+vr7Cvsa+yr7OvtIENiIENiYENioENjIENjYENjoENj4ENkIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVr5MAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ2GCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFa+TAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIENhggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFa/WABWvkwCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIENi4AAgQ2GCAgICIAugE0ICIAACNMAOAA5AA6v5K/lAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVr5MAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ2GCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFa+TAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIENhggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWvkwCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDYYICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVr5MAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ2GCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFa+TAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIENhggICAiALoBSCAiAAAjZAB8AI7AzAA4AJrA0ACEAh7A1r3IBtwCIAKcAFQAnAC8AlrA9XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ2DgEiAHYBAgACABAiBDZLTADgAOQAOsD+wRwBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnsEiwSbBKsEuwTLBNsE6BDZOBDZSBDZWBDZaBDZeBDZiBDZmAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFa+UAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIENkQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWvlACWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDZEICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVr5QAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ2RCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFa+UAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIENkQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWvlACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDZEICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVr5QAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ2RCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFa+UAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIENkQgICAiALoBlCAiAAAjfEBIAzADNAM6wugAfANAA0bC7ACEAz7C8ANIADgAjANMA1AAmANUAFQAVABUAJwBlAJYAlrDEAC8AlgCIAJYBrQnkAJYAlrDMAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIENbQgIgQ2cCIAdCIBugQENCAiBDZsIElQKI5TTADgAOQAOsNCw0wBmogG2AbeAR4BIorDUsNWBDZ2BDaiAOdkAHwAjsNgADgAmsNkAIQCHsNqvcwG2AIgApwAVACcALwCWsOJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDZqAR4AdgECAAIAECIENntMAOAA5AA6w5LDtAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKosO6w77DwsPGw8rDzsPSw9YENn4ENoIENoYENo4ENpIENpYENpoENp4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVsNQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ2dCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbDUAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIENnQgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFbEXABWw1ACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIENooAAgQ2dCAgICIAugE0ICIAACNMAOAA5AA6xJbEmAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVsNQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ2dCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFbDUAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIENnQgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWw1ACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDZ0ICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVsNQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ2dCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbDUAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIENnQgICAiALoBSCAiAAAjZAB8AI7F0AA4AJrF1ACEAh7F2r3MBtwCIAKcAFQAnAC8AlrF+XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ2agEiAHYBAgACABAiBDanTADgAOQAOsYCxiABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnsYmxirGLsYyxjbGOsY+BDaqBDauBDayBDa2BDa6BDa+BDbCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbDVAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIENqAgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWw1QCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDagICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVsNUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ2oCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFbDVAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIENqAgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWw1QCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDagICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVsNUAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ2oCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbDVAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIENqAgICAiALoBlCAiAAAjfEBIAzADNAM6x+wAfANAA0bH8ACEAz7H9ANIADgAjANMA1AAmANUAFQAVABUAJwBlAJYAlrIFAC8AlgCIAJYBra9wAJYAlrINAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIENbQgIgQ2zCIAdCIBugQ2CCAiBDbIIEi2AYRfTADgAOQAOshGyFABmogG2AbeAR4BIorIVshaBDbSBDb+AOdkAHwAjshkADgAmshoAIQCHshuvdAG2AIgApwAVACcALwCWsiNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDbGAR4AdgECAAIAECIENtdMAOAA5AA6yJbIuAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKosi+yMLIxsjKyM7I0sjWyNoENtoENt4ENuIENuoENu4ENvIENvYENvoA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVshUAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ20CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbIVAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIENtAgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFbJYABWyFQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIENuYAAgQ20CAgICIAugE0ICIAACNMAOAA5AA6yZrJnAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVshUAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ20CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFbIVAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIENtAgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWyFQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDbQICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVshUAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ20CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbIVAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIENtAgICAiALoBSCAiAAAjZAB8AI7K1AA4AJrK2ACEAh7K3r3QBtwCIAKcAFQAnAC8AlrK/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ2xgEiAHYBAgACABAiBDcDTADgAOQAOssGyyQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnssqyy7LMss2yzrLPstCBDcGBDcKBDcOBDcSBDcWBDcaBDceAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVIVsAFbIWAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgQLdgACBDb8ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVshYAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ2/CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbIWAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIENvwgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFaeBABWyFgCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIEM4YAAgQ2/CAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbIWAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIENvwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWyFgCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBDb8ICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVshYAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQ2/CAgICIAugGUICIAACNIAOQAOszwA5qCALd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFa3LAJYAlgCWAC8AlgDeE80AlgCWABUAloAAgDaAAIENaggICAiALoEB0ggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUW+gAVrcsAlgCWAJYALwCWAN4TzgCWAJYAFQCWgACBAhqAAIENaggICAiALoEB0wgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUXGQAVrcsAlgCWAJYALwCWAN4TzwCWAJYAFQCWgACBAh6AAIENaggICAiALoEB1AgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUW+gAVrcsAlgCWAJYALwCWAN4T0ACWAJYAFQCWgACBAhqAAIENaggICAiALoEB1QgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVrcsAlgCWAJYALwCWAN4T0QCWAJYAFQCWgACAWYAAgQ1qCAgICIAugQHWCAiAAAjfEBIAzADNAM6zigAfANAA0bOLACEAz7OMANIADgAjANMA1AAmANUAFQAVABUAJwBbAJYAlrOUAC8AlgCIAJYBraKrAJYAlrOcAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEM/QgIgQ3QCIAdCIBugQyHCAiBDc8IEkd6ah/TADgAOQAOs6CzowBmogG2AbeAR4BIorOks6WBDdGBDdyAOdkAHwAjs6gADgAms6kAIQCHs6qp5AG2AIgApwAVACcALwCWs7JfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDc6AR4AdgECAAIAECIEN0tMAOAA5AA6ztLO9AGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKos76zv7PAs8GzwrPDs8SzxYEN04EN1IEN1YEN14EN2IEN2YEN2oEN24A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVs6QAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ3RCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbOkAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEN0QgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFbPnABWzpACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEN1oAAgQ3RCAgICIAugE0ICIAACNMAOAA5AA6z9bP2AGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVs6QAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ3RCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbOkAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgDaAAIEN0QgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWzpACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDdEICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVs6QAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ3RCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbOkAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEN0QgICAiALoBSCAiAAAjZAB8AI7REAA4AJrRFACEAh7RGqeQBtwCIAKcAFQAnAC8AlrROXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ3OgEiAHYBAgACABAiBDd3TADgAOQAOtFC0WABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWntFm0WrRbtFy0XbRetF+BDd6BDd+BDeCBDeGBDeKBDeOBDeSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbOlAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEN3AgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABWzpQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDdwICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVs6UAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ3cCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFbOlAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEN3AgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABWzpQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDdwICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVs6UAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ3cCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbOlAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEN3AgICAiALoBlCAiAAAjSADkADrTLAOaggC3fEBC0zrTPtNC00QAftNK00wAhtNS01QAOACO01rTXACYAhwCItNkAJwAnABO03QCOAC8AJwCIAJEARwCItOS05QCWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BDfiABIAEgAKBDeiAhoAEgB2AiIASgB2BDj6BDecIEtu/F6nTADgAOQAOtOm06wBmoQCbgB+htOyBDemAOdkAHwAjtO8ADgAmtPAAIQCHtPEAXQCbAIgApwAVACcALwCWtPlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDeaAH4AdgECAAIAECIEN6tMAOAA5AA60+7UFAGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqbUGtQe1CLUJtQq1C7UMtQ21DoEN64EN7YEN7oEN8IEN8YEN84EN9IEN9oEN94A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW1EgAVtOwAlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBDeyAAIEN6QgICAiALoAiCAiAAAjSADkADrUgAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW07ACWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBDekICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW1MwAVtOwAlgCWAJYALwCWAN4AsACWAJYAFQCWgACBDe+AAIEN6QgICAiALoAkCAiAAAjSADkADrVBAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW07ACWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBDekICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW1VAAVtOwAlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBDfKAAIEN6QgICAiALoAmCAiAAAjSADkADrViAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW07ACWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBDekICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW1dQAVtOwAlgCWAJYALwCWAN4AtACWAJYAFQCWgACBDfWAAIEN6QgICAiALoAoCAiAAAjTADgAOQAOtYO1hABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFbTsAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIEN6QgICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQBHABW07ACWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIASgACBDekICAgIgC6AKggIgAAI0wA4ADkADrWltakAZqOKjAlsCeSBCrGA8YEBDaO1qrWrtayBDfmBDhCBDieAOd8QEgDMAM0AzrWvAB8A0ADRtbAAIQDPtbEA0gAOACMA0wDUACYA1QAVABUAFQAnAF0AlgCWtbkALwCWAIgAlgGtiowAlgCWtcEAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQ3mCAiBDfsIgB0IgG6BCrEICIEN+ggSiadafNMAOAA5AA61xbXIAGaiAbYBt4BHgEiitcm1yoEN/IEOB4A52QAfACO1zQAOACa1zgAhAIe1z7WqAbYAiACnABUAJwAvAJa1118QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEN+YBHgB2AQIAAgAQIgQ390wA4ADkADrXZteIAZqgBzAHNAc4BzwHQAdEB0gHTgEuATIBNgE6AT4BQgFGAUqi147XkteW15rXntei16bXqgQ3+gQ3/gQ4AgQ4CgQ4DgQ4EgQ4FgQ4GgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW1yQCWAJYAlgAvAJYA3gHMAJYAlgAVAJaAAIA2gACBDfwICAgIgC6ASwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVtckAlgCWAJYALwCWAN4BzQCWAJYAFQCWgACAAIAAgQ38CAgICIAugEwICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVtgwAFbXJAJYAlgCWAC8AlgDeAc4AlgCWABUAloAAgQ4BgACBDfwICAgIgC6ATQgIgAAI0wA4ADkADrYathsAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW1yQCWAJYAlgAvAJYA3gHPAJYAlgAVAJaAAIA2gACBDfwICAgIgC6ATggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCKAAVtckAlgCWAJYALwCWAN4B0ACWAJYAFQCWgACAWYAAgQ38CAgICIAugE8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbXJAJYAlgCWAC8AlgDeAdEAlgCWABUAloAAgDaAAIEN/AgICAiALoBQCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW1yQCWAJYAlgAvAJYA3gHSAJYAlgAVAJaAAIAAgACBDfwICAgIgC6AUQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVtckAlgCWAJYALwCWAN4B0wCWAJYAFQCWgACANoAAgQ38CAgICIAugFIICIAACNkAHwAjtmkADgAmtmoAIQCHtmu1qgG3AIgApwAVACcALwCWtnNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDfmASIAdgECAAIAECIEOCNMAOAA5AA62dbZ9AGanAnECcgJzAnQCdQJ2AneAX4BggGGAYoBjgGSAZae2frZ/toC2gbaCtoO2hIEOCYEOCoEOC4EODIEODYEODoEOD4A53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVtcoAlgCWAJYALwCWAN4CcQCWAJYAFQCWgACAAIAAgQ4HCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbXKAJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEOBwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW1ygCWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDgcICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUCtwAVtcoAlgCWAJYALwCWAN4CdACWAJYAFQCWgACAaoAAgQ4HCAgICIAugGIICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbXKAJYAlgCWAC8AlgDeAnUAlgCWABUAloAAgACAAIEOBwgICAiALoBjCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW1ygCWAJYAlgAvAJYA3gJ2AJYAlgAVAJaAAIAAgACBDgcICAgIgC6AZAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVtcoAlgCWAJYALwCWAN4CdwCWAJYAFQCWgACAAIAAgQ4HCAgICIAugGUICIAACN8QEgDMAM0AzrbwAB8A0ADRtvEAIQDPtvIA0gAOACMA0wDUACYA1QAVABUAFQAnAF0AlgCWtvoALwCWAIgAlgGtCWwAlgCWtwIAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQ3mCAiBDhIIgB0IgG6A8QgIgQ4RCBLKY1gl0wA4ADkADrcGtwkAZqIBtgG3gEeASKK3CrcLgQ4TgQ4egDnZAB8AI7cOAA4AJrcPACEAh7cQtasBtgCIAKcAFQAnAC8AlrcYXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ4QgEeAHYBAgACABAiBDhTTADgAOQAOtxq3IwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqLcktyW3Jrcntyi3KbcqtyuBDhWBDhaBDheBDhmBDhqBDhuBDhyBDh2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbcKAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEOEwgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW3CgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDhMICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW3TQAVtwoAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDhiAAIEOEwgICAiALoBNCAiAAAjTADgAOQAOt1u3XABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbcKAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEOEwgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABW3CgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDhMICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVtwoAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ4TCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbcKAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEOEwgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW3CgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDhMICAgIgC6AUggIgAAI2QAfACO3qgAOACa3qwAhAIe3rLWrAbcAiACnABUAJwAvAJa3tF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEOEIBIgB2AQIAAgAQIgQ4f0wA4ADkADre2t74AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp7e/t8C3wbfCt8O3xLfFgQ4ggQ4hgQ4igQ4jgQ4kgQ4lgQ4mgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW3CwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDh4ICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVtwsAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ4eCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbcLAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEOHggICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABW3CwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBDh4ICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVtwsAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ4eCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbcLAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEOHggICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW3CwCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDh4ICAgIgC6AZQgIgAAI3xASAMwAzQDOuDEAHwDQANG4MgAhAM+4MwDSAA4AIwDTANQAJgDVABUAFQAVACcAXQCWAJa4OwAvAJYAiACWAa0J5ACWAJa4QwCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDeYICIEOKQiAHQiAboEBDQgIgQ4oCBJcz1MG0wA4ADkADrhHuEoAZqIBtgG3gEeASKK4S7hMgQ4qgQ41gDnZAB8AI7hPAA4AJrhQACEAh7hRtawBtgCIAKcAFQAnAC8AlrhZXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ4ngEeAHYBAgACABAiBDivTADgAOQAOuFu4ZABmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqLhluGa4Z7houGm4arhruGyBDiyBDi2BDi6BDjCBDjGBDjKBDjOBDjSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbhLAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEOKggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW4SwCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDioICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW4jgAVuEsAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDi+AAIEOKggICAiALoBNCAiAAAjTADgAOQAOuJy4nQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbhLAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEOKggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABW4SwCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDioICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVuEsAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ4qCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbhLAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEOKggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW4SwCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDioICAgIgC6AUggIgAAI2QAfACO46wAOACa47AAhAIe47bWsAbcAiACnABUAJwAvAJa49V8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEOJ4BIgB2AQIAAgAQIgQ420wA4ADkADrj3uP8AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp7kAuQG5ArkDuQS5BbkGgQ43gQ44gQ45gQ46gQ47gQ48gQ49gDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW4TACWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDjUICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVuEwAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ41CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbhMAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEONQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABW4TACWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBDjUICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVuEwAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ41CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbhMAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEONQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW4TACWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDjUICAgIgC6AZQgIgAAI0gA5AA65cgDmoIAt3xAQuXW5drl3uXgAH7l5uXoAIbl7uXwADgAjuX25fgAmAIcAiLmAACcAJwATuYQAjgAvACcAiACRAEkAiLmLuYwAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAdgQ5SgASABIACgQ5BgIaABIAdgIiAFIAdgQ7KgQ5ACBKnkDpZ0wA4ADkADrmQuZIAZqEAm4AfobmTgQ5CgDnZAB8AI7mWAA4AJrmXACEAh7mYAF8AmwCIAKcAFQAnAC8AlrmgXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ4/gB+AHYBAgACABAiBDkPTADgAOQAOuaK5rABmqQCuAK8AsACxALIAswC0ALUAtoAigCOAJIAlgCaAJ4AogCmAKqm5rbmuua+5sLmxubK5s7m0ubWBDkSBDkaBDkeBDkmBDkqBDkyBDk2BDk+BDlCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVubkAFbmTAJYAlgCWAC8AlgDeAK4AlgCWABUAloAAgQ5FgACBDkIICAgIgC6AIggIgAAI0gA5AA65xwDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVuZMAlgCWAJYALwCWAN4ArwCWAJYAFQCWgACAAIAAgQ5CCAgICIAugCMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVudoAFbmTAJYAlgCWAC8AlgDeALAAlgCWABUAloAAgQ5IgACBDkIICAgIgC6AJAgIgAAI0gA5AA656ADmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVuZMAlgCWAJYALwCWAN4AsQCWAJYAFQCWgACAAIAAgQ5CCAgICIAugCUICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVufsAFbmTAJYAlgCWAC8AlgDeALIAlgCWABUAloAAgQ5LgACBDkIICAgIgC6AJggIgAAI0gA5AA66CQDmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVuZMAlgCWAJYALwCWAN4AswCWAJYAFQCWgACANoAAgQ5CCAgICIAugCcICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVuhwAFbmTAJYAlgCWAC8AlgDeALQAlgCWABUAloAAgQ5OgACBDkIICAgIgC6AKAgIgAAI0wA4ADkADroquisAZqCggDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQFfABW5kwCWAJYAlgAvAJYA3gC1AJYAlgAVAJaAAIA7gACBDkIICAgIgC6AKQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW6PgAVuZMAlgCWAJYALwCWAN4AtgCWAJYAFQCWgACBDlGAAIEOQggICAiALoAqCAiAAAhdQ0RDb250YWN0SXRlbdMAOAA5AA66TbpTAGaluk66T7pQdJK6UoEOU4EOVIEOVYEJDIEOVqW6VLpVula6V7pYgQ5XgQ5ugQ6FgQ6cgQ6zgDlbcGVlckFkZHJlc3NddGFyZ2V0QWRkcmVzc1l1cGRhdGVkQXRYcGVlck5hbWXfEBIAzADNAM66XwAfANAA0bpgACEAz7phANIADgAjANMA1AAmANUAFQAVABUAJwBfAJYAlrppAC8AlgCIAJYBrbpOAJYAlrpxAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEOPwgIgQ5ZCIAdCIBugQ5TCAiBDlgIEwAAAAEsfayo0wA4ADkADrp1ungAZqIBtgG3gEeASKK6ebp6gQ5agQ5lgDnZAB8AI7p9AA4AJrp+ACEAh7p/ulQBtgCIAKcAFQAnAC8AlrqHXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ5XgEeAHYBAgACABAiBDlvTADgAOQAOuom6kgBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqLqTupS6lbqWupe6mLqZupqBDlyBDl2BDl6BDmCBDmGBDmKBDmOBDmSAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbp5AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEOWggICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW6eQCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDloICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW6vAAVunkAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDl+AAIEOWggICAiALoBNCAiAAAjTADgAOQAOusq6ywBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbp5AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEOWggICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABW6eQCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDloICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVunkAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ5aCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbp5AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEOWggICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW6eQCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDloICAgIgC6AUggIgAAI2QAfACO7GQAOACa7GgAhAIe7G7pUAbcAiACnABUAJwAvAJa7I18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEOV4BIgB2AQIAAgAQIgQ5m0wA4ADkADrsluy0AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp7suuy+7MLsxuzK7M7s0gQ5ngQ5ogQ5pgQ5qgQ5rgQ5sgQ5tgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW6egCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDmUICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVunoAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ5lCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbp6AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEOZQgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABW6egCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBDmUICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVunoAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ5lCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbp6AJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEOZQgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW6egCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDmUICAgIgC6AZQgIgAAI3xASAMwAzQDOu6AAHwDQANG7oQAhAM+7ogDSAA4AIwDTANQAJgDVABUAFQAVACcAXwCWAJa7qgAvAJYAiACWAa26TwCWAJa7sgCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDj8ICIEOcAiAHQiAboEOVAgIgQ5vCBLK9WbN0wA4ADkADru2u7kAZqIBtgG3gEeASKK7uru7gQ5xgQ58gDnZAB8AI7u+AA4AJru/ACEAh7vAulUBtgCIAKcAFQAnAC8AlrvIXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ5ugEeAHYBAgACABAiBDnLTADgAOQAOu8q70wBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqLvUu9W71rvXu9i72bvau9uBDnOBDnSBDnWBDneBDniBDnmBDnqBDnuAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbu6AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEOcQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW7ugCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDnEICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW7/QAVu7oAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDnaAAIEOcQgICAiALoBNCAiAAAjTADgAOQAOvAu8DABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbu6AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEOcQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABW7ugCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDnEICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVu7oAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ5xCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbu6AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEOcQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW7ugCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDnEICAgIgC6AUggIgAAI2QAfACO8WgAOACa8WwAhAIe8XLpVAbcAiACnABUAJwAvAJa8ZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEOboBIgB2AQIAAgAQIgQ590wA4ADkADrxmvG4AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp7xvvHC8cbxyvHO8dLx1gQ5+gQ5/gQ6AgQ6BgQ6CgQ6DgQ6EgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW7uwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDnwICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVu7sAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ58CAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbu7AJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEOfAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABW7uwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBDnwICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVu7sAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ58CAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbu7AJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEOfAgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW7uwCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDnwICAgIgC6AZQgIgAAI3xASAMwAzQDOvOEAHwDQANG84gAhAM+84wDSAA4AIwDTANQAJgDVABUAFQAVACcAXwCWAJa86wAvAJYAiACWAa26UACWAJa88wCWXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDj8ICIEOhwiAHQiAboEOVQgIgQ6GCBLmGIZ50wA4ADkADrz3vPoAZqIBtgG3gEeASKK8+7z8gQ6IgQ6TgDnZAB8AI7z/AA4AJr0AACEAh70BulYBtgCIAKcAFQAnAC8Alr0JXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ6FgEeAHYBAgACABAiBDonTADgAOQAOvQu9FABmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqL0VvRa9F70YvRm9Gr0bvRyBDoqBDouBDoyBDo6BDo+BDpCBDpGBDpKAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbz7AJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEOiAgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW8+wCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDogICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABW9PgAVvPsAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDo2AAIEOiAgICAiALoBNCAiAAAjTADgAOQAOvUy9TQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbz7AJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEOiAgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABW8+wCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDogICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVvPsAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ6ICAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbz7AJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEOiAgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW8+wCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDogICAgIgC6AUggIgAAI2QAfACO9mwAOACa9nAAhAIe9nbpWAbcAiACnABUAJwAvAJa9pV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEOhYBIgB2AQIAAgAQIgQ6U0wA4ADkADr2nva8AZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp72wvbG9sr2zvbS9tb22gQ6VgQ6WgQ6XgQ6YgQ6ZgQ6agQ6bgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFSFbABW8/ACWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIEC3YAAgQ6TCAgICIAugF8ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFbz8AJYAlgCWAC8AlgDeAnIAlgCWABUAloAAgDaAAIEOkwgICAiALoBgCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW8/ACWAJYAlgAvAJYA3gJzAJYAlgAVAJaAAIAAgACBDpMICAgIgC6AYQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABWX5AAVvPwAlgCWAJYALwCWAN4CdACWAJYAFQCWgACBC7SAAIEOkwgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW8/ACWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDpMICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVvPwAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ6TCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFbz8AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEOkwgICAiALoBlCAiAAAjfEBIAzADNAM6+IgAfANAA0b4jACEAz74kANIADgAjANMA1AAmANUAFQAVABUAJwBfAJYAlr4sAC8AlgCIAJYBrXSSAJYAlr40AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEOPwgIgQ6eCIAdCIBugQkMCAiBDp0IEvSg0KrTADgAOQAOvji+OwBmogG2AbeAR4BIor48vj2BDp+BDqqAOdkAHwAjvkAADgAmvkEAIQCHvkK6VwG2AIgApwAVACcALwCWvkpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDpyAR4AdgECAAIAECIEOoNMAOAA5AA6+TL5VAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKovla+V75Yvlm+Wr5bvly+XYEOoYEOooEOo4EOpYEOpoEOp4EOqIEOqYA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVvjwAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ6fCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb48AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEOnwgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFb5/ABW+PACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEOpIAAgQ6fCAgICIAugE0ICIAACNMAOAA5AA6+jb6OAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVvjwAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ6fCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFb48AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEOnwgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW+PACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDp8ICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVvjwAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ6fCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFb48AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEOnwgICAiALoBSCAiAAAjZAB8AI77cAA4AJr7dACEAh77eulcBtwCIAKcAFQAnAC8Alr7mXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ6cgEiAHYBAgACABAiBDqvTADgAOQAOvui+8ABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnvvG+8r7zvvS+9b72vveBDqyBDq2BDq6BDq+BDrCBDrGBDrKAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb49AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEOqggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW+PQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDqoICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVvj0AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ6qCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFb49AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEOqggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW+PQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDqoICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVvj0AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ6qCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb49AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEOqggICAiALoBlCAiAAAjfEBIAzADNAM6/YwAfANAA0b9kACEAz79lANIADgAjANMA1AAmANUAFQAVABUAJwBfAJYAlr9tAC8AlgCIAJYBrbpSAJYAlr91AJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEOPwgIgQ61CIAdCIBugQ5WCAiBDrQIEpwCyyfTADgAOQAOv3m/fABmogG2AbeAR4BIor99v36BDraBDsGAOdkAHwAjv4EADgAmv4IAIQCHv4O6WAG2AIgApwAVACcALwCWv4tfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDrOAR4AdgECAAIAECIEOt9MAOAA5AA6/jb+WAGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKov5e/mL+Zv5q/m7+cv52/noEOuIEOuYEOuoEOvIEOvYEOvoEOv4EOwIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVv30AlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ62CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb99AJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEOtggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFb/AABW/fQCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEOu4AAgQ62CAgICIAugE0ICIAACNMAOAA5AA6/zr/PAGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVv30AlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ62CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFb99AJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEOtggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW/fQCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDrYICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVv30AlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ62CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFb99AJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEOtggICAiALoBSCAiAAAjZAB8AI8AdAA4AJsAeACEAh8AfulgBtwCIAKcAFQAnAC8AlsAnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ6zgEiAHYBAgACABAiBDsLTADgAOQAOwCnAMQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnwDLAM8A0wDXANsA3wDiBDsOBDsSBDsWBDsaBDseBDsiBDsmAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb9+AJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEOwQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABW/fgCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDsEICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVv34AlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ7BCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFb9+AJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEOwQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABW/fgCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDsEICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVv34AlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ7BCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFb9+AJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEOwQgICAiALoBlCAiAAAjSADkADsCkAOaggC3fEBDAp8CowKnAqgAfwKvArAAhwK3ArgAOACPAr8CwACYAhwCIwLIAJwAnABPAtgCOAC8AJwCIAJEASwCIwL3AvgCWXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgB2BDt6ABIAEgAKBDs2AhoAEgB2AiIAWgB2BDyWBDswIEsIRr8jTADgAOQAOwMLAxABmoQCbgB+hwMWBDs6AOdkAHwAjwMgADgAmwMkAIQCHwMoAYQCbAIgApwAVACcALwCWwNJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDsuAH4AdgECAAIAECIEOz9MAOAA5AA7A1MDeAGapAK4ArwCwALEAsgCzALQAtQC2gCKAI4AkgCWAJoAngCiAKYAqqcDfwODA4cDiwOPA5MDlwObA54EO0IEO0oEO04EO1YEO1oEO2IEO2YEO24EO3IA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABXA6wAVwMUAlgCWAJYALwCWAN4ArgCWAJYAFQCWgACBDtGAAIEOzggICAiALoAiCAiAAAjSADkADsD5AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXAxQCWAJYAlgAvAJYA3gCvAJYAlgAVAJaAAIAAgACBDs4ICAgIgC6AIwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABXBDAAVwMUAlgCWAJYALwCWAN4AsACWAJYAFQCWgACBDtSAAIEOzggICAiALoAkCAiAAAjSADkADsEaAOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXAxQCWAJYAlgAvAJYA3gCxAJYAlgAVAJaAAIAAgACBDs4ICAgIgC6AJQgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABXBLQAVwMUAlgCWAJYALwCWAN4AsgCWAJYAFQCWgACBDteAAIEOzggICAiALoAmCAiAAAjSADkADsE7AOaggC3fEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXAxQCWAJYAlgAvAJYA3gCzAJYAlgAVAJaAAIA2gACBDs4ICAgIgC6AJwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABXBTgAVwMUAlgCWAJYALwCWAN4AtACWAJYAFQCWgACBDtqAAIEOzggICAiALoAoCAiAAAjTADgAOQAOwVzBXQBmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAV8AFcDFAJYAlgCWAC8AlgDeALUAlgCWABUAloAAgDuAAIEOzggICAiALoApCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFcFwABXAxQCWAJYAlgAvAJYA3gC2AJYAlgAVAJaAAIEO3YAAgQ7OCAgICIAugCoICIAACF5DRFBoaXNoaW5nSXRlbdMAOAA5AA7Bf8GDAGajwYB/kHSSgQ7fgQnggQkMo8GEwYXBhoEO4IEO94EPDoA5VnNvdXJjZd8QEgDMAM0AzsGKAB8A0ADRwYsAIQDPwYwA0gAOACMA0wDUACYA1QAVABUAFQAnAGEAlgCWwZQALwCWAIgAlgGtwYAAlgCWwZwAll8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQ7LCAiBDuIIgB0IgG6BDt8ICIEO4QgTAAAAASNPTujTADgAOQAOwaDBowBmogG2AbeAR4BIosGkwaWBDuOBDu6AOdkAHwAjwagADgAmwakAIQCHwarBhAG2AIgApwAVACcALwCWwbJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDuCAR4AdgECAAIAECIEO5NMAOAA5AA7BtMG9AGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKowb7Bv8HAwcHBwsHDwcTBxYEO5YEO5oEO54EO6YEO6oEO64EO7IEO7YA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVwaQAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ7jCAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcGkAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEO4wgICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFcHnABXBpACWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEO6IAAgQ7jCAgICIAugE0ICIAACNMAOAA5AA7B9cH2AGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVwaQAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ7jCAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFcGkAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEO4wgICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXBpACWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDuMICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwaQAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ7jCAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFcGkAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEO4wgICAiALoBSCAiAAAjZAB8AI8JEAA4AJsJFACEAh8JGwYQBtwCIAKcAFQAnAC8AlsJOXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ7ggEiAHYBAgACABAiBDu/TADgAOQAOwlDCWABmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnwlnCWsJbwlzCXcJewl+BDvCBDvGBDvKBDvOBDvSBDvWBDvaAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcGlAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEO7ggICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXBpQCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDu4ICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwaUAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ7uCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFcGlAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEO7ggICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXBpQCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDu4ICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwaUAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ7uCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcGlAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEO7ggICAiALoBlCAiAAAjfEBIAzADNAM7CywAfANAA0cLMACEAz8LNANIADgAjANMA1AAmANUAFQAVABUAJwBhAJYAlsLVAC8AlgCIAJYBrX+QAJYAlsLdAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEOywgIgQ75CIAdCIBugQngCAiBDvgIElOLRLDTADgAOQAOwuHC5ABmogG2AbeAR4BIosLlwuaBDvqBDwWAOdkAHwAjwukADgAmwuoAIQCHwuvBhQG2AIgApwAVACcALwCWwvNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDveAR4AdgECAAIAECIEO+9MAOAA5AA7C9cL+AGaoAcwBzQHOAc8B0AHRAdIB04BLgEyATYBOgE+AUIBRgFKowv/DAMMBwwLDA8MEwwXDBoEO/IEO/YEO/oEPAIEPAYEPAoEPA4EPBIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVwuUAlgCWAJYALwCWAN4BzACWAJYAFQCWgACANoAAgQ76CAgICIAugEsICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcLlAJYAlgCWAC8AlgDeAc0AlgCWABUAloAAgACAAIEO+ggICAiALoBMCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFcMoABXC5QCWAJYAlgAvAJYA3gHOAJYAlgAVAJaAAIEO/4AAgQ76CAgICIAugE0ICIAACNMAOAA5AA7DNsM3AGagoIA53xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVwuUAlgCWAJYALwCWAN4BzwCWAJYAFQCWgACANoAAgQ76CAgICIAugE4ICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVAigAFcLlAJYAlgCWAC8AlgDeAdAAlgCWABUAloAAgFmAAIEO+ggICAiALoBPCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXC5QCWAJYAlgAvAJYA3gHRAJYAlgAVAJaAAIA2gACBDvoICAgIgC6AUAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwuUAlgCWAJYALwCWAN4B0gCWAJYAFQCWgACAAIAAgQ76CAgICIAugFEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFcLlAJYAlgCWAC8AlgDeAdMAlgCWABUAloAAgDaAAIEO+ggICAiALoBSCAiAAAjZAB8AI8OFAA4AJsOGACEAh8OHwYUBtwCIAKcAFQAnAC8AlsOPXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ73gEiAHYBAgACABAiBDwbTADgAOQAOw5HDmQBmpwJxAnICcwJ0AnUCdgJ3gF+AYIBhgGKAY4BkgGWnw5rDm8Ocw53DnsOfw6CBDweBDwiBDwmBDwqBDwuBDwyBDw2AOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcLmAJYAlgCWAC8AlgDeAnEAlgCWABUAloAAgACAAIEPBQgICAiALoBfCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXC5gCWAJYAlgAvAJYA3gJyAJYAlgAVAJaAAIA2gACBDwUICAgIgC6AYAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwuYAlgCWAJYALwCWAN4CcwCWAJYAFQCWgACAAIAAgQ8FCAgICIAugGEICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVArcAFcLmAJYAlgCWAC8AlgDeAnQAlgCWABUAloAAgGqAAIEPBQgICAiALoBiCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXC5gCWAJYAlgAvAJYA3gJ1AJYAlgAVAJaAAIAAgACBDwUICAgIgC6AYwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVwuYAlgCWAJYALwCWAN4CdgCWAJYAFQCWgACAAIAAgQ8FCAgICIAugGQICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcLmAJYAlgCWAC8AlgDeAncAlgCWABUAloAAgACAAIEPBQgICAiALoBlCAiAAAjfEBIAzADNAM7EDAAfANAA0cQNACEAz8QOANIADgAjANMA1AAmANUAFQAVABUAJwBhAJYAlsQWAC8AlgCIAJYBrXSSAJYAlsQeAJZfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEOywgIgQ8QCIAdCIBugQkMCAiBDw8IEwAAAAEI17t/0wA4ADkADsQixCUAZqIBtgG3gEeASKLEJsQngQ8RgQ8cgDnZAB8AI8QqAA4AJsQrACEAh8QswYYBtgCIAKcAFQAnAC8AlsQ0XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQ8OgEeAHYBAgACABAiBDxLTADgAOQAOxDbEPwBmqAHMAc0BzgHPAdAB0QHSAdOAS4BMgE2AToBPgFCAUYBSqMRAxEHEQsRDxETERcRGxEeBDxOBDxSBDxWBDxeBDxiBDxmBDxqBDxuAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFcQmAJYAlgCWAC8AlgDeAcwAlgCWABUAloAAgDaAAIEPEQgICAiALoBLCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXEJgCWAJYAlgAvAJYA3gHNAJYAlgAVAJaAAIAAgACBDxEICAgIgC6ATAgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABXEaQAVxCYAlgCWAJYALwCWAN4BzgCWAJYAFQCWgACBDxaAAIEPEQgICAiALoBNCAiAAAjTADgAOQAOxHfEeABmoKCAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVATgAFcQmAJYAlgCWAC8AlgDeAc8AlgCWABUAloAAgDaAAIEPEQgICAiALoBOCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQIoABXEJgCWAJYAlgAvAJYA3gHQAJYAlgAVAJaAAIBZgACBDxEICAgIgC6ATwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVxCYAlgCWAJYALwCWAN4B0QCWAJYAFQCWgACANoAAgQ8RCAgICIAugFAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcQmAJYAlgCWAC8AlgDeAdIAlgCWABUAloAAgACAAIEPEQgICAiALoBRCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQE4ABXEJgCWAJYAlgAvAJYA3gHTAJYAlgAVAJaAAIA2gACBDxEICAgIgC6AUggIgAAI2QAfACPExgAOACbExwAhAIfEyMGGAbcAiACnABUAJwAvAJbE0F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEPDoBIgB2AQIAAgAQIgQ8d0wA4ADkADsTSxNoAZqcCcQJyAnMCdAJ1AnYCd4BfgGCAYYBigGOAZIBlp8TbxNzE3cTexN/E4MThgQ8egQ8fgQ8ggQ8hgQ8igQ8jgQ8kgDnfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXEJwCWAJYAlgAvAJYA3gJxAJYAlgAVAJaAAIAAgACBDxwICAgIgC6AXwgIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUBOAAVxCcAlgCWAJYALwCWAN4CcgCWAJYAFQCWgACANoAAgQ8cCAgICIAugGAICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcQnAJYAlgCWAC8AlgDeAnMAlgCWABUAloAAgACAAIEPHAgICAiALoBhCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQK3ABXEJwCWAJYAlgAvAJYA3gJ0AJYAlgAVAJaAAIBqgACBDxwICAgIgC6AYggIgAAI3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVxCcAlgCWAJYALwCWAN4CdQCWAJYAFQCWgACAAIAAgQ8cCAgICIAugGMICIAACN8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVABUAFcQnAJYAlgCWAC8AlgDeAnYAlgCWABUAloAAgACAAIEPHAgICAiALoBkCAiAAAjfEA8AzADNAM4AHwDPANAA0QAhANIADgAjANMA1AAmANUAFQAVABXEJwCWAJYAlgAvAJYA3gJ3AJYAlgAVAJaAAIAAgACBDxwICAgIgC6AZQgIgAAI0gA5AA7FTQDmoIAt0wA4ADkADsVQxVEAZqCggDnTADgAOQAOxVTFVQBmoKCAOdMAOAA5AA7FWMVZAGagoIA50gDoAOnFXMVdXlhETW9kZWxQYWNrYWdlpsVexV/FYMVhxWIA7V5YRE1vZGVsUGFja2FnZV8QD1hEVU1MUGFja2FnZUltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDSADkADsVkAOaggC3TADgAOQAOxWfFaABmoKCAOdIA6ADpxWvFbFlYRFBNTW9kZWyjxWvFbQDtV1hETW9kZWwAAAAIAAAAGQAAACIAAAAsAAAAMQAAADoAAAA/AAAAUQAAAFYAAABbAAAAXQAAHrsAAB7BAAAe2gAAHuwAAB7zAAAfAQAAHw4AAB8mAAAfQAAAH0IAAB9FAAAfRwAAH0oAAB9NAAAfUAAAH4kAAB+oAAAfxQAAH+QAAB/2AAAgFgAAIB0AACA7AAAgRwAAIGMAACBpAAAgiwAAIKwAACC/AAAgwQAAIMQAACDHAAAgyQAAIMsAACDNAAAg0AAAINMAACDVAAAg1wAAINkAACDbAAAg3QAAIN8AACDgAAAg5AAAIPEAACD5AAAhBAAAITEAACEzAAAhNQAAITcAACE5AAAhOwAAIT0AACE/AAAhQQAAIUMAACFFAAAhRwAAIUkAACFLAAAhTQAAIU8AACFRAAAhUwAAIVUAACFXAAAhWQAAIVsAACGIAAAhigAAIYwAACGOAAAhkQAAIZQAACGXAAAhmgAAIZ0AACGgAAAhowAAIaYAACGpAAAhrAAAIa8AACGyAAAhtQAAIbgAACG7AAAhvgAAIcEAACHEAAAhxgAAIdIAACHoAAAh8AAAIgIAACIMAAAiIAAAIisAACJGAAAiWwAAInMAACKPAAAimwAAIqUAACKxAAAivwAAItIAACLhAAAi6QAAIvcAACMTAAAjIgAAI2UAACOJAAAjrQAAI9AAACP3AAAkFwAAJD4AACRlAAAkhQAAJKkAACTNAAAk2QAAJNsAACTdAAAk3wAAJOEAACTjAAAk5QAAJOcAACTpAAAk6wAAJO0AACTvAAAk8QAAJPMAACT1AAAk9gAAJPsAACUDAAAlEAAAJRMAACUVAAAlGAAAJRoAACUcAAAlKwAAJVAAACV0AAAlmwAAJb8AACXBAAAlwwAAJcUAACXHAAAlyQAAJcsAACXMAAAlzgAAJdsAACXuAAAl8AAAJfIAACX0AAAl9gAAJfgAACX6AAAl/AAAJf4AACYAAAAmEwAAJhUAACYXAAAmGQAAJhsAACYdAAAmHwAAJiEAACYjAAAmJQAAJicAACY9AAAmUAAAJmwAACaJAAAmpQAAJrkAACbLAAAm4QAAJvoAACc5AAAnPwAAJ0gAACdVAAAnYQAAJ2sAACd1AAAngAAAJ4sAACeYAAAnoAAAJ6IAACekAAAnpgAAJ6gAACepAAAnqgAAJ6sAACesAAAnrgAAJ7AAACexAAAnsgAAJ7QAACe1AAAnvgAAJ78AACfBAAAnygAAJ9UAACfeAAAn7QAAJ/QAACf8AAAoBQAAKA4AACghAAAoKgAAKD0AAChUAAAoZgAAKKUAACinAAAoqQAAKKsAACitAAAorgAAKK8AACiwAAAosQAAKLMAACi1AAAotgAAKLcAACi5AAAougAAKPkAACj7AAAo/QAAKP8AACkBAAApAgAAKQMAACkEAAApBQAAKQcAACkJAAApCgAAKQsAACkNAAApDgAAKRcAACkYAAApGgAAKVkAAClbAAApXQAAKV8AAClhAAApYgAAKWMAAClkAAApZQAAKWcAAClpAAApagAAKWsAACltAAApbgAAKa0AACmvAAApsQAAKbMAACm1AAAptgAAKbcAACm4AAApuQAAKbsAACm9AAApvgAAKb8AACnBAAApwgAAKcsAACnMAAApzgAAKg0AACoPAAAqEQAAKhMAACoVAAAqFgAAKhcAACoYAAAqGQAAKhsAACodAAAqHgAAKh8AACohAAAqIgAAKiMAACpiAAAqZAAAKmYAACpoAAAqagAAKmsAACpsAAAqbQAAKm4AACpwAAAqcgAAKnMAACp0AAAqdgAAKncAACqEAAAqhQAAKoYAACqIAAAqkQAAKqcAACquAAAquwAAKvoAACr8AAAq/gAAKwAAACsCAAArAwAAKwQAACsFAAArBgAAKwgAACsKAAArCwAAKwwAACsOAAArDwAAKygAACsqAAArLAAAKy4AACsvAAArMQAAK0gAACtRAAArXwAAK2wAACt6AAArjwAAK6MAACu6AAArzAAALAsAACwNAAAsDwAALBEAACwTAAAsFAAALBUAACwWAAAsFwAALBkAACwbAAAsHAAALB0AACwfAAAsIAAALCwAACw1AAAsSgAALFkAACxuAAAsfAAALJEAACylAAAsvAAALM4AACzbAAAs4AAALOIAACzkAAAs6QAALOsAACztAAAs7wAALPUAAC0AAAAtSwAALW4AAC2OAAAtrgAALbAAAC2yAAAttAAALbYAAC24AAAtuQAALboAAC28AAAtvQAALb8AAC3AAAAtwgAALcQAAC3FAAAtxgAALcgAAC3JAAAtzgAALdsAAC3gAAAt4gAALeQAAC3pAAAt6wAALe0AAC3vAAAuBAAALhkAAC4+AAAuYgAALokAAC6tAAAurwAALrEAAC6zAAAutQAALrcAAC65AAAuugAALrwAAC7JAAAu2gAALtwAAC7eAAAu4AAALuIAAC7kAAAu5gAALugAAC7qAAAu+wAALv0AAC7/AAAvAQAALwMAAC8FAAAvBwAALwkAAC8LAAAvDQAALysAAC9JAAAvXAAAL3AAAC+FAAAvogAAL7YAAC/MAAAwCwAAMA0AADAPAAAwEQAAMBMAADAUAAAwFQAAMBYAADAXAAAwGQAAMBsAADAcAAAwHQAAMB8AADAgAAAwXwAAMGEAADBjAAAwZQAAMGcAADBoAAAwaQAAMGoAADBrAAAwbQAAMG8AADBwAAAwcQAAMHMAADB0AAAwswAAMLUAADC3AAAwuQAAMLsAADC8AAAwvQAAML4AADC/AAAwwQAAMMMAADDEAAAwxQAAMMcAADDIAAAw1QAAMNYAADDXAAAw2QAAMRgAADEaAAAxHAAAMR4AADEgAAAxIQAAMSIAADEjAAAxJAAAMSYAADEoAAAxKQAAMSoAADEsAAAxLQAAMWwAADFuAAAxcAAAMXIAADF0AAAxdQAAMXYAADF3AAAxeAAAMXoAADF8AAAxfQAAMX4AADGAAAAxgQAAMYIAADHBAAAxwwAAMcUAADHHAAAxyQAAMcoAADHLAAAxzAAAMc0AADHPAAAx0QAAMdIAADHTAAAx1QAAMdYAADIVAAAyFwAAMhkAADIbAAAyHQAAMh4AADIfAAAyIAAAMiEAADIjAAAyJQAAMiYAADInAAAyKQAAMioAADJpAAAyawAAMm0AADJvAAAycQAAMnIAADJzAAAydAAAMnUAADJ3AAAyeQAAMnoAADJ7AAAyfQAAMn4AADKjAAAyxwAAMu4AADMSAAAzFAAAMxYAADMYAAAzGgAAMxwAADMeAAAzHwAAMyEAADMuAAAzPQAAMz8AADNBAAAzQwAAM0UAADNHAAAzSQAAM0sAADNaAAAzXAAAM14AADNgAAAzYgAAM2QAADNmAAAzaAAAM2oAADOKAAAztQAAM88AADPoAAA0AgAANCIAADRFAAA0hAAANIYAADSIAAA0igAANIwAADSNAAA0jgAANI8AADSQAAA0kgAANJQAADSVAAA0lgAANJgAADSZAAA02AAANNoAADTcAAA03gAANOAAADThAAA04gAANOMAADTkAAA05gAANOgAADTpAAA06gAANOwAADTtAAA1LAAANS4AADUwAAA1MgAANTQAADU1AAA1NgAANTcAADU4AAA1OgAANTwAADU9AAA1PgAANUAAADVBAAA1gAAANYIAADWEAAA1hgAANYgAADWJAAA1igAANYsAADWMAAA1jgAANZAAADWRAAA1kgAANZQAADWVAAA1mAAANdcAADXZAAA12wAANd0AADXfAAA14AAANeEAADXiAAA14wAANeUAADXnAAA16AAANekAADXrAAA17AAANisAADYtAAA2LwAANjEAADYzAAA2NAAANjUAADY2AAA2NwAANjkAADY7AAA2PAAANj0AADY/AAA2QAAANn8AADaBAAA2gwAANoUAADaHAAA2iAAANokAADaKAAA2iwAANo0AADaPAAA2kAAANpEAADaTAAA2lAAANp0AADarAAA2uAAANsYAADbTAAA25gAANv0AADcPAAA3WgAAN30AADedAAA3vQAAN78AADfBAAA3wwAAN8UAADfHAAA3yAAAN8kAADfLAAA3zAAAN84AADfPAAA30QAAN9MAADfUAAA31QAAN9cAADfYAAA33QAAN+oAADfvAAA38QAAN/MAADf4AAA3+gAAN/wAADf+AAA4IwAAOEcAADhuAAA4kgAAOJQAADiWAAA4mAAAOJoAADicAAA4ngAAOJ8AADihAAA4rgAAOL8AADjBAAA4wwAAOMUAADjHAAA4yQAAOMsAADjNAAA4zwAAOOAAADjiAAA45AAAOOYAADjoAAA46gAAOOwAADjuAAA48AAAOPIAADkxAAA5MwAAOTUAADk3AAA5OQAAOToAADk7AAA5PAAAOT0AADk/AAA5QQAAOUIAADlDAAA5RQAAOUYAADmFAAA5hwAAOYkAADmLAAA5jQAAOY4AADmPAAA5kAAAOZEAADmTAAA5lQAAOZYAADmXAAA5mQAAOZoAADnZAAA52wAAOd0AADnfAAA54QAAOeIAADnjAAA55AAAOeUAADnnAAA56QAAOeoAADnrAAA57QAAOe4AADn7AAA5/AAAOf0AADn/AAA6PgAAOkAAADpCAAA6RAAAOkYAADpHAAA6SAAAOkkAADpKAAA6TAAAOk4AADpPAAA6UAAAOlIAADpTAAA6kgAAOpQAADqWAAA6mAAAOpoAADqbAAA6nAAAOp0AADqeAAA6oAAAOqIAADqjAAA6pAAAOqYAADqnAAA65gAAOugAADrqAAA67AAAOu4AADrvAAA68AAAOvEAADryAAA69AAAOvYAADr3AAA6+AAAOvoAADr7AAA7OgAAOzwAADs+AAA7QAAAO0IAADtDAAA7RAAAO0UAADtGAAA7SAAAO0oAADtLAAA7TAAAO04AADtPAAA7jgAAO5AAADuSAAA7lAAAO5YAADuXAAA7mAAAO5kAADuaAAA7nAAAO54AADufAAA7oAAAO6IAADujAAA7yAAAO+wAADwTAAA8NwAAPDkAADw7AAA8PQAAPD8AADxBAAA8QwAAPEQAADxGAAA8UwAAPGIAADxkAAA8ZgAAPGgAADxqAAA8bAAAPG4AADxwAAA8fwAAPIEAADyDAAA8hQAAPIcAADyJAAA8iwAAPI0AADyPAAA8zgAAPNAAADzSAAA81AAAPNYAADzXAAA82AAAPNkAADzaAAA83AAAPN4AADzfAAA84AAAPOIAADzjAAA9IgAAPSQAAD0mAAA9KAAAPSoAAD0rAAA9LAAAPS0AAD0uAAA9MAAAPTIAAD0zAAA9NAAAPTYAAD03AAA9dgAAPXgAAD16AAA9fAAAPX4AAD1/AAA9gAAAPYEAAD2CAAA9hAAAPYYAAD2HAAA9iAAAPYoAAD2LAAA9ygAAPcwAAD3OAAA90AAAPdIAAD3TAAA91AAAPdUAAD3WAAA92AAAPdoAAD3bAAA93AAAPd4AAD3fAAA+HgAAPiAAAD4iAAA+JAAAPiYAAD4nAAA+KAAAPikAAD4qAAA+LAAAPi4AAD4vAAA+MAAAPjIAAD4zAAA+cgAAPnQAAD52AAA+eAAAPnoAAD57AAA+fAAAPn0AAD5+AAA+gAAAPoIAAD6DAAA+hAAAPoYAAD6HAAA+xgAAPsgAAD7KAAA+zAAAPs4AAD7PAAA+0AAAPtEAAD7SAAA+1AAAPtYAAD7XAAA+2AAAPtoAAD7bAAA+5gAAPu8AAD7wAAA+8gAAPvsAAD8GAAA/FQAAPyAAAD8uAAA/QwAAP1cAAD9uAAA/gAAAP8MAAD/nAABACwAAQC4AAEBVAABAdQAAQJwAAEDDAABA4wAAQQcAAEErAABBLQAAQS8AAEExAABBMwAAQTUAAEE3AABBOQAAQTsAAEE9AABBPwAAQUEAAEFDAABBRQAAQUcAAEFIAABBTQAAQVoAAEFdAABBXwAAQWIAAEFkAABBZgAAQYsAAEGvAABB1gAAQfoAAEH8AABB/gAAQgAAAEICAABCBAAAQgYAAEIHAABCCQAAQhYAAEIpAABCKwAAQi0AAEIvAABCMQAAQjMAAEI1AABCNwAAQjkAAEI7AABCTgAAQlAAAEJSAABCVAAAQlYAAEJYAABCWgAAQlwAAEJeAABCYAAAQmIAAEKhAABCowAAQqUAAEKnAABCqQAAQqoAAEKrAABCrAAAQq0AAEKvAABCsQAAQrIAAEKzAABCtQAAQrYAAEK/AABCwAAAQsIAAEMBAABDAwAAQwUAAEMHAABDCQAAQwoAAEMLAABDDAAAQw0AAEMPAABDEQAAQxIAAEMTAABDFQAAQxYAAENVAABDVwAAQ1kAAENbAABDXQAAQ14AAENfAABDYAAAQ2EAAENjAABDZQAAQ2YAAENnAABDaQAAQ2oAAENzAABDdAAAQ3YAAEO1AABDtwAAQ7kAAEO7AABDvQAAQ74AAEO/AABDwAAAQ8EAAEPDAABDxQAAQ8YAAEPHAABDyQAAQ8oAAEQJAABECwAARA0AAEQPAABEEQAARBIAAEQTAABEFAAARBUAAEQXAABEGQAARBoAAEQbAABEHQAARB4AAEQnAABEKAAARCoAAERpAABEawAARG0AAERvAABEcQAARHIAAERzAABEdAAARHUAAER3AABEeQAARHoAAER7AABEfQAARH4AAES9AABEvwAARMEAAETDAABExQAARMYAAETHAABEyAAARMkAAETLAABEzQAARM4AAETPAABE0QAARNIAAETfAABE4AAAROEAAETjAABFIgAARSQAAEUmAABFKAAARSoAAEUrAABFLAAARS0AAEUuAABFMAAARTIAAEUzAABFNAAARTYAAEU3AABFdgAARXgAAEV6AABFfAAARX4AAEV/AABFgAAARYEAAEWCAABFhAAARYYAAEWHAABFiAAARYoAAEWLAABFoQAARa4AAEW1AABFtwAARbkAAEW7AABFwgAARcQAAEXGAABFyAAARcoAAEXNAABF1AAARd4AAEYpAABGTAAARmwAAEaMAABGjgAARpAAAEaSAABGlAAARpYAAEaXAABGmAAARpoAAEabAABGnQAARp4AAEagAABGogAARqMAAEakAABGpgAARqcAAEasAABGuQAARr4AAEbAAABGwgAARscAAEbJAABGywAARs0AAEbyAABHFgAARz0AAEdhAABHYwAAR2UAAEdnAABHaQAAR2sAAEdtAABHbgAAR3AAAEd9AABHjgAAR5AAAEeSAABHlAAAR5YAAEeYAABHmgAAR5wAAEeeAABHrwAAR7EAAEezAABHtQAAR7cAAEe5AABHuwAAR70AAEe/AABHwQAASAAAAEgCAABIBAAASAYAAEgIAABICQAASAoAAEgLAABIDAAASA4AAEgQAABIEQAASBIAAEgUAABIFQAASFQAAEhWAABIWAAASFoAAEhcAABIXQAASF4AAEhfAABIYAAASGIAAEhkAABIZQAASGYAAEhoAABIaQAASKgAAEiqAABIrAAASK4AAEiwAABIsQAASLIAAEizAABItAAASLYAAEi4AABIuQAASLoAAEi8AABIvQAASMoAAEjLAABIzAAASM4AAEkNAABJDwAASREAAEkTAABJFQAASRYAAEkXAABJGAAASRkAAEkbAABJHQAASR4AAEkfAABJIQAASSIAAElhAABJYwAASWUAAElnAABJaQAASWoAAElrAABJbAAASW0AAElvAABJcQAASXIAAElzAABJdQAASXYAAEm1AABJtwAASbkAAEm7AABJvQAASb4AAEm/AABJwAAAScEAAEnDAABJxQAAScYAAEnHAABJyQAAScoAAEoJAABKCwAASg0AAEoPAABKEQAAShIAAEoTAABKFAAAShUAAEoXAABKGQAAShoAAEobAABKHQAASh4AAEpdAABKXwAASmEAAEpjAABKZQAASmYAAEpnAABKaAAASmkAAEprAABKbQAASm4AAEpvAABKcQAASnIAAEqXAABKuwAASuIAAEsGAABLCAAASwoAAEsMAABLDgAASxAAAEsSAABLEwAASxUAAEsiAABLMQAASzMAAEs1AABLNwAASzkAAEs7AABLPQAASz8AAEtOAABLUAAAS1IAAEtUAABLVgAAS1gAAEtaAABLXAAAS14AAEudAABLnwAAS6EAAEujAABLpQAAS6YAAEunAABLqAAAS6kAAEurAABLrQAAS64AAEuvAABLsQAAS7IAAEvxAABL8wAAS/UAAEv3AABL+QAAS/oAAEv7AABL/AAAS/0AAEv/AABMAQAATAIAAEwDAABMBQAATAYAAExFAABMRwAATEkAAExLAABMTQAATE4AAExPAABMUAAATFEAAExTAABMVQAATFYAAExXAABMWQAATFoAAEyZAABMmwAATJ0AAEyfAABMoQAATKIAAEyjAABMpAAATKUAAEynAABMqQAATKoAAEyrAABMrQAATK4AAEztAABM7wAATPEAAEzzAABM9QAATPYAAEz3AABM+AAATPkAAEz7AABM/QAATP4AAEz/AABNAQAATQIAAE1BAABNQwAATUUAAE1HAABNSQAATUoAAE1LAABNTAAATU0AAE1PAABNUQAATVIAAE1TAABNVQAATVYAAE2VAABNlwAATZkAAE2bAABNnQAATZ4AAE2fAABNoAAATaEAAE2jAABNpQAATaYAAE2nAABNqQAATaoAAE31AABOGAAATjgAAE5YAABOWgAATlwAAE5eAABOYAAATmIAAE5jAABOZAAATmYAAE5nAABOaQAATmoAAE5sAABObgAATm8AAE5wAABOcgAATnMAAE54AABOhQAATooAAE6MAABOjgAATpMAAE6VAABOlwAATpkAAE6+AABO4gAATwkAAE8tAABPLwAATzEAAE8zAABPNQAATzcAAE85AABPOgAATzwAAE9JAABPWgAAT1wAAE9eAABPYAAAT2IAAE9kAABPZgAAT2gAAE9qAABPewAAT30AAE9/AABPgQAAT4MAAE+FAABPhwAAT4kAAE+LAABPjQAAT8wAAE/OAABP0AAAT9IAAE/UAABP1QAAT9YAAE/XAABP2AAAT9oAAE/cAABP3QAAT94AAE/gAABP4QAAUCAAAFAiAABQJAAAUCYAAFAoAABQKQAAUCoAAFArAABQLAAAUC4AAFAwAABQMQAAUDIAAFA0AABQNQAAUHQAAFB2AABQeAAAUHoAAFB8AABQfQAAUH4AAFB/AABQgAAAUIIAAFCEAABQhQAAUIYAAFCIAABQiQAAUJYAAFCXAABQmAAAUJoAAFDZAABQ2wAAUN0AAFDfAABQ4QAAUOIAAFDjAABQ5AAAUOUAAFDnAABQ6QAAUOoAAFDrAABQ7QAAUO4AAFEtAABRLwAAUTEAAFEzAABRNQAAUTYAAFE3AABROAAAUTkAAFE7AABRPQAAUT4AAFE/AABRQQAAUUIAAFGBAABRgwAAUYUAAFGHAABRiQAAUYoAAFGLAABRjAAAUY0AAFGPAABRkQAAUZIAAFGTAABRlQAAUZYAAFHVAABR1wAAUdkAAFHbAABR3QAAUd4AAFHfAABR4AAAUeEAAFHjAABR5QAAUeYAAFHnAABR6QAAUeoAAFIpAABSKwAAUi0AAFIvAABSMQAAUjIAAFIzAABSNAAAUjUAAFI3AABSOQAAUjoAAFI7AABSPQAAUj4AAFJjAABShwAAUq4AAFLSAABS1AAAUtYAAFLYAABS2gAAUtwAAFLeAABS3wAAUuEAAFLuAABS/QAAUv8AAFMBAABTAwAAUwUAAFMHAABTCQAAUwsAAFMaAABTHAAAUx4AAFMgAABTIgAAUyQAAFMmAABTKAAAUyoAAFNpAABTawAAU20AAFNvAABTcQAAU3IAAFNzAABTdAAAU3UAAFN3AABTeQAAU3oAAFN7AABTfQAAU34AAFO9AABTvwAAU8EAAFPDAABTxQAAU8YAAFPHAABTyAAAU8kAAFPLAABTzQAAU84AAFPPAABT0QAAU9IAAFQRAABUEwAAVBUAAFQXAABUGQAAVBoAAFQbAABUHAAAVB0AAFQfAABUIQAAVCIAAFQjAABUJQAAVCYAAFRlAABUZwAAVGkAAFRrAABUbQAAVG4AAFRvAABUcAAAVHEAAFRzAABUdQAAVHYAAFR3AABUeQAAVHoAAFS5AABUuwAAVL0AAFS/AABUwQAAVMIAAFTDAABUxAAAVMUAAFTHAABUyQAAVMoAAFTLAABUzQAAVM4AAFUNAABVDwAAVREAAFUTAABVFQAAVRYAAFUXAABVGAAAVRkAAFUbAABVHQAAVR4AAFUfAABVIQAAVSIAAFVhAABVYwAAVWUAAFVnAABVaQAAVWoAAFVrAABVbAAAVW0AAFVvAABVcQAAVXIAAFVzAABVdQAAVXYAAFXBAABV5AAAVgQAAFYkAABWJgAAVigAAFYqAABWLAAAVi4AAFYvAABWMAAAVjIAAFYzAABWNQAAVjYAAFY4AABWOgAAVjsAAFY8AABWPgAAVj8AAFZEAABWUQAAVlYAAFZYAABWWgAAVl8AAFZhAABWYwAAVmUAAFaKAABWrgAAVtUAAFb5AABW+wAAVv0AAFb/AABXAQAAVwMAAFcFAABXBgAAVwgAAFcVAABXJgAAVygAAFcqAABXLAAAVy4AAFcwAABXMgAAVzQAAFc2AABXRwAAV0kAAFdLAABXTQAAV08AAFdRAABXUwAAV1UAAFdXAABXWQAAV5gAAFeaAABXnAAAV54AAFegAABXoQAAV6IAAFejAABXpAAAV6YAAFeoAABXqQAAV6oAAFesAABXrQAAV+wAAFfuAABX8AAAV/IAAFf0AABX9QAAV/YAAFf3AABX+AAAV/oAAFf8AABX/QAAV/4AAFgAAABYAQAAWEAAAFhCAABYRAAAWEYAAFhIAABYSQAAWEoAAFhLAABYTAAAWE4AAFhQAABYUQAAWFIAAFhUAABYVQAAWGIAAFhjAABYZAAAWGYAAFilAABYpwAAWKkAAFirAABYrQAAWK4AAFivAABYsAAAWLEAAFizAABYtQAAWLYAAFi3AABYuQAAWLoAAFj5AABY+wAAWP0AAFj/AABZAQAAWQIAAFkDAABZBAAAWQUAAFkHAABZCQAAWQoAAFkLAABZDQAAWQ4AAFlNAABZTwAAWVEAAFlTAABZVQAAWVYAAFlXAABZWAAAWVkAAFlbAABZXQAAWV4AAFlfAABZYQAAWWIAAFmhAABZowAAWaUAAFmnAABZqQAAWaoAAFmrAABZrAAAWa0AAFmvAABZsQAAWbIAAFmzAABZtQAAWbYAAFn1AABZ9wAAWfkAAFn7AABZ/QAAWf4AAFn/AABaAAAAWgEAAFoDAABaBQAAWgYAAFoHAABaCQAAWgoAAFovAABaUwAAWnoAAFqeAABaoAAAWqIAAFqkAABapgAAWqgAAFqqAABaqwAAWq0AAFq6AABayQAAWssAAFrNAABazwAAWtEAAFrTAABa1QAAWtcAAFrmAABa6AAAWuoAAFrsAABa7gAAWvAAAFryAABa9AAAWvYAAFs1AABbNwAAWzkAAFs7AABbPQAAWz4AAFs/AABbQAAAW0EAAFtDAABbRQAAW0YAAFtHAABbSQAAW0oAAFuJAABbiwAAW40AAFuPAABbkQAAW5IAAFuTAABblAAAW5UAAFuXAABbmQAAW5oAAFubAABbnQAAW54AAFvdAABb3wAAW+EAAFvjAABb5QAAW+YAAFvnAABb6AAAW+kAAFvrAABb7QAAW+4AAFvvAABb8QAAW/IAAFwxAABcMwAAXDUAAFw3AABcOQAAXDoAAFw7AABcPAAAXD0AAFw/AABcQQAAXEIAAFxDAABcRQAAXEYAAFyFAABchwAAXIkAAFyLAABcjQAAXI4AAFyPAABckAAAXJEAAFyTAABclQAAXJYAAFyXAABcmQAAXJoAAFzZAABc2wAAXN0AAFzfAABc4QAAXOIAAFzjAABc5AAAXOUAAFznAABc6QAAXOoAAFzrAABc7QAAXO4AAF0tAABdLwAAXTEAAF0zAABdNQAAXTYAAF03AABdOAAAXTkAAF07AABdPQAAXT4AAF0/AABdQQAAXUIAAF1LAABdTAAAXU4AAF2RAABdtQAAXdkAAF38AABeIwAAXkMAAF5qAABekQAAXrEAAF7VAABe+QAAXvsAAF79AABe/wAAXwEAAF8DAABfBQAAXwcAAF8JAABfCwAAXw0AAF8PAABfEQAAXxQAAF8WAABfFwAAXyAAAF8tAABfMAAAXzIAAF81AABfNwAAXzkAAF9eAABfggAAX6kAAF/NAABfzwAAX9EAAF/TAABf1QAAX9cAAF/ZAABf2gAAX9wAAF/pAABf/AAAX/4AAGAAAABgAgAAYAQAAGAGAABgCAAAYAoAAGAMAABgDgAAYCEAAGAjAABgJQAAYCcAAGApAABgKwAAYC0AAGAvAABgMQAAYDMAAGA1AABgdAAAYHYAAGB4AABgegAAYHwAAGB9AABgfgAAYH8AAGCAAABgggAAYIQAAGCFAABghgAAYIgAAGCJAABgkgAAYJMAAGCVAABg1AAAYNYAAGDYAABg2gAAYNwAAGDdAABg3gAAYN8AAGDgAABg4gAAYOQAAGDlAABg5gAAYOgAAGDpAABhKAAAYSoAAGEsAABhLgAAYTAAAGExAABhMgAAYTMAAGE0AABhNgAAYTgAAGE5AABhOgAAYTwAAGE9AABhRgAAYUkAAGFLAABhTQAAYVYAAGFZAABhWwAAYV0AAGFlAABhpAAAYaYAAGGoAABhqgAAYawAAGGtAABhrgAAYa8AAGGwAABhsgAAYbQAAGG1AABhtgAAYbgAAGG5AABh+AAAYfoAAGH8AABh/gAAYgAAAGIBAABiAgAAYgMAAGIEAABiBgAAYggAAGIJAABiCgAAYgwAAGINAABiFgAAYhcAAGIZAABiWAAAYloAAGJcAABiXgAAYmAAAGJhAABiYgAAYmMAAGJkAABiZgAAYmgAAGJpAABiagAAYmwAAGJtAABirAAAYq4AAGKwAABisgAAYrQAAGK1AABitgAAYrcAAGK4AABiugAAYrwAAGK9AABivgAAYsAAAGLBAABizgAAYs8AAGLQAABi0gAAYxEAAGMTAABjFQAAYxcAAGMZAABjGgAAYxsAAGMcAABjHQAAYx8AAGMhAABjIgAAYyMAAGMlAABjJgAAY2UAAGNnAABjaQAAY2sAAGNtAABjbgAAY28AAGNwAABjcQAAY3MAAGN1AABjdgAAY3cAAGN5AABjegAAY4cAAGPOAABj0AAAY9IAAGPUAABj1gAAY9gAAGPbAABj3gAAY+EAAGPkAABj5wAAY+oAAGPtAABj8AAAY/MAAGP2AABj+QAAY/wAAGP/AABkAgAAZAUAAGQIAABkCwAAZA4AAGQRAABkFAAAZBcAAGQaAABkHQAAZB8AAGQiAABkJQAAZCgAAGQrAABkLgAAZHUAAGR4AABkewAAZH4AAGSBAABkhAAAZIcAAGSKAABkjQAAZJAAAGSTAABklgAAZJkAAGScAABknwAAZKIAAGSlAABkqAAAZKsAAGSuAABksQAAZLQAAGS3AABkugAAZL0AAGTAAABkwwAAZMYAAGTJAABkzAAAZM8AAGTSAABk1QAAZNgAAGTbAABk3QAAZOIAAGTxAABlAwAAZREAAGUWAABlIAAAZSkAAGU1AABlRAAAZVcAAGVlAABlcwAAZYEAAGWIAABlkAAAZZ0AAGWqAABlvgAAZcMAAGXKAABl2AAAZeYAAGXwAABl9gAAZgQAAGYOAABmHQAAZjMAAGY6AABmRAAAZk0AAGZhAABmZwAAZrIAAGbVAABm9QAAZxUAAGcXAABnGQAAZxsAAGcdAABnHwAAZyAAAGchAABnJAAAZyUAAGcnAABnKAAAZyoAAGcsAABnLQAAZy4AAGcxAABnMgAAZzcAAGdEAABnSQAAZ0sAAGdNAABnUgAAZ1UAAGdYAABnWgAAZ38AAGejAABnygAAZ+4AAGfxAABn8wAAZ/UAAGf3AABn+QAAZ/sAAGf8AABn/wAAaAwAAGgdAABoHwAAaCEAAGgjAABoJQAAaCcAAGgpAABoKwAAaC0AAGg+AABoQQAAaEQAAGhHAABoSgAAaE0AAGhQAABoUwAAaFYAAGhYAABolwAAaJkAAGibAABonQAAaKAAAGihAABoogAAaKMAAGikAABopgAAaKgAAGipAABoqgAAaKwAAGitAABo7AAAaO4AAGjwAABo8gAAaPUAAGj2AABo9wAAaPgAAGj5AABo+wAAaP0AAGj+AABo/wAAaQEAAGkCAABpQQAAaUMAAGlGAABpSAAAaUsAAGlMAABpTQAAaU4AAGlPAABpUQAAaVMAAGlUAABpVQAAaVcAAGlYAABpZQAAaWYAAGlnAABpaQAAaagAAGmqAABprAAAaa4AAGmxAABpsgAAabMAAGm0AABptQAAabcAAGm5AABpugAAabsAAGm9AABpvgAAaf0AAGn/AABqAQAAagMAAGoGAABqBwAAaggAAGoJAABqCgAAagwAAGoOAABqDwAAahAAAGoSAABqEwAAalIAAGpUAABqVgAAalgAAGpbAABqXAAAal0AAGpeAABqXwAAamEAAGpjAABqZAAAamUAAGpnAABqaAAAaqcAAGqpAABqqwAAaq0AAGqwAABqsQAAarIAAGqzAABqtAAAarYAAGq4AABquQAAaroAAGq8AABqvQAAavwAAGr+AABrAAAAawIAAGsFAABrBgAAawcAAGsIAABrCQAAawsAAGsNAABrDgAAaw8AAGsRAABrEgAAazcAAGtbAABrggAAa6YAAGupAABrqwAAa60AAGuvAABrsQAAa7MAAGu0AABrtwAAa8QAAGvTAABr1QAAa9cAAGvZAABr2wAAa90AAGvfAABr4QAAa/AAAGvzAABr9gAAa/kAAGv8AABr/wAAbAIAAGwFAABsBwAAbEYAAGxIAABsSgAAbEwAAGxPAABsUAAAbFEAAGxSAABsUwAAbFUAAGxXAABsWAAAbFkAAGxbAABsXAAAbJsAAGydAABsnwAAbKEAAGykAABspQAAbKYAAGynAABsqAAAbKoAAGysAABsrQAAbK4AAGywAABssQAAbPAAAGzyAABs9AAAbPYAAGz5AABs+gAAbPsAAGz8AABs/QAAbP8AAG0BAABtAgAAbQMAAG0FAABtBgAAbUUAAG1HAABtSgAAbUwAAG1PAABtUAAAbVEAAG1SAABtUwAAbVUAAG1XAABtWAAAbVkAAG1bAABtXAAAbV8AAG2eAABtoAAAbaIAAG2kAABtpwAAbagAAG2pAABtqgAAbasAAG2tAABtrwAAbbAAAG2xAABtswAAbbQAAG3zAABt9QAAbfcAAG35AABt/AAAbf0AAG3+AABt/wAAbgAAAG4CAABuBAAAbgUAAG4GAABuCAAAbgkAAG5IAABuSgAAbkwAAG5OAABuUQAAblIAAG5TAABuVAAAblUAAG5XAABuWQAAbloAAG5bAABuXQAAbl4AAG6pAABuzAAAbuwAAG8MAABvDgAAbxAAAG8SAABvFAAAbxYAAG8XAABvGAAAbxsAAG8cAABvHgAAbx8AAG8hAABvIwAAbyQAAG8lAABvKAAAbykAAG8uAABvOwAAb0AAAG9CAABvRAAAb0kAAG9MAABvTwAAb1EAAG92AABvmgAAb8EAAG/lAABv6AAAb+oAAG/sAABv7gAAb/AAAG/yAABv8wAAb/YAAHADAABwFAAAcBYAAHAYAABwGgAAcBwAAHAeAABwIAAAcCIAAHAkAABwNQAAcDgAAHA7AABwPgAAcEEAAHBEAABwRwAAcEoAAHBNAABwTwAAcI4AAHCQAABwkgAAcJQAAHCXAABwmAAAcJkAAHCaAABwmwAAcJ0AAHCfAABwoAAAcKEAAHCjAABwpAAAcOMAAHDlAABw5wAAcOkAAHDsAABw7QAAcO4AAHDvAABw8AAAcPIAAHD0AABw9QAAcPYAAHD4AABw+QAAcTgAAHE6AABxPQAAcT8AAHFCAABxQwAAcUQAAHFFAABxRgAAcUgAAHFKAABxSwAAcUwAAHFOAABxTwAAcVwAAHFdAABxXgAAcWAAAHGfAABxoQAAcaMAAHGlAABxqAAAcakAAHGqAABxqwAAcawAAHGuAABxsAAAcbEAAHGyAABxtAAAcbUAAHH0AABx9gAAcfgAAHH6AABx/QAAcf4AAHH/AAByAAAAcgEAAHIDAAByBQAAcgYAAHIHAAByCQAAcgoAAHJJAABySwAAck0AAHJPAAByUgAAclMAAHJUAAByVQAAclYAAHJYAAByWgAAclsAAHJcAAByXgAAcl8AAHKeAAByoAAAcqIAAHKkAABypwAAcqgAAHKpAAByqgAAcqsAAHKtAAByrwAAcrAAAHKxAAByswAAcrQAAHLzAABy9QAAcvcAAHL5AABy/AAAcv0AAHL+AABy/wAAcwAAAHMCAABzBAAAcwUAAHMGAABzCAAAcwkAAHMuAABzUgAAc3kAAHOdAABzoAAAc6IAAHOkAABzpgAAc6gAAHOqAABzqwAAc64AAHO7AABzygAAc8wAAHPOAABz0AAAc9IAAHPUAABz1gAAc9gAAHPnAABz6gAAc+0AAHPwAABz8wAAc/YAAHP5AABz/AAAc/4AAHQ9AAB0PwAAdEEAAHRDAAB0RgAAdEcAAHRIAAB0SQAAdEoAAHRMAAB0TgAAdE8AAHRQAAB0UgAAdFMAAHSSAAB0lAAAdJYAAHSYAAB0mwAAdJwAAHSdAAB0ngAAdJ8AAHShAAB0owAAdKQAAHSlAAB0pwAAdKgAAHTnAAB06QAAdOsAAHTtAAB08AAAdPEAAHTyAAB08wAAdPQAAHT2AAB0+AAAdPkAAHT6AAB0/AAAdP0AAHU8AAB1PgAAdUAAAHVCAAB1RQAAdUYAAHVHAAB1SAAAdUkAAHVLAAB1TQAAdU4AAHVPAAB1UQAAdVIAAHWRAAB1kwAAdZUAAHWXAAB1mgAAdZsAAHWcAAB1nQAAdZ4AAHWgAAB1ogAAdaMAAHWkAAB1pgAAdacAAHXmAAB16AAAdeoAAHXsAAB17wAAdfAAAHXxAAB18gAAdfMAAHX1AAB19wAAdfgAAHX5AAB1+wAAdfwAAHY7AAB2PQAAdj8AAHZBAAB2RAAAdkUAAHZGAAB2RwAAdkgAAHZKAAB2TAAAdk0AAHZOAAB2UAAAdlEAAHacAAB2vwAAdt8AAHb/AAB3AQAAdwMAAHcFAAB3BwAAdwkAAHcKAAB3CwAAdw4AAHcPAAB3EQAAdxIAAHcUAAB3FgAAdxcAAHcYAAB3GwAAdxwAAHchAAB3LgAAdzMAAHc1AAB3NwAAdzwAAHc/AAB3QgAAd0QAAHdpAAB3jQAAd7QAAHfYAAB32wAAd90AAHffAAB34QAAd+MAAHflAAB35gAAd+kAAHf2AAB4BwAAeAkAAHgLAAB4DQAAeA8AAHgRAAB4EwAAeBUAAHgXAAB4KAAAeCsAAHguAAB4MQAAeDQAAHg3AAB4OgAAeD0AAHhAAAB4QgAAeIEAAHiDAAB4hQAAeIcAAHiKAAB4iwAAeIwAAHiNAAB4jgAAeJAAAHiSAAB4kwAAeJQAAHiWAAB4lwAAeNYAAHjYAAB42gAAeNwAAHjfAAB44AAAeOEAAHjiAAB44wAAeOUAAHjnAAB46AAAeOkAAHjrAAB47AAAeSsAAHktAAB5MAAAeTIAAHk1AAB5NgAAeTcAAHk4AAB5OQAAeTsAAHk9AAB5PgAAeT8AAHlBAAB5QgAAeU8AAHlQAAB5UQAAeVMAAHmSAAB5lAAAeZYAAHmYAAB5mwAAeZwAAHmdAAB5ngAAeZ8AAHmhAAB5owAAeaQAAHmlAAB5pwAAeagAAHnnAAB56QAAeesAAHntAAB58AAAefEAAHnyAAB58wAAefQAAHn2AAB5+AAAefkAAHn6AAB5/AAAef0AAHo8AAB6PgAAekAAAHpCAAB6RQAAekYAAHpHAAB6SAAAekkAAHpLAAB6TQAAek4AAHpPAAB6UQAAelIAAHqRAAB6kwAAepUAAHqXAAB6mgAAepsAAHqcAAB6nQAAep4AAHqgAAB6ogAAeqMAAHqkAAB6pgAAeqcAAHrmAAB66AAAeuoAAHrsAAB67wAAevAAAHrxAAB68gAAevMAAHr1AAB69wAAevgAAHr5AAB6+wAAevwAAHshAAB7RQAAe2wAAHuQAAB7kwAAe5UAAHuXAAB7mQAAe5sAAHudAAB7ngAAe6EAAHuuAAB7vQAAe78AAHvBAAB7wwAAe8UAAHvHAAB7yQAAe8sAAHvaAAB73QAAe+AAAHvjAAB75gAAe+kAAHvsAAB77wAAe/EAAHwwAAB8MgAAfDUAAHw3AAB8OgAAfDsAAHw8AAB8PQAAfD4AAHxAAAB8QgAAfEMAAHxEAAB8RgAAfEcAAHxKAAB8iQAAfIsAAHyNAAB8jwAAfJIAAHyTAAB8lAAAfJUAAHyWAAB8mAAAfJoAAHybAAB8nAAAfJ4AAHyfAAB83gAAfOAAAHziAAB85AAAfOcAAHzoAAB86QAAfOoAAHzrAAB87QAAfO8AAHzwAAB88QAAfPMAAHz0AAB9MwAAfTUAAH04AAB9OgAAfT0AAH0+AAB9PwAAfUAAAH1BAAB9QwAAfUUAAH1GAAB9RwAAfUkAAH1KAAB9TQAAfYwAAH2OAAB9kAAAfZIAAH2VAAB9lgAAfZcAAH2YAAB9mQAAfZsAAH2dAAB9ngAAfZ8AAH2hAAB9ogAAfeEAAH3jAAB95QAAfecAAH3qAAB96wAAfewAAH3tAAB97gAAffAAAH3yAAB98wAAffQAAH32AAB99wAAfjYAAH44AAB+OgAAfjwAAH4/AAB+QAAAfkEAAH5CAAB+QwAAfkUAAH5HAAB+SAAAfkkAAH5LAAB+TAAAfpcAAH66AAB+2gAAfvoAAH78AAB+/gAAfwAAAH8CAAB/BAAAfwUAAH8GAAB/CQAAfwoAAH8MAAB/DQAAfw8AAH8RAAB/EgAAfxMAAH8WAAB/FwAAfxwAAH8pAAB/LgAAfzAAAH8yAAB/NwAAfzoAAH89AAB/PwAAf2QAAH+IAAB/rwAAf9MAAH/WAAB/2AAAf9oAAH/cAAB/3gAAf+AAAH/hAAB/5AAAf/EAAIACAACABAAAgAYAAIAIAACACgAAgAwAAIAOAACAEAAAgBIAAIAjAACAJgAAgCkAAIAsAACALwAAgDIAAIA1AACAOAAAgDsAAIA9AACAfAAAgH4AAICAAACAggAAgIUAAICGAACAhwAAgIgAAICJAACAiwAAgI0AAICOAACAjwAAgJEAAICSAACA0QAAgNMAAIDVAACA1wAAgNoAAIDbAACA3AAAgN0AAIDeAACA4AAAgOIAAIDjAACA5AAAgOYAAIDnAACBJgAAgSgAAIErAACBLQAAgTAAAIExAACBMgAAgTMAAIE0AACBNgAAgTgAAIE5AACBOgAAgTwAAIE9AACBSgAAgUsAAIFMAACBTgAAgY0AAIGPAACBkQAAgZMAAIGWAACBlwAAgZgAAIGZAACBmgAAgZwAAIGeAACBnwAAgaAAAIGiAACBowAAgeIAAIHkAACB5gAAgegAAIHrAACB7AAAge0AAIHuAACB7wAAgfEAAIHzAACB9AAAgfUAAIH3AACB+AAAgjcAAII5AACCOwAAgj0AAIJAAACCQQAAgkIAAIJDAACCRAAAgkYAAIJIAACCSQAAgkoAAIJMAACCTQAAgowAAIKOAACCkAAAgpIAAIKVAACClgAAgpcAAIKYAACCmQAAgpsAAIKdAACCngAAgp8AAIKhAACCogAAguEAAILjAACC5QAAgucAAILqAACC6wAAguwAAILtAACC7gAAgvAAAILyAACC8wAAgvQAAIL2AACC9wAAgxwAAINAAACDZwAAg4sAAIOOAACDkAAAg5IAAIOUAACDlgAAg5gAAIOZAACDnAAAg6kAAIO4AACDugAAg7wAAIO+AACDwAAAg8IAAIPEAACDxgAAg9UAAIPYAACD2wAAg94AAIPhAACD5AAAg+cAAIPqAACD7AAAhCsAAIQtAACELwAAhDEAAIQ0AACENQAAhDYAAIQ3AACEOAAAhDoAAIQ8AACEPQAAhD4AAIRAAACEQQAAhIAAAISCAACEhAAAhIYAAISJAACEigAAhIsAAISMAACEjQAAhI8AAISRAACEkgAAhJMAAISVAACElgAAhNUAAITXAACE2QAAhNsAAITeAACE3wAAhOAAAIThAACE4gAAhOQAAITmAACE5wAAhOgAAITqAACE6wAAhSoAAIUsAACFLwAAhTEAAIU0AACFNQAAhTYAAIU3AACFOAAAhToAAIU8AACFPQAAhT4AAIVAAACFQQAAhYAAAIWCAACFhAAAhYYAAIWJAACFigAAhYsAAIWMAACFjQAAhY8AAIWRAACFkgAAhZMAAIWVAACFlgAAhdUAAIXXAACF2QAAhdsAAIXeAACF3wAAheAAAIXhAACF4gAAheQAAIXmAACF5wAAhegAAIXqAACF6wAAhioAAIYsAACGLgAAhjAAAIYzAACGNAAAhjUAAIY2AACGNwAAhjkAAIY7AACGPAAAhj0AAIY/AACGQAAAhosAAIauAACGzgAAhu4AAIbwAACG8gAAhvQAAIb2AACG+AAAhvkAAIb6AACG/QAAhv4AAIcAAACHAQAAhwMAAIcFAACHBgAAhwcAAIcKAACHCwAAhxAAAIcdAACHIgAAhyQAAIcmAACHKwAAhy4AAIcxAACHMwAAh1gAAId8AACHowAAh8cAAIfKAACHzAAAh84AAIfQAACH0gAAh9QAAIfVAACH2AAAh+UAAIf2AACH+AAAh/oAAIf8AACH/gAAiAAAAIgCAACIBAAAiAYAAIgXAACIGgAAiB0AAIggAACIIwAAiCYAAIgpAACILAAAiC8AAIgxAACIcAAAiHIAAIh0AACIdgAAiHkAAIh6AACIewAAiHwAAIh9AACIfwAAiIEAAIiCAACIgwAAiIUAAIiGAACIxQAAiMcAAIjJAACIywAAiM4AAIjPAACI0AAAiNEAAIjSAACI1AAAiNYAAIjXAACI2AAAiNoAAIjbAACJGgAAiRwAAIkfAACJIQAAiSQAAIklAACJJgAAiScAAIkoAACJKgAAiSwAAIktAACJLgAAiTAAAIkxAACJPgAAiT8AAIlAAACJQgAAiYEAAImDAACJhQAAiYcAAImKAACJiwAAiYwAAImNAACJjgAAiZAAAImSAACJkwAAiZQAAImWAACJlwAAidYAAInYAACJ2gAAidwAAInfAACJ4AAAieEAAIniAACJ4wAAieUAAInnAACJ6AAAiekAAInrAACJ7AAAiisAAIotAACKLwAAijEAAIo0AACKNQAAijYAAIo3AACKOAAAijoAAIo8AACKPQAAij4AAIpAAACKQQAAioAAAIqCAACKhAAAioYAAIqJAACKigAAiosAAIqMAACKjQAAio8AAIqRAACKkgAAipMAAIqVAACKlgAAitUAAIrXAACK2QAAitsAAIreAACK3wAAiuAAAIrhAACK4gAAiuQAAIrmAACK5wAAiugAAIrqAACK6wAAixAAAIs0AACLWwAAi38AAIuCAACLhAAAi4YAAIuIAACLigAAi4wAAIuNAACLkAAAi50AAIusAACLrgAAi7AAAIuyAACLtAAAi7YAAIu4AACLugAAi8kAAIvMAACLzwAAi9IAAIvVAACL2AAAi9sAAIveAACL4AAAjB8AAIwhAACMIwAAjCUAAIwoAACMKQAAjCoAAIwrAACMLAAAjC4AAIwwAACMMQAAjDIAAIw0AACMNQAAjHQAAIx2AACMeAAAjHoAAIx9AACMfgAAjH8AAIyAAACMgQAAjIMAAIyFAACMhgAAjIcAAIyJAACMigAAjMkAAIzLAACMzQAAjM8AAIzSAACM0wAAjNQAAIzVAACM1gAAjNgAAIzaAACM2wAAjNwAAIzeAACM3wAAjR4AAI0gAACNIgAAjSQAAI0nAACNKAAAjSkAAI0qAACNKwAAjS0AAI0vAACNMAAAjTEAAI0zAACNNAAAjXMAAI11AACNdwAAjXkAAI18AACNfQAAjX4AAI1/AACNgAAAjYIAAI2EAACNhQAAjYYAAI2IAACNiQAAjcgAAI3KAACNzAAAjc4AAI3RAACN0gAAjdMAAI3UAACN1QAAjdcAAI3ZAACN2gAAjdsAAI3dAACN3gAAjh0AAI4fAACOIQAAjiMAAI4mAACOJwAAjigAAI4pAACOKgAAjiwAAI4uAACOLwAAjjAAAI4yAACOMwAAjn4AAI6hAACOwQAAjuEAAI7jAACO5QAAjucAAI7pAACO6wAAjuwAAI7tAACO8AAAjvEAAI7zAACO9AAAjvYAAI75AACO+gAAjvsAAI7+AACO/wAAjwQAAI8RAACPFgAAjxgAAI8aAACPHwAAjyIAAI8lAACPJwAAj0wAAI9wAACPlwAAj7sAAI++AACPwAAAj8IAAI/EAACPxgAAj8gAAI/JAACPzAAAj9kAAI/qAACP7AAAj+4AAI/wAACP8gAAj/QAAI/2AACP+AAAj/oAAJALAACQDgAAkBEAAJAUAACQFwAAkBoAAJAdAACQIAAAkCMAAJAlAACQZAAAkGYAAJBoAACQagAAkG0AAJBuAACQbwAAkHAAAJBxAACQcwAAkHUAAJB2AACQdwAAkHkAAJB6AACQuQAAkLsAAJC9AACQvwAAkMIAAJDDAACQxAAAkMUAAJDGAACQyAAAkMoAAJDLAACQzAAAkM4AAJDPAACRDgAAkRAAAJETAACRFQAAkRgAAJEZAACRGgAAkRsAAJEcAACRHgAAkSAAAJEhAACRIgAAkSQAAJElAACRMgAAkTMAAJE0AACRNgAAkXUAAJF3AACReQAAkXsAAJF+AACRfwAAkYAAAJGBAACRggAAkYQAAJGGAACRhwAAkYgAAJGKAACRiwAAkcoAAJHMAACRzgAAkdAAAJHTAACR1AAAkdUAAJHWAACR1wAAkdkAAJHbAACR3AAAkd0AAJHfAACR4AAAkh8AAJIhAACSIwAAkiUAAJIoAACSKQAAkioAAJIrAACSLAAAki4AAJIwAACSMQAAkjIAAJI0AACSNQAAknQAAJJ2AACSeAAAknoAAJJ9AACSfgAAkn8AAJKAAACSgQAAkoMAAJKFAACShgAAkocAAJKJAACSigAAkskAAJLLAACSzQAAks8AAJLSAACS0wAAktQAAJLVAACS1gAAktgAAJLaAACS2wAAktwAAJLeAACS3wAAkwQAAJMoAACTTwAAk3MAAJN2AACTeAAAk3oAAJN8AACTfgAAk4AAAJOBAACThAAAk5EAAJOgAACTogAAk6QAAJOmAACTqAAAk6oAAJOsAACTrgAAk70AAJPAAACTwwAAk8YAAJPJAACTzAAAk88AAJPSAACT1AAAlBMAAJQVAACUFwAAlBkAAJQcAACUHQAAlB4AAJQfAACUIAAAlCIAAJQkAACUJQAAlCYAAJQoAACUKQAAlGgAAJRqAACUbAAAlG4AAJRxAACUcgAAlHMAAJR0AACUdQAAlHcAAJR5AACUegAAlHsAAJR9AACUfgAAlL0AAJS/AACUwQAAlMMAAJTGAACUxwAAlMgAAJTJAACUygAAlMwAAJTOAACUzwAAlNAAAJTSAACU0wAAlRIAAJUUAACVFgAAlRgAAJUbAACVHAAAlR0AAJUeAACVHwAAlSEAAJUjAACVJAAAlSUAAJUnAACVKAAAlWcAAJVpAACVawAAlW0AAJVwAACVcQAAlXIAAJVzAACVdAAAlXYAAJV4AACVeQAAlXoAAJV8AACVfQAAlbwAAJW+AACVwAAAlcIAAJXFAACVxgAAlccAAJXIAACVyQAAlcsAAJXNAACVzgAAlc8AAJXRAACV0gAAlhEAAJYTAACWFQAAlhcAAJYaAACWGwAAlhwAAJYdAACWHgAAliAAAJYiAACWIwAAliQAAJYmAACWJwAAlnIAAJaVAACWtQAAltUAAJbXAACW2QAAltsAAJbdAACW3wAAluAAAJbhAACW5AAAluUAAJbnAACW6AAAluoAAJbtAACW7gAAlu8AAJbyAACW8wAAlvgAAJcFAACXCgAAlwwAAJcOAACXEwAAlxYAAJcZAACXGwAAl0AAAJdkAACXiwAAl68AAJeyAACXtAAAl7YAAJe4AACXugAAl7wAAJe9AACXwAAAl80AAJfeAACX4AAAl+IAAJfkAACX5gAAl+gAAJfqAACX7AAAl+4AAJf/AACYAgAAmAUAAJgIAACYCwAAmA4AAJgRAACYFAAAmBcAAJgZAACYWAAAmFoAAJhcAACYXgAAmGEAAJhiAACYYwAAmGQAAJhlAACYZwAAmGkAAJhqAACYawAAmG0AAJhuAACYrQAAmK8AAJixAACYswAAmLYAAJi3AACYuAAAmLkAAJi6AACYvAAAmL4AAJi/AACYwAAAmMIAAJjDAACZAgAAmQQAAJkHAACZCQAAmQwAAJkNAACZDgAAmQ8AAJkQAACZEgAAmRQAAJkVAACZFgAAmRgAAJkZAACZJgAAmScAAJkoAACZKgAAmWkAAJlrAACZbQAAmW8AAJlyAACZcwAAmXQAAJl1AACZdgAAmXgAAJl6AACZewAAmXwAAJl+AACZfwAAmb4AAJnAAACZwgAAmcQAAJnHAACZyAAAmckAAJnKAACZywAAmc0AAJnPAACZ0AAAmdEAAJnTAACZ1AAAmhMAAJoVAACaFwAAmhkAAJocAACaHQAAmh4AAJofAACaIAAAmiIAAJokAACaJQAAmiYAAJooAACaKQAAmmgAAJpqAACabAAAmm4AAJpxAACacgAAmnMAAJp0AACadQAAmncAAJp5AACaegAAmnsAAJp9AACafgAAmr0AAJq/AACawQAAmsMAAJrGAACaxwAAmsgAAJrJAACaygAAmswAAJrOAACazwAAmtAAAJrSAACa0wAAmvgAAJscAACbQwAAm2cAAJtqAACbbAAAm24AAJtwAACbcgAAm3QAAJt1AACbeAAAm4UAAJuUAACblgAAm5gAAJuaAACbnAAAm54AAJugAACbogAAm7EAAJu0AACbtwAAm7oAAJu9AACbwAAAm8MAAJvGAACbyAAAnAcAAJwJAACcCwAAnA0AAJwQAACcEQAAnBIAAJwTAACcFAAAnBYAAJwYAACcGQAAnBoAAJwcAACcHQAAnFwAAJxeAACcYAAAnGIAAJxlAACcZgAAnGcAAJxoAACcaQAAnGsAAJxtAACcbgAAnG8AAJxxAACccgAAnLEAAJyzAACctQAAnLcAAJy6AACcuwAAnLwAAJy9AACcvgAAnMAAAJzCAACcwwAAnMQAAJzGAACcxwAAnQYAAJ0IAACdCwAAnQ0AAJ0QAACdEQAAnRIAAJ0TAACdFAAAnRYAAJ0YAACdGQAAnRoAAJ0cAACdHQAAnVwAAJ1eAACdYAAAnWIAAJ1lAACdZgAAnWcAAJ1oAACdaQAAnWsAAJ1tAACdbgAAnW8AAJ1xAACdcgAAnbEAAJ2zAACdtQAAnbcAAJ26AACduwAAnbwAAJ29AACdvgAAncAAAJ3CAACdwwAAncQAAJ3GAACdxwAAngYAAJ4IAACeCgAAngwAAJ4PAACeEAAAnhEAAJ4SAACeEwAAnhUAAJ4XAACeGAAAnhkAAJ4bAACeHAAAnmcAAJ6KAACeqgAAnsoAAJ7MAACezgAAntAAAJ7SAACe1AAAntUAAJ7WAACe2QAAntoAAJ7cAACe3QAAnuAAAJ7jAACe5AAAnuUAAJ7oAACe6QAAnu4AAJ77AACfAAAAnwIAAJ8FAACfCgAAnw0AAJ8QAACfEgAAnyUAAJ9KAACfbgAAn5UAAJ+5AACfvAAAn74AAJ/AAACfwgAAn8QAAJ/GAACfxwAAn8oAAJ/XAACf6AAAn+oAAJ/sAACf7gAAn/AAAJ/yAACf9AAAn/YAAJ/4AACgCQAAoAwAAKAPAACgEgAAoBUAAKAYAACgGwAAoB4AAKAhAACgIwAAoGIAAKBkAACgZgAAoGgAAKBrAACgbAAAoG0AAKBuAACgbwAAoHEAAKBzAACgdAAAoHUAAKB3AACgeAAAoLcAAKC5AACguwAAoL0AAKDAAACgwQAAoMIAAKDDAACgxAAAoMYAAKDIAACgyQAAoMoAAKDMAACgzQAAoQwAAKEOAAChEQAAoRMAAKEWAAChFwAAoRgAAKEZAAChGgAAoRwAAKEeAAChHwAAoSAAAKEiAAChIwAAoTAAAKExAAChMgAAoTQAAKFzAAChdQAAoXcAAKF5AAChfAAAoX0AAKF+AAChfwAAoYAAAKGCAAChhAAAoYUAAKGGAAChiAAAoYkAAKHIAAChygAAocwAAKHOAACh0QAAodIAAKHTAACh1AAAodUAAKHXAACh2QAAodoAAKHbAACh3QAAod4AAKIdAACiHwAAoiEAAKIjAACiJgAAoicAAKIoAACiKQAAoioAAKIsAACiLgAAoi8AAKIwAACiMgAAojMAAKJyAACidAAAonYAAKJ4AACiewAAonwAAKJ9AACifgAAon8AAKKBAACigwAAooQAAKKFAACihwAAoogAAKLHAACiyQAAossAAKLNAACi0AAAotEAAKLSAACi0wAAotQAAKLWAACi2AAAotkAAKLaAACi3AAAot0AAKMCAACjJgAAo00AAKNxAACjdAAAo3cAAKN5AACjewAAo30AAKN/AACjgAAAo4MAAKOQAACjnQAAo6AAAKOjAACjpgAAo6kAAKOsAACjrwAAo7wAAKO/AACjwgAAo8UAAKPIAACjywAAo84AAKPQAACj5QAAo/QAAKQGAACkGgAApCwAAKQ+AACkfQAApH8AAKSCAACkhAAApIcAAKSIAACkiQAApIoAAKSLAACkjQAApJAAAKSRAACkkgAApJQAAKSVAACk2AAApPwAAKUgAAClQwAApWoAAKWKAAClsQAApdgAAKX4AACmHAAApkAAAKZCAACmRQAApkcAAKZJAACmSwAApk4AAKZQAACmUgAAplQAAKZWAACmWAAAploAAKZdAACmYAAApmEAAKZmAACmcwAApnYAAKZ4AACmewAApn4AAKaAAACmpQAApskAAKbwAACnFAAApxcAAKcZAACnGwAApx0AAKcfAACnIQAApyIAAKclAACnMgAAp0UAAKdHAACnSQAAp0sAAKdNAACnTwAAp1EAAKdTAACnVQAAp1cAAKdqAACnbQAAp3AAAKdzAACndgAAp3kAAKd8AACnfwAAp4IAAKeFAACnhwAAp8YAAKfIAACnywAAp80AAKfQAACn0QAAp9IAAKfTAACn1AAAp9YAAKfYAACn2QAAp9oAAKfcAACn3QAAp+YAAKfnAACn6QAAqCgAAKgqAACoLAAAqC4AAKgxAACoMgAAqDMAAKg0AACoNQAAqDcAAKg5AACoOgAAqDsAAKg9AACoPgAAqH0AAKh/AACoggAAqIQAAKiHAACoiAAAqIkAAKiKAACoiwAAqI0AAKiPAACokAAAqJEAAKiTAAColAAAqJ0AAKigAACoowAAqKUAAKiuAACosQAAqLQAAKi2AACougAAqPkAAKj7AACo/QAAqP8AAKkCAACpAwAAqQQAAKkFAACpBgAAqQgAAKkKAACpCwAAqQwAAKkOAACpDwAAqU4AAKlQAACpUwAAqVUAAKlYAACpWQAAqVoAAKlbAACpXAAAqV4AAKlgAACpYQAAqWIAAKlkAACpZQAAqW4AAKlvAACpcQAAqbAAAKmyAACptAAAqbYAAKm5AACpugAAqbsAAKm8AACpvQAAqb8AAKnBAACpwgAAqcMAAKnFAACpxgAAqgUAAKoHAACqCgAAqgwAAKoPAACqEAAAqhEAAKoSAACqEwAAqhUAAKoXAACqGAAAqhkAAKobAACqHAAAqikAAKoqAACqKwAAqi0AAKpsAACqbgAAqnAAAKpyAACqdQAAqnYAAKp3AACqeAAAqnkAAKp7AACqfQAAqn4AAKp/AACqgQAAqoIAAKrBAACqwwAAqsYAAKrIAACqywAAqswAAKrNAACqzgAAqs8AAKrRAACq0wAAqtQAAKrVAACq1wAAqtgAAKrkAACq8QAAqvwAAKr/AACrAgAAqwUAAKsIAACrCwAAqxYAAKsZAACrHAAAqx8AAKsiAACrJQAAqycAAKstAACrOAAAq0UAAKuQAACrswAAq9MAAKvzAACr9QAAq/cAAKv5AACr+wAAq/4AAKv/AACsAAAArAMAAKwEAACsBgAArAcAAKwJAACsDAAArA0AAKwOAACsEQAArBIAAKwbAACsKAAArC0AAKwvAACsMQAArDYAAKw5AACsPAAArD4AAKxjAACshwAArK4AAKzSAACs1QAArNcAAKzZAACs2wAArN0AAKzfAACs4AAArOMAAKzwAACtAQAArQMAAK0FAACtBwAArQkAAK0LAACtDQAArQ8AAK0RAACtIgAArSUAAK0oAACtKwAArS4AAK0xAACtNAAArTcAAK06AACtPAAArXsAAK19AACtfwAArYEAAK2EAACthQAArYYAAK2HAACtiAAArYoAAK2MAACtjQAArY4AAK2QAACtkQAArdAAAK3SAACt1AAArdYAAK3ZAACt2gAArdsAAK3cAACt3QAArd8AAK3hAACt4gAAreMAAK3lAACt5gAAriUAAK4nAACuKgAAriwAAK4vAACuMAAArjEAAK4yAACuMwAArjUAAK43AACuOAAArjkAAK47AACuPAAArkkAAK5KAACuSwAArk0AAK6MAACujgAArpAAAK6SAACulQAArpYAAK6XAACumAAArpkAAK6bAACunQAArp4AAK6fAACuoQAArqIAAK7hAACu4wAAruUAAK7nAACu6gAArusAAK7sAACu7QAAru4AAK7wAACu8gAArvMAAK70AACu9gAArvcAAK82AACvOAAArzoAAK88AACvPwAAr0AAAK9BAACvQgAAr0MAAK9FAACvRwAAr0gAAK9JAACvSwAAr0wAAK+LAACvjQAAr48AAK+RAACvlAAAr5UAAK+WAACvlwAAr5gAAK+aAACvnAAAr50AAK+eAACvoAAAr6EAAK/gAACv4gAAr+QAAK/mAACv6QAAr+oAAK/rAACv7AAAr+0AAK/vAACv8QAAr/IAAK/zAACv9QAAr/YAALAbAACwPwAAsGYAALCKAACwjQAAsI8AALCRAACwkwAAsJUAALCXAACwmAAAsJsAALCoAACwtwAAsLkAALC7AACwvQAAsL8AALDBAACwwwAAsMUAALDUAACw1wAAsNoAALDdAACw4AAAsOMAALDmAACw6QAAsOsAALEqAACxLAAAsS4AALEwAACxMwAAsTQAALE1AACxNgAAsTcAALE5AACxOwAAsTwAALE9AACxPwAAsUAAALF/AACxgQAAsYMAALGFAACxiAAAsYkAALGKAACxiwAAsYwAALGOAACxkAAAsZEAALGSAACxlAAAsZUAALHUAACx1gAAsdgAALHaAACx3QAAsd4AALHfAACx4AAAseEAALHjAACx5QAAseYAALHnAACx6QAAseoAALIpAACyKwAAsi4AALIwAACyMwAAsjQAALI1AACyNgAAsjcAALI5AACyOwAAsjwAALI9AACyPwAAskAAALJ/AACygQAAsoMAALKFAACyiAAAsokAALKKAACyiwAAsowAALKOAACykAAAspEAALKSAACylAAAspUAALLUAACy1gAAstgAALLaAACy3QAAst4AALLfAACy4AAAsuEAALLjAACy5QAAsuYAALLnAACy6QAAsuoAALMpAACzKwAAsy0AALMvAACzMgAAszMAALM0AACzNQAAszYAALM4AACzOgAAszsAALM8AACzPgAAsz8AALOKAACzrQAAs80AALPtAACz7wAAs/EAALPzAACz9QAAs/gAALP5AACz+gAAs/0AALP+AAC0AAAAtAEAALQEAAC0BwAAtAgAALQJAAC0DAAAtA0AALQSAAC0HwAAtCQAALQmAAC0KQAAtC4AALQxAAC0NAAAtDYAALRbAAC0fwAAtKYAALTKAAC0zQAAtM8AALTRAAC00wAAtNUAALTXAAC02AAAtNsAALToAAC0+QAAtPsAALT9AAC0/wAAtQEAALUDAAC1BQAAtQcAALUJAAC1GgAAtR0AALUgAAC1IwAAtSYAALUpAAC1LAAAtS8AALUyAAC1NAAAtXMAALV1AAC1dwAAtXkAALV8AAC1fQAAtX4AALV/AAC1gAAAtYIAALWEAAC1hQAAtYYAALWIAAC1iQAAtcgAALXKAAC1zAAAtc4AALXRAAC10gAAtdMAALXUAAC11QAAtdcAALXZAAC12gAAtdsAALXdAAC13gAAth0AALYfAAC2IgAAtiQAALYnAAC2KAAAtikAALYqAAC2KwAAti0AALYvAAC2MAAAtjEAALYzAAC2NAAAtkEAALZCAAC2QwAAtkUAALaEAAC2hgAAtogAALaKAAC2jQAAto4AALaPAAC2kAAAtpEAALaTAAC2lQAAtpYAALaXAAC2mQAAtpoAALbZAAC22wAAtt0AALbfAAC24gAAtuMAALbkAAC25QAAtuYAALboAAC26gAAtusAALbsAAC27gAAtu8AALcuAAC3MAAAtzIAALc0AAC3NwAAtzgAALc5AAC3OgAAtzsAALc9AAC3PwAAt0AAALdBAAC3QwAAt0QAALeDAAC3hQAAt4cAALeJAAC3jAAAt40AALeOAAC3jwAAt5AAALeSAAC3lAAAt5UAALeWAAC3mAAAt5kAALfYAAC32gAAt9wAALfeAAC34QAAt+IAALfjAAC35AAAt+UAALfnAAC36QAAt+oAALfrAAC37QAAt+4AALgTAAC4NwAAuF4AALiCAAC4hQAAuIgAALiKAAC4jAAAuI4AALiQAAC4kQAAuJQAALihAAC4sAAAuLMAALi2AAC4uQAAuLwAALi/AAC4wgAAuMUAALjUAAC41wAAuNoAALjdAAC44AAAuOMAALjmAAC46QAAuOsAALkIAAC5RwAAuUkAALlMAAC5TgAAuVEAALlSAAC5UwAAuVQAALlVAAC5VwAAuVoAALlbAAC5XAAAuV4AALlfAAC5ngAAuaAAALmjAAC5pQAAuagAALmpAAC5qgAAuasAALmsAAC5rgAAubEAALmyAAC5swAAubUAALm2AAC5uAAAufcAALn5AAC5/AAAuf4AALoBAAC6AgAAugMAALoEAAC6BQAAugcAALoKAAC6CwAAugwAALoOAAC6DwAAuhEAALpQAAC6UgAAulQAALpWAAC6WQAAuloAALpbAAC6XAAAul0AALpfAAC6YgAAumMAALpkAAC6ZgAAumcAALqmAAC6qAAAuqoAALqsAAC6rwAAurAAALqxAAC6sgAAurMAALq1AAC6uAAAurkAALq6AAC6vAAAur0AALr8AAC6/gAAuwAAALsCAAC7BQAAuwYAALsHAAC7CAAAuwkAALsLAAC7DgAAuw8AALsQAAC7EgAAuxMAALtSAAC7VAAAu1cAALtZAAC7XAAAu10AALteAAC7XwAAu2AAALtiAAC7ZQAAu2YAALtnAAC7aQAAu2oAALu1AAC72AAAu/gAALwYAAC8GgAAvBwAALweAAC8IAAAvCIAALwjAAC8JAAAvCcAALwoAAC8KgAAvCsAALwuAAC8MQAAvDIAALwzAAC8NgAAvDcAALw8AAC8SQAAvE4AALxQAAC8UwAAvFgAALxbAAC8XgAAvGAAALyFAAC8qQAAvNAAALz0AAC89wAAvPkAALz7AAC8/QAAvP8AAL0BAAC9AgAAvQUAAL0SAAC9IwAAvSUAAL0nAAC9KQAAvSsAAL0tAAC9LwAAvTEAAL0zAAC9RAAAvUcAAL1KAAC9TQAAvVAAAL1TAAC9VgAAvVkAAL1cAAC9XgAAvZ0AAL2fAAC9oQAAvaMAAL2mAAC9pwAAvagAAL2pAAC9qgAAvawAAL2uAAC9rwAAvbAAAL2yAAC9swAAvfIAAL30AAC99gAAvfgAAL37AAC9/AAAvf0AAL3+AAC9/wAAvgEAAL4DAAC+BAAAvgUAAL4HAAC+CAAAvkcAAL5JAAC+TAAAvk4AAL5RAAC+UgAAvlMAAL5UAAC+VQAAvlcAAL5ZAAC+WgAAvlsAAL5dAAC+XgAAvmsAAL5sAAC+bQAAvm8AAL6uAAC+sAAAvrIAAL60AAC+twAAvrgAAL65AAC+ugAAvrsAAL69AAC+vwAAvsAAAL7BAAC+wwAAvsQAAL8DAAC/BQAAvwcAAL8JAAC/DAAAvw0AAL8OAAC/DwAAvxAAAL8SAAC/FAAAvxUAAL8WAAC/GAAAvxkAAL9YAAC/WgAAv1wAAL9eAAC/YQAAv2IAAL9jAAC/ZAAAv2UAAL9nAAC/aQAAv2oAAL9rAAC/bQAAv24AAL+tAAC/rwAAv7EAAL+zAAC/tgAAv7cAAL+4AAC/uQAAv7oAAL+8AAC/vgAAv78AAL/AAAC/wgAAv8MAAMACAADABAAAwAYAAMAIAADACwAAwAwAAMANAADADgAAwA8AAMARAADAEwAAwBQAAMAVAADAFwAAwBgAAMA9AADAYQAAwIgAAMCsAADArwAAwLIAAMC0AADAtgAAwLgAAMC6AADAuwAAwL4AAMDLAADA2gAAwN0AAMDgAADA4wAAwOYAAMDpAADA7AAAwO8AAMD+AADBAQAAwQQAAMEHAADBCgAAwQ0AAMEQAADBEwAAwRUAAMFUAADBVgAAwVkAAMFbAADBXgAAwV8AAMFgAADBYQAAwWIAAMFkAADBZwAAwWgAAMFpAADBawAAwWwAAMGrAADBrQAAwbAAAMGyAADBtQAAwbYAAMG3AADBuAAAwbkAAMG7AADBvgAAwb8AAMHAAADBwgAAwcMAAMICAADCBAAAwgcAAMIJAADCDAAAwg0AAMIOAADCDwAAwhAAAMISAADCFQAAwhYAAMIXAADCGQAAwhoAAMJZAADCWwAAwl4AAMJgAADCYwAAwmQAAMJlAADCZgAAwmcAAMJpAADCbAAAwm0AAMJuAADCcAAAwnEAAMKwAADCsgAAwrQAAMK2AADCuQAAwroAAMK7AADCvAAAwr0AAMK/AADCwgAAwsMAAMLEAADCxgAAwscAAMMGAADDCAAAwwoAAMMMAADDDwAAwxAAAMMRAADDEgAAwxMAAMMVAADDGAAAwxkAAMMaAADDHAAAwx0AAMNcAADDXgAAw2EAAMNjAADDZgAAw2cAAMNoAADDaQAAw2oAAMNsAADDbwAAw3AAAMNxAADDcwAAw3QAAMN9AADDkAAAw50AAMOwAADDvQAAw9AAAMPnAADD+QAAxEQAAMRnAADEhwAAxKcAAMSpAADEqwAAxK0AAMSvAADEsgAAxLMAAMS0AADEtwAAxLgAAMS6AADEuwAAxL0AAMTAAADEwQAAxMIAAMTFAADExgAAxMsAAMTYAADE3QAAxN8AAMThAADE5gAAxOkAAMTsAADE7gAAxRMAAMU3AADFXgAAxYIAAMWFAADFhwAAxYkAAMWLAADFjQAAxY8AAMWQAADFkwAAxaAAAMWxAADFswAAxbUAAMW3AADFuQAAxbsAAMW9AADFvwAAxcEAAMXSAADF1QAAxdgAAMXbAADF3gAAxeEAAMXkAADF5wAAxeoAAMXsAADGKwAAxi0AAMYvAADGMQAAxjQAAMY1AADGNgAAxjcAAMY4AADGOgAAxjwAAMY9AADGPgAAxkAAAMZBAADGgAAAxoIAAMaEAADGhgAAxokAAMaKAADGiwAAxowAAMaNAADGjwAAxpEAAMaSAADGkwAAxpUAAMaWAADG1QAAxtcAAMbaAADG3AAAxt8AAMbgAADG4QAAxuIAAMbjAADG5QAAxucAAMboAADG6QAAxusAAMbsAADG+QAAxvoAAMb7AADG/QAAxzwAAMc+AADHQAAAx0IAAMdFAADHRgAAx0cAAMdIAADHSQAAx0sAAMdNAADHTgAAx08AAMdRAADHUgAAx5EAAMeTAADHlQAAx5cAAMeaAADHmwAAx5wAAMedAADHngAAx6AAAMeiAADHowAAx6QAAMemAADHpwAAx+YAAMfoAADH6gAAx+wAAMfvAADH8AAAx/EAAMfyAADH8wAAx/UAAMf3AADH+AAAx/kAAMf7AADH/AAAyDsAAMg9AADIPwAAyEEAAMhEAADIRQAAyEYAAMhHAADISAAAyEoAAMhMAADITQAAyE4AAMhQAADIUQAAyJAAAMiSAADIlAAAyJYAAMiZAADImgAAyJsAAMicAADInQAAyJ8AAMihAADIogAAyKMAAMilAADIpgAAyMsAAMjvAADJFgAAyToAAMk9AADJPwAAyUEAAMlDAADJRQAAyUcAAMlIAADJSwAAyVgAAMlnAADJaQAAyWsAAMltAADJbwAAyXEAAMlzAADJdQAAyYQAAMmHAADJigAAyY0AAMmQAADJkwAAyZYAAMmZAADJmwAAydoAAMncAADJ3wAAyeEAAMnkAADJ5QAAyeYAAMnnAADJ6AAAyeoAAMnsAADJ7QAAye4AAMnwAADJ8QAAyfIAAMoxAADKMwAAyjUAAMo3AADKOgAAyjsAAMo8AADKPQAAyj4AAMpAAADKQgAAykMAAMpEAADKRgAAykcAAMqGAADKiAAAyooAAMqMAADKjwAAypAAAMqRAADKkgAAypMAAMqVAADKlwAAypgAAMqZAADKmwAAypwAAMrbAADK3QAAyt8AAMrhAADK5AAAyuUAAMrmAADK5wAAyugAAMrqAADK7AAAyu0AAMruAADK8AAAyvEAAMswAADLMgAAyzQAAMs2AADLOQAAyzoAAMs7AADLPAAAyz0AAMs/AADLQQAAy0IAAMtDAADLRQAAy0YAAMuFAADLhwAAy4kAAMuLAADLjgAAy48AAMuQAADLkQAAy5IAAMuUAADLlgAAy5cAAMuYAADLmgAAy5sAAMvaAADL3AAAy94AAMvgAADL4wAAy+QAAMvlAADL5gAAy+cAAMvpAADL6wAAy+wAAMvtAADL7wAAy/AAAMw7AADMXgAAzH4AAMyeAADMoAAAzKIAAMykAADMpgAAzKkAAMyqAADMqwAAzK4AAMyvAADMsQAAzLIAAMy0AADMtwAAzLgAAMy5AADMvAAAzL0AAMzCAADMzwAAzNQAAMzWAADM2AAAzN0AAMzgAADM4wAAzOUAAM0KAADNLgAAzVUAAM15AADNfAAAzX4AAM2AAADNggAAzYQAAM2GAADNhwAAzYoAAM2XAADNqAAAzaoAAM2sAADNrgAAzbAAAM2yAADNtAAAzbYAAM24AADNyQAAzcwAAM3PAADN0gAAzdUAAM3YAADN2wAAzd4AAM3hAADN4wAAziIAAM4kAADOJgAAzigAAM4rAADOLAAAzi0AAM4uAADOLwAAzjEAAM4zAADONAAAzjUAAM43AADOOAAAzncAAM55AADOewAAzn0AAM6AAADOgQAAzoIAAM6DAADOhAAAzoYAAM6IAADOiQAAzooAAM6MAADOjQAAzswAAM7OAADO0QAAztMAAM7WAADO1wAAztgAAM7ZAADO2gAAztwAAM7eAADO3wAAzuAAAM7iAADO4wAAzvAAAM7xAADO8gAAzvQAAM8zAADPNQAAzzcAAM85AADPPAAAzz0AAM8+AADPPwAAz0AAAM9CAADPRAAAz0UAAM9GAADPSAAAz0kAAM+IAADPigAAz4wAAM+OAADPkQAAz5IAAM+TAADPlAAAz5UAAM+XAADPmQAAz5oAAM+bAADPnQAAz54AAM/dAADP3wAAz+EAAM/jAADP5gAAz+cAAM/oAADP6QAAz+oAAM/sAADP7gAAz+8AAM/wAADP8gAAz/MAANAyAADQNAAA0DYAANA4AADQOwAA0DwAANA9AADQPgAA0D8AANBBAADQQwAA0EQAANBFAADQRwAA0EgAANCHAADQiQAA0IsAANCNAADQkAAA0JEAANCSAADQkwAA0JQAANCWAADQmAAA0JkAANCaAADQnAAA0J0AANDCAADQ5gAA0Q0AANExAADRNAAA0TYAANE4AADROgAA0TwAANE+AADRPwAA0UIAANFPAADRXgAA0WAAANFiAADRZAAA0WYAANFoAADRagAA0WwAANF7AADRfgAA0YEAANGEAADRhwAA0YoAANGNAADRkAAA0ZIAANHRAADR0wAA0dUAANHXAADR2gAA0dsAANHcAADR3QAA0d4AANHgAADR4gAA0eMAANHkAADR5gAA0ecAANImAADSKAAA0ioAANIsAADSLwAA0jAAANIxAADSMgAA0jMAANI1AADSNwAA0jgAANI5AADSOwAA0jwAANJ7AADSfQAA0n8AANKBAADShAAA0oUAANKGAADShwAA0ogAANKKAADSjAAA0o0AANKOAADSkAAA0pEAANLQAADS0gAA0tQAANLWAADS2QAA0toAANLbAADS3AAA0t0AANLfAADS4QAA0uIAANLjAADS5QAA0uYAANMlAADTJwAA0ykAANMrAADTLgAA0y8AANMwAADTMQAA0zIAANM0AADTNgAA0zcAANM4AADTOgAA0zsAANN6AADTfAAA034AANOAAADTgwAA04QAANOFAADThgAA04cAANOJAADTiwAA04wAANONAADTjwAA05AAANPPAADT0QAA09MAANPVAADT2AAA09kAANPaAADT2wAA09wAANPeAADT4AAA0+EAANPiAADT5AAA0+UAANQwAADUUwAA1HMAANSTAADUlQAA1JcAANSZAADUmwAA1J4AANSfAADUoAAA1KMAANSkAADUpgAA1KcAANSpAADUrAAA1K0AANSuAADUsQAA1LIAANS3AADUxAAA1MkAANTLAADUzQAA1NIAANTVAADU2AAA1NoAANT/AADVIwAA1UoAANVuAADVcQAA1XMAANV1AADVdwAA1XkAANV7AADVfAAA1X8AANWMAADVnQAA1Z8AANWhAADVowAA1aUAANWnAADVqQAA1asAANWtAADVvgAA1cEAANXEAADVxwAA1coAANXNAADV0AAA1dMAANXWAADV2AAA1hcAANYZAADWGwAA1h0AANYgAADWIQAA1iIAANYjAADWJAAA1iYAANYoAADWKQAA1ioAANYsAADWLQAA1mwAANZuAADWcAAA1nIAANZ1AADWdgAA1ncAANZ4AADWeQAA1nsAANZ9AADWfgAA1n8AANaBAADWggAA1sEAANbDAADWxgAA1sgAANbLAADWzAAA1s0AANbOAADWzwAA1tEAANbTAADW1AAA1tUAANbXAADW2AAA1uUAANbmAADW5wAA1ukAANcoAADXKgAA1ywAANcuAADXMQAA1zIAANczAADXNAAA1zUAANc3AADXOQAA1zoAANc7AADXPQAA1z4AANd9AADXfwAA14EAANeDAADXhgAA14cAANeIAADXiQAA14oAANeMAADXjgAA148AANeQAADXkgAA15MAANfSAADX1AAA19YAANfYAADX2wAA19wAANfdAADX3gAA198AANfhAADX4wAA1+QAANflAADX5wAA1+gAANgnAADYKQAA2CsAANgtAADYMAAA2DEAANgyAADYMwAA2DQAANg2AADYOAAA2DkAANg6AADYPAAA2D0AANh8AADYfgAA2IAAANiCAADYhQAA2IYAANiHAADYiAAA2IkAANiLAADYjQAA2I4AANiPAADYkQAA2JIAANi3AADY2wAA2QIAANkmAADZKQAA2SsAANktAADZLwAA2TEAANkzAADZNAAA2TcAANlEAADZUwAA2VUAANlXAADZWQAA2VsAANldAADZXwAA2WEAANlwAADZcwAA2XYAANl5AADZfAAA2X8AANmCAADZhQAA2YcAANnGAADZyAAA2coAANnMAADZzwAA2dAAANnRAADZ0gAA2dMAANnVAADZ1wAA2dgAANnZAADZ2wAA2dwAANobAADaHQAA2h8AANohAADaJAAA2iUAANomAADaJwAA2igAANoqAADaLAAA2i0AANouAADaMAAA2jEAANpwAADacgAA2nQAANp2AADaeQAA2noAANp7AADafAAA2n0AANp/AADagQAA2oIAANqDAADahQAA2oYAANrFAADaxwAA2skAANrLAADazgAA2s8AANrQAADa0QAA2tIAANrUAADa1gAA2tcAANrYAADa2gAA2tsAANsaAADbHAAA2x4AANsgAADbIwAA2yQAANslAADbJgAA2ycAANspAADbKwAA2ywAANstAADbLwAA2zAAANtvAADbcQAA23MAANt1AADbeAAA23kAANt6AADbewAA23wAANt+AADbgAAA24EAANuCAADbhAAA24UAANvEAADbxgAA28gAANvKAADbzQAA284AANvPAADb0AAA29EAANvTAADb1QAA29YAANvXAADb2QAA29oAANvjAADb5AAA2+YAANwlAADcJwAA3CkAANwrAADcLgAA3C8AANwwAADcMQAA3DIAANw0AADcNwAA3DgAANw5AADcOwAA3DwAANx7AADcfQAA3IAAANyCAADchQAA3IYAANyHAADciAAA3IkAANyLAADcjgAA3I8AANyQAADckgAA3JMAANzSAADc1AAA3NcAANzZAADc3AAA3N0AANzeAADc3wAA3OAAANziAADc5QAA3OYAANznAADc6QAA3OoAAN0pAADdKwAA3S4AAN0wAADdMwAA3TQAAN01AADdNgAA3TcAAN05AADdPAAA3T0AAN0+AADdQAAA3UEAAN2AAADdggAA3YQAAN2GAADdiQAA3YoAAN2LAADdjAAA3Y0AAN2PAADdkgAA3ZMAAN2UAADdlgAA3ZcAAN3iAADeBQAA3iUAAN5FAADeRwAA3kkAAN5LAADeTQAA3k8AAN5QAADeUQAA3lQAAN5VAADeVwAA3lgAAN5aAADeXQAA3l4AAN5fAADeYgAA3mMAAN5oAADedQAA3noAAN58AADefgAA3oMAAN6GAADeiQAA3osAAN6wAADe1AAA3vsAAN8fAADfIgAA3yQAAN8mAADfKAAA3yoAAN8sAADfLQAA3zA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AAOohAADqIwAA6iUAAOonAADqKgAA6isAAOosAADqLQAA6i4AAOowAADqMgAA6jMAAOo0AADqNgAA6jcAAOpcAADqgAAA6qcAAOrLAADqzgAA6tAAAOrSAADq1AAA6tYAAOrYAADq2QAA6twAAOrpAADq+AAA6voAAOr8AADq/gAA6wAAAOsCAADrBAAA6wYAAOsVAADrGAAA6xsAAOseAADrIQAA6yQAAOsnAADrKgAA6ywAAOtrAADrbQAA628AAOtxAADrdAAA63UAAOt2AADrdwAA63gAAOt6AADrfAAA630AAOt+AADrgAAA64EAAOvAAADrwgAA68QAAOvGAADryQAA68oAAOvLAADrzAAA680AAOvPAADr0QAA69IAAOvTAADr1QAA69YAAOwVAADsFwAA7BkAAOwbAADsHgAA7B8AAOwgAADsIQAA7CIAAOwkAADsJgAA7CcAAOwoAADsKgAA7CsAAOxqAADsbAAA7G8AAOxxAADsdAAA7HUAAOx2AADsdwAA7HgAAOx6AADsfAAA7H0AAOx+AADsgAAA7IEAAOzAAADswgAA7MQAAOzGAADsyQAA7MoAAOzLAADszAAA7M0AAOzPAADs0QAA7NIAAOzTAADs1QAA7NYAAO0VAADtFwAA7RkAAO0bAADtHgAA7R8AAO0gAADtIQAA7SIAAO0kAADtJgAA7ScAAO0oAADtKgAA7SsAAO1qAADtbAAA7W4AAO1wAADtcwAA7XQAAO11AADtdgAA7XcAAO15AADtewAA7XwAAO19AADtfwAA7YAAAO3LAADt7gAA7g4AAO4uAADuMAAA7jIAAO40AADuNgAA7jgAAO45AADuOgAA7j0AAO4+AADuQAAA7kEAAO5DAADuRgAA7kcAAO5IAADuSwAA7kwAAO5RAADuXgAA7mMAAO5lAADuZwAA7mwAAO5vAADucgAA7nQAAO6ZAADuvQAA7uQAAO8IAADvCwAA7w0AAO8PAADvEQAA7xMAAO8VAADvFgAA7xkAAO8mAADvNwAA7zkAAO87AADvPQAA7z8AAO9BAADvQwAA70UAAO9HAADvWAAA71sAAO9eAADvYQAA72QAAO9nAADvagAA720AAO9wAADvcgAA77EAAO+zAADvtQAA77cAAO+6AADvuwAA77wAAO+9AADvvgAA78AAAO/CAADvwwAA78Q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AAQYeAAEGIQABBiIAAQYkAAEGJQABBicAAQYqAAEGKwABBiwAAQYvAAEGMAABBjUAAQZCAAEGRwABBkkAAQZLAAEGUAABBlMAAQZWAAEGWAABBn0AAQahAAEGyAABBuwAAQbvAAEG8QABBvMAAQb1AAEG9wABBvkAAQb6AAEG/QABBwoAAQcbAAEHHQABBx8AAQchAAEHIwABByUAAQcnAAEHKQABBysAAQc8AAEHPwABB0IAAQdFAAEHSAABB0sAAQdOAAEHUQABB1QAAQdWAAEHlQABB5cAAQeZAAEHmwABB54AAQefAAEHoAABB6EAAQeiAAEHpAABB6YAAQenAAEHqAABB6oAAQerAAEH6gABB+wAAQfuAAEH8AABB/MAAQf0AAEH9QABB/YAAQf3AAEH+QABB/sAAQf8AAEH/QABB/8AAQgAAAEIPwABCEEAAQhEAAEIRgABCEkAAQhKAAEISwABCEwAAQhNAAEITwABCFEAAQhSAAEIUwABCFUAAQhWAAEIYwABCGQAAQhlAAEIZwABCKYAAQioAAEIqgABCKwAAQivAAEIsAABCLEAAQiyAAEIswABCLUAAQi3AAEIuAABCLkAAQi7AAEIvAABCPsAAQj9AAEI/wABCQEAAQkEAAEJBQABCQYAAQkHAAEJCAABCQoAAQkMAAEJDQABCQ4AAQkQAAEJEQABCVAAAQlSAAEJVAABCVYAAQlZAAEJWgABCVsAAQlcAAEJXQABCV8AAQlhAAEJYgABCWMAAQllAAEJZgABCaUAAQmnAAEJqQABCasAAQmuAAEJrwABCbAAAQmxAAEJsgABCbQAAQm2AAEJtwABCbgAAQm6AAEJuwABCfoAAQn8AAEJ/gABCgAAAQoDAAEKBAABCgUAAQoGAAEKBwABCgkAAQoLAAEKDAABCg0AAQoPAAEKEAABCjUAAQpZAAEKgAABCqQAAQqnAAEKqQABCqsAAQqtAAEKrwABCrEAAQqyAAEKtQABCsIAAQrRAAEK0wABCtUAAQrXAAEK2QABCtsAAQrdAAEK3wABCu4AAQrxAAEK9AABCvcAAQr6AAEK/QABCwAAAQsDAAELBQABC0QAAQtGAAELSQABC0sAAQtOAAELTwABC1AAAQtRAAELUgABC1QAAQtWAAELVwABC1gAAQtaAAELWwABC5oAAQucAAELngABC6AAAQujAAELpAABC6UAAQumAAELpwABC6kAAQurAAELrAABC60AAQuvAAELsAABC+8AAQvxAAEL8wABC/UAAQv4AAEL+QABC/oAAQv7AAEL/AABC/4AAQwAAAEMAQABDAIAAQwEAAEMBQABDEQAAQxGAAEMSQABDEsAAQxOAAEMTwABDFAAAQxRAAEMUgABDFQAAQxWAAEMVwABDFgAAQxaAAEMWwABDJoAAQycAAEMngABDKAAAQyjAAEMpAABDKUAAQymAAEMpwABDKkAAQyrAAEMrAABDK0AAQyvAAEMsAABDO8AAQzxAAEM8wABDPUAAQz4AAEM+QABDPoAAQz7AAEM/AABDP4AAQ0AAAENAQABDQIAAQ0EAAENBQABDUQAAQ1GAAENSAABDUoAAQ1NAAENTgABDU8AAQ1QAAENUQABDVMAAQ1VAAENVgABDVcAAQ1ZAAENWgABDaUAAQ3IAAEN6AABDggAAQ4KAAEODAABDg4AAQ4QAAEOEgABDhMAAQ4UAAEOFwABDhgAAQ4aAAEOGwABDh0AAQ4gAAEOIQABDiIAAQ4lAAEOJgABDisAAQ44AAEOPQABDj8AAQ5BAAEORgABDkkAAQ5MAAEOTgABDnMAAQ6XAAEOvgABDuIAAQ7lAAEO5wABDukAAQ7rAAEO7QABDu8AAQ7wAAEO8wABDwAAAQ8RAAEPEwABDxUAAQ8XAAEPGQABDxsAAQ8dAAEPHwABDyEAAQ8yAAEPNQABDzgAAQ87AAEPPgABD0EAAQ9EAAEPRwABD0oAAQ9MAAEPiwABD40AAQ+PAAEPkQABD5QAAQ+VAAEPlgABD5cAAQ+YAAEPmgABD5wAAQ+dAAEPngABD6AAAQ+hAAEP4AABD+IAAQ/kAAEP5gABD+kAAQ/qAAEP6wABD+wAAQ/tAAEP7wABD/EAAQ/yAAEP8wABD/UAAQ/2AAEQNQABEDcAARA6AAEQPAABED8AARBAAAEQQQABEEIAARBDAAEQRQABEEcAARBIAAEQSQABEEsAARBMAAEQWQABEFoAARBbAAEQXQABEJwAARCeAAEQoAABEKIAARClAAEQpgABEKcAARCoAAEQqQABEKsAARCtAAEQrgABEK8AARCxAAEQsgABEPEAARDzAAEQ9QABEPcAARD6AAEQ+wABEPwAARD9AAEQ/gABEQAAARECAAERAwABEQQAAREGAAERBwABEUYAARFIAAERSgABEUwAARFPAAERUAABEVEAARFSAAERUwABEVUAARFXAAERWAABEVkAARFbAAERXAABEZsAARGdAAERnwABEaEAARGkAAERpQABEaYAARGnAAERqAABEaoAARGsAAERrQABEa4AARGwAAERsQABEfAAARHyAAER9AABEfYAARH5AAER+gABEfsAARH8AAER/QABEf8AARIBAAESAgABEgMAARIFAAESBgABEisAARJPAAESdgABEpoAARKdAAESnwABEqEAARKjAAESpQABEqcAARKoAAESqwABErgAARLHAAESyQABEssAARLNAAESzwABEtEAARLTAAES1QABEuQAARLnAAES6gABEu0AARLwAAES8wABEvYAARL5AAES+wABEzoAARM8AAETPgABE0AAARNDAAETRAABE0UAARNGAAETRwABE0kAARNLAAETTAABE00AARNPAAETUAABE48AARORAAETkwABE5UAAROYAAETmQABE5oAARObAAETnAABE54AAROgAAEToQABE6IAAROkAAETpQABE+QAARPmAAET6AABE+oAARPtAAET7gABE+8AARPwAAET8QABE/MAARP1AAET9gABE/cAARP5AAET+gABFDkAARQ7AAEUPgABFEAAARRDAAEURAABFEUAARRGAAEURwABFEkAARRLAAEUTAABFE0AARRPAAEUUAABFFMAARSSAAEUlAABFJYAARSYAAEUmwABFJwAARSdAAEUngABFJ8AARShAAEUowABFKQAARSlAAEUpwABFKgAARTnAAEU6QABFOwAARTuAAEU8QABFPIAARTzAAEU9AABFPUAART3AAEU+QABFPoAART7AAEU/QABFP4AARUlAAEVZAABFWYAARVoAAEVagABFW0AARVuAAEVbwABFXAAARVxAAEVcwABFXUAARV2AAEVdwABFXkAARV6AAEVxQABFegAARYIAAEWKAABFioAARYsAAEWLgABFjAAARYyAAEWMwABFjQAARY3AAEWOAABFjoAARY7AAEWPQABFkAAARZBAAEWQgABFkUAARZGAAEWSwABFlgAARZdAAEWXwABFmEAARZmAAEWaQABFmwAARZuAAEWkwABFrcAARbeAAEXAgABFwUAARcHAAEXCQABFwsAARcNAAEXDwABFxAAARcTAAEXIAABFzEAARczAAEXNQABFzcAARc5AAEXOwABFz0AARc/AAEXQQABF1IAARdVAAEXWAABF1sAARdeAAEXYQABF2QAARdnAAEXagABF2wAARerAAEXrQABF68AARexAAEXtAABF7UAARe2AAEXtwABF7gAARe6AAEXvAABF70AARe+AAEXwAABF8EAARgAAAEYAgABGAQAARgGAAEYCQABGAoAARgLAAEYDAABGA0AARgPAAEYEQABGBIAARgTAAEYFQABGBYAARhVAAEYVwABGFoAARhcAAEYXwABGGAAARhhAAEYYgABGGMAARhlAAEYZwABGGgAARhpAAEYawABGGwAARh5AAEYegABGHsAARh9AAEYvAABGL4AARjAAAEYwgABGMUAARjGAAEYxwABGMgAARjJAAEYywABGM0AARjOAAEYzwABGNEAARjSAAEZEQABGRMAARkVAAEZFwABGRoAARkbAAEZHAABGR0AARkeAAEZIAABGSIAARkjAAEZJAABGSYAARknAAEZZgABGWgAARlqAAEZbAABGW8AARlwAAEZcQABGXIAARlzAAEZdQABGXcAARl4AAEZeQABGXsAARl8AAEZuwABGb0AARm/AAEZwQABGcQAARnFAAEZxgABGccAARnIAAEZygABGcwAARnNAAEZzgABGdAAARnRAAEaEAABGhIAARoUAAEaFgABGhkAARoaAAEaGwABGhwAARodAAEaHwABGiEAARoiAAEaIwABGiUAARomAAEaSwABGm8AARqWAAEaugABGr0AARq/AAEawQABGsMAARrFAAEaxwABGsgAARrLAAEa2AABGucAARrpAAEa6wABGu0AARrvAAEa8QABGvMAARr1AAEbBAABGwcAARsKAAEbDQABGxAAARsTAAEbFgABGxkAARsbAAEbWgABG1wAARteAAEbYAABG2MAARtkAAEbZQABG2YAARtnAAEbaQABG2sAARtsAAEbbQABG28AARtwAAEbrwABG7EAARuzAAEbtQABG7gAARu5AAEbugABG7sAARu8AAEbvgABG8AAARvBAAEbwgABG8QAARvFAAEcBAABHAYAARwIAAEcCgABHA0AARwOAAEcDwABHBAAARwRAAEcEwABHBUAARwWAAEcFwABHBkAARwaAAEcWQABHFsAARxeAAEcYAABHGMAARxkAAEcZQABHGYAARxnAAEcaQABHGsAARxsAAEcbQABHG8AARxwAAEcrwABHLEAARyzAAEctQABHLgAARy5AAEcugABHLsAARy8AAEcvgABHMAAARzBAAEcwgABHMQAARzFAAEdBAABHQYAAR0IAAEdCgABHQ0AAR0OAAEdDwABHRAAAR0RAAEdEwABHRUAAR0WAAEdFwABHRkAAR0aAAEdWQABHVsAAR1dAAEdXwABHWIAAR1jAAEdZAABHWUAAR1mAAEdaAABHWoAAR1rAAEdbAABHW4AAR1vAAEdugABHd0AAR39AAEeHQABHh8AAR4hAAEeIwABHiUAAR4nAAEeKAABHikAAR4sAAEeLQABHi8AAR4wAAEeMwABHjYAAR43AAEeOAABHjsAAR48AAEeQQABHk4AAR5TAAEeVQABHlgAAR5dAAEeYAABHmMAAR5lAAEeigABHq4AAR7VAAEe+QABHvwAAR7+AAEfAAABHwIAAR8EAAEfBgABHwcAAR8KAAEfFwABHygAAR8qAAEfLAABHy4AAR8wAAEfMgABHzQAAR82AAEfOAABH0kAAR9MAAEfTwABH1IAAR9VAAEfWAABH1sAAR9eAAEfYQABH2MAAR+iAAEfpAABH6YAAR+oAAEfqwABH6wAAR+tAAEfrgABH68AAR+xAAEfswABH7QAAR+1AAEftwABH7gAAR/3AAEf+QABH/sAAR/9AAEgAAABIAEAASACAAEgAwABIAQAASAGAAEgCAABIAkAASAKAAEgDAABIA0AASBMAAEgTgABIFEAASBTAAEgVgABIFcAASBYAAEgWQABIFoAASBcAAEgXgABIF8AASBgAAEgYgABIGMAASBwAAEgcQABIHIAASB0AAEgswABILUAASC3AAEguQABILwAASC9AAEgvgABIL8AASDAAAEgwgABIMQAASDFAAEgxgABIMgAASDJAAEhCAABIQoAASEMAAEhDgABIREAASESAAEhEwABIRQAASEVAAEhFwABIRkAASEaAAEhGwABIR0AASEeAAEhXQABIV8AASFhAAEhYwABIWYAASFnAAEhaAABIWkAASFqAAEhbAABIW4AASFvAAEhcAABIXIAASFzAAEhsgABIbQAASG2AAEhuAABIbsAASG8AAEhvQABIb4AASG/AAEhwQABIcMAASHEAAEhxQABIccAASHIAAEiBwABIgkAASILAAEiDQABIhAAASIRAAEiEgABIhMAASIUAAEiFgABIhgAASIZAAEiGgABIhwAASIdAAEiQgABImYAASKNAAEisQABIrQAASK3AAEiuQABIrsAASK9AAEivwABIsAAASLDAAEi0AABIt0AASLgAAEi4wABIuYAASLpAAEi7AABIu8AASL8AAEi/wABIwIAASMFAAEjCAABIwsAASMOAAEjEAABI08AASNRAAEjVAABI1YAASNZAAEjWgABI1sAASNcAAEjXQABI18AASNiAAEjYwABI2QAASNmAAEjZwABI6YAASOoAAEjqgABI6wAASOvAAEjsAABI7EAASOyAAEjswABI7UAASO4AAEjuQABI7oAASO8AAEjvQABI/wAASP+AAEkAQABJAMAASQGAAEkBwABJAgAASQJAAEkCgABJAwAASQPAAEkEAABJBEAASQTAAEkFAABJFMAASRVAAEkWAABJFoAASRdAAEkXgABJF8AASRgAAEkYQABJGMAASRmAAEkZwABJGgAASRqAAEkawABJKoAASSsAAEkrwABJLEAASS0AAEktQABJLYAASS3AAEkuAABJLoAASS9AAEkvgABJL8AASTBAAEkwgABJQEAASUDAAElBQABJQcAASUKAAElCwABJQwAASUNAAElDgABJRAAASUTAAElFAABJRUAASUXAAElGAABJWMAASWGAAElpgABJcYAASXIAAElygABJcwAASXOAAEl0AABJdEAASXSAAEl1QABJdYAASXYAAEl2QABJdsAASXeAAEl3wABJeAAASXjAAEl5AABJe0AASX6AAEl/wABJgEAASYDAAEmCAABJgsAASYOAAEmEAABJjUAASZZAAEmgAABJqQAASanAAEmqQABJqsAASatAAEmrwABJrEAASayAAEmtQABJsIAASbTAAEm1QABJtcAASbZAAEm2wABJt0AASbfAAEm4QABJuMAASb0AAEm9wABJvoAASb9AAEnAAABJwMAAScGAAEnCQABJwwAAScOAAEnTQABJ08AASdRAAEnUwABJ1YAASdXAAEnWAABJ1kAASdaAAEnXAABJ14AASdfAAEnYAABJ2IAASdjAAEnogABJ6QAASemAAEnqAABJ6sAASesAAEnrQABJ64AASevAAEnsQABJ7MAASe0AAEntQABJ7cAASe4AAEn9wABJ/kAASf8AAEn/gABKAEAASgCAAEoAwABKAQAASgFAAEoBwABKAkAASgKAAEoCwABKA0AASgOAAEoGwABKBwAASgdAAEoHwABKF4AAShgAAEoYgABKGQAAShnAAEoaAABKGkAAShqAAEoawABKG0AAShvAAEocAABKHEAAShzAAEodAABKLMAASi1AAEotwABKLkAASi8AAEovQABKL4AASi/AAEowAABKMIAASjEAAEoxQABKMYAASjIAAEoyQABKQgAASkKAAEpDAABKQ4AASkRAAEpEgABKRMAASkUAAEpFQABKRcAASkZAAEpGgABKRsAASkdAAEpHgABKV0AASlfAAEpYQABKWMAASlmAAEpZwABKWgAASlpAAEpagABKWwAASluAAEpbwABKXAAASlyAAEpcwABKbIAASm0AAEptgABKbgAASm7AAEpvAABKb0AASm+AAEpvwABKcEAASnDAAEpxAABKcUAASnHAAEpyAABKe0AASoRAAEqOAABKlwAASpfAAEqYQABKmMAASplAAEqZwABKmkAASpqAAEqbQABKnoAASqJAAEqiwABKo0AASqPAAEqkQABKpMAASqVAAEqlwABKqYAASqpAAEqrAABKq8AASqyAAEqtQABKrgAASq7AAEqvQABKvwAASr+AAErAAABKwIAASsFAAErBgABKwcAASsIAAErCQABKwsAASsNAAErDgABKw8AASsRAAErEgABK1EAAStTAAErVQABK1cAAStaAAErWwABK1wAAStdAAErXgABK2AAAStiAAErYwABK2QAAStmAAErZwABK6YAASuoAAErqgABK6wAASuvAAErsAABK7EAASuyAAErswABK7UAASu3AAEruAABK7kAASu7AAErvAABK/sAASv9AAEr/wABLAEAASwEAAEsBQABLAYAASwHAAEsCAABLAoAASwMAAEsDQABLA4AASwQAAEsEQABLFAAASxSAAEsVAABLFYAASxZAAEsWgABLFsAASxcAAEsXQABLF8AASxhAAEsYgABLGMAASxlAAEsZgABLKUAASynAAEsqQABLKsAASyuAAEsrwABLLAAASyxAAEssgABLLQAASy2AAEstwABLLgAASy6AAEsuwABLPoAASz8AAEs/gABLQAAAS0DAAEtBAABLQUAAS0GAAEtBwABLQkAAS0LAAEtDAABLQ0AAS0PAAEtEAABLVsAAS1+AAEtngABLb4AAS3AAAEtwgABLcQAAS3GAAEtyAABLckAAS3KAAEtzQABLc4AAS3QAAEt0QABLdMAAS3WAAEt1wABLdgAAS3bAAEt3AABLeEAAS3uAAEt8wABLfUAAS33AAEt/AABLf8AAS4CAAEuBAABLikAAS5NAAEudAABLpgAAS6bAAEunQABLp8AAS6hAAEuowABLqUAAS6mAAEuqQABLrYAAS7HAAEuyQABLssAAS7NAAEuzwABLtEAAS7TAAEu1QABLtcAAS7oAAEu6wABLu4AAS7xAAEu9AABLvcAAS76AAEu/QABLwAAAS8CAAEvQQABL0MAAS9FAAEvRwABL0oAAS9LAAEvTAABL00AAS9OAAEvUAABL1IAAS9TAAEvVAABL1YAAS9XAAEvlgABL5gAAS+aAAEvnAABL58AAS+gAAEvoQABL6IAAS+jAAEvpQABL6cAAS+oAAEvqQABL6sAAS+sAAEv6wABL+0AAS/wAAEv8gABL/UAAS/2AAEv9wABL/gAAS/5AAEv+wABL/0AAS/+AAEv/wABMAEAATACAAEwDwABMBAAATARAAEwEwABMFIAATBUAAEwVgABMFgAATBbAAEwXAABMF0AATBeAAEwXwABMGEAATBjAAEwZAABMGUAATBnAAEwaAABMKcAATCpAAEwqwABMK0AATCwAAEwsQABMLIAATCzAAEwtAABMLYAATC4AAEwuQABMLoAATC8AAEwvQABMPwAATD+AAExAAABMQIAATEFAAExBgABMQcAATEIAAExCQABMQsAATENAAExDgABMQ8AATERAAExEgABMVEAATFTAAExVQABMVcAATFaAAExWwABMVwAATFdAAExXgABMWAAATFiAAExYwABMWQAATFmAAExZwABMaYAATGoAAExqgABMawAATGvAAExsAABMbEAATGyAAExswABMbUAATG3AAExuAABMbkAATG7AAExvAABMeEAATIFAAEyLAABMlAAATJTAAEyVQABMlcAATJZAAEyWwABMl0AATJeAAEyYQABMm4AATJ9AAEyfwABMoEAATKDAAEyhQABMocAATKJAAEyiwABMpoAATKdAAEyoAABMqMAATKmAAEyqQABMqwAATKvAAEysQABMvAAATLyAAEy9AABMvYAATL5AAEy+gABMvsAATL8AAEy/QABMv8AATMBAAEzAgABMwMAATMFAAEzBgABM0UAATNHAAEzSQABM0sAATNOAAEzTwABM1AAATNRAAEzUgABM1QAATNWAAEzVwABM1gAATNaAAEzWwABM5oAATOcAAEzngABM6AAATOjAAEzpAABM6UAATOmAAEzpwABM6kAATOrAAEzrAABM60AATOvAAEzsAABM+8AATPxAAEz8wABM/UAATP4AAEz+QABM/oAATP7AAEz/AABM/4AATQAAAE0AQABNAIAATQEAAE0BQABNEQAATRGAAE0SAABNEoAATRNAAE0TgABNE8AATRQAAE0UQABNFMAATRVAAE0VgABNFcAATRZAAE0WgABNJkAATSbAAE0nQABNJ8AATSiAAE0owABNKQAATSlAAE0pgABNKgAATSqAAE0qwABNKwAATSuAAE0rwABNO4AATTwAAE08gABNPQAATT3AAE0+AABNPkAATT6AAE0+wABNP0AATT/AAE1AAABNQEAATUDAAE1BAABNU8AATVyAAE1kgABNbIAATW0AAE1tgABNbgAATW6AAE1vAABNb0AATW+AAE1wQABNcIAATXEAAE1xQABNccAATXKAAE1ywABNcwAATXPAAE10AABNdUAATXiAAE15wABNekAATXrAAE18AABNfMAATX2AAE1+AABNh0AATZBAAE2aAABNowAATaPAAE2kQABNpMAATaVAAE2lwABNpkAATaaAAE2nQABNqoAATa7AAE2vQABNr8AATbBAAE2wwABNsUAATbHAAE2yQABNssAATbcAAE23wABNuIAATblAAE26AABNusAATbuAAE28QABNvQAATb2AAE3NQABNzcAATc5AAE3OwABNz4AATc/AAE3QAABN0EAATdCAAE3RAABN0YAATdHAAE3SAABN0oAATdLAAE3igABN4wAATeOAAE3kAABN5MAATeUAAE3lQABN5YAATeXAAE3mQABN5sAATecAAE3nQABN58AATegAAE33wABN+EAATfkAAE35gABN+kAATfqAAE36wABN+wAATftAAE37wABN/EAATfyAAE38wABN/UAATf2AAE4AwABOAQAATgFAAE4BwABOEYAAThIAAE4SgABOEwAAThPAAE4UAABOFEAAThSAAE4UwABOFUAAThXAAE4WAABOFkAAThbAAE4XAABOJsAATidAAE4nwABOKEAATikAAE4pQABOKYAATinAAE4qAABOKoAATisAAE4rQABOK4AATiwAAE4sQABOPAAATjyAAE49AABOPYAATj5AAE4+gABOPsAATj8AAE4/QABOP8AATkBAAE5AgABOQMAATkFAAE5BgABOUUAATlHAAE5SQABOUsAATlOAAE5TwABOVAAATlRAAE5UgABOVQAATlWAAE5VwABOVgAATlaAAE5WwABOZoAATmcAAE5ngABOaAAATmjAAE5pAABOaUAATmmAAE5pwABOakAATmrAAE5rAABOa0AATmvAAE5sAABOdUAATn5AAE6IAABOkQAATpHAAE6SQABOksAATpNAAE6TwABOlEAATpSAAE6VQABOmIAATpxAAE6cwABOnUAATp3AAE6eQABOnsAATp9AAE6fwABOo4AATqRAAE6lAABOpcAATqaAAE6nQABOqAAATqjAAE6pQABOuQAATrmAAE66AABOuoAATrtAAE67gABOu8AATrwAAE68QABOvMAATr1AAE69gABOvcAATr5AAE6+gABOzkAATs7AAE7PQABOz8AATtCAAE7QwABO0QAATtFAAE7RgABO0gAATtKAAE7SwABO0wAATtOAAE7TwABO44AATuQAAE7kgABO5QAATuXAAE7mAABO5kAATuaAAE7mwABO50AATufAAE7oAABO6EAATujAAE7pAABO+MAATvlAAE75wABO+kAATvsAAE77QABO+4AATvvAAE78AABO/IAATv0AAE79QABO/YAATv4AAE7+QABPDgAATw6AAE8PAABPD4AATxBAAE8QgABPEMAATxEAAE8RQABPEcAATxJAAE8SgABPEsAATxNAAE8TgABPI0AATyPAAE8kQABPJMAATyWAAE8lwABPJgAATyZAAE8mgABPJwAATyeAAE8nwABPKAAATyiAAE8owABPOIAATzkAAE85gABPOgAATzrAAE87AABPO0AATzuAAE87wABPPEAATzzAAE89AABPPUAATz3AAE8+AABPUMAAT1mAAE9hgABPaYAAT2oAAE9qgABPawAAT2uAAE9sAABPbEAAT2yAAE9tQABPbYAAT24AAE9uQABPbsAAT2+AAE9vwABPcAAAT3DAAE9xAABPckAAT3WAAE92wABPd0AAT3fAAE95AABPec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AAU7aAAFPGQABTxsAAU8dAAFPHwABTyIAAU8jAAFPJAABTyUAAU8mAAFPKAABTyoAAU8rAAFPLAABTy4AAU8vAAFPbgABT3AAAU9yAAFPdAABT3cAAU94AAFPeQABT3oAAU97AAFPfQABT38AAU+AAAFPgQABT4MAAU+EAAFPwwABT8UAAU/IAAFPygABT80AAU/OAAFPzwABT9AAAU/RAAFP0wABT9UAAU/WAAFP1wABT9kAAU/aAAFP5wABT+gAAU/pAAFP6wABUCoAAVAsAAFQLgABUDAAAVAzAAFQNAABUDUAAVA2AAFQNwABUDkAAVA7AAFQPAABUD0AAVA/AAFQQAABUH8AAVCBAAFQgwABUIUAAVCIAAFQiQABUIoAAVCLAAFQjAABUI4AAVCQAAFQkQABUJIAAVCUAAFQlQABUNQAAVDWAAFQ2AABUNoAAVDdAAFQ3gABUN8AAVDgAAFQ4QABUOMAAVDlAAFQ5gABUOcAAVDpAAFQ6gABUSkAAVErAAFRLQABUS8AAVEyAAFRMwABUTQAAVE1AAFRNgABUTgAAVE6AAFROwABUTwAAVE+AAFRPwABUX4AAVGAAAFRggABUYQAAVGHAAFRiAABUYkAAVGKAAFRiwABUY0AAVGPAAFRkAABUZEAAVGTAAFRlAABUbkAAVHdAAFSBAABUigAAVIrAAFSLgABUjAAAVIyAAFSNAABUjYAAVI3AAFSOgABUkcAAVJWAAFSWQABUlwAAVJfAAFSYgABUmUAAVJoAAFSawABUnoAAVJ9AAFSgAABUoMAAVKGAAFSiQABUowAAVKPAAFSkQABUtAAAVLSAAFS1QABUtcAAVLaAAFS2wABUtwAAVLdAAFS3gABUuAAAVLjAAFS5AABUuUAAVLnAAFS6AABUycAAVMpAAFTLAABUy4AAVMxAAFTMgABUzMAAVM0AAFTNQABUzcAAVM6AAFTOwABUzwAAVM+AAFTPwABU34AAVOAAAFTgwABU4UAAVOIAAFTiQABU4oAAVOLAAFTjAABU44AAVORAAFTkgABU5MAAVOVAAFTlgABU9UAAVPXAAFT2gABU9wAAVPfAAFT4AABU+EAAVPiAAFT4wABU+UAAVPoAAFT6QABU+oAAVPsAAFT7QABVDAAAVRUAAFUeAABVJsAAVTCAAFU4gABVQkAAVUwAAFVUAABVXQAAVWYAAFVmgABVZ0AAVWfAAFVoQABVaMAAVWmAAFVqAABVaoAAVWsAAFVrgABVbAAAVWyAAFVtQABVbgAAVW5AAFVvgABVcsAAVXOAAFV0AABVdMAAVXWAAFV2AABVf0AAVYhAAFWSAABVmwAAVZvAAFWcQABVnMAAVZ1AAFWdwABVnkAAVZ6AAFWfQABVooAAVadAAFWnwABVqEAAVajAAFWpQABVqcAAVapAAFWqwABVq0AAVavAAFWwgABVsUAAVbIAAFWywABVs4AAVbRAAFW1AABVtcAAVbaAAFW3QABVt8AAVceAAFXIAABVyMAAVclAAFXKAABVykAAVcqAAFXKwABVywAAVcuAAFXMAABVzEAAVcyAAFXNAABVzUAAVc+AAFXPwABV0EAAVeAAAFXggABV4QAAVeGAAFXiQABV4oAAVeLAAFXjAABV40AAVePAAFXkQABV5IAAVeTAAFXlQABV5YAAVfVAAFX1wABV9oAAVfcAAFX3wABV+AAAVfhAAFX4gABV+MAAVflAAFX5wABV+gAAVfpAAFX6wABV+wAAVf1AAFX9gABV/gAAVg3AAFYOQABWDsAAVg9AAFYQAABWEEAAVhCAAFYQwABWEQAAVhGAAFYSAABWEkAAVhKAAFYTAABWE0AAViMAAFYjgABWJEAAViTAAFYlgABWJcAAViYAAFYmQABWJoAAVicAAFYngABWJ8AAVigAAFYogABWKMAAVisAAFYrQABWK8AAVjuAAFY8AABWPIAAVj0AAFY9wABWPgAAVj5AAFY+gABWPsAAVj9AAFY/wABWQAAAVkBAAFZAwABWQQAAVlDAAFZRQABWUgAAVlKAAFZTQABWU4AAVlPAAFZUAABWVEAAVlTAAFZVQABWVYAAVlXAAFZWQABWVoAAVlnAAFZaAABWWkAAVlrAAFZqgABWawAAVmuAAFZsAABWbMAAVm0AAFZtQABWbYAAVm3AAFZuQABWbsAAVm8AAFZvQABWb8AAVnAAAFZ/wABWgEAAVoEAAFaBgABWgkAAVoKAAFaCwABWgwAAVoNAAFaDwABWhEAAVoSAAFaEwABWhUAAVoWAAFaKQABWjYAAVpBAAFaRAABWkcAAVpKAAFaTQABWlAAAVpbAAFaXgABWmEAAVpkAAFaZwABWmoAAVpsAAFahAABWpYAAVqhAAFauQABWwQAAVsnAAFbRwABW2cAAVtpAAFbawABW20AAVtvAAFbcgABW3MAAVt0AAFbdwABW3gAAVt6AAFbewABW30AAVuAAAFbgQABW4IAAVuFAAFbhgABW4sAAVuYAAFbnQABW58AAVuhAAFbpgABW6kAAVusAAFbrgABW9MAAVv3AAFcHgABXEIAAVxFAAFcRwABXEkAAVxLAAFcTQABXE8AAVxQAAFcUwABXGAAAVxxAAFccwABXHUAAVx3AAFceQABXHsAAVx9AAFcfwABXIEAAVySAAFclQABXJgAAVybAAFcngABXKEAAVykAAFcpwABXKoAAVysAAFc6wABXO0AAVzvAAFc8QABXPQAAVz1AAFc9gABXPcAAVz4AAFc+gABXPwAAVz9AAFc/gABXQAAAV0BAAFdQAABXUIAAV1EAAFdRgABXUkAAV1KAAFdSwABXUwAAV1NAAFdTwABXVEAAV1SAAFdUwABXVUAAV1WAAFdlQABXZcAAV2aAAFdnAABXZ8AAV2gAAFdoQABXaIAAV2jAAFdpQABXacAAV2oAAFdqQABXasAAV2sAAFduQABXboAAV27AAFdvQABXfwAAV3+AAFeAAABXgIAAV4FAAFeBgABXgcAAV4IAAFeCQABXgsAAV4NAAFeDgABXg8AAV4RAAFeEgABXlEAAV5TAAFeVQABXlcAAV5aAAFeWwABXlwAAV5dAAFeXgABXmAAAV5iAAFeYwABXmQAAV5mAAFeZwABXqYAAV6oAAFeqgABXqwAAV6vAAFesAABXrEAAV6yAAFeswABXrUAAV63AAFeuAABXrkAAV67AAFevAABXvsAAV79AAFe/wABXwEAAV8EAAFfBQABXwYAAV8HAAFfCAABXwoAAV8MAAFfDQABXw4AAV8QAAFfEQABX1AAAV9SAAFfVAABX1YAAV9ZAAFfWgABX1sAAV9cAAFfXQABX18AAV9hAAFfYgABX2MAAV9lAAFfZgABX4sAAV+vAAFf1gABX/oAAV/9AAFf/wABYAEAAWADAAFgBQABYAcAAWAIAAFgCwABYBgAAWAnAAFgKQABYCsAAWAtAAFgLwABYDEAAWAzAAFgNQABYEQAAWBHAAFgSgABYE0AAWBQAAFgUwABYFYAAWBZAAFgWwABYJoAAWCcAAFgngABYKAAAWCjAAFgpAABYKUAAWCmAAFgpwABYKkAAWCrAAFgrAABYK0AAWCvAAFgsAABYO8AAWDxAAFg8wABYPUAAWD4AAFg+QABYPoAAWD7AAFg/AABYP4AAWEAAAFhAQABYQIAAWEEAAFhBQABYUQAAWFGAAFhSAABYUoAAWFNAAFhTgABYU8AAWFQAAFhUQABYVMAAWFVAAFhVgABYVcAAWFZAAFhWgABYZkAAWGbAAFhngABYaAAAWGjAAFhpAABYaUAAWGmAAFhpwABYakAAWGrAAFhrAABYa0AAWGvAAFhsAABYe8AAWHxAAFh8wABYfUAAWH4AAFh+QABYfoAAWH7AAFh/AABYf4AAWIAAAFiAQABYgIAAWIEAAFiBQABYkQAAWJGAAFiSAABYkoAAWJNAAFiTgABYk8AAWJQAAFiUQABYlMAAWJVAAFiVgABYlcAAWJZAAFiWgABYpkAAWKbAAFinQABYp8AAWKiAAFiowABYqQAAWKlAAFipgABYqgAAWKqAAFiqwABYqwAAWKuAAFirwABYvoAAWMdAAFjPQABY10AAWNfAAFjYQABY2MAAWNlAAFjaAABY2kAAWNqAAFjbQABY24AAWNwAAFjcQABY3QAAWN3AAFjeAABY3kAAWN8AAFjfQABY4IAAWOPAAFjlAABY5YAAWOZAAFjngABY6EAAWOkAAFjpgABY8sAAWPvAAFkFgABZDoAAWQ9AAFkPwABZEEAAWRDAAFkRQABZEcAAWRIAAFkSwABZFgAAWRpAAFkawABZG0AAWRvAAFkcQABZHMAAWR1AAFkdwABZHkAAWSKAAFkjQABZJAAAWSTAAFklgABZJkAAWScAAFknwABZKIAAWSkAAFk4wABZOUAAWTnAAFk6QABZOwAAWTtAAFk7gABZO8AAWTwAAFk8gABZPQAAWT1AAFk9gABZPgAAWT5AAFlOAABZToAAWU8AAFlPgABZUEAAWVCAAFlQwABZUQAAWVFAAFlRwABZUkAAWVKAAFlSwABZU0AAWVOAAFljQABZY8AAWWSAAFllAABZZcAAWWYAAFlmQABZZoAAWWbAAFlnQABZZ8AAWWgAAFloQABZaMAAWWkAAFlsQABZbIAAWWzAAFltQABZfQAAWX2AAFl+AABZfoAAWX9AAFl/gABZf8AAWYAAAFmAQABZgMAAWYFAAFmBgABZgcAAWYJAAFmCgABZkkAAWZLAAFmTQABZk8AAWZSAAFmUwABZlQAAWZVAAFmVgABZlgAAWZaAAFmWwABZlwAAWZeAAFmXwABZp4AAWagAAFmogABZqQAAWanAAFmqAABZqkAAWaqAAFmqwABZq0AAWavAAFmsAABZrEAAWazAAFmtAABZvMAAWb1AAFm9wABZvkAAWb8AAFm/QABZv4AAWb/AAFnAAABZwIAAWcEAAFnBQABZwYAAWcIAAFnCQABZ0gAAWdKAAFnTAABZ04AAWdRAAFnUgABZ1MAAWdUAAFnVQABZ1cAAWdZAAFnWgABZ1sAAWddAAFnXgABZ4MAAWenAAFnzgABZ/IAAWf1AAFn+AABZ/oAAWf8AAFn/gABaAAAAWgBAAFoBAABaBEAAWggAAFoIwABaCYAAWgpAAFoLAABaC8AAWgyAAFoNQABaEQAAWhHAAFoSgABaE0AAWhQAAFoUwABaFYAAWhZAAFoWwABaJoAAWicAAFonwABaKEAAWikAAFopQABaKYAAWinAAFoqAABaKoAAWitAAForgABaK8AAWixAAFosgABaPEAAWjzAAFo9gABaPgAAWj7AAFo/AABaP0AAWj+AAFo/wABaQEAAWkEAAFpBQABaQYAAWkIAAFpCQABaUgAAWlKAAFpTQABaU8AAWlSAAFpUwABaVQAAWlVAAFpVgABaVgAAWlbAAFpXAABaV0AAWlfAAFpYAABaZ8AAWmhAAFpowABaaUAAWmoAAFpqQABaaoAAWmrAAFprAABaa4AAWmxAAFpsgABabMAAWm1AAFptgABafUAAWn3AAFp+QABafsAAWn+AAFp/wABagAAAWoBAAFqAgABagQAAWoHAAFqCAABagkAAWoLAAFqDAABaksAAWpNAAFqTwABalEAAWpUAAFqVQABalYAAWpXAAFqWAABaloAAWpdAAFqXgABal8AAWphAAFqYgABaqEAAWqjAAFqpgABaqgAAWqrAAFqrAABaq0AAWquAAFqrwABarEAAWq0AAFqtQABarYAAWq4AAFquQABawQAAWsnAAFrRwABa2cAAWtpAAFrawABa20AAWtvAAFrcgABa3MAAWt0AAFrdwABa3gAAWt6AAFrewABa34AAWuBAAFrggABa4MAAWuGAAFrhwABa4wAAWuZAAFrngABa6AAAWujAAFrqAABa6sAAWuuAAFrsAABa9UAAWv5AAFsIAABbEQAAWxHAAFsSQABbEsAAWxNAAFsTwABbFEAAWxSAAFsVQABbGIAAWxzAAFsdQABbHcAAWx5AAFsewABbH0AAWx/AAFsgQABbIMAAWyUAAFslwABbJoAAWydAAFsoAABbKMAAWymAAFsqQABbKwAAWyuAAFs7QABbO8AAWzxAAFs8wABbPYAAWz3AAFs+AABbPkAAWz6AAFs/AABbP4AAWz/AAFtAAABbQIAAW0DAAFtQgABbUQAAW1GAAFtSAABbUsAAW1MAAFtTQABbU4AAW1PAAFtUQABbVMAAW1UAAFtVQABbVcAAW1YAAFtlwABbZkAAW2cAAFtngABbaEAAW2iAAFtowABbaQAAW2lAAFtpwABbakAAW2qAAFtqwABba0AAW2uAAFtuwABbbwAAW29AAFtvwABbf4AAW4AAAFuAgABbgQAAW4HAAFuCAABbgkAAW4KAAFuCwABbg0AAW4PAAFuEAABbhEAAW4TAAFuFAABblMAAW5VAAFuVwABblkAAW5cAAFuXQABbl4AAW5fAAFuYAABbmIAAW5kAAFuZQABbmYAAW5oAAFuaQABbqgAAW6qAAFurAABbq4AAW6xAAFusgABbrMAAW60AAFutQABbrcAAW65AAFuugABbrsAAW69AAFuvgABbv0AAW7/AAFvAQABbwMAAW8GAAFvBwABbwgAAW8JAAFvCgABbwwAAW8OAAFvDwABbxAAAW8SAAFvEwABb1IAAW9UAAFvVgABb1gAAW9bAAFvXAABb10AAW9eAAFvXwABb2EAAW9jAAFvZAABb2UAAW9nAAFvaAABb40AAW+xAAFv2AABb/wAAW//AAFwAgABcAQAAXAGAAFwCAABcAoAAXALAAFwDgABcBsAAXAoAAFwKwABcC4AAXAxAAFwNAABcDcAAXA6AAFwRwABcEoAAXBNAAFwUAABcFMAAXBWAAFwWQABcFsAAXCaAAFwnAABcJ4AAXCgAAFwowABcKQAAXClAAFwpgABcKcAAXCpAAFwrAABcK0AAXCuAAFwsAABcLEAAXDwAAFw8gABcPQAAXD2AAFw+QABcPoAAXD7AAFw/AABcP0AAXD/AAFxAgABcQMAAXEEAAFxBgABcQcAAXFGAAFxSAABcUsAAXFNAAFxUAABcVEAAXFSAAFxUwABcVQAAXFWAAFxWQABcVoAAXFbAAFxXQABcV4AAXGdAAFxnwABcaIAAXGkAAFxpwABcagAAXGpAAFxqgABcasAAXGtAAFxsAABcbEAAXGyAAFxtAABcbUAAXH0AAFx9gABcfkAAXH7AAFx/gABcf8AAXIAAAFyAQABcgIAAXIEAAFyBwABcggAAXIJAAFyCwABcgwAAXJLAAFyTQABck8AAXJRAAFyVAABclUAAXJWAAFyVwABclgAAXJaAAFyXQABcl4AAXJfAAFyYQABcmIAAXKtAAFy0AABcvAAAXMQAAFzEgABcxQAAXMWAAFzGAABcxsAAXMcAAFzHQABcyAAAXMhAAFzIwABcyQAAXMmAAFzKQABcyoAAXMrAAFzLgABcy8AAXM4AAFzRQABc0oAAXNMAAFzTgABc1MAAXNWAAFzWQABc1sAAXOAAAFzpAABc8sAAXPvAAFz8gABc/QAAXP2AAFz+AABc/oAAXP8AAFz/QABdAAAAXQNAAF0HgABdCAAAXQiAAF0JAABdCYAAXQoAAF0KgABdCwAAXQuAAF0PwABdEIAAXRFAAF0SAABdEsAAXROAAF0UQABdFQAAXRXAAF0WQABdJgAAXSaAAF0nAABdJ4AAXShAAF0ogABdKMAAXSkAAF0pQABdKcAAXSpAAF0qgABdKsAAXStAAF0rgABdO0AAXTvAAF08QABdPMAAXT2AAF09wABdPgAAXT5AAF0+gABdPwAAXT+AAF0/wABdQAAAXUCAAF1AwABdUIAAXVEAAF1RwABdUkAAXVMAAF1TQABdU4AAXVPAAF1UAABdVIAAXVUAAF1VQABdVYAAXVYAAF1WQABdWYAAXVnAAF1aAABdWoAAXWpAAF1qwABda0AAXWvAAF1sgABdbMAAXW0AAF1tQABdbYAAXW4AAF1ugABdbsAAXW8AAF1vgABdb8AAXX+AAF2AAABdgIAAXYEAAF2BwABdggAAXYJAAF2CgABdgsAAXYNAAF2DwABdhAAAXYRAAF2EwABdhQAAXZTAAF2VQABdlcAAXZZAAF2XAABdl0AAXZeAAF2XwABdmAAAXZiAAF2ZAABdmUAAXZmAAF2aAABdmkAAXaoAAF2qgABdqwAAXauAAF2sQABdrIAAXazAAF2tAABdrUAAXa3AAF2uQABdroAAXa7AAF2vQABdr4AAXb9AAF2/wABdwEAAXcDAAF3BgABdwcAAXcIAAF3CQABdwoAAXcMAAF3DgABdw8AAXcQAAF3EgABdxMAAXc4AAF3XAABd4MAAXenAAF3qgABd6wAAXeuAAF3sAABd7IAAXe0AAF3tQABd7gAAXfFAAF31AABd9YAAXfYAAF32gABd9wAAXfeAAF34AABd+IAAXfxAAF39AABd/cAAXf6AAF3/QABeAAAAXgDAAF4BgABeAgAAXhHAAF4SQABeEsAAXhNAAF4UAABeFEAAXhSAAF4UwABeFQAAXhWAAF4WAABeFkAAXhaAAF4XAABeF0AAXicAAF4ngABeKAAAXiiAAF4pQABeKYAAXinAAF4qAABeKkAAXirAAF4rQABeK4AAXivAAF4sQABeLIAAXjxAAF48wABePUAAXj3AAF4+gABePsAAXj8AAF4/QABeP4AAXkAAAF5AgABeQMAAXkEAAF5BgABeQcAAXlGAAF5SAABeUoAAXlMAAF5TwABeVAAAXlRAAF5UgABeVMAAXlVAAF5VwABeVgAAXlZAAF5WwABeVwAAXmbAAF5nQABeZ8AAXmhAAF5pAABeaUAAXmmAAF5pwABeagAAXmqAAF5rAABea0AAXmuAAF5sAABebEAAXnwAAF58gABefQAAXn2AAF5+QABefoAAXn7AAF5/AABef0AAXn/AAF6AQABegIAAXoDAAF6BQABegYAAXpFAAF6RwABekkAAXpLAAF6TgABek8AAXpQAAF6UQABelIAAXpUAAF6VgABelcAAXpYAAF6WgABelsAAXqmAAF6yQABeukAAXsJAAF7CwABew0AAXsPAAF7EQABexQAAXsVAAF7FgABexkAAXsaAAF7HAABex0AAXsgAAF7IwABeyQAAXslAAF7KAABeykAAXsuAAF7OwABe0AAAXtCAAF7RQABe0oAAXtNAAF7UAABe1IAAXt3AAF7mwABe8IAAXvmAAF76QABe+sAAXvtAAF77wABe/EAAXvzAAF79AABe/cAAXwEAAF8FQABfBcAAXwZAAF8GwABfB0AAXwfAAF8IQABfCMAAXwlAAF8NgABfDkAAXw8AAF8PwABfEIAAXxFAAF8SAABfEsAAXxOAAF8UAABfI8AAXyRAAF8kwABfJUAAXyYAAF8mQABfJoAAXybAAF8nAABfJ4AAXygAAF8oQABfKIAAXykAAF8pQABfOQAAXzmAAF86AABfOoAAXztAAF87gABfO8AAXzwAAF88QABfPMAAXz1AAF89gABfPcAAXz5AAF8+gABfTkAAX07AAF9PgABfUAAAX1DAAF9RAABfUUAAX1GAAF9RwABfUkAAX1LAAF9TAABfU0AAX1PAAF9UAABfV0AAX1eAAF9XwABfWEAAX2gAAF9ogABfaQAAX2mAAF9qQABfaoAAX2rAAF9rAABfa0AAX2vAAF9sQABfbIAAX2zAAF9tQABfbYAAX31AAF99wABffkAAX37AAF9/gABff8AAX4AAAF+AQABfgIAAX4EAAF+BgABfgcAAX4IAAF+CgABfgsAAX5KAAF+TAABfk4AAX5QAAF+UwABflQAAX5VAAF+VgABflcAAX5ZAAF+WwABflwAAX5dAAF+XwABfmAAAX6fAAF+oQABfqMAAX6lAAF+qAABfqkAAX6qAAF+qwABfqwAAX6uAAF+sAABfrEAAX6yAAF+tAABfrUAAX70AAF+9gABfvgAAX76AAF+/QABfv4AAX7/AAF/AAABfwEAAX8DAAF/BQABfwYAAX8HAAF/CQABfwoAAX8vAAF/UwABf3oAAX+eAAF/oQABf6QAAX+mAAF/qAABf6oAAX+sAAF/rQABf7AAAX+9AAF/zAABf88AAX/SAAF/1QABf9gAAX/bAAF/3gABf+EAAX/wAAF/8wABf/YAAX/5AAF//AABf/8AAYACAAGABQABgAcAAYBGAAGASAABgEsAAYBNAAGAUAABgFEAAYBSAAGAUwABgFQAAYBWAAGAWQABgFoAAYBbAAGAXQABgF4AAYCdAAGAnwABgKIAAYCkAAGApwABgKgAAYCpAAGAqgABgKsAAYCtAAGAsAABgLEAAYCyAAGAtAABgLUAAYD0AAGA9gABgPkAAYD7AAGA/gABgP8AAYEAAAGBAQABgQIAAYEEAAGBBwABgQgAAYEJAAGBCwABgQwAAYFLAAGBTQABgVAAAYFSAAGBVQABgVYAAYFXAAGBWAABgVkAAYFbAAGBXgABgV8AAYFgAAGBYgABgWMAAYGmAAGBygABge4AAYIRAAGCOAABglgAAYJ/AAGCpgABgsYAAYLqAAGDDgABgxAAAYMTAAGDFQABgxcAAYMZAAGDHAABgx4AAYMgAAGDIgABgyQAAYMmAAGDKAABgysAAYMuAAGDLwABgzQAAYNBAAGDRAABg0YAAYNJAAGDTAABg04AAYNzAAGDlwABg74AAYPiAAGD5QABg+cAAYPpAAGD6wABg+0AAYPvAAGD8AABg/MAAYQAAAGEEwABhBUAAYQXAAGEGQABhBsAAYQdAAGEHwABhCEAAYQjAAGEJQABhDgAAYQ7AAGEPgABhEEAAYREAAGERwABhEoAAYRNAAGEUAABhFMAAYRVAAGElAABhJYAAYSZAAGEmwABhJ4AAYSfAAGEoAABhKEAAYSiAAGEpAABhKYAAYSnAAGEqAABhKoAAYSrAAGEtAABhLUAAYS3AAGE9gABhPgAAYT6AAGE/AABhP8AAYUAAAGFAQABhQIAAYUDAAGFBQABhQcAAYUIAAGFCQABhQsAAYUMAAGFSwABhU0AAYVQAAGFUgABhVUAAYVWAAGFVwABhVgAAYVZAAGFWwABhV0AAYVeAAGFXwABhWEAAYViAAGFawABhWwAAYVuAAGFrQABha8AAYWxAAGFswABhbYAAYW3AAGFuAABhbkAAYW6AAGFvAABhb4AAYW/AAGFwAABhcIAAYXDAAGGAgABhgQAAYYHAAGGCQABhgwAAYYNAAGGDgABhg8AAYYQAAGGEgABhhQAAYYVAAGGFgABhhgAAYYZAAGGIgABhiMAAYYlAAGGZAABhmYAAYZoAAGGagABhm0AAYZuAAGGbwABhnAAAYZxAAGGcwABhnUAAYZ2AAGGdwABhnkAAYZ6AAGGuQABhrsAAYa+AAGGwAABhsMAAYbEAAGGxQABhsYAAYbHAAGGyQABhssAAYbMAAGGzQABhs8AAYbQAAGG3QABht4AAYbfAAGG4QABhyAAAYciAAGHJAABhyYAAYcpAAGHKgABhysAAYcsAAGHLQABhy8AAYcxAAGHMgABhzMAAYc1AAGHNgABh3UAAYd3AAGHegABh3wAAYd/AAGHgAABh4EAAYeCAAGHgwABh4UAAYeHAAGHiAABh4kAAYeLAAGHjAABh6gAAYe1AAGHvgABh8AAAYfDAAGHxgABh8kAAYfSAAGH1QABh9gAAYfbAAGH3gABh+AAAYf0AAGH+wABiEYAAYhpAAGIiQABiKkAAYirAAGIrQABiK8AAYixAAGItAABiLUAAYi2AAGIuQABiLoAAYi8AAGIvQABiL8AAYjBAAGIwgABiMMAAYjGAAGIxwABiMwAAYjZAAGI3gABiOAAAYjiAAGI5wABiOoAAYjtAAGI7wABiRQAAYk4AAGJXwABiYMAAYmGAAGJiAABiYoAAYmMAAGJjgABiZAAAYmRAAGJlAABiaEAAYmyAAGJtAABibYAAYm4AAGJugABibwAAYm+AAGJwAABicIAAYnTAAGJ1gABidkAAYncAAGJ3wABieIAAYnlAAGJ6AABiesAAYntAAGKLAABii4AAYowAAGKMgABijUAAYo2AAGKNwABijgAAYo5AAGKOwABij0AAYo+AAGKPwABikEAAYpCAAGKgQABioMAAYqFAAGKhwABiooAAYqLAAGKjAABio0AAYqOAAGKkAABipIAAYqTAAGKlAABipYAAYqXAAGK1gABitgAAYrbAAGK3QABiuAAAYrhAAGK4gABiuMAAYrkAAGK5gABiugAAYrpAAGK6gABiuwAAYrtAAGK+gABivsAAYr8AAGK/gABiz0AAYs/AAGLQQABi0MAAYtGAAGLRwABi0gAAYtJAAGLSgABi0wAAYtOAAGLTwABi1AAAYtSAAGLUwABi5IAAYuUAAGLlgABi5gAAYubAAGLnAABi50AAYueAAGLnwABi6EAAYujAAGLpAABi6UAAYunAAGLqAABi+cAAYvpAAGL6wABi+0AAYvwAAGL8QABi/IAAYvzAAGL9AABi/YAAYv4AAGL+QABi/oAAYv8AAGL/QABjDwAAYw+AAGMQAABjEIAAYxFAAGMRgABjEcAAYxIAAGMSQABjEsAAYxNAAGMTgABjE8AAYxRAAGMUgABjJEAAYyTAAGMlQABjJcAAYyaAAGMmwABjJwAAYydAAGMngABjKAAAYyiAAGMowABjKQAAYymAAGMpwABjMwAAYzwAAGNFwABjTsAAY0+AAGNQAABjUIAAY1EAAGNRgABjUgAAY1JAAGNTAABjVkAAY1oAAGNagABjWwAAY1uAAGNcAABjXIAAY10AAGNdgABjYUAAY2IAAGNiwABjY4AAY2RAAGNlAABjZcAAY2aAAGNnAABjdsAAY3dAAGN3wABjeEAAY3kAAGN5QABjeYAAY3nAAGN6AABjeoAAY3sAAGN7QABje4AAY3wAAGN8QABjjAAAY4yAAGONAABjjYAAY45AAGOOgABjjsAAY48AAGOPQABjj8AAY5BAAGOQgABjkMAAY5FAAGORgABjoUAAY6HAAGOiQABjosAAY6OAAGOjwABjpAAAY6RAAGOkgABjpQAAY6WAAGOlwABjpgAAY6aAAGOmwABjtoAAY7cAAGO3gABjuAAAY7jAAGO5AABjuUAAY7mAAGO5wABjukAAY7rAAGO7AABju0AAY7vAAGO8AABjy8AAY8xAAGPMwABjzUAAY84AAGPOQABjzoAAY87AAGPPAABjz4AAY9AAAGPQQABj0IAAY9EAAGPRQABj4QAAY+GAAGPiAABj4oAAY+NAAGPjgABj48AAY+QAAGPkQABj5MAAY+VAAGPlgABj5cAAY+ZAAGPmgABj9kAAY/bAAGP3QABj98AAY/iAAGP4wABj+QAAY/lAAGP5gABj+gAAY/qAAGP6wABj+wAAY/uAAGP7wABkDoAAZBdAAGQfQABkJ0AAZCfAAGQoQABkKMAAZClAAGQqAABkKkAAZCqAAGQrQABkK4AAZCwAAGQsQABkLQAAZC3AAGQuAABkLkAAZC8AAGQvQABkMIAAZDPAAGQ1AABkNYAAZDZAAGQ3gABkOEAAZDkAAGQ5gABkQsAAZEvAAGRVgABkXoAAZF9AAGRfwABkYEAAZGDAAGRhQABkYcAAZGIAAGRiwABkZgAAZGpAAGRqwABka0AAZGvAAGRsQABkbMAAZG1AAGRtwABkbkAAZHKAAGRzQABkdAAAZHTAAGR1gABkdkAAZHcAAGR3wABkeIAAZHkAAGSIwABkiUAAZInAAGSKQABkiwAAZItAAGSLgABki8AAZIwAAGSMgABkjQAAZI1AAGSNgABkjgAAZI5AAGSeAABknoAAZJ8AAGSfgABkoEAAZKCAAGSgwABkoQAAZKFAAGShwABkokAAZKKAAGSiwABko0AAZKOAAGSzQABks8AAZLSAAGS1AABktcAAZLYAAGS2QABktoAAZLbAAGS3QABkt8AAZLgAAGS4QABkuMAAZLkAAGS8QABkvIAAZLzAAGS9QABkzQAAZM2AAGTOAABkzoAAZM9AAGTPgABkz8AAZNAAAGTQQABk0MAAZNFAAGTRgABk0cAAZNJAAGTSgABk4kAAZOLAAGTjQABk48AAZOSAAGTkwABk5QAAZOVAAGTlgABk5gAAZOaAAGTmwABk5wAAZOeAAGTnwABk94AAZPgAAGT4gABk+QAAZPnAAGT6AABk+kAAZPqAAGT6wABk+0AAZPvAAGT8AABk/EAAZPzAAGT9AABlDMAAZQ1AAGUNwABlDkAAZQ8AAGUPQABlD4AAZQ/AAGUQAABlEIAAZREAAGURQABlEYAAZRIAAGUSQABlIgAAZSKAAGUjAABlI4AAZSRAAGUkgABlJMAAZSUAAGUlQABlJcAAZSZAAGUmgABlJsAAZSdAAGUngABlMMAAZTnAAGVDgABlTIAAZU1AAGVOAABlToAAZU8AAGVPgABlUAAAZVBAAGVRAABlVEAAZVeAAGVYQABlWQAAZVnAAGVagABlW0AAZVwAAGVfQABlYAAAZWDAAGVhgABlYkAAZWMAAGVjwABlZEAAZXQAAGV0gABldQAAZXWAAGV2QABldoAAZXbAAGV3AABld0AAZXfAAGV4gABleMAAZXkAAGV5gABlecAAZYmAAGWKAABlioAAZYsAAGWLwABljAAAZYxAAGWMgABljMAAZY1AAGWOAABljkAAZY6AAGWPAABlj0AAZZ8AAGWfgABloEAAZaDAAGWhgABlocAAZaIAAGWiQABlooAAZaMAAGWjwABlpAAAZaRAAGWkwABlpQAAZbTAAGW1QABltgAAZbaAAGW3QABlt4AAZbfAAGW4AABluEAAZbjAAGW5gABlucAAZboAAGW6gABlusAAZcqAAGXLAABly8AAZcxAAGXNAABlzUAAZc2AAGXNwABlzgAAZc6AAGXPQABlz4AAZc/AAGXQQABl0IAAZeBAAGXgwABl4UAAZeHAAGXigABl4sAAZeMAAGXjQABl44AAZeQAAGXkwABl5QAAZeVAAGXlwABl5gAAZfjAAGYBgABmCYAAZhGAAGYSAABmEoAAZhMAAGYTgABmFEAAZhSAAGYUwABmFYAAZhXAAGYWQABmFoAAZhcAAGYXwABmGAAAZhhAAGYZAABmGUAAZhuAAGYewABmIAAAZiCAAGYhAABmIkAAZiMAAGYjwABmJEAAZi2AAGY2gABmQEAAZklAAGZKAABmSoAAZksAAGZLgABmTAAAZkyAAGZMwABmTYAAZlDAAGZVAABmVYAAZlYAAGZWgABmVwAAZleAAGZYAABmWIAAZlkAAGZdQABmXgAAZl7AAGZfgABmYEAAZmEAAGZhwABmYoAAZmNAAGZjwABmc4AAZnQAAGZ0gABmdQAAZnXAAGZ2AABmdkAAZnaAAGZ2wABmd0AAZnfAAGZ4AABmeEAAZnjAAGZ5AABmiMAAZolAAGaJwABmikAAZosAAGaLQABmi4AAZovAAGaMAABmjIAAZo0AAGaNQABmjYAAZo4AAGaOQABmngAAZp6AAGafQABmn8AAZqCAAGagwABmoQAAZqFAAGahgABmogAAZqKAAGaiwABmowAAZqOAAGajwABmpwAAZqdAAGangABmqAAAZrfAAGa4QABmuMAAZrlAAGa6AABmukAAZrqAAGa6wABmuwAAZruAAGa8AABmvEAAZryAAGa9AABmvUAAZs0AAGbNgABmzgAAZs6AAGbPQABmz4AAZs/AAGbQAABm0EAAZtDAAGbRQABm0YAAZtHAAGbSQABm0oAAZuJAAGbiwABm40AAZuPAAGbkgABm5MAAZuUAAGblQABm5YAAZuYAAGbmgABm5sAAZucAAGbngABm58AAZveAAGb4AABm+IAAZvkAAGb5wABm+gAAZvpAAGb6gABm+sAAZvtAAGb7wABm/AAAZvxAAGb8wABm/QAAZwzAAGcNQABnDcAAZw5AAGcPAABnD0AAZw+AAGcPwABnEAAAZxCAAGcRAABnEUAAZxGAAGcSAABnEkAAZxuAAGckgABnLkAAZzdAAGc4AABnOIAAZzkAAGc5gABnOgAAZzqAAGc6wABnO4AAZz7AAGdCgABnQwAAZ0OAAGdEAABnRIAAZ0UAAGdFgABnRgAAZ0nAAGdKgABnS0AAZ0wAAGdMwABnTYAAZ05AAGdPAABnT4AAZ19AAGdfwABnYEAAZ2DAAGdhgABnYcAAZ2IAAGdiQABnYoAAZ2MAAGdjgABnY8AAZ2QAAGdkgABnZMAAZ3SAAGd1AABndYAAZ3YAAGd2wABndwAAZ3dAAGd3gABnd8AAZ3hAAGd4wABneQAAZ3lAAGd5wABnegAAZ4nAAGeKQABnisAAZ4tAAGeMAABnjEAAZ4yAAGeMwABnjQAAZ42AAGeOAABnjkAAZ46AAGePAABnj0AAZ58AAGefgABnoAAAZ6CAAGehQABnoYAAZ6HAAGeiAABnokAAZ6LAAGejQABno4AAZ6PAAGekQABnpIAAZ7RAAGe0wABntUAAZ7XAAGe2gABntsAAZ7cAAGe3QABnt4AAZ7gAAGe4gABnuMAAZ7kAAGe5gABnucAAZ8mAAGfKAABnyoAAZ8sAAGfLwABnzAAAZ8xAAGfMgABnzMAAZ81AAGfNwABnzgAAZ85AAGfOwABnzwAAZ97AAGffQABn38AAZ+BAAGfhAABn4UAAZ+GAAGfhwABn4gAAZ+KAAGfjAABn40AAZ+OAAGfkAABn5EAAZ/cAAGf/wABoB8AAaA/AAGgQQABoEMAAaBFAAGgRwABoEoAAaBLAAGgTAABoE8AAaBQAAGgUgABoFMAAaBWAAGgWQABoFoAAaBbAAGgXgABoF8AAaBkAAGgcQABoHYAAaB4AAGgewABoIAAAaCDAAGghgABoIgAAaCtAAGg0QABoPgAAaEcAAGhHwABoSEAAaEjAAGhJQABoScAAaEpAAGhKgABoS0AAaE6AAGhSwABoU0AAaFPAAGhUQABoVMAAaFVAAGhVwABoVkAAaFbAAGhbAABoW8AAaFyAAGhdQABoXgAAaF7AAGhfgABoYEAAaGEAAGhhgABocUAAaHHAAGhyQABocsAAaHOAAGhzwABodAAAaHRAAGh0gABodQAAaHWAAGh1wABodgAAaHaAAGh2wABohoAAaIcAAGiHgABoiAAAaIjAAGiJAABoiUAAaImAAGiJwABoikAAaIrAAGiLAABoi0AAaIvAAGiMAABom8AAaJxAAGidAABonYAAaJ5AAGiegABonsAAaJ8AAGifQABon8AAaKBAAGiggABooMAAaKFAAGihgABopMAAaKUAAGilQABopcAAaLWAAGi2AABotoAAaLcAAGi3wABouAAAaLhAAGi4gABouMAAaLlAAGi5wABougAAaLpAAGi6wABouwAAaMrAAGjLQABoy8AAaMxAAGjNAABozUAAaM2AAGjNwABozgAAaM6AAGjPAABoz0AAaM+AAGjQAABo0EAAaOAAAGjggABo4QAAaOGAAGjiQABo4oAAaOLAAGjjAABo40AAaOPAAGjkQABo5IAAaOTAAGjlQABo5YAAaPVAAGj1wABo9kAAaPbAAGj3gABo98AAaPgAAGj4QABo+IAAaPkAAGj5gABo+cAAaPoAAGj6gABo+sAAaQqAAGkLAABpC4AAaQwAAGkMwABpDQAAaQ1AAGkNgABpDcAAaQ5AAGkOwABpDwAAaQ9AAGkPwABpEAAAaRlAAGkiQABpLAAAaTUAAGk1wABpNoAAaTcAAGk3gABpOAAAaTiAAGk4wABpOYAAaTzAAGlAgABpQUAAaUIAAGlCwABpQ4AAaURAAGlFAABpRcAAaUmAAGlKQABpSwAAaUvAAGlMgABpTUAAaU4AAGlOwABpT0AAaV8AAGlfgABpYEAAaWDAAGlhgABpYcAAaWIAAGliQABpYoAAaWMAAGljwABpZAAAaWRAAGlkwABpZQAAaXTAAGl1QABpdgAAaXaAAGl3QABpd4AAaXfAAGl4AABpeEAAaXjAAGl5gABpecAAaXoAAGl6gABpesAAaYqAAGmLAABpi8AAaYxAAGmNAABpjUAAaY2AAGmNwABpjgAAaY6AAGmPQABpj4AAaY/AAGmQQABpkIAAaaBAAGmgwABpoYAAaaIAAGmiwABpowAAaaNAAGmjgABpo8AAaaRAAGmlAABppUAAaaWAAGmmAABppkAAabYAAGm2gABptwAAabeAAGm4QABpuIAAabjAAGm5AABpuUAAabnAAGm6gABpusAAabsAAGm7gABpu8AAacuAAGnMAABpzIAAac0AAGnNwABpzgAAac5AAGnOgABpzsAAac9AAGnQAABp0EAAadCAAGnRAABp0UAAaeEAAGnhgABp4kAAaeLAAGnjgABp48AAaeQAAGnkQABp5IAAaeUAAGnlwABp5gAAaeZAAGnmwABp5wAAaelAAGnpgABp6gAAafnAAGn6QABp+sAAaftAAGn8AABp/EAAafyAAGn8wABp/QAAaf2AAGn+QABp/oAAaf7AAGn/QABp/4AAag9AAGoPwABqEEAAahDAAGoRgABqEcAAahIAAGoSQABqEoAAahMAAGoTwABqFAAAahRAAGoUwABqFQAAaiTAAGolQABqJgAAaiaAAGonQABqJ4AAaifAAGooAABqKEAAaijAAGopgABqKcAAaioAAGoqgABqKsAAai0AAGotQABqLcAAaj2AAGo+AABqPoAAaj8AAGo/wABqQAAAakBAAGpAgABqQMAAakFAAGpCAABqQkAAakKAAGpDAABqQ0AAalMAAGpTgABqVAAAalSAAGpVQABqVYAAalXAAGpWAABqVkAAalbAAGpXgABqV8AAalgAAGpYgABqWMAAamiAAGppAABqacAAampAAGprAABqa0AAamuAAGprwABqbAAAamyAAGptQABqbYAAam3AAGpuQABqboAAaoFAAGqKAABqkgAAapoAAGqagABqmwAAapuAAGqcAABqnIAAapzAAGqdAABqncAAap4AAGqegABqnsAAap9AAGqgAABqoEAAaqCAAGqhQABqoYAAaqLAAGqmAABqp0AAaqfAAGqoQABqqYAAaqpAAGqrAABqq4AAarTAAGq9wABqx4AAatCAAGrRQABq0cAAatJAAGrSwABq00AAatPAAGrUAABq1MAAatgAAGrcQABq3MAAat1AAGrdwABq3kAAat7AAGrfQABq38AAauBAAGrkgABq5UAAauYAAGrmwABq54AAauhAAGrpAABq6cAAauqAAGrrAABq+sAAavtAAGr7wABq/EAAav0AAGr9QABq/YAAav3AAGr+AABq/oAAav8AAGr/QABq/4AAawAAAGsAQABrEAAAaxCAAGsRAABrEYAAaxJAAGsSgABrEsAAaxMAAGsTQABrE8AAaxRAAGsUgABrFMAAaxVAAGsVgABrJUAAayXAAGsmgABrJwAAayfAAGsoAABrKEAAayiAAGsowABrKUAAaynAAGsqAABrKkAAayrAAGsrAABrLkAAay6AAGsuwABrL0AAaz8AAGs/gABrQAAAa0CAAGtBQABrQYAAa0HAAGtCAABrQkAAa0LAAGtDQABrQ4AAa0PAAGtEQABrRIAAa1RAAGtUwABrVUAAa1XAAGtWgABrVsAAa1cAAGtXQABrV4AAa1gAAGtYgABrWMAAa1kAAGtZgABrWcAAa2mAAGtqAABraoAAa2sAAGtrwABrbAAAa2xAAGtsgABrbMAAa21AAGttwABrbgAAa25AAGtuwABrbwAAa37AAGt/QABrf8AAa4BAAGuBAABrgUAAa4GAAGuBwABrggAAa4KAAGuDAABrg0AAa4OAAGuEAABrhEAAa5QAAGuUgABrlQAAa5WAAGuWQABrloAAa5bAAGuXAABrl0AAa5fAAGuYQABrmIAAa5jAAGuZQABrmYAAa6LAAGurwABrtYAAa76AAGu/QABrv8AAa8BAAGvAwABrwUAAa8HAAGvCAABrwsAAa8YAAGvJwABrykAAa8rAAGvLQABry8AAa8xAAGvMwABrzUAAa9EAAGvRwABr0oAAa9NAAGvUAABr1MAAa9WAAGvWQABr1sAAa+aAAGvnAABr54AAa+gAAGvowABr6QAAa+lAAGvpgABr6cAAa+pAAGvqwABr6wAAa+tAAGvrwABr7AAAa/vAAGv8QABr/MAAa/1AAGv+AABr/kAAa/6AAGv+wABr/wAAa/+AAGwAAABsAEAAbACAAGwBAABsAUAAbBEAAGwRgABsEgAAbBKAAGwTQABsE4AAbBPAAGwUAABsFEAAbBTAAGwVQABsFYAAbBXAAGwWQABsFoAAbCZAAGwmwABsJ4AAbCgAAGwowABsKQAAbClAAGwpgABsKcAAbCpAAGwqwABsKwAAbCtAAGwrwABsLAAAbDvAAGw8QABsPMAAbD1AAGw+AABsPkAAbD6AAGw+wABsPwAAbD+AAGxAAABsQEAAbECAAGxBAABsQUAAbFEAAGxRgABsUgAAbFKAAGxTQABsU4AAbFPAAGxUAABsVEAAbFTAAGxVQABsVYAAbFXAAGxWQABsVoAAbGZAAGxmwABsZ0AAbGfAAGxogABsaMAAbGkAAGxpQABsaYAAbGoAAGxqgABsasAAbGsAAGxrgABsa8AAbH6AAGyHQABsj0AAbJdAAGyXwABsmEAAbJjAAGyZQABsmcAAbJoAAGyaQABsmwAAbJtAAGybwABsnAAAbJzAAGydgABsncAAbJ4AAGyewABsnwAAbKBAAGyjgABspMAAbKVAAGymAABsp0AAbKgAAGyowABsqUAAbLKAAGy7gABsxUAAbM5AAGzPAABsz4AAbNAAAGzQgABs0QAAbNGAAGzRwABs0oAAbNXAAGzaAABs2oAAbNsAAGzbgABs3AAAbNyAAGzdAABs3YAAbN4AAGziQABs4wAAbOPAAGzkgABs5UAAbOYAAGzmwABs54AAbOhAAGzowABs+IAAbPkAAGz5gABs+gAAbPrAAGz7AABs+0AAbPuAAGz7wABs/EAAbPzAAGz9AABs/UAAbP3AAGz+AABtDcAAbQ5AAG0OwABtD0AAbRAAAG0QQABtEIAAbRDAAG0RAABtEYAAbRIAAG0SQABtEoAAbRMAAG0TQABtIwAAbSOAAG0kQABtJMAAbSWAAG0lwABtJgAAbSZAAG0mgABtJwAAbSeAAG0nwABtKAAAbSiAAG0owABtLAAAbSxAAG0sgABtLQAAbTzAAG09QABtPcAAbT5AAG0/AABtP0AAbT+AAG0/wABtQAAAbUCAAG1BAABtQUAAbUGAAG1CAABtQkAAbVIAAG1SgABtUwAAbVOAAG1UQABtVIAAbVTAAG1VAABtVUAAbVXAAG1WQABtVoAAbVbAAG1XQABtV4AAbWdAAG1nwABtaEAAbWjAAG1pgABtacAAbWoAAG1qQABtaoAAbWsAAG1rgABta8AAbWwAAG1sgABtbMAAbXyAAG19AABtfYAAbX4AAG1+wABtfwAAbX9AAG1/gABtf8AAbYBAAG2AwABtgQAAbYFAAG2BwABtggAAbZHAAG2SQABtksAAbZNAAG2UAABtlEAAbZSAAG2UwABtlQAAbZWAAG2WAABtlkAAbZaAAG2XAABtl0AAbaCAAG2pgABts0AAbbxAAG29AABtvcAAbb5AAG2+wABtv0AAbb/AAG3AAABtwMAAbcQAAG3HwABtyIAAbclAAG3KAABtysAAbcuAAG3MQABtzQAAbdDAAG3RgABt0kAAbdMAAG3TwABt1IAAbdVAAG3WAABt1oAAbeZAAG3mwABt54AAbegAAG3owABt6QAAbelAAG3pgABt6cAAbepAAG3rAABt60AAbeuAAG3sAABt7EAAbfwAAG38gABt/UAAbf3AAG3+gABt/sAAbf8AAG3/QABt/4AAbgAAAG4AwABuAQAAbgFAAG4BwABuAgAAbhHAAG4SQABuEwAAbhOAAG4UQABuFIAAbhTAAG4VAABuFUAAbhXAAG4WgABuFsAAbhcAAG4XgABuF8AAbieAAG4oAABuKMAAbilAAG4qAABuKkAAbiqAAG4qwABuKwAAbiuAAG4sQABuLIAAbizAAG4tQABuLYAAbj5AAG5HQABuUEAAblkAAG5iwABuasAAbnSAAG5+QABuhkAAbo9AAG6YQABumMAAbpmAAG6aAABumoAAbpsAAG6bwABunEAAbpzAAG6dQABuncAAbp5AAG6ewABun4AAbqBAAG6ggABuocAAbqUAAG6lwABupkAAbqcAAG6nwABuqEAAbrGAAG66gABuxEAAbs1AAG7OAABuzoAAbs8AAG7PgABu0AAAbtCAAG7QwABu0YAAbtTAAG7ZgABu2gAAbtqAAG7bAABu24AAbtwAAG7cgABu3QAAbt2AAG7eAABu4sAAbuOAAG7kQABu5QAAbuXAAG7mgABu50AAbugAAG7owABu6YAAbuoAAG75wABu+kAAbvsAAG77gABu/EAAbvyAAG78wABu/QAAbv1AAG79wABu/kAAbv6AAG7+wABu/0AAbv+AAG8BwABvAgAAbwKAAG8SQABvEsAAbxNAAG8TwABvFIAAbxTAAG8VAABvFUAAbxWAAG8WAABvFoAAbxbAAG8XAABvF4AAbxfAAG8ngABvKAAAbyjAAG8pQABvKgAAbypAAG8qgABvKsAAbysAAG8rgABvLAAAbyxAAG8sgABvLQAAby1AAG8vgABvL8AAbzBAAG9AAABvQIAAb0EAAG9BgABvQkAAb0KAAG9CwABvQwAAb0NAAG9DwABvREAAb0SAAG9EwABvRUAAb0WAAG9VQABvVcAAb1aAAG9XAABvV8AAb1gAAG9YQABvWIAAb1jAAG9ZQABvWcAAb1oAAG9aQABvWsAAb1sAAG9dQABvXYAAb14AAG9twABvbkAAb27AAG9vQABvcAAAb3BAAG9wgABvcMAAb3EAAG9xgABvcgAAb3JAAG9ygABvcwAAb3NAAG+DAABvg4AAb4RAAG+EwABvhYAAb4XAAG+GAABvhkAAb4aAAG+HAABvh4AAb4fAAG+IAABviIAAb4jAAG+MAABvjEAAb4yAAG+NAABvnMAAb51AAG+dwABvnkAAb58AAG+fQABvn4AAb5/AAG+gAABvoIAAb6EAAG+hQABvoYAAb6IAAG+iQABvsgAAb7KAAG+zQABvs8AAb7SAAG+0wABvtQAAb7VAAG+1gABvtgAAb7aAAG+2wABvtwAAb7eAAG+3wABvu0AAb76AAG/AwABvwYAAb8JAAG/DAABvw8AAb8YAAG/GwABvx4AAb8hAAG/JAABvyYAAb8rAAG/dgABv5kAAb+5AAG/2QABv9sAAb/dAAG/3wABv+EAAb/kAAG/5QABv+YAAb/pAAG/6gABv+wAAb/tAAG/8AABv/MAAb/0AAG/9QABv/gAAb/5AAG//gABwAsAAcAQAAHAEgABwBUAAcAaAAHAHQABwCAAAcAiAAHARwABwGsAAcCSAAHAtgABwLkAAcC7AAHAvQABwL8AAcDBAAHAwwABwMQAAcDHAAHA1AABwOUAAcDnAAHA6QABwOsAAcDtAAHA7wABwPEAAcDzAAHA9QABwQYAAcEJAAHBDAABwQ8AAcESAAHBFQABwRgAAcEbAAHBHgABwSAAAcFfAAHBYQABwWMAAcFlAAHBaAABwWkAAcFqAAHBawABwWwAAcFuAAHBcAABwXEAAcFyAAHBdAABwXUAAcG0AAHBtgABwbgAAcG6AAHBvQABwb4AAcG/AAHBwAABwcEAAcHDAAHBxQABwcYAAcHHAAHByQABwcoAAcIJAAHCCwABwg4AAcIQAAHCEwABwhQAAcIVAAHCFgABwhcAAcIZAAHCGwABwhwAAcIdAAHCHwABwiAAAcItAAHCLgABwi8AAcIxAAHCcAABwnIAAcJ0AAHCdgABwnkAAcJ6AAHCewABwnwAAcJ9AAHCfwABwoEAAcKCAAHCgwABwoUAAcKGAAHCxQABwscAAcLJAAHCywABws4AAcLPAAHC0AABwtEAAcLSAAHC1AABwtYAAcLXAAHC2AABwtoAAcLbAAHDGgABwxwAAcMeAAHDIAABwyMAAcMkAAHDJQABwyYAAcMnAAHDKQABwysAAcMsAAHDLQABwy8AAcMwAAHDbwABw3EAAcNzAAHDdQABw3gAAcN5AAHDegABw3sAAcN8AAHDfgABw4AAAcOBAAHDggABw4QAAcOFAAHDxAABw8YAAcPIAAHDygABw80AAcPOAAHDzwABw9AAAcPRAAHD0wABw9UAAcPWAAHD1wABw9kAAcPaAAHD/wABxCMAAcRKAAHEbgABxHEAAcR0AAHEdgABxHgAAcR6AAHEfAABxH0AAcSAAAHEjQABxJwAAcSfAAHEogABxKUAAcSoAAHEqwABxK4AAcSxAAHEwAABxMMAAcTGAAHEyQABxMwAAcTPAAHE0gABxNUAAcTXAAHFFgABxRgAAcUbAAHFHQABxSAAAcUhAAHFIgABxSMAAcUkAAHFJgABxSkAAcUqAAHFKwABxS0AAcUuAAHFbQABxW8AAcVyAAHFdAABxXcAAcV4AAHFeQABxXoAAcV7AAHFfQABxYAAAcWBAAHFggABxYQAAcWFAAHFxAABxcYAAcXJAAHFywABxc4AAcXPAAHF0AABxdEAAcXSAAHF1AABxdcAAcXYAAHF2QABxdsAAcXcAAHGGwABxh0AAcYfAAHGIQABxiQAAcYlAAHGJgABxicAAcYoAAHGKgABxi0AAcYuAAHGLwABxjEAAcYyAAHGcQABxnMAAcZ1AAHGdwABxnoAAcZ7AAHGfAABxn0AAcZ+AAHGgAABxoMAAcaEAAHGhQABxocAAcaIAAHGxwABxskAAcbLAAHGzQABxtAAAcbRAAHG0gABxtMAAcbUAAHG1gABxtkAAcbaAAHG2wABxt0AAcbeAAHHHQABxx8AAcciAAHHJAABxycAAccoAAHHKQABxyoAAccrAAHHLQABxzAAAccxAAHHMgABxzQAAcc1AAHHgAABx6MAAcfDAAHH4wABx+UAAcfnAAHH6QABx+sAAcfuAAHH7wABx/AAAcfzAAHH9AABx/YAAcf3AAHH+QABx/wAAcf9AAHH/gAByAEAAcgCAAHIBwAByBQAAcgZAAHIGwAByB0AAcgiAAHIJQAByCgAAcgqAAHITwAByHMAAciaAAHIvgAByMEAAcjDAAHIxQAByMcAAcjJAAHIywAByMwAAcjPAAHI3AAByO0AAcjvAAHI8QAByPMAAcj1AAHI9wAByPkAAcj7AAHI/QAByQ4AAckRAAHJFAAByRcAAckaAAHJHQABySAAAckjAAHJJgABySgAAclnAAHJaQAByWsAAcltAAHJcAAByXEAAclyAAHJcwAByXQAAcl2AAHJeAAByXkAAcl6AAHJfAAByX0AAcm8AAHJvgABycAAAcnCAAHJxQABycYAAcnHAAHJyAAByckAAcnLAAHJzQAByc4AAcnPAAHJ0QABydIAAcoRAAHKEwAByhYAAcoYAAHKGwAByhwAAcodAAHKHgAByh8AAcohAAHKIwAByiQAAcolAAHKJwAByigAAco1AAHKNgAByjcAAco5AAHKeAABynoAAcp8AAHKfgAByoEAAcqCAAHKgwAByoQAAcqFAAHKhwAByokAAcqKAAHKiwAByo0AAcqOAAHKzQABys8AAcrRAAHK0wABytYAAcrXAAHK2AABytkAAcraAAHK3AAByt4AAcrfAAHK4AAByuIAAcrjAAHLIgAByyQAAcsmAAHLKAAByysAAcssAAHLLQAByy4AAcsvAAHLMQAByzMAAcs0AAHLNQAByzcAAcs4AAHLdwABy3kAAct7AAHLfQABy4AAAcuBAAHLggABy4MAAcuEAAHLhgABy4gAAcuJAAHLigABy4wAAcuNAAHLzAABy84AAcvQAAHL0gABy9UAAcvWAAHL1wABy9gAAcvZAAHL2wABy90AAcveAAHL3wABy+EAAcviAAHMBwABzCsAAcxSAAHMdgABzHkAAcx7AAHMfQABzH8AAcyBAAHMgwABzIQAAcyHAAHMlAABzKMAAcylAAHMpwABzKkAAcyrAAHMrQABzK8AAcyxAAHMwAABzMMAAczGAAHMyQABzMwAAczPAAHM0gABzNUAAczXAAHNFgABzRgAAc0aAAHNHAABzR8AAc0gAAHNIQABzSIAAc0jAAHNJQABzScAAc0oAAHNKQABzSsAAc0sAAHNawABzW0AAc1vAAHNcQABzXQAAc11AAHNdgABzXcAAc14AAHNegABzXwAAc19AAHNfgABzYAAAc2BAAHNwAABzcIAAc3EAAHNxgABzckAAc3KAAHNywABzcwAAc3NAAHNzwABzdEAAc3SAAHN0wABzdUAAc3WAAHOFQABzhcAAc4aAAHOHAABzh8AAc4gAAHOIQABziIAAc4jAAHOJQABzicAAc4oAAHOKQABzisAAc4sAAHOawABzm0AAc5vAAHOcQABznQAAc51AAHOdgABzncAAc54AAHOegABznwAAc59AAHOfgABzoAAAc6BAAHOwAABzsIAAc7FAAHOxwABzsoAAc7LAAHOzAABzs0AAc7OAAHO0AABztIAAc7TAAHO1AABztYAAc7XAAHO8wABzzIAAc80AAHPNgABzzgAAc87AAHPPAABzz0AAc8+AAHPPwABz0EAAc9DAAHPRAABz0UAAc9HAAHPSAABz5MAAc+2AAHP1gABz/YAAc/4AAHP+gABz/wAAc/+AAHQAQAB0AIAAdADAAHQBgAB0AcAAdAJAAHQCgAB0AwAAdAPAAHQEAAB0BEAAdAUAAHQFQAB0BoAAdAnAAHQLAAB0C4AAdAwAAHQNQAB0DgAAdA7AAHQPQAB0GIAAdCGAAHQrQAB0NEAAdDUAAHQ1gAB0NgAAdDaAAHQ3AAB0N4AAdDfAAHQ4gAB0O8AAdEAAAHRAgAB0QQAAdEGAAHRCAAB0QoAAdEMAAHRDgAB0RAAAdEhAAHRJAAB0ScAAdEqAAHRLQAB0TAAAdEzAAHRNgAB0TkAAdE7AAHRegAB0XwAAdF+AAHRgAAB0YMAAdGEAAHRhQAB0YYAAdGHAAHRiQAB0YsAAdGMAAHRjQAB0Y8AAdGQAAHRzwAB0dEAAdHTAAHR1QAB0dgAAdHZAAHR2gAB0dsAAdHcAAHR3gAB0eAAAdHhAAHR4gAB0eQAAdHlAAHSJAAB0iYAAdIpAAHSKwAB0i4AAdIvAAHSMAAB0jEAAdIyAAHSNAAB0jYAAdI3AAHSOAAB0joAAdI7AAHSSAAB0kkAAdJKAAHSTAAB0osAAdKNAAHSjwAB0pEAAdKUAAHSlQAB0pYAAdKXAAHSmAAB0poAAdKcAAHSnQAB0p4AAdKgAAHSoQAB0uAAAdLiAAHS5AAB0uYAAdLpAAHS6gAB0usAAdLsAAHS7QAB0u8AAdLxAAHS8gAB0vMAAdL1AAHS9gAB0zUAAdM3AAHTOQAB0zsAAdM+AAHTPwAB00AAAdNBAAHTQgAB00QAAdNGAAHTRwAB00gAAdNKAAHTSwAB04oAAdOMAAHTjgAB05AAAdOTAAHTlAAB05UAAdOWAAHTlwAB05kAAdObAAHTnAAB050AAdOfAAHToAAB098AAdPhAAHT4wAB0+UAAdPoAAHT6QAB0+oAAdPrAAHT7AAB0+4AAdPwAAHT8QAB0/IAAdP0AAHT9QAB1BoAAdQ+AAHUZQAB1IkAAdSMAAHUjgAB1JAAAdSSAAHUlAAB1JYAAdSXAAHUmgAB1KcAAdS2AAHUuAAB1LoAAdS8AAHUvgAB1MAAAdTCAAHUxAAB1NMAAdTWAAHU2QAB1NwAAdTfAAHU4gAB1OUAAdToAAHU6gAB1SkAAdUrAAHVLQAB1S8AAdUyAAHVMwAB1TQAAdU1AAHVNgAB1TgAAdU6AAHVOwAB1TwAAdU+AAHVPwAB1X4AAdWAAAHVggAB1YQAAdWHAAHViAAB1YkAAdWKAAHViwAB1Y0AAdWPAAHVkAAB1ZEAAdWTAAHVlAAB1dMAAdXVAAHV1wAB1dkAAdXcAAHV3QAB1d4AAdXfAAHV4AAB1eIAAdXkAAHV5QAB1eYAAdXoAAHV6QAB1igAAdYqAAHWLAAB1i4AAdYxAAHWMgAB1jMAAdY0AAHWNQAB1jcAAdY5AAHWOgAB1jsAAdY9AAHWPgAB1n0AAdZ/AAHWgQAB1oMAAdaGAAHWhwAB1ogAAdaJAAHWigAB1owAAdaOAAHWjwAB1pAAAdaSAAHWkwAB1tIAAdbUAAHW1gAB1tgAAdbbAAHW3AAB1t0AAdbeAAHW3wAB1uEAAdbjAAHW5AAB1uUAAdbnAAHW6AAB1ycAAdcpAAHXKwAB1y0AAdcwAAHXMQAB1zIAAdczAAHXNAAB1zYAAdc4AAHXOQAB1zoAAdc8AAHXPQAB14gAAderAAHXywAB1+sAAdftAAHX7wAB1/EAAdfzAAHX9gAB1/cAAdf4AAHX+wAB1/wAAdf+AAHX/wAB2AEAAdgEAAHYBQAB2AYAAdgJAAHYCgAB2BMAAdggAAHYJQAB2Cc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AAf8hAAH/IgAB/yQAAf8nAAH/KAAB/ykAAf8rAAH/LAAB/28AAf+TAAH/twAB/9oAAgABAAIAIQACAEgAAgBvAAIAjwACALMAAgDXAAIA2QACANwAAgDeAAIA4AACAOIAAgDlAAIA5wACAOkAAgDrAAIA7QACAO8AAgDxAAIA9AACAPcAAgD4AAIA/QACAQoAAgENAAIBDwACARIAAgEVAAIBFwACATwAAgFgAAIBhwACAasAAgGuAAIBsAACAbIAAgG0AAIBtgACAbgAAgG5AAIBvAACAckAAgHcAAIB3gACAeAAAgHiAAIB5AACAeYAAgHoAAIB6gACAewAAgHuAAICAQACAgQAAgIHAAICCgACAg0AAgIQAAICEwACAhYAAgIZAAICHAACAh4AAgJdAAICXwACAmIAAgJkAAICZwACAmgAAgJpAAICagACAmsAAgJtAAICbwACAnAAAgJxAAICcwACAnQAAgJ9AAICfgACAoAAAgK/AAICwQACAsMAAgLFAAICyAACAskAAgLKAAICywACAswAAgLOAAIC0AACAtEAAgLSAAIC1AACAtUAAgMUAAIDFgACAxkAAgMbAAIDHgACAx8AAgMgAAIDIQACAyIAAgMkAAIDJgACAycAAgMoAAIDKgACAysAAgM0AAIDNQACAzcAAgN2AAIDeAACA3oAAgN8AAIDfwACA4AAAgOBAAIDggACA4MAAgOFAAIDhwACA4gAAgOJAAIDiwACA4wAAgPLAAIDzQACA9AAAgPSAAID1QACA9YAAgPXAAID2AACA9kAAgPbAAID3QACA94AAgPfAAID4QACA+IAAgPrAAID7AACA+4AAgQtAAIELwACBDEAAgQzAAIENgACBDcAAgQ4AAIEOQACBDoAAgQ8AAIEPgACBD8AAgRAAAIEQgACBEMAAgSCAAIEhAACBIcAAgSJAAIEjAACBI0AAgSOAAIEjwACBJAAAgSSAAIElAACBJUAAgSWAAIEmAACBJkAAgSmAAIEpwACBKgAAgSqAAIE6QACBOsAAgTtAAIE7wACBPIAAgTzAAIE9AACBPUAAgT2AAIE+AACBPoAAgT7AAIE/AACBP4AAgT/AAIFPgACBUAAAgVCAAIFRAACBUcAAgVIAAIFSQACBUoAAgVLAAIFTQACBU8AAgVQAAIFUQACBVMAAgVUAAIFYQACBYYAAgWIAAIFiwACBY4AAgWQAAIFkwACBZYAAgWZAAIFnAACBZ8AAgWiAAIFpQACBagAAgWrAAIFrgACBbAAAgWzAAIFtgACBdsAAgXeAAIF4QACBeQAAgXnAAIF6gACBe0AAgXwAAIF8wACBfYAAgX5AAIF/AACBf8AAgYCAAIGBQACBggAAgYLAAIGDgACBhAAAgYeAAIGKAACBi4AAgY2AAIGQQACBkkAAgZSAAIGXAACBnAAAgaFAAIGjwACBtoAAgb9AAIHHQACBz0AAgc/AAIHQQACB0MAAgdFAAIHSAACB0kAAgdKAAIHTQACB04AAgdQAAIHUQACB1MAAgdVAAIHVgACB1cAAgdaAAIHWwACB2AAAgdtAAIHcgACB3QAAgd2AAIHewACB34AAgeBAAIHgwACB6gAAgfMAAIH8wACCBcAAggaAAIIHAACCB4AAgggAAIIIgACCCQAAgglAAIIKAACCDUAAghGAAIISAACCEoAAghMAAIITgACCFAAAghSAAIIVAACCFYAAghnAAIIagACCG0AAghwAAIIcwACCHYAAgh5AAIIfAACCH8AAgiBAAIIwAACCMIAAgjEAAIIxgACCMkAAgjKAAIIywACCMwAAgjNAAIIzwACCNEAAgjSAAII0wACCNUAAgjWAAIJFQACCRcAAgkZAAIJGwACCR4AAgkfAAIJIAACCSEAAgkiAAIJJAACCSYAAgknAAIJKAACCSoAAgkrAAIJagACCWwAAglvAAIJcQACCXQAAgl1AAIJdgACCXcAAgl4AAIJegACCXwAAgl9AAIJfgACCYAAAgmBAAIJjgACCY8AAgmQAAIJkgACCdEAAgnTAAIJ1QACCdcAAgnaAAIJ2wACCdwAAgndAAIJ3gACCeAAAgniAAIJ4wACCeQAAgnmAAIJ5wACCiYAAgooAAIKKgACCiwAAgovAAIKMAACCjEAAgoyAAIKMwACCjUAAgo3AAIKOAACCjkAAgo7AAIKPAACCnsAAgp9AAIKfwACCoEAAgqEAAIKhQACCoYAAgqHAAIKiAACCooAAgqMAAIKjQACCo4AAgqQAAIKkQACCtAAAgrSAAIK1AACCtYAAgrZAAIK2gACCtsAAgrcAAIK3QACCt8AAgrhAAIK4gACCuMAAgrlAAIK5gACCyUAAgsnAAILKQACCysAAgsuAAILLwACCzAAAgsxAAILMgACCzQAAgs2AAILNwACCzgAAgs6AAILOwACC2AAAguEAAILqwACC88AAgvSAAIL1AACC9YAAgvYAAIL2gACC9wAAgvdAAIL4AACC+0AAgv8AAIL/gACDAAAAgwCAAIMBAACDAYAAgwIAAIMCgACDBkAAgwcAAIMHwACDCIAAgwlAAIMKAACDCsAAgwuAAIMMAACDG8AAgxxAAIMcwACDHUAAgx4AAIMeQACDHoAAgx7AAIMfAACDH4AAgyAAAIMgQACDIIAAgyEAAIMhQACDMQAAgzGAAIMyAACDMoAAgzNAAIMzgACDM8AAgzQAAIM0QACDNMAAgzVAAIM1gACDNcAAgzZAAIM2gACDRkAAg0bAAINHQACDR8AAg0iAAINIwACDSQAAg0lAAINJgACDSgAAg0qAAINKwACDSwAAg0uAAINLwACDW4AAg1wAAINcgACDXQAAg13AAINeAACDXkAAg16AAINewACDX0AAg1/AAINgAACDYEAAg2DAAINhAACDcMAAg3FAAINxwACDckAAg3MAAINzQACDc4AAg3PAAIN0AACDdIAAg3UAAIN1QACDdYAAg3YAAIN2QACDhgAAg4aAAIOHAACDh4AAg4hAAIOIgACDiMAAg4kAAIOJQACDicAAg4pAAIOKgACDisAAg4tAAIOLgACDm0AAg5vAAIOcQACDnMAAg52AAIOdwACDngAAg55AAIOegACDnwAAg5+AAIOfwACDoAAAg6CAAIOgwACDs4AAg7xAAIPEQACDzEAAg8zAAIPNQACDzcAAg85AAIPPAACDz0AAg8+AAIPQQACD0IAAg9EAAIPRQACD0gAAg9LAAIPTAACD00AAg9QAAIPUQACD1YAAg9jAAIPaAACD2oAAg9tAAIPcgACD3UAAg94AAIPegACD58AAg/DAAIP6gACEA4AAhARAAIQEwACEBUAAhAXAAIQGQACEBsAAhAcAAIQHwACECwAAhA9AAIQPwACEEEAAhBDAAIQRQACEEcAAhBJAAIQSwACEE0AAhBeAAIQYQACEGQAAhBnAAIQagACEG0AAhBwAAIQcwACEHYAAhB4AAIQtwACELkAAhC7AAIQvQACEMAAAhDBAAIQwgACEMMAAhDEAAIQxgACEMgAAhDJAAIQygACEMwAAhDNAAIRDAACEQ4AAhEQAAIREgACERUAAhEWAAIRFwACERgAAhEZAAIRGwACER0AAhEeAAIRHwACESEAAhEiAAIRYQACEWMAAhFmAAIRaAACEWsAAhFsAAIRbQACEW4AAhFvAAIRcQACEXMAAhF0AAIRdQACEXcAAhF4AAIRhQACEYYAAhGHAAIRiQACEcgAAhHKAAIRzAACEc4AAhHRAAIR0gACEdMAAhHUAAIR1QACEdcAAhHZAAIR2gACEdsAAhHdAAIR3gACEh0AAhIfAAISIQACEiMAAhImAAISJwACEigAAhIpAAISKgACEiwAAhIuAAISLwACEjAAAhIyAAISMwACEnIAAhJ0AAISdgACEngAAhJ7AAISfAACEn0AAhJ+AAISfwACEoEAAhKDAAIShAACEoUAAhKHAAISiAACEscAAhLJAAISywACEs0AAhLQAAIS0QACEtIAAhLTAAIS1AACEtYAAhLYAAIS2QACEtoAAhLcAAIS3QACExwAAhMeAAITIAACEyIAAhMlAAITJgACEycAAhMoAAITKQACEysAAhMtAAITLgACEy8AAhMxAAITMgACE1cAAhN7AAITogACE8YAAhPJAAITzAACE84AAhPQAAIT0gACE9QAAhPVAAIT2AACE+UAAhP0AAIT9wACE/oAAhP9AAIUAAACFAMAAhQGAAIUCQACFBgAAhQbAAIUHgACFCEAAhQkAAIUJwACFCoAAhQtAAIULwACFG4AAhRwAAIUcwACFHUAAhR4AAIUeQACFHoAAhR7AAIUfAACFH4AAhSBAAIUggACFIMAAhSFAAIUhgACFMUAAhTHAAIUygACFMwAAhTPAAIU0AACFNEAAhTSAAIU0wACFNUAAhTYAAIU2QACFNoAAhTcAAIU3QACFRwAAhUeAAIVIQACFSMAAhUmAAIVJwACFSgAAhUpAAIVKgACFSwAAhUvAAIVMAACFTEAAhUzAAIVNAACFXMAAhV1AAIVdwACFXkAAhV8AAIVfQACFX4AAhV/AAIVgAACFYIAAhWFAAIVhgACFYcAAhWJAAIVigACFckAAhXLAAIVzQACFc8AAhXSAAIV0wACFdQAAhXVAAIV1gACFdgAAhXbAAIV3AACFd0AAhXfAAIV4AACFh8AAhYhAAIWIwACFiUAAhYoAAIWKQACFioAAhYrAAIWLAACFi4AAhYxAAIWMgACFjMAAhY1AAIWNgACFnUAAhZ3AAIWegACFnwAAhZ/AAIWgAACFoEAAhaCAAIWgwACFoUAAhaIAAIWiQACFooAAhaMAAIWjQACFtgAAhb7AAIXGwACFzsAAhc9AAIXPwACF0EAAhdDAAIXRgACF0cAAhdIAAIXSwACF0wAAhdOAAIXTwACF1IAAhdVAAIXVgACF1cAAhdaAAIXWwACF2AAAhdtAAIXcgACF3QAAhd3AAIXfAACF38AAheCAAIXhAACF6kAAhfNAAIX9AACGBgAAhgbAAIYHQACGB8AAhghAAIYIwACGCUAAhgmAAIYKQACGDYAAhhHAAIYSQACGEsAAhhNAAIYTwACGFEAAhhTAAIYVQACGFcAAhhoAAIYawACGG4AAhhxAAIYdAACGHcAAhh6AAIYfQACGIAAAhiCAAIYwQACGMMAAhjFAAIYxwACGMoAAhjLAAIYzAACGM0AAhjOAAIY0AACGNIAAhjTAAIY1AACGNYAAhjXAAIZFgACGRgAAhkaAAIZHAACGR8AAhkgAAIZIQACGSIAAhkjAAIZJQACGScAAhkoAAIZKQACGSsAAhksAAIZawACGW0AAhlwAAIZcgACGXUAAhl2AAIZdwACGXgAAhl5AAIZewACGX0AAhl+AAIZfwACGYEAAhmCAAIZjwACGZAAAhmRAAIZkwACGdIAAhnUAAIZ1gACGdgAAhnbAAIZ3AACGd0AAhneAAIZ3wACGeEAAhnjAAIZ5AACGeUAAhnnAAIZ6AACGicAAhopAAIaKwACGi0AAhowAAIaMQACGjIAAhozAAIaNAACGjYAAho4AAIaOQACGjoAAho8AAIaPQACGnwAAhp+AAIagAACGoIAAhqFAAIahgACGocAAhqIAAIaiQACGosAAhqNAAIajgACGo8AAhqRAAIakgACGtEAAhrTAAIa1QACGtcAAhraAAIa2wACGtwAAhrdAAIa3gACGuAAAhriAAIa4wACGuQAAhrmAAIa5wACGyYAAhsoAAIbKgACGywAAhsvAAIbMAACGzEAAhsyAAIbMwACGzUAAhs3AAIbOAACGzkAAhs7AAIbPAACG2EAAhuFAAIbrAACG9AAAhvTAAIb1gACG9gAAhvaAAIb3AACG94AAhvfAAIb4gACG+8AAhv+AAIcAQACHAQAAhwHAAIcCgACHA0AAhwQAAIcEwACHCIAAhwlAAIcKAACHCsAAhwuAAIcMQACHDQAAhw3AAIcOQACHHgAAhx6AAIcfQACHH8AAhyCAAIcgwACHIQAAhyFAAIchgACHIgAAhyLAAIcjAACHI0AAhyPAAIckAACHM8AAhzRAAIc1AACHNYAAhzZAAIc2gACHNsAAhzcAAIc3QACHN8AAhziAAIc4wACHOQAAhzmAAIc5wACHSYAAh0oAAIdKwACHS0AAh0wAAIdMQACHTIAAh0zAAIdNAACHTYAAh05AAIdOgACHTsAAh09AAIdPgACHX0AAh1/AAIdggACHYQAAh2HAAIdiAACHYkAAh2KAAIdiwACHY0AAh2QAAIdkQACHZIAAh2UAAIdlQACHdgAAh38AAIeIAACHkMAAh5qAAIeigACHrEAAh7YAAIe+AACHxwAAh9AAAIfQgACH0UAAh9HAAIfSQACH0sAAh9OAAIfUAACH1IAAh9UAAIfVgACH1gAAh9aAAIfXQACH2AAAh9hAAIfZgACH3MAAh92AAIfeAACH3sAAh9+AAIfgAACH6UAAh/JAAIf8AACIBQAAiAXAAIgGQACIBsAAiAdAAIgHwACICEAAiAiAAIgJQACIDIAAiBFAAIgRwACIEkAAiBLAAIgTQACIE8AAiBRAAIgUwACIFUAAiBXAAIgagACIG0AAiBwAAIgcwACIHYAAiB5AAIgfAACIH8AAiCCAAIghQACIIcAAiDGAAIgyAACIMsAAiDNAAIg0AACINEAAiDSAAIg0wACINQAAiDWAAIg2AACINkAAiDaAAIg3AACIN0AAiDmAAIg5wACIOkAAiEoAAIhKgACISwAAiEuAAIhMQACITIAAiEzAAIhNAACITUAAiE3AAIhOQACIToAAiE7AAIhPQACIT4AAiF9AAIhfwACIYIAAiGEAAIhhwACIYgAAiGJAAIhigACIYsAAiGNAAIhjwACIZAAAiGRAAIhkwACIZQAAiGdAAIhngACIaAAAiHfAAIh4QACIeMAAiHlAAIh6AACIekAAiHqAAIh6wACIewAAiHuAAIh8AACIfEAAiHyAAIh9AACIfUAAiI0AAIiNgACIjkAAiI7AAIiPgACIj8AAiJAAAIiQQACIkIAAiJEAAIiRgACIkcAAiJIAAIiSgACIksAAiJUAAIiVQACIlcAAiKWAAIimAACIpoAAiKcAAIinwACIqAAAiKhAAIiogACIqMAAiKlAAIipwACIqgAAiKpAAIiqwACIqwAAiLrAAIi7QACIvAAAiLyAAIi9QACIvYAAiL3AAIi+AACIvkAAiL7AAIi/QACIv4AAiL/AAIjAQACIwIAAiMPAAIjEAACIxEAAiMTAAIjUgACI1QAAiNWAAIjWAACI1sAAiNcAAIjXQACI14AAiNfAAIjYQACI2MAAiNkAAIjZQACI2cAAiNoAAIjpwACI6kAAiOsAAIjrgACI7EAAiOyAAIjswACI7QAAiO1AAIjtwACI7kAAiO6AAIjuwACI70AAiO+AAIj0AACI90AAiPmAAIj6AACI+sAAiPuAAIj8QACI/oAAiP9AAIkAAACJAMAAiQGAAIkCAACJA4AAiRZAAIkfAACJJwAAiS8AAIkvgACJMAAAiTCAAIkxAACJMcAAiTIAAIkyQACJMwAAiTNAAIkzwACJNAAAiTSAAIk1AACJNUAAiTWAAIk2QACJNoAAiTfAAIk7AACJPEAAiTzAAIk9QACJPoAAiT9AAIlAAACJQIAAiUnAAIlSwACJXIAAiWWAAIlmQACJZsAAiWdAAIlnwACJaEAAiWjAAIlpAACJacAAiW0AAIlxQACJccAAiXJAAIlywACJc0AAiXPAAIl0QACJdMAAiXVAAIl5gACJekAAiXsAAIl7wACJfIAAiX1AAIl+AACJfsAAiX+AAImAAACJj8AAiZBAAImQwACJkUAAiZIAAImSQACJkoAAiZLAAImTAACJk4AAiZQAAImUQACJlIAAiZUAAImVQACJpQAAiaWAAImmAACJpoAAiadAAImngACJp8AAiagAAImoQACJqMAAialAAImpgACJqcAAiapAAImqgACJukAAibrAAIm7gACJvAAAibzAAIm9AACJvUAAib2AAIm9wACJvkAAib7AAIm/AACJv0AAib/AAInAAACJw0AAicOAAInDwACJxEAAidQAAInUgACJ1QAAidWAAInWQACJ1oAAidbAAInXAACJ10AAidfAAInYQACJ2IAAidjAAInZQACJ2YAAielAAInpwACJ6kAAierAAInrgACJ68AAiewAAInsQACJ7IAAie0AAIntgACJ7cAAie4AAInugACJ7sAAif6AAIn/AACJ/4AAigAAAIoAwACKAQAAigFAAIoBgACKAcAAigJAAIoCwACKAwAAigNAAIoDwACKBAAAihPAAIoUQACKFMAAihVAAIoWAACKFkAAihaAAIoWwACKFwAAiheAAIoYAACKGEAAihiAAIoZAACKGUAAiikAAIopgACKKgAAiiqAAIorQACKK4AAiivAAIosAACKLEAAiizAAIotQACKLYAAii3AAIouQACKLoAAijfAAIpAwACKSoAAilOAAIpUQACKVMAAilVAAIpVwACKVkAAilbAAIpXAACKV8AAilsAAIpewACKX0AAil/AAIpgQACKYMAAimFAAIphwACKYkAAimYAAIpmwACKZ4AAimhAAIppAACKacAAimqAAIprQACKa8AAinuAAIp8AACKfIAAin0AAIp9wACKfgAAin5AAIp+gACKfsAAin9AAIp/wACKgAAAioBAAIqAwACKgQAAipDAAIqRQACKkcAAipJAAIqTAACKk0AAipOAAIqTwACKlAAAipSAAIqVAACKlUAAipWAAIqWAACKlkAAiqYAAIqmgACKpwAAiqeAAIqoQACKqIAAiqjAAIqpAACKqUAAiqnAAIqqQACKqoAAiqrAAIqrQACKq4AAirtAAIq7wACKvEAAirzAAIq9gACKvcAAir4AAIq+QACKvoAAir8AAIq/gACKv8AAisAAAIrAgACKwMAAitCAAIrRAACK0YAAitIAAIrSwACK0wAAitNAAIrTgACK08AAitRAAIrUwACK1QAAitVAAIrVwACK1gAAiuXAAIrmQACK5sAAiudAAIroAACK6EAAiuiAAIrowACK6QAAiumAAIrqAACK6kAAiuqAAIrrAACK60AAivsAAIr7gACK/AAAivyAAIr9QACK/YAAiv3AAIr+AACK/kAAiv7AAIr/QACK/4AAiv/AAIsAQACLAIAAixNAAIscAACLJAAAiywAAIssgACLLQAAiy2AAIsuAACLLsAAiy8AAIsvQACLMAAAizBAAIswwACLMQAAizGAAIsyQACLMoAAizLAAIszgACLM8AAizUAAIs4QACLOYAAizoAAIs6gACLO8AAizyAAIs9QACLPcAAi0cAAItQAACLWcAAi2LAAItjgACLZAAAi2SAAItlAACLZYAAi2YAAItmQACLZwAAi2pAAItugACLbwAAi2+AAItwAACLcIAAi3EAAItxgACLcgAAi3KAAIt2wACLd4AAi3hAAIt5AACLecAAi3qAAIt7QACLfA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AAjk4AAI5OwACOT0AAjk/AAI5QQACOUMAAjlFAAI5RgACOUkAAjlWAAI5ZQACOWcAAjlpAAI5awACOW0AAjlvAAI5cQACOXMAAjmCAAI5hQACOYgAAjmLAAI5jgACOZEAAjmUAAI5lwACOZkAAjnYAAI52gACOdwAAjneAAI54QACOeIAAjnjAAI55AACOeUAAjnnAAI56QACOeoAAjnrAAI57QACOe4AAjotAAI6LwACOjEAAjozAAI6NgACOjcAAjo4AAI6OQACOjoAAjo8AAI6PgACOj8AAjpAAAI6QgACOkMAAjqCAAI6hAACOoYAAjqIAAI6iwACOowAAjqNAAI6jgACOo8AAjqRAAI6kwACOpQAAjqVAAI6lwACOpgAAjrXAAI62QACOtsAAjrdAAI64AACOuEAAjriAAI64wACOuQAAjrmAAI66AACOukAAjrqAAI67AACOu0AAjssAAI7LgACOzAAAjsyAAI7NQACOzYAAjs3AAI7OAACOzkAAjs7AAI7PQACOz4AAjs/AAI7QQACO0IAAjuBAAI7gwACO4UAAjuHAAI7igACO4sAAjuMAAI7jQACO44AAjuQAAI7kgACO5MAAjuUAAI7lgACO5cAAjvWAAI72AACO9oAAjvcAAI73wACO+AAAjvhAAI74gACO+MAAjvlAAI75wACO+gAAjvpAAI76wACO+wAAjw3AAI8WgACPHoAAjyaAAI8nAACPJ4AAjygAAI8ogACPKUAAjymAAI8pwACPKoAAjyrAAI8rQACPK4AAjyxAAI8tAACPLUAAjy2AAI8uQACPLoAAjy/AAI8zAACPNEAAjzTAAI81gACPNsAAjzeAAI84QACPOMAAj0IAAI9LAACPVMAAj13AAI9egACPXwAAj1+AAI9gAACPYIAAj2EAAI9hQACPYgAAj2VAAI9pgACPagAAj2qAAI9rAACPa4AAj2wAAI9sgACPbQAAj22AAI9xwACPcoAAj3NAAI90AACPdMAAj3WAAI92QACPdwAAj3fAAI94QACPiAAAj4iAAI+JAACPiYAAj4pAAI+KgACPisAAj4sAAI+LQACPi8AAj4xAAI+MgACPjMAAj41AAI+NgACPnUAAj53AAI+eQACPnsAAj5+AAI+fwACPoAAAj6BAAI+ggACPoQAAj6GAAI+hwACPogAAj6KAAI+iwACPsoAAj7MAAI+zwACPtEAAj7UAAI+1QACPtYAAj7XAAI+2AACPtoAAj7cAAI+3QACPt4AAj7gAAI+4QACPu4AAj7vAAI+8AACPvIAAj8xAAI/MwACPzUAAj83AAI/OgACPzsAAj88AAI/PQACPz4AAj9AAAI/QgACP0MAAj9EAAI/RgACP0cAAj+GAAI/iAACP4oAAj+MAAI/jwACP5AAAj+RAAI/kgACP5MAAj+VAAI/lwACP5gAAj+ZAAI/mwACP5wAAj/bAAI/3QACP98AAj/hAAI/5AACP+UAAj/mAAI/5wACP+gAAj/qAAI/7AACP+0AAj/uAAI/8AACP/EAAkAwAAJAMgACQDQAAkA2AAJAOQACQDoAAkA7AAJAPAACQD0AAkA/AAJAQQACQEIAAkBDAAJARQACQEYAAkCFAAJAhwACQIkAAkCLAAJAjgACQI8AAkCQAAJAkQACQJIAAkCUAAJAlgACQJcAAkCYAAJAmgACQJsAAkDAAAJA5AACQQsAAkEvAAJBMgACQTUAAkE3AAJBOQACQTsAAkE9AAJBPgACQUEAAkFOAAJBXQACQWAAAkFjAAJBZgACQWkAAkFsAAJBbwACQXIAAkGBAAJBhAACQYcAAkGKAAJBjQACQZAAAkGTAAJBlgACQZgAAkHXAAJB2QACQdwAAkHeAAJB4QACQeIAAkHjAAJB5AACQeUAAkHnAAJB6gACQesAAkHsAAJB7gACQe8AAkIuAAJCMAACQjMAAkI1AAJCOAACQjkAAkI6AAJCOwACQjwAAkI+AAJCQQACQkIAAkJDAAJCRQACQkYAAkKFAAJChwACQooAAkKMAAJCjwACQpAAAkKRAAJCkgACQpMAAkKVAAJCmAACQpkAAkKaAAJCnAACQp0AAkLcAAJC3gACQuEAAkLjAAJC5gACQucAAkLoAAJC6QACQuoAAkLsAAJC7wACQvAAAkLxAAJC8wACQvQAAkMzAAJDNQACQzcAAkM5AAJDPAACQz0AAkM+AAJDPwACQ0AAAkNCAAJDRQACQ0YAAkNHAAJDSQACQ0oAAkOJAAJDiwACQ40AAkOPAAJDkgACQ5MAAkOUAAJDlQACQ5YAAkOYAAJDmwACQ5wAAkOdAAJDnwACQ6AAAkPfAAJD4QACQ+QAAkPmAAJD6QACQ+oAAkPrAAJD7AACQ+0AAkPvAAJD8gACQ/MAAkP0AAJD9gACQ/cAAkQAAAJEAQACRAMAAkRCAAJERAACREYAAkRIAAJESwACREwAAkRNAAJETgACRE8AAkRRAAJEVAACRFUAAkRWAAJEWAACRFkAAkSYAAJEmgACRJwAAkSeAAJEoQACRKIAAkSjAAJEpAACRKUAAkSnAAJEqgACRKsAAkSsAAJErgACRK8AAkTuAAJE8AACRPMAAkT1AAJE+AACRPkAAkT6AAJE+wACRPwAAkT+AAJFAQACRQIAAkUDAAJFBQACRQYAAkVRAAJFdAACRZQAAkW0AAJFtgACRbgAAkW6AAJFvAACRb8AAkXAAAJFwQACRcQAAkXFAAJFxwACRcgAAkXKAAJFzAACRc0AAkXOAAJF0QACRdIAAkXXAAJF5AACRekAAkXrAAJF7QACRfIAAkX1AAJF+AACRfoAAkYfAAJGQwACRmoAAkaOAAJGkQACRpMAAkaVAAJGlwACRpkAAkabAAJGnAACRp8AAkasAAJGvQACRr8AAkbBAAJGwwACRsUAAkbHAAJGyQACRssAAkbNAAJG3gACRuEAAkbkAAJG5wACRuoAAkbtAAJG8AACRvMAAkb2AAJG+AACRzcAAkc5AAJHOwACRz0AAkdAAAJHQQACR0IAAkdDAAJHRAACR0YAAkdIAAJHSQACR0oAAkdMAAJHTQACR4wAAkeOAAJHkAACR5IAAkeVAAJHlgACR5cAAkeYAAJHmQACR5sAAkedAAJHngACR58AAkehAAJHogACR+EAAkfjAAJH5gACR+gAAkfrAAJH7AACR+0AAkfuAAJH7wACR/EAAkfzAAJH9AACR/UAAkf3AAJH+AACSAUAAkgGAAJIBwACSAkAAkhIAAJISgACSEwAAkhOAAJIUQACSFIAAkhTAAJIVAACSFUAAkhXAAJIWQACSFoAAkhbAAJIXQACSF4AAkidAAJInwACSKEAAkijAAJIpgACSKcAAkioAAJIqQACSKoAAkisAAJIrgACSK8AAkiwAAJIsgACSLMAAkjyAAJI9AACSPYAAkj4AAJI+wACSPwAAkj9AAJI/gACSP8AAkkBAAJJAwACSQQAAkkFAAJJBwACSQgAAklHAAJJSQACSUsAAklNAAJJUAACSVEAAklSAAJJUwACSVQAAklWAAJJWAACSVkAAklaAAJJXAACSV0AAkmcAAJJngACSaAAAkmiAAJJpQACSaYAAkmnAAJJqAACSakAAkmrAAJJrQACSa4AAkmvAAJJsQACSbIAAknXAAJJ+wACSiIAAkpGAAJKSQACSksAAkpNAAJKTwACSlEAAkpTAAJKVAACSlcAAkpkAAJKcwACSnUAAkp3AAJKeQACSnsAAkp9AAJKfwACSoEAAkqQAAJKkwACSpYAAkqZAAJKnAACSp8AAkqiAAJKpQACSqcAAkrmAAJK6AACSuoAAkrsAAJK7wACSvAAAkrxAAJK8gACSvMAAkr1AAJK9wACSvgAAkr5AAJK+wACSvwAAks7AAJLPQACSz8AAktBAAJLRAACS0UAAktGAAJLRwACS0gAAktKAAJLTAACS00AAktOAAJLUAACS1EAAkuQAAJLkgACS5QAAkuWAAJLmQACS5oAAkubAAJLnAACS50AAkufAAJLoQACS6IAAkujAAJLpQACS6YAAkvlAAJL5wACS+kAAkvrAAJL7gACS+8AAkvwAAJL8QACS/IAAkv0AAJL9gACS/cAAkv4AAJL+gACS/sAAkw6AAJMPAACTD4AAkxAAAJMQwACTEQAAkxFAAJMRgACTEcAAkxJAAJMSwACTEwAAkxNAAJMTwACTFAAAkyPAAJMkQACTJMAAkyVAAJMmAACTJkAAkyaAAJMmwACTJwAAkyeAAJMoAACTKEAAkyiAAJMpAACTKUAAkzkAAJM5gACTOgAAkzqAAJM7QACTO4AAkzvAAJM8AACTPEAAkzzAAJM9QACTPYAAkz3AAJM+QACTPoAAk1FAAJNaAACTYgAAk2oAAJNqgACTawAAk2uAAJNsAACTbMAAk20AAJNtQACTbgAAk25AAJNuwACTbwAAk2/AAJNwgACTcMAAk3EAAJNxwACTcgAAk3NAAJN2gACTd8AAk3hAAJN5AACTekAAk3sAAJN7wACTfEAAk4WAAJOOgACTmEAAk6FAAJOiAACTooAAk6MAAJOjgACTpAAAk6SAAJOkwACTpYAAk6jAAJOtAACTrYAAk64AAJOugACTrwAAk6+AAJOwAACTsIAAk7EAAJO1QACTtgAAk7bAAJO3gACTuEAAk7kAAJO5wACTuoAAk7tAAJO7wACTy4AAk8wAAJPMgACTzQAAk83AAJPOAACTzkAAk86AAJPOwACTz0AAk8/AAJPQAACT0EAAk9DAAJPRAACT4MAAk+FAAJPhwACT4kAAk+MAAJPjQACT44AAk+PAAJPkAACT5IAAk+UAAJPlQACT5YAAk+YAAJPmQACT9gAAk/aAAJP3QACT98AAk/iAAJP4wACT+QAAk/lAAJP5gACT+gAAk/qAAJP6wACT+wAAk/uAAJP7wACT/wAAk/9AAJP/gACUAAAAlA/AAJQQQACUEMAAlBFAAJQSAACUEkAAlBKAAJQSwACUEwAAlBOAAJQUAACUFEAAlBSAAJQVAACUFUAAlCUAAJQlgACUJgAAlCaAAJQnQACUJ4AAlCfAAJQoAACUKEAAlCjAAJQpQACUKYAAlCnAAJQqQACUKoAAlDpAAJQ6wACUO0AAlDvAAJQ8gACUPMAAlD0AAJQ9QACUPYAAlD4AAJQ+gACUPsAAlD8AAJQ/gACUP8AAlE+AAJRQAACUUIAAlFEAAJRRwACUUgAAlFJAAJRSgACUUsAAlFNAAJRTwACUVAAAlFRAAJRUwACUVQAAlGTAAJRlQACUZcAAlGZAAJRnAACUZ0AAlGeAAJRnwACUaAAAlGiAAJRpAACUaUAAlGmAAJRqAACUakAAlHOAAJR8gACUhkAAlI9AAJSQAACUkMAAlJFAAJSRwACUkkAAlJLAAJSTAACUk8AAlJcAAJSawACUm4AAlJxAAJSdAACUncAAlJ6AAJSfQACUoAAAlKPAAJSkgACUpUAAlKYAAJSmwACUp4AAlKhAAJSpAACUqYAAlLlAAJS5wACUuoAAlLsAAJS7wACUvAAAlLxAAJS8gACUvMAAlL1AAJS+AACUvkAAlL6AAJS/AACUv0AAlM8AAJTPgACU0EAAlNDAAJTRgACU0cAAlNIAAJTSQACU0oAAlNMAAJTTwACU1AAAlNRAAJTUwACU1QAAlOTAAJTlQACU5gAAlOaAAJTnQACU54AAlOfAAJToAACU6EAAlOjAAJTpgACU6cAAlOoAAJTqgACU6sAAlPqAAJT7AACU+8AAlPxAAJT9AACU/UAAlP2AAJT9wACU/gAAlP6AAJT/QACU/4AAlP/AAJUAQACVAIAAlRFAAJUaQACVI0AAlSwAAJU1wACVPcAAlUeAAJVRQACVWUAAlWJAAJVrQACVa8AAlWyAAJVtAACVbYAAlW4AAJVuwACVb0AAlW/AAJVwQACVcMAAlXFAAJVxwACVcoAAlXNAAJVzgACVdMAAlXgAAJV4wACVeUAAlXoAAJV6wACVe0AAlYSAAJWNgACVl0AAlaBAAJWhAACVoYAAlaIAAJWigACVowAAlaOAAJWjwACVpIAAlafAAJWsgACVrQAAla2AAJWuAACVroAAla8AAJWvgACVsAAAlbCAAJWxAACVtcAAlbaAAJW3QACVuAAAlbjAAJW5gACVukAAlbsAAJW7wACVvIAAlb0AAJXMwACVzUAAlc4AAJXOgACVz0AAlc+AAJXPwACV0AAAldBAAJXQwACV0UAAldGAAJXRwACV0kAAldKAAJXUwACV1QAAldWAAJXlQACV5cAAleZAAJXmwACV54AAlefAAJXoAACV6EAAleiAAJXpAACV6YAAlenAAJXqAACV6oAAlerAAJX6gACV+wAAlfvAAJX8QACV/QAAlf1AAJX9gACV/cAAlf4AAJX+gACV/wAAlf9AAJX/gACWAAAAlgBAAJYCgACWAsAAlgNAAJYTAACWE4AAlhQAAJYUgACWFUAAlhWAAJYVwACWFgAAlhZAAJYWwACWF0AAlheAAJYXwACWGEAAlhiAAJYoQACWKMAAlimAAJYqAACWKsAAlisAAJYrQACWK4AAlivAAJYsQACWLMAAli0AAJYtQACWLcAAli4AAJYwQACWMIAAljEAAJZAwACWQUAAlkHAAJZCQACWQwAAlkNAAJZDgACWQ8AAlkQAAJZEgACWRQAAlkVAAJZFgACWRgAAlkZAAJZWAACWVoAAlldAAJZXwACWWIAAlljAAJZZAACWWUAAllmAAJZaAACWWoAAllrAAJZbAACWW4AAllvAAJZfAACWX0AAll+AAJZgAACWb8AAlnBAAJZwwACWcUAAlnIAAJZyQACWcoAAlnLAAJZzAACWc4AAlnQAAJZ0QACWdIAAlnUAAJZ1QACWhQAAloWAAJaGQACWhsAAloeAAJaHwACWiAAAlohAAJaIgACWiQAAlomAAJaJwACWigAAloqAAJaKwACWjcAAlpEAAJaUQACWlQAAlpXAAJaWgACWl0AAlpgAAJaYwACWnAAAlpzAAJadgACWnkAAlp8AAJafwACWoIAAlqEAAJajwACWpUAAlqnAAJaugACWwUAAlsoAAJbSAACW2gAAltqAAJbbAACW24AAltwAAJbcwACW3QAAlt1AAJbeAACW3kAAlt7AAJbfAACW34AAluBAAJbggACW4MAAluGAAJbhwACW4wAAluZAAJbngACW6AAAluiAAJbpwACW6oAAlutAAJbrwACW9QAAlv4AAJcHwACXEMAAlxGAAJcSAACXEoAAlxMAAJcTgACXFAAAlxRAAJcVAACXGEAAlxyAAJcdAACXHYAAlx4AAJcegACXHwAAlx+AAJcgAACXIIAAlyTAAJclgACXJkAAlycAAJcnwACXKIAAlylAAJcqAACXKsAAlytAAJc7AACXO4AAlzwAAJc8gACXPUAAlz2AAJc9wACXPgAAlz5AAJc+wACXP0AAlz+AAJc/wACXQEAAl0CAAJdQQACXUMAAl1FAAJdRwACXUoAAl1LAAJdTAACXU0AAl1OAAJdUAACXVIAAl1TAAJdVAACXVYAAl1XAAJdlgACXZgAAl2bAAJdnQACXaAAAl2hAAJdogACXaMAAl2kAAJdpgACXagAAl2pAAJdqgACXawAAl2tAAJdugACXbsAAl28AAJdvgACXf0AAl3/AAJeAQACXgMAAl4GAAJeBwACXggAAl4JAAJeCgACXgwAAl4OAAJeDwACXhAAAl4SAAJeEwACXlIAAl5UAAJeVgACXlgAAl5bAAJeXAACXl0AAl5eAAJeXwACXmEAAl5jAAJeZAACXmUAAl5nAAJeaAACXqcAAl6pAAJeqwACXq0AAl6wAAJesQACXrIAAl6zAAJetAACXrYAAl64AAJeuQACXroAAl68AAJevQACXvwAAl7+AAJfAAACXwIAAl8FAAJfBgACXwcAAl8IAAJfCQACXwsAAl8NAAJfDgACXw8AAl8RAAJfEgACX1EAAl9TAAJfVQACX1cAAl9aAAJfWwACX1wAAl9dAAJfXgACX2AAAl9iAAJfYwACX2QAAl9mAAJfZwACX4wAAl+wAAJf1wACX/sAAl/+AAJgAAACYAIAAmAEAAJgBgACYAgAAmAJAAJgDAACYBkAAmAoAAJgKgACYCwAAmAuAAJgMAACYDIAAmA0AAJgNgACYEUAAmBIAAJgSwACYE4AAmBRAAJgVAACYFcAAmBaAAJgXAACYJsAAmCdAAJgnwACYKEAAmCkAAJgpQACYKYAAmCnAAJgqAACYKoAAmCsAAJgrQACYK4AAmCwAAJgsQACYPAAAmDyAAJg9AACYPYAAmD5AAJg+gACYPsAAmD8AAJg/QACYP8AAmEBAAJhAgACYQMAAmEFAAJhBgACYUUAAmFHAAJhSQACYUsAAmFOAAJhTwACYVAAAmFRAAJhUgACYVQAAmFWAAJhVwACYVgAAmFaAAJhWwACYZoAAmGcAAJhngACYaAAAmGjAAJhpAACYaUAAmGmAAJhpwACYakAAmGrAAJhrAACYa0AAmGvAAJhsAACYe8AAmHxAAJh8wACYfUAAmH4AAJh+QACYfoAAmH7AAJh/AACYf4AAmIAAAJiAQACYgIAAmIEAAJiBQACYkQAAmJGAAJiSAACYkoAAmJNAAJiTgACYk8AAmJQAAJiUQACYlMAAmJVAAJiVgACYlcAAmJZAAJiWgACYpkAAmKbAAJinQACYp8AAmKiAAJiowACYqQAAmKlAAJipgACYqgAAmKqAAJiqwACYqwAAmKuAAJirwACYvoAAmMdAAJjPQACY10AAmNfAAJjYQACY2MAAmNlAAJjaAACY2kAAmNqAAJjbQACY24AAmNwAAJjcQACY3QAAmN3AAJjeAACY3kAAmN8AAJjfQACY4YAAmOTAAJjmAACY5oAAmOdAAJjogACY6UAAmOoAAJjqgACY88AAmPzAAJkGgACZD4AAmRBAAJkQwACZEUAAmRHAAJkSQACZEsAAmRMAAJkTwACZFwAAmRtAAJkbwACZHEAAmRzAAJkdQACZHcAAmR5AAJkewACZH0AAmSOAAJkkQACZJQAAmSXAAJkmgACZJ0AAmSgAAJkowACZKYAAmSoAAJk5wACZOkAAmTrAAJk7QACZPAAAmTxAAJk8gACZPMAAmT0AAJk9gACZPgAAmT5AAJk+gACZPwAAmT9AAJlPAACZT4AAmVAAAJlQgACZUUAAmVGAAJlRwACZUgAAmVJAAJlSwACZU0AAmVOAAJlTwACZVEAAmVSAAJlkQACZZMAAmWWAAJlmAACZZsAAmWcAAJlnQACZZ4AAmWfAAJloQACZaMAAmWkAAJlpQACZacAAmWoAAJltQACZbYAAmW3AAJluQACZfgAAmX6AAJl/AACZf4AAmYBAAJmAgACZgMAAmYEAAJmBQACZgcAAmYJAAJmCgACZgsAAmYNAAJmDgACZk0AAmZPAAJmUQACZlMAAmZWAAJmVwACZlgAAmZZAAJmWgACZlwAAmZeAAJmXwACZmAAAmZiAAJmYwACZqIAAmakAAJmpgACZqgAAmarAAJmrAACZq0AAmauAAJmrwACZrEAAmazAAJmtAACZrUAAma3AAJmuAACZvcAAmb5AAJm+wACZv0AAmcAAAJnAQACZwIAAmcDAAJnBAACZwYAAmcIAAJnCQACZwoAAmcMAAJnDQACZ0wAAmdOAAJnUAACZ1IAAmdVAAJnVgACZ1cAAmdYAAJnWQACZ1sAAmddAAJnXgACZ18AAmdhAAJnYgACZ4cAAmerAAJn0gACZ/YAAmf5AAJn/AACZ/4AAmgAAAJoAgACaAQAAmgFAAJoCAACaBUAAmgkAAJoJwACaCoAAmgtAAJoMAACaDMAAmg2AAJoOQACaEgAAmhLAAJoTgACaFEAAmhUAAJoVwACaFoAAmhdAAJoXwACaJ4AAmigAAJoowACaKUAAmioAAJoqQACaKoAAmirAAJorAACaK4AAmixAAJosgACaLMAAmi1AAJotgACaPUAAmj3AAJo+gACaPwAAmj/AAJpAAACaQEAAmkCAAJpAwACaQUAAmkIAAJpCQACaQoAAmkMAAJpDQACaUwAAmlOAAJpUQACaVMAAmlWAAJpVwACaVgAAmlZAAJpWgACaVwAAmlfAAJpYAACaWEAAmljAAJpZAACaaMAAmmlAAJpqAACaaoAAmmtAAJprgACaa8AAmmwAAJpsQACabMAAmm2AAJptwACabgAAmm6AAJpuwACafoAAmn8AAJp/gACagAAAmoDAAJqBAACagUAAmoGAAJqBwACagkAAmoMAAJqDQACag4AAmoQAAJqEQACalAAAmpSAAJqVAACalYAAmpZAAJqWgACalsAAmpcAAJqXQACal8AAmpiAAJqYwACamQAAmpmAAJqZwACaqYAAmqoAAJqqwACaq0AAmqwAAJqsQACarIAAmqzAAJqtAACarYAAmq5AAJqugACarsAAmq9AAJqvgACawkAAmssAAJrTAACa2wAAmtuAAJrcAACa3IAAmt0AAJrdwACa3gAAmt5AAJrfAACa30AAmt/AAJrgAACa4IAAmuFAAJrhgACa4cAAmuKAAJriwACa5AAAmudAAJrogACa6QAAmumAAJrqwACa64AAmuxAAJrswACa9gAAmv8AAJsIwACbEcAAmxKAAJsTAACbE4AAmxQAAJsUgACbFQAAmxVAAJsWAACbGUAAmx2AAJseAACbHoAAmx8AAJsfgACbIAAAmyCAAJshAACbIYAAmyXAAJsmgACbJ0AAmygAAJsowACbKYAAmypAAJsrAACbK8AAmyxAAJs8AACbPIAAmz0AAJs9gACbPkAAmz6AAJs+wACbPwAAmz9AAJs/wACbQEAAm0CAAJtAwACbQUAAm0GAAJtRQACbUcAAm1JAAJtSwACbU4AAm1PAAJtUAACbVEAAm1SAAJtVAACbVYAAm1XAAJtWAACbVoAAm1bAAJtmgACbZwAAm2fAAJtoQACbaQAAm2lAAJtpgACbacAAm2oAAJtqgACbawAAm2tAAJtrgACbbAAAm2xAAJtvgACbb8AAm3AAAJtwgACbgEAAm4DAAJuBQACbgcAAm4KAAJuCwACbgwAAm4NAAJuDgACbhAAAm4SAAJuEwACbhQAAm4WAAJuFwACblYAAm5YAAJuWgACblwAAm5fAAJuYAACbmEAAm5iAAJuYwACbmUAAm5nAAJuaAACbmkAAm5rAAJubAACbqsAAm6tAAJurwACbrEAAm60AAJutQACbrYAAm63AAJuuAACbroAAm68AAJuvQACbr4AAm7AAAJuwQACbwAAAm8CAAJvBAACbwYAAm8JAAJvCgACbwsAAm8MAAJvDQACbw8AAm8RAAJvEgACbxMAAm8VAAJvFgACb1UAAm9XAAJvWQACb1sAAm9eAAJvXwACb2AAAm9hAAJvYgACb2QAAm9mAAJvZwACb2gAAm9qAAJvawACb5AAAm+0AAJv2wACb/8AAnACAAJwBAACcAYAAnAIAAJwCgACcAwAAnANAAJwEAACcB0AAnAsAAJwLgACcDAAAnAyAAJwNAACcDYAAnA4AAJwOgACcEkAAnBMAAJwTwACcFIAAnBVAAJwWAACcFsAAnBeAAJwYAACcJ8AAnChAAJwowACcKUAAnCoAAJwqQACcKoAAnCrAAJwrAACcK4AAnCwAAJwsQACcLIAAnC0AAJwtQACcPQAAnD2AAJw+AACcPoAAnD9AAJw/gACcP8AAnEAAAJxAQACcQMAAnEFAAJxBgACcQcAAnEJAAJxCgACcUkAAnFLAAJxTQACcU8AAnFSAAJxUwACcVQAAnFVAAJxVgACcVgAAnFaAAJxWwACcVwAAnFeAAJxXwACcZ4AAnGgAAJxogACcaQAAnGnAAJxqAACcakAAnGqAAJxqwACca0AAnGvAAJxsAACcbEAAnGzAAJxtAACcfMAAnH1AAJx9wACcfkAAnH8AAJx/QACcf4AAnH/AAJyAAACcgIAAnIEAAJyBQACcgYAAnIIAAJyCQACckgAAnJKAAJyTAACck4AAnJRAAJyUgACclMAAnJUAAJyVQACclcAAnJZAAJyWgACclsAAnJdAAJyXgACcp0AAnKfAAJyoQACcqMAAnKmAAJypwACcqgAAnKpAAJyqgACcqwAAnKuAAJyrwACcrAAAnKyAAJyswACcv4AAnMhAAJzQQACc2EAAnNjAAJzZQACc2cAAnNpAAJzbAACc20AAnNuAAJzcQACc3IAAnN0AAJzdQACc3cAAnN6AAJzewACc3wAAnN/AAJzgAACc4UAAnOSAAJzlwACc5kAAnObAAJzoAACc6MAAnOmAAJzqAACc80AAnPxAAJ0GAACdDwAAnQ/AAJ0QQACdEMAAnRFAAJ0RwACdEkAAnRKAAJ0TQACdFoAAnRrAAJ0bQACdG8AAnRxAAJ0cwACdHUAAnR3AAJ0eQACdHsAAnSMAAJ0jwACdJIAAnSVAAJ0mAACdJsAAnSeAAJ0oQACdKQAAnSmAAJ05QACdOcAAnTpAAJ06wACdO4AAnTvAAJ08AACdPEAAnTyAAJ09AACdPYAAnT3AAJ0+AACdPoAAnT7AAJ1OgACdTwAAnU+AAJ1QAACdUMAAnVEAAJ1RQACdUYAAnVHAAJ1SQACdUsAAnVMAAJ1TQACdU8AAnVQAAJ1jwACdZEAAnWUAAJ1lgACdZkAAnWaAAJ1mwACdZwAAnWdAAJ1nwACdaEAAnWiAAJ1owACdaUAAnWmAAJ1swACdbQAAnW1AAJ1twACdfYAAnX4AAJ1+gACdfwAAnX/AAJ2AAACdgEAAnYCAAJ2AwACdgUAAnYHAAJ2CAACdgkAAnYLAAJ2DAACdksAAnZNAAJ2TwACdlEAAnZUAAJ2VQACdlYAAnZXAAJ2WAACdloAAnZcAAJ2XQACdl4AAnZgAAJ2YQACdqAAAnaiAAJ2pAACdqYAAnapAAJ2qgACdqsAAnasAAJ2rQACdq8AAnaxAAJ2sgACdrMAAna1AAJ2tgACdvUAAnb3AAJ2+QACdvsAAnb+AAJ2/wACdwAAAncBAAJ3AgACdwQAAncGAAJ3BwACdwgAAncKAAJ3CwACd0oAAndMAAJ3TgACd1AAAndTAAJ3VAACd1UAAndWAAJ3VwACd1kAAndbAAJ3XAACd10AAndfAAJ3YAACd4UAAnepAAJ30AACd/QAAnf3AAJ3+QACd/sAAnf9AAJ3/wACeAEAAngCAAJ4BQACeBIAAnghAAJ4IwACeCUAAngnAAJ4KQACeCsAAngtAAJ4LwACeD4AAnhBAAJ4RAACeEcAAnhKAAJ4TQACeFAAAnhTAAJ4VQACeJQAAniWAAJ4mAACeJoAAnidAAJ4ngACeJ8AAnigAAJ4oQACeKMAAnilAAJ4pgACeKcAAnipAAJ4qgACeOkAAnjrAAJ47QACeO8AAnjyAAJ48wACePQAAnj1AAJ49gACePgAAnj6AAJ4+wACePwAAnj+AAJ4/wACeT4AAnlAAAJ5QgACeUQAAnlHAAJ5SAACeUkAAnlKAAJ5SwACeU0AAnlPAAJ5UAACeVEAAnlTAAJ5VAACeZMAAnmVAAJ5lwACeZkAAnmcAAJ5nQACeZ4AAnmfAAJ5oAACeaIAAnmkAAJ5pQACeaYAAnmoAAJ5qQACeegAAnnqAAJ57AACee4AAnnxAAJ58gACefMAAnn0AAJ59QACefcAAnn5AAJ5+gACefsAAnn9AAJ5/gACej0AAno/AAJ6QQACekMAAnpGAAJ6RwACekgAAnpJAAJ6SgACekwAAnpOAAJ6TwACelAAAnpSAAJ6UwACepIAAnqUAAJ6lgACepgAAnqbAAJ6nAACep0AAnqeAAJ6nwACeqEAAnqjAAJ6pAACeqUAAnqnAAJ6qAACevMAAnsWAAJ7NgACe1YAAntYAAJ7WgACe1wAAnteAAJ7YQACe2IAAntjAAJ7ZgACe2cAAntpAAJ7agACe2wAAntvAAJ7cAACe3EAAnt0AAJ7dQACe3oAAnuHAAJ7jAACe44AAnuQAAJ7lQACe5gAAnubAAJ7nQACe8IAAnvmAAJ8DQACfDEAAnw0AAJ8NgACfDgAAnw6AAJ8PAACfD4AAnw/AAJ8QgACfE8AAnxgAAJ8YgACfGQAAnxmAAJ8aAACfGoAAnxsAAJ8bgACfHAAAnyBAAJ8hAACfIcAAnyKAAJ8jQACfJAAAnyTAAJ8lgACfJkAAnybAAJ82gACfNwAAnzeAAJ84AACfOMAAnzkAAJ85QACfOYAAnznAAJ86QACfOsAAnzsAAJ87QACfO8AAnzwAAJ9LwACfTEAAn0zAAJ9NQACfTgAAn05AAJ9OgACfTsAAn08AAJ9PgACfUAAAn1BAAJ9QgACfUQAAn1FAAJ9hAACfYYAAn2JAAJ9iwACfY4AAn2PAAJ9kAACfZEAAn2SAAJ9lAACfZYAAn2XAAJ9mAACfZoAAn2bAAJ9qAACfakAAn2qAAJ9rAACfesAAn3tAAJ97wACffEAAn30AAJ99QACffYAAn33AAJ9+AACffoAAn38AAJ9/QACff4AAn4AAAJ+AQACfkAAAn5CAAJ+RAACfkYAAn5JAAJ+SgACfksAAn5MAAJ+TQACfk8AAn5RAAJ+UgACflMAAn5VAAJ+VgACfpUAAn6XAAJ+mQACfpsAAn6eAAJ+nwACfqAAAn6hAAJ+ogACfqQAAn6mAAJ+pwACfqgAAn6qAAJ+qwACfuoAAn7sAAJ+7gACfvAAAn7zAAJ+9AACfvUAAn72AAJ+9wACfvkAAn77AAJ+/AACfv0AAn7/AAJ/AAACfz8AAn9BAAJ/QwACf0UAAn9IAAJ/SQACf0oAAn9LAAJ/TAACf04AAn9QAAJ/UQACf1IAAn9UAAJ/VQACf3oAAn+eAAJ/xQACf+kAAn/sAAJ/7gACf/AAAn/yAAJ/9AACf/YAAn/3AAJ/+gACgAcAAoAWAAKAGAACgBoAAoAcAAKAHgACgCAAAoAiAAKAJAACgDMAAoA2AAKAOQACgDwAAoA/AAKAQgACgEUAAoBIAAKASgACgIkAAoCLAAKAjQACgI8AAoCSAAKAkwACgJQAAoCVAAKAlgACgJgAAoCaAAKAmwACgJwAAoCeAAKAnwACgN4AAoDgAAKA4gACgOQAAoDnAAKA6AACgOkAAoDqAAKA6wACgO0AAoDvAAKA8AACgPEAAoDzAAKA9AACgTMAAoE1AAKBNwACgTkAAoE8AAKBPQACgT4AAoE/AAKBQAACgUIAAoFEAAKBRQACgUYAAoFIAAKBSQACgYgAAoGKAAKBjAACgY4AAoGRAAKBkgACgZMAAoGUAAKBlQACgZcAAoGZAAKBmgACgZsAAoGdAAKBngACgd0AAoHfAAKB4QACgeMAAoHmAAKB5wACgegAAoHpAAKB6gACgewAAoHuAAKB7wACgfAAAoHyAAKB8wACgjIAAoI0AAKCNgACgjgAAoI7AAKCPAACgj0AAoI+AAKCPwACgkEAAoJDAAKCRAACgkUAAoJHAAKCSAACgocAAoKJAAKCiwACgo0AAoKQAAKCkQACgpIAAoKTAAKClAACgpYAAoKYAAKCmQACgpoAAoKcAAKCnQACgugAAoMLAAKDKwACg0sAAoNNAAKDTwACg1EAAoNTAAKDVgACg1cAAoNYAAKDWwACg1wAAoNeAAKDXwACg2EAAoNkAAKDZQACg2YAAoNpAAKDagACg28AAoN8AAKDgQACg4MAAoOFAAKDigACg40AAoOQAAKDkgACg7cAAoPbAAKEAgAChCYAAoQpAAKEKwAChC0AAoQvAAKEMQAChDMAAoQ0AAKENwAChEQAAoRVAAKEVwAChFkAAoRbAAKEXQAChF8AAoRhAAKEYwAChGUAAoR2AAKEeQAChHwAAoR/AAKEggAChIUAAoSIAAKEiwAChI4AAoSQAAKEzwAChNEAAoTTAAKE1QAChNgAAoTZAAKE2gAChNsAAoTcAAKE3gAChOAAAoThAAKE4gAChOQAAoTlAAKFJAAChSYAAoUoAAKFKgAChS0AAoUuAAKFLwAChTAAAoUxAAKFMwAChTUAAoU2AAKFNwAChTkAAoU6AAKFeQAChXsAAoV+AAKFgAAChYMAAoWEAAKFhQAChYYAAoWHAAKFiQAChYsAAoWMAAKFjQAChY8AAoWQAAKFnQAChZ4AAoWfAAKFoQACheAAAoXiAAKF5AACheYAAoXpAAKF6gAChesAAoXsAAKF7QAChe8AAoXxAAKF8gAChfMAAoX1AAKF9gAChjUAAoY3AAKGOQAChjsAAoY+AAKGPwAChkAAAoZBAAKGQgAChkQAAoZGAAKGRwAChkgAAoZKAAKGSwAChooAAoaMAAKGjgAChpAAAoaTAAKGlAAChpUAAoaWAAKGlwAChpkAAoabAAKGnAAChp0AAoafAAKGoAACht8AAobhAAKG4wAChuUAAoboAAKG6QAChuoAAobrAAKG7AAChu4AAobwAAKG8QAChvIAAob0AAKG9QAChzQAAoc2AAKHOAAChzoAAoc9AAKHPgAChz8AAodAAAKHQQACh0MAAodFAAKHRgACh0cAAodJAAKHSgACh28AAoeTAAKHugACh94AAofhAAKH4wACh+UAAofnAAKH6QACh+sAAofsAAKH7wACh/wAAogLAAKIDQACiA8AAogRAAKIEwACiBUAAogXAAKIGQACiCgAAogrAAKILgACiDEAAog0AAKINwACiDoAAog9AAKIPwACiH4AAoiAAAKIggACiIQAAoiHAAKIiAACiIkAAoiKAAKIiwACiI0AAoiPAAKIkAACiJEAAoiTAAKIlAACiNMAAojVAAKI1wACiNkAAojcAAKI3QACiN4AAojfAAKI4AACiOIAAojkAAKI5QACiOYAAojoAAKI6QACiSgAAokqAAKJLAACiS4AAokxAAKJMgACiTMAAok0AAKJNQACiTcAAok5AAKJOgACiTsAAok9AAKJPgACiX0AAol/AAKJgQACiYMAAomGAAKJhwACiYgAAomJAAKJigACiYwAAomOAAKJjwACiZAAAomSAAKJkwACidIAAonUAAKJ1gACidgAAonbAAKJ3AACid0AAoneAAKJ3wACieEAAonjAAKJ5AACieUAAonnAAKJ6AACiicAAoopAAKKKwACii0AAoowAAKKMQACijIAAoozAAKKNAACijYAAoo4AAKKOQACijoAAoo8AAKKPQACinwAAop+AAKKgAACioIAAoqFAAKKhgACiocAAoqIAAKKiQACiosAAoqNAAKKjgACio8AAoqRAAKKkgACipsAAoqcAAKKngACit0AAorfAAKK4QACiuMAAormAAKK5wACiugAAorpAAKK6gACiuwAAorvAAKK8AACivEAAorzAAKK9AACizMAAos1AAKLNwACizkAAos8AAKLPQACiz4AAos/AAKLQAACi0IAAotFAAKLRgACi0cAAotJAAKLSgACi4kAAouLAAKLjgACi5AAAouTAAKLlAACi5UAAouWAAKLlwACi5kAAoucAAKLnQACi54AAougAAKLoQACi+wAAowPAAKMLwACjE8AAoxRAAKMUwACjFUAAoxXAAKMWgACjFsAAoxcAAKMXwACjGAAAoxiAAKMYwACjGUAAoxoAAKMaQACjGoAAoxtAAKMbgACjHMAAoyAAAKMhQACjIcAAoyJAAKMjgACjJEAAoyUAAKMlgACjLsAAozfAAKNBgACjSoAAo0tAAKNLwACjTEAAo0zAAKNNQACjTcAAo04AAKNOwACjUgAAo1ZAAKNWwACjV0AAo1fAAKNYQACjWMAAo1lAAKNZwACjWkAAo16AAKNfQACjYAAAo2DAAKNhgACjYkAAo2MAAKNjwACjZIAAo2UAAKN0wACjdUAAo3XAAKN2QACjdwAAo3dAAKN3gACjd8AAo3gAAKN4gACjeQAAo3lAAKN5gACjegAAo3pAAKOKAACjioAAo4sAAKOLgACjjEAAo4yAAKOMwACjjQAAo41AAKONwACjjkAAo46AAKOOwACjj0AAo4+AAKOfQACjn8AAo6CAAKOhAACjocAAo6IAAKOiQACjooAAo6LAAKOjQACjo8AAo6QAAKOkQACjpMAAo6UAAKOoQACjqIAAo6jAAKOpQACjuQAAo7mAAKO6AACjuoAAo7tAAKO7gACju8AAo7wAAKO8QACjvMAAo71AAKO9gACjvcAAo75AAKO+gACjzkAAo87AAKPPQACjz8AAo9CAAKPQwACj0QAAo9FAAKPRgACj0gAAo9KAAKPSwACj0wAAo9OAAKPTwACj44AAo+QAAKPkgACj5QAAo+XAAKPmAACj5kAAo+aAAKPmwACj50AAo+fAAKPoAACj6EAAo+jAAKPpAACj+MAAo/lAAKP5wACj+kAAo/sAAKP7QACj+4AAo/vAAKP8AACj/IAAo/0AAKP9QACj/YAAo/4AAKP+QACkDgAApA6AAKQPAACkD4AApBBAAKQQgACkEMAApBEAAKQRQACkEcAApBJAAKQSgACkEsAApBNAAKQTgACkHMAApCXAAKQvgACkOIAApDlAAKQ5wACkOkAApDrAAKQ7QACkO8AApDwAAKQ8wACkQAAApEPAAKREQACkRMAApEVAAKRFwACkRkAApEbAAKRHQACkSwAApEvAAKRMgACkTUAApE4AAKROwACkT4AApFBAAKRQwACkYIAApGEAAKRhgACkYgAApGLAAKRjAACkY0AApGOAAKRjwACkZEAApGTAAKRlAACkZUAApGXAAKRmAACkdcAApHZAAKR2wACkd0AApHgAAKR4QACkeIAApHjAAKR5AACkeYAApHoAAKR6QACkeoAApHsAAKR7QACkiwAApIuAAKSMAACkjIAApI1AAKSNgACkjcAApI4AAKSOQACkjsAApI9AAKSPgACkj8AApJBAAKSQgACkoEAApKDAAKShQACkocAApKKAAKSiwACkowAApKNAAKSjgACkpAAApKSAAKSkwACkpQAApKWAAKSlwACktYAApLYAAKS2gACktwAApLfAAKS4AACkuEAApLiAAKS4wACkuUAApLnAAKS6AACkukAApLrAAKS7AACkysAApMtAAKTLwACkzEAApM0AAKTNQACkzYAApM3AAKTOAACkzoAApM8AAKTPQACkz4AApNAAAKTQQACk4AAApOCAAKThAACk4YAApOJAAKTigACk4sAApOMAAKTjQACk48AApORAAKTkgACk5MAApOVAAKTlgACk+EAApQEAAKUJAAClEQAApRGAAKUSAAClEoAApRMAAKUTwAClFAAApRRAAKUVAAClFUAApRXAAKUWAAClFoAApRdAAKUXgAClF8AApRiAAKUYwAClGgAApR1AAKUegAClHwAApR+AAKUgwAClIYAApSJAAKUiwAClLAAApTUAAKU+wAClR8AApUiAAKVJAAClSYAApUoAAKVKgAClSwAApUtAAKVMAAClT0AApVOAAKVUAAClVIAApVUAAKVVgAClVgAApVaAAKVXAAClV4AApVvAAKVcgAClXUAApV4AAKVewAClX4AApWBAAKVhAAClYcAApWJAAKVyAAClcoAApXMAAKVzgACldEAApXSAAKV0wACldQAApXVAAKV1wACldkAApXaAAKV2wACld0AApXeAAKWHQAClh8AApYhAAKWIwACliYAApYnAAKWKAAClikAApYqAAKWLAACli4AApYvAAKWMAACljIAApYzAAKWcgAClnQAApZ3AAKWeQAClnwAApZ9AAKWfgACln8AApaAAAKWggACloQAApaFAAKWhgAClogAApaJAAKWlgAClpcAApaYAAKWmgACltkAApbbAAKW3QAClt8AApbiAAKW4wACluQAApblAAKW5gAClugAApbqAAKW6wACluwAApbuAAKW7wACly4AApcwAAKXMgAClzQAApc3AAKXOAAClzkAApc6AAKXOwAClz0AApc/AAKXQAACl0EAApdDAAKXRAACl4MAApeFAAKXhwACl4kAApeMAAKXjQACl44AApePAAKXkAACl5IAApeUAAKXlQACl5YAApeYAAKXmQACl9gAApfaAAKX3AACl94AApfhAAKX4gACl+MAApfkAAKX5QACl+cAApfpAAKX6gACl+sAApftAAKX7gACmC0AApgvAAKYMQACmDMAApg2AAKYNwACmDgAApg5AAKYOgACmDwAApg+AAKYPwACmEAAAphCAAKYQwACmGgAApiMAAKYswACmNcAApjaAAKY3AACmN4AApjgAAKY4gACmOQAApjlAAKY6AACmPUAApkEAAKZBgACmQgAApkKAAKZDAACmQ4AApkQAAKZEgACmSEAApkkAAKZJwACmSoAApktAAKZMAACmTMAApk2AAKZOAACmXcAApl5AAKZewACmX0AApmAAAKZgQACmYIAApmDAAKZhAACmYYAApmIAAKZiQACmYoAApmMAAKZjQACmcwAApnOAAKZ0AACmdIAApnVAAKZ1gACmdcAApnYAAKZ2QACmdsAApndAAKZ3gACmd8AApnhAAKZ4gACmiEAApojAAKaJQACmicAApoqAAKaKwACmiwAApotAAKaLgACmjAAApoyAAKaMwACmjQAApo2AAKaNwACmnYAApp4AAKaegACmnwAApp/AAKagAACmoEAApqCAAKagwACmoUAApqHAAKaiAACmokAApqLAAKajAACmssAAprNAAKazwACmtEAAprUAAKa1QACmtYAAprXAAKa2AACmtoAAprcAAKa3QACmt4AAprgAAKa4QACmyAAApsiAAKbJAACmyYAApspAAKbKgACmysAApssAAKbLQACmy8AApsxAAKbMgACmzMAAps1AAKbNgACm3UAApt3AAKbeQACm3sAApt+AAKbfwACm4AAApuBAAKbggACm4QAApuGAAKbhwACm4gAApuKAAKbiwACm9YAApv5AAKcGQACnDkAApw7AAKcPQACnD8AApxBAAKcRAACnEUAApxGAAKcSQACnEoAApxMAAKcTQACnE8AApxSAAKcUwACnFQAApxXAAKcWAACnF0AApxqAAKcbwACnHEAApxzAAKceAACnHsAApx+AAKcgAACnKUAApzJAAKc8AACnRQAAp0XAAKdGQACnRsAAp0dAAKdHwACnSEAAp0iAAKdJQACnTIAAp1DAAKdRQACnUcAAp1JAAKdSwACnU0AAp1PAAKdUQACnVMAAp1kAAKdZwACnWoAAp1tAAKdcAACnXMAAp12AAKdeQACnXwAAp1+AAKdvQACnb8AAp3BAAKdwwACncYAAp3HAAKdyAACnckAAp3KAAKdzAACnc4AAp3PAAKd0AACndIAAp3TAAKeEgACnhQAAp4WAAKeGAACnhsAAp4cAAKeHQACnh4AAp4fAAKeIQACniMAAp4kAAKeJQACnicAAp4oAAKeZwACnmkAAp5sAAKebgACnnEAAp5yAAKecwACnnQAAp51AAKedwACnnkAAp56AAKeewACnn0AAp5+AAKeiwACnowAAp6NAAKejwACns4AAp7QAAKe0gACntQAAp7XAAKe2AACntkAAp7aAAKe2wACnt0AAp7fAAKe4AACnuEAAp7jAAKe5AACnyMAAp8lAAKfJwACnykAAp8sAAKfLQACny4AAp8vAAKfMAACnzIAAp80AAKfNQACnzYAAp84AAKfOQACn3gAAp96AAKffAACn34AAp+BAAKfggACn4MAAp+EAAKfhQACn4cAAp+JAAKfigACn4sAAp+NAAKfjgACn80AAp/PAAKf0QACn9MAAp/WAAKf1wACn9gAAp/ZAAKf2gACn9wAAp/eAAKf3wACn+AAAp/iAAKf4wACoCIAAqAkAAKgJgACoCgAAqArAAKgLAACoC0AAqAuAAKgLwACoDEAAqAzAAKgNAACoDUAAqA3AAKgOAACoF0AAqCBAAKgqAACoMwAAqDPAAKg0QACoNMAAqDVAAKg1wACoNkAAqDaAAKg3QACoOoAAqD5AAKg+wACoP0AAqD/AAKhAQACoQMAAqEFAAKhBwACoRYAAqEZAAKhHAACoR8AAqEiAAKhJQACoSgAAqErAAKhLQACoWwAAqFuAAKhcAACoXIAAqF1AAKhdgACoXcAAqF4AAKheQACoXsAAqF9AAKhfgACoX8AAqGBAAKhggACocEAAqHDAAKhxQACoccAAqHKAAKhywACocwAAqHNAAKhzgACodAAAqHSAAKh0wACodQAAqHWAAKh1wACohYAAqIYAAKiGgACohwAAqIfAAKiIAACoiEAAqIiAAKiIwACoiUAAqInAAKiKAACoikAAqIrAAKiLAAComsAAqJtAAKibwAConEAAqJ0AAKidQAConYAAqJ3AAKieAAConoAAqJ8AAKifQACon4AAqKAAAKigQACosAAAqLCAAKixAACosYAAqLJAAKiygACossAAqLMAAKizQACos8AAqLRAAKi0gACotMAAqLVAAKi1gACoxUAAqMXAAKjGQACoxsAAqMeAAKjHwACoyAAAqMhAAKjIgACoyQAAqMmAAKjJwACoygAAqMqAAKjKwACo2oAAqNsAAKjbgACo3AAAqNzAAKjdAACo3UAAqN2AAKjdwACo3kAAqN7AAKjfAACo30AAqN/AAKjgAACo8sAAqPuAAKkDgACpC4AAqQwAAKkMgACpDQAAqQ2AAKkOQACpDoAAqQ7AAKkPgACpD8AAqRBAAKkQgACpEQAAqRHAAKkSAACpEkAAqRMAAKkTQACpFIAAqRfAAKkZAACpGYAAqRoAAKkbQACpHAAAqRzAAKkdQACpJoAAqS+AAKk5QACpQkAAqUMAAKlDgACpRAAAqUSAAKlFAACpRYAAqUXAAKlGgACpScAAqU4AAKlOgACpTwAAqU+AAKlQAACpUIAAqVEAAKlRgACpUgAAqVZAAKlXAACpV8AAqViAAKlZQACpWgAAqVrAAKlbgACpXEAAqVzAAKlsgACpbQAAqW2AAKluAACpbsAAqW8AAKlvQACpb4AAqW/AAKlwQACpcMAAqXEAAKlxQACpccAAqXIAAKmBwACpgkAAqYLAAKmDQACphAAAqYRAAKmEgACphMAAqYUAAKmFgACphgAAqYZAAKmGgACphwAAqYdAAKmXAACpl4AAqZhAAKmYwACpmYAAqZnAAKmaAACpmkAAqZqAAKmbAACpm4AAqZvAAKmcAACpnIAAqZzAAKmgAACpoEAAqaCAAKmhAACpsMAAqbFAAKmxwACpskAAqbMAAKmzQACps4AAqbPAAKm0AACptIAAqbUAAKm1QACptYAAqbYAAKm2QACpxgAAqcaAAKnHAACpx4AAqchAAKnIgACpyMAAqckAAKnJQACpycAAqcpAAKnKgACpysAAqctAAKnLgACp20AAqdvAAKncQACp3MAAqd2AAKndwACp3gAAqd5AAKnegACp3wAAqd+AAKnfwACp4AAAqeCAAKngwACp8IAAqfEAAKnxgACp8gAAqfLAAKnzAACp80AAqfOAAKnzwACp9EAAqfTAAKn1AACp9UAAqfXAAKn2AACqBcAAqgZAAKoGwACqB0AAqggAAKoIQACqCIAAqgjAAKoJAACqCYAAqgoAAKoKQACqCoAAqgsAAKoLQACqFIAAqh2AAKonQACqMEAAqjEAAKoxgACqMgAAqjKAAKozAACqM4AAqjPAAKo0gACqN8AAqjuAAKo8AACqPIAAqj0AAKo9gACqPgAAqj6AAKo/AACqQsAAqkOAAKpEQACqRQAAqkXAAKpGgACqR0AAqkgAAKpIgACqWEAAqljAAKpZQACqWcAAqlqAAKpawACqWwAAqltAAKpbgACqXAAAqlyAAKpcwACqXQAAql2AAKpdwACqbYAAqm4AAKpugACqbwAAqm/AAKpwAACqcEAAqnCAAKpwwACqcUAAqnHAAKpyAACqckAAqnLAAKpzAACqgsAAqoNAAKqDwACqhEAAqoUAAKqFQACqhYAAqoXAAKqGAACqhoAAqocAAKqHQACqh4AAqogAAKqIQACqmAAAqpiAAKqZAACqmYAAqppAAKqagACqmsAAqpsAAKqbQACqm8AAqpxAAKqcgACqnMAAqp1AAKqdgACqrUAAqq3AAKquQACqrsAAqq+AAKqvwACqsAAAqrBAAKqwgACqsQAAqrGAAKqxwACqsgAAqrKAAKqywACqwoAAqsMAAKrDgACqxAAAqsTAAKrFAACqxUAAqsWAAKrFwACqxkAAqsbAAKrHAACqx0AAqsfAAKrIAACq18AAqthAAKrYwACq2UAAqtoAAKraQACq2oAAqtrAAKrbAACq24AAqtwAAKrcQACq3IAAqt0AAKrdQACq8AAAqvjAAKsAwACrCMAAqwlAAKsJwACrCkAAqwrAAKsLgACrC8AAqwwAAKsMwACrDQAAqw2AAKsNwACrDkAAqw8AAKsPQACrD4AAqxBAAKsQgACrEcAAqxUAAKsWQACrFsAAqxdAAKsYgACrGUAAqxoAAKsagACrI8AAqyzAAKs2gACrP4AAq0BAAKtAwACrQUAAq0HAAKtCQACrQsAAq0MAAKtDwACrRwAAq0tAAKtLwACrTEAAq0zAAKtNQACrTcAAq05AAKtOwACrT0AAq1OAAKtUQACrVQAAq1XAAKtWgACrV0AAq1gAAKtYwACrWYAAq1oAAKtpwACrakAAq2rAAKtrQACrbAAAq2xAAKtsgACrbMAAq20AAKttgACrbgAAq25AAKtugACrbwAAq29AAKt/AACrf4AAq4AAAKuAgACrgUAAq4GAAKuBwACrggAAq4JAAKuCwACrg0AAq4OAAKuDwACrhEAAq4SAAKuUQACrlMAAq5WAAKuWAACrlsAAq5cAAKuXQACrl4AAq5fAAKuYQACrmMAAq5kAAKuZQACrmcAAq5oAAKudQACrnYAAq53AAKueQACrrgAAq66AAKuvAACrr4AAq7BAAKuwgACrsMAAq7EAAKuxQACrscAAq7JAAKuygACrssAAq7NAAKuzgACrw0AAq8PAAKvEQACrxMAAq8WAAKvFwACrxgAAq8ZAAKvGgACrxwAAq8eAAKvHwACryAAAq8iAAKvIwACr2IAAq9kAAKvZgACr2gAAq9rAAKvbAACr20AAq9uAAKvbwACr3EAAq9zAAKvdAACr3UAAq93AAKveAACr7cAAq+5AAKvuwACr70AAq/AAAKvwQACr8IAAq/DAAKvxAACr8YAAq/IAAKvyQACr8oAAq/MAAKvzQACsAwAArAOAAKwEAACsBIAArAVAAKwFgACsBcAArAYAAKwGQACsBsAArAdAAKwHgACsB8AArAhAAKwIgACsEcAArBrAAKwkgACsLYAArC5AAKwuwACsL0AArC/AAKwwQACsMMAArDEAAKwxwACsNQAArDjAAKw5QACsOcAArDpAAKw6wACsO0AArDvAAKw8QACsQAAArEDAAKxBgACsQkAArEMAAKxDwACsRIAArEVAAKxFwACsVYAArFYAAKxWgACsVwAArFfAAKxYAACsWEAArFiAAKxYwACsWUAArFnAAKxaAACsWkAArFrAAKxbAACsasAArGtAAKxrwACsbEAArG0AAKxtQACsbYAArG3AAKxuAACsboAArG8AAKxvQACsb4AArHAAAKxwQACsgAAArICAAKyBAACsgYAArIJAAKyCgACsgsAArIMAAKyDQACsg8AArIRAAKyEgACshMAArIVAAKyFgACslUAArJXAAKyWQACslsAArJeAAKyXwACsmAAArJhAAKyYgACsmQAArJmAAKyZwACsmgAArJqAAKyawACsqoAArKsAAKyrgACsrAAArKzAAKytAACsrUAArK2AAKytwACsrkAArK7AAKyvAACsr0AArK/AAKywAACsv8AArMBAAKzAwACswUAArMIAAKzCQACswoAArMLAAKzDAACsw4AArMQAAKzEQACsxIAArMUAAKzFQACs1QAArNWAAKzWAACs1oAArNdAAKzXgACs18AArNgAAKzYQACs2MAArNlAAKzZgACs2cAArNpAAKzagACs7UAArPYAAKz+AACtBgAArQaAAK0HAACtB4AArQgAAK0IwACtCQAArQlAAK0KAACtCkAArQrAAK0LAACtC4AArQxAAK0MgACtDMAArQ2AAK0NwACtDwAArRJAAK0TgACtFAAArRSAAK0VwACtFoAArRdAAK0XwACtIQAArSoAAK0zwACtPMAArT2AAK0+AACtPoAArT8AAK0/gACtQAAArUBAAK1BAACtREAArUiAAK1JAACtSYAArUoAAK1KgACtSwAArUuAAK1MAACtTIAArVDAAK1RgACtUkAArVMAAK1TwACtVIAArVVAAK1WAACtVsAArVdAAK1nAACtZ4AArWgAAK1ogACtaUAArWmAAK1pwACtagAArWpAAK1qwACta0AArWuAAK1rwACtbEAArWyAAK18QACtfMAArX1AAK19wACtfoAArX7AAK1/AACtf0AArX+AAK2AAACtgIAArYDAAK2BAACtgYAArYHAAK2RgACtkgAArZLAAK2TQACtlAAArZRAAK2UgACtlMAArZUAAK2VgACtlgAArZZAAK2WgACtlwAArZdAAK2agACtmsAArZsAAK2bgACtq0AAravAAK2sQACtrMAAra2AAK2twACtrgAAra5AAK2ugACtrwAAra+AAK2vwACtsAAArbCAAK2wwACtwIAArcEAAK3BgACtwgAArcLAAK3DAACtw0AArcOAAK3DwACtxEAArcTAAK3FAACtxUAArcXAAK3GAACt1cAArdZAAK3WwACt10AArdgAAK3YQACt2IAArdjAAK3ZAACt2YAArdoAAK3aQACt2oAArdsAAK3bQACt6wAAreuAAK3sAACt7IAAre1AAK3tgACt7cAAre4AAK3uQACt7sAAre9AAK3vgACt78AArfBAAK3wgACuAEAArgDAAK4BQACuAcAArgKAAK4CwACuAwAArgNAAK4DgACuBAAArgSAAK4EwACuBQAArgWAAK4FwACuDwAArhgAAK4hwACuKsAAriuAAK4sAACuLIAAri0AAK4tgACuLgAAri5AAK4vAACuMkAArjYAAK42gACuNwAArjeAAK44AACuOIAArjkAAK45gACuPUAArj4AAK4+wACuP4AArkBAAK5BAACuQcAArkKAAK5DAACuUsAArlNAAK5TwACuVEAArlUAAK5VQACuVYAArlXAAK5WAACuVoAArlcAAK5XQACuV4AArlgAAK5YQACuaAAArmiAAK5pAACuaYAArmpAAK5qgACuasAArmsAAK5rQACua8AArmxAAK5sgACubMAArm1AAK5tgACufUAArn3AAK5+QACufsAArn+AAK5/wACugAAAroBAAK6AgACugQAAroGAAK6BwACuggAAroKAAK6CwACukoAArpMAAK6TwACulEAArpUAAK6VQACulYAArpXAAK6WAACuloAArpcAAK6XQACul4AArpgAAK6YQACuqAAArqiAAK6pAACuqYAArqpAAK6qgACuqsAArqsAAK6rQACuq8AArqxAAK6sgACurMAArq1AAK6tgACuvUAArr3AAK6+QACuvsAArr+AAK6/wACuwAAArsBAAK7AgACuwQAArsGAAK7BwACuwgAArsKAAK7CwACu0oAArtMAAK7TgACu1AAArtTAAK7VAACu1UAArtWAAK7VwACu1kAArtbAAK7XAACu10AArtfAAK7YAACu6sAArvOAAK77gACvA4AArwQAAK8EgACvBQAArwWAAK8GQACvBoAArwbAAK8HgACvB8AArwhAAK8IgACvCQAArwnAAK8KAACvCkAArwsAAK8LQACvDIAArw/AAK8RAACvEYAArxIAAK8TQACvFAAArxTAAK8VQACvHoAAryeAAK8xQACvOkAArzsAAK87gACvPAAArzyAAK89AACvPYAArz3AAK8+gACvQcAAr0YAAK9GgACvRwAAr0eAAK9IAACvSIAAr0kAAK9JgACvSgAAr05AAK9PAACvT8AAr1CAAK9RQACvUgAAr1LAAK9TgACvVEAAr1TAAK9kgACvZQAAr2WAAK9mAACvZsAAr2cAAK9nQACvZ4AAr2fAAK9oQACvaMAAr2kAAK9pQACvacAAr2oAAK95wACvekAAr3rAAK97QACvfAAAr3xAAK98gACvfMAAr30AAK99gACvfgAAr35AAK9+gACvfwAAr39AAK+PAACvj4AAr5BAAK+QwACvkYAAr5HAAK+SAACvkkAAr5KAAK+TAACvk4AAr5PAAK+UAACvlIAAr5TAAK+YAACvmEAAr5iAAK+ZAACvqMAAr6lAAK+pwACvqkAAr6sAAK+rQACvq4AAr6vAAK+sAACvrIAAr60AAK+tQACvrYAAr64AAK+uQACvvgAAr76AAK+/AACvv4AAr8BAAK/AgACvwMAAr8EAAK/BQACvwcAAr8JAAK/CgACvwsAAr8NAAK/DgACv00AAr9PAAK/UQACv1MAAr9WAAK/VwACv1gAAr9ZAAK/WgACv1wAAr9eAAK/XwACv2AAAr9iAAK/YwACv6IAAr+kAAK/pgACv6gAAr+rAAK/rAACv60AAr+uAAK/rwACv7EAAr+zAAK/tAACv7UAAr+3AAK/uAACv/cAAr/5AAK/+wACv/0AAsAAAALAAQACwAIAAsADAALABAACwAYAAsAIAALACQACwAoAAsAMAALADQACwDIAAsBWAALAfQACwKEAAsCkAALApgACwKgAAsCqAALArAACwK4AAsCvAALAsgACwL8AAsDOAALA0AACwNIAAsDUAALA1gACwNgAAsDaAALA3AACwOsAAsDuAALA8QACwPQAAsD3AALA+gACwP0AAsEAAALBAgACwUEAAsFDAALBRgACwUgAAsFLAALBTAACwU0AAsFOAALBTwACwVEAAsFTAALBVAACwVUAAsFXAALBWAACwZcAAsGZAALBmwACwZ0AAsGgAALBoQACwaIAAsGjAALBpAACwaYAAsGoAALBqQACwaoAAsGsAALBrQACwewAAsHuAALB8AACwfIAAsH1AALB9gACwfcAAsH4AALB+QACwfsAAsH9AALB/gACwf8AAsIBAALCAgACwkEAAsJDAALCRgACwkgAAsJLAALCTAACwk0AAsJOAALCTwACwlEAAsJTAALCVAACwlUAAsJXAALCWAACwpcAAsKZAALCmwACwp0AAsKgAALCoQACwqIAAsKjAALCpAACwqYAAsKoAALCqQACwqoAAsKsAALCrQACwuwAAsLuAALC8AACwvIAAsL1AALC9gACwvcAAsL4AALC+QACwvsAAsL9AALC/gACwv8AAsMBAALDAgACw0EAAsNDAALDRQACw0cAAsNKAALDSwACw0wAAsNNAALDTgACw1AAAsNSAALDUwACw1QAAsNWAALDVwACw6IAAsPFAALD5QACxAUAAsQHAALECQACxAsAAsQNAALEEAACxBEAAsQSAALEFQACxBYAAsQYAALEGQACxBsAAsQeAALEHwACxCAAAsQjAALEJAACxCkAAsQ2AALEOwACxD0AAsQ/AALERAACxEcAAsRKAALETAACxHEAAsSVAALEvAACxOAAAsTjAALE5QACxOcAAsTpAALE6wACxO0AAsTuAALE8QACxP4AAsUPAALFEQACxRMAAsUVAALFFwACxRkAAsUbAALFHQACxR8AAsUwAALFMwACxTYAAsU5AALFPAACxT8AAsVCAALFRQACxUgAAsVKAALFiQACxYsAAsWNAALFjwACxZIAAsWTAALFlAACxZUAAsWWAALFmAACxZoAAsWbAALFnAACxZ4AAsWfAALF3gACxeAAAsXiAALF5AACxecAAsXoAALF6QACxeoAAsXrAALF7QACxe8AAsXwAALF8QACxfMAAsX0AALGMwACxjUAAsY4AALGOgACxj0AAsY+AALGPwACxkAAAsZBAALGQwACxkUAAsZGAALGRwACxkkAAsZKAALGVwACxlgAAsZZAALGWwACxpoAAsacAALGngACxqAAAsajAALGpAACxqUAAsamAALGpwACxqkAAsarAALGrAACxq0AAsavAALGsAACxu8AAsbxAALG8wACxvUAAsb4AALG+QACxvoAAsb7AALG/AACxv4AAscAAALHAQACxwIAAscEAALHBQACx0QAAsdGAALHSAACx0oAAsdNAALHTgACx08AAsdQAALHUQACx1MAAsdVAALHVgACx1cAAsdZAALHWgACx5kAAsebAALHnQACx58AAseiAALHowACx6QAAselAALHpgACx6gAAseqAALHqwACx6wAAseuAALHrwACx+4AAsfwAALH8gACx/QAAsf3AALH+AACx/kAAsf6AALH+wACx/0AAsf/AALIAAACyAEAAsgDAALIBAACyCkAAshNAALIdAACyJgAAsibAALInQACyJ8AAsihAALIowACyKUAAsimAALIqQACyLYAAsjFAALIxwACyMkAAsjLAALIzQACyM8AAsjRAALI0wACyOIAAsjlAALI6AACyOsAAsjuAALI8QACyPQAAsj3AALI+QACyTgAAsk6AALJPAACyT4AAslBAALJQgACyUMAAslEAALJRQACyUcAAslJAALJSgACyUsAAslNAALJTgACyY0AAsmPAALJkQACyZMAAsmWAALJlwACyZgAAsmZAALJmgACyZwAAsmeAALJnwACyaAAAsmiAALJowACyeIAAsnkAALJ5gACyegAAsnrAALJ7AACye0AAsnuAALJ7wACyfEAAsnzAALJ9AACyfUAAsn3AALJ+AACyjcAAso5AALKPAACyj4AAspBAALKQgACykMAAspEAALKRQACykcAAspJAALKSgACyksAAspNAALKTgACyo0AAsqPAALKkQACypMAAsqWAALKlwACypgAAsqZAALKmgACypwAAsqeAALKnwACyqAAAsqiAALKowACyuIAAsrkAALK5wACyukAAsrsAALK7QACyu4AAsrvAALK8AACyvIAAsr0AALK9QACyvYAAsr4AALK+QACyyAAAstfAALLYQACy2MAAstlAALLaAACy2kAAstqAALLawACy2wAAstuAALLcAACy3EAAstyAALLdAACy3UAAsvAAALL4wACzAMAAswjAALMJQACzCcAAswpAALMKwACzC4AAswvAALMMAACzDMAAsw0AALMNgACzDcAAsw5AALMPAACzD0AAsw+AALMQQACzEIAAsxHAALMVAACzFkAAsxbAALMXQACzGIAAsxlAALMaAACzGoAAsyPAALMswACzNoAAsz+AALNAQACzQMAAs0FAALNBwACzQkAAs0LAALNDAACzQ8AAs0cAALNLQACzS8AAs0xAALNMwACzTUAAs03AALNOQACzTsAAs09AALNTgACzVEAAs1UAALNVwACzVoAAs1dAALNYAACzWMAAs1mAALNaAACzacAAs2pAALNqwACza0AAs2wAALNsQACzbIAAs2zAALNtAACzbYAAs24AALNuQACzboAAs28AALNvQACzfwAAs3+AALOAAACzgIAAs4FAALOBgACzgcAAs4IAALOCQACzgsAAs4NAALODgACzg8AAs4RAALOEgACzlEAAs5TAALOVgACzlgAAs5bAALOXAACzl0AAs5eAALOXwACzmEAAs5jAALOZAACzmUAAs5nAALOaAACznUAAs52AALOdwACznkAAs64AALOugACzrwAAs6+AALOwQACzsIAAs7DAALOxAACzsUAAs7HAALOyQACzsoAAs7LAALOzQACzs4AAs8NAALPDwACzxEAAs8TAALPFgACzxcAAs8YAALPGQACzxoAAs8cAALPHgACzx8AAs8gAALPIgACzyMAAs9iAALPZAACz2YAAs9oAALPawACz2wAAs9tAALPbgACz28AAs9xAALPcwACz3QAAs91AALPdwACz3gAAs+3AALPuQACz7sAAs+9AALPwAACz8EAAs/CAALPwwACz8QAAs/GAALPyAACz8kAAs/KAALPzAACz80AAtAMAALQDgAC0BAAAtASAALQFQAC0BYAAtAXAALQGAAC0BkAAtAbAALQHQAC0B4AAtAfAALQIQAC0CIAAtBHAALQawAC0JIAAtC2AALQuQAC0LsAAtC9AALQvwAC0MEAAtDDAALQxAAC0McAAtDUAALQ4wAC0OUAAtDnAALQ6QAC0OsAAtDtAALQ7wAC0PEAAtEAAALRAwAC0QYAAtEJAALRDAAC0Q8AAtESAALRFQAC0RcAAtFWAALRWAAC0VoAAtFcAALRXwAC0WAAAtFhAALRYgAC0WMAAtFlAALRZwAC0WgAAtFpAALRawAC0WwAAtGrAALRrQAC0a8AAtGxAALRtAAC0bUAAtG2AALRtwAC0bgAAtG6AALRvAAC0b0AAtG+AALRwAAC0cEAAtIAAALSAgAC0gQAAtIGAALSCQAC0goAAtILAALSDAAC0g0AAtIPAALSEQAC0hIAAtITAALSFQAC0hYAAtJVAALSVwAC0lkAAtJbAALSXgAC0l8AAtJgAALSYQAC0mIAAtJkAALSZgAC0mcAAtJoAALSagAC0msAAtKqAALSrAAC0q4AAtKwAALSswAC0rQAAtK1AALStgAC0rcAAtK5AALSuwAC0rwAAtK9AALSvwAC0sAAAtL/AALTAQAC0wMAAtMFAALTCAAC0wkAAtMKAALTCwAC0wwAAtMOAALTEAAC0xEAAtMSAALTFAAC0xUAAtNUAALTVgAC01gAAtNaAALTXQAC014AAtNfAALTYAAC02EAAtNjAALTZQAC02YAAtNnAALTaQAC02oAAtO1AALT2AAC0/gAAtQYAALUGgAC1BwAAtQeAALUIAAC1CMAAtQkAALUJQAC1CgAAtQpAALUKwAC1CwAAtQuAALUMAAC1DEAAtQyAALUNQAC1DYAAtQ7AALUSAAC1E0AAtRPAALUUQAC1FYAAtRZAALUXAAC1F4AAtSDAALUpwAC1M4AAtTyAALU9QAC1PcAAtT5AALU+wAC1P0AAtT/AALVAAAC1QMAAtUQAALVIQAC1SMAAtUlAALVJwAC1SkAAtUrAALVLQAC1S8AAtUxAALVQgAC1UUAAtVIAALVSwAC1U4AAtVRAALVVAAC1VcAAtVaAALVXAAC1ZsAAtWdAALVnwAC1aEAAtWkAALVpQAC1aYAAtWnAALVqAAC1aoAAtWsAALVrQAC1a4AAtWwAALVsQAC1fAAAtXyAALV9AAC1fYAAtX5AALV+gAC1fsAAtX8AALV/QAC1f8AAtYBAALWAgAC1gMAAtYFAALWBgAC1kUAAtZHAALWSgAC1kwAAtZPAALWUAAC1lEAAtZSAALWUwAC1lUAAtZXAALWWAAC1lkAAtZbAALWXAAC1mkAAtZqAALWawAC1m0AAtasAALWrgAC1rAAAtayAALWtQAC1rYAAta3AALWuAAC1rkAAta7AALWvQAC1r4AAta/AALWwQAC1sIAAtcBAALXAwAC1wUAAtcHAALXCgAC1wsAAtcMAALXDQAC1w4AAtcQAALXEgAC1xMAAtcUAALXFgAC1xcAAtdWAALXWAAC11oAAtdcAALXXwAC12AAAtdhAALXYgAC12MAAtdlAALXZwAC12gAAtdpAALXawAC12wAAterAALXrQAC168AAtexAALXtAAC17UAAte2AALXtwAC17gAAte6AALXvAAC170AAte+AALXwAAC18EAAtgAAALYAgAC2AQAAtgGAALYCQAC2AoAAtgLAALYDAAC2A0AAtgPAALYEQAC2BIAAtgTAALYFQAC2BYAAtg7AALYXwAC2IYAAtiqAALYrQAC2K8AAtixAALYswAC2LUAAti3AALYuAAC2LsAAtjIAALY1wAC2NkAAtjbAALY3QAC2N8AAtjhAALY4wAC2OUAAtj0AALY9wAC2PoAAtj9AALZAAAC2QMAAtkGAALZCQAC2QsAAtlKAALZTAAC2U4AAtlQAALZUwAC2VQAAtlVAALZVgAC2VcAAtlZAALZWwAC2VwAAtldAALZXwAC2WAAAtmfAALZoQAC2aMAAtmlAALZqAAC2akAAtmqAALZqwAC2awAAtmuAALZsAAC2bEAAtmyAALZtAAC2bUAAtn0AALZ9gAC2fgAAtn6AALZ/QAC2f4AAtn/AALaAAAC2gEAAtoDAALaBQAC2gYAAtoHAALaCQAC2goAAtpJAALaSwAC2k4AAtpQAALaUwAC2lQAAtpVAALaVgAC2lcAAtpZAALaWwAC2lwAAtpdAALaXwAC2mAAAtqfAALaoQAC2qMAAtqlAALaqAAC2qkAAtqqAALaqwAC2qwAAtquAALasAAC2rEAAtqyAALatAAC2rUAAtr0AALa9gAC2vgAAtr6AALa/QAC2v4AAtr/AALbAAAC2wEAAtsDAALbBQAC2wYAAtsHAALbCQAC2woAAttJAALbSwAC200AAttPAALbUgAC21MAAttUAALbVQAC21YAAttYAALbWgAC21sAAttcAALbXgAC218AAtuqAALbzQAC2+0AAtwNAALcDwAC3BE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AAub7AALm/QAC5v4AAub/AALnAQAC5wIAAudBAALnQwAC50UAAudHAALnSgAC50sAAudMAALnTQAC504AAudQAALnUgAC51MAAudUAALnVgAC51cAAueWAALnmAAC55oAAuecAALnnwAC56AAAuehAALnogAC56MAAuelAALnpwAC56gAAuepAALnqwAC56wAAufrAALn7QAC5+8AAufxAALn9AAC5/UAAuf2AALn9wAC5/gAAuf6AALn/AAC5/0AAuf+AALoAAAC6AEAAugmAALoSgAC6HEAAuiVAALomAAC6JoAAuicAALongAC6KAAAuiiAALoowAC6KYAAuizAALowgAC6MQAAujGAALoyAAC6MoAAujMAALozgAC6NAAAujfAALo4gAC6OUAAujoAALo6wAC6O4AAujxAALo9AAC6PYAAuk1AALpNwAC6TkAAuk7AALpPgAC6T8AAulAAALpQQAC6UIAAulEAALpRgAC6UcAAulIAALpSgAC6UsAAumKAALpjAAC6Y4AAumQAALpkwAC6ZQAAumVAALplgAC6ZcAAumZAALpmwAC6ZwAAumdAALpnwAC6aAAAunfAALp4QAC6eMAAunlAALp6AAC6ekAAunqAALp6wAC6ewAAunuAALp8AAC6fEAAunyAALp9AAC6fUAAuo0AALqNgAC6jkAAuo7AALqPgAC6j8AAupAAALqQQAC6kIAAupEAALqRgAC6kcAAupIAALqSgAC6ksAAuqKAALqjAAC6o4AAuqQAALqkwAC6pQAAuqVAALqlgAC6pcAAuqZAALqmwAC6pwAAuqdAALqnwAC6qAAAurfAALq4QAC6uMAAurlAALq6AAC6ukAAurqAALq6wAC6uwAAuruAALq8AAC6vEAAuryAALq9AAC6vUAAus0AALrNgAC6zgAAus6AALrPQAC6z4AAus/AALrQAAC60EAAutDAALrRQAC60YAAutHAALrSQAC60oAAutTAALrVAAC61YAAuuVAALrlwAC65kAAuubAALrngAC658AAuugAALroQAC66IAAuukAALrpwAC66gAAuupAALrqwAC66wAAuvrAALr7QAC6+8AAuvxAALr9AAC6/UAAuv2AALr9wAC6/gAAuv6AALr/QAC6/4AAuv/AALsAQAC7AIAAuxBAALsQwAC7EYAAuxIAALsSwAC7Ew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AAvegAAL3ogAC96MAAvekAAL3pgAC96cAAvfmAAL36AAC9+oAAvfsAAL37wAC9/AAAvfxAAL38gAC9/MAAvf1AAL39wAC9/gAAvf5AAL3+wAC9/wAAvg7AAL4PQAC+D8AAvhBAAL4RAAC+EUAAvhGAAL4RwAC+EgAAvhKAAL4TAAC+E0AAvhOAAL4UAAC+FEAAviQAAL4kgAC+JQAAviWAAL4mQAC+JoAAvibAAL4nAAC+J0AAvifAAL4oQAC+KIAAvijAAL4pQAC+KYAAvjlAAL45wAC+OkAAvjrAAL47gAC+O8AAvjwAAL48QAC+PIAAvj0AAL49gAC+PcAAvj4AAL4+gAC+PsAAvkgAAL5RAAC+WsAAvmPAAL5kgAC+ZQAAvmWAAL5mAAC+ZoAAvmcAAL5nQAC+aAAAvmtAAL5vAAC+b4AAvnAAAL5wgAC+cQAAvnGAAL5yAAC+coAAvnZAAL53AAC+d8AAvniAAL55QAC+egAAvnrAAL57gAC+fAAAvovAAL6MQAC+jMAAvo1AAL6OAAC+jkAAvo6AAL6OwAC+jwAAvo+AAL6QAAC+kEAAvpCAAL6RAAC+kUAAvqEAAL6hgAC+ogAAvqKAAL6jQAC+o4AAvqPAAL6kAAC+pEAAvqTAAL6lQAC+pYAAvqXAAL6mQAC+poAAvrZAAL62wAC+t0AAvrfAAL64gAC+uMAAvrkAAL65QAC+uYAAvroAAL66gAC+usAAvrsAAL67gAC+u8AAvsuAAL7MAAC+zIAAvs0AAL7NwAC+zgAAvs5AAL7OgAC+zsAAvs9AAL7PwAC+0AAAvtBAAL7QwAC+0QAAvuDAAL7hQAC+4cAAvuJAAL7jAAC+40AAvuOAAL7jwAC+5AAAvuSAAL7lAAC+5UAAvuWAAL7mAAC+5kAAvvYAAL72gAC+9wAAvveAAL74QAC++IAAvvjAAL75AAC++UAAvvnAAL76QAC++oAAvvrAAL77QAC++4AAvwtAAL8LwAC/DEAAvwzAAL8NgAC/DcAAvw4AAL8OQAC/DoAAvw8AAL8PgAC/D8AAvxAAAL8QgAC/EMAAvyOAAL8sQAC/NEAAvzxAAL88wAC/PUAAvz3AAL8+QAC/PsAAvz8AAL8/QAC/QAAAv0BAAL9AwAC/QQAAv0GAAL9CQAC/QoAAv0LAAL9DgAC/Q8AAv0UAAL9IQAC/SYAAv0oAAL9KgAC/S8AAv0yAAL9NQAC/TcAAv1cAAL9gAAC/acAAv3LAAL9zgAC/dAAAv3SAAL91AAC/dYAAv3YAAL92QAC/dwAAv3pAAL9+gAC/fwAAv3+AAL+AAAC/gIAAv4EAAL+BgAC/ggAAv4KAAL+GwAC/h4AAv4hAAL+JAAC/icAAv4qAAL+LQAC/jAAAv4zAAL+NQAC/nQAAv52AAL+eAAC/noAAv59AAL+fgAC/n8AAv6AAAL+gQAC/oMAAv6FAAL+hgAC/ocAAv6JAAL+igAC/skAAv7LAAL+zQAC/s8AAv7SAAL+0wAC/tQAAv7VAAL+1gAC/tgAAv7aAAL+2wAC/twAAv7eAAL+3wAC/x4AAv8gAAL/IwAC/yUAAv8oAAL/KQAC/yoAAv8rAAL/LAAC/y4AAv8wAAL/MQAC/zIAAv80AAL/NQAC/0IAAv9DAAL/RAAC/0YAAv+FAAL/hwAC/4kAAv+LAAL/jgAC/48AAv+QAAL/kQAC/5IAAv+UAAL/lgAC/5cAAv+YAAL/mgAC/5sAAv/aAAL/3AAC/94AAv/gAAL/4wAC/+QAAv/lAAL/5gAC/+cAAv/pAAL/6wAC/+wAAv/tAAL/7wAC//AAAwAvAAMAMQADADMAAwA1AAMAOAADADkAAwA6AAMAOwADADwAAwA+AAMAQAADAEEAAwBCAAMARAADAEUAAwCEAAMAhgADAIgAAwCKAAMAjQADAI4AAwCPAAMAkAADAJEAAwCTAAMAlQADAJYAAwCXAAMAmQADAJoAAwDZAAMA2wADAN0AAwDfAAMA4gADAOMAAwDkAAMA5QADAOYAAwDoAAMA6gADAOsAAwDsAAMA7gADAO8AAwEUAAMBOAADAV8AAwGDAAMBhgADAYgAAwGKAAMBjAADAY4AAwGQAAMBkQADAZQAAwGhAAMBsAADAbIAAwG0AAMBtgADAbgAAwG6AAMBvAADAb4AAwHNAAMB0AADAdMAAwHWAAMB2QADAdwAAwHfAAMB4gADAeQAAwIjAAMCJQADAicAAwIpAAMCLAADAi0AAwIuAAMCLwADAjAAAwIyAAMCNAADAjUAAwI2AAMCOAADAjkAAwJ4AAMCegADAnwAAwJ+AAMCgQADAoIAAwKDAAMChAADAoUAAwKHAAMCiQADAooAAwKLAAMCjQADAo4AAwLNAAMCzwADAtEAAwLTAAMC1gADAtcAAwLYAAMC2QADAtoAAwLcAAMC3gADAt8AAwLgAAMC4gADAuMAAwMiAAMDJAADAyYAAwMoAAMDKwADAywAAwMtAAMDLgADAy8AAwMxAAMDMwADAzQAAwM1AAMDNwADAzgAAwN3AAMDeQADA3sAAwN9AAMDgAADA4EAAwOCAAMDgwADA4QAAwOGAAMDiAADA4kAAwOKAAMDjAADA40AAwPMAAMDzgADA9AAAwPSAAMD1QADA9YAAwPXAAMD2AADA9kAAwPbAAMD3QADA94AAwPfAAMD4QADA+IAAwQhAAMEIwADBCUAAwQnAAMEKgADBCsAAwQsAAMELQADBC4AAwQwAAMEMgADBDMAAwQ0AAMENgADBDcAAwSCAAMEpQADBMUAAwTlAAME5wADBOkAAwTrAAME7QADBO8AAwTwAAME8QADBPQAAwT1AAME9wADBPgAAwT6AAME/QADBP4AAwT/AAMFAgADBQMAAwUIAAMFFQADBRoAAwUcAAMFHgADBSMAAwUmAAMFKQADBSsAAwVQAAMFdAADBZsAAwW/AAMFwgADBcQAAwXGAAMFyAADBcoAAwXMAAMFzQADBdAAAwXdAAMF7gADBfAAAwXyAAMF9AADBfYAAwX4AAMF+gADBfwAAwX+AAMGDwADBhIAAwYVAAMGGAADBhsAAwYeAAMGIQADBiQAAwYnAAMGKQADBmgAAwZqAAMGbAADBm4AAwZxAAMGcgADBnMAAwZ0AAMGdQADBncAAwZ5AAMGegADBnsAAwZ9AAMGfgADBr0AAwa/AAMGwQADBsMAAwbGAAMGxwADBsgAAwbJAAMGygADBswAAwbOAAMGzwADBtAAAwbSAAMG0wADBxIAAwcUAAMHFwADBxkAAwccAAMHHQADBx4AAwcfAAMHIAADByIAAwckAAMHJQADByYAAwcoAAMHKQADBzYAAwc3AAMHOAADBzoAAwd5AAMHewADB30AAwd/AAMHggADB4MAAweEAAMHhQADB4YAAweIAAMHigADB4sAAweMAAMHjgADB48AAwfOAAMH0AADB9IAAwfUAAMH1wADB9gAAwfZAAMH2gADB9sAAwfdAAMH3wADB+AAAwfhAAMH4wADB+QAAwgjAAMIJQADCCcAAwgpAAMILAADCC0AAwguAAMILwADCDAAAwgyAAMINAADCDUAAwg2AAMIOAADCDkAAwh4AAMIegADCHwAAwh+AAMIgQADCIIAAwiDAAMIhAADCIUAAwiHAAMIiQADCIoAAwiLAAMIjQADCI4AAwjNAAMIzwADCNEAAwjTAAMI1gADCNcAAwjYAAMI2QADCNoAAwjcAAMI3gADCN8AAwjgAAMI4gADCOMAAwkIAAMJLAADCVMAAwl3AAMJegADCXwAAwl+AAMJgAADCYIAAwmEAAMJhQADCYgAAwmVAAMJpAADCaYAAwmoAAMJqgADCawAAwmuAAMJsAADCbIAAwnBAAMJxAADCccAAwnKAAMJzQADCdAAAwnTAAMJ1gADCdgAAwoXAAMKGQADChsAAwodAAMKIAADCiEAAwoiAAMKIwADCiQAAwomAAMKKAADCikAAwoqAAMKLAADCi0AAwpsAAMKbgADCnAAAwpyAAMKdQADCnYAAwp3AAMKeAADCnkAAwp7AAMKfQADCn4AAwp/AAMKgQADCoIAAwrBAAMKwwADCsUAAwrHAAMKygADCssAAwrMAAMKzQADCs4AAwrQAAMK0gADCtMAAwrUAAMK1gADCtcAAwsWAAMLGAADCxsAAwsdAAMLIAADCyEAAwsiAAMLIwADCyQAAwsmAAMLKAADCykAAwsqAAMLLAADCy0AAwtsAAMLbgADC3AAAwtyAAMLdQADC3YAAwt3AAMLeAADC3kAAwt7AAMLfQADC34AAwt/AAMLgQADC4IAAwvBAAMLwwADC8UAAwvHAAMLygADC8sAAwvMAAMLzQADC84AAwvQAAML0gADC9MAAwvUAAML1gADC9cAAwwWAAMMGAADDBoAAwwcAAMMHwADDCAAAwwhAAMMIgADDCMAAwwlAAMMJwADDCgAAwwpAAMMKwADDCwAAww1AAMMNgADDDgAAwx7AAMMnwADDMMAAwzmAAMNDQADDS0AAw1UAAMNewADDZsAAw2/AAMN4wADDeUAAw3oAAMN6gADDewAAw3uAAMN8QADDfMAAw31AAMN9wADDfkAAw37AAMN/QADDgAAAw4DAAMOBAADDgkAAw4WAAMOGQADDhsAAw4eAAMOIQADDiMAAw5IAAMObAADDpMAAw63AAMOugADDrwAAw6+AAMOwAADDsIAAw7EAAMOxQADDsgAAw7VAAMO6AADDuoAAw7sAAMO7gADDvAAAw7yAAMO9AADDvYAAw74AAMO+gADDw0AAw8QAAMPEwADDxYAAw8ZAAMPHAADDx8AAw8iAAMPJQADDygAAw8qAAMPaQADD2sAAw9uAAMPcAADD3MAAw90AAMPdQADD3YAAw93AAMPeQADD3sAAw98AAMPfQADD38AAw+AAAMPiQADD4oAAw+MAAMPywADD80AAw/PAAMP0QADD9QAAw/VAAMP1gADD9cAAw/YAAMP2gADD9wAAw/dAAMP3gADD+AAAw/hAAMQIAADECIAAxAlAAMQJwADECoAAxArAAMQLAADEC0AAxAuAAMQMAADEDIAAxAzAAMQNAADEDYAAxA3AAMQQAADEEEAAxBDAAMQggADEIQAAxCGAAMQiAADEIsAAxCMAAMQjQADEI4AAxCPAAMQkQADEJMAAxCUAAMQlQADEJcAAxCYAAMQ1wADENkAAxDcAAMQ3gADEOEAAxDiAAMQ4wADEOQAAxDlAAMQ5wADEOkAAxDqAAMQ6wADEO0AAxDuAAMQ9wADEPgAAxD6AAMROQADETsAAxE9AAMRPwADEUIAAxFDAAMRRAADEUUAAxFGAAMRSAADEUoAAxFLAAMRTAADEU4AAxFPAAMRjgADEZAAAxGTAAMRlQADEZgAAxGZAAMRmgADEZsAAxGcAAMRngADEaAAAxGhAAMRogADEaQAAxGlAAMRsgADEbMAAxG0AAMRtgADEfUAAxH3AAMR+QADEfsAAxH+AAMR/wADEgAAAxIBAAMSAgADEgQAAxIGAAMSBwADEggAAxIKAAMSCwADEkoAAxJMAAMSTgADElAAAxJTAAMSVAADElUAAxJWAAMSVwADElkAAxJbAAMSXAADEl0AAxJfAAMSYAADEm0AAxJ+AAMSgQADEoQAAxKHAAMSigADEo0AAxKQAAMSkwADEpUAAxKmAAMSqQADEqwAAxKvAAMSsgADErUAAxK4AAMSuwADEr4AAxLAAAMSxwADEs4AAxLdAAMS6AADEvQAAxM/AAMTYgADE4IAAxOiAAMTpAADE6YAAxOoAAMTqgADE60AAxOuAAMTrwADE7IAAxOzAAMTtQADE7YAAxO4AAMTuwADE7wAAxO9AAMTwAADE8EAAxPGAAMT0wADE9gAAxPaAAMT3AADE+EAAxPkAAMT5wADE+kAAxQOAAMUMgADFFkAAxR9AAMUgAADFIIAAxSEAAMUhgADFIgAAxSKAAMUiwADFI4AAxSbAAMUrAADFK4AAxSwAAMUsgADFLQAAxS2AAMUuAADFLoAAxS8AAMUzQADFNAAAxTTAAMU1gADFNkAAxTcAAMU3wADFOIAAxTlAAMU5wADFSYAAxUoAAMVKgADFSwAAxUvAAMVMAADFTEAAxUyAAMVMwADFTUAAxU3AAMVOAADFTkAAxU7AAMVPAADFXsAAxV9AAMVfwADFYEAAxWEAAMVhQADFYYAAxWHAAMViAADFYoAAxWMAAMVjQADFY4AAxWQAAMVkQADFdAAAxXSAAMV1QADFdcAAxXaAAMV2wADFdwAAxXdAAMV3gADFeAAAxXiAAMV4wADFeQAAxXmAAMV5wADFfQAAxX1AAMV9gADFfgAAxY3AAMWOQADFjsAAxY9AAMWQAADFkEAAxZCAAMWQwADFkQAAxZGAAMWSAADFkkAAxZKAAMWTAADFk0AAxaMAAMWjgADFpAAAxaSAAMWlQADFpYAAxaXAAMWmAADFpkAAxabAAMWnQADFp4AAxafAAMWoQADFqIAAxbhAAMW4wADFuUAAxbnAAMW6gADFusAAxbsAAMW7QADFu4AAxbwAAMW8gADFvMAAxb0AAMW9gADFvcAAxc2AAMXOAADFzoAAxc8AAMXPwADF0AAAxdBAAMXQgADF0MAAxdFAAMXRwADF0gAAxdJAAMXSwADF0wAAxeLAAMXjQADF48AAxeRAAMXlAADF5UAAxeWAAMXlwADF5gAAxeaAAMXnAADF50AAxeeAAMXoAADF6EAAxfGAAMX6gADGBEAAxg1AAMYOAADGDoAAxg8AAMYPgADGEAAAxhCAAMYQwADGEYAAxhTAAMYYgADGGQAAxhmAAMYaAADGGoAAxhsAAMYbgADGHAAAxh/AAMYggADGIUAAxiIAAMYiwADGI4AAxiRAAMYlAADGJYAAxjVAAMY1wADGNkAAxjbAAMY3gADGN8AAxjgAAMY4QADGOIAAxjkAAMY5gADGOcAAxjoAAMY6gADGOsAAxkqAAMZLAADGS4AAxkwAAMZMwADGTQAAxk1AAMZNgADGTcAAxk5AAMZOwADGTwAAxk9AAMZPwADGUAAAxl/AAMZgQADGYMAAxmFAAMZiAADGYkAAxmKAAMZiwADGYwAAxmOAAMZkAADGZEAAxmSAAMZlAADGZUAAxnUAAMZ1gADGdk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AAyU+AAMlQAADJUEAAyVCAAMlRAADJUUAAyWEAAMlhgADJYgAAyWKAAMljQADJY4AAyWPAAMlkAADJZEAAyWTAAMllQADJZYAAyWXAAMlmQADJZoAAyXZAAMl2wADJd4AAyXgAAMl4wADJeQAAyXlAAMl5gADJecAAyXpAAMl6wADJewAAyXtAAMl7wADJfAAAyX9AAMl/gADJf8AAyYBAAMmQAADJkIAAyZEAAMmRgADJkkAAyZKAAMmSwADJkwAAyZNAAMmTwADJlEAAyZSAAMmUwADJlUAAyZWAAMmlQADJpcAAyaZAAMmmwADJp4AAyafAAMmoAADJqEAAyaiAAMmpAADJqYAAyanAAMmqAADJqoAAyarAAMm6gADJuwAAybuAAMm8AADJvMAAyb0AAMm9QADJvYAAyb3AAMm+QADJvsAAyb8AAMm/QADJv8AAycAAAMnPwADJ0EAAydDAAMnRQADJ0gAAydJAAMnSgADJ0sAAydMAAMnTgADJ1AAAydRAAMnUgADJ1QAAydVAAMnlAADJ5YAAyeYAAMnmgADJ50AAyeeAAMnnwADJ6AAAyehAAMnowADJ6UAAyemAAMnpwADJ6kAAyeqAAMnzwADJ/MAAygaAAMoPgADKEEAAyhDAAMoRQADKEcAAyhJAAMoSwADKEwAAyhPAAMoXAADKGsAAyhtAAMobwADKHEAAyhzAAModQADKHcAAyh5AAMoiAADKIsAAyiOAAMokQADKJQAAyiXAAMomgADKJ0AAyifAAMo3gADKOAAAyjiAAMo5AADKOcAAyjoAAMo6QADKOoAAyjrAAMo7QADKO8AAyjwAAMo8QADKPMAAyj0AAMpMwADKTUAAyk3AAMpOQADKTwAAyk9AAMpPgADKT8AAylAAAMpQgADKUQAAylFAAMpRgADKUgAAylJAAMpiAADKYoAAymMAAMpjgADKZEAAymSAAMpkwADKZQAAymVAAMplwADKZkAAymaAAMpmwADKZ0AAymeAAMp3QADKd8AAynhAAMp4wADKeYAAynnAAMp6AADKekAAynqAAMp7AADKe4AAynvAAMp8AADKfIAAynzAAMqMgADKjQAAyo2AAMqOAADKjsAAyo8AAMqPQADKj4AAyo/AAMqQQADKkMAAypEAAMqRQADKkcAAypIAAMqhwADKokAAyqLAAMqjQADKpAAAyqRAAMqkgADKpMAAyqUAAMqlgADKpgAAyqZAAMqmgADKpwAAyqdAAMq3AADKt4AAyrgAAMq4gADKuUAAyrmAAMq5wADKugAAyrpAAMq6wADKu0AAyruAAMq7wADKvEAAyryAAMrPQADK2AAAyuAAAMroAADK6IAAyukAAMrpgADK6gAAyurAAMrrAADK60AAyuwAAMrsQADK7MAAyu0AAMrtgADK7kAAyu6AAMruwADK74AAyu/AAMrxAADK9EAAyvWAAMr2AADK9oAAyvfAAMr4gADK+UAAyvnAAMsDAADLDAAAyxXAAMsewADLH4AAyyAAAMsggADLIQAAyyGAAMsiAADLIkAAyyMAAMsmQADLKoAAyysAAMsrgADLLAAAyyyAAMstAADLLYAAyy4AAMsugADLMsAAyzOAAMs0QADLNQAAyzXAAMs2gADLN0AAyzgAAMs4wADLOUAAy0kAAMtJgADLSgAAy0qAAMtLQADLS4AAy0vAAMtMAADLTEAAy0zAAMtNQADLTYAAy03AAMtOQADLToAAy15AAMtewADLX0AAy1/AAMtggADLYMAAy2EAAMthQADLYYAAy2IAAMtigADLYsAAy2MAAMtjgADLY8AAy3OAAMt0AADLdMAAy3VAAMt2AADLdkAAy3aAAMt2wADLdwAAy3eAAMt4AADLeEAAy3iAAMt5AADLeUAAy3yAAMt8wADLfQAAy32AAMuNQADLjcAAy45AAMuOwADLj4AAy4/AAMuQAADLkEAAy5CAAMuRAADLkYAAy5HAAMuSAADLkoAAy5LAAMuigADLowAAy6OAAMukAADLpMAAy6UAAMulQADLpYAAy6XAAMumQADLpsAAy6cAAMunQADLp8AAy6gAAMu3wADLuEAAy7jAAMu5QADLugAAy7pAAMu6gADLusAAy7sAAMu7gADLvAAAy7xAAMu8gADLvQAAy71AAMvNAADLzYAAy84AAMvOgADLz0AAy8+AAMvPwADL0AAAy9BAAMvQwADL0UAAy9GAAMvRwADL0kAAy9KAAMviQADL4sAAy+NAAMvjwADL5IAAy+TAAMvlAADL5UAAy+WAAMvmAADL5oAAy+bAAMvnAADL54AAy+fAAMvxAADL+gAAzAPAAMwMwADMDYAAzA4AAMwOgADMDwAAzA+AAMwQAADMEEAAzBEAAMwUQADMGAAAzBiAAMwZAADMGYAAzBoAAMwagADMGwAAzBuAAMwfQADMIAAAzCDAAMwhgADMIkAAzCMAAMwjwADMJIAAzCUAAMw0wADMNUAAzDXAAMw2QADMNwAAzDdAAMw3gADMN8AAzDgAAMw4gADMOQAAzDlAAMw5gADMOgAAzDpAAMxKAADMSoAAzEsAAMxLgADMTEAAzEyAAMxMwADMTQAAzE1AAMxNwADMTkAAzE6AAMxOwADMT0AAzE+AAMxfQADMX8AAzGBAAMxgwADMYYAAzGHAAMxiAADMYkAAzGKAAMxjAADMY4AAzGPAAMxkAADMZIAAzGTAAMx0gADMdQAAzHXAAMx2QADMdwAAzHdAAMx3gADMd8AAzHgAAMx4gADMeQAAzHlAAMx5gADMegAAzHpAAMyKAADMioAAzIsAAMyLgADMjEAAzIyAAMyMwADMjQAAzI1AAMyNwADMjkAAzI6AAMyOwADMj0AAzI+AAMyfQADMn8AAzKBAAMygwADMoYAAzKHAAMyiAADMokAAzKKAAMyjAADMo4AAzKPAAMykAADMpIAAzKTAAMy0gADMtQAAzLWAAMy2AADMtsAAzLcAAMy3QADMt4AAzLfAAMy4QADMuMAAzLkAAMy5QADMucAAzLoAAMzMwADM1YAAzN2AAMzlgADM5gAAzOaAAMznAADM54AAzOhAAMzogADM6MAAzOmAAMzpwADM6kAAzOqAAMzrAADM68AAzOwAAMzsQADM7QAAzO1AAMzugADM8cAAzPMAAMzzgADM9AAAzPVAAMz2AADM9sAAzPdAAM0AgADNCYAAzRNAAM0cQADNHQAAzR2AAM0eAADNHoAAzR8AAM0fgADNH8AAzSCAAM0jwADNKAAAzSiAAM0pAADNKYAAzSoAAM0qgADNKwAAzSuAAM0sAADNMEAAzTEAAM0xwADNMoAAzTNAAM00AADNNMAAzTWAAM02QADNNsAAzUaAAM1HAADNR4AAzUgAAM1IwADNSQAAzUlAAM1JgADNScAAzUpAAM1KwADNSwAAzUtAAM1LwADNTAAAzVvAAM1cQADNXMAAzV1AAM1eAADNXkAAzV6AAM1ewADNXwAAzV+AAM1gAADNYEAAzWCAAM1hAADNYUAAzXEAAM1xgADNckAAzXLAAM1zgADNc8AAzXQAAM10QADNdIAAzXUAAM11gADNdcAAzXYAAM12gADNdsAAzXoAAM16QADNeoAAzXsAAM2KwADNi0AAzYvAAM2MQADNjQAAzY1AAM2NgADNjcAAzY4AAM2OgADNjwAAzY9AAM2PgADNkAAAzZBAAM2gAADNoIAAzaEAAM2hgADNokAAzaKAAM2iwADNowAAzaNAAM2jwADNpEAAzaSAAM2kwADNpUAAzaWAAM21QADNtcAAzbZAAM22wADNt4AAzbfAAM24AADNuEAAzbiAAM25AADNuYAAzbnAAM26AADNuoAAzbrAAM3KgADNywAAzcuAAM3MAADNzMAAzc0AAM3NQADNzYAAzc3AAM3OQADNzsAAzc8AAM3PQADNz8AAzdAAAM3fwADN4EAAzeDAAM3hQADN4gAAzeJAAM3igADN4sAAzeMAAM3jgADN5AAAzeRAAM3kgADN5QAAzeVAAM3ugADN94AAzgFAAM4KQADOCwAAzguAAM4MAADODIAAzg0AAM4NgADODcAAzg6AAM4RwADOFYAAzhYAAM4WgADOFwAAzheAAM4YAADOGIAAzhkAAM4cwADOHYAAzh5AAM4fAADOH8AAziCAAM4hQADOIgAAziKAAM4yQADOMsAAzjNAAM4zwADONIAAzjTAAM41AADONUAAzjWAAM42AADONoAAzjbAAM43AADON4AAzjfAAM5HgADOSAAAzkiAAM5JAADOScAAzkoAAM5KQADOSoAAzkrAAM5LQADOS8AAzkwAAM5MQADOTMAAzk0AAM5cwADOXUAAzl3AAM5eQADOXwAAzl9AAM5fgADOX8AAzmAAAM5ggADOYQAAzmFAAM5hgADOYgAAzmJAAM5yAADOcoAAznMAAM5zgADOdEAAznSAAM50wADOdQAAznVAAM51wADOdkAAznaAAM52wADOd0AAzneAAM6HQADOh8AAzohAAM6IwADOiYAAzonAAM6KAADOikAAzoqAAM6LAADOi4AAzovAAM6MAADOjIAAzozAAM6cgADOnQAAzp2AAM6eAADOnsAAzp8AAM6fQADOn4AAzp/AAM6gQADOoMAAzqEAAM6hQADOocAAzqIAAM6xwADOskAAzrLAAM6zQADOtAAAzrRAAM60gADOtMAAzrUAAM61gADOtgAAzrZAAM62gADOtwAAzrdAAM7KAADO0sAAztrAAM7iwADO40AAzuPAAM7kQADO5MAAzuWAAM7lwADO5gAAzubAAM7nAADO54AAzufAAM7oQADO6QAAzulAAM7pgADO6kAAzuqAAM7rwADO7wAAzvBAAM7wwADO8UAAzvKAAM7zQADO9AAAzvSAAM79wADPBsAAzxCAAM8ZgADPGkAAzxrAAM8bQADPG8AAzxxAAM8cwADPHQAAzx3AAM8hAADPJUAAzyXAAM8mQADPJsAAzydAAM8nwADPKEAAzyjAAM8pQADPLYAAzy5AAM8vAADPL8AAzzCAAM8xQADPMgAAzzLAAM8zgADPNAAAz0PAAM9EQADPRMAAz0VAAM9GAADPRkAAz0aAAM9GwADPRwAAz0eAAM9IAADPSEAAz0iAAM9JAADPSUAAz1kAAM9ZgADPWgAAz1qAAM9bQADPW4AAz1vAAM9cAADPXEAAz1zAAM9dQADPXYAAz13AAM9eQADPXoAAz25AAM9uwADPb4AAz3AAAM9wwADPcQAAz3FAAM9xgADPccAAz3JAAM9ywADPcwAAz3NAAM9zwADPdAAAz3dAAM93gADPd8AAz3hAAM+IAADPiIAAz4kAAM+JgADPikAAz4qAAM+KwADPiwAAz4tAAM+LwADPjEAAz4yAAM+MwADPjUAAz42AAM+dQADPncAAz55AAM+ewADPn4AAz5/AAM+gAADPoEAAz6CAAM+hAADPoYAAz6HAAM+iAADPooAAz6LAAM+ygADPswAAz7OAAM+0AADPtMAAz7UAAM+1QADPtYAAz7XAAM+2QADPtsAAz7cAAM+3QADPt8AAz7gAAM/HwADPyEAAz8jAAM/JQADPygAAz8pAAM/KgADPysAAz8sAAM/LgADPzAAAz8xAAM/MgADPzQAAz81AAM/dAADP3YAAz94AAM/egADP30AAz9+AAM/fwADP4AAAz+BAAM/gwADP4UAAz+GAAM/hwADP4kAAz+KAAM/rwADP9MAAz/6AANAHgADQCEAA0AjAANAJQADQCcAA0ApAANAKwADQCwAA0AvAANAPAADQEsAA0BNAANATwADQFEAA0BTAANAVQADQFcAA0BZAANAaAADQGsAA0BuAANAcQADQHQAA0B3AANAegADQH0AA0B/AANAvgADQMAAA0DCAANAxAADQMcAA0DIAANAyQADQMoAA0DLAANAzQADQM8AA0DQAANA0QADQNMAA0DUAANBEwADQRUAA0EXAANBGQADQRwAA0EdAANBHgADQR8AA0EgAANBIgADQSQAA0ElAANBJgADQSgAA0EpAANBaAADQWoAA0FsAANBbgADQXEAA0FyAANBcwADQXQAA0F1AANBdwADQXkAA0F6AANBewADQX0AA0F+AANBvQADQb8AA0HCAANBxAADQccAA0HIAANByQADQcoAA0HLAANBzQADQc8AA0HQAANB0QADQdMAA0HUAANCEwADQhUAA0IXAANCGQADQhwAA0IdAANCHgADQh8AA0IgAANCIgADQiQAA0IlAANCJgADQigAA0IpAANCaAADQmoAA0JsAANCbgADQnEAA0JyAANCcwADQnQAA0J1AANCdwADQnkAA0J6AANCewADQn0AA0J+AANCvQADQr8AA0LBAANCwwADQsYAA0LHAANCyAADQskAA0LKAANCzAADQs4AA0LPAANC0AADQtIAA0LTAANDHgADQ0EAA0NhAANDgQADQ4MAA0OFAANDhwADQ4kAA0OMAANDjQADQ44AA0ORAANDkgADQ5QAA0OVAANDlwADQ5oAA0ObAANDnAADQ58AA0OgAANDpQADQ7IAA0O3AANDuQADQ7sAA0PAAANDwwADQ8YAA0PIAAND7QADRBEAA0Q4AANEXAADRF8AA0RhAANEYwADRGUAA0RnAANEaQADRGoAA0RtAANEegADRIsAA0SNAANEjwADRJEAA0STAANElQADRJcAA0SZAANEmwADRKwAA0SvAANEsgADRLUAA0S4AANEuwADRL4AA0TBAANExAADRMYAA0UFAANFBwADRQkAA0ULAANFDgADRQ8AA0UQAANFEQADRRIAA0UUAANFFgADRRcAA0UYAANFGgADRRsAA0VaAANFXAADRV4AA0VgAANFYwADRWQAA0VlAANFZgADRWcAA0VpAANFawADRWwAA0VtAANFbwADRXAAA0WvAANFsQADRbQAA0W2AANFuQADRboAA0W7AANFvAADRb0AA0W/AANFwQADRcIAA0XDAANFxQADRcYAA0XTAANF1AADRdUAA0XXAANGFgADRhgAA0YaAANGHAADRh8AA0YgAANGIQADRiIAA0YjAANGJQADRicAA0YoAANGKQADRisAA0YsAANGawADRm0AA0ZvAANGcQADRnQAA0Z1AANGdgADRncAA0Z4AANGegADRnwAA0Z9AANGfgADRoAAA0aBAANGwAADRsIAA0bEAANGxgADRskAA0bKAANGywADRswAA0bNAANGzwADRtEAA0bSAANG0wADRtUAA0bWAANHFQADRxcAA0cZAANHGwADRx4AA0cfAANHIAADRyEAA0ciAANHJAADRyYAA0cnAANHKAADRyoAA0crAANHagADR2wAA0duAANHcAADR3MAA0d0AANHdQADR3YAA0d3AANHeQADR3sAA0d8AANHfQADR38AA0eAAANHpQADR8kAA0fwAANIFAADSBcAA0gZAANIGwADSB0AA0gfAANIIQADSCIAA0glAANIMgADSEEAA0hDAANIRQADSEcAA0hJAANISwADSE0AA0hPAANIXgADSGEAA0hkAANIZwADSGoAA0htAANIcAADSHMAA0h1AANItAADSLYAA0i4AANIugADSL0AA0i+AANIvwADSMAAA0jBAANIwwADSMUAA0jGAANIxwADSMkAA0jKAANJCQADSQsAA0kNAANJDwADSRIAA0kTAANJFAADSRUAA0kWAANJGAADSRoAA0kbAANJHAADSR4AA0kfAANJXgADSWAAA0liAANJZAADSWcAA0loAANJaQADSWoAA0lrAANJbQADSW8AA0lwAANJcQADSXMAA0l0AANJswADSbUAA0m3AANJuQADSbwAA0m9AANJvgADSb8AA0nAAANJwgADScQAA0nFAANJxgADScgAA0nJAANKCAADSgoAA0oMAANKDgADShEAA0oSAANKEwADShQAA0oVAANKFwADShkAA0oaAANKGwADSh0AA0oeAANKXQADSl8AA0phAANKYwADSmYAA0pnAANKaAADSmkAA0pqAANKbAADSm4AA0pvAANKcAADSnIAA0pzAANKsgADSrQAA0q2AANKuAADSrsAA0q8AANKvQADSr4AA0q/AANKwQADSsMAA0rEAANKxQADSscAA0rIAANLEwADSzYAA0tWAANLdgADS3gAA0t6AANLfAADS34AA0uBAANLggADS4MAA0uGAANLhwADS4kAA0uKAANLjAADS44AA0uPAANLkAADS5MAA0uUAANLmQADS6YAA0urAANLrQADS68AA0u0AANLtwADS7oAA0u8AANL4QADTAUAA0wsAANMUAADTFMAA0xVAANMVwADTFkAA0xbAANMXQADTF4AA0xhAANMbgADTH8AA0yBAANMgwADTIUAA0yHAANMiQADTIsAA0yNAANMjwADTKAAA0yjAANMpgADTKkAA0ysAANMrwADTLIAA0y1AANMuAADTLoAA0z5AANM+wADTP0AA0z/AANNAgADTQMAA00EAANNBQADTQYAA00IAANNCgADTQsAA00MAANNDgADTQ8AA01OAANNUAADTVIAA01UAANNVwADTVgAA01ZAANNWgADTVsAA01dAANNXwADTWAAA01hAANNYwADTWQAA02jAANNpQADTagAA02qAANNrQADTa4AA02vAANNsAADTbEAA02zAANNtQADTbYAA023AANNuQADTboAA03HAANNyAADTckAA03LAANOCgADTgwAA04OAANOEAADThMAA04UAANOFQADThYAA04XAANOGQADThsAA04cAANOHQADTh8AA04gAANOXwADTmEAA05jAANOZQADTmgAA05pAANOagADTmsAA05sAANObgADTnAAA05xAANOcgADTnQAA051AANOtAADTrYAA064AANOugADTr0AA06+AANOvwADTsAAA07BAANOwwADTsUAA07GAANOxwADTskAA07KAANPCQADTwsAA08NAANPDwADTxIAA08TAANPFAADTxUAA08WAANPGAADTxoAA08bAANPHAADTx4AA08fAANPXgADT2AAA09iAANPZAADT2cAA09oAANPaQADT2oAA09rAANPbQADT28AA09wAANPcQADT3MAA090AANPmQADT70AA0/kAANQCAADUAsAA1ANAANQDwADUBEAA1ATAANQFQADUBYAA1AZAANQJgADUDUAA1A3AANQOQADUDsAA1A9AANQPwADUEEAA1BDAANQUgADUFUAA1BYAANQWwADUF4AA1BhAANQZAADUGcAA1BpAANQqAADUKoAA1CsAANQrgADULEAA1CyAANQswADULQAA1C1AANQtwADULkAA1C6AANQuwADUL0AA1C+AANQ/QADUP8AA1EBAANRAwADUQYAA1EHAANRCAADUQkAA1EKAANRDAADUQ4AA1EPAANREAADURIAA1ETAANRUgADUVQAA1FWAANRWAADUVsAA1FcAANRXQADUV4AA1FfAANRYQADUWMAA1FkAANRZQADUWcAA1FoAANRpwADUakAA1GsAANRrgADUbEAA1GyAANRswADUbQAA1G1AANRtwADUbkAA1G6AANRuwADUb0AA1G+AANR/QADUf8AA1IBAANSAwADUgYAA1IHAANSCAADUgkAA1IKAANSDAADUg4AA1IPAANSEAADUhIAA1ITAANSUgADUlQAA1JWAANSWAADUlsAA1JcAANSXQADUl4AA1JfAANSYQADUmMAA1JkAANSZQADUmcAA1JoAANSpwADUqkAA1KrAANSrQADUrAAA1KxAANSsgADUrMAA1K0AANStgADUrgAA1K5AANSugADUrwAA1K9AANSxgADUscAA1LJAANTDAADUzAAA1NUAANTdwADU54AA1O+AANT5QADVAwAA1QsAANUUAADVHQAA1R2AANUeQADVHsAA1R9AANUfwADVIIAA1SEAANUhgADVIgAA1SKAANUjAADVI4AA1SRAANUlAADVJUAA1SaAANUpwADVKoAA1SsAANUrwADVLIAA1S0AANU2QADVP0AA1UkAANVSAADVUsAA1VNAANVTwADVVEAA1VTAANVVQADVVYAA1VZAANVZgADVXkAA1V7AANVfQADVX8AA1WBAANVgwADVYUAA1WHAANViQADVYsAA1WeAANVoQADVaQAA1WnAANVqgADVa0AA1WwAANVswADVbYAA1W5AANVuwADVfoAA1X8AANV/wADVgEAA1YEAANWBQADVgYAA1YHAANWCAADVgoAA1YMAANWDQADVg4AA1YQAANWEQADVhoAA1YbAANWHQADVlwAA1ZeAANWYAADVmIAA1ZlAANWZgADVmcAA1ZoAANWaQADVmsAA1ZtAANWbgADVm8AA1ZxAANWcgADVrEAA1azAANWtgADVrgAA1a7AANWvAADVr0AA1a+AANWvwADVsEAA1bDAANWxAADVsUAA1bHAANWyAADVtEAA1bSAANW1AADVxMAA1cVAANXFwADVxkAA1ccAANXHQADVx4AA1cfAANXIAADVyIAA1ckAANXJQADVyYAA1coAANXKQADV2gAA1dqAANXbQADV28AA1dyAANXcwADV3QAA1d1AANXdgADV3gAA1d6AANXewADV3wAA1d+AANXfwADV4gAA1eJAANXiwADV8oAA1fMAANXzgADV9AAA1fTAANX1AADV9UAA1fWAANX1wADV9kAA1fbAANX3AADV90AA1ffAANX4AADWB8AA1ghAANYJAADWCYAA1gpAANYKgADWCsAA1gsAANYLQADWC8AA1gxAANYMgADWDMAA1g1AANYNgADWEMAA1hEAANYRQADWEcAA1iGAANYiAADWIoAA1iMAANYjwADWJAAA1iRAANYkgADWJMAA1iVAANYlwADWJgAA1iZAANYmwADWJwAA1jbAANY3QADWOAAA1jiAANY5QADWOYAA1jnAANY6AADWOkAA1jrAANY7QADWO4AA1jvAANY8QADWPIAA1kGAANZEwADWSQAA1knAANZKgADWS0AA1kwAANZMwADWTYAA1k5AANZPAADWU0AA1lQAANZUwADWVYAA1lZAANZXAADWV8AA1liAANZZQADWWcAA1luAANZdwADWX8AA1mIAANZkgADWZ0AA1noAANaCwADWisAA1pLAANaTQADWk8AA1pRAANaUwADWlYAA1pXAANaWAADWlsAA1pcAANaXgADWl8AA1phAANaZAADWmUAA1pmAANaaQADWmoAA1pvAANafAADWoEAA1qDAANahQADWooAA1qNAANakAADWpIAA1q3AANa2wADWwIAA1smAANbKQADWysAA1stAANbLwADWzEAA1szAANbNAADWzcAA1tEAANbVQADW1cAA1tZAANbWwADW10AA1tfAANbYQADW2MAA1tlAANbdgADW3kAA1t8AANbfwADW4IAA1uFAANbiAADW4sAA1uOAANbkAADW88AA1vRAANb0wADW9UAA1vYAANb2QADW9oAA1vbAANb3AADW94AA1vgAANb4QADW+IAA1vkAANb5QADXCQAA1wmAANcKAADXCoAA1wtAANcLgADXC8AA1wwAANcMQADXDMAA1w1AANcNgADXDcAA1w5AANcOgADXHkAA1x7AANcfgADXIAAA1yDAANchAADXIUAA1yGAANchwADXIkAA1yLAANcjAADXI0AA1yPAANckAADXJ0AA1yeAANcnwADXKEAA1zgAANc4gADXOQAA1zmAANc6QADXOoAA1zrAANc7AADXO0AA1zvAANc8QADXPIAA1zzAANc9QADXPYAA101AANdNwADXTkAA107AANdPgADXT8AA11AAANdQQADXUIAA11EAANdRgADXUcAA11IAANdSgADXUsAA12KAANdjAADXY4AA12QAANdkwADXZQAA12VAANdlgADXZcAA12ZAANdmwADXZwAA12dAANdnwADXaAAA13fAANd4QADXeMAA13lAANd6AADXekAA13qAANd6wADXewAA13uAANd8AADXfEAA13yAANd9AADXfUAA140AANeNgADXjgAA146AANePQADXj4AA14/AANeQAADXkEAA15DAANeRQADXkYAA15HAANeSQADXkoAA15vAANekwADXroAA17eAANe4QADXuMAA17lAANe5wADXukAA17rAANe7AADXu8AA178AANfCwADXw0AA18PAANfEQADXxMAA18VAANfFwADXxkAA18oAANfKwADXy4AA18xAANfNAADXzcAA186AANfPQADXz8AA19+AANfgAADX4IAA1+EAANfhwADX4gAA1+JAANfigADX4sAA1+NAANfjwADX5AAA1+RAANfkwADX5QAA1/TAANf1QADX9cAA1/ZAANf3AADX90AA1/eAANf3wADX+AAA1/iAANf5AADX+UAA1/mAANf6AADX+kAA2AoAANgKgADYCwAA2AuAANgMQADYDIAA2AzAANgNAADYDUAA2A3AANgOQADYDoAA2A7AANgPQADYD4AA2B9AANgfwADYIIAA2CEAANghwADYIgAA2CJAANgigADYIsAA2CNAANgjwADYJAAA2CRAANgkwADYJQAA2DTAANg1QADYNcAA2DZAANg3AADYN0AA2DeAANg3wADYOAAA2DiAANg5AADYOUAA2DmAANg6AADYOkAA2EoAANhKgADYSwAA2EuAANhMQADYTIAA2EzAANhNAADYTUAA2E3AANhOQADYToAA2E7AANhPQADYT4AA2F9AANhfwADYYEAA2GDAANhhgADYYcAA2GIAANhiQADYYoAA2GMAANhjgADYY8AA2GQAANhkgADYZMAA2HeAANiAQADYiEAA2JBAANiQwADYkUAA2JHAANiSQADYkwAA2JNAANiTgADYlEAA2JSAANiVAADYlUAA2JXAANiWgADYlsAA2JcAANiXwADYmAAA2JlAANicgADYncAA2J5AANiewADYoAAA2KDAANihgADYogAA2KtAANi0QADYvgAA2McAANjHwADYyEAA2MjAANjJQADYycAA2MpAANjKgADYy0AA2M6AANjSwADY00AA2NPAANjUQADY1MAA2NVAANjVwADY1kAA2NbAANjbAADY28AA2NyAANjdQADY3gAA2N7AANjfgADY4EAA2OEAANjhgADY8UAA2PHAANjyQADY8sAA2POAANjzwADY9AAA2PRAANj0gADY9QAA2PWAANj1wADY9gAA2PaAANj2wADZBoAA2QcAANkHgADZCAAA2QjAANkJAADZCUAA2QmAANkJwADZCkAA2QrAANkLAADZC0AA2QvAANkMAADZG8AA2RxAANkdAADZHYAA2R5AANkegADZHsAA2R8AANkfQADZH8AA2SBAANkggADZIMAA2SFAANkhgADZJMAA2SUAANklQADZJcAA2TWAANk2AADZNoAA2TcAANk3wADZOAAA2ThAANk4gADZOMAA2TlAANk5wADZOgAA2TpAANk6wADZOwAA2UrAANlLQADZS8AA2UxAANlNAADZTUAA2U2AANlNwADZTgAA2U6AANlPAADZT0AA2U+AANlQAADZUEAA2WAAANlggADZYQAA2WGAANliQADZYoAA2WLAANljAADZY0AA2WPAANlkQADZZIAA2WTAANllQADZZYAA2XVAANl1wADZdkAA2XbAANl3gADZd8AA2XgAANl4QADZeIAA2XkAANl5gADZecAA2XoAANl6gADZesAA2YqAANmLAADZi4AA2YwAANmMwADZjQAA2Y1AANmNgADZjcAA2Y5AANmOwADZjwAA2Y9AANmPwADZkAAA2ZlAANmiQADZrAAA2bUAANm1wADZtkAA2bbAANm3QADZt8AA2bhAANm4gADZuUAA2byAANnAQADZwMAA2cFAANnBwADZwkAA2cLAANnDQADZw8AA2ceAANnIQADZyQAA2cnAANnKgADZy0AA2cwAANnMwADZzUAA2d0AANndgADZ3gAA2d6AANnfQADZ34AA2d/AANngAADZ4EAA2eDAANnhQADZ4YAA2eHAANniQADZ4oAA2fJAANnywADZ80AA2fPAANn0gADZ9MAA2fUAANn1QADZ9YAA2fYAANn2gADZ9sAA2fcAANn3gADZ98AA2geAANoIAADaCIAA2gkAANoJwADaCgAA2gpAANoKgADaCsAA2gtAANoLwADaDAAA2gxAANoMwADaDQAA2hzAANodQADaHcAA2h5AANofAADaH0AA2h+AANofwADaIAAA2iCAANohAADaIUAA2iGAANoiAADaIkAA2jIAANoygADaMwAA2jOAANo0QADaNIAA2jTAANo1AADaNUAA2jXAANo2QADaNoAA2jbAANo3QADaN4AA2kdAANpHwADaSEAA2kjAANpJgADaScAA2koAANpKQADaSoAA2ksAANpLgADaS8AA2kwAANpMgADaTMAA2lyAANpdAADaXYAA2l4AANpewADaXwAA2l9AANpfgADaX8AA2mBAANpgwADaYQAA2mFAANphwADaYgAA2nTAANp9gADahYAA2o2AANqOAADajoAA2o8AANqPgADakEAA2pCAANqQwADakYAA2pHAANqSQADakoAA2pMAANqTwADalAAA2pRAANqVAADalUAA2paAANqZwADamwAA2puAANqcAADanUAA2p4AANqewADan0AA2qiAANqxgADau0AA2sRAANrFAADaxYAA2sYAANrGgADaxwAA2seAANrHwADayIAA2svAANrQAADa0IAA2tEAANrRgADa0gAA2tKAANrTAADa04AA2tQAANrYQADa2QAA2tnAANragADa20AA2twAANrcwADa3YAA2t5AANrewADa7oAA2u8AANrvgADa8AAA2vDAANrxAADa8UAA2vGAANrxwADa8kAA2vLAANrzAADa80AA2vPAANr0AADbA8AA2wRAANsEwADbBUAA2wYAANsGQADbBoAA2wbAANsHAADbB4AA2wgAANsIQADbCIAA2wkAANsJQADbGQAA2xmAANsaQADbGsAA2xuAANsbwADbHAAA2xxAANscgADbHQAA2x2AANsdwADbHgAA2x6AANsewADbIgAA2yJAANsigADbIwAA2zLAANszQADbM8AA2zRAANs1AADbNUAA2zWAANs1wADbNgAA2zaAANs3AADbN0AA2zeAANs4AADbOEAA20gAANtIgADbSQAA20mAANtKQADbSoAA20rAANtLAADbS0AA20vAANtMQADbTIAA20zAANtNQADbTYAA211AANtdwADbXkAA217AANtfgADbX8AA22AAANtgQADbYIAA22EAANthgADbYcAA22IAANtigADbYsAA23KAANtzAADbc4AA23QAANt0wADbdQAA23VAANt1gADbdcAA23ZAANt2wADbdwAA23dAANt3wADbeAAA24fAANuIQADbiMAA24lAANuKAADbikAA24qAANuKwADbiwAA24uAANuMAADbjEAA24yAANuNAADbjUAA25aAANufgADbqUAA27JAANuzAADbs4AA27QAANu0gADbtQAA27WAANu1wADbtoAA27nAANu9gADbvgAA276AANu/AADbv4AA28AAANvAgADbwQAA28TAANvFgADbxkAA28cAANvHwADbyIAA28lAANvKAADbyoAA29pAANvawADb20AA29vAANvcgADb3MAA290AANvdQADb3YAA294AANvegADb3sAA298AANvfgADb38AA2++AANvwAADb8IAA2/EAANvxwADb8gAA2/JAANvygADb8sAA2/NAANvzwADb9AAA2/RAANv0wADb9QAA3ATAANwFQADcBcAA3AZAANwHAADcB0AA3AeAANwHwADcCAAA3AiAANwJAADcCUAA3AmAANwKAADcCkAA3BoAANwagADcG0AA3BvAANwcgADcHMAA3B0AANwdQADcHYAA3B4AANwegADcHsAA3B8AANwfgADcH8AA3C+AANwwAADcMIAA3DEAANwxwADcMgAA3DJAANwygADcMsAA3DNAANwzwADcNAAA3DRAANw0wADcNQAA3ETAANxFQADcRcAA3EZAANxHAADcR0AA3EeAANxHwADcSAAA3EiAANxJAADcSUAA3EmAANxKAADcSkAA3FoAANxagADcWwAA3FuAANxcQADcXIAA3FzAANxdAADcXUAA3F3AANxeQADcXoAA3F7AANxfQADcX4AA3HJAANx7AADcgwAA3IsAANyLgADcjAAA3IyAANyNAADcjcAA3I4AANyOQADcjwAA3I9AANyPwADckAAA3JCAANyRQADckYAA3JHAANySgADcksAA3JQAANyXQADcmIAA3JkAANyZgADcmsAA3JuAANycQADcnMAA3KYAANyvAADcuMAA3MHAANzCgADcwwAA3MOAANzEAADcxIAA3MUAANzFQADcxgAA3MlAANzNgADczgAA3M6AANzPAADcz4AA3NAAANzQgADc0QAA3NGAANzVwADc1oAA3NdAANzYAADc2MAA3NmAANzaQADc2wAA3NvAANzcQADc7AAA3OyAANztAADc7YAA3O5AANzugADc7sAA3O8AANzvQADc78AA3PBAANzwgADc8MAA3PFAANzxgADdAUAA3QHAAN0CQADdAsAA3QOAAN0DwADdBAAA3QRAAN0EgADdBQAA3QWAAN0FwADdBgAA3QaAAN0GwADdFoAA3RcAAN0XwADdGEAA3RkAAN0ZQADdGYAA3RnAAN0aAADdGoAA3RsAAN0bQADdG4AA3RwAAN0cQADdH4AA3R/AAN0gAADdIIAA3TBAAN0wwADdMUAA3THAAN0ygADdMsAA3TMAAN0zQADdM4AA3TQAAN00gADdNMAA3TUAAN01gADdNcAA3UWAAN1GAADdRoAA3UcAAN1HwADdSAAA3UhAAN1IgADdSMAA3UlAAN1JwADdSgAA3UpAAN1KwADdSwAA3VrAAN1bQADdW8AA3VxAAN1dAADdXUAA3V2AAN1dwADdXgAA3V6AAN1fAADdX0AA3V+AAN1gAADdYEAA3XAAAN1wgADdcQAA3XGAAN1yQADdcoAA3XLAAN1zAADdc0AA3XPAAN10QADddIAA3XTAAN11QADddYAA3YVAAN2FwADdhkAA3YbAAN2HgADdh8AA3YgAAN2IQADdiIAA3YkAAN2JgADdicAA3YoAAN2KgADdisAA3ZQAAN2dAADdpsAA3a/AAN2wgADdsQAA3bGAAN2yAADdsoAA3bMAAN2zQADdtAAA3bdAAN27AADdu4AA3bwAAN28gADdvQAA3b2AAN2+AADdvoAA3cJAAN3DAADdw8AA3cSAAN3FQADdxgAA3cbAAN3HgADdyAAA3dfAAN3YQADd2MAA3dlAAN3aAADd2kAA3dqAAN3awADd2wAA3duAAN3cAADd3EAA3dyAAN3dAADd3UAA3e0AAN3tgADd7gAA3e6AAN3vQADd74AA3e/AAN3wAADd8EAA3fDAAN3xQADd8YAA3fHAAN3yQADd8oAA3gJAAN4CwADeA0AA3gPAAN4EgADeBMAA3gUAAN4FQADeBYAA3gYAAN4GgADeBsAA3gcAAN4HgADeB8AA3heAAN4YAADeGIAA3hkAAN4ZwADeGgAA3hpAAN4agADeGsAA3htAAN4bwADeHAAA3hxAAN4cwADeHQAA3izAAN4tQADeLcAA3i5AAN4vAADeL0AA3i+AAN4vwADeMAAA3jCAAN4xAADeMUAA3jGAAN4yAADeMkAA3kIAAN5CgADeQwAA3kOAAN5EQADeRIAA3kTAAN5FAADeRUAA3kXAAN5GQADeRoAA3kbAAN5HQADeR4AA3ldAAN5XwADeWEAA3ljAAN5ZgADeWcAA3loAAN5aQADeWoAA3lsAAN5bgADeW8AA3lwAAN5cgADeXMAA3m+AAN54QADegEAA3ohAAN6IwADeiUAA3onAAN6KQADeiwAA3otAAN6LgADejEAA3oyAAN6NAADejUAA3o3AAN6OgADejsAA3o8AAN6PwADekAAA3pFAAN6UgADelcAA3pZAAN6WwADemAAA3pjAAN6ZgADemgAA3qNAAN6sQADetgAA3r8AAN6/wADewEAA3sDAAN7BQADewcAA3sJAAN7CgADew0AA3saAAN7KwADey0AA3svAAN7MQADezMAA3s1AAN7NwADezkAA3s7AAN7TAADe08AA3tSAAN7VQADe1gAA3tbAAN7XgADe2EAA3tkAAN7ZgADe6UAA3unAAN7qQADe6sAA3uuAAN7rwADe7AAA3uxAAN7sgADe7QAA3u2AAN7twADe7gAA3u6AAN7uwADe/oAA3v8AAN7/gADfAAAA3wDAAN8BAADfAUAA3wGAAN8BwADfAkAA3wLAAN8DAADfA0AA3wPAAN8EAADfE8AA3xRAAN8VAADfFYAA3xZAAN8WgADfFsAA3xcAAN8XQADfF8AA3xhAAN8YgADfGMAA3xlAAN8ZgADfHMAA3x0AAN8dQADfHcAA3y2AAN8uAADfLoAA3y8AAN8vwADfMAAA3zBAAN8wgADfMMAA3zFAAN8xwADfMgAA3zJAAN8ywADfMwAA30LAAN9DQADfQ8AA30RAAN9FAADfRUAA30WAAN9FwADfRgAA30aAAN9HAADfR0AA30eAAN9IAADfSEAA31gAAN9YgADfWQAA31mAAN9aQADfWoAA31rAAN9bAADfW0AA31vAAN9cQADfXIAA31zAAN9dQADfXYAA321AAN9twADfbkAA327AAN9vgADfb8AA33AAAN9wQADfcIAA33EAAN9xgADfccAA33IAAN9ygADfcsAA34KAAN+DAADfg4AA34QAAN+EwADfhQAA34VAAN+FgADfhcAA34ZAAN+GwADfhwAA34dAAN+HwADfiAAA35FAAN+aQADfpAAA360AAN+twADfrkAA367AAN+vQADfr8AA37BAAN+wgADfsUAA37SAAN+4QADfuMAA37lAAN+5wADfukAA37rAAN+7QADfu8AA37+AAN/AQADfwQAA38HAAN/CgADfw0AA38QAAN/EwADfxUAA39UAAN/VgADf1gAA39aAAN/XQADf14AA39fAAN/YAADf2EAA39jAAN/ZQADf2YAA39nAAN/aQADf2oAA3+pAAN/qwADf60AA3+vAAN/sgADf7MAA3+0AAN/tQADf7YAA3+4AAN/ugADf7sAA3+8AAN/vgADf78AA3/+AAOAAAADgAIAA4AEAAOABwADgAgAA4AJAAOACgADgAsAA4ANAAOADwADgBAAA4ARAAOAEwADgBQAA4BTAAOAVQADgFcAA4BZAAOAXAADgF0AA4BeAAOAXwADgGAAA4BiAAOAZAADgGUAA4BmAAOAaAADgGkAA4CoAAOAqgADgKwAA4CuAAOAsQADgLIAA4CzAAOAtAADgLUAA4C3AAOAuQADgLoAA4C7AAOAvQADgL4AA4D9AAOA/wADgQEAA4EDAAOBBgADgQcAA4EIAAOBCQADgQoAA4EMAAOBDgADgQ8AA4EQAAOBEgADgRMAA4FSAAOBVAADgVYAA4FYAAOBWwADgVwAA4FdAAOBXgADgV8AA4FhAAOBYwADgWQAA4FlAAOBZwADgWgAA4GzAAOB1gADgfYAA4IWAAOCGAADghoAA4IcAAOCHgADgiEAA4IiAAOCIwADgiYAA4InAAOCKQADgioAA4IsAAOCLwADgjAAA4IxAAOCNAADgjUAA4I6AAOCRwADgkwAA4JOAAOCUAADglUAA4JYAAOCWwADgl0AA4KCAAOCpgADgs0AA4LxAAOC9AADgvYAA4L4AAOC+gADgvwAA4L+AAOC/wADgwIAA4MPAAODIAADgyIAA4MkAAODJgADgygAA4MqAAODLAADgy4AA4MwAAODQQADg0QAA4NHAAODSgADg00AA4NQAAODUwADg1YAA4NZAAODWwADg5oAA4OcAAODngADg6AAA4OjAAODpAADg6UAA4OmAAODpwADg6kAA4OrAAODrAADg60AA4OvAAODsAADg+8AA4PxAAOD8wADg/UAA4P4AAOD+QADg/oAA4P7AAOD/AADg/4AA4QAAAOEAQADhAIAA4QEAAOEBQADhEQAA4RGAAOESQADhEsAA4ROAAOETwADhFAAA4RRAAOEUgADhFQAA4RWAAOEVwADhFgAA4RaAAOEWwADhGgAA4RpAAOEagADhGwAA4SrAAOErQADhK8AA4SxAAOEtAADhLUAA4S2AAOEtwADhLgAA4S6AAOEvAADhL0AA4S+AAOEwAADhMEAA4UAAAOFAgADhQQAA4UGAAOFCQADhQoAA4ULAAOFDAADhQ0AA4UPAAOFEQADhRIAA4UTAAOFFQADhRYAA4VVAAOFVwADhVkAA4VbAAOFXgADhV8AA4VgAAOFYQADhWIAA4VkAAOFZgADhWcAA4VoAAOFagADhWsAA4WqAAOFrAADha4AA4WwAAOFswADhbQAA4W1AAOFtgADhbcAA4W5AAOFuwADhbwAA4W9AAOFvwADhcAAA4X/AAOGAQADhgMAA4YFAAOGCAADhgkAA4YKAAOGCwADhgwAA4YOAAOGEAADhhEAA4YSAAOGFAADhhUAA4Y6AAOGXgADhoUAA4apAAOGrAADhq4AA4awAAOGsgADhrQAA4a2AAOGtwADhroAA4bHAAOG1gADhtgAA4baAAOG3AADht4AA4bgAAOG4gADhuQAA4bzAAOG9gADhvkAA4b8AAOG/wADhwIAA4cFAAOHCAADhwoAA4dJAAOHSwADh00AA4dPAAOHUgADh1MAA4dUAAOHVQADh1YAA4dYAAOHWgADh1sAA4dcAAOHXgADh18AA4eeAAOHoAADh6IAA4ekAAOHpwADh6gAA4epAAOHqgADh6sAA4etAAOHrwADh7AAA4exAAOHswADh7QAA4fzAAOH9QADh/cAA4f5AAOH/AADh/0AA4f+AAOH/wADiAAAA4gCAAOIBAADiAUAA4gGAAOICAADiAkAA4hIAAOISgADiE0AA4hPAAOIUgADiFMAA4hUAAOIVQADiFYAA4hYAAOIWgADiFsAA4hcAAOIXgADiF8AA4hiAAOIoQADiKMAA4ilAAOIpwADiKoAA4irAAOIrAADiK0AA4iuAAOIsAADiLIAA4izAAOItAADiLYAA4i3AAOI9gADiPgAA4j6AAOI/AADiP8AA4kAAAOJAQADiQIAA4kDAAOJBQADiQcAA4kIAAOJCQADiQsAA4kMAAOJSwADiU0AA4lPAAOJUQADiVQAA4lVAAOJVgADiVcAA4lYAAOJWgADiVwAA4ldAAOJXgADiWAAA4lhAAOJrAADic8AA4nvAAOKDwADihEAA4oTAAOKFQADihcAA4oaAAOKGwADihwAA4ofAAOKIAADiiIAA4ojAAOKJQADiigAA4opAAOKKgADii0AA4ouAAOKMwADikAAA4pFAAOKRwADikkAA4pOAAOKUQADilQAA4pWAAOKewADip8AA4rGAAOK6gADiu0AA4rvAAOK8QADivMAA4r1AAOK9wADivgAA4r7AAOLCAADixkAA4sbAAOLHQADix8AA4shAAOLIwADiyUAA4snAAOLKQADizoAA4s9AAOLQAADi0MAA4tGAAOLSQADi0wAA4tPAAOLUgADi1QAA4uTAAOLlQADi5cAA4uZAAOLnAADi50AA4ueAAOLnwADi6AAA4uiAAOLpAADi6UAA4umAAOLqAADi6kAA4voAAOL6gADi+wAA4vuAAOL8QADi/IAA4vzAAOL9AADi/UAA4v3AAOL+QADi/oAA4v7AAOL/QADi/4AA4w9AAOMPwADjEIAA4xEAAOMRwADjEgAA4xJAAOMSgADjEsAA4xNAAOMTwADjFAAA4xRAAOMUwADjFQAA4xhAAOMYgADjGMAA4xlAAOMpAADjKYAA4yoAAOMqgADjK0AA4yuAAOMrwADjLAAA4yxAAOMswADjLUAA4y2AAOMtwADjLkAA4y6AAOM+QADjPsAA4z9AAOM/wADjQIAA40DAAONBAADjQUAA40GAAONCAADjQoAA40LAAONDAADjQ4AA40PAAONTgADjVAAA41SAAONVAADjVcAA41YAAONWQADjVoAA41bAAONXQADjV8AA41gAAONYQADjWMAA41kAAONowADjaUAA42nAAONqQADjawAA42tAAONrgADja8AA42wAAONsgADjbQAA421AAONtgADjbgAA425AAON+AADjfoAA438AAON/gADjgEAA44CAAOOAwADjgQAA44FAAOOBwADjgkAA44KAAOOCwADjg0AA44OAAOOMwADjlcAA45+AAOOogADjqUAA46nAAOOqQADjqsAA46tAAOOrwADjrAAA46zAAOOwAADjs8AA47RAAOO0wADjtUAA47XAAOO2QADjtsAA47dAAOO7AADju8AA47yAAOO9QADjvgAA477AAOO/gADjwEAA48DAAOPQgADj0QAA49GAAOPSAADj0sAA49MAAOPTQADj04AA49PAAOPUQADj1MAA49UAAOPVQADj1cAA49YAAOPlwADj5kAA4+bAAOPnQADj6AAA4+hAAOPogADj6MAA4+kAAOPpgADj6gAA4+pAAOPqgADj6wAA4+tAAOP7AADj+4AA4/wAAOP8gADj/UAA4/2AAOP9wADj/gAA4/5AAOP+wADj/0AA4/+AAOP/wADkAEAA5ACAAOQQQADkEMAA5BGAAOQSAADkEsAA5BMAAOQTQADkE4AA5BPAAOQUQADkFMAA5BUAAOQVQADkFcAA5BYAAOQlwADkJkAA5CbAAOQnQADkKAAA5ChAAOQogADkKMAA5CkAAOQpgADkKgAA5CpAAOQqgADkKwAA5CtAAOQ7AADkO4AA5DwAAOQ8gADkPUAA5D2AAOQ9wADkPgAA5D5AAOQ+wADkP0AA5D+AAOQ/wADkQEAA5ECAAORQQADkUMAA5FFAAORRwADkUoAA5FLAAORTAADkU0AA5FOAAORUAADkVIAA5FTAAORVAADkVYAA5FXAAORogADkcUAA5HlAAOSBQADkgcAA5IJAAOSCwADkg0AA5IQAAOSEQADkhIAA5IVAAOSFgADkhgAA5IZAAOSGwADkh4AA5IfAAOSIAADkiMAA5IkAAOSKQADkjYAA5I7AAOSPQADkj8AA5JEAAOSRwADkkoAA5JMAAOScQADkpUAA5K8AAOS4AADkuMAA5LlAAOS5wADkukAA5LrAAOS7QADku4AA5LxAAOS/gADkw8AA5MRAAOTEwADkxUAA5MXAAOTGQADkxsAA5MdAAOTHwADkzAAA5MzAAOTNgADkzkAA5M8AAOTPwADk0IAA5NFAAOTSAADk0oAA5OJAAOTiwADk40AA5OPAAOTkgADk5MAA5OUAAOTlQADk5YAA5OYAAOTmgADk5sAA5OcAAOTngADk58AA5PeAAOT4AADk+IAA5PkAAOT5wADk+gAA5PpAAOT6gADk+sAA5PtAAOT7wADk/AAA5PxAAOT8wADk/QAA5QzAAOUNQADlDgAA5Q6AAOUPQADlD4AA5Q/AAOUQAADlEEAA5RDAAOURQADlEYAA5RHAAOUSQADlEoAA5RXAAOUWAADlFkAA5RbAAOUmgADlJwAA5SeAAOUoAADlKMAA5SkAAOUpQADlKYAA5SnAAOUqQADlKsAA5SsAAOUrQADlK8AA5SwAAOU7wADlPEAA5TzAAOU9QADlPgAA5T5AAOU+gADlPsAA5T8AAOU/gADlQAAA5UBAAOVAgADlQQAA5UFAAOVRAADlUYAA5VIAAOVSgADlU0AA5VOAAOVTwADlVAAA5VRAAOVUwADlVUAA5VWAAOVVwADlVkAA5VaAAOVmQADlZsAA5WdAAOVnwADlaIAA5WjAAOVpAADlaUAA5WmAAOVqAADlaoAA5WrAAOVrAADla4AA5WvAAOV7gADlfAAA5XyAAOV9AADlfcAA5X4AAOV+QADlfoAA5X7AAOV/QADlf8AA5YAAAOWAQADlgMAA5YEAAOWKQADlk0AA5Z0AAOWmAADlpsAA5adAAOWnwADlqEAA5ajAAOWpQADlqYAA5apAAOWtgADlsUAA5bHAAOWyQADlssAA5bNAAOWzwADltEAA5bTAAOW4gADluUAA5boAAOW6wADlu4AA5bxAAOW9AADlvcAA5b5AAOXOAADlzoAA5c8AAOXPgADl0EAA5dCAAOXQwADl0QAA5dFAAOXRwADl0kAA5dKAAOXSwADl00AA5dOAAOXjQADl48AA5eRAAOXkwADl5YAA5eXAAOXmAADl5kAA5eaAAOXnAADl54AA5efAAOXoAADl6IAA5ejAAOX4gADl+QAA5fmAAOX6AADl+sAA5fsAAOX7QADl+4AA5fvAAOX8QADl/MAA5f0AAOX9QADl/cAA5f4AAOYNwADmDkAA5g7AAOYPQADmEAAA5hBAAOYQgADmEMAA5hEAAOYRgADmEgAA5hJAAOYSgADmEwAA5hNAAOYjAADmI4AA5iQAAOYkgADmJUAA5iWAAOYlwADmJgAA5iZAAOYmwADmJ0AA5ieAAOYnwADmKEAA5iiAAOY4QADmOMAA5jlAAOY5wADmOoAA5jrAAOY7AADmO0AA5juAAOY8AADmPIAA5jzAAOY9AADmPYAA5j3AAOZNgADmTgAA5k6AAOZPAADmT8AA5lAAAOZQQADmUIAA5lDAAOZRQADmUcAA5lIAAOZSQADmUsAA5lMAAOZVQADmVYAA5lYAAOZmwADmb8AA5njAAOaBgADmi0AA5pNAAOadAADmpsAA5q7AAOa3wADmwMAA5sFAAObCAADmwoAA5sMAAObDgADmxEAA5sTAAObFQADmxcAA5sZAAObGwADmx0AA5sgAAObIwADmyQAA5spAAObNgADmzkAA5s7AAObPgADm0EAA5tDAAObaAADm4wAA5uzAAOb1wADm9oAA5vcAAOb3gADm+AAA5viAAOb5AADm+UAA5voAAOb9QADnAgAA5wKAAOcDAADnA4AA5wQAAOcEgADnBQAA5wWAAOcGAADnBoAA5wtAAOcMAADnDMAA5w2AAOcOQADnDwAA5w/AAOcQgADnEUAA5xIAAOcSgADnIkAA5yLAAOcjgADnJAAA5yTAAOclAADnJUAA5yWAAOclwADnJkAA5ybAAOcnAADnJ0AA5yfAAOcoAADnKkAA5yqAAOcrAADnOsAA5ztAAOc7wADnPEAA5z0AAOc9QADnPYAA5z3AAOc+AADnPoAA5z8AAOc/QADnP4AA50AAAOdAQADnUAAA51CAAOdRQADnUcAA51KAAOdSwADnUwAA51NAAOdTgADnVAAA51SAAOdUwADnVQAA51WAAOdVwADnWAAA51hAAOdYwADnaIAA52kAAOdpgADnagAA52rAAOdrAADna0AA52uAAOdrwADnbEAA52zAAOdtAADnbUAA523AAOduAADnfcAA535AAOd/AADnf4AA54BAAOeAgADngMAA54EAAOeBQADngcAA54JAAOeCgADngsAA54NAAOeDgADnhcAA54YAAOeGgADnlkAA55bAAOeXQADnl8AA55iAAOeYwADnmQAA55lAAOeZgADnmgAA55qAAOeawADnmwAA55uAAOebwADnq4AA56wAAOeswADnrUAA564AAOeuQADnroAA567AAOevAADnr4AA57AAAOewQADnsIAA57EAAOexQADntIAA57TAAOe1AADntYAA58VAAOfFwADnxkAA58bAAOfHgADnx8AA58gAAOfIQADnyIAA58kAAOfJgADnycAA58oAAOfKgADnysAA59qAAOfbAADn28AA59xAAOfdAADn3UAA592AAOfdwADn3gAA596AAOffAADn30AA59+AAOfgAADn4EAA5+MAAOfmQADn6IAA5+lAAOfqAADn6sAA5+uAAOftwADn7oAA5+9AAOfwAADn8MAA5/FAAOfzQADn9UAA6AgAAOgQwADoGMAA6CDAAOghQADoIcAA6CJAAOgiwADoI4AA6CPAAOgkAADoJMAA6CUAAOglgADoJcAA6CZAAOgnAADoJ0AA6CeAAOgoQADoKIAA6CnAAOgtAADoLkAA6C7AAOgvQADoMIAA6DFAAOgyAADoMoAA6DvAAOhEwADoToAA6FeAAOhYQADoWMAA6FlAAOhZwADoWkAA6FrAAOhbAADoW8AA6F8AAOhjQADoY8AA6GRAAOhkwADoZUAA6GXAAOhmQADoZsAA6GdAAOhrgADobEAA6G0AAOhtwADoboAA6G9AAOhwAADocMAA6HGAAOhyAADogcAA6IJAAOiCwADog0AA6IQAAOiEQADohIAA6ITAAOiFAADohYAA6IYAAOiGQADohoAA6IcAAOiHQADolwAA6JeAAOiYAADomIAA6JlAAOiZgADomcAA6JoAAOiaQADomsAA6JtAAOibgADom8AA6JxAAOicgADorEAA6KzAAOitgADorgAA6K7AAOivAADor0AA6K+AAOivwADosEAA6LDAAOixAADosUAA6LHAAOiyAADotUAA6LWAAOi1wADotkAA6MYAAOjGgADoxwAA6MeAAOjIQADoyIAA6MjAAOjJAADoyUAA6MnAAOjKQADoyoAA6MrAAOjLQADoy4AA6NtAAOjbwADo3EAA6NzAAOjdgADo3cAA6N4AAOjeQADo3oAA6N8AAOjfgADo38AA6OAAAOjggADo4MAA6PCAAOjxAADo8YAA6PIAAOjywADo8wAA6PNAAOjzgADo88AA6PRAAOj0wADo9QAA6PVAAOj1wADo9gAA6QXAAOkGQADpBsAA6QdAAOkIAADpCEAA6QiAAOkIwADpCQAA6QmAAOkKAADpCkAA6QqAAOkLAADpC0AA6RsAAOkbgADpHAAA6RyAAOkdQADpHYAA6R3AAOkeAADpHkAA6R7AAOkfQADpH4AA6R/AAOkgQADpIIAA6SnAAOkywADpPIAA6UWAAOlGQADpRsAA6UdAAOlHwADpSEAA6UjAAOlJAADpScAA6U0AAOlQwADpUUAA6VHAAOlSQADpUsAA6VNAAOlTwADpVEAA6VgAAOlYwADpWYAA6VpAAOlbAADpW8AA6VyAAOldQADpXcAA6W2AAOluAADpboAA6W8AAOlvwADpcAAA6XBAAOlwgADpcMAA6XFAAOlxwADpcgAA6XJAAOlywADpcwAA6YLAAOmDQADpg8AA6YRAAOmFAADphUAA6YWAAOmFwADphgAA6YaAAOmHAADph0AA6YeAAOmIAADpiEAA6ZgAAOmYgADpmQAA6ZmAAOmaQADpmoAA6ZrAAOmbAADpm0AA6ZvAAOmcQADpnIAA6ZzAAOmdQADpnYAA6a1AAOmtwADprkAA6a7AAOmvgADpr8AA6bAAAOmwQADpsIAA6bEAAOmxgADpscAA6bIAAOmygADpssAA6cKAAOnDAADpw4AA6cQAAOnEwADpxQAA6cVAAOnFgADpxcAA6cZAAOnGwADpxwAA6cdAAOnHwADpyAAA6dfAAOnYQADp2MAA6dlAAOnaAADp2kAA6dqAAOnawADp2wAA6duAAOncAADp3EAA6dyAAOndAADp3UAA6e0AAOntgADp7gAA6e6AAOnvQADp74AA6e/AAOnwAADp8EAA6fDAAOnxQADp8YAA6fHAAOnyQADp8oAA6gVAAOoOAADqFgAA6h4AAOoegADqHwAA6h+AAOogAADqIMAA6iEAAOohQADqIgAA6iJAAOoiwADqIwAA6iOAAOokQADqJIAA6iTAAOolgADqJcAA6icAAOoqQADqK4AA6iwAAOosgADqLcAA6i6AAOovQADqL8AA6jkAAOpCAADqS8AA6lTAAOpVgADqVgAA6laAAOpXAADqV4AA6lgAAOpYQADqWQAA6lxAAOpggADqYQAA6mGAAOpiAADqYoAA6mMAAOpjgADqZAAA6mSAAOpowADqaYAA6mpAAOprAADqa8AA6myAAOptQADqbgAA6m7AAOpvQADqfwAA6n+AAOqAAADqgIAA6oFAAOqBgADqgcAA6oIAAOqCQADqgsAA6oNAAOqDgADqg8AA6oRAAOqEgADqlEAA6pTAAOqVQADqlcAA6paAAOqWwADqlwAA6pdAAOqXgADqmAAA6piAAOqYwADqmQAA6pmAAOqZwADqqYAA6qoAAOqqwADqq0AA6qwAAOqsQADqrIAA6qzAAOqtAADqrYAA6q4AAOquQADqroAA6q8AAOqvQADqsoAA6rLAAOqzAADqs4AA6sNAAOrDwADqxEAA6sTAAOrFgADqxcAA6sYAAOrGQADqxoAA6scAAOrHgADqx8AA6sgAAOrIgADqyMAA6tiAAOrZAADq2YAA6toAAOrawADq2wAA6ttAAOrbgADq28AA6txAAOrcwADq3QAA6t1AAOrdwADq3gAA6u3AAOruQADq7sAA6u9AAOrwAADq8EAA6vCAAOrwwADq8QAA6vGAAOryAADq8kAA6vKAAOrzAADq80AA6wMAAOsDgADrBAAA6wSAAOsFQADrBYAA6wXAAOsGAADrBkAA6wbAAOsHQADrB4AA6wfAAOsIQADrCIAA6xhAAOsYwADrGUAA6xnAAOsagADrGsAA6xsAAOsbQADrG4AA6xwAAOscgADrHMAA6x0AAOsdgADrHcAA6ycAAOswAADrOcAA60LAAOtDgADrRAAA60SAAOtFAADrRYAA60YAAOtGQADrRwAA60pAAOtOAADrToAA608AAOtPgADrUAAA61CAAOtRAADrUYAA61VAAOtWAADrVsAA61eAAOtYQADrWQAA61nAAOtagADrWwAA62rAAOtrQADra8AA62xAAOttAADrbUAA622AAOttwADrbgAA626AAOtvAADrb0AA62+AAOtwAADrcEAA64AAAOuAgADrgQAA64GAAOuCQADrgoAA64LAAOuDAADrg0AA64PAAOuEQADrhIAA64TAAOuFQADrhYAA65VAAOuVwADrlkAA65bAAOuXgADrl8AA65gAAOuYQADrmIAA65kAAOuZgADrmcAA65oAAOuagADrmsAA66qAAOurAADrq4AA66wAAOuswADrrQAA661AAOutgADrrcAA665AAOuuwADrrwAA669AAOuvwADrsAAA67/AAOvAQADrwMAA68FAAOvCAADrwkAA68KAAOvCwADrwwAA68OAAOvEAADrxEAA68SAAOvFAADrxUAA69UAAOvVgADr1gAA69aAAOvXQADr14AA69fAAOvYAADr2EAA69jAAOvZQADr2YAA69nAAOvaQADr2oAA6+pAAOvqwADr60AA6+vAAOvsgADr7MAA6+0AAOvtQADr7YAA6+4AAOvugADr7sAA6+8AAOvvgADr78AA7AKAAOwLQADsE0AA7BtAAOwbwADsHEAA7BzAAOwdQADsHgAA7B5AAOwegADsH0AA7B+AAOwgAADsIEAA7CDAAOwhgADsIcAA7CIAAOwiwADsIwAA7CRAAOwngADsKMAA7ClAAOwpwADsKwAA7CvAAOwsgADsLQAA7DZAAOw/QADsSQAA7FIAAOxSwADsU0AA7FPAAOxUQADsVMAA7FVAAOxVgADsVkAA7FmAAOxdwADsXkAA7F7AAOxfQADsX8AA7GBAAOxgwADsYUAA7GHAAOxmAADsZsAA7GeAAOxoQADsaQAA7GnAAOxqgADsa0AA7GwAAOxsgADsfEAA7HzAAOx9QADsfcAA7H6AAOx+wADsfwAA7H9AAOx/gADsgAAA7ICAAOyAwADsgQAA7IGAAOyBwADskYAA7JIAAOySgADskwAA7JPAAOyUAADslEAA7JSAAOyUwADslUAA7JXAAOyWAADslkAA7JbAAOyXAADspsAA7KdAAOyoAADsqIAA7KlAAOypgADsqcAA7KoAAOyqQADsqsAA7KtAAOyrgADsq8AA7KxAAOysgADsr8AA7LAAAOywQADssMAA7MCAAOzBAADswYAA7MIAAOzCwADswwAA7MNAAOzDgADsw8AA7MRAAOzEwADsxQAA7MVAAOzFwADsxgAA7NXAAOzWQADs1sAA7NdAAOzYAADs2EAA7NiAAOzYwADs2QAA7NmAAOzaAADs2kAA7NqAAOzbAADs20AA7OsAAOzrgADs7AAA7OyAAOztQADs7YAA7O3AAOzuAADs7kAA7O7AAOzvQADs74AA7O/AAOzwQADs8IAA7QBAAO0AwADtAUAA7QHAAO0CgADtAsAA7QMAAO0DQADtA4AA7QQAAO0EgADtBMAA7QUAAO0FgADtBcAA7RWAAO0WAADtFoAA7RcAAO0XwADtGAAA7RhAAO0YgADtGMAA7RlAAO0ZwADtGgAA7RpAAO0awADtGwAA7SRAAO0tQADtNwAA7UAAAO1AwADtQUAA7UHAAO1CQADtQsAA7UNAAO1DgADtREAA7UeAAO1LQADtS8AA7UxAAO1MwADtTUAA7U3AAO1OQADtTsAA7VKAAO1TQADtVAAA7VTAAO1VgADtVkAA7VcAAO1XwADtWEAA7WgAAO1ogADtaQAA7WmAAO1qQADtaoAA7WrAAO1rAADta0AA7WvAAO1sQADtbIAA7WzAAO1tQADtbYAA7X1AAO19wADtfkAA7X7AAO1/gADtf8AA7YAAAO2AQADtgIAA7YEAAO2BgADtgcAA7YIAAO2CgADtgsAA7ZKAAO2TAADtk4AA7ZQAAO2UwADtlQAA7ZVAAO2VgADtlcAA7ZZAAO2WwADtlwAA7ZdAAO2XwADtmAAA7afAAO2oQADtqMAA7alAAO2qAADtqkAA7aqAAO2qwADtqwAA7auAAO2sAADtrEAA7ayAAO2tAADtrUAA7b0AAO29gADtvgAA7b6AAO2/QADtv4AA7b/AAO3AAADtwEAA7cDAAO3BQADtwYAA7cHAAO3CQADtwoAA7dJAAO3SwADt00AA7dPAAO3UgADt1MAA7dUAAO3VQADt1YAA7dYAAO3WgADt1sAA7dcAAO3XgADt18AA7eeAAO3oAADt6IAA7ekAAO3pwADt6gAA7epAAO3qgADt6sAA7etAAO3rwADt7AAA7exAAO3swADt7QAA7f/AAO4IgADuEIAA7hiAAO4ZAADuGYAA7hoAAO4agADuG0AA7huAAO4bwADuHIAA7hzAAO4dQADuHYAA7h4AAO4ewADuHwAA7h9AAO4gAADuIEAA7iGAAO4kwADuJgAA7iaAAO4nAADuKEAA7ikAAO4pwADuKkAA7jOAAO48gADuRkAA7k9AAO5QAADuUIAA7lEAAO5RgADuUgAA7lKAAO5SwADuU4AA7lbAAO5bAADuW4AA7lwAAO5cgADuXQAA7l2AAO5eAADuXoAA7l8AAO5jQADuZAAA7mTAAO5lgADuZkAA7mcAAO5nwADuaIAA7mlAAO5pwADueYAA7noAAO56gADuewAA7nvAAO58AADufEAA7nyAAO58wADufUAA7n3AAO5+AADufkAA7n7AAO5/AADujsAA7o9AAO6PwADukEAA7pEAAO6RQADukYAA7pHAAO6SAADukoAA7pMAAO6TQADuk4AA7pQAAO6UQADupAAA7qSAAO6lQADupcAA7qaAAO6mwADupwAA7qdAAO6ngADuqAAA7qiAAO6owADuqQAA7qmAAO6pwADurQAA7q1AAO6tgADurgAA7r3AAO6+QADuvsAA7r9AAO7AAADuwEAA7sCAAO7AwADuwQAA7sGAAO7CAADuwkAA7sKAAO7DAADuw0AA7tMAAO7TgADu1AAA7tSAAO7VQADu1YAA7tXAAO7WAADu1kAA7tbAAO7XQADu14AA7tfAAO7YQADu2IAA7uhAAO7owADu6UAA7unAAO7qgADu6sAA7usAAO7rQADu64AA7uwAAO7sgADu7MAA7u0AAO7tgADu7cAA7v2AAO7+AADu/oAA7v8AAO7/wADvAAAA7wBAAO8AgADvAMAA7wFAAO8BwADvAgAA7wJAAO8CwADvAwAA7xLAAO8TQADvE8AA7xRAAO8VAADvFUAA7xWAAO8VwADvFgAA7xaAAO8XAADvF0AA7xeAAO8YAADvGEAA7yGAAO8qgADvNEAA7z1AAO8+AADvPoAA7z8AAO8/gADvQAAA70CAAO9AwADvQYAA70TAAO9IgADvSQAA70mAAO9KAADvSoAA70sAAO9LgADvTAAA70/AAO9QgADvUUAA71IAAO9SwADvU4AA71RAAO9VAADvVYAA72VAAO9lwADvZkAA72bAAO9ngADvZ8AA72gAAO9oQADvaIAA72kAAO9pgADvacAA72oAAO9qgADvasAA73qAAO97AADve4AA73wAAO98wADvfQAA731AAO99gADvfcAA735AAO9+wADvfwAA739AAO9/wADvgAAA74/AAO+QQADvkMAA75FAAO+SAADvkkAA75KAAO+SwADvkwAA75OAAO+UAADvlEAA75SAAO+VAADvlUAA76UAAO+lgADvpgAA76aAAO+nQADvp4AA76fAAO+oAADvqEAA76jAAO+pQADvqYAA76nAAO+qQADvqoAA77pAAO+6wADvu0AA77vAAO+8gADvvMAA770AAO+9QADvvYAA774AAO++gADvvsAA778AAO+/gADvv8AA78+AAO/QAADv0IAA79EAAO/RwADv0gAA79JAAO/SgADv0sAA79NAAO/TwADv1AAA79RAAO/UwADv1QAA7+TAAO/lQADv5cAA7+ZAAO/nAADv50AA7+eAAO/nwADv6AAA7+iAAO/pAADv6UAA7+mAAO/qAADv6kAA7+yAAO/swADv7UAA7/4AAPAHAADwEAAA8BjAAPAigADwKoAA8DRAAPA+AADwRgAA8E8AAPBYAADwWIAA8FlAAPBZwADwWkAA8FrAAPBbgADwXAAA8FyAAPBdAADwXYAA8F4AAPBegADwX0AA8GAAAPBgQADwYYAA8GTAAPBlgADwZgAA8GbAAPBngADwaAAA8HFAAPB6QADwhAAA8I0AAPCNwADwjkAA8I7AAPCPQADwj8AA8JBAAPCQgADwkUAA8JSAAPCZQADwmcAA8JpAAPCawADwm0AA8JvAAPCcQADwnMAA8J1AAPCdwADwooAA8KNAAPCkAADwpMAA8KWAAPCmQADwpwAA8KfAAPCogADwqUAA8KnAAPC5gADwugAA8LrAAPC7QADwvAAA8LxAAPC8gADwvMAA8L0AAPC9gADwvgAA8L5AAPC+gADwvwAA8L9AAPDBgADwwcAA8MJAAPDSAADw0oAA8NMAAPDTgADw1EAA8NSAAPDUwADw1QAA8NVAAPDVwADw1kAA8NaAAPDWwADw10AA8NeAAPDnQADw58AA8OiAAPDpAADw6cAA8OoAAPDqQADw6oAA8OrAAPDrQADw68AA8OwAAPDsQADw7MAA8O0AAPDvQADw74AA8PAAAPD/wADxAEAA8QDAAPEBQADxAgAA8QJAAPECgADxAsAA8QMAAPEDgADxBAAA8QRAAPEEgADxBQAA8QVAAPEVAADxFYAA8RZAAPEWwADxF4AA8RfAAPEYAADxGEAA8RiAAPEZAADxGYAA8RnAAPEaAADxGoAA8RrAAPEdAADxHUAA8R3AAPEtgADxLgAA8S6AAPEvAADxL8AA8TAAAPEwQADxMIAA8TDAAPExQADxMcAA8TIAAPEyQADxMsAA8TMAAPFCwADxQ0AA8UQAAPFEgADxRUAA8UWAAPFFwADxRgAA8UZAAPFGwADxR0AA8UeAAPFHwADxSEAA8UiAAPFLwADxTAAA8UxAAPFMwADxXIAA8V0AAPFdgADxXgAA8V7AAPFfAADxX0AA8V+AAPFfwADxYEAA8WDAAPFhAADxYUAA8WHAAPFiAADxccAA8XJAAPFzAADxc4AA8XRAAPF0gADxdMAA8XUAAPF1QADxdcAA8XZAAPF2gADxdsAA8XdAAPF3gADxfkAA8YGAAPGHQADxiAAA8YjAAPGJgADxikAA8YsAAPGLwADxjIAA8Y1AAPGOAADxjsAA8Y+AAPGVQADxlgAA8ZbAAPGXgADxmEAA8ZkAAPGZwADxmoAA8ZtAAPGcAADxnMAA8Z2AAPGeAADxn8AA8aGAAPGjwADxpQAA8afAAPGqwADxrQAA8a4AAPGwgADxsoAA8cVAAPHOAADx1gAA8d4AAPHegADx3wAA8d+AAPHgAADx4MAA8eEAAPHhQADx4gAA8eJAAPHiwADx4wAA8eOAAPHkQADx5IAA8eTAAPHlgADx5cAA8ecAAPHqQADx64AA8ewAAPHsgADx7cAA8e6AAPHvQADx78AA8fkAAPICAADyC8AA8hTAAPIVgADyFgAA8haAAPIXAADyF4AA8hgAAPIYQADyGQAA8hxAAPIggADyIQAA8iGAAPIiAADyIoAA8iMAAPIjgADyJAAA8iSAAPIowADyKYAA8ipAAPIrAADyK8AA8iyAAPItQADyLgAA8i7AAPIvQADyPwAA8j+AAPJAAADyQIAA8kFAAPJBgADyQcAA8kIAAPJCQADyQsAA8kNAAPJDgADyQ8AA8kRAAPJEgADyVEAA8lTAAPJVQADyVcAA8laAAPJWwADyVwAA8ldAAPJXgADyWAAA8liAAPJYwADyWQAA8lmAAPJZwADyaYAA8moAAPJqwADya0AA8mwAAPJsQADybIAA8mzAAPJtAADybYAA8m4AAPJuQADyboAA8m8AAPJvQADycoAA8nLAAPJzAADyc4AA8oNAAPKDwADyhEAA8oTAAPKFgADyhcAA8oYAAPKGQADyhoAA8ocAAPKHgADyh8AA8ogAAPKIgADyiMAA8piAAPKZAADymYAA8poAAPKawADymwAA8ptAAPKbgADym8AA8pxAAPKcwADynQAA8p1AAPKdwADyngAA8q3AAPKuQADyrsAA8q9AAPKwAADysEAA8rCAAPKwwADysQAA8rGAAPKyAADyskAA8rKAAPKzAADys0AA8sMAAPLDgADyxAAA8sSAAPLFQADyxYAA8sXAAPLGAADyxkAA8sbAAPLHQADyx4AA8sfAAPLIQADyyIAA8thAAPLYwADy2UAA8tnAAPLagADy2sAA8tsAAPLbQADy24AA8twAAPLcgADy3MAA8t0AAPLdgADy3cAA8ucAAPLwAADy+cAA8wLAAPMDgADzBAAA8wSAAPMFAADzBYAA8wYAAPMGQADzBwAA8wpAAPMOAADzDoAA8w8AAPMPgADzEAAA8xCAAPMRAADzEYAA8xVAAPMWAADzFsAA8xeAAPMYQADzGQAA8xnAAPMagADzGwAA8yrAAPMrQADzK8AA8yxAAPMtAADzLUAA8y2AAPMtwADzLgAA8y6AAPMvAADzL0AA8y+AAPMwAADzMEAA80AAAPNAgADzQQAA80GAAPNCQADzQoAA80LAAPNDAADzQ0AA80PAAPNEQADzRIAA80TAAPNFQADzRYAA81VAAPNVwADzVkAA81bAAPNXgADzV8AA81gAAPNYQADzWIAA81kAAPNZgADzWcAA81oAAPNagADzWsAA82qAAPNrAADza4AA82wAAPNswADzbQAA821AAPNtgADzbcAA825AAPNuwADzbwAA829AAPNvwADzcAAA83/AAPOAQADzgMAA84FAAPOCAADzgkAA84KAAPOCwADzgwAA84OAAPOEAADzhEAA84SAAPOFAADzhUAA85UAAPOVgADzlgAA85aAAPOXQADzl4AA85fAAPOYAADzmEAA85jAAPOZQADzmYAA85nAAPOaQADzmoAA86pAAPOqwADzq0AA86vAAPOsgADzrMAA860AAPOtQADzrYAA864AAPOugADzrsAA868AAPOvgADzr8AA88KAAPPLQADz00AA89tAAPPbwADz3EAA89zAAPPdQADz3gAA895AAPPegADz30AA89+AAPPgAADz4EAA8+DAAPPhgADz4cAA8+IAAPPiwADz4wAA8+RAAPPngADz6MAA8+lAAPPpwADz6wAA8+vAAPPsgADz7QAA8/ZAAPP/QAD0CQAA9BIAAPQSwAD0E0AA9BPAAPQUQAD0FMAA9BVAAPQVgAD0FkAA9BmAAPQdwAD0HkAA9B7AAPQfQAD0H8AA9CBAAPQgwAD0IUAA9CHAAPQmAAD0JsAA9CeAAPQoQAD0KQAA9CnAAPQqgAD0K0AA9CwAAPQsgAD0PEAA9DzAAPQ9QAD0PcAA9D6AAPQ+wAD0PwAA9D9AAPQ/gAD0QAAA9ECAAPRAwAD0QQAA9EGAAPRBwAD0UYAA9FIAAPRSgAD0UwAA9FPAAPRUAAD0VEAA9FSAAPRUwAD0VUAA9FXAAPRWAAD0VkAA9FbAAPRXAAD0ZsAA9GdAAPRoAAD0aIAA9GlAAPRpgAD0acAA9GoAAPRqQAD0asAA9GtAAPRrgAD0a8AA9GxAAPRsgAD0b8AA9HAAAPRwQAD0cMAA9ICAAPSBAAD0gYAA9IIAAPSCwAD0gwAA9INAAPSDgAD0g8AA9IRAAPSEwAD0hQAA9IVAAPSFwAD0hgAA9JXAAPSWQAD0lsAA9JdAAPSYAAD0mEAA9JiAAPSYwAD0mQAA9JmAAPSaAAD0mkAA9JqAAPSbAAD0m0AA9KsAAPSrgAD0rAAA9KyAAPStQAD0rYAA9K3AAPSuAAD0rkAA9K7AAPSvQAD0r4AA9K/AAPSwQAD0sIAA9MBAAPTAwAD0wUAA9MHAAPTCgAD0wsAA9MMAAPTDQAD0w4AA9MQAAPTEgAD0xMAA9MUAAPTFgAD0xcAA9NWAAPTWAAD01oAA9NcAAPTXwAD02AAA9NhAAPTYgAD02MAA9NlAAPTZwAD02gAA9NpAAPTawAD02wAA9ORAAPTtQAD09wAA9QAAAPUAwAD1AUAA9QHAAPUCQAD1AsAA9QNAAPUDgAD1BEAA9QeAAPULQAD1C8AA9QxAAPUMwAD1DUAA9Q3AAPUOQAD1DsAA9RKAAPUTQAD1FAAA9RTAAPUVgAD1FkAA9RcAAPUXwAD1GEAA9SgAAPUogAD1KUAA9SnAAPUqgAD1KsAA9SsAAPUrQAD1K4AA9SwAAPUsgAD1LMAA9S0AAPUtgAD1LcAA9T2AAPU+AAD1PoAA9T8AAPU/wAD1QAAA9UBAAPVAgAD1QMAA9UFAAPVBwAD1QgAA9UJAAPVCwAD1QwAA9VLAAPVTQAD1U8AA9VRAAPVVAAD1VUAA9VWAAPVVwAD1VgAA9VaAAPVXAAD1V0AA9VeAAPVYAAD1WEAA9WgAAPVogAD1aUAA9WnAAPVqgAD1asAA9WsAAPVrQAD1a4AA9WwAAPVsgAD1bMAA9W0AAPVtgAD1bcAA9X2AAPV+AAD1foAA9X8AAPV/wAD1gAAA9YBAAPWAgAD1gMAA9YFAAPWBwAD1ggAA9YJAAPWCwAD1gwAA9ZLAAPWTQAD1k8AA9ZRAAPWVAAD1lUAA9ZWAAPWVwAD1lgAA9ZaAAPWXAAD1l0AA9ZeAAPWYAAD1mEAA9agAAPWogAD1qQAA9amAAPWqQAD1qoAA9arAAPWrAAD1q0AA9avAAPWsQAD1rIAA9azAAPWtQAD1rYAA9cBAAPXJAAD10QAA9dkAAPXZgAD12gAA9dqAAPXbAAD128AA9dwAAPXcQAD13QAA9d1AAPXdwAD13gAA9d6AAPXfQAD134AA9d/AAPXggAD14MAA9eIAAPXlQAD15oAA9ecAAPXngAD16MAA9emAAPXqQAD16sAA9fQAAPX9AAD2BsAA9g/AAPYQgAD2EQAA9hGAAPYSAAD2EoAA9hMAAPYTQAD2FAAA9hdAAPYbgAD2HAAA9hyAAPYdAAD2HYAA9h4AAPYegAD2HwAA9h+AAPYjwAD2JIAA9iVAAPYmAAD2JsAA9ieAAPYoQAD2KQAA9inAAPYqQAD2OgAA9jqAAPY7AAD2O4AA9jxAAPY8gAD2PMAA9j0AAPY9QAD2PcAA9j5AAPY+gAD2PsAA9j9AAPY/gAD2T0AA9k/AAPZQQAD2UMAA9lGAAPZRwAD2UgAA9lJAAPZSgAD2UwAA9lOAAPZTwAD2VAAA9lSAAPZUwAD2ZIAA9mUAAPZlwAD2ZkAA9mcAAPZnQAD2Z4AA9mfAAPZoAAD2aIAA9mkAAPZpQAD2aYAA9moAAPZqQAD2bYAA9m3AAPZuAAD2boAA9n5AAPZ+wAD2f0AA9n/AAPaAgAD2gM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AA+U2AAPlOAAD5ToAA+U8AAPlPwAD5UAAA+VBAAPlQgAD5UMAA+VFAAPlRwAD5UgAA+VJAAPlSwAD5UwAA+WLAAPljQAD5ZAAA+WSAAPllQAD5ZYAA+WXAAPlmAAD5ZkAA+WbAAPlnQAD5Z4AA+WfAAPloQAD5aIAA+XhAAPl4wAD5eUAA+XnAAPl6gAD5esAA+XsAAPl7QAD5e4AA+XwAAPl8gAD5fMAA+X0AAPl9gAD5fcAA+Y2AAPmOAAD5joAA+Y8AAPmPwAD5kAAA+ZBAAPmQgAD5kMAA+ZFAAPmRwAD5kgAA+ZJAAPmSwAD5kwAA+aLAAPmjQAD5o8AA+aRAAPmlAAD5pUAA+aWAAPmlwAD5pgAA+aaAAPmnAAD5p0AA+aeAAPmoAAD5qEAA+bsAAPnDwAD5y8AA+dPAAPnUQAD51MAA+dVAAPnVwAD51oAA+dbAAPnXAAD518AA+dgAAPnYgAD52MAA+dlAAPnaAAD52kAA+dqAAPnbQAD524AA+dzAAPngAAD54UAA+eHAAPniQAD544AA+eRAAPnlAAD55YAA+e7AAPn3wAD6AYAA+gqAAPoLQAD6C8AA+gxAAPoMwAD6DUAA+g3AAPoOAAD6DsAA+hIAAPoWQAD6FsAA+hdAAPoXwAD6GEAA+hjAAPoZQAD6GcAA+hpAAPoegAD6H0AA+iAAAPogwAD6IYAA+iJAAPojAAD6I8AA+iSAAPolAAD6NMAA+jVAAPo1wAD6NkAA+jcAAPo3QAD6N4AA+jfAAPo4AAD6OIAA+jkAAPo5QAD6OYAA+joAAPo6QAD6SgAA+kqAAPpLAAD6S4AA+kxAAPpMgAD6TMAA+k0AAPpNQAD6TcAA+k5AAPpOgAD6TsAA+k9AAPpPgAD6X0AA+l/AAPpggAD6YQAA+mHAAPpiAAD6YkAA+mKAAPpiwAD6Y0AA+mPAAPpkAAD6ZEAA+mTAAPplAAD6aEAA+miAAPpowAD6aUAA+nkAAPp5gAD6egAA+nqAAPp7QAD6e4AA+nvAAPp8AAD6fEAA+nzAAPp9QAD6fYAA+n3AAPp+QAD6foAA+o5AAPqOwAD6j0AA+o/AAPqQgAD6kMAA+pEAAPqRQAD6kYAA+pIAAPqSgAD6ksAA+pMAAPqTgAD6k8AA+qOAAPqkAAD6pIAA+qUAAPqlwAD6pgAA+qZAAPqmgAD6ps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AA/XTAAP11QAD9dgAA/XZAAP12gAD9dsAA/XcAAP13gAD9eAAA/XhAAP14gAD9eQAA/XlAAP2JAAD9iYAA/YoAAP2KgAD9i0AA/YuAAP2LwAD9jAAA/YxAAP2MwAD9jUAA/Y2AAP2NwAD9jkAA/Y6AAP2eQAD9nsAA/Z9AAP2fwAD9oIAA/aDAAP2hAAD9oUAA/aGAAP2iAAD9ooAA/aLAAP2jAAD9o4AA/aPAAP22gAD9v0AA/cdAAP3PQAD9z8AA/dBAAP3QwAD90UAA/dIAAP3SQAD90oAA/dNAAP3TgAD91AAA/dRAAP3UwAD91YAA/dXAAP3WAAD91sAA/dcAAP3YQAD924AA/dzAAP3dQAD93cAA/d8AAP3fwAD94IAA/eEAAP3qQAD980AA/f0AAP4GAAD+BsAA/gdAAP4HwAD+CEAA/gjAAP4JQAD+CYAA/gpAAP4NgAD+EcAA/hJAAP4SwAD+E0AA/hPAAP4UQAD+FMAA/hVAAP4VwAD+GgAA/hrAAP4bgAD+HEAA/h0AAP4dwAD+HoAA/h9AAP4gAAD+IIAA/jBAAP4wwAD+MUAA/jHAAP4ygAD+MsAA/jMAAP4zQAD+M4AA/jQAAP40gAD+NMAA/jUAAP41gAD+NcAA/kWAAP5GAAD+RoAA/kcAAP5HwAD+SAAA/khAAP5IgAD+SMAA/klAAP5JwAD+SgAA/kpAAP5KwAD+SwAA/lrAAP5bQAD+XAAA/lyAAP5dQAD+XYAA/l3AAP5eAAD+XkAA/l7AAP5fQAD+X4AA/l/AAP5gQAD+YIAA/mPAAP5kAAD+ZEAA/mTAAP50gAD+dQAA/nWAAP52AAD+dsAA/ncAAP53QAD+d4AA/nfAAP54QAD+eMAA/nkAAP55QAD+ecAA/noAAP6JwAD+ikAA/orAAP6LQAD+jAAA/oxAAP6MgAD+jMAA/o0AAP6NgAD+jgAA/o5AAP6OgAD+jwAA/o9AAP6fAAD+n4AA/qAAAP6ggAD+oUAA/qGAAP6hwAD+ogAA/qJAAP6iwAD+o0AA/qOAAP6jwAD+pEAA/qSAAP60QAD+tMAA/rVAAP61wAD+toAA/rbAAP63AAD+t0AA/reAAP64AAD+uIAA/rjAAP65AAD+uYAA/rnAAP7JgAD+ygAA/sqAAP7LAAD+y8AA/swAAP7MQAD+zIAA/szAAP7NQAD+zcAA/s4AAP7OQAD+zsAA/s8AAP7YQAD+4UAA/usAAP70AAD+9MAA/vVAAP71wAD+9kAA/vbAAP73QAD+94AA/vhAAP77gAD+/0AA/v/AAP8AQAD/AMAA/wFAAP8BwAD/AkAA/wLAAP8GgAD/B0AA/wgAAP8IwAD/CYAA/wpAAP8LAAD/C8AA/wxAAP8cAAD/HIAA/x0AAP8dgAD/HkAA/x6AAP8ewAD/HwAA/x9AAP8fwAD/IEAA/yCAAP8gwAD/IUAA/yGAAP8xQAD/McAA/zJAAP8ywAD/M4AA/zPAAP80AAD/NEAA/zSAAP81AAD/NYAA/zXAAP82AAD/NoAA/zbAAP9GgAD/RwAA/0eAAP9IAAD/SMAA/0kAAP9JQAD/SYAA/0nAAP9KQAD/SsAA/0sAAP9LQAD/S8AA/0wAAP9bwAD/XEAA/1zAAP9dQAD/XgAA/15AAP9egAD/XsAA/18AAP9fgAD/YAAA/2BAAP9ggAD/YQAA/2FAAP9xAAD/cYAA/3IAAP9ygAD/c0AA/3OAAP9zwAD/dAAA/3RAAP90wAD/dUAA/3WAAP91wAD/dkAA/3aAAP+GQAD/hsAA/4dAAP+HwAD/iIAA/4jAAP+JAAD/iUAA/4mAAP+KAAD/ioAA/4rAAP+LAAD/i4AA/4vAAP+bgAD/nAAA/5yAAP+dAAD/ncAA/54AAP+eQAD/noAA/57AAP+fQAD/n8AA/6AAAP+gQAD/oMAA/6EAAP+zwAD/vIAA/8SAAP/MgAD/zQAA/82AAP/OAAD/zoAA/89AAP/PgAD/z8AA/9CAAP/QwAD/0UAA/9GAAP/SAAD/0sAA/9MAAP/TQAD/1AAA/9RAAP/VgAD/2MAA/9oAAP/agAD/2wAA/9xAAP/dAAD/3cAA/95AAP/ngAD/8IAA//pAAQADQAEABAABAASAAQAFAAEABYABAAYAAQAGgAEABsABAAeAAQAKwAEADwABAA+AAQAQAAEAEIABABEAAQARgAEAEgABABKAAQATAAEAF0ABABgAAQAYwAEAGYABABpAAQAbAAEAG8ABAByAAQAdQAEAHcABAC2AAQAuAAEALoABAC8AAQAvwAEAMAABADBAAQAwgAEAMMABADFAAQAxwAEAMgABADJAAQAywAEAMwABAELAAQBDQAEAQ8ABAERAAQBFAAEARUABAEWAAQBFwAEARgABAEaAAQBHAAEAR0ABAEeAAQBIAAEASEABAFgAAQBYgAEAWUABAFnAAQBagAEAWsABAFsAAQBbQAEAW4ABAFwAAQBcgAEAXMABAF0AAQBdgAEAXcABAGEAAQBhQAEAYYABAGIAAQBxwAEAckABAHLAAQBzQAEAdAABAHRAAQB0gAEAdMABAHUAAQB1gAEAdgABAHZAAQB2gAEAdwABAHdAAQCHAAEAh4ABAIgAAQCIgAEAiUABAImAAQCJwAEAigABAIpAAQCKwAEAi0ABAIuAAQCLwAEAjEABAIyAAQCcQAEAnMABAJ1AAQCdwAEAnoABAJ7AAQCfAAEAn0ABAJ+AAQCgAAEAoIABAKDAAQChAAEAoYABAKHAAQCxgAEAsgABALKAAQCzAAEAs8ABALQAAQC0QAEAtIABALTAAQC1QAEAtcABALYAAQC2QAEAtsABALcAAQDGwAEAx0ABAMfAAQDIQAEAyQABAMlAAQDJgAEAycABAMoAAQDKgAEAywABAMtAAQDLgAEAzAABAMxAAQDVgAEA3oABAOhAAQDxQAEA8gABAPKAAQDzAAEA84ABAPQAAQD0gAEA9MABAPWAAQD4wAEA/IABAP0AAQD9gAEA/gABAP6AAQD/AAEA/4ABAQAAAQEDwAEBBIABAQVAAQEGAAEBBsABAQeAAQEIQAEBCQABAQmAAQEZQAEBGcABARpAAQEawAEBG4ABARvAAQEcAAEBHEABARyAAQEdAAEBHYABAR3AAQEeAAEBHoABAR7AAQEugAEBLwABAS+AAQEwAAEBMMABATEAAQExQAEBMYABATHAAQEyQAEBMsABATMAAQEzQAEBM8ABATQAAQFDwAEBREABAUTAAQFFQAEBRgABAUZAAQFGgAEBRsABAUcAAQFHgAEBSAABAUhAAQFIgAEBSQABAUlAAQFZAAEBWYABAVoAAQFagAEBW0ABAVuAAQFbwAEBXAABAVxAAQFcwAEBXUABAV2AAQFdwAEBXkABAV6AAQFuQAEBbsABAW9AAQFvwAEBcIABAXDAAQFxAAEBcUABAXGAAQFyAAEBcoABAXLAAQFzAAEBc4ABAXPAAQGDgAEBhAABAYSAAQGFAAEBhcABAYYAAQGGQAEBhoABAYbAAQGHQAEBh8ABAYgAAQGIQAEBiMABAYkAAQGYwAEBmUABAZnAAQGaQAEBmwABAZtAAQGbgAEBm8ABAZwAAQGcgAEBnQABAZ1AAQGdgAEBngABAZ5AAQGxAAEBucABAcHAAQHJwAEBykABAcrAAQHLQAEBy8ABAcyAAQHMwAEBzQABAc3AAQHOAAEBzoABAc7AAQHPQAEB0AABAdBAAQHQgAEB0UABAdGAAQHSwAEB1gABAddAAQHXwAEB2EABAdmAAQHaQAEB2wABAduAAQHkwAEB7cABAfeAAQIAgAECAUABAgHAAQICQAECAsABAgNAAQIDwAECBAABAgTAAQIIAAECDEABAgzAAQINQAECDcABAg5AAQIOwAECD0ABAg/AAQIQQAECFIABAhVAAQIWAAECFsABAheAAQIYQAECGQABAhnAAQIagAECGwABAirAAQIrQAECK8ABAixAAQItAAECLUABAi2AAQItwAECLgABAi6AAQIvAAECL0ABAi+AAQIwAAECMEABAkAAAQJAgAECQQABAkGAAQJCQAECQoABAkLAAQJDAAECQ0ABAkPAAQJEQAECRIABAkTAAQJFQAECRYABAlVAAQJVwAECVoABAlcAAQJXwAECWAABAlhAAQJYgAECWMABAllAAQJZwAECWgABAlpAAQJawAECWwABAl5AAQJegAECXsABAl9AAQJvAAECb4ABAnAAAQJwgAECcUABAnGAAQJxwAECcgABAnJAAQJywAECc0ABAnOAAQJzwAECdEABAnSAAQKEQAEChMABAoVAAQKFwAEChoABAobAAQKHAAECh0ABAoeAAQKIAAECiIABAojAAQKJAAECiYABAonAAQKZgAECmgABApqAAQKbAAECm8ABApwAAQKcQAECnIABApzAAQKdQAECncABAp4AAQKeQAECnsABAp8AAQKuwAECr0ABAq/AAQKwQAECsQABArFAAQKxgAECscABArIAAQKygAECswABArNAAQKzgAECtAABArRAAQLEAAECxIABAsUAAQLFgAECxkABAsaAAQLGwAECxwABAsdAAQLHwAECyEABAsiAAQLIwAECyUABAsmAAQLSwAEC28ABAuWAAQLugAEC70ABAu/AAQLwQAEC8MABAvFAAQLxwAEC8gABAvLAAQL2AAEC+cABAvpAAQL6wAEC+0ABAvvAAQL8QAEC/MABAv1AAQMBAAEDAcABAwKAAQMDQAEDBAABAwTAAQMFgAEDBk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ABBdJAAQXSwAEF00ABBdSAAQXVQAEF1gABBdaAAQXfwAEF6MABBfKAAQX7gAEF/EABBfzAAQX9QAEF/cABBf5AAQX+wAEF/wABBf/AAQYDAAEGB0ABBgfAAQYIQAEGCMABBglAAQYJwAEGCkABBgrAAQYLQAEGD4ABBhBAAQYRAAEGEcABBhKAAQYTQAEGFAABBhTAAQYVgAEGFgABBiXAAQYmQAEGJsABBidAAQYoAAEGKEABBiiAAQYowAEGKQABBimAAQYqAAEGKkABBiqAAQYrAAEGK0ABBjsAAQY7gAEGPAABBjyAAQY9QAEGPYABBj3AAQY+AAEGPkABBj7AAQY/QAEGP4ABBj/AAQZAQAEGQIABBlBAAQZQwAEGUYABBlIAAQZSwAEGUwABBlNAAQZTgAEGU8ABBlRAAQZUwAEGVQABBlVAAQZVwAEGVgABBllAAQZZgAEGWcABBlpAAQZqAAEGaoABBmsAAQZrgAEGbEABBmyAAQZswAEGbQABBm1AAQZtwAEGbkABBm6AAQZuwAEGb0ABBm+AAQZ/QAEGf8ABBoBAAQaAwAEGgYABBoHAAQaCAAEGgkABBoKAAQaDAAEGg4ABBoPAAQaEAAEGhIABBoTAAQaUgAEGlQABBpWAAQaWAAEGlsABBpcAAQaXQAEGl4ABBpfAAQaYQAEGmMABBpkAAQaZQAEGmcABBpoAAQapwAEGqkABBqrAAQarQAEGrAABBqxAAQasgAEGrMABBq0AAQatgAEGrgABBq5AAQaugAEGrwABBq9AAQa/AAEGv4ABBsAAAQbAgAEGwUABBsGAAQbBwAEGwgABBsJAAQbCwAEGw0ABBsOAAQbDwAEGxEABBsSAAQbNwAEG1sABBuCAAQbpgAEG6kABBurAAQbrQAEG68ABBuxAAQbswAEG7QABBu3AAQbxAAEG9MABBvVAAQb1wAEG9kABBvbAAQb3QAEG98ABBvhAAQb8AAEG/MABBv2AAQb+QAEG/wABBv/AAQcAgAEHAUABBwHAAQcRgAEHEgABBxKAAQcTAAEHE8ABBxQAAQcUQAEHFIABBxTAAQcVQAEHFcABBxYAAQcWQAEHFsABBxcAAQcmwAEHJ0ABByfAAQcoQAEHKQABBylAAQcpgAEHKcABByoAAQcqgAEHKwABBytAAQcrgAEHLAABByxAAQc8AAEHPI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ABCjJAAQoywAEKM0ABCjOAAQozwAEKNEABCjSAAQpEQAEKRMABCkVAAQpFwAEKRoABCkbAAQpHAAEKR0ABCkeAAQpIAAEKSIABCkjAAQpJAAEKSYABCknAAQpZgAEKWgABClqAAQpbAAEKW8ABClwAAQpcQAEKXIABClzAAQpdQAEKXcABCl4AAQpeQAEKXsABCl8AAQpoQAEKcUABCnsAAQqEAAEKhMABCoVAAQqFwAEKhkABCobAAQqHQAEKh4ABCohAAQqLgAEKj0ABCo/AAQqQQAEKkMABCpFAAQqRwAEKkkABCpLAAQqWgAEKl0ABCpgAAQqYwAEKmYABCppAAQqbAAEKm8ABCpxAAQqsAAEKrIABCq0AAQqtgAEKrkABCq6AAQquwAEKrwABCq9AAQqvwAEKsEABCrCAAQqwwAEKsUABCrGAAQrBQAEKwcABCsJAAQrCwAEKw4ABCsPAAQrEAAEKxEABCsSAAQrFAAEKxYABCsXAAQrGAAEKxoABCsbAAQrWgAEK1wABCteAAQrYAAEK2MABCtkAAQrZQAEK2YABCtnAAQraQAEK2sABCtsAAQrbQAEK28ABCtwAAQrrwAEK7EABCu0AAQrtgAEK7kABCu6AAQruwAEK7wABCu9AAQrvwAEK8EABCvCAAQrwwAEK8UABCvGAAQsBQAELAcABCwJAAQsCwAELA4ABCwPAAQsEAAELBEABCwSAAQsFAAELBYABCwXAAQsGAAELBoABCwbAAQsWgAELFwABCxeAAQsYAAELGMABCxkAAQsZQAELGYABCxnAAQsaQAELGsABCxsAAQsbQAELG8ABCxwAAQsrwAELLEABCyzAAQstQAELLgABCy5AAQsugAELLsABCy8AAQsvgAELMAABCzBAAQswgAELMQABCzFAAQtEAAELTMABC1TAAQtcwAELXUABC13AAQteQAELXsABC1+AAQtfwAELYAABC2DAAQthAAELYYABC2HAAQtiQAELYwABC2NAAQtjgAELZEABC2SAAQtlwAELaQABC2pAAQtqwAELa0ABC2yAAQttQAELbgABC26AAQt3wAELgMABC4qAAQuTgAELlEABC5TAAQuVQAELlcABC5ZAAQuWwAELlwABC5fAAQubAAELn0ABC5/AAQugQAELoMABC6FAAQuhwAELokABC6LAAQujQAELp4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ABD/GAARABQAEQAcABEAJAARACwAEQA4ABEAPAARAEAAEQBEABEASAARAFAAEQBYABEAXAARAGAAEQBoABEAbAARAQAAEQGQABECLAARArwAEQLIABEC0AARAtgAEQLgABEC6AARAvAAEQL0ABEDAAARAzQAEQNwABEDeAARA4AAEQOIABEDkAARA5gAEQOgABEDqAARA+QAEQPwABED/AARBAgAEQQUABEEIAARBCwAEQQ4ABEEQAARBTwAEQVEABEFTAARBVQAEQVgABEFZAARBWgAEQVsABEFcAARBXgAEQWAABEFhAARBYgAEQWQABEFlAARBpAAEQaYABEGoAARBqgAEQa0ABEGuAARBrwAEQbAABEGxAARBswAEQbUABEG2AARBtwAEQbkABEG6AARB+QAEQfsABEH9AARB/wAEQgIABEIDAARCBAAEQgUABEIGAARCCAAEQgoABEILAARCDAAEQg4ABEIPAARCTgAEQlAABEJTAARCVQAEQlgABEJZAARCWgAEQlsABEJcAARCXgAEQmAABEJhAARCYgAEQmQABEJlAARCpAAEQqYABEKoAARCqgAEQq0ABEKuAARCrwAEQrAABEKxAARCswAEQrUABEK2AARCtwAEQrkABEK6AARC+QAEQvsABEL9AARC/wAEQwIABEMDAARDBAAEQwUABEMGAARDCAAEQwoABEMLAARDDAAEQw4ABEMPAARDTgAEQ1AABENSAARDVAAEQ1cABENYAARDWQAEQ1oABENbAARDXQAEQ18ABENgAARDYQAEQ2MABENkAARDrwAEQ9IABEPyAAREEgAERBQABEQWAAREGAAERBoABEQdAAREHgAERB8ABEQiAAREIwAERCUABEQmAAREKAAERCsABEQsAARELQAERDAABEQxAAREOgAEREcABERMAARETgAERFAABERVAAREWAAERFsABERdAAREggAERKYABETNAARE8QAERPQABET2AARE+AAERPoABET8AARE/gAERP8ABEUCAARFDwAERSAABEUiAARFJAAERSYABEUoAARFKgAERSwABEUuAARFMAAERUEABEVEAARFRwAERUoABEVNAARFUAAERVMABEVWAARFWQAERVsABEWaAARFnAAERZ4ABEWgAARFowAERaQABEWlAARFpgAERacABEWpAARFqwAERawABEWtAARFrwAERbAABEXvAARF8QAERfMABEX1AARF+AAERfkABEX6AARF+wAERfwABEX+AARGAAAERgEABEYCAARGBAAERgUABEZEAARGRgAERkkABEZLAARGTgAERk8ABEZQAARGUQAERlIABEZUAARGVgAERlcABEZYAARGWgAERlsABEZoAARGaQAERmoABEZsAARGqwAERq0ABEavAARGsQAERrQABEa1AARGtgAERrcABEa4AARGugAERrwABEa9AARGvgAERsAABEbBAARHAAAERwIABEcEAARHBgAERwkABEcKAARHCwAERwwABEcNAARHDwAERxEABEcSAARHEwAERxUABEcWAARHVQAER1cABEdZAARHWwAER14ABEdfAARHYAAER2EABEdiAARHZAAER2YABEdnAARHaAAER2oABEdrAARHqgAER6wABEeuAARHsAAER7MABEe0AARHtQAER7YABEe3AARHuQAER7sABEe8AARHvQAER78ABEfAAARH/wAESAEABEgDAARIBQAESAgABEgJAARICgAESAsABEgMAARIDgAESBAABEgRAARIEgAESBQABEgVAARIOgAESF4ABEiFAARIqQAESKwABEiuAARIsAAESLIABEi0AARItgAESLcABEi6AARIxwAESNYABEjYAARI2gAESNwABEjeAARI4AAESOIABEjkAARI8wAESPYABEj5AARI/AAESP8ABEkCAARJBQAESQgABEkKAARJSQAESUsABElNAARJTwAESVIABElTAARJVAAESVUABElWAARJWAAESVoABElbAARJXAAESV4ABElfAARJngAESaAABEmiAARJpAAESacABEmoAARJqQAESaoABEmrAARJrQAESa8ABEmwAARJsQAESbMABEm0AARJ8wAESfUABEn3AARJ+QAESfwABEn9AARJ/gAESf8ABEoAAARKAgAESgQABEoFAARKBgAESggABEoJAARKSAAESkoABEpNAARKTwAESlIABEpTAARKVAAESlUABEpWAARKWAAESloABEpbAARKXAAESl4ABEpfAARKngAESqAABEqiAARKpAAESqcABEqoAARKqQAESqoABEqrAARKrQAESq8ABEqwAARKsQAESrMABEq0AARK8wAESvUABEr3AARK+QAESvwABEr9AARK/gAESv8ABEsAAARLAgAESwQABEsFAARLBgAESwgABEsJAARLSAAES0oABEtMAARLTgAES1EABEtSAARLUwAES1QABEtVAARLVwAES1kABEtaAARLWwAES10ABEteAARLqQAES8wABEvsAARMDAAETA4ABEwQAARMEgAETBQABEwXAARMGAAETBkABEwcAARMHQAETB8ABEwgAARMIgAETCUABEwmAARMJwAETCoABEwrAARMMAAETD0ABExCAARMRAAETEYABExLAARMTgAETFEABExTAARMeAAETJwABEzDAARM5wAETOoABEzsAARM7gAETPAABEzyAARM9AAETPUABEz4AARNBQAETRYABE0YAARNGgAETRwABE0eAARNIAAETSIABE0kAARNJgAETTcABE06AARNPQAETUAABE1DAARNRgAETUkABE1MAARNTwAETVEABE2QAARNkgAETZQABE2WAARNmQAETZoABE2bAARNnAAETZ0ABE2fAARNoQAETaIABE2jAARNpQAETaYABE3lAARN5wAETekABE3rAARN7gAETe8ABE3wAARN8QAETfIABE30AARN9gAETfcABE34AARN+gAETfsABE46AAROPAAETj8ABE5BAARORAAETkUABE5GAARORwAETkgABE5KAAROTAAETk0ABE5OAAROUAAETlEABE5eAAROXwAETmAABE5iAAROoQAETqMABE6lAAROpwAETqoABE6rAAROrAAETq0ABE6uAAROsAAETrIABE6zAAROtAAETrYABE63AARO9gAETvgABE76AARO/AAETv8ABE8AAARPAQAETwIABE8DAARPBQAETwcABE8IAARPCQAETwsABE8MAARPSwAET00ABE9PAARPUQAET1QABE9VAARPVgAET1cABE9YAARPWgAET1wABE9dAARPXgAET2AABE9hAARPoAAET6IABE+kAARPpgAET6kABE+qAARPqwAET6wABE+tAARPrwAET7EABE+yAARPswAET7UABE+2AARP9QAET/cABE/5AARP+wAET/4ABE//AARQAAAEUAEABFACAARQBAAEUAYABFAHAARQCAAEUAoABFALAARQMAAEUFQABFB7AARQnwAEUKIABFCkAARQpgAEUKgABFCqAARQrAAEUK0ABFCwAARQvQAEUMwABFDOAARQ0AAEUNIABFDUAARQ1gAEUNgABFDaAARQ6QAEUOwABFDvAARQ8gAEUPUABFD4AARQ+wAEUP4ABFEAAARRPwAEUUEABFFDAARRRQAEUUgABFFJAARRSgAEUUsABFFMAARRTgAEUVAABFFRAARRUgAEUVQABFFVAARRlAAEUZYABFGYAARRmgAEUZ0ABFGeAARRnwAEUaAABFGhAARRowAEUaUABFGmAARRpwAEUakABFGqAARR6QAEUesABFHtAARR7wAEUfIABFHzAARR9AAEUfUABFH2AARR+AAEUfoABFH7AARR/AAEUf4ABFH/AARSPgAEUkAABFJCAARSRAAEUkcABFJIAARSSQAEUkoABFJLAARSTQAEUk8ABFJQAARSUQAEUlMABFJUAARSkwAEUpUABFKXAARSmQAEUpwABFKdAARSngAEUp8ABFKgAARSogAEUqQABFKlAARSpgAEUqgABFKpAARS6AAEUuoABFLsAARS7gAEUvEABFLyAARS8wAEUvQABFL1AARS9wAEUvkABFL6AARS+wAEUv0ABFL+AARTPQAEUz8ABFNBAARTQwAEU0YABFNHAARTSAAEU0kABFNKAARTTAAEU04ABFNPAARTUAAEU1IABFNTAARTngAEU8EABFPhAARUAQAEVAMABFQFAARUBwAEVAkABFQMAARUDQAEVA4ABFQRAARUEgAEVBQABFQVAARUFwAEVBoABFQbAARUHAAEVB8ABFQgAARUJQAEVDIABFQ3AARUOQAEVDsABFRAAARUQwAEVEYABFRIAARUbQAEVJEABFS4AARU3AAEVN8ABFThAARU4wAEVOUABFTnAARU6QAEVOoABFTtAARU+gAEVQsABFUNAARVDwAEVREABFUTAARVFQAEVRcABFUZAARVGwAEVSwABFUvAARVMgAEVTUABFU4AARVOwAEVT4ABFVBAARVRAAEVUYABFWFAARVhwAEVYkABFWLAARVjgAEVY8ABFWQAARVkQAEVZIABFWUAARVlgAEVZcABFWYAARVmgAEVZsABFXaAARV3AAEVd4ABFXgAARV4wAEVeQABFXlAARV5gAEVecABFXpAARV6wAEVewABFXtAARV7wAEVfAABFYvAARWMQAEVjQABFY2AARWOQAEVjoABFY7AARWPAAEVj0ABFY/AARWQQAEVkIABFZDAARWRQAEVkYABFZTAARWVAAEVlUABFZXAARWlgAEVpgABFaaAARWnAAEVp8ABFagAARWoQAEVqIABFajAARWpQAEVqcABFaoAARWqQAEVqsABFasAARW6wAEVu0ABFbvAARW8QAEVvQABFb1AARW9gAEVvcABFb4AARW+gAEVvwABFb9AARW/gAEVwAABFcBAARXQAAEV0IABFdEAARXRgAEV0kABFdKAARXSwAEV0wABFdNAARXTwAEV1EABFdSAARXUwAEV1UABFdWAARXlQAEV5cABFeZAARXmwAEV54ABFefAARXoAAEV6EABFeiAARXpAAEV6YABFenAARXqAAEV6oABFerAARX6gAEV+wABFfuAARX8AAEV/MABFf0AARX9QAEV/YABFf3AARX+QAEV/sABFf8AARX/QAEV/8ABFgAAARYJQAEWEkABFhwAARYlAAEWJcABFiZAARYmwAEWJ0ABFifAARYoQAEWKIABFilAARYsgAEWMEABFjDAARYxQAEWMcABFjJAARYywAEWM0ABFjPAARY3gAEWOEABFjkAARY5wAEWOoABFjtAARY8AAEWPMABFj1AARZNAAEWTYABFk5AARZOwAEWT4ABFk/AARZQAAEWUEABFlCAARZRAAEWUYABFlHAARZSAAEWUoABFlLAARZigAEWYwABFmOAARZkAAEWZMABFmUAARZlQAEWZYABFmXAARZmQAEWZsABFmcAARZnQAEWZ8ABFmgAARZ3wAEWeEABFnjAARZ5QAEWegABFnpAARZ6gAEWesABFnsAARZ7gAEWfAABFnxAARZ8gAEWfQABFn1AARaNAAEWjYABFo5AARaOwAEWj4ABFo/AARaQAAEWkEABFpCAARaRAAEWkYABFpHAARaSAAEWkoABFpLAARaTQAEWowABFqOAARakAAEWpIABFqVAARalgAEWpcABFqYAARamQAEWpsABFqdAARangAEWp8ABFqhAARaogAEWuEABFrjAARa5QAEWucABFrqAARa6wAEWuwABFrtAARa7gAEWvAABFryAARa8wAEWvQABFr2AARa9wAEWzYABFs4AARbOgAEWzwABFs/AARbQAAEW0EABFtCAARbQwAEW0UABFtHAARbSAAEW0kABFtLAARbTAAEW5cABFu6AARb2gAEW/oABFv8AARb/gAEXAAABFwCAARcBQAEXAYABFwHAARcCgAEXAsABFwNAARcDgAEXBAABFwTAARcFAAEXBUABFwYAARcGQAEXB4ABFwrAARcMAAEXDIABFw0AARcOQAEXDwABFw/AARcQQAEXGYABFyKAARcsQAEXNUABFzYAARc2gAEXNwABFzeAARc4AAEXOIABFzjAARc5gAEXPMABF0EAARdBgAEXQgABF0KAARdDAAEXQ4ABF0QAARdEgAEXRQABF0lAARdKAAEXSsABF0uAARdMQAEXTQABF03AARdOgAEXT0ABF0/AARdfgAEXYAABF2CAARdhAAEXYcABF2IAARdiQAEXYoABF2LAARdjQAEXY8ABF2QAARdkQAEXZMABF2UAARd0wAEXdUABF3XAARd2QAEXdwABF3dAARd3gAEXd8ABF3gAARd4gAEXeQABF3lAARd5gAEXegABF3pAAReKAAEXioABF4tAAReLwAEXjIABF4zAAReNAAEXjUABF42AAReOAAEXjoABF47AARePAAEXj4ABF4/AAReTAAEXk0ABF5OAAReUAAEXo8ABF6RAARekwAEXpUABF6YAARemQAEXpoABF6bAARenAAEXp4ABF6gAAReoQAEXqIABF6kAARepQAEXuQABF7mAARe6AAEXuoABF7tAARe7gAEXu8ABF7wAARe8QAEXvMABF71AARe9gAEXvcABF75AARe+gAEXzkABF87AARfPQAEXz8ABF9CAARfQwAEX0QABF9FAARfRgAEX0gABF9KAARfSwAEX0wABF9OAARfTwAEX44ABF+QAARfkgAEX5QABF+XAARfmAAEX5kABF+aAARfmwAEX50ABF+fAARfoAAEX6EABF+jAARfpAAEX+MABF/lAARf5wAEX+kABF/sAARf7QAEX+4ABF/vAARf8AAEX/IABF/0AARf9QAEX/YABF/4AARf+QAEYB4ABGBCAARgaQAEYI0ABGCQAARgkgAEYJQABGCWAARgmAAEYJoABGCbAARgngAEYKsABGC6AARgvAAEYL4ABGDAAARgwgAEYMQABGDGAARgyAAEYNcABGDaAARg3QAEYOAABGDjAARg5gAEYOkABGDsAARg7gAEYS0ABGEvAARhMgAEYTQABGE3AARhOAAEYTkABGE6AARhOwAEYT0ABGE/AARhQAAEYUEABGFDAARhRAAEYYMABGGFAARhhwAEYYkABGGMAARhjQAEYY4ABGGPAARhkAAEYZIABGGUAARhlQAEYZYABGGYAARhmQAEYdgABGHaAARh3AAEYd4ABGHhAARh4gAEYeMABGHkAARh5QAEYecABGHpAARh6gAEYesABGHtAARh7gAEYi0ABGIvAARiMgAEYjQABGI3AARiOAAEYjkABGI6AARiOwAEYj0ABGI/AARiQAAEYkEABGJDAARiRAAEYoMABGKFAARihwAEYokABGKMAARijQAEYo4ABGKPAARikAAEYpIABGKUAARilQAEYpYABGKYAARimQAEYtgABGLaAARi3AAEYt4ABGLhAARi4gAEYuMABGLkAARi5QAEYucABGLpAARi6gAEYusABGLtAARi7gAEYy0ABGMvAARjMQAEYzMABGM2AARjNwAEYzgABGM5AARjOgAEYzwABGM+AARjPwAEY0AABGNCAARjQwAEY0wABGNNAARjTwAEY5IABGO2AARj2gAEY/0ABGQkAARkRAAEZGsABGSSAARksgAEZNYABGT6AARk/AAEZP8ABGUBAARlAwAEZQUABGUIAARlCgAEZQwABGUOAARlEAAEZRIABGUUAARlFwAEZRoABGUbAARlIAAEZS0ABGUwAARlMgAEZTUABGU4AARlOgAEZV8ABGWDAARlqgAEZc4ABGXRAARl0wAEZdUABGXXAARl2QAEZdsABGXcAARl3wAEZewABGX/AARmAQAEZgMABGYFAARmBwAEZgkABGYLAARmDQAEZg8ABGYRAARmJAAEZicABGYqAARmLQAEZjAABGYzAARmNgAEZjkABGY8AARmPwAEZkEABGaAAARmggAEZoUABGaHAARmigAEZosABGaMAARmjQAEZo4ABGaQAARmkgAEZpMABGaUAARmlgAEZpcABGagAARmoQAEZqMABGbiAARm5AAEZuYABGboAARm6wAEZuwABGbtAARm7gAEZu8ABGbxAARm8wAEZvQABGb1AARm9wAEZvgABGc3AARnOQAEZzwABGc+AARnQQAEZ0IABGdDAARnRAAEZ0UABGdHAARnSQAEZ0oABGdLAARnTQAEZ04ABGdXAARnWAAEZ1oABGeZAARnmwAEZ50ABGefAARnogAEZ6MABGekAARnpQAEZ6YABGeoAARnqgAEZ6sABGesAARnrgAEZ68ABGfuAARn8AAEZ/MABGf1AARn+AAEZ/kABGf6AARn+wAEZ/wABGf+AARoAAAEaAEABGgCAARoBAAEaAUABGgOAARoDwAEaBEABGhQAARoUgAEaFQABGhWAARoWQAEaFoABGhbAARoXAAEaF0ABGhfAARoYQAEaGIABGhjAARoZQAEaGYABGilAARopwAEaKoABGisAARorwAEaLAABGixAARosgAEaLMABGi1AARotwAEaLgABGi5AARouwAEaLwABGjJAARoygAEaMsABGjNAARpDAAEaQ4ABGkQAARpEgAEaRUABGkWAARpFwAEaRgABGkZAARpGwAEaR0ABGkeAARpHwAEaSEABGkiAARpYQAEaWMABGlmAARpaAAEaWsABGlsAARpbQAEaW4ABGlvAARpcQAEaXMABGl0AARpdQAEaXcABGl4AARplAAEaaEABGmsAARprwAEabIABGm1AARpuAAEabsABGnGAARpyQAEacwABGnPAARp0gAEadUABGnXAARp6gAEafgABGoBAARqEwAEal4ABGqBAARqoQAEasEABGrDAARqxQAEascABGrJAARqzAAEas0ABGrOAARq0QAEatIABGrUAARq1QAEatcABGraAARq2wAEatwABGrfAARq4AAEauUABGryAARq9wAEavkABGr7AARrAAAEawMABGsGAARrCAAEay0ABGtRAARreAAEa5wABGufAARroQAEa6MABGulAARrpwAEa6kABGuqAARrrQAEa7oABGvLAARrzQAEa88ABGvRAARr0wAEa9UABGvXAARr2QAEa9sABGvsAARr7wAEa/IABGv1AARr+AAEa/sABGv+AARsAQAEbAQABGwGAARsRQAEbEcABGxJAARsSwAEbE4ABGxPAARsUAAEbFEABGxSAARsVAAEbFYABGxXAARsWAAEbFoABGxbAARsmgAEbJwABGyeAARsoAAEbKMABGykAARspQAEbKYABGynAARsqQAEbKsABGysAARsrQAEbK8ABGywAARs7wAEbPEABGz0AARs9gAEbPkABGz6AARs+wAEbPwABGz9AARs/wAEbQEABG0CAARtAwAEbQUABG0GAARtEwAEbRQABG0VAARtFwAEbVYABG1YAARtWgAEbVwABG1fAARtYAAEbWEABG1iAARtYwAEbWUABG1nAARtaAAEbWkABG1rAARtbAAEbasABG2tAARtrwAEbbEABG20AARttQAEbbYABG23AARtuAAEbboABG28AARtvQAEbb4ABG3AAARtwQAEbgAABG4CAARuBAAEbgYABG4JAARuCgAEbgsABG4MAARuDQAEbg8ABG4RAARuEgAEbhMABG4VAARuFgAEblUABG5XAARuWQAEblsABG5eAARuXwAEbmAABG5hAARuYgAEbmQABG5mAARuZwAEbmgABG5qAARuawAEbqoABG6sAARurgAEbrAABG6zAARutAAEbrUABG62AARutwAEbrkABG67AARuvAAEbr0ABG6/AARuwAAEbuUABG8JAARvMAAEb1QABG9XAARvWQAEb1sABG9dAARvXwAEb2EABG9iAARvZQAEb3IABG+BAARvgwAEb4UABG+HAARviQAEb4sABG+NAARvjwAEb54ABG+hAARvpAAEb6cABG+qAARvrQAEb7AABG+zAARvtQAEb/QABG/2AARv+AAEb/oABG/9AARv/gAEb/8ABHAAAARwAQAEcAMABHAFAARwBgAEcAcABHAJAARwCgAEcEkABHBLAARwTQAEcE8ABHBSAARwUwAEcFQABHBVAARwVgAEcFgABHBaAARwWwAEcFwABHBeAARwXwAEcJ4ABHCgAARwogAEcKQABHCnAARwqAAEcKkABHCqAARwqwAEcK0ABHCvAARwsAAEcLEABHCzAARwtAAEcPMABHD1AARw+AAEcPoABHD9AARw/gAEcP8ABHEAAARxAQAEcQMABHEFAARxBgAEcQcABHEJAARxCgAEcUkABHFLAARxTQAEcU8ABHFSAARxUwAEcVQABHFVAARxVgAEcVgABHFaAARxWwAEcVwABHFeAARxXwAEcZ4ABHGgAARxowAEcaUABHGoAARxqQAEcaoABHGrAARxrAAEca4ABHGwAARxsQAEcbIABHG0AARxtQAEcdwABHIbAARyHQAEch8ABHIhAARyJAAEciUABHImAARyJwAEcigABHIqAARyLAAEci0ABHIuAARyMAAEcjEABHJ8AARynwAEcr8ABHLfAARy4QAEcuMABHLlAARy5wAEcuoABHLrAARy7AAEcu8ABHLwAARy8gAEcvMABHL1AARy+AAEcvkABHL6AARy/QAEcv4ABHMDAARzEAAEcxUABHMXAARzGQAEcx4ABHMhAARzJAAEcyYABHNLAARzbwAEc5YABHO6AARzvQAEc78ABHPBAARzwwAEc8UABHPHAARzyAAEc8sABHPYAARz6QAEc+sABHPtAARz7wAEc/EABHPzAARz9QAEc/cABHP5AAR0CgAEdA0ABHQQAAR0EwAEdBYABHQZAAR0HAAEdB8ABHQiAAR0JAAEdGMABHRlAAR0ZwAEdGkABHRsAAR0bQAEdG4ABHRvAAR0cAAEdHIABHR0AAR0dQAEdHYABHR4AAR0eQAEdLgABHS6AAR0vAAEdL4ABHTBAAR0wgAEdMMABHTEAAR0xQAEdMcABHTJAAR0ygAEdMsABHTNAAR0zgAEdQ0ABHUPAAR1EgAEdRQABHUXAAR1GAAEdRkABHUaAAR1GwAEdR0ABHUfAAR1IAAEdSEABHUjAAR1JAAEdTEABHUyAAR1MwAEdTUABHV0AAR1dgAEdXgABHV6AAR1fQAEdX4ABHV/AAR1gAAEdYEABHWDAAR1hQAEdYYABHWHAAR1iQAEdYoABHXJAAR1ywAEdc0ABHXPAAR10gAEddMABHXUAAR11QAEddYABHXYAAR12gAEddsABHXcAAR13gAEdd8ABHYeAAR2IAAEdiIABHYkAAR2JwAEdigABHYpAAR2KgAEdisABHYtAAR2LwAEdjAABHYxAAR2MwAEdjQABHZzAAR2dQAEdncABHZ5AAR2fAAEdn0ABHZ+AAR2fwAEdoAABHaCAAR2hAAEdoUABHaGAAR2iAAEdokABHbIAAR2ygAEdswABHbOAAR20QAEdtIABHbTAAR21AAEdtUABHbXAAR22QAEdtoABHbbAAR23QAEdt4ABHcDAAR3JwAEd04ABHdyAAR3dQAEd3cABHd5AAR3ewAEd30ABHd/AAR3gAAEd4MABHeQAAR3nwAEd6EABHejAAR3pQAEd6cABHepAAR3qwAEd60ABHe8AAR3vwAEd8IABHfFAAR3yAAEd8sABHfOAAR30QAEd9MABHgSAAR4FAAEeBYABHgYAAR4GwAEeBwABHgdAAR4HgAEeB8ABHghAAR4IwAEeCQABHglAAR4JwAEeCgABHhnAAR4aQAEeGsABHhtAAR4cAAEeHEABHhyAAR4cwAEeHQABHh2AAR4eAAEeHkABHh6AAR4fAAEeH0ABHi8AAR4vgAEeMAABHjCAAR4xQAEeMYABHjHAAR4yAAEeMkABHjLAAR4zQAEeM4ABHjPAAR40QAEeNIABHkRAAR5EwAEeRYABHkYAAR5GwAEeRwABHkdAAR5HgAEeR8ABHkhAAR5IwAEeSQABHklAAR5JwAEeSgABHlnAAR5aQAEeWsABHltAAR5cAAEeXEABHlyAAR5cwAEeXQABHl2AAR5eAAEeXkABHl6AAR5fAAEeX0ABHm8AAR5vgAEecEABHnDAAR5xgAEeccABHnIAAR5yQAEecoABHnMAAR5zgAEec8ABHnQAAR50gAEedMABHn6AAR6OQAEejsABHo9AAR6PwAEekIABHpDAAR6RAAEekUABHpGAAR6SAAEekoABHpLAAR6TAAEek4ABHpPAAR6mgAEer0ABHrdAAR6/QAEev8ABHsBAAR7AwAEewUABHsIAAR7CQAEewoABHsNAAR7DgAEexAABHsRAAR7EwAEexYABHsXAAR7GAAEexsABHscAAR7IQAEey4ABHszAAR7NQAEezcABHs8AAR7PwAEe0IABHtEAAR7aQAEe40ABHu0AAR72AAEe9sABHvdAAR73wAEe+EABHvjAAR75QAEe+YABHvpAAR79gAEfAcABHwJAAR8CwAEfA0ABHwPAAR8EQAEfBMABHwVAAR8FwAEfCgABHwrAAR8LgAEfDEABHw0AAR8NwAEfDoABHw9AAR8QAAEfEIABHyBAAR8gwAEfIUABHyHAAR8igAEfIsABHyMAAR8jQAEfI4ABHyQAAR8kgAEfJMABHyUAAR8lgAEfJcABHzWAAR82AAEfNoABHzcAAR83wAEfOAABHzhAAR84gAEfOMABHzlAAR85wAEfOgABHzpAAR86wAEfOwABH0rAAR9LQAEfTAABH0yAAR9NQAEfTYABH03AAR9OAAEfTkABH07AAR9PQAEfT4ABH0/AAR9QQAEfUIABH1PAAR9UAAEfVEABH1TAAR9kgAEfZQABH2WAAR9mAAEfZsABH2cAAR9nQAEfZ4ABH2fAAR9oQAEfaMABH2kAAR9pQAEfacABH2oAAR95wAEfekABH3rAAR97QAEffAABH3xAAR98gAEffMABH30AAR99gAEffgABH35AAR9+gAEffwABH39AAR+PAAEfj4ABH5AAAR+QgAEfkUABH5GAAR+RwAEfkgABH5JAAR+SwAEfk0ABH5OAAR+TwAEflEABH5SAAR+kQAEfpMABH6VAAR+lwAEfpoABH6bAAR+nAAEfp0ABH6eAAR+oAAEfqIABH6jAAR+pAAEfqYABH6nAAR+5gAEfugABH7qAAR+7AAEfu8ABH7wAAR+8QAEfvIABH7zAAR+9QAEfvcABH74AAR++QAEfvsABH78AAR/IQAEf0UABH9sAAR/kAAEf5MABH+VAAR/lwAEf5kABH+bAAR/nQAEf54ABH+hAAR/rgAEf70ABH+/AAR/wQAEf8MABH/FAAR/xwAEf8kABH/LAAR/2gAEf90ABH/gAAR/4wAEf+YABH/pAAR/7AAEf+8ABH/xAASAMAAEgDIABIA0AASANgAEgDkABIA6AASAOwAEgDwABIA9AASAPwAEgEEABIBCAASAQwAEgEUABIBGAASAhQAEgIcABICJAASAiwAEgI4ABICPAASAkAAEgJEABICSAASAlAAEgJYABICXAASAmAAEgJoABICbAASA2gAEgNwABIDeAASA4AAEgOMABIDkAASA5QAEgOYABIDnAASA6QAEgOsABIDsAASA7QAEgO8ABIDwAASBLwAEgTEABIEzAASBNQAEgTgABIE5AASBOgAEgTsABIE8AASBPgAEgUAABIFBAASBQgAEgUQABIFFAASBhAAEgYYABIGIAASBigAEgY0ABIGOAASBjwAEgZAABIGRAASBkwAEgZUABIGWAASBlwAEgZkABIGaAASB2QAEgdsABIHdAASB3wAEgeIABIHjAASB5AAEgeUABIHmAASB6AAEgeoABIHrAASB7AAEge4ABIHvAASCLgAEgjAABIIyAASCNAAEgjcABII4AASCOQAEgjoABII7AASCPQAEgj8ABIJAAASCQQAEgkMABIJEAASCjwAEgrIABILSAASC8gAEgvQABIL2AASC+AAEgvoABIL9AASC/gAEgv8ABIMCAASDAwAEgwUABIMGAASDCQAEgwwABIMNAASDDgAEgxEABIMSAASDFwAEgyQABIMpAASDKwAEgy4ABIMzAASDNgAEgzkABIM7AASDYAAEg4QABIOrAASDzwAEg9IABIPUAASD1gAEg9gABIPaAASD3AAEg90ABIPgAASD7QAEg/4ABIQAAASEAgAEhAQABIQGAASECAAEhAoABIQMAASEDgAEhB8ABIQiAASEJQAEhCgABIQrAASELgAEhDEABIQ0AASENwAEhDkABIR4AASEegAEhHwABIR+AASEgQAEhIIABISDAASEhAAEhIUABISHAASEiQAEhIoABISLAASEjQAEhI4ABITNAASEzwAEhNEABITTAASE1gAEhNcABITYAASE2QAEhNoABITcAASE3gAEhN8ABITgAASE4gAEhOMABIUiAASFJAAEhScABIUpAASFLAAEhS0ABIUuAASFLwAEhTAABIUyAASFNAAEhTUABIU2AASFOAAEhTkABIVGAASFRwAEhUgABIVKAASFiQAEhYsABIWNAASFjwAEhZIABIWTAASFlAAEhZUABIWWAASFmAAEhZoABIWbAASFnAAEhZ4ABIWfAASF3gAEheAABIXiAASF5AAEhecABIXoAASF6QAEheoABIXrAASF7QAEhe8ABIXwAASF8QAEhfMABIX0AASGMwAEhjUABIY3AASGOQAEhjwABIY9AASGPgAEhj8ABIZAAASGQgAEhkQABIZFAASGRgAEhkgABIZJAASGiAAEhooABIaMAASGjgAEhpEABIaSAASGkwAEhpQABIaVAASGlwAEhpkABIaaAASGmwAEhp0ABIaeAASG3QAEht8ABIbhAASG4wAEhuYABIbnAASG6AAEhukABIbqAASG7AAEhu4ABIbvAASG8AAEhvIABIbzAASHGAAEhzwABIdjAASHhwAEh4oABIeNAASHjwAEh5EABIeTAASHlQAEh5YABIeZAASHpgAEh7MABIe2AASHuQAEh7wABIe/AASHwgAEh8UABIfSAASH1QAEh9gABIfbAASH3gAEh+EABIfkAASH5gAEiCUABIgnAASIKgAEiCwABIgvAASIMAAEiDEABIgyAASIMwAEiDUABIg4AASIOQAEiDoABIg8AASIPQAEiIAABIikAASIyAAEiOsABIkSAASJMgAEiVkABImAAASJoAAEicQABInoAASJ6gAEie0ABInvAASJ8QAEifMABIn2AASJ+AAEifoABIn8AASJ/gAEigAABIoCAASKBQAEiggABIoJAASKDgAEihsABIoeAASKIAAEiiMABIomAASKKAAEik0ABIpxAASKmAAEirwABIq/AASKwQAEisMABIrFAASKxwAEiskABIrKAASKzQAEitoABIrtAASK7wAEivEABIrzAASK9QAEivcABIr5AASK+wAEiv0ABIr/AASLEgAEixUABIsYAASLGwAEix4ABIshAASLJAAEiycABIsqAASLLQAEiy8ABItuAASLcAAEi3MABIt1AASLeAAEi3kABIt6AASLewAEi3wABIt+AASLgAAEi4EABIuCAASLhAAEi4UABIuOAASLjwAEi5EABIvQAASL0gAEi9QABIvWAASL2QAEi9oABIvbAASL3AAEi90ABIvfAASL4QAEi+IABIvjAASL5QAEi+YABIwlAASMJwAEjCoABIwsAASMLwAEjDAABIwxAASMMgAEjDMABIw1AASMNwAEjDgABIw5AASMOwAEjDwABIxFAASMRgAEjEgABIyHAASMiQAEjIsABIyNAASMkAAEjJEABIySAASMkwAEjJQABIyWAASMmAAEjJkABIyaAASMnAAEjJ0ABIzcAASM3gAEjOEABIzjAASM5gAEjOcABIzoAASM6QAEjOoABIzsAASM7gAEjO8ABIzwAASM8gAEjPMABIz8AASM/QAEjP8ABI0+AASNQAAEjUIABI1EAASNRwAEjUgABI1JAASNSgAEjUsABI1NAASNTwAEjVAABI1RAASNUwAEjVQABI2TAASNlQAEjZgABI2aAASNnQAEjZ4ABI2fAASNoAAEjaEABI2jAASNpQAEjaYABI2nAASNqQAEjaoABI23AASNuAAEjbkABI27AASN+gAEjfwABI3+AASOAAAEjgMABI4EAASOBQAEjgYABI4HAASOCQAEjgsABI4MAASODQAEjg8ABI4QAASOTwAEjlEABI5UAASOVgAEjlkABI5aAASOWwAEjlwABI5dAASOXwAEjmEABI5iAASOYwAEjmUABI5mAASOdQAEjoIABI6JAASOjAAEjo8ABI6SAASOmQAEjpwABI6fAASOogAEjqQABI6sAASOsQAEjvwABI8fAASPPwAEj18ABI9hAASPYwAEj2UABI9nAASPagAEj2sABI9sAASPbwAEj3AABI9yAASPcwAEj3UABI94AASPeQAEj3oABI99AASPfgAEj4MABI+QAASPlQAEj5cABI+ZAASPngAEj6EABI+kAASPpgAEj8sABI/vAASQFgAEkDoABJA9AASQPwAEkEEABJBDAASQRQAEkEcABJBIAASQSwAEkFgABJBpAASQawAEkG0ABJBvAASQcQAEkHMABJB1AASQdwAEkHkABJCKAASQjQAEkJAABJCTAASQlgAEkJkABJCcAASQnwAEkKIABJCkAASQ4wAEkOUABJDnAASQ6QAEkOwABJDtAASQ7gAEkO8ABJDwAASQ8gAEkPQABJD1AASQ9gAEkPgABJD5AASROAAEkToABJE8AASRPgAEkUEABJFCAASRQwAEkUQABJFFAASRRwAEkUkABJFKAASRSwAEkU0ABJFOAASRjQAEkY8ABJGSAASRlAAEkZcABJGYAASRmQAEkZoABJGbAASRnQAEkZ8ABJGgAASRoQAEkaMABJGkAASRsQAEkbIABJGzAASRtQAEkfQABJH2AASR+AAEkfoABJH9AASR/gAEkf8ABJIAAASSAQAEkgMABJIFAASSBgAEkgcABJIJAASSCgAEkkkABJJLAASSTQAEkk8ABJJSAASSUwAEklQABJJVAASSVgAEklgABJJaAASSWwAEklwABJJeAASSXwAEkp4ABJKgAASSogAEkqQABJKnAASSqAAEkqkABJKqAASSqwAEkq0ABJKvAASSsAAEkrEABJKzAASStAAEkvMABJL1AASS9wAEkvkABJL8AASS/QAEkv4ABJL/AASTAAAEkwIABJMEAASTBQAEkwYABJMIAASTCQAEk0gABJNKAASTTAAEk04ABJNRAASTUgAEk1MABJNUAASTVQAEk1cABJNZAASTWgAEk1sABJNdAASTXgAEk4MABJOnAASTzgAEk/IABJP1AAST9wAEk/kABJP7AAST/QAEk/8ABJQAAASUAwAElBAABJQfAASUIQAElCMABJQlAASUJwAElCkABJQrAASULQAElDwABJQ/AASUQgAElEUABJRIAASUSwAElE4ABJRRAASUUwAElJIABJSUAASUlgAElJgABJSbAASUnAAElJ0ABJSeAASUnwAElKEABJSjAASUpAAElKUABJSnAASUqAAElOcABJTpAASU6wAElO0ABJTwAASU8QAElPIABJTzAASU9AAElPYABJT4AASU+QAElPoABJT8AASU/QAElTwABJU+AASVQAAElUIABJVFAASVRgAElUcABJVIAASVSQAElUsABJVNAASVTgAElU8ABJVRAASVUgAElZEABJWTAASVlQAElZcABJWaAASVmwAElZwABJWdAASVngAElaAABJWiAASVowAElaQABJWmAASVpwAEleYABJXoAASV6gAElewABJXvAASV8AAElfEABJXyAASV8wAElfUABJX3AASV+AAElfkABJX7AASV/AAEljsABJY9AASWPwAElkEABJZEAASWRQAElkYABJZHAASWSAAElkoABJZMAASWTQAElk4ABJZQAASWUQAElpAABJaSAASWlAAElpYABJaZAASWmgAElpsABJacAASWnQAElp8ABJahAASWogAElqMABJalAASWpgAElvEABJcUAASXNAAEl1QABJdWAASXWAAEl1oABJdcAASXXwAEl2AABJdhAASXZAAEl2UABJdnAASXaAAEl2oABJdtAASXbgAEl28ABJdyAASXcwAEl3gABJeFAASXigAEl4wABJeOAASXkwAEl5YABJeZAASXmwAEl8AABJfkAASYCwAEmC8ABJgyAASYNAAEmDYABJg4AASYOgAEmDwABJg9AASYQAAEmE0ABJheAASYYAAEmGIABJhkAASYZgAEmGgABJhqAASYbAAEmG4ABJh/AASYggAEmIUABJiIAASYiwAEmI4ABJiRAASYlAAEmJcABJiZAASY2AAEmNoABJjcAASY3gAEmOEABJjiAASY4wAEmOQABJjlAASY5wAEmOkABJjqAASY6wAEmO0ABJjuAASZLQAEmS8ABJkxAASZMwAEmTYABJk3AASZOAAEmTkABJk6AASZPAAEmT4ABJk/AASZQAAEmUIABJlDAASZggAEmYQABJmHAASZiQAEmYwABJmNAASZjgAEmY8ABJmQAASZkgAEmZQABJmVAASZlgAEmZgABJmZAASZpgAEmacABJmoAASZqgAEmekABJnrAASZ7QAEme8ABJnyAASZ8wAEmfQABJn1AASZ9gAEmfgABJn6AASZ+wAEmfwABJn+AASZ/wAEmj4ABJpAAASaQgAEmkQABJpHAASaSAAEmkkABJpKAASaSwAEmk0ABJpPAASaUAAEmlEABJpTAASaVAAEmpMABJqVAASalwAEmpkABJqcAASanQAEmp4ABJqfAASaoAAEmqIABJqkAASapQAEmqYABJqoAASaqQAEmugABJrqAASa7AAEmu4ABJrxAASa8gAEmvMABJr0AASa9QAEmvcABJr5AASa+gAEmvsABJr9AASa/gAEmz0ABJs/AASbQQAEm0MABJtGAASbRwAEm0gABJtJAASbSgAEm0wABJtOAASbTwAEm1AABJtSAASbUwAEm3gABJucAASbwwAEm+cABJvqAASb7AAEm+4ABJvwAASb8gAEm/QABJv1AASb+AAEnAUABJwUAAScFgAEnBgABJwaAAScHAAEnB4ABJwgAAScIgAEnDEABJw0AAScNwAEnDoABJw9AAScQAAEnEMABJxGAAScSAAEnIcABJyJAASciwAEnI0ABJyQAASckQAEnJIABJyTAASclAAEnJYABJyYAAScmQAEnJoABJycAAScnQAEnNwABJzeAASc4AAEnOIABJzlAASc5gAEnOcABJzoAASc6QAEnOsABJztAASc7gAEnO8ABJzxAASc8gAEnTEABJ0zAASdNQAEnTcABJ06AASdOwAEnTwABJ09AASdPgAEnUAABJ1CAASdQwAEnUQABJ1GAASdRwAEnYYABJ2IAASdigAEnYwABJ2PAASdkAAEnZEABJ2SAASdkwAEnZUABJ2XAASdmAAEnZkABJ2bAASdnAAEndsABJ3dAASd3wAEneEABJ3kAASd5QAEneYABJ3nAASd6AAEneoABJ3sAASd7QAEne4ABJ3wAASd8QAEnjAABJ4yAASeNAAEnjYABJ45AASeOgAEnjsABJ48AASePQAEnj8ABJ5BAASeQgAEnkMABJ5FAASeRgAEnoUABJ6HAASeiQAEnosABJ6OAASejwAEnpAABJ6RAASekgAEnpQABJ6WAASelwAEnpgABJ6aAASemwAEnuYABJ8JAASfKQAEn0kABJ9LAASfTQAEn08ABJ9RAASfVAAEn1UABJ9WAASfWQAEn1oABJ9cAASfXQAEn18ABJ9iAASfYwAEn2QABJ9nAASfaAAEn20ABJ96AASffwAEn4EABJ+DAASfiAAEn4sABJ+OAASfkAAEn7UABJ/ZAASgAAAEoCQABKAnAASgKQAEoCsABKAtAASgLwAEoDEABKAyAASgNQAEoEIABKBTAASgVQAEoFcABKBZAASgWwAEoF0ABKBfAASgYQAEoGMABKB0AASgdwAEoHoABKB9AASggAAEoIMABKCGAASgiQAEoIwABKCOAASgzQAEoM8ABKDRAASg0wAEoNYABKDXAASg2AAEoNkABKDaAASg3AAEoN4ABKDfAASg4AAEoOIABKDjAAShIgAEoSQABKEmAAShKAAEoSsABKEsAAShLQAEoS4ABKEvAAShMQAEoTMABKE0AAShNQAEoTcABKE4AAShdwAEoXkABKF8AAShfgAEoYEABKGCAAShgwAEoYQABKGFAAShhwAEoYkABKGKAAShiwAEoY0ABKGOAAShmwAEoZwABKGdAAShnwAEod4ABKHgAASh4gAEoeQABKHnAASh6AAEoekABKHqAASh6wAEoe0ABKHvAASh8AAEofEABKHzAASh9AAEojMABKI1AASiNwAEojkABKI8AASiPQAEoj4ABKI/AASiQAAEokIABKJEAASiRQAEokYABKJIAASiSQAEoogABKKKAASijAAEoo4ABKKRAASikgAEopMABKKUAASilQAEopcABKKZAASimgAEopsABKKdAASingAEot0ABKLfAASi4QAEouMABKLmAASi5wAEougABKLpAASi6gAEouwABKLuAASi7wAEovAABKLyAASi8wAEozIABKM0AASjNgAEozgABKM7AASjPAAEoz0ABKM+AASjPwAEo0EABKNDAASjRAAEo0UABKNHAASjSAAEo20ABKORAASjuAAEo9wABKPfAASj4QAEo+MABKPlAASj5wAEo+kABKPqAASj7QAEo/oABKQJAASkCwAEpA0ABKQPAASkEQAEpBMABKQVAASkFwAEpCYABKQpAASkLAAEpC8ABKQyAASkNQAEpDgABKQ7AASkPQAEpHwABKR+AASkgQAEpIMABKSGAASkhwAEpIgABKSJAASkigAEpIwABKSOAASkjwAEpJAABKSSAASkkwAEpNIABKTUAASk1gAEpNgABKTbAASk3AAEpN0ABKTeAASk3wAEpOEABKTjAASk5AAEpOUABKTnAASk6AAEpScABKUpAASlKwAEpS0ABKUwAASlMQAEpTIABKUzAASlNAAEpTYABKU4AASlOQAEpToABKU8AASlPQAEpXwABKV+AASlgQAEpYMABKWGAASlhwAEpYgABKWJAASligAEpYwABKWOAASljwAEpZAABKWSAASlkwAEpdIABKXUAASl1gAEpdgABKXbAASl3AAEpd0ABKXeAASl3wAEpeEABKXjAASl5AAEpeUABKXnAASl6AAEpicABKYpAASmKwAEpi0ABKYwAASmMQAEpjIABKYzAASmNAAEpjYABKY4AASmOQAEpjoABKY8AASmPQAEpnwABKZ+AASmgAAEpoIABKaFAASmhgAEpocABKaIAASmiQAEposABKaNAASmjgAEpo8ABKaRAASmkgAEppsABKacAASmngAEpt0ABKbfAASm4QAEpuMABKbmAASm5wAEpugABKbpAASm6gAEpuwABKbvAASm8AAEpvEABKbzAASm9AAEpzMABKc1AASnOAAEpzoABKc9AASnPgAEpz8ABKdAAASnQQAEp0MABKdGAASnRwAEp0gABKdKAASnSwAEp4oABKeMAASnjwAEp5EABKeUAASnlQAEp5YABKeXAASnmAAEp5oABKedAASnngAEp58ABKehAASnogAEp+EABKfjAASn5gAEp+gABKfrAASn7AAEp+0ABKfuAASn7wAEp/EABKf0AASn9QAEp/YABKf4AASn+QAEqDgABKg6AASoPAAEqD4ABKhBAASoQgAEqEMABKhEAASoRQAEqEcABKhKAASoSwAEqEwABKhOAASoTwAEqJoABKi9AASo3QAEqP0ABKj/AASpAQAEqQMABKkFAASpCAAEqQkABKkKAASpDQAEqQ4ABKkQAASpEQAEqRMABKkWAASpFwAEqRgABKkbAASpHAAEqSEABKkuAASpMwAEqTUABKk3AASpPAAEqT8ABKlCAASpRAAEqWkABKmNAASptAAEqdgABKnbAASp3QAEqd8ABKnhAASp4wAEqeUABKnmAASp6QAEqfYABKoHAASqCQAEqgsABKoNAASqDwAEqhEABKoTAASqFQAEqhcABKooAASqKwAEqi4ABKoxAASqNAAEqjcABKo6AASqPQAEqkAABKpCAASqgQAEqoMABKqFAASqhwAEqooABKqLAASqjAAEqo0ABKqOAASqkAAEqpIABKqTAASqlAAEqpYABKqXAASq1gAEqtgABKraAASq3AAEqt8ABKrgAASq4QAEquIABKrjAASq5QAEqucABKroAASq6QAEqusABKrsAASrKwAEqy0ABKswAASrMgAEqzUABKs2AASrNwAEqzgABKs5AASrOwAEqz0ABKs+AASrPwAEq0EABKtCAASrTwAEq1AABKtRAASrUwAEq5IABKuUAASrlgAEq5gABKubAASrnAAEq50ABKueAASrnwAEq6EABKujAASrpAAEq6UABKunAASrqAAEq+cABKvpAASr6wAEq+0ABKvwAASr8QAEq/IABKvzAASr9AAEq/YABKv4AASr+QAEq/oABKv8AASr/QAErDwABKw+AASsQAAErEIABKxFAASsRgAErEcABKxIAASsSQAErEsABKxNAASsTgAErE8ABKxRAASsUgAErJEABKyTAASslQAErJcABKyaAASsmwAErJwABKydAASsngAErKAABKyiAASsowAErKQABKymAASspwAErOYABKzoAASs6gAErOwABKzvAASs8AAErPEABKzyAASs8wAErPUABKz3AASs+AAErPkABKz7AASs/AAErSEABK1FAAStbAAErZAABK2TAAStlQAErZcABK2ZAAStmwAErZ0ABK2eAAStoQAEra4ABK29AAStvwAErcEABK3DAAStxQAErccABK3JAAStywAErdoABK3dAASt4AAEreMABK3mAASt6QAErewABK3vAASt8QAErjAABK4yAASuNAAErjYABK45AASuOgAErjsABK48AASuPQAErj8ABK5BAASuQgAErkMABK5FAASuRgAEroUABK6HAASuiQAErosABK6OAASujwAErpAABK6RAASukgAErpQABK6WAASulwAErpgABK6aAASumwAErtoABK7cAASu3gAEruAABK7jAASu5AAEruUABK7mAASu5wAErukABK7rAASu7AAEru0ABK7vAASu8AAEry8ABK8xAASvMwAErzUABK84AASvOQAErzoABK87AASvPAAErz4ABK9AAASvQQAEr0IABK9EAASvRQAEr4QABK+GAASviAAEr4oABK+NAASvjgAEr48ABK+QAASvkQAEr5MABK+VAASvlgAEr5cABK+ZAASvmgAEr9kABK/bAASv3QAEr98ABK/iAASv4wAEr+QABK/lAASv5gAEr+gABK/qAASv6wAEr+wABK/uAASv7wAEsC4ABLAwAASwMgAEsDQABLA3AASwOAAEsDkABLA6AASwOwAEsD0ABLA/AASwQAAEsEEABLBDAASwRAAEsE0ABLBOAASwUAAEsJMABLC3AASw2wAEsP4ABLElAASxRQAEsWwABLGTAASxswAEsdcABLH7AASx/QAEsgAABLICAASyBAAEsgYABLIJAASyCwAEsg0ABLIPAASyEQAEshMABLIVAASyGAAEshsABLIcAASyIQAEsi4ABLIxAASyMwAEsjYABLI5AASyOwAEsmAABLKEAASyqwAEss8ABLLSAASy1AAEstYABLLYAASy2gAEstwABLLdAASy4AAEsu0ABLMAAASzAgAEswQABLMGAASzCAAEswoABLMMAASzDgAEsxAABLMSAASzJQAEsygABLMrAASzLgAEszEABLM0AASzNwAEszoABLM9AASzQAAEs0IABLOBAASzgwAEs4YABLOIAASziwAEs4wABLONAASzjgAEs48ABLORAASzkwAEs5QABLOVAASzlwAEs5gABLOhAASzogAEs6QABLPjAASz5QAEs+cABLPpAASz7AAEs+0ABLPuAASz7wAEs/AABLPyAASz9AAEs/UABLP2AASz+AAEs/kABLQ4AAS0OgAEtD0ABLQ/AAS0QgAEtEMABLREAAS0RQAEtEYABLRIAAS0SgAEtEsABLRMAAS0TgAEtE8ABLRYAAS0WQAEtFsABLSaAAS0nAAEtJ4ABLSgAAS0owAEtKQABLSlAAS0pgAEtKcABLSpAAS0qwAEtKwABLStAAS0rwAEtLAABLTvAAS08QAEtPQABLT2AAS0+QAEtPoABLT7AAS0/AAEtP0ABLT/AAS1AQAEtQIABLUDAAS1BQAEtQYABLUPAAS1EAAEtRIABLVRAAS1UwAEtVUABLVXAAS1WgAEtVsABLVcAAS1XQAEtV4ABLVgAAS1YgAEtWMABLVkAAS1ZgAEtWcABLWmAAS1qAAEtasABLWtAAS1sAAEtbEABLWyAAS1swAEtbQABLW2AAS1uAAEtbkABLW6AAS1vAAEtb0ABLXKAAS1ywAEtcwABLXOAAS2DQAEtg8ABLYRAAS2EwAEthYABLYXAAS2GAAEthkABLYaAAS2HAAEth4ABLYfAAS2IAAEtiIABLYjAAS2YgAEtmQABLZmAAS2aAAEtmsABLZsAAS2bQAEtm4ABLZvAAS2cQAEtnMABLZ0AAS2dQAEtncABLZ4AAS2hQAEtowABLaPAAS2kQAEtpQABLabAAS2ngAEtqEABLakAAS2pgAEtvEABLcUAAS3NAAEt1QABLdWAAS3WAAEt1oABLdcAAS3XwAEt2AABLdhAAS3ZAAEt2UABLdnAAS3aAAEt2oABLdtAAS3bgAEt28ABLdyAAS3cwAEt3gABLeFAAS3igAEt4wABLeOAAS3kwAEt5YABLeZAAS3mwAEt8AABLfkAAS4CwAEuC8ABLgyAAS4NAAEuDYABLg4AAS4OgAEuDwABLg9AAS4QAAEuE0ABLheAAS4YAAEuGIABLhkAAS4ZgAEuGgABLhqAAS4bAAEuG4ABLh/AAS4ggAEuIUABLiIAAS4iwAEuI4ABLiRAAS4lAAEuJcABLiZAAS42AAEuNoABLjcAAS43gAEuOEABLjiAAS44wAEuOQABLjlAAS45wAEuOkABLjqAAS46wAEuO0ABLjuAAS5LQAEuS8ABLkxAAS5MwAEuTYABLk3AAS5OAAEuTkABLk6AAS5PAAEuT4ABLk/AAS5QAAEuUIABLlDAAS5ggAEuYQABLmHAAS5iQAEuYwABLmNAAS5jgAEuY8ABLmQAAS5kgAEuZQABLmVAAS5lgAEuZgABLmZAAS5pgAEuacABLmoAAS5qgAEuekABLnrAAS57QAEue8ABLnyAAS58wAEufQABLn1AAS59gAEufgABLn6AAS5+wAEufwABLn+AAS5/wAEuj4ABLpAAAS6QgAEukQABLpHAAS6SAAEukkABLpKAAS6SwAEuk0ABLpPAAS6UAAEulEABLpTAAS6VAAEupMABLqVAAS6lwAEupkABLqcAAS6nQAEup4ABLqfAAS6oAAEuqIABLqkAAS6pQAEuqYABLqoAAS6qQAEuugABLrqAAS67AAEuu4ABLrxAAS68gAEuvMABLr0AAS69QAEuvcABLr5AAS6+gAEuvsABLr9AAS6/gAEuz0ABLs/AAS7QQAEu0MABLtGAAS7RwAEu0gABLtJAAS7SgAEu0wABLtOAAS7TwAEu1AABLtSAAS7UwAEu3gABLucAAS7wwAEu+cABLvqAAS77AAEu+4ABLvwAAS78gAEu/QABLv1AAS7+AAEvAUABLwUAAS8FgAEvBgABLwaAAS8HAAEvB4ABLwgAAS8IgAEvDEABLw0AAS8NwAEvDoABLw9AAS8QAAEvEMABLxGAAS8SAAEvIcABLyJAAS8iwAEvI0ABLyQAAS8kQAEvJIABLyTAAS8lAAEvJYABLyYAAS8mQAEvJoABLycAAS8nQAEvNwABLzeAAS84AAEvOIABLzlAAS85gAEvOcABLzoAAS86QAEvOsABLztAAS87gAEvO8ABLzxAAS88gAEvTEABL0zAAS9NQAEvTcABL06AAS9OwAEvTwABL09AAS9PgAEvUAABL1CAAS9QwAEvUQABL1GAAS9RwAEvYYABL2IAAS9igAEvYwABL2PAAS9kAAEvZEABL2SAAS9kwAEvZUABL2XAAS9mAAEvZkABL2bAAS9nAAEvdsABL3dAAS93wAEveEABL3kAAS95QAEveYABL3nAAS96AAEveoABL3sAAS97QAEve4ABL3wAAS98QAEvjAABL4yAAS+NAAEvjYABL45AAS+OgAEvjsABL48AAS+PQAEvj8ABL5BAAS+QgAEvkMABL5FAAS+RgAEvoUABL6HAAS+iQAEvosABL6OAAS+jwAEvpAABL6RAAS+kgAEvpQABL6WAAS+lwAEvpgABL6aAAS+mwAEvuYABL8JAAS/KQAEv0kABL9LAAS/TQAEv08ABL9RAAS/VAAEv1UABL9WAAS/WQAEv1oABL9cAAS/XQAEv18ABL9hAAS/YgAEv2MABL9mAAS/ZwAEv2wABL95AAS/fgAEv4AABL+CAAS/hwAEv4oABL+NAAS/jwAEv7QABL/YAAS//wAEwCMABMAmAATAKAAEwCoABMAsAATALgAEwDAABMAxAATANAAEwEEABMBSAATAVAAEwFYABMBYAATAWgAEwFwABMBeAATAYAAEwGIABMBzAATAdgAEwHkABMB8AATAfwAEwIIABMCFAATAiAAEwIsABMCNAATAzAAEwM4ABMDQAATA0gAEwNUABMDWAATA1wAEwNgABMDZAATA2wAEwN0ABMDeAATA3wAEwOEABMDiAATBIQAEwSMABMElAATBJwAEwSoABMErAATBLAAEwS0ABMEuAATBMAAEwTIABMEzAATBNAAEwTYABME3AATBdgAEwXgABMF7AATBfQAEwYAABMGBAATBggAEwYMABMGEAATBhgAEwYgABMGJAATBigAEwYwABMGNAATBmgAEwZsABMGcAATBngAEwd0ABMHfAATB4QAEweMABMHmAATB5wAEwegABMHpAATB6gAEwewABMHuAATB7wAEwfAABMHyAATB8wAEwjIABMI0AATCNgAEwjgABMI7AATCPAAEwj0ABMI+AATCPwAEwkEABMJDAATCRAAEwkUABMJHAATCSAAEwocABMKJAATCiwAEwo0ABMKQAATCkQAEwpIABMKTAATClAAEwpYABMKYAATCmQAEwpoABMKcAATCnQAEwtwABMLeAATC4AAEwuIABMLlAATC5gAEwucABMLoAATC6QAEwusABMLtAATC7gAEwu8ABMLxAATC8gAEwzEABMMzAATDNQAEwzcABMM6AATDOwAEwzwABMM9AATDPgAEw0AABMNCAATDQwAEw0QABMNGAATDRwAEw2wABMOQAATDtwAEw9sABMPeAATD4AAEw+IABMPkAATD5gAEw+gABMPpAATD7AAEw/kABMQIAATECgAExAwABMQOAATEEAAExBIABMQUAATEFgAExCUABMQoAATEKwAExC4ABMQxAATENAAExDcABMQ6AATEPAAExHsABMR9AATEfwAExIEABMSEAATEhQAExIYABMSHAATEiAAExIoABMSMAATEjQAExI4ABMSQAATEkQAExNAABMTSAATE1AAExNYABMTZAATE2gAExNsABMTcAATE3QAExN8ABMThAATE4gAExOMABMTlAATE5gAExSUABMUnAATFKQAExSsABMUuAATFLwAExTAABMUxAATFMgAExTQABMU2AATFNwAExTgABMU6AATFOwAExXoABMV8AATFfgAExYAABMWDAATFhAAExYUABMWGAATFhwAExYkABMWLAATFjAAExY0ABMWPAATFkAAExc8ABMXRAATF0wAExdUABMXYAATF2QAExdoABMXbAATF3AAExd4ABMXgAATF4QAExeIABMXkAATF5QAExiQABMYmAATGKAAExioABMYtAATGLgAExi8ABMYwAATGMQAExjMABMY1AATGNgAExjcABMY5AATGOgAExnkABMZ7AATGfQAExn8ABMaCAATGgwAExoQABMaFAATGhgAExogABMaKAATGiwAExowABMaOAATGjwAExtoABMb9AATHHQAExz0ABMc/AATHQQAEx0MABMdFAATHSAAEx0kABMdKAATHTQAEx04ABMdQAATHUQAEx1MABMdWAATHVwAEx1gABMdbAATHXAAEx2EABMduAATHcwAEx3UABMd3AATHfAAEx38ABMeCAATHhAAEx6kABMfNAATH9AAEyBgABMgbAATIHQAEyB8ABMghAATIIwAEyCUABMgmAATIKQAEyDYABMhHAATISQAEyEsABMhNAATITwAEyFEABMhTAATIVQAEyFcABMhoAATIawAEyG4ABMhxAATIdAAEyHcABMh6AATIfQAEyIAABMiCAATIwQAEyMMABMjFAATIxwAEyMoABMjLAATIzAAEyM0ABMjOAATI0AAEyNIABMjTAATI1AAEyNYABMjXAATJFgAEyRgABMkaAATJHAAEyR8ABMkgAATJIQAEySIABMkjAATJJQAEyScABMkoAATJKQAEySsABMksAATJawAEyW0ABMlwAATJcgAEyXUABMl2AATJdwAEyXgABMl5AATJewAEyX0ABMl+AATJfwAEyYEABMmCAATJjwAEyZAABMmRAATJkwAEydIABMnUAATJ1gAEydgABMnbAATJ3AAEyd0ABMneAATJ3wAEyeEABMnjAATJ5AAEyeUABMnnAATJ6AAEyicABMopAATKKwAEyi0ABMowAATKMQAEyjIABMozAATKNAAEyjYABMo4AATKOQAEyjoABMo8AATKPQAEynwABMp+AATKgAAEyoIABMqFAATKhgAEyocABMqIAATKiQAEyosABMqNAATKjgAEyo8ABMqRAATKkgAEytEABMrTAATK1QAEytcABMraAATK2wAEytwABMrdAATK3gAEyuAABMriAATK4wAEyuQABMrmAATK5wAEyyYABMsoAATLKgAEyywABMsvAATLMAAEyzEABMsyAATLMwAEyzUABMs3AATLOAAEyzkABMs7AATLPAAEy2EABMuFAATLrAAEy9AABMvTAATL1QAEy9cABMvZAATL2wAEy90ABMveAATL4QAEy+4ABMv9AATL/wAEzAEABMwDAATMBQAEzAcABMwJAATMCwAEzBoABMwdAATMIAAEzCMABMwmAATMKQAEzCwABMwvAATMMQAEzHAABMxyAATMdAAEzHYABMx5AATMegAEzHsABMx8AATMfQAEzH8ABMyBAATMggAEzIMABMyFAATMhgAEzMUABMzHAATMyQAEzMsABMzOAATMzwAEzNAABMzRAATM0gAEzNQABMzWAATM1wAEzNgABMzaAATM2wAEzRoABM0cAATNHgAEzSAABM0jAATNJAAEzSUABM0mAATNJwAEzSkABM0rAATNLAAEzS0ABM0vAATNMAAEzW8ABM1xAATNcwAEzXUABM14AATNeQAEzXoABM17AATNfAAEzX4ABM2AAATNgQAEzYIABM2EAATNhQAEzcQABM3GAATNyAAEzcoABM3NAATNzgAEzc8ABM3QAATN0QAEzdMABM3VAATN1gAEzdcABM3ZAATN2gAEzhkABM4bAATOHQAEzh8ABM4iAATOIwAEziQABM4lAATOJgAEzigABM4qAATOKwAEziwABM4uAATOLwAEzm4ABM5wAATOcgAEznQABM53AATOeAAEznkABM56AATOewAEzn0ABM5/AATOgAAEzoEABM6DAATOhAAEzo0ABM6OAATOkAAEztMABM73AATPGwAEzz4ABM9lAATPhQAEz6wABM/TAATP8wAE0BcABNA7AATQPQAE0EAABNBCAATQRAAE0EYABNBJAATQSwAE0E0ABNBPAATQUQAE0FMABNBVAATQWAAE0FsABNBcAATQYQAE0G4ABNBxAATQcwAE0HYABNB5AATQewAE0KAABNDEAATQ6wAE0Q8ABNESAATRFAAE0RYABNEYAATRGgAE0RwABNEdAATRIAAE0S0ABNFAAATRQgAE0UQABNFGAATRSAAE0UoABNFMAATRTgAE0VAABNFSAATRZQAE0WgABNFrAATRbgAE0XEABNF0AATRdwAE0XoABNF9AATRgAAE0YIABNHBAATRwwAE0cYABNHIAATRywAE0cwABNHNAATRzgAE0c8ABNHRAATR0wAE0dQABNHVAATR1wAE0dgABNHhAATR4gAE0eQABNIjAATSJQAE0icABNIpAATSLAAE0i0ABNIuAATSLwAE0jAABNIyAATSNAAE0jUABNI2AATSOAAE0jkABNJ4AATSegAE0n0ABNJ/AATSggAE0oMABNKEAATShQAE0oYABNKIAATSigAE0osABNKMAATSjgAE0o8ABNKYAATSmQAE0psABNLaAATS3AAE0t4ABNLgAATS4wAE0uQABNLlAATS5gAE0ucABNLpAATS6wAE0uwABNLtAATS7wAE0vAABNMvAATTMQAE0zQABNM2AATTOQAE0zoABNM7AATTPAAE0z0ABNM/AATTQQAE00IABNNDAATTRQAE00YABNNPAATTUAAE01IABNORAATTkwAE05UABNOXAATTmgAE05sABNOcAATTnQAE054ABNOgAATTogAE06MABNOkAATTpgAE06cABNPmAATT6AAE0+sABNPtAATT8AAE0/EABNPyAATT8wAE0/QABNP2AATT+AAE0/kABNP6AATT/AAE0/0ABNQKAATUCwAE1AwABNQOAATUTQAE1E8ABNRRAATUUwAE1FYABNRXAATUWAAE1FkABNRaAATUXAAE1F4ABNRfAATUYAAE1GIABNRjAATUogAE1KQABNSnAATUqQAE1KwABNStAATUrgAE1K8ABNSwAATUsgAE1LQABNS1AATUtgAE1LgABNS5AATUxwAE1NQABNTfAATU4gAE1OUABNToAATU6wAE1O4ABNT5AATU/AAE1P8ABNUCAATVBQAE1QgABNUKAATVFgAE1SQABNUuAATVNwAE1YIABNWlAATVxQAE1eUABNXnAATV6QAE1esABNXtAATV8AAE1fEABNXyAATV9QAE1fYABNX4AATV+QAE1fsABNX+AATV/wAE1gAABNYDAATWBAAE1g0ABNYaAATWHwAE1iEABNYjAATWKAAE1isABNYuAATWMAAE1lUABNZ5AATWoAAE1sQABNbHAATWyQAE1ssABNbNAATWzwAE1tEABNbSAATW1QAE1uIABNbzAATW9QAE1vcABNb5AATW+wAE1v0ABNb/AATXAQAE1wMABNcUAATXFwAE1xoABNcdAATXIAAE1yMABNcmAATXKQAE1ywABNcuAATXbQAE128ABNdxAATXcwAE13YABNd3AATXeAAE13kABNd6AATXfAAE134ABNd/AATXgAAE14IABNeDAATXwgAE18QABNfGAATXyAAE18sABNfMAATXzQAE184ABNfPAATX0QAE19MABNfUAATX1QAE19cABNfYAATYFwAE2BkABNgcAATYHgAE2CEABNgiAATYIwAE2CQABNglAATYJwAE2CkABNgqAATYKwAE2C0ABNguAATYOwAE2DwABNg9AATYPwAE2H4ABNiAAATYggAE2IQABNiHAATYiAAE2IkABNiKAATYiwAE2I0ABNiPAATYkAAE2JEABNiTAATYlAAE2NMABNjVAATY1wAE2NkABNjcAATY3QAE2N4ABNjfAATY4AAE2OIABNjkAATY5QAE2OYABNjoAATY6QAE2SgABNkqAATZLAAE2S4ABNkxAATZMgAE2TMABNk0AATZNQAE2TcABNk5AATZOgAE2TsABNk9AATZPgAE2X0ABNl/AATZgQAE2YMABNmGAATZhwAE2YgABNmJAATZigAE2YwABNmOAATZjwAE2ZAABNmSAATZkwAE2dIABNnUAATZ1gAE2dgABNnbAATZ3AAE2d0ABNneAATZ3wAE2eEABNnjAATZ5AAE2eUABNnnAATZ6AAE2g0ABNoxAATaWAAE2nwABNp/AATagQAE2oMABNqFAATahwAE2okABNqKAATajQAE2poABNqpAATaqwAE2q0ABNqvAATasQAE2rMABNq1AATatwAE2sYABNrJAATazAAE2s8ABNrSAATa1QAE2tgABNrbAATa3QAE2xwABNseAATbIAAE2yIABNslAATbJgAE2ycABNsoAATbKQAE2ysABNstAATbLgAE2y8ABNsxAATbMgAE23EABNtzAATbdQAE23cABNt6AATbewAE23wABNt9AATbfgAE24AABNuCAATbgwAE24QABNuGAATbhwAE28YABNvIAATbygAE28wABNvPAATb0AAE29EABNvSAATb0wAE29UABNvXAATb2AAE29kABNvbAATb3AAE3BsABNwdAATcHwAE3CEABNwkAATcJQAE3CYABNwnAATcKAAE3CoABNwsAATcLQAE3C4ABNwwAATcMQAE3HAABNxyAATcdAAE3HYABNx5AATcegAE3HsABNx8AATcfQAE3H8ABNyBAATcggAE3IMABNyFAATchgAE3MUABNzHAATcyQAE3MsABNzOAATczwAE3NAABNzRAATc0gAE3NQABNzWAATc1wAE3NgABNzaAATc2wAE3RoABN0cAATdHgAE3SAABN0jAATdJAAE3SUABN0mAATdJwAE3SkABN0rAATdLAAE3S0ABN0vAATdMAAE3XsABN2eAATdvgAE3d4ABN3gAATd4gAE3eQABN3mAATd6QAE3eoABN3rAATd7gAE3e8ABN3xAATd8gAE3fQABN33AATd+AAE3fkABN38AATd/QAE3gIABN4PAATeFAAE3hYABN4YAATeHQAE3iAABN4jAATeJQAE3koABN5uAATelQAE3rkABN68AATevgAE3sAABN7CAATexAAE3sYABN7HAATeygAE3tcABN7oAATe6gAE3uwABN7uAATe8AAE3vIABN70AATe9gAE3vgABN8JAATfDAAE3w8ABN8SAATfFQAE3xgABN8bAATfHgAE3yEABN8jAATfYgAE32QABN9mAATfaAAE32sABN9sAATfbQAE324ABN9vAATfcQAE33MABN90AATfdQAE33cABN94AATftwAE37kABN+7AATfvQAE38AABN/BAATfwgAE38MABN/EAATfxgAE38gABN/JAATfygAE38wABN/NAATgDAAE4A4ABOARAATgEwAE4BYABOAXAATgGAAE4BkABOAaAATgHAAE4B4ABOAfAATgIAAE4CIABOAjAATgMAAE4DEABOAyAATgNAAE4HMABOB1AATgdwAE4HkABOB8AATgfQAE4H4ABOB/AATggAAE4IIABOCEAATghQAE4IYABOCIAATgiQAE4MgABODKAATgzAAE4M4ABODRAATg0gAE4NMABODUAATg1QAE4NcABODZAATg2gAE4NsABODdAATg3gAE4R0ABOEfAAThIQAE4SMABOEmAAThJwAE4SgABOEpAAThKgAE4SwABOEuAAThLwAE4TAABOEyAAThMwAE4XIABOF0AAThdgAE4XgABOF7AAThfAAE4X0ABOF+AAThfwAE4YEABOGDAAThhAAE4YUABOGHAAThiAAE4ccABOHJAAThywAE4c0ABOHQAATh0QAE4dIABOHTAATh1AAE4dYABOHYAATh2QAE4doABOHcAATh3QAE4gIABOImAATiTQAE4nEABOJ0AATidgAE4ngABOJ6AATifAAE4n4ABOJ/AATiggAE4o8ABOKeAATioAAE4qIABOKkAATipgAE4qgABOKqAATirAAE4rsABOK+AATiwQAE4sQABOLHAATiygAE4s0ABOLQAATi0gAE4xEABOMTAATjFQAE4xcABOMaAATjGwAE4xwABOMdAATjHgAE4yAABOMiAATjIwAE4yQABOMmAATjJwAE42YABONoAATjagAE42wABONvAATjcAAE43EABONyAATjcwAE43UABON3AATjeAAE43kABON7AATjfAAE47sABOO9AATjvwAE48EABOPEAATjxQAE48YABOPHAATjyAAE48oABOPMAATjzQAE484ABOPQAATj0QAE5BAABOQSAATkFAAE5BYABOQZAATkGgAE5BsABOQcAATkHQAE5B8ABOQhAATkIgAE5CMABOQlAATkJgAE5GUABORnAATkaQAE5GsABORuAATkbwAE5HAABORxAATkcgAE5HQABOR2AATkdwAE5HgABOR6AATkewAE5LoABOS8AATkvgAE5MAABOTDAATkxAAE5MUABOTGAATkxwAE5MkABOTLAATkzAAE5M0ABOTPAATk0AAE5Q8ABOURAATlEwAE5RUABOUYAATlGQAE5RoABOUbAATlHAAE5R4ABOUgAATlIQAE5SIABOUkAATlJQAE5XAABOWTAATlswAE5dMABOXVAATl1wAE5dkABOXbAATl3gAE5d8ABOXgAATl4wAE5eQABOXmAATl5wAE5ekABOXsAATl7QAE5e4ABOXxAATl8gAE5fcABOYEAATmCQAE5gsABOYNAATmEgAE5hUABOYYAATmGgAE5j8ABOZjAATmigAE5q4ABOaxAATmswAE5rUABOa3AATmuQAE5rsABOa8AATmvwAE5swABObdAATm3wAE5uEABObjAATm5QAE5ucABObpAATm6wAE5u0ABOb+AATnAQAE5wQABOcHAATnCgAE5w0ABOcQAATnEwAE5xYABOcYAATnVwAE51kABOdbAATnXQAE52AABOdhAATnYgAE52MABOdkAATnZgAE52gABOdpAATnagAE52wABOdtAATnrAAE564ABOewAATnsgAE57UABOe2AATntwAE57gABOe5AATnuwAE570ABOe+AATnvwAE58EABOfCAAToAQAE6AMABOgGAAToCAAE6AsABOgMAAToDQAE6A4ABOgPAAToEQAE6BMABOgUAAToFQAE6BcABOgYAAToJQAE6CYABOgnAAToKQAE6GgABOhqAATobAAE6G4ABOhxAATocgAE6HMABOh0AATodQAE6HcABOh5AAToegAE6HsABOh9AATofgAE6L0ABOi/AATowQAE6MMABOjGAAToxwAE6MgABOjJAAToygAE6MwABOjOAATozwAE6NAABOjSAATo0wAE6RIABOkUAATpFgAE6RgABOkbAATpHAAE6R0ABOkeAATpHwAE6SEABOkjAATpJAAE6SUABOknAATpKAAE6WcABOlpAATpawAE6W0ABOlwAATpcQAE6XIABOlzAATpdAAE6XYABOl4AATpeQAE6XoABOl8AATpfQAE6bwABOm+AATpwAAE6cIABOnFAATpxgAE6ccABOnIAATpyQAE6csABOnNAATpzgAE6c8ABOnRAATp0gAE6fcABOobAATqQgAE6mYABOppAATqawAE6m0ABOpvAATqcQAE6nMABOp0AATqdwAE6oQABOqTAATqlQAE6pcABOqZAATqmwAE6p0ABOqfAATqoQAE6rAABOqzAATqtgAE6rkABOq8AATqvwAE6sIABOrFAATqxwAE6wYABOsIAATrCwAE6w0ABOsQAATrEQAE6xIABOsTAATrFAAE6xYABOsYAATrGQAE6xoABOscAATrHQAE61wABOteAATrYAAE62IABOtlAATrZgAE62cABOtoAATraQAE62sABOttAATrbgAE628ABOtxAATrcgAE67EABOuzAATrtQAE67cABOu6AATruwAE67wABOu9AATrvgAE68AABOvCAATrwwAE68QABOvGAATrxwAE7AYABOwIAATsCwAE7A0ABOwQAATsEQAE7BIABOwTAATsFAAE7BYABOwYAATsGQAE7BoABOwcAATsHQAE7FwABOxeAATsYAAE7GIABOxlAATsZgAE7GcABOxoAATsaQAE7GsABOxtAATsbgAE7G8ABOxxAATscgAE7LEABOyzAATstQAE7LcABOy6AATsuwAE7LwABOy9AATsvgAE7MAABOzCAATswwAE7MQABOzGAATsxwAE7QYABO0IAATtCgAE7QwABO0PAATtEAAE7REABO0SAATtEwAE7RUABO0XAATtGAAE7RkABO0bAATtHAAE7WcABO2KAATtqgAE7coABO3MAATtzgAE7dAABO3SAATt1QAE7dYABO3XAATt2gAE7dsABO3dAATt3gAE7eAABO3jAATt5AAE7eUABO3oAATt6QAE7e4ABO37AATuAAAE7gIABO4EAATuCQAE7gwABO4PAATuEQAE7jYABO5aAATugQAE7qUABO6oAATuqgAE7qwABO6uAATusAAE7rIABO6zAATutgAE7sMABO7UAATu1gAE7tgABO7aAATu3AAE7t4ABO7gAATu4gAE7uQABO71AATu+AAE7vsABO7+AATvAQAE7wQABO8HAATvCgAE7w0ABO8PAATvTgAE71AABO9SAATvVAAE71cABO9YAATvWQAE71oABO9bAATvXQAE718ABO9gAATvYQAE72MABO9kAATvowAE76UABO+nAATvqQAE76wABO+tAATvrgAE768ABO+wAATvsgAE77QABO+1AATvtgAE77gABO+5AATv+AAE7/oABO/9AATv/wAE8AIABPADAATwBAAE8AUABPAGAATwCAAE8AoABPALAATwDAAE8A4ABPAPAATwHAAE8B0ABPAeAATwIAAE8F8ABPBhAATwYwAE8GUABPBoAATwaQAE8GoABPBrAATwbAAE8G4ABPBwAATwcQAE8HIABPB0AATwdQAE8LQABPC2AATwuAAE8LoABPC9AATwvgAE8L8ABPDAAATwwQAE8MMABPDFAATwxgAE8McABPDJAATwygAE8QkABPELAATxDQAE8Q8ABPESAATxEwAE8RQABPEVAATxFgAE8RgABPEaAATxGwAE8RwABPEeAATxHwAE8V4ABPFgAATxYgAE8WQABPFnAATxaAAE8WkABPFqAATxawAE8W0ABPFvAATxcAAE8XEABPFzAATxdAAE8bMABPG1AATxtwAE8bkABPG8AATxvQAE8b4ABPG/AATxwAAE8cIABPHEAATxxQAE8cYABPHIAATxyQAE8e4ABPISAATyOQAE8l0ABPJgAATyYgAE8mQABPJmAATyaAAE8moABPJrAATybgAE8nsABPKKAATyjAAE8o4ABPKQAATykgAE8pQABPKWAATymAAE8qcABPKqAATyrQAE8rAABPKzAATytgAE8rkABPK8AATyvgAE8v0ABPL/AATzAQAE8wMABPMGAATzBwAE8wgABPMJAATzCgAE8wwABPMOAATzDwAE8xAABPMSAATzEwAE81IABPNUAATzVgAE81gABPNbAATzXAAE810ABPNeAATzXwAE82EABPNjAATzZAAE82UABPNnAATzaAAE86cABPOpAATzqwAE860ABPOwAATzsQAE87IABPOzAATztAAE87YABPO4AATzuQAE87oABPO8AATzvQAE8/wABPP+AAT0AAAE9AIABPQFAAT0BgAE9AcABPQIAAT0CQAE9AsABPQNAAT0DgAE9A8ABPQRAAT0EgAE9FEABPRTAAT0VQAE9FcABPRaAAT0WwAE9FwABPRdAAT0XgAE9GAABPRiAAT0YwAE9GQABPRmAAT0ZwAE9KYABPSoAAT0qgAE9KwABPSvAAT0sAAE9LEABPSyAAT0swAE9LUABPS3AAT0uAAE9LkABPS7AAT0vAAE9PsABPT9AAT0/wAE9QEABPUEAAT1BQAE9QYABPUHAAT1CAAE9QoABPUMAAT1DQAE9Q4ABPUQAAT1EQAE9VwABPV/AAT1nwAE9b8ABPXBAAT1wwAE9cUABPXHAAT1ygAE9csABPXMAAT1zwAE9dAABPXSAAT10wAE9dUABPXYAAT12QAE9doABPXdAAT13gAE9eMABPXwAAT19QAE9fcABPX5AAT1/gAE9gEABPYEAAT2BgAE9isABPZPAAT2dgAE9poABPadAAT2nwAE9qEABPajAAT2pQAE9qcABPaoAAT2qwAE9rgABPbJAAT2ywAE9s0ABPbPAAT20QAE9tMABPbVAAT21wAE9tkABPbqAAT27QAE9vAABPbzAAT29gAE9vkABPb8AAT2/wAE9wIABPcEAAT3QwAE90UABPdHAAT3SQAE90wABPdNAAT3TgAE908ABPdQAAT3UgAE91QABPdVAAT3VgAE91gABPdZAAT3mAAE95oABPecAAT3ngAE96EABPeiAAT3owAE96QABPelAAT3pwAE96kABPeqAAT3qwAE960ABPeuAAT37QAE9+8ABPfyAAT39AAE9/cABPf4AAT3+QAE9/oABPf7AAT3/QAE9/8ABPgAAAT4AQAE+AMABPgEAAT4EQAE+BIABPgTAAT4FQAE+FQABPhWAAT4WAAE+FoABPhdAAT4XgAE+F8ABPhgAAT4YQAE+GMABPhlAAT4ZgAE+GcABPhpAAT4agAE+KkABPirAAT4rQAE+K8ABPiyAAT4swAE+LQABPi1AAT4tgAE+LgABPi6AAT4uwAE+LwABPi+AAT4vwAE+P4ABPkAAAT5AgAE+QQABPkHAAT5CAAE+QkABPkKAAT5CwAE+Q0ABPkPAAT5EAAE+REABPkTAAT5FAAE+VMABPlVAAT5VwAE+VkABPlcAAT5XQAE+V4ABPlfAAT5YAAE+WIABPlkAAT5ZQAE+WYABPloAAT5aQAE+agABPmqAAT5rAAE+a4ABPmxAAT5sgAE+bMABPm0AAT5tQAE+bcABPm5AAT5ugAE+bsABPm9AAT5vgAE+eMABPoHAAT6LgAE+lIABPpVAAT6VwAE+lkABPpbAAT6XQAE+l8ABPpgAAT6YwAE+nAABPp/AAT6gQAE+oMABPqFAAT6hwAE+okABPqLAAT6jQAE+pwABPqfAAT6ogAE+qUABPqoAAT6qwAE+q4ABPqxAAT6swAE+vIABPr0AAT69gAE+vgABPr7AAT6/AAE+v0ABPr+AAT6/wAE+wEABPsDAAT7BAAE+wUABPsHAAT7CAAE+0cABPtJAAT7SwAE+00ABPtQAAT7UQAE+1IABPtTAAT7VAAE+1YABPtYAAT7WQAE+1oABPtcAAT7XQAE+5wABPueAAT7oAAE+6IABPulAAT7pgAE+6cABPuoAAT7qQAE+6sABPutAAT7rgAE+68ABPuxAAT7sgAE+/EABPvzAAT79QAE+/cABPv6AAT7+wAE+/wABPv9AAT7/gAE/AAABPwCAAT8AwAE/AQABPwGAAT8BwAE/EYABPxIAAT8SgAE/EwABPxPAAT8UAAE/FEABPxSAAT8UwAE/FUABPxXAAT8WAAE/FkABPxbAAT8XAAE/JsABPydAAT8nwAE/KEABPykAAT8pQAE/KYABPynAAT8qAAE/KoABPysAAT8rQAE/K4ABPywAAT8sQAE/PAABPzyAAT89AAE/PYABPz5AAT8+gAE/PsABPz8AAT8/QAE/P8ABP0BAAT9AgAE/QMABP0FAAT9BgAE/Q8ABP0QAAT9EgAE/VUABP15AAT9nQAE/cAABP3nAAT+BwAE/i4ABP5VAAT+dQAE/pkABP69AAT+vwAE/sIABP7EAAT+xgAE/sgABP7LAAT+zQAE/s8ABP7RAAT+0wAE/tUABP7XAAT+2gAE/t0ABP7eAAT+4wAE/vAABP7zAAT+9QAE/vgABP77AAT+/QAE/yIABP9GAAT/bQAE/5EABP+UAAT/lgAE/5gABP+aAAT/nAAE/54ABP+fAAT/ogAE/68ABP/CAAT/xAAE/8YABP/IAAT/ygAE/8wABP/OAAT/0AAE/9IABP/UAAT/5wAE/+oABP/tAAT/8AAE//MABP/2AAT/+QAE//wABP//AAUAAgAFAAQABQBDAAUARQAFAEgABQBKAAUATQAFAE4ABQBPAAUAUAAFAFEABQBTAAUAVQAFAFYABQBXAAUAWQAFAFoABQBjAAUAZAAFAGYABQClAAUApwAFAKkABQCrAAUArgAFAK8ABQCwAAUAsQAFALIABQC0AAUAtgAFALcABQC4AAUAugAFALsABQD6AAUA/AAFAP8ABQEBAAUBBAAFAQUABQEGAAUBBwAFAQgABQEKAAUBDAAFAQ0ABQEOAAUBEAAFAREABQEaAAUBGwAFAR0ABQFcAAUBXgAFAWAABQFiAAUBZQAFAWYABQFnAAUBaAAFAWkABQFrAAUBbQAFAW4ABQFvAAUBcQAFAXIABQGxAAUBswAFAbYABQG4AAUBuwAFAbwABQG9AAUBvgAFAb8ABQHBAAUBwwAFAcQABQHFAAUBxwAFAcgABQHRAAUB0gAFAdQABQITAAUCFQAFAhcABQIZAAUCHAAFAh0ABQIeAAUCHwAFAiAABQIiAAUCJAAFAiUABQImAAUCKAAFAikABQJoAAUCagAFAm0ABQJvAAUCcgAFAnMABQJ0AAUCdQAFAnYABQJ4AAUCegAFAnsABQJ8AAUCfgAFAn8ABQKMAAUCjQAFAo4ABQKQAAUCzwAFAtEABQLTAAUC1QAFAtgABQLZAAUC2gAFAtsABQLcAAUC3gAFAuAABQLhAAUC4gAFAuQABQLlAAUDJAAFAyYABQMpAAUDKwAFAy4ABQMvAAUDMAAFAzEABQMyAAUDNAAFAzYABQM3AAUDOAAFAzoABQM7AAUDSgAFA1cABQNeAAUDYQAFA2QABQNnAAUDbgAFA3EABQN0AAUDdwAFA3kABQOAAAUDywAFA+4ABQQOAAUELgAFBDAABQQyAAUENAAFBDYABQQ5AAUEOgAFBDsABQQ+AAUEPwAFBEEABQRCAAUERAAFBEcABQRIAAUESQAFBEwABQRNAAUEVgAFBGMABQRoAAUEagAFBGwABQRxAAUEdAAFBHcABQR5AAUEngAFBMIABQTpAAUFDQAFBRAABQUSAAUFFAAFBRYABQUYAAUFGgAFBRsABQUeAAUFKwAFBTwABQU+AAUFQAAFBUIABQVEAAUFRgAFBUgABQVKAAUFTAAFBV0ABQVgAAUFYwAFBWYABQVpAAUFbAAFBW8ABQVyAAUFdQAFBXcABQW2AAUFuAAFBboABQW8AAUFvwAFBcAABQXBAAUFwgAFBcMABQXFAAUFxwAFBcgABQXJAAUFywAFBcwABQYLAAUGDQAFBg8ABQYRAAUGFAAFBhUABQYWAAUGFwAFBhgABQYaAAUGHAAFBh0ABQYeAAUGIAAFBiEABQZgAAUGYgAFBmUABQZnAAUGagAFBmsABQZsAAUGbQAFBm4ABQZwAAUGcgAFBnMABQZ0AAUGdgAFBncABQaEAAUGhQAFBoYABQaIAAUGxwAFBskABQbLAAUGzQAFBtAABQbRAAUG0gAFBtMABQbUAAUG1gAFBtgABQbZAAUG2gAFBtwABQbdAAUHHAAFBx4ABQcgAAUHIgAFByUABQcmAAUHJwAFBygABQcpAAUHKwAFBy0ABQcuAAUHLwAFBzEABQcyAAUHcQAFB3MABQd1AAUHdwAFB3oABQd7AAUHfAAFB30ABQd+AAUHgAAFB4IABQeDAAUHhAAFB4YABQeHAAUHxgAFB8gABQfKAAUHzAAFB88ABQfQAAUH0QAFB9IABQfTAAUH1QAFB9cABQfYAAUH2QAFB9sABQfcAAUIGwAFCB0ABQgfAAUIIQAFCCQABQglAAUIJgAFCCcABQgoAAUIKgAFCCwABQgtAAUILgAFCDAABQgxAAUIVgAFCHoABQihAAUIxQAFCMgABQjKAAUIzAAFCM4ABQjQAAUI0gAFCNMABQjWAAUI4wAFCPIABQj0AAUI9gAFCPgABQj6AAUI/AAFCP4ABQkAAAUJDwAFCRIABQkVAAUJGAAFCRsABQkeAAUJIQAFCSQABQkmAAUJZQAFCWcABQlpAAUJawAFCW4ABQlvAAUJcAAFCXEABQlyAAUJdAAFCXYABQl3AAUJeAAFCXoABQl7AAUJugAFCbwABQm+AAUJwAAFCcMABQnEAAUJxQAFCcYABQnHAAUJyQAFCcsABQnMAAUJzQAFCc8ABQnQAAUKDwAFChEABQoTAAUKFQAFChgABQoZAAUKGgAFChsABQocAAUKHgAFCiAABQohAAUKIgAFCiQABQolAAUKZAAFCmYABQpoAAUKagAFCm0ABQpuAAUKbwAFCnAABQpxAAUKcwAFCnUABQp2AAUKdwAFCnkABQp6AAUKuQAFCrsABQq9AAUKvwAFCsIABQrDAAUKxAAFCsUABQrGAAUKyAAFCsoABQrLAAUKzAAFCs4ABQrPAAULDgAFCxAABQsSAAULFAAFCxcABQsYAAULGQAFCxoABQsbAAULHQAFCx8ABQsgAAULIQAFCyMABQskAAULYwAFC2UABQtnAAULaQAFC2wABQttAAULbgAFC28ABQtwAAULcgAFC3QABQt1AAULdgAFC3gABQt5AAULxAAFC+cABQwHAAUMJwAFDCkABQwrAAUMLQAFDC8ABQwyAAUMMwAFDDQABQw3AAUMOAAFDDoABQw7AAUMPQAFDEAABQxBAAUMQgAFDEUABQxGAAUMSwAFDFgABQxdAAUMXwAFDGEABQxmAAUMaQAFDGwABQxuAAUMkwAFDLcABQzeAAUNAgAFDQUABQ0HAAUNCQAFDQsABQ0NAAUNDwAFDRAABQ0TAAUNIAAFDTEABQ0zAAUNNQAFDTcABQ05AAUNOwAFDT0ABQ0/AAUNQQAFDVIABQ1VAAUNWAAFDVsABQ1eAAUNYQAFDWQ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 + + + + + type + + + + priceId + + + + forceSmartIds + + + + apiKeyName + + + + 1 + chain + + + + name + + + + peerName + + + + metadata + + + + walletId + + + + bridgeParachainId + + + + historyApiType + + + + source + + + + parentId + + + + minimalAppVersion + + + + typesOverrideCommon + + + + stakingApiType + + + + address + + + + 1 + config + + + + identifier + + + + crowdloansApiUrl + + + + precision + + + + blockNumber + + + + identifier + + + + status + + + + identifier + + + + identifier + + + + currencyId + + + + url + + + + isEthereumBased + + + + coingeckoPriceId + + + + Undefined + 7 + CDTonConnectedApp + 1 + + + + + + CDXcmAvailableAsset + Undefined + 16 + CDXcmAvailableAsset + 1 + + + + + + CDPolkaswapRemoteSettings + Undefined + 3 + CDPolkaswapRemoteSettings + 1 + + + + + + CDPriceProvider + Undefined + 11 + CDPriceProvider + 1 + + + + + + CDXcmAvailableDestination + Undefined + 20 + CDXcmAvailableDestination + 1 + + + + + + existentialDeposit + + + + isUtility + + + + purchaseProviders + + + + 1 + chain + + + + 1 + priceProvider + + + + version + + + + assetId + + + + apiQueryName + + + + appUrl + + + + name + + + + resolver + + + + disabled + + + + chainId + + + + isOrml + + + + 1 + asset + + + + pricingApiType + + + + addressPrefix + + + + 1 + assets + + + + 1 + explorers + + + + 1 + selectedNode + + + + destWeightIsPrimitive + + + + 1 + availableDestinations + + + + controller + + + + type + + + + call + + + + moduleName + + + + timestamp + + + + appDescription + + + + isConnected + + + + historyApiUrl + + + + minAmount + + + + name + + + + targetAddress + + + + stakingApiUrl + + + + name + + + + Undefined + 15 + CDPriceData + 1 + + + + + + CDAsset + Undefined + 2 + CDAsset + 1 + + + + + + CDStashItem + Undefined + 10 + CDStashItem + 1 + + + + + + CDScamInfo + Undefined + 19 + CDScamInfo + 1 + + + + + + peerAddress + + + + type + + + + CDContact + Undefined + 6 + CDContact + 1 + + + + + + fiatDayByChange + + + + color + + + + icon + + + + name + + + + staking + + + + xstusdId + + + + code + + + + name + + + + address + + + + clientId + + + + privateKey + + + + txVersion + + + + ecosystem + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SelectedWalletSettings.swift b/fearless/Common/Storage/SelectedWalletSettings.swift index 2c954486ca..e97a5ab8da 100644 --- a/fearless/Common/Storage/SelectedWalletSettings.swift +++ b/fearless/Common/Storage/SelectedWalletSettings.swift @@ -1,5 +1,7 @@ import Foundation import RobinHood +import SSFModels +import SSFAccountManagmentStorage final class SelectedWalletSettings: PersistentValueSettings { static let shared = SelectedWalletSettings( diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion index f929d5f67a..4f6767c1f7 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - SubstrateDataModel_v8.xcdatamodel + SubstrateDataModel_v9.xcdatamodel diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index 17cd20c837..98daa733cb 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -1,9 +1,8 @@ - + - @@ -26,6 +25,7 @@ + @@ -45,9 +45,10 @@ + - + @@ -123,7 +124,7 @@ - + @@ -148,6 +149,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents new file mode 100644 index 0000000000..26899179e0 --- /dev/null +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SubstrateDataStorageFacade.swift b/fearless/Common/Storage/SubstrateDataStorageFacade.swift index 508cc1a071..fcc499d9fe 100644 --- a/fearless/Common/Storage/SubstrateDataStorageFacade.swift +++ b/fearless/Common/Storage/SubstrateDataStorageFacade.swift @@ -2,7 +2,7 @@ import RobinHood import CoreData enum SubstrateStorageParams { - static let modelVersion: SubstrateStorageVersion = .version8 + static let modelVersion: SubstrateStorageVersion = .version9 static let modelDirectory: String = "SubstrateDataModel.momd" static let databaseName = "SubstrateDataModel.sqlite" diff --git a/fearless/Common/Storage/UserDataStorageFacade.swift b/fearless/Common/Storage/UserDataStorageFacade.swift index 877361bfaa..5e26125a52 100644 --- a/fearless/Common/Storage/UserDataStorageFacade.swift +++ b/fearless/Common/Storage/UserDataStorageFacade.swift @@ -3,7 +3,7 @@ import RobinHood import CoreData enum UserStorageParams { - static let modelVersion: UserStorageVersion = .version12 + static let modelVersion: UserStorageVersion = .version13 static let modelDirectory: String = "Modules_SSFAccountManagmentStorage.bundle//UserDataModel.momd" static let databaseName = "UserDataModel.sqlite" diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift index 111f9ebafc..cce48320bd 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift @@ -4,6 +4,7 @@ import IrohaCrypto import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto enum SubstrateCallFactoryError: Error { case metadataUnavailable @@ -116,10 +117,11 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable { let addresses: [AccountId] = try targets.map { info in - try info.address.toAccountId() + try info.address.toAccountId(using: chainFormat) } let args = PoolNominateCall(pool_id: "\(poolId)", validators: addresses) @@ -146,7 +148,7 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { amount: BigUInt, chainAsset: ChainAsset ) -> any RuntimeCallable { - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .normal, .none: if chainAsset.chain.isSora { return ormlAssetTransfer( diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift index 7fb5de179d..06e47c63f5 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift @@ -27,7 +27,8 @@ protocol SubstrateCallFactoryProtocol { func nominate(targets: [SelectedValidatorInfo], chainAsset: ChainAsset) throws -> any RuntimeCallable func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable func payout(validatorId: Data, era: EraIndex) throws -> any RuntimeCallable func setPayee(for destination: RewardDestinationArg) -> any RuntimeCallable diff --git a/fearless/Common/Substrate/Types/AccountInfo.swift b/fearless/Common/Substrate/Types/AccountInfo.swift index c122bd0b0f..1b010825bf 100644 --- a/fearless/Common/Substrate/Types/AccountInfo.swift +++ b/fearless/Common/Substrate/Types/AccountInfo.swift @@ -17,11 +17,11 @@ struct AccountInfo: Codable, Equatable { @StringCodable var providers: UInt32 let data: AccountData - init(ethBalance: BigUInt) { + init(balance: BigUInt) { nonce = 0 consumers = 0 providers = 0 - data = AccountData(ethBalance: ethBalance) + data = AccountData(ethBalance: balance) } init(nonce: UInt32, consumers: UInt32, providers: UInt32, data: AccountData) { diff --git a/fearless/Common/Substrate/Types/EraRewardPoints.swift b/fearless/Common/Substrate/Types/EraRewardPoints.swift index 18f74c984d..8ce2042dd6 100644 --- a/fearless/Common/Substrate/Types/EraRewardPoints.swift +++ b/fearless/Common/Substrate/Types/EraRewardPoints.swift @@ -1,4 +1,5 @@ import SSFUtils +import IrohaCrypto import Foundation typealias RewardPoint = UInt32 @@ -29,3 +30,13 @@ struct IndividualReward: Decodable { rewardPoint = rewardScaled.value } } + +private extension AccountAddress { + func toAccountId() throws -> AccountId { + if hasPrefix("0x") { + return try AccountId(hexStringSSF: self) + } else { + return try SS58AddressFactory().accountId(from: self) + } + } +} diff --git a/fearless/Common/URLHandling/TonConnectUrlHandling.swift b/fearless/Common/URLHandling/TonConnectUrlHandling.swift new file mode 100644 index 0000000000..80ae3e6143 --- /dev/null +++ b/fearless/Common/URLHandling/TonConnectUrlHandling.swift @@ -0,0 +1,24 @@ +import Foundation +import SSFQRService + +final class TonConnectUrlHandling: URLHandlingServiceProtocol { + private let coordinator = WalletConnectCoordinator.shared + private lazy var matcher = TonConnectMatcherImpl() + private lazy var tonConnectService = ServiceAssembly.shared.tonConnectService() + + func handle(url: URL) -> Bool { + guard let uri = matcher.match(code: url.absoluteString)?.uri else { + return false + } + + Task { + do { + try await tonConnectService.establishConnection(with: uri) + } catch { + Logger.shared.customError(error) + } + } + + return true + } +} diff --git a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift index 175cd7d01d..15d13ef300 100644 --- a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift +++ b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift @@ -135,7 +135,7 @@ extension BaseDataValidatingFactoryProtocol { return true } - if case .ormlChain = chainAsset.chainAssetType { + if case .ormlChain = chainAsset.chainAssetType.substrateAssetType { return true } diff --git a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift index 44546085f7..17d99762bb 100644 --- a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift +++ b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift @@ -48,8 +48,8 @@ final class SelectableAmountInputView: UIView { return label }() - private let balanceLabel: UILabel = { - let label = UILabel() + private let balanceLabel: SkeletonLabel = { + let label = SkeletonLabel(skeletonSize: CGSize(width: 60, height: 10)) label.font = .p1Paragraph label.textColor = R.color.colorStrokeGray() label.numberOfLines = 1 @@ -139,12 +139,12 @@ final class SelectableAmountInputView: UIView { if let balance = viewModel.balance { applyType(for: balance) } else { - balanceLabel.text = nil + balanceLabel.updateTextWithLoading(nil) } symbolLabel.text = viewModel.symbol.uppercased() - viewModel.iconViewModel?.loadAmountInputIcon(on: iconView, animated: true) + viewModel.iconViewModel?.loadAmountInputIcon(on: iconView, animated: true, cornerRadius: LayoutConstants.iconSize / 2) iconSelect.isHidden = !viewModel.selectable } @@ -158,10 +158,11 @@ final class SelectableAmountInputView: UIView { private func applyType(for balance: String) { switch type { case .send, .swapSend, .swapReceive: - balanceLabel.text = R.string.localizable.commonAvailableFormat( + let text = R.string.localizable.commonAvailableFormat( balance, preferredLanguages: locale.rLanguages ) + balanceLabel.updateTextWithLoading(text) } } @@ -237,6 +238,8 @@ final class SelectableAmountInputView: UIView { make.leading.equalTo(titleLabel) make.top.equalTo(symbolStackView.snp.bottom).offset(UIConstants.minimalOffset) make.bottom.equalToSuperview().offset(-LayoutConstants.offset) + make.height.equalTo(15) + make.width.greaterThanOrEqualTo(60) } } diff --git a/fearless/Common/View/GradientBorderedTriangularedView.swift b/fearless/Common/View/GradientBorderedTriangularedView.swift new file mode 100644 index 0000000000..9335bb130d --- /dev/null +++ b/fearless/Common/View/GradientBorderedTriangularedView.swift @@ -0,0 +1,31 @@ +import UIKit + +class GradientBorderedTriangularedView: TriangularedView { + lazy var gradientBorder: CAGradientLayer = { + let mask = CAShapeLayer() + mask.path = shapePath.cgPath + mask.fillColor = UIColor.clear.cgColor + mask.strokeColor = UIColor.white.cgColor + mask.lineWidth = 1 + + let borderLayer = CAGradientLayer() + borderLayer.frame = bounds + borderLayer.startPoint = gradientBorderStartPoint + borderLayer.endPoint = gradientBorderEndPoint + borderLayer.mask = mask + borderLayer.colors = UIColor.walletBorderGradientColors.map { $0.cgColor } + + return borderLayer + }() + + override func didMoveToWindow() { + super.didMoveToWindow() + layer.addSublayer(gradientBorder) + } + + override func layoutSubviews() { + super.layoutSubviews() + (gradientBorder.mask as? CAShapeLayer)?.path = shapePath.cgPath + gradientBorder.frame = bounds + } +} diff --git a/fearless/Common/View/SearchTextField.swift b/fearless/Common/View/SearchTextField.swift index 53bd6b2238..3501138fcc 100644 --- a/fearless/Common/View/SearchTextField.swift +++ b/fearless/Common/View/SearchTextField.swift @@ -12,6 +12,7 @@ class SearchTextField: BackgroundedContentControl { let textField: UITextField = { let textField = UITextField() textField.borderStyle = .none + textField.autocorrectionType = .no return textField }() diff --git a/fearless/Common/View/SearchTriangularedView.swift b/fearless/Common/View/SearchTriangularedView.swift index fa71c4a956..846d7c223a 100644 --- a/fearless/Common/View/SearchTriangularedView.swift +++ b/fearless/Common/View/SearchTriangularedView.swift @@ -11,7 +11,17 @@ final class SearchTriangularedView: UIView { static let pasteButtonSize: CGFloat = 76 } - var isValid = false + var isValid: Bool? = false { + didSet { + guard let isValid else { + backgroundView.set(highlighted: false, animated: true) + return + } + let color = isValid ? .clear : R.color.colorRed()! + backgroundView.highlightedStrokeColor = color + backgroundView.set(highlighted: !isValid, animated: true) + } + } var onPasteTapped: (() -> Void)? private let withPasteButton: Bool @@ -27,7 +37,6 @@ final class SearchTriangularedView: UIView { view.fillColor = R.color.colorSemiBlack()! view.highlightedFillColor = R.color.colorSemiBlack()! view.strokeColor = R.color.colorWhite8()! - view.highlightedStrokeColor = R.color.colorPink()! view.strokeWidth = 0.5 view.shadowOpacity = 0 return view diff --git a/fearless/Common/View/SelectEcosystemBannerView.swift b/fearless/Common/View/SelectEcosystemBannerView.swift new file mode 100644 index 0000000000..24170ffe05 --- /dev/null +++ b/fearless/Common/View/SelectEcosystemBannerView.swift @@ -0,0 +1,79 @@ +import Foundation +import UIKit + +final class SelectEcosystemBannerView: UIView { + let titleLabel: UILabel = { + let label = UILabel() + label.textColor = R.color.colorWhite() + label.font = .h3Title + label.numberOfLines = 0 + return label + }() + + let imageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + return imageView + }() + + let actionButton: TriangularedButton = { + let button = UIFactory.default.createMainActionButton() + button.triangularedView?.shadowOpacity = 0 + button.triangularedView?.fillColor = .clear + button.triangularedView?.highlightedFillColor = .clear + button.triangularedView?.strokeColor = R.color.colorWhite8()! + button.triangularedView?.highlightedStrokeColor = R.color.colorWhite8()! + button.triangularedView?.strokeWidth = 1 + + button.imageWithTitleView?.titleColor = R.color.colorWhite() + button.imageWithTitleView?.titleFont = .h6Title + return button + }() + + private let ecosystem: AccountCreateEcosystem + + init(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + super.init(frame: .zero) + backgroundColor = R.color.colorWhite8() + layer.cornerRadius = 15 + clipsToBounds = true + switch ecosystem { + case .regular: + imageView.image = R.image.regularBanner() + case .ton: + imageView.image = R.image.tonBanner() + } + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(imageView) + imageView.snp.makeConstraints { make in + make.height.equalTo(139) + make.edges.equalToSuperview() + } + + addSubview(titleLabel) + titleLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(24) + make.leading.equalToSuperview().offset(24) + make.trailing.equalToSuperview().inset(24) + } + + addSubview(actionButton) + actionButton.snp.makeConstraints { make in + make.top.greaterThanOrEqualTo(titleLabel.snp.bottom).offset(UIConstants.defaultOffset) + make.leading.equalToSuperview().offset(24) + make.bottom.equalToSuperview().inset(24) + make.height.equalTo(32) + make.width.greaterThanOrEqualTo(62) + } + } +} diff --git a/fearless/Common/View/SelectedNetworkButton.swift b/fearless/Common/View/SelectedNetworkButton.swift index 6037cee566..1245952992 100644 --- a/fearless/Common/View/SelectedNetworkButton.swift +++ b/fearless/Common/View/SelectedNetworkButton.swift @@ -51,6 +51,7 @@ final class SelectedNetworkButton: UIControl { } func applySelectableStyle(_ selectable: Bool) { + isUserInteractionEnabled = selectable dropTraingleImageView.isHidden = !selectable } diff --git a/fearless/Common/View/StackedTableView.swift b/fearless/Common/View/StackedTableView.swift index ec271cc899..9183289eae 100644 --- a/fearless/Common/View/StackedTableView.swift +++ b/fearless/Common/View/StackedTableView.swift @@ -1,4 +1,3 @@ - import UIKit final class StackedTableView: UIView { diff --git a/fearless/Common/View/SymbolView.swift b/fearless/Common/View/SymbolView.swift index 6101c1b923..49b2cc3b63 100644 --- a/fearless/Common/View/SymbolView.swift +++ b/fearless/Common/View/SymbolView.swift @@ -2,7 +2,7 @@ import Foundation import UIKit struct SymbolViewModel { - let symbolViewModel: RemoteImageViewModel? + let iconViewModel: RemoteImageViewModel? let shadowColor: CGColor? } @@ -33,7 +33,7 @@ final class SymbolView: UIView { } func bind(viewModel: SymbolViewModel) { - viewModel.symbolViewModel?.loadImage( + viewModel.iconViewModel?.loadImage( on: imageView, targetSize: Constants.imageViewSize, animated: true diff --git a/fearless/Common/View/TriangularedView/TriangularedView.swift b/fearless/Common/View/TriangularedView/TriangularedView.swift index 61f15800fe..eaafe87c08 100644 --- a/fearless/Common/View/TriangularedView/TriangularedView.swift +++ b/fearless/Common/View/TriangularedView/TriangularedView.swift @@ -5,8 +5,10 @@ public struct TriangularedCorners: OptionSet { public typealias RawValue = UInt8 static let none: TriangularedCorners = [] - static let topLeft = TriangularedCorners(rawValue: 1) - static let bottomRight = TriangularedCorners(rawValue: 2) + static let topLeft = TriangularedCorners(rawValue: 1 << 0) + static let bottomRight = TriangularedCorners(rawValue: 1 << 1) + static let topRight = TriangularedCorners(rawValue: 1 << 2) + static let bottomLeft = TriangularedCorners(rawValue: 1 << 3) public var rawValue: TriangularedCorners.RawValue @@ -35,6 +37,18 @@ open class TriangularedView: ShadowShapeView { } } + open var cornersRaduis: TriangularedCorners = [.topRight, .bottomLeft] { + didSet { + applyPath() + } + } + + open lazy var cornerRadius: CGFloat = sideLength { + didSet { + applyPath() + } + } + var gradientBorderColors: [UIColor] = [] var gradientBorderStartPoint = CGPoint(x: 0.0, y: 0.5) var gradientBorderEndPoint = CGPoint(x: 1.0, y: 0.5) @@ -48,41 +62,72 @@ open class TriangularedView: ShadowShapeView { if cornerCut.contains(.topLeft) { bezierPath.move(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) + ) } else { - bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY), + to: CGPoint(x: layerBounds.minX, y: layerBounds.minY), controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.minY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + sideLength), - controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) - ) + if cornersRaduis.contains(.topRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + cornerRadius), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } if cornerCut.contains(.bottomRight) { bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY)) + } else if cornersRaduis.contains(.bottomRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) + ) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY), + to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY), controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.maxY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), - controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) - ) + if cornersRaduis.contains(.bottomLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } + if cornerCut.contains(.topLeft) { bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) } return bezierPath diff --git a/fearless/Common/View/UIFactory.swift b/fearless/Common/View/UIFactory.swift index f10995c5e1..edb12f79ce 100644 --- a/fearless/Common/View/UIFactory.swift +++ b/fearless/Common/View/UIFactory.swift @@ -71,8 +71,9 @@ protocol UIFactoryProtocol { func createActionsAccessoryView( for actions: [ViewSelectorAction], doneAction: ViewSelectorAction, - target: Any?, - spacing: CGFloat + target: AmountInputAccessoryViewDelegate?, + spacing: CGFloat, + toolBar: UIToolbar ) -> UIToolbar func createCommonInputView() -> CommonInputView func createAmountInputView(filled: Bool) -> AmountInputView @@ -279,10 +280,11 @@ final class UIFactory: UIFactoryProtocol { } func createActionsAccessoryView( - for _: [ViewSelectorAction], - doneAction _: ViewSelectorAction, - target _: Any?, - spacing _: CGFloat + for actions: [ViewSelectorAction], + doneAction: ViewSelectorAction, + target: AmountInputAccessoryViewDelegate?, + spacing: CGFloat, + toolBar: UIToolbar ) -> UIToolbar { let frame = CGRect( x: 0.0, @@ -291,9 +293,15 @@ final class UIFactory: UIFactoryProtocol { height: UIConstants.accessoryBarHeight ) - let toolBar = UIToolbar(frame: frame) - - return toolBar + let toolBar = AmountInputAccessoryView(frame: frame) + toolBar.actionDelegate = target + return createActionsAccessoryView( + for: toolBar, + actions: actions, + doneAction: doneAction, + target: toolBar, + spacing: spacing + ) } func createAmountAccessoryView( diff --git a/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift b/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift index ca426037c5..835d9da95f 100644 --- a/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift +++ b/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift @@ -356,13 +356,25 @@ extension ChainAssetListBuilder { chainAssets: [ChainAsset], for wallet: MetaAccountModel ) -> [ChainAsset] { - let enabledAssetIds: [String] = wallet.assetsVisibility - .filter { !$0.hidden } - .map { $0.assetId } - let enabled = chainAssets.filter { - enabledAssetIds.contains($0.identifier) + switch wallet.ecosystem { + case .regular: + let enabledAssetIds: [String] = wallet.assetsVisibility + .filter { !$0.hidden } + .map { $0.assetId } + let enabled = chainAssets.filter { + enabledAssetIds.contains($0.identifier) + } + return enabled + case .ton: + let tonChainAssets = chainAssets.filter { chainAsset in + if let assetVisibility = wallet.assetsVisibility.first(where: { $0.assetId == chainAsset.identifier }) { + return !assetVisibility.hidden + } else { + return true + } + } + return tonChainAssets } - return enabled } func defaultByPopular(chainAssets: [ChainAsset]) -> [ChainAsset] { diff --git a/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift b/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift index 06542f9da2..5233477941 100644 --- a/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift +++ b/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift @@ -7,7 +7,7 @@ protocol ChainOptionsViewModelFactoryProtocol { extension ChainOptionsViewModelFactoryProtocol { func buildChainOptionsViewModel(chainAsset: ChainAsset) -> [ChainOptionsViewModel]? { - let presentableOptions = [ChainOptions.testnet] + let presentableOptions: [ChainOptions] = [] var viewModels: [ChainOptionsViewModel] = [] diff --git a/fearless/Configs/fearless.debug.xcconfig b/fearless/Configs/fearless.debug.xcconfig index 85e7843ae4..a40c821357 100644 --- a/fearless/Configs/fearless.debug.xcconfig +++ b/fearless/Configs/fearless.debug.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.dev.xcconfig b/fearless/Configs/fearless.dev.xcconfig index 5dc8b3d936..7ba8a48abd 100644 --- a/fearless/Configs/fearless.dev.xcconfig +++ b/fearless/Configs/fearless.dev.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.release.xcconfig b/fearless/Configs/fearless.release.xcconfig index c27dba3917..1c3102fa04 100644 --- a/fearless/Configs/fearless.release.xcconfig +++ b/fearless/Configs/fearless.release.xcconfig @@ -6,3 +6,5 @@ APP_NAME = Fearless FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift similarity index 59% rename from fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift rename to fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift index b8d406d263..8329635016 100644 --- a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift +++ b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift @@ -6,15 +6,19 @@ protocol RepositoryCacheWrapper: AnyObject { associatedtype T: Codable, Equatable func save(data: T?, identifier: String) throws + func save(map: [String: T?]) throws } -final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { +final class BalanceRepositoryCacheWrapper: RepositoryCacheWrapper { typealias T = AccountInfo private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol + private lazy var encoder = JSONEncoder() + private lazy var decoder = JSONDecoder() + private var cache: [String: T?] = [:] private let lock = ReaderWriterLock() @@ -35,19 +39,33 @@ final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { } } - let encoded = try JSONEncoder().encode(data) + let encoded = try encoder.encode(data) let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + save([storageWrapper]) + } - let operation = repository.saveOperation { - [storageWrapper] - } _: { - [] + func save(map: [String: T?]) throws { + let wrappers = try map.map { identifier, data in + let encoded = try JSONEncoder().encode(data) + let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + return storageWrapper } + save(wrappers) + } + + private func save(_ wrappers: [AccountInfoStorageWrapper]) { + let operation = repository.saveOperation { + wrappers + } _: { [] } + operation.completionBlock = { [weak self] in self?.lock.exclusivelyWrite { - self?.cache[identifier] = data + wrappers.forEach { wrapper in + let data = try? self?.decoder.decode(T.self, from: wrapper.data) + self?.cache[wrapper.identifier] = data + } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift similarity index 58% rename from fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift index d8dbb30264..922c8e4f3b 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift @@ -4,8 +4,14 @@ public struct CachedStorageRequestTrigger: OptionSet { public typealias RawValue = UInt8 public private(set) var rawValue: UInt8 - public static var onPerform: CachedStorageRequestTrigger { CachedStorageRequestTrigger(rawValue: 1 << 0) } - public static var onCache: CachedStorageRequestTrigger { CachedStorageRequestTrigger(rawValue: 1 << 1) } + public static var onPerform: CachedStorageRequestTrigger { + CachedStorageRequestTrigger(rawValue: 1 << 0) + } + + public static var onCache: CachedStorageRequestTrigger { + CachedStorageRequestTrigger(rawValue: 1 << 1) + } + public static var onAll: CachedStorageRequestTrigger = [.onCache, onPerform] public init(rawValue: CachedStorageRequestTrigger.RawValue) { diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift new file mode 100644 index 0000000000..5ba862accb --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift @@ -0,0 +1,48 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +final class MixStorageRequestsKeysBuilder { + private lazy var storageKeyFactory: StorageKeyFactoryProtocol = StorageKeyFactory() + + private let codingFactory: RuntimeCoderFactoryProtocol + + init(codingFactory: RuntimeCoderFactoryProtocol) { + self.codingFactory = codingFactory + } + + func buildKeys(for request: [any MixStorageRequest]) throws -> [Data] { + let keys = try request.map { request in + switch request.parametersType { + case let .nMap(params): + let keysWorker = NMapKeyEncodingWorker( + codingFactory: codingFactory, + path: request.storagePath, + storageKeyFactory: storageKeyFactory, + keyParams: [params] + ) + let keys = try keysWorker.performEncoding() + return keys + + case let .encodable(params): + let keysWorker = MapKeyEncodingWorker( + codingFactory: codingFactory, + path: request.storagePath, + storageKeyFactory: storageKeyFactory, + keyParams: [params] + ) + let keys = try keysWorker.performEncoding() + return keys + + case .simple: + let key = try storageKeyFactory.createStorageKey( + moduleName: request.storagePath.moduleName, + storageName: request.storagePath.itemName + ) + return [key] + } + } + + return keys.reduce([], +) + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift new file mode 100644 index 0000000000..a496e92b97 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift @@ -0,0 +1,52 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +protocol StorageRequestKeyEncodingWorkerFactory { + func buildFactory( + storageCodingPath: any StorageCodingPathProtocol, + workerType: StorageRequestWorkerType, + codingFactory: RuntimeCoderFactoryProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) -> StorageKeyEncoder +} + +final class StorageRequestKeyEncodingWorkerFactoryDefault: StorageRequestKeyEncodingWorkerFactory { + func buildFactory( + storageCodingPath: any StorageCodingPathProtocol, + workerType: StorageRequestWorkerType, + codingFactory: RuntimeCoderFactoryProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) -> StorageKeyEncoder { + switch workerType { + case let .encodable(params): + return MapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case let .nMap(params): + return NMapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case let .prefixEncodable(params): + return MapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case .simple, .prefix: + return SimpleKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory + ) + } + } +} diff --git a/fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift similarity index 81% rename from fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift index 7778573e12..61b0b295b8 100644 --- a/fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift @@ -1,6 +1,6 @@ import Foundation -import SSFUtils import SSFRuntimeCodingService +import SSFUtils protocol StorageRequestWorkerBuilder { func buildWorker( @@ -11,11 +11,12 @@ protocol StorageRequestWorkerBuilder { ) -> StorageRequestWorker } -enum StorageRequestWorkerType { - case nMap(params: [[any NMapKeyParamProtocol]]) +public enum StorageRequestWorkerType { + case nMap(params: [[[any NMapKeyParamProtocol]]]) case encodable(params: [any Encodable]) case simple case prefix + case prefixEncodable(params: [any Encodable]) } final class StorageRequestWorkerBuilderDefault: StorageRequestWorkerBuilder { @@ -50,6 +51,12 @@ final class StorageRequestWorkerBuilderDefault: StorageRequestWork connection: connection, storageRequestFactory: storageRequestFactory ) + case .prefixEncodable: + return PrefixEncodableStorageRequestWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory + ) } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift new file mode 100644 index 0000000000..ba8b1e96b1 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift @@ -0,0 +1,8 @@ +import Foundation +import SSFModels + +protocol CacheableKeyedRequest { + var workerType: StorageRequestWorkerType { get } + var storagePath: any StorageCodingPathProtocol { get } + var keyType: MapKeyType { get } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift new file mode 100644 index 0000000000..e489432d46 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift @@ -0,0 +1,49 @@ +import Foundation +import SSFModels +import SSFUtils + +// MARK: - Request + +protocol MixStorageRequest { + associatedtype Response: Decodable + var responseType: Response.Type { get } + + var parametersType: MixStorageRequestParametersType { get } + var storagePath: StorageCodingPath { get } + + var requestId: String { get } +} + +extension MixStorageRequest { + var responseType: Response.Type { + Response.self + } + + var responseTypeRegistry: String { + String(describing: Response.self) + } +} + +public enum MixStorageRequestParametersType { + case nMap(params: [[any NMapKeyParamProtocol]]) + case encodable(param: any Encodable) + case simple + + var workerType: StorageRequestWorkerType { + switch self { + case let .nMap(params): + return .nMap(params: [params]) + case let .encodable(param): + return .encodable(params: [param]) + case .simple: + return .simple + } + } +} + +// MARK: - Response + +struct MixStorageResponse { + let request: any MixStorageRequest + let json: JSON? +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift index 2f7c5e5279..28202e4cb7 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift @@ -4,10 +4,11 @@ import SSFModels protocol MultipleRequest { var parametersType: MultipleStorageRequestParametersType { get } var storagePath: StorageCodingPath { get } + var keyType: MapKeyType { get } } enum MultipleStorageRequestParametersType { - case multipleNMap(params: [[any NMapKeyParamProtocol]]) + case multipleNMap(params: [[[any NMapKeyParamProtocol]]]) case multipleEncodable(params: [any Encodable]) var workerType: StorageRequestWorkerType { diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift new file mode 100644 index 0000000000..e4c4024438 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift @@ -0,0 +1,22 @@ +import Foundation +import SSFModels + +protocol PrefixRequest { + var storagePath: StorageCodingPath { get } + var keyType: MapKeyType { get } + var parametersType: PrefixStorageRequestParametersType { get } +} + +enum PrefixStorageRequestParametersType { + case simple + case encodable(params: [any Encodable]) + + var workerType: StorageRequestWorkerType { + switch self { + case .simple: + return .prefix + case let .encodable(params): + return .prefixEncodable(params: params) + } + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift index cc04d50f9e..140b55d419 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift @@ -10,15 +10,18 @@ enum StorageRequestParametersType { case nMap(params: [[any NMapKeyParamProtocol]]) case encodable(param: any Encodable) case simple + case prefix var workerType: StorageRequestWorkerType { switch self { case let .nMap(params): - return .nMap(params: params) + return .nMap(params: [params]) case let .encodable(param): return .encodable(params: [param]) case .simple: return .simple + case .prefix: + return .prefix } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift new file mode 100644 index 0000000000..2d0f41f781 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift @@ -0,0 +1,54 @@ +// +// MixStorageDecodingListWorker.swift +// +// +// Created by Soramitsu on 13.04.2024. +// + +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class MixStorageDecodingListWorker: StorageDecodable, StorageModifierHandling { + private let requests: [any MixStorageRequest] + private let updates: [[StorageUpdate]] + private let codingFactory: RuntimeCoderFactoryProtocol + + init( + requests: [any MixStorageRequest], + updates: [[StorageUpdate]], + codingFactory: RuntimeCoderFactoryProtocol + ) { + self.requests = requests + self.updates = updates + self.codingFactory = codingFactory + } + + func performDecoding() throws -> [MixStorageResponse] { + let dataList = updates + .flatMap { $0 } + .flatMap { StorageUpdateData(update: $0).changes } + .map { $0.value } + + let responses: [MixStorageResponse] = try zip(requests, dataList).map { request, data in + var json: JSON? + if let data = data { + json = try decode( + data: data, + path: request.storagePath, + codingFactory: codingFactory + ) + } else { + json = try handleModifier( + at: request.storagePath, + codingFactory: codingFactory + ) + } + let response = MixStorageResponse(request: request, json: json) + return response + } + + return responses + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift new file mode 100644 index 0000000000..72e5a84e7e --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift @@ -0,0 +1,31 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +final class MultipleSingleStorageResponseValueExtractor: MultipleStorageResponseValueExtractor { + private let runtimeService: RuntimeCodingServiceProtocol + + init(runtimeService: RuntimeCodingServiceProtocol) { + self.runtimeService = runtimeService + } + + func extractValue( + request: MultipleRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T] where K: Decodable & Hashable, T: Decodable { + var dict: [K: T] = [:] + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + try await storageResponse.asyncForEach { + let id: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + + dict[id] = $0.value + } + + return dict + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift new file mode 100644 index 0000000000..1d8a4704fd --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift @@ -0,0 +1,9 @@ +import Foundation +import SSFUtils + +protocol MultipleStorageResponseValueExtractor { + func extractValue( + request: MultipleRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T] +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift similarity index 76% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift index ab44c3c0a9..32ee1c75d9 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift @@ -1,9 +1,12 @@ import Foundation -import SSFUtils import SSFRuntimeCodingService +import SSFUtils protocol PrefixResponseValueExtractor { - func extractValue(request: PrefixRequest, storageResponse: [StorageResponse]) async throws -> [K: T]? + func extractValue( + request: PrefixRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T]? } final class PrefixStorageResponseValueExtractor: PrefixResponseValueExtractor { @@ -13,10 +16,10 @@ final class PrefixStorageResponseValueExtractor: PrefixResponseValueExtractor { self.runtimeService = runtimeService } - func extractValue( + func extractValue( request: PrefixRequest, storageResponse: [StorageResponse] - ) async throws -> [K: T]? where T: Decodable, K: Decodable & ScaleCodable { + ) async throws -> [K: T]? { var dict: [K: T] = [:] let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/StorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/StorageResponseValueExtractor.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/StorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/StorageResponseValueExtractor.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift similarity index 87% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift index b927d67965..c3c865d1c1 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels final class EncodableStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,7 +23,10 @@ final class EncodableStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] where T: Decodable { guard case let StorageRequestWorkerType.encodable(params: params) = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let coderFactory = try await runtimeService.fetchCoderFactory() diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift new file mode 100644 index 0000000000..f96c8a9665 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift @@ -0,0 +1,32 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +protocol MixStorageRequestWorker { + func perform(keys: [Data]) async throws -> [[StorageUpdate]] +} + +final class MixStorageRequestsWorkerDefault: MixStorageRequestWorker { + private let runtimeService: RuntimeCodingServiceProtocol + private let connection: JSONRPCEngine + private let storageRequestFactory: AsyncStorageRequestFactory + + init( + runtimeService: RuntimeCodingServiceProtocol, + connection: JSONRPCEngine, + storageRequestFactory: AsyncStorageRequestFactory + ) { + self.runtimeService = runtimeService + self.connection = connection + self.storageRequestFactory = storageRequestFactory + } + + func perform(keys: [Data]) async throws -> [[StorageUpdate]] { + let updates = try await storageRequestFactory.queryWorkersResult( + for: keys, + at: nil, + engine: connection + ) + return updates + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift similarity index 85% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift index e1e28b4312..554341a25e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class NMapStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,13 +23,16 @@ final class NMapStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] { guard case let StorageRequestWorkerType.nMap(params: params) = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let coderFactoryOperation = try await runtimeService.fetchCoderFactory() let response: [StorageResponse] = try await storageRequestFactory.queryItems( engine: connection, - keyParams: [params], + keyParams: params, factory: coderFactoryOperation, storagePath: storagePath ) diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift new file mode 100644 index 0000000000..c6f9c1ea3d --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift @@ -0,0 +1,43 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class PrefixEncodableStorageRequestWorker: StorageRequestWorker { + private let runtimeService: RuntimeCodingServiceProtocol + private let connection: JSONRPCEngine + private let storageRequestFactory: AsyncStorageRequestFactory + + init( + runtimeService: RuntimeCodingServiceProtocol, + connection: JSONRPCEngine, + storageRequestFactory: AsyncStorageRequestFactory + ) { + self.runtimeService = runtimeService + self.connection = connection + self.storageRequestFactory = storageRequestFactory + } + + func perform( + params: StorageRequestWorkerType, + storagePath: StorageCodingPath + ) async throws -> [StorageResponse] { + guard case let .prefixEncodable(params) = params else { + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) + } + + let coderFactoryOperation = try await runtimeService.fetchCoderFactory() + + let response: [StorageResponse] = try await storageRequestFactory.queryItemsByPrefix( + engine: connection, + keyParams: params, + factory: coderFactoryOperation, + storagePath: storagePath, + at: nil + ) + return response + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift similarity index 95% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift index c79918de3f..75f9489acd 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class PrefixStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -31,7 +31,8 @@ final class PrefixStorageRequestWorker: StorageRequestWorker { engine: connection, keys: [key], factory: coderFactoryOperation, - storagePath: storagePath + storagePath: storagePath, + at: nil ) return response } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift similarity index 88% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift index 60057da07b..4cb822774d 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels final class SimpleStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,7 +23,10 @@ final class SimpleStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] where T: Decodable { guard case StorageRequestWorkerType.simple = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let key = try StorageKeyFactory().createStorageKey( diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift similarity index 81% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift index 0a26e4b0c0..d29f54924e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift @@ -1,9 +1,9 @@ import Foundation -import SSFUtils import SSFModels +import SSFUtils enum StorageRequestWorkerError: Error { - case invalidParameters + case invalidParameters(moduleName: String, itemName: String) } protocol StorageRequestWorker: AnyObject { diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift index 7e708a52d0..8a7f4069d5 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels extension AsyncStorageRequestFactory { func queryItems( diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift index be05305c1a..804fa6e8ad 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels protocol AsyncStorageRequestFactory { func queryItems( diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift similarity index 96% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift index 883e5c0335..78b0a17a36 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift @@ -3,10 +3,8 @@ import SSFModels import SSFRuntimeCodingService import SSFUtils -final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { - private lazy var storageKeyFactory: StorageKeyFactoryProtocol = { - StorageKeyFactory() - }() +final class AsyncStorageRequestDefault: AsyncStorageRequestFactory { + private lazy var storageKeyFactory: StorageKeyFactoryProtocol = StorageKeyFactory() // MARK: - AsyncStorageRequestFactory @@ -23,7 +21,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() let queryItems: [StorageResponse] = try await queryItems( engine: engine, @@ -105,7 +103,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() let queryItems: [StorageResponse] = try await queryItems( engine: engine, @@ -167,7 +165,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() return try await queryItemsByPrefix( engine: engine, @@ -240,7 +238,8 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { StorageResponse(key: key, data: keyedEncodedItems[key], value: keyedItems[key]) }.sorted { response1, response2 in guard let index1 = originalIndexedKeys[response1.key], - let index2 = originalIndexedKeys[response2.key] else { + let index2 = originalIndexedKeys[response2.key] else + { return false } @@ -295,7 +294,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { of: T.self, returning: [T].self, body: { group in - workers.forEach { worker in + for worker in workers { group.addTask { try await worker.performCall() } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift similarity index 73% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift index 6fc780e0c3..7ca7d08ab3 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift @@ -30,9 +30,19 @@ final class ChildStorageResponseDecodingWorker { let json = try mapper.accept(decoder: decoder) let value = try json.map(to: T.self) - return ChildStorageResponse(storageKey: storageKey, childKey: childKey, data: data, value: value) + return ChildStorageResponse( + storageKey: storageKey, + childKey: childKey, + data: data, + value: value + ) } else { - return ChildStorageResponse(storageKey: storageKey, childKey: childKey, data: nil, value: nil) + return ChildStorageResponse( + storageKey: storageKey, + childKey: childKey, + data: nil, + value: nil + ) } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCListWorker.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCListWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCListWorker.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift index 1728dbbca5..5d5b58dd7e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift @@ -31,6 +31,8 @@ class JSONRPCWorker { if let requestId = requestId { engine.cancelForIdentifier(requestId) + } else { + continuation.resume(throwing: JSONRPCWorkerContinuationError()) } } @@ -43,6 +45,7 @@ class JSONRPCWorker { continuation.resume(with: result) } } catch { + timeoutTask.cancel() continuation.resume(throwing: error) } } @@ -53,3 +56,7 @@ class JSONRPCWorker { currentTask?.cancel() } } + +public struct JSONRPCWorkerContinuationError: LocalizedError { + public var errorDescription: String? = "timeout" +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift new file mode 100644 index 0000000000..22cbb956d6 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift @@ -0,0 +1,5 @@ +import Foundation + +protocol StorageKeyEncoder { + func performEncoding() throws -> [Data] +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift index e081ca256e..4d918e3d90 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift @@ -1,17 +1,17 @@ import Foundation -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService import SSFUtils -actor MapKeyEncodingWorker { +final class MapKeyEncodingWorker: StorageKeyEncoder { private let keyParams: [any Encodable] private let codingFactory: RuntimeCoderFactoryProtocol - private let path: StorageCodingPath + private let path: any StorageCodingPathProtocol private let storageKeyFactory: StorageKeyFactoryProtocol init( codingFactory: RuntimeCoderFactoryProtocol, - path: StorageCodingPath, + path: any StorageCodingPathProtocol, storageKeyFactory: StorageKeyFactoryProtocol, keyParams: [any Encodable] ) { @@ -40,10 +40,10 @@ actor MapKeyEncodingWorker { keyType = doubleMapEntry.key1 hasher = doubleMapEntry.hasher case let .nMap(nMapEntry): - guard - let firstKey = try nMapEntry.keys(using: codingFactory.metadata.schemaResolver).first, - let firstHasher = nMapEntry.hashers.first - else { + guard let firstKey = try nMapEntry.keys(using: codingFactory.metadata.schemaResolver) + .first, + let firstHasher = nMapEntry.hashers.first else + { throw StorageKeyEncodingOperationError.missingRequiredParams } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift similarity index 91% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift index 3e59a42e81..3ab0993251 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift @@ -3,7 +3,7 @@ import SSFModels import SSFRuntimeCodingService import SSFUtils -final class NMapKeyEncodingWorker { +final class NMapKeyEncodingWorker: StorageKeyEncoder { private let keyParams: [[[any NMapKeyParamProtocol]]] private let codingFactory: RuntimeCoderFactoryProtocol private let path: any StorageCodingPathProtocol @@ -51,7 +51,10 @@ final class NMapKeyEncodingWorker { let keys: [Data] = try params.map { params in let encodedParams: [Data] = try params.enumerated().map { index, param in - try param.encode(encoder: codingFactory.createEncoder(), type: keyEntries[index]) + try param.encode( + encoder: codingFactory.createEncoder(), + type: keyEntries[index] + ) } return try storageKeyFactory.createStorageKey( diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift new file mode 100644 index 0000000000..5f2ac3938d --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift @@ -0,0 +1,27 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class SimpleKeyEncodingWorker: StorageKeyEncoder { + private let codingFactory: RuntimeCoderFactoryProtocol + private let path: any StorageCodingPathProtocol + private let storageKeyFactory: StorageKeyFactoryProtocol + + init( + codingFactory: RuntimeCoderFactoryProtocol, + path: any StorageCodingPathProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) { + self.codingFactory = codingFactory + self.path = path + self.storageKeyFactory = storageKeyFactory + } + + func performEncoding() throws -> [Data] { + try [storageKeyFactory.createStorageKey( + moduleName: path.moduleName, + storageName: path.itemName + )] + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift similarity index 89% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift index 4c6d08ac3f..09a49919dc 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift @@ -1,8 +1,10 @@ import Foundation -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService -final class StorageFallbackDecodingListWorker: StorageDecodable, StorageModifierHandling { +final class StorageFallbackDecodingListWorker: StorageDecodable, + StorageModifierHandling +{ private let dataList: [Data?] private let codingFactory: RuntimeCoderFactoryProtocol private let path: StorageCodingPath @@ -20,7 +22,8 @@ final class StorageFallbackDecodingListWorker: StorageDecodable, S func performDecoding() throws -> [T?] { let items: [T?] = try dataList.map { data in if let data = data { - return try decode(data: data, path: path, codingFactory: codingFactory).map(to: T.self) + return try decode(data: data, path: path, codingFactory: codingFactory) + .map(to: T.self) } else { return try handleModifier(at: path, codingFactory: codingFactory)?.map(to: T.self) } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift new file mode 100644 index 0000000000..a57368dacc --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift @@ -0,0 +1,474 @@ +import Foundation +import RobinHood +import SSFChainRegistry +import SSFModels +import SSFRuntimeCodingService +import SSFSingleValueCache +import SSFUtils + +protocol StorageRequestPerformer { + func performSingle( + _ request: StorageRequest, + chain: ChainModel + ) async throws -> T? + + func performSingle( + _ request: StorageRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performMultiple( + _ request: MultipleRequest, + chain: ChainModel + ) async throws -> [K: T]? + + func performMultiple( + _ request: MultipleRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performPrefix( + _ request: PrefixRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performPrefix( + _ request: PrefixRequest, + chain: ChainModel + ) async throws -> [K: T]? + + func perform( + _ requests: [any MixStorageRequest], + chain: ChainModel + ) async throws -> [MixStorageResponse] +} + +actor StorageRequestPerformerDefault: StorageRequestPerformer { + private let chainRegistry: ChainRegistryProtocol + + private lazy var storageRequestFactory: AsyncStorageRequestFactory = + AsyncStorageRequestDefault() + + private lazy var cacheStorage: AsyncSingleValueRepository = + SingleValueCacheRepositoryFactoryDefault().createAsyncSingleValueCacheRepository() + + init(chainRegistry: ChainRegistryProtocol) { + self.chainRegistry = chainRegistry + } + + // MARK: - StorageRequestPerformer + + func performSingle( + _ request: StorageRequest, + chain: ChainModel + ) async throws -> T? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = SingleStorageResponseValueExtractor() + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let value = try valueExtractor.extractValue(storageResponse: response) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + return value + } + + func performSingle( + _ request: StorageRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCacheSingleValue(for: request, with: continuation, chain: chain) + let value: T? = try await performSingle(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCacheSingleValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: T? = try await performSingle(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func performMultiple( + _ request: MultipleRequest, + chain: ChainModel + ) async throws -> [K: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = + MultipleSingleStorageResponseValueExtractor(runtimeService: runtimeService) + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let values: [K: T]? = try await valueExtractor.extractValue( + request: request, + storageResponse: response + ) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + + return values + } + + func performMultiple( + _ request: MultipleRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCacheMultipleValue(for: request, with: continuation, chain: chain) + let value: [K: T]? = try await performMultiple(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCacheMultipleValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: [K: T]? = try await performMultiple(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func performPrefix( + _ request: PrefixRequest, + chain: ChainModel + ) async throws -> [K: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = PrefixStorageResponseValueExtractor(runtimeService: runtimeService) + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let values: [K: T]? = try await valueExtractor.extractValue( + request: request, + storageResponse: response + ) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + + return values + } + + func performPrefix( + _ request: PrefixRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + return AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCachePagedValue(for: request, with: continuation, chain: chain) + let value: [K: T]? = try await performPrefix(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCachePagedValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: [K: T]? = try await performPrefix(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func perform( + _ requests: [any MixStorageRequest], + chain: ChainModel + ) async throws -> [MixStorageResponse] { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let codingFactory = try await runtimeService.fetchCoderFactory() + let keysBuilder = MixStorageRequestsKeysBuilder(codingFactory: codingFactory) + let requesrWorker = MixStorageRequestsWorkerDefault( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory + ) + + let keys = try keysBuilder.buildKeys(for: requests) + let updates = try await requesrWorker.perform(keys: keys) + + let decodingWorker = MixStorageDecodingListWorker( + requests: requests, + updates: updates, + codingFactory: codingFactory + ) + let responses = try decodingWorker.performDecoding() + + return responses + } + + // MARK: - Private methods + + private func getCacheSingleValue( + for request: StorageRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws { + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let decoded = cache?.first?.value else { + return + } + let response = CachedStorageResponse(value: decoded, type: .cache) + continuation.yield(response) + } + + private func getCacheMultipleValue( + for request: MultipleRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let cache = cache else { + return + } + + let resultArray: [[K: T]] = try await cache.asyncCompactMap { + let key: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + return [key: $0.value] + } + let result = Dictionary(resultArray.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + let response = CachedStorageResponse(value: result, type: .cache) + continuation.yield(response) + } + + private func getCachePagedValue( + for request: PrefixRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let cache = cache else { + return + } + + let resultArray: [[K: T]] = try await cache.asyncCompactMap { + let key: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + return [key: $0.value] + } + let result = Dictionary(resultArray.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + let response = CachedStorageResponse(value: result, type: .cache) + continuation.yield(response) + } + + private func getCache( + params: StorageRequestWorkerType, + storagePath: StorageCodingPath, + chain: ChainModel + ) async throws -> [Data: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + let codingFactory = try await runtimeService.fetchCoderFactory() + let keysEncoder = StorageRequestKeyEncodingWorkerFactoryDefault().buildFactory( + storageCodingPath: storagePath, + workerType: params, + codingFactory: codingFactory, + storageKeyFactory: StorageKeyFactory() + ) + let keys = try keysEncoder.performEncoding() + let localKeys = try keys.compactMap { try createKey(from: $0, key: chain.chainId) } + let cache = try await cacheStorage.fetch(by: localKeys, options: RepositoryFetchOptions()) + + let caches = cache.compactMap { + let item: [Data: T]? = try? decode( + object: $0, + codingFactory: codingFactory, + path: storagePath + ) + return item + } + + return Dictionary(caches.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + } + + private func decode( + object: SingleValueProviderObject, + codingFactory: RuntimeCoderFactoryProtocol, + path: StorageCodingPath + ) throws -> [Data: T]? { + let decoder = StorageFallbackDecodingListWorker( + codingFactory: codingFactory, + path: path, + dataList: [object.payload] + ) + guard let value = try decoder.performDecoding().compactMap({ $0 }).first else { + return nil + } + + let key = Data(hex: object.identifier) + + return [key: value] + } + + private func save( + response: [StorageResponse], + params _: StorageRequestWorkerType, + storagePath _: StorageCodingPath, + chain: ChainModel + ) throws { + Task { + let objects: [SingleValueProviderObject] = try response.compactMap { + guard let data = $0.data else { + return nil + } + + let identifier = try createKey(from: $0.key, key: chain.chainId) + + return SingleValueProviderObject(identifier: identifier, payload: data) + } + + await cacheStorage.save(models: objects) + } + } + + private func createKey(from remoteKey: Data, key: String) throws -> String { + let concatData = Data(key.utf8) + remoteKey + return concatData.toHex() + } +} diff --git a/fearless/ApplicationLayer/StorageKeyDataExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift similarity index 74% rename from fearless/ApplicationLayer/StorageKeyDataExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift index 0f46312e3d..43b87918fb 100644 --- a/fearless/ApplicationLayer/StorageKeyDataExtractor.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift @@ -1,11 +1,13 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class StorageKeyDataExtractor { private let runtimeService: RuntimeCodingServiceProtocol + private lazy var storageKeyFactory = StorageKeyFactory() + init(runtimeService: RuntimeCodingServiceProtocol) { self.runtimeService = runtimeService } @@ -20,9 +22,14 @@ final class StorageKeyDataExtractor { let coderFactory = try await runtimeService.fetchCoderFactory() - let storagePathMetadata = coderFactory.metadata.getStorageMetadata(in: storagePath.moduleName, storageName: storagePath.itemName) + let storagePathMetadata = coderFactory.metadata.getStorageMetadata( + in: storagePath.moduleName, + storageName: storagePath.itemName + ) - guard let keyName = try storagePathMetadata?.type.keyName(schemaResolver: coderFactory.metadata.schemaResolver) else { + guard let keyName = try storagePathMetadata?.type + .keyName(schemaResolver: coderFactory.metadata.schemaResolver) else + { throw ConvenienceError(error: "type not found") } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift b/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift new file mode 100644 index 0000000000..3cbc91f321 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift @@ -0,0 +1,43 @@ +import Foundation + +public enum CachedStorageResponseType { + case cache + case remote +} + +public struct CachedStorageResponse { + public var value: T? + public var type: CachedStorageResponseType + + public init(value: T?, type: CachedStorageResponseType) { + self.value = value + self.type = type + } + + public static var empty: CachedStorageResponse { + CachedStorageResponse(value: nil, type: .cache) + } + + public func merge( + with previous: CachedStorageResponse?, + priorityType: CachedStorageResponseType + ) -> CachedStorageResponse { + var type: CachedStorageResponseType + switch (previous?.type, self.type) { + case (.cache, .cache): + type = .cache + case (.remote, .remote): + type = .remote + case (.cache, .remote): + type = .remote + case (.remote, .cache): + type = priorityType + case (nil, .cache): + type = .cache + case (nil, .remote): + type = .remote + } + + return CachedStorageResponse(value: value, type: type) + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift deleted file mode 100644 index 935bad1eab..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation -import SSFModels - -protocol PrefixRequest { - var storagePath: StorageCodingPath { get } - var keyType: MapKeyType { get } -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift deleted file mode 100644 index 8004c55e20..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation - -final class MultipleSingleStorageResponseValueExtractor: MultipleStorageResponseValueExtractor { - func extractValue(storageResponse: [StorageResponse]) throws -> [T?] where T: Decodable { - storageResponse.map { $0.value } - } -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift deleted file mode 100644 index 3c9cbbb40f..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift +++ /dev/null @@ -1,5 +0,0 @@ -import Foundation - -protocol MultipleStorageResponseValueExtractor { - func extractValue(storageResponse: [StorageResponse]) throws -> [T?] -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift deleted file mode 100644 index 2591cf409c..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift +++ /dev/null @@ -1,150 +0,0 @@ -import Foundation -import SSFUtils -import SSFRuntimeCodingService -import RobinHood -import SSFModels - -protocol StorageRequestPerformer { - func performSingle( - _ request: StorageRequest - ) async throws -> T? - - func performSingle( - _ request: StorageRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream - - func performMultiple( - _ request: MultipleRequest - ) async throws -> [T?] - - func performMultiple( - _ request: MultipleRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream<[T?], Error> - - func performPrefix( - _ request: PrefixRequest - ) async throws -> [K: T]? -} - -actor StorageRequestPerformerDefault: StorageRequestPerformer { - private let runtimeService: RuntimeCodingServiceProtocol - private let connection: JSONRPCEngine - private lazy var storageRequestFactory: AsyncStorageRequestFactory = { - AsyncStorageRequestDefault() - }() - - init( - runtimeService: RuntimeCodingServiceProtocol, - connection: JSONRPCEngine - ) { - self.runtimeService = runtimeService - self.connection = connection - } - - // MARK: - StorageRequestPerformer - - func performSingle(_ request: StorageRequest) async throws -> T? { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: request.parametersType.workerType - ) - - let valueExtractor = SingleStorageResponseValueExtractor() - let response: [StorageResponse] = try await worker.perform( - params: request.parametersType.workerType, - storagePath: request.storagePath - ) - let value = try valueExtractor.extractValue(storageResponse: response) - return value - } - - func performSingle( - _ request: StorageRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream { - AsyncThrowingStream { continuation in - Task { - if withCacheOptions.contains(.onPerform) { - let value: T? = try await performSingle(request) - continuation.yield(value) - continuation.finish() - return - } - } - } - } - - func performMultiple( - _ request: MultipleRequest - ) async throws -> [T?] { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: request.parametersType.workerType - ) - - let valueExtractor = MultipleSingleStorageResponseValueExtractor() - let response: [StorageResponse] = try await worker.perform( - params: request.parametersType.workerType, - storagePath: request.storagePath - ) - let values = try valueExtractor.extractValue(storageResponse: response) - return values - } - - func performMultiple( - _ request: MultipleRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream<[T?], Error> { - AsyncThrowingStream<[T?], Error> { continuation in - Task { - if withCacheOptions.contains(.onPerform) { - let value: [T?] = try await performMultiple(request) - continuation.yield(value) - continuation.finish() - return - } - } - } - } - - func performPrefix( - _ request: PrefixRequest - ) async throws -> [K: T]? where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: .prefix - ) - - let valueExtractor = PrefixStorageResponseValueExtractor(runtimeService: runtimeService) - let response: [StorageResponse] = try await worker.perform( - params: .prefix, - storagePath: request.storagePath - ) - let values: [K: T]? = try await valueExtractor.extractValue(request: request, storageResponse: response) - return values - } - - // MARK: - Private methods - - private func decode( - payload: Data, - codingFactory: RuntimeCoderFactoryProtocol, - path: StorageCodingPath - ) throws -> [T?] { - let data = try JSONDecoder().decode([Data].self, from: payload) - let decoder = StorageFallbackDecodingListWorker( - codingFactory: codingFactory, - path: path, - dataList: data - ) - return try decoder.performDecoding() - } -} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift index 6a225da968..ff732bbef2 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift @@ -17,7 +17,7 @@ final class BlockscoutHistoryOperationFactory { .appendingPathComponent("addresses") .appendingPathComponent(address) - if case .erc20 = chainAsset.asset.ethereumType { + if case .erc20 = chainAsset.asset.assetType.ethereumAssetType { let contract = chainAsset.asset.id url = url.appendingPathComponent("token-transfers") diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift index 529a6b914d..e6d0da8481 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift @@ -12,12 +12,12 @@ final class EtherscanHistoryOperationFactory { url: URL, chainAsset: ChainAsset ) -> BaseOperation { - let action: String = chainAsset.asset.ethereumType == .normal ? "txlist" : "tokentx" + let action: String = chainAsset.asset.assetType.ethereumAssetType == .normal ? "txlist" : "tokentx" var urlComponents = URLComponents(string: url.absoluteString) var queryItems = [ URLQueryItem(name: "module", value: "account"), URLQueryItem(name: "action", value: action), - URLQueryItem(name: "address", value: address), + URLQueryItem(name: "address", value: address) ] if let apiKey = BlockExplorerApiKey(chainId: chainAsset.chain.chainId) { @@ -75,7 +75,7 @@ final class EtherscanHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().result let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } .sorted(by: { $0.timestampInSeconds > $1.timestampInSeconds }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift index 6093aa1fa7..64db92a722 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift @@ -1,4 +1,3 @@ - import RobinHood import IrohaCrypto import SSFUtils @@ -40,6 +39,10 @@ final class HistoryOperationFactoriesAssembly { return ZChainHistoryOperationFactory() case .klaytn: return KaiaHistoryOperationFactory() + case .ton: + return TonHistoryOperationFactory() + case .soraSubquery: + return SoraSubqueryHistoryOperationFactory(txStorage: txStorage, chainRegistry: ChainRegistryFacade.sharedRegistry) case .none: return nil } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift index 82c6c8ec82..0a21d8592d 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift @@ -17,7 +17,7 @@ final class OklinkHistoryOperationFactory { queryItems?.append(URLQueryItem(name: "address", value: address)) queryItems?.append(URLQueryItem(name: "symbol", value: chainAsset.asset.symbol)) - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .erc20: queryItems?.append(URLQueryItem(name: "protocolType", value: "token_20")) case .bep20, .normal, .none: @@ -83,7 +83,7 @@ final class OklinkHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().data.first?.transactionLists let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } .sorted(by: { $0.transactionTime > $1.transactionTime }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift new file mode 100644 index 0000000000..fe3115829d --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift @@ -0,0 +1,371 @@ +import Foundation +import RobinHood + +import IrohaCrypto +import SSFUtils +import SSFModels +import SSFRuntimeCodingService + +class SoraSubqueryHistoryOperationFactory { + private let txStorage: AnyDataProviderRepository + private let chainRegistry: ChainRegistryProtocol + + init( + txStorage: AnyDataProviderRepository, + chainRegistry: ChainRegistryProtocol + ) { + self.txStorage = txStorage + self.chainRegistry = chainRegistry + } + + private func createOperation( + address: String, + count: Int, + cursor: String?, + url: URL, + filters: [WalletTransactionHistoryFilter] + ) -> BaseOperation { + let queryString = prepareQueryForAddress( + address, + count: count, + cursor: cursor, + filters: filters + ) + + let requestFactory = BlockNetworkRequestFactory { + var request = URLRequest(url: url) + + let info = JSON.dictionaryValue(["query": JSON.stringValue(queryString)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + + request.httpMethod = HttpMethod.post.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory { data in + let response = try JSONDecoder().decode( + GraphQLResponse.self, + from: data + ) + + switch response { + case let .errors(error): + throw error + case let .data(response): + return response + } + } + + let operation = NetworkOperation( + requestFactory: requestFactory, + resultFactory: resultFactory + ) + + return operation + } + + private func prepareFilter( + filters: [WalletTransactionHistoryFilter], + address: String + ) -> String { + var filterStrings: [String] = [] + + var innerFilters: [String] = [] + var outerFilters: [String] = [] + if filters.contains(where: { $0.type == .swap && $0.selected }) { + innerFilters.append("{module:{equalTo: \"\("liquidityProxy")\"},method:{equalTo: \"\("swap")\"}}") + } + + if filters.contains(where: { $0.type == .reward && $0.selected }) { + innerFilters.append("{module:{equalTo: \"\("staking")\"},method:{equalTo: \"\("Rewarded")\"}}") + } + + if filters.contains(where: { $0.type == .transfer && $0.selected }) { + innerFilters.append("{module:{equalTo: \"\("assets")\"}, method:{equalTo: \"\("transfer")\"}}") + outerFilters.append("{module:{equalTo: \"\("assets")\"}, method:{equalTo: \"\("transfer")\"},execution:{contains:{success: true}},data:{contains:{to: \"\(address)\"}}}") + } + + innerFilters.append("{module:{equalTo: \"\("poolXYK")\"},method:{equalTo: \"\("depositLiquidity")\"}},{data:{contains:{method: \"\("depositLiquidity")\"}}}") + innerFilters.append("{module:{equalTo: \"\("poolXYK")\"},method:{equalTo: \"\("withdrawLiquidity")\"}},{data:{contains:{method: \"\("withdrawLiquidity")\"}}}") + innerFilters.append("{module:{equalTo: \"\("referrals")\"}}") + innerFilters.append("{module:{equalTo: \"\("ethBridge")\"},method:{equalTo: \"\("transferToSidechain")\"}}") + outerFilters.append("{module:{equalTo: \"\("referrals")\"},method:{equalTo: \"\("setReferrer")\"},execution:{contains:{success: true}},data:{contains:{to: \"\(address)\"}}}") + + let resultFilters = filterStrings.joined(separator: ",") + + let result = "{or:[{address:{equalTo: \"\(address)\"},or:[\(innerFilters.joined(separator: ","))]},\(outerFilters.joined(separator: ","))]}" + + return result + } + + private func prepareQueryForAddress( + _ address: String, + count: Int, + cursor: String?, + filters: [WalletTransactionHistoryFilter] + ) -> String { + let after = cursor.map { "\"\($0)\"" } ?? "null" + let filter = prepareFilter(filters: filters, address: address) + + return """ + { + historyElements( + after: \(after) + first: \(count) + orderBy: TIMESTAMP_DESC + filter: \(filter) + ) { + pageInfo { + startCursor + endCursor + } + nodes { + id + timestamp + address + data + method + module + blockHash + blockHeight + networkFee + execution + } + } + } + """ + } + + private func createHistoryMergeOperation( + dependingOn remoteOperation: BaseOperation?, + localOperation: BaseOperation<[TransactionHistoryItem]>?, + asset: AssetModel, + chain: ChainModel, + address: String + ) -> BaseOperation { + ClosureOperation { + let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyItems ?? [] + + if let localTransactions = try localOperation?.extractNoCancellableResultData(), + !localTransactions.isEmpty { + let manager = TransactionHistoryMergeManager( + address: address, + chain: chain, + asset: asset + ) + return manager.merge( + subscanItems: remoteTransactions, + localItems: localTransactions + ) + } else { + let transactions: [AssetTransactionData] = remoteTransactions.map { item in + item.createTransactionForAddress( + address, + chain: chain, + asset: asset + ) + } + + return TransactionHistoryMergeResult( + historyItems: transactions, + identifiersToRemove: [] + ) + } + } + } + + private func createSubqueryHistoryMergeOperation( + dependingOn remoteOperation: BaseOperation?, + runtimeOperation: BaseOperation, + localOperation: BaseOperation<[TransactionHistoryItem]>?, + asset: AssetModel, + chain: ChainModel, + address: String + ) -> BaseOperation { + ClosureOperation { + let chainAsset = ChainAsset(chain: chain, asset: asset) + let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyElements.nodes ?? [] + let filteredTransactions = remoteTransactions + .filter { transaction in + if asset.symbol.lowercased() == "val", transaction.method?.lowercased() == "rewarded" { + return true + } + + if asset.isUtility, transaction.module?.lowercased() == "staking", transaction.method?.lowercased() != "rewarded" { + return true + } + + if let targetAssetId = transaction.data?.targetAssetId, targetAssetId == asset.currencyId { + return true + } + + if let baseAssetId = transaction.data?.baseAssetId, baseAssetId == asset.currencyId { + return true + } + + if let assetId = transaction.data?.assetId, assetId == asset.currencyId { + return true + } + + return false + } + + if let localTransactions = try localOperation?.extractNoCancellableResultData(), + !localTransactions.isEmpty { + let manager = TransactionHistoryMergeManager( + address: address, + chain: chain, + asset: asset + ) + return manager.merge( + subscanItems: remoteTransactions, + localItems: localTransactions + ) + } else { + let transactions: [AssetTransactionData] = remoteTransactions.map { item in + item.createTransactionForAddress( + address, + chain: chain, + asset: asset + ) + } + + return TransactionHistoryMergeResult( + historyItems: transactions, + identifiersToRemove: [] + ) + } + } + } + + private func createHistoryMapOperation( + dependingOn mergeOperation: BaseOperation, + remoteOperation: BaseOperation + ) -> BaseOperation { + ClosureOperation { + let mergeResult = try mergeOperation.extractNoCancellableResultData() + let newHistoryContext = try remoteOperation.extractNoCancellableResultData().context + + return AssetTransactionPageData( + transactions: mergeResult.historyItems, + context: !newHistoryContext.isComplete ? newHistoryContext.toContext() : nil + ) + } + } + + private func createSubqueryHistoryMapOperation( + dependingOn mergeOperation: BaseOperation, + remoteOperation: BaseOperation + ) -> BaseOperation { + ClosureOperation { + let mergeResult = try mergeOperation.extractNoCancellableResultData() + let remoteData = try remoteOperation.extractNoCancellableResultData() + + return AssetTransactionPageData( + transactions: mergeResult.historyItems, + context: remoteData.historyElements.pageInfo.toContext() + ) + } + } +} + +extension SoraSubqueryHistoryOperationFactory: HistoryOperationFactoryProtocol { + func fetchTransactionHistoryOperation( + asset: AssetModel, + chain: ChainModel, + address: String, + filters: [WalletTransactionHistoryFilter], + pagination: Pagination + ) -> CompoundOperationWrapper { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { + return CompoundOperationWrapper.createWithError(RuntimeProviderError.providerUnavailable) + } + let runtimeOperation = runtimeService.fetchCoderFactoryOperation() + + let historyContext = TransactionHistoryContext( + context: pagination.context ?? [:], + defaultRow: pagination.count + ).byApplying(filters: filters) + + guard !historyContext.isComplete else { + let pageData = AssetTransactionPageData( + transactions: [], + context: nil + ) + + let operation = BaseOperation() + operation.result = .success(pageData) + return CompoundOperationWrapper(targetOperation: operation) + } + + let remoteHistoryOperation: BaseOperation + + if let baseUrl = chain.externalApi?.history?.url { + remoteHistoryOperation = createOperation( + address: address, + count: pagination.count, + cursor: pagination.context?["endCursor"], + url: baseUrl, + filters: filters + ) + } else { + let result = SoraSubqueryHistoryData(historyElements: .init(pageInfo: .init(startCursor: nil, endCursor: nil, hasNextPage: nil), nodes: [])) + remoteHistoryOperation = BaseOperation.createWithResult(result) + } + + var dependencies: [Operation] = [remoteHistoryOperation, runtimeOperation] + + let localFetchOperation: BaseOperation<[TransactionHistoryItem]>? + + if pagination.context == nil { + let operation = txStorage.fetchAllOperation(with: RepositoryFetchOptions()) + dependencies.append(operation) + + operation.addDependency(remoteHistoryOperation) + + localFetchOperation = operation + } else { + localFetchOperation = nil + } + + let mergeOperation = createSubqueryHistoryMergeOperation( + dependingOn: remoteHistoryOperation, + runtimeOperation: runtimeOperation, + localOperation: localFetchOperation, + asset: asset, + chain: chain, + address: address + ) + + dependencies.forEach { mergeOperation.addDependency($0) } + + dependencies.append(mergeOperation) + + if pagination.context == nil { + let clearOperation = txStorage.saveOperation({ [] }, { + let mergeResult = try mergeOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + return mergeResult.identifiersToRemove + }) + + dependencies.append(clearOperation) + clearOperation.addDependency(mergeOperation) + } + + let mapOperation = createSubqueryHistoryMapOperation( + dependingOn: mergeOperation, + remoteOperation: remoteHistoryOperation + ) + + dependencies.forEach { mapOperation.addDependency($0) } + + return CompoundOperationWrapper( + targetOperation: mapOperation, + dependencies: dependencies + ) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift index f21954ff50..fd5bf18616 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift @@ -212,15 +212,15 @@ class SubqueryHistoryOperationFactory { assetId = extrinsic.assetId } - if chainAsset.chainAssetType != .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType != .normal, assetId == nil { return false } - if chainAsset.chainAssetType == .normal, assetId != nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId != nil { return false } - if chainAsset.chainAssetType == .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId == nil { return true } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift new file mode 100644 index 0000000000..1af443c5c5 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift @@ -0,0 +1,197 @@ +import Foundation +import SSFChainConnection +import RobinHood +import SSFModels +import BigInt +import TonAPI +import TonSwift + +final class TonHistoryOperationFactory { + private lazy var tonAPIClient: TonAPI.Client? = { + try? ChainRegistryFacade.sharedRegistry.getTonApiAssembly().tonAPIClient() + }() + + private func createOperation( + address: String, + chainAsset: ChainAsset, + before_lt: Int64? + ) -> BaseOperation { + AwaitOperation { [weak self] in + guard let self else { + throw ConvenienceError(error: "Memory error") + } + let accountId = try TonSwift.Address.parse(address).toRaw() + switch chainAsset.asset.assetType.tonAssetType { + case .normal: + let events = try await self.fetchAccountEvents(address: accountId, before_lt: before_lt) + return events + case .jetton: + guard let jettonAddress = chainAsset.asset.currencyId else { + throw ConvenienceError(error: "Missing jetton address") + } + let events = try await self.fetchJettonsHistory( + accountAddress: accountId, + jettonAddress: jettonAddress, + before_lt: before_lt + ) + return events + case .none: + throw ConvenienceError(error: "Missing asset type") + } + } + } + + private func fetchAccountEvents( + address: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialised") + } + let response = try await tonAPIClient.getAccountEvents( + path: .init(account_id: address), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + let remoteEvents = TonAccountEvents( + address: try TonSwift.Address.parse(address), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + + let tonEvents = filterTonEvents(events: remoteEvents) + return tonEvents + } + + private func fetchJettonsHistory( + accountAddress: String, + jettonAddress: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialised") + } + let response = try await tonAPIClient.getAccountJettonHistoryByID( + path: .init( + account_id: accountAddress, + jetton_id: jettonAddress + ), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + return TonAccountEvents( + address: try TonSwift.Address.parse(accountAddress), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + } + + private func filterTonEvents(events: TonAccountEvents) -> TonAccountEvents { + let filteredEvents = events.events.compactMap { event -> TonAccountEvent? in + let filteredActions = event.actions.compactMap { action -> AccountEventAction? in + guard case .tonTransfer = action.type else { return nil } + return action + } + guard !filteredActions.isEmpty else { return nil } + return TonAccountEvent( + eventId: event.eventId, + timestamp: event.timestamp, + account: event.account, + isScam: event.isScam, + isInProgress: event.isInProgress, + fee: event.fee, + actions: filteredActions + ) + } + + return TonAccountEvents( + address: events.address, + events: filteredEvents, + startFrom: events.startFrom, + nextFrom: events.nextFrom + ) + } + + private func createMapOperation( + dependingOn remoteOperation: BaseOperation, + address: String, + asset: AssetModel, + chain: ChainModel, + filters: [WalletTransactionHistoryFilter] + ) -> BaseOperation { + ClosureOperation { + let events = try remoteOperation.extractNoCancellableResultData().events + + let transactions = events + .compactMap { event in + event.actions.compactMap { + AssetTransactionData.createTransaction( + event: event, + action: $0, + address: address, + chain: chain, + asset: asset, + filters: filters + ) + } + } + .reduce([], +) + .sorted(by: { $0.timestamp > $1.timestamp }) + + let context = try remoteOperation.extractNoCancellableResultData().toContext() + return AssetTransactionPageData(transactions: transactions, context: context) + } + } +} + +extension TonHistoryOperationFactory: HistoryOperationFactoryProtocol { + func fetchTransactionHistoryOperation( + asset: AssetModel, + chain: ChainModel, + address: String, + filters: [WalletTransactionHistoryFilter], + pagination: Pagination + ) -> CompoundOperationWrapper { + var before_lt: Int64? + if let before = pagination.context?["nextFrom"] { + before_lt = Int64(before) + } + let remoteOperation = createOperation( + address: address, + chainAsset: ChainAsset(chain: chain, asset: asset), + before_lt: before_lt + ) + + let mapOperation = createMapOperation( + dependingOn: remoteOperation, + address: address, + asset: asset, + chain: chain, + filters: filters + ) + + mapOperation.addDependency(remoteOperation) + + return CompoundOperationWrapper(targetOperation: mapOperation, dependencies: [remoteOperation]) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift index 39a77d23cd..7e6bc1917c 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift @@ -20,9 +20,9 @@ enum ParachainHistoryOperationFactoryAssembly { return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) case .giantsquid: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) - case .sora: + case .sora, .soraSubquery: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) - case .alchemy, .etherscan, .oklink, .reef, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .alchemy, .etherscan, .oklink, .reef, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return nil } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift new file mode 100644 index 0000000000..e0a1a041ec --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift @@ -0,0 +1,669 @@ +import Foundation +import TonSwift +import TonAPI +import BigInt +import SSFModels + +struct TonAccountEvents: Codable { + let address: TonSwift.Address + let events: [TonAccountEvent] + let startFrom: Int64 + let nextFrom: Int64 + + func toContext() -> [String: String]? { + var context: [String: String] = [:] + context["startFrom"] = String(startFrom) + context["nextFrom"] = String(nextFrom) + return context + } +} + +public struct TonAccountEvent: Codable { + public let eventId: String + public let timestamp: TimeInterval + public let account: WalletAccount + public let isScam: Bool + public let isInProgress: Bool + public let fee: Int64 + public let actions: [AccountEventAction] +} + +public struct WalletAccount: Equatable, Codable { + public let address: TonSwift.Address + public let name: String? + public let isScam: Bool + public let isWallet: Bool +} + +public struct AccountEventAction: Codable { + let type: ActionType + let status: AccountEventStatus + let preview: SimplePreview + + struct SimplePreview: Codable { + let name: String + let description: String + let image: URL? + let value: String? + let valueImage: URL? + let accounts: [WalletAccount] + } + + enum ActionType: Codable { + case tonTransfer(TonTransfer) + case contractDeploy(ContractDeploy) + case jettonTransfer(JettonTransfer) + case nftItemTransfer(NFTItemTransfer) + case subscribe(Subscription) + case unsubscribe(Unsubscription) + case auctionBid(AuctionBid) + case nftPurchase(NFTPurchase) + case depositStake(DepositStake) + case withdrawStake(WithdrawStake) + case withdrawStakeRequest(WithdrawStakeRequest) + case jettonSwap(JettonSwap) + case jettonMint(JettonMint) + case jettonBurn(JettonBurn) + case smartContractExec(SmartContractExec) + case domainRenew(DomainRenew) + case unknown + } + + struct TonTransfer: Codable { + let sender: WalletAccount + let recipient: WalletAccount + let amount: Int64 + let comment: String? + } + + struct ContractDeploy: Codable { + let address: TonSwift.Address + } + + struct JettonTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let senderAddress: TonSwift.Address + let recipientAddress: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + let comment: String? + } + + struct NFTItemTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let nftAddress: TonSwift.Address + let comment: String? + let payload: String? + } + + struct Subscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + let amount: Int64 + let isInitial: Bool + } + + struct Unsubscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + } + + struct AuctionBid: Codable { + let auctionType: String + let price: Price + let nft: TonNFT? + let bidder: WalletAccount + let auction: WalletAccount + } + + struct NFTPurchase: Codable { + let auctionType: String + let nft: TonNFT + let seller: WalletAccount + let buyer: WalletAccount + let price: BigUInt + } + + struct DepositStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStakeRequest: Codable { + let amount: Int64? + let staker: WalletAccount + let pool: WalletAccount + } + + struct RecoverStake: Codable { + let amount: Int64 + let staker: WalletAccount + } + + struct JettonSwap: Codable { + let dex: String + let amountIn: BigUInt + let amountOut: BigUInt + let tonIn: Int64? + let tonOut: Int64? + let user: WalletAccount + let router: WalletAccount + let jettonInfoIn: TonJettonInfo? + let jettonInfoOut: TonJettonInfo? + } + + struct JettonMint: Codable { + let recipient: WalletAccount + let recipientsWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct JettonBurn: Codable { + let sender: WalletAccount + let senderWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct SmartContractExec: Codable { + let executor: WalletAccount + let contract: WalletAccount + let tonAttached: Int64 + let operation: String + let payload: String? + } + + struct DomainRenew: Codable { + let domain: String + let contractAddress: String + let renewer: WalletAccount + } + + struct Price: Codable { + let amount: BigUInt + let tokenName: String + } +} + +enum AccountEventStatus: Codable, Equatable { + case ok + case failed + case unknown(String) + + var rawValue: String? { + switch self { + case .ok: return nil + case .failed: return "Failed" + case let .unknown(value): + return value + } + } + + init(rawValue: String) { + switch rawValue { + case "ok": self = .ok + case "failed": self = .failed + default: self = .unknown(rawValue) + } + } +} + +public struct TonNFT: Codable { + public let address: TonSwift.Address + public let owner: WalletAccount? + public let name: String? + public let imageURL: URL? + public let preview: Preview + public let description: String? + public let attributes: [Attribute] + public let collection: TonNFTCollection? + public let dns: String? + public let sale: Sale? + public let isHidden: Bool + + public struct Marketplace { + public let name: String + public let url: URL? + } + + public struct Attribute: Codable { + public let key: String + public let value: String + } + + public enum Trust { + public struct Approval { + let name: String + } + + case approvedBy([Approval]) + } + + public struct Preview: Codable { + public let size5: URL? + public let size100: URL? + public let size500: URL? + public let size1500: URL? + } + + public struct Sale: Codable { + public let address: TonSwift.Address + public let market: WalletAccount + public let owner: WalletAccount? + } +} + +public struct TonNFTCollection: Codable { + public let address: TonSwift.Address + public let name: String? + public let description: String? +} + +// MARK: - Inits + +extension TonAccountEvent { + init(accountEvent: Components.Schemas.AccountEvent) throws { + eventId = accountEvent.event_id + timestamp = TimeInterval(accountEvent.timestamp) + account = try WalletAccount(accountAddress: accountEvent.account) + isScam = accountEvent.is_scam + isInProgress = accountEvent.in_progress + fee = accountEvent.extra + actions = accountEvent.actions.compactMap { action -> AccountEventAction? in + do { + let actionType: AccountEventAction.ActionType + if let tonTransfer = action.TonTransfer { + actionType = .tonTransfer(try .init(tonTransfer: tonTransfer)) + } else if let jettonTransfer = action.JettonTransfer { + actionType = .jettonTransfer(try .init(jettonTransfer: jettonTransfer)) + } else if let contractDeploy = action.ContractDeploy { + actionType = .contractDeploy(try .init(contractDeploy: contractDeploy)) + } else if let nftItemTransfer = action.NftItemTransfer { + actionType = .nftItemTransfer(try .init(nftItemTransfer: nftItemTransfer)) + } else if let subscribe = action.Subscribe { + actionType = .subscribe(try .init(subscription: subscribe)) + } else if let unsubscribe = action.UnSubscribe { + actionType = .unsubscribe(try .init(unsubscription: unsubscribe)) + } else if let auctionBid = action.AuctionBid { + actionType = .auctionBid(try .init(auctionBid: auctionBid)) + } else if let nftPurchase = action.NftPurchase { + actionType = .nftPurchase(try .init(nftPurchase: nftPurchase)) + } else if let depositStake = action.DepositStake { + actionType = .depositStake(try .init(depositStake: depositStake)) + } else if let withdrawStake = action.WithdrawStake { + actionType = .withdrawStake(try .init(withdrawStake: withdrawStake)) + } else if let withdrawStakeRequest = action.WithdrawStakeRequest { + actionType = .withdrawStakeRequest(try .init(withdrawStakeRequest: withdrawStakeRequest)) + } else if let jettonSwap = action.JettonSwap { + actionType = .jettonSwap(try .init(jettonSwap: jettonSwap)) + } else if let jettonMint = action.JettonMint { + actionType = .jettonMint(try .init(jettonMint: jettonMint)) + } else if let jettonBurn = action.JettonBurn { + actionType = .jettonBurn(try .init(jettonBurn: jettonBurn)) + } else if let smartContractExec = action.SmartContractExec { + actionType = .smartContractExec(try .init(smartContractExec: smartContractExec)) + } else if let domainRenew = action.DomainRenew { + actionType = .domainRenew(try .init(domainRenew: domainRenew)) + } else { + actionType = .unknown + } + + let status = AccountEventStatus(rawValue: action.status.rawValue) + return AccountEventAction(type: actionType, status: status, preview: try .init(simplePreview: action.simple_preview)) + } catch { + return nil + } + } + } +} + +extension WalletAccount { + init(accountAddress: Components.Schemas.AccountAddress) throws { + address = try TonSwift.Address.parse(accountAddress.address) + name = accountAddress.name + isScam = accountAddress.is_scam + isWallet = accountAddress.is_wallet + } +} + +extension AccountEventAction.SimplePreview { + init(simplePreview: Components.Schemas.ActionSimplePreview) throws { + name = simplePreview.name + description = simplePreview.description + value = simplePreview.value + + var image: URL? + if let actionImage = simplePreview.action_image { + image = URL(string: actionImage) + } + self.image = image + + var valueImage: URL? + if let valueImageString = simplePreview.value_image { + valueImage = URL(string: valueImageString) + } + self.valueImage = valueImage + + accounts = simplePreview.accounts.compactMap { account in + guard let walletAccount = try? WalletAccount(accountAddress: account) else { return nil } + return walletAccount + } + } +} + +extension AccountEventAction.TonTransfer { + init(tonTransfer: Components.Schemas.TonTransferAction) throws { + sender = try WalletAccount(accountAddress: tonTransfer.sender) + recipient = try WalletAccount(accountAddress: tonTransfer.recipient) + amount = tonTransfer.amount + comment = tonTransfer.comment + } +} + +extension AccountEventAction.JettonTransfer { + init(jettonTransfer: Components.Schemas.JettonTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = jettonTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = jettonTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + senderAddress = try TonSwift.Address.parse(jettonTransfer.senders_wallet) + recipientAddress = try TonSwift.Address.parse(jettonTransfer.recipients_wallet) + amount = BigUInt(stringLiteral: jettonTransfer.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonTransfer.jetton) + comment = jettonTransfer.comment + } +} + +extension AccountEventAction.ContractDeploy { + init(contractDeploy: Components.Schemas.ContractDeployAction) throws { + address = try TonSwift.Address.parse(contractDeploy.address) + } +} + +extension AccountEventAction.NFTItemTransfer { + init(nftItemTransfer: Components.Schemas.NftItemTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = nftItemTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = nftItemTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + nftAddress = try TonSwift.Address.parse(nftItemTransfer.nft) + comment = nftItemTransfer.comment + payload = nftItemTransfer.payload + } +} + +extension AccountEventAction.Subscription { + init(subscription: Components.Schemas.SubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: subscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(subscription.subscription) + beneficiary = try WalletAccount(accountAddress: subscription.beneficiary) + amount = subscription.amount + isInitial = subscription.initial + } +} + +extension AccountEventAction.Unsubscription { + init(unsubscription: Components.Schemas.UnSubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: unsubscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(unsubscription.subscription) + beneficiary = try WalletAccount(accountAddress: unsubscription.beneficiary) + } +} + +extension AccountEventAction.AuctionBid { + init(auctionBid: Components.Schemas.AuctionBidAction) throws { + auctionType = auctionBid.auction_type + price = AccountEventAction.Price(price: auctionBid.amount) + bidder = try WalletAccount(accountAddress: auctionBid.bidder) + auction = try WalletAccount(accountAddress: auctionBid.auction) + + var nft: TonNFT? + if let auctionBidNft = auctionBid.nft { + nft = try TonNFT(nftItem: auctionBidNft) + } + self.nft = nft + } +} + +extension AccountEventAction.NFTPurchase { + init(nftPurchase: Components.Schemas.NftPurchaseAction) throws { + auctionType = nftPurchase.auction_type + nft = try TonNFT(nftItem: nftPurchase.nft) + seller = try WalletAccount(accountAddress: nftPurchase.seller) + buyer = try WalletAccount(accountAddress: nftPurchase.buyer) + price = BigUInt(stringLiteral: nftPurchase.amount.value) + } +} + +extension AccountEventAction.DepositStake { + init(depositStake: Components.Schemas.DepositStakeAction) throws { + amount = depositStake.amount + staker = try WalletAccount(accountAddress: depositStake.staker) + pool = try WalletAccount(accountAddress: depositStake.pool) + } +} + +extension AccountEventAction.WithdrawStake { + init(withdrawStake: Components.Schemas.WithdrawStakeAction) throws { + amount = withdrawStake.amount + staker = try WalletAccount(accountAddress: withdrawStake.staker) + pool = try WalletAccount(accountAddress: withdrawStake.pool) + } +} + +extension AccountEventAction.WithdrawStakeRequest { + init(withdrawStakeRequest: Components.Schemas.WithdrawStakeRequestAction) throws { + amount = withdrawStakeRequest.amount + staker = try WalletAccount(accountAddress: withdrawStakeRequest.staker) + pool = try WalletAccount(accountAddress: withdrawStakeRequest.pool) + } +} + +extension AccountEventAction.RecoverStake { + init(recoverStake: Components.Schemas.ElectionsRecoverStakeAction) throws { + amount = recoverStake.amount + staker = try WalletAccount(accountAddress: recoverStake.staker) + } +} + +extension AccountEventAction.JettonSwap { + init(jettonSwap: Components.Schemas.JettonSwapAction) throws { + dex = jettonSwap.dex + amountIn = BigUInt(stringLiteral: jettonSwap.amount_in) + amountOut = BigUInt(stringLiteral: jettonSwap.amount_out) + tonIn = jettonSwap.ton_in + tonOut = jettonSwap.ton_out + user = try WalletAccount(accountAddress: jettonSwap.user_wallet) + router = try WalletAccount(accountAddress: jettonSwap.router) + if let jettonMasterIn = jettonSwap.jetton_master_in { + jettonInfoIn = try TonJettonInfo(jettonPreview: jettonMasterIn) + } else { + jettonInfoIn = nil + } + if let jettonMasterOut = jettonSwap.jetton_master_out { + jettonInfoOut = try TonJettonInfo(jettonPreview: jettonMasterOut) + } else { + jettonInfoOut = nil + } + } +} + +extension AccountEventAction.JettonMint { + init(jettonMint: Components.Schemas.JettonMintAction) throws { + recipient = try WalletAccount(accountAddress: jettonMint.recipient) + recipientsWallet = try TonSwift.Address.parse(jettonMint.recipients_wallet) + amount = BigUInt(stringLiteral: jettonMint.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonMint.jetton) + } +} + +extension AccountEventAction.JettonBurn { + init(jettonBurn: Components.Schemas.JettonBurnAction) throws { + sender = try WalletAccount(accountAddress: jettonBurn.sender) + senderWallet = try TonSwift.Address.parse(jettonBurn.senders_wallet) + amount = BigUInt(stringLiteral: jettonBurn.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonBurn.jetton) + } +} + +extension AccountEventAction.SmartContractExec { + init(smartContractExec: Components.Schemas.SmartContractAction) throws { + executor = try WalletAccount(accountAddress: smartContractExec.executor) + contract = try WalletAccount(accountAddress: smartContractExec.contract) + tonAttached = smartContractExec.ton_attached + operation = smartContractExec.operation + payload = smartContractExec.payload + } +} + +extension AccountEventAction.DomainRenew { + init(domainRenew: Components.Schemas.DomainRenewAction) throws { + domain = domainRenew.domain + contractAddress = domainRenew.contract_address + renewer = try WalletAccount(accountAddress: domainRenew.renewer) + } +} + +extension AccountEventAction.Price { + init(price: Components.Schemas.Price) { + amount = BigUInt(stringLiteral: price.value) + tokenName = price.token_name + } +} + +extension TonNFT { + private enum PreviewSize: String { + case size5 = "5x5" + case size100 = "100x100" + case size500 = "500x500" + case size1500 = "1500x1500" + } + + init(nftItem: Components.Schemas.NftItem) throws { + let address = try TonSwift.Address.parse(nftItem.address) + var owner: WalletAccount? + var name: String? + var imageURL: URL? + var description: String? + var collection: TonNFTCollection? + var isHidden = false + + if let ownerAccountAddress = nftItem.owner, + let ownerWalletAccount = try? WalletAccount(accountAddress: ownerAccountAddress) { + owner = ownerWalletAccount + } + + let metadata = nftItem.metadata.additionalProperties.value as [String: AnyObject] + name = metadata["name"] as? String + imageURL = (metadata["image"] as? String).flatMap { URL(string: $0) } + description = metadata["description"] as? String + isHidden = (metadata["render_type"] as? String) == "hidden" + + var attributes = [Attribute]() + if let attributesValue = (metadata["attributes"] as? [AnyObject]) { + attributes = attributesValue + .compactMap { $0 as? [String: AnyObject] } + .compactMap { attributeObject -> Attribute? in + guard let key = attributeObject["trait_type"] as? String else { return nil } + let attributeValue: String + switch attributeObject["value"] { + case .none: return nil + case let .some(value): + switch value { + case let stringValue as String: + attributeValue = stringValue + case let intValue as Int: + attributeValue = String(intValue) + case let doubleValue as Int: + attributeValue = String(doubleValue) + default: + attributeValue = "-" + } + } + return Attribute(key: key, value: attributeValue) + } + } + + if let nftCollection = nftItem.collection, + let address = try? TonSwift.Address.parse(nftCollection.address) { + collection = TonNFTCollection(address: address, name: nftCollection.name, description: nftCollection.description) + } + + if imageURL == nil, + let previewURLString = nftItem.previews?[2].url, + let previewURL = URL(string: previewURLString) { + imageURL = previewURL + } + + var sale: Sale? + if let nftSale = nftItem.sale { + let address = try TonSwift.Address.parse(nftSale.address) + let market = try WalletAccount(accountAddress: nftSale.market) + var ownerWalletAccount: WalletAccount? + if let nftSaleOwner = nftItem.owner { + ownerWalletAccount = try WalletAccount(accountAddress: nftSaleOwner) + } + sale = Sale(address: address, market: market, owner: ownerWalletAccount) + } + + self.address = address + self.owner = owner + self.name = name + self.imageURL = imageURL + self.description = description + self.attributes = attributes + preview = Self.mapPreviews(nftItem.previews) + self.collection = collection + dns = nftItem.dns + self.sale = sale + self.isHidden = isHidden + } + + private static func mapPreviews(_ previews: [Components.Schemas.ImagePreview]?) -> Preview { + var size5: URL? + var size100: URL? + var size500: URL? + var size1500: URL? + + previews?.forEach { preview in + guard let previewSize = PreviewSize(rawValue: preview.resolution) else { return } + switch previewSize { + case .size5: + size5 = URL(string: preview.url) + case .size100: + size100 = URL(string: preview.url) + case .size500: + size500 = URL(string: preview.url) + case .size1500: + size1500 = URL(string: preview.url) + } + } + return Preview(size5: size5, size100: size100, size500: size500, size1500: size1500) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift index adb1804817..4b5af6b804 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum GiantsquidRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift index e35a66af94..7114b93625 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum ReefRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift index daba6f1966..d92c36e5e6 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift @@ -40,7 +40,9 @@ enum RewardOperationFactory { return SoraRewardOperationFactory(url: blockExplorer?.url, chain: chain) case .reef: return ReefRewardOperationFactory(url: blockExplorer?.url, chain: chain) - case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .soraSubquery: + return SoraSubqueryStakingRewardsFetcher(chain: chain) + case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return GiantsquidRewardOperationFactory(url: blockExplorer?.url, chain: chain) } } diff --git a/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift b/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift index f322ed646c..9b65cfc6b2 100644 --- a/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift @@ -288,7 +288,7 @@ final class AlchemyNFTOperationFactory { urlComponents?.queryItems = [ URLQueryItem(name: "contractAddress", value: address), URLQueryItem(name: "withMetadata", value: "true"), - URLQueryItem(name: "limit", value: "100"), + URLQueryItem(name: "limit", value: "100") ] if let nextId = nextId { @@ -343,7 +343,7 @@ final class AlchemyNFTOperationFactory { var urlComponents = URLComponents(string: endpointUrl.absoluteString) urlComponents?.queryItems = [ URLQueryItem(name: "contractAddress", value: address), - URLQueryItem(name: "tokenId", value: tokenId), + URLQueryItem(name: "tokenId", value: tokenId) ] guard let urlWithParameters = urlComponents?.url else { diff --git a/fearless/CoreLayer/TonComponents/TonAccount.swift b/fearless/CoreLayer/TonComponents/TonAccount.swift new file mode 100644 index 0000000000..6221c9a6cb --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAccount.swift @@ -0,0 +1,23 @@ +import Foundation +import TonAPI +import TonSwift + +struct TonAccount { + let address: TonSwift.Address + let balance: Int64 + let status: String + let name: String? + let icon: String? + let isSuspended: Bool? + let isWallet: Bool + + init(account: Components.Schemas.Account) throws { + address = try TonSwift.Address.parse(account.address) + balance = account.balance + status = account.status + name = account.name + icon = account.icon + isSuspended = account.is_suspended + isWallet = account.is_wallet + } +} diff --git a/fearless/CoreLayer/TonComponents/TonAddress.swift b/fearless/CoreLayer/TonComponents/TonAddress.swift new file mode 100644 index 0000000000..e5bce80e0c --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAddress.swift @@ -0,0 +1,18 @@ +import Foundation +import TonSwift + +extension TonSwift.Address { + static func random() -> TonSwift.Address { + TonSwift.Address.mock(workchain: 0, seed: "testResolvableAddressResolvedCoding") + } + + func asAccountId() throws -> AccountId { + try JSONEncoder().encode(self) + } +} + +extension AccountId { + func asTonAddress() throws -> TonSwift.Address { + try JSONDecoder().decode(TonSwift.Address.self, from: self) + } +} diff --git a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift index 9914ad7dfe..c423ae53e2 100644 --- a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class AccountConfirmInteractor: BaseAccountConfirmInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift index c6d4c3976a..4344f9086a 100644 --- a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class BaseAccountConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! @@ -19,7 +20,7 @@ class BaseAccountConfirmInteractor { operationManager: OperationManagerProtocol ) { self.flow = flow - shuffledWords = flow?.mnemonic.allWords().shuffled() ?? [] + shuffledWords = flow?.mnemonicAllWordls.shuffled() ?? [] self.accountOperationFactory = accountOperationFactory self.accountRepository = accountRepository self.operationManager = operationManager @@ -36,7 +37,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } func confirm(words: [String]) { - guard let confirmFlow = flow, words == confirmFlow.mnemonic.allWords() else { + guard let confirmFlow = flow, words == confirmFlow.mnemonicAllWordls else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true @@ -44,8 +45,8 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { return } switch confirmFlow { - case let .wallet(request): - createAccount(request, isBackuped: true) + case let .wallet(ecosystem): + createAccount(ecosystem: ecosystem, isBackuped: true) case let .chain(request): importUniqueChain(request) } @@ -57,7 +58,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } switch confirmFlow { case let .wallet(request): - createAccount(request, isBackuped: false) + createAccount(ecosystem: request, isBackuped: false) case let .chain(request): importUniqueChain(request) } @@ -65,9 +66,15 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } private extension BaseAccountConfirmInteractor { - func createAccount(_ request: MetaAccountImportMnemonicRequest, isBackuped: Bool) { - let operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: isBackuped) - createAccountUsingOperation(operation) + func createAccount(ecosystem: (AccountConfirmFlowWalletEcosystemRequest), isBackuped: Bool) { + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + let operation = accountOperationFactory.newMetaAccountOperation(request: metaAccountImportMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + case .ton(let metaAccountImportTonMnemonicRequest): + let operation = accountOperationFactory.newTonMetaAccountOperation(request: metaAccountImportTonMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + } } func importUniqueChain(_ request: ChainAccountImportMnemonicRequest) { diff --git a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift index 684905c725..453e881518 100644 --- a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift +++ b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift @@ -1,15 +1,26 @@ import IrohaCrypto +import SSFAccountManagment + +enum AccountConfirmFlowWalletEcosystemRequest { + case regular(MetaAccountImportMnemonicRequest) + case ton(MetaAccountImportTonMnemonicRequest) +} enum AccountConfirmFlow { - case wallet(MetaAccountImportMnemonicRequest) + case wallet(AccountConfirmFlowWalletEcosystemRequest) case chain(ChainAccountImportMnemonicRequest) - var mnemonic: IRMnemonicProtocol { + var mnemonicAllWordls: [String] { switch self { - case let .wallet(request): - return request.mnemonic + case let .wallet(ecosystem): + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + return metaAccountImportMnemonicRequest.mnemonic.allWords() + case .ton(let metaAccountImportTonMnemonicRequest): + return metaAccountImportTonMnemonicRequest.mnemonic.components(separatedBy: " ") + } case let .chain(request): - return request.mnemonic + return request.mnemonic.allWords() } } } diff --git a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift index 2ef50bd182..8407de0501 100644 --- a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift +++ b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift @@ -1,27 +1,38 @@ import UIKit import IrohaCrypto import RobinHood +import TonSwift +import SSFModels final class AccountCreateInteractor { weak var presenter: AccountCreateInteractorOutputProtocol! + let ecosystem: AccountCreateEcosystem let mnemonicCreator: IRMnemonicCreatorProtocol init( + ecosystem: AccountCreateEcosystem, mnemonicCreator: IRMnemonicCreatorProtocol ) { + self.ecosystem = ecosystem self.mnemonicCreator = mnemonicCreator } } extension AccountCreateInteractor: AccountCreateInteractorInputProtocol { func setup() { - do { - let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) - - presenter.didReceive(mnemonic: mnemonic.allWords()) - } catch { - presenter.didReceiveMnemonicGeneration(error: error) + switch ecosystem { + case .regular: + do { + let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) + let allWords = mnemonic.allWords() + presenter.didReceive(mnemonic: allWords) + } catch { + presenter.didReceiveMnemonicGeneration(error: error) + } + case .ton: + let allWords = TonSwift.Mnemonic.mnemonicNew(wordsCount: 24) + presenter.didReceive(mnemonic: allWords) } } diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index 7436a70a3d..09fa68b755 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SoraFoundation import SSFUtils @@ -13,6 +14,7 @@ final class AccountCreatePresenter { let usernameSetup: UsernameSetupModel var flow: AccountCreateFlow + let ecosystem: AccountCreateEcosystem private var mnemonic: [String]? private var selectedCryptoType: CryptoType = .sr25519 @@ -20,11 +22,13 @@ final class AccountCreatePresenter { private var ethereumDerivationPathViewModel: InputViewModelProtocol? init( + ecosystem: AccountCreateEcosystem, usernameSetup: UsernameSetupModel, wireframe: AccountCreateWireframeProtocol, interactor: AccountCreateInteractorInputProtocol, flow: AccountCreateFlow ) { + self.ecosystem = ecosystem self.usernameSetup = usernameSetup self.wireframe = wireframe self.interactor = interactor @@ -147,10 +151,14 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { case .wallet, .backup: view?.set(chainType: .both) case let .chain(model): - if let cryptoType = CryptoType(rawValue: model.meta.substrateCryptoType) { + if + let substrateCryptoType = model.meta.ecosystem.substrateCryptoType, + let cryptoType = CryptoType(rawValue: substrateCryptoType) { selectedCryptoType = cryptoType } view?.set(chainType: model.chain.isEthereumBased ? .ethereum : .substrate) + case .ethereum: + view?.set(chainType: .ethereum) } applySubstrateCryptoTypeViewModel() applySubstrateDerivationPathViewModel() @@ -228,10 +236,6 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { else { return } - guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { - didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) - return - } guard substrateViewModel.inputHandler.completed else { view?.didValidateSubstrateDerivationPath(.invalid) @@ -249,30 +253,53 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { let substrateDerivationPath = (substrateDerivationPathViewModel?.inputHandler.value).nonEmpty(or: "") switch unwrappedFlow { case .wallet: - let request = MetaAccountImportMnemonicRequest( - mnemonic: mnemonic, - username: usernameSetup.username, - substrateDerivationPath: substrateDerivationPath, - ethereumDerivationPath: ethereumDerivationPath, - cryptoType: selectedCryptoType, - defaultChainId: nil - ) - wireframe.confirm( - from: view, - flow: .wallet(request) - ) + switch ecosystem { + case .regular: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } + let request = MetaAccountImportMnemonicRequest( + mnemonic: mnemonic, + username: usernameSetup.username, + substrateDerivationPath: substrateDerivationPath, + ethereumDerivationPath: ethereumDerivationPath, + cryptoType: selectedCryptoType, + defaultChainId: nil + ) + wireframe.confirm( + from: view, + flow: .wallet(.regular(request)) + ) + case .ton: + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic.joined(separator: " "), + username: usernameSetup.username + ) + wireframe.confirm( + from: view, + flow: .wallet(.ton(request)) + ) + } case let .chain(model): + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = ChainAccountImportMnemonicRequest( + wallet: model.meta, mnemonic: mnemonic, username: usernameSetup.username, derivationPath: model.chain.isEthereumBased ? ethereumDerivationPath : substrateDerivationPath, cryptoType: model.chain.isEthereumBased ? .ecdsa : selectedCryptoType, - isEthereum: model.chain.isEthereumBased, - meta: model.meta, - chainId: model.chain.chainId + chains: [model.chain] ) wireframe.confirm(from: view, flow: .chain(request)) case .backup: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = MetaAccountImportMnemonicRequest( mnemonic: mnemonic, username: usernameSetup.username, @@ -285,6 +312,20 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { request: request, from: view ) + case .ethereum(wallet: let wallet, chains: let chains): + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } + let request = ChainAccountImportMnemonicRequest( + wallet: wallet, + mnemonic: mnemonic, + username: usernameSetup.username, + derivationPath: ethereumDerivationPath, + cryptoType: .ecdsa, + chains: chains + ) + wireframe.confirm(from: view, flow: .chain(request)) } } diff --git a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift index e812453bfb..fead243805 100644 --- a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift +++ b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift @@ -58,13 +58,16 @@ protocol AccountCreateWireframeProtocol: SheetAlertPresentable, ErrorPresentable protocol AccountCreateViewFactoryProtocol: AnyObject { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? } diff --git a/fearless/Modules/AccountCreate/AccountCreateViewController.swift b/fearless/Modules/AccountCreate/AccountCreateViewController.swift index e7f422042d..998eed5ef4 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewController.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewController.swift @@ -10,12 +10,14 @@ final class AccountCreateViewController: UIViewController, ViewHolder { private var substrateDerivationPathModel: InputViewModelProtocol? private var ethereumDerivationPathModel: InputViewModelProtocol? private var isFirstLayoutCompleted: Bool = false + private let ecosystem: AccountCreateEcosystem private lazy var locale: Locale = { localizationManager?.selectedLocale ?? Locale.current }() - init(presenter: AccountCreatePresenterProtocol) { + init(ecosystem: AccountCreateEcosystem, presenter: AccountCreatePresenterProtocol) { + self.ecosystem = ecosystem self.presenter = presenter super.init(nibName: nil, bundle: nil) } @@ -37,6 +39,15 @@ final class AccountCreateViewController: UIViewController, ViewHolder { setupActions() presenter.setup() + switch ecosystem { + case .regular: + break + case .ton: + // TODO: - Ton google backup + rootView.backupButton.isHidden = true + rootView.expandableControl.isHidden = true + rootView.expandableControlContainerView.isHidden = true + } } override func viewWillAppear(_ animated: Bool) { @@ -65,7 +76,7 @@ private extension AccountCreateViewController { ) navigationItem.rightBarButtonItem = infoItem switch presenter.flow { - case .wallet, .chain: + case .wallet, .chain, .ethereum: title = R.string.localizable.accountCreateTitle(preferredLanguages: locale.rLanguages) case .backup: title = R.string.localizable.backupMnemonicTitle(preferredLanguages: locale.rLanguages) diff --git a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift index 2d75f37716..3b8e616beb 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift @@ -2,15 +2,23 @@ import Foundation import IrohaCrypto import SoraFoundation import SoraKeystore +import SSFModels + +enum AccountCreateEcosystem { + case regular + case ton +} final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? { let wireframe = AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: flow, wireframe: wireframe @@ -18,11 +26,13 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = AddAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -30,10 +40,12 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = SwitchAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -41,18 +53,20 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForUsername( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow, wireframe: AccountCreateWireframeProtocol ) -> AccountCreateViewProtocol? { - let interactor = AccountCreateInteractor(mnemonicCreator: IRMnemonicCreator()) + let interactor = AccountCreateInteractor(ecosystem: ecosystem, mnemonicCreator: IRMnemonicCreator()) let presenter = AccountCreatePresenter( + ecosystem: ecosystem, usernameSetup: model, wireframe: wireframe, interactor: interactor, flow: flow ) - let view = AccountCreateViewController(presenter: presenter) + let view = AccountCreateViewController(ecosystem: ecosystem, presenter: presenter) presenter.view = view interactor.presenter = presenter diff --git a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift index 7561c87e33..788d30af06 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift @@ -138,7 +138,7 @@ final class AccountCreateViewLayout: UIView { return label }() - private let expandableControlContainerView: BorderedContainerView = { + let expandableControlContainerView: BorderedContainerView = { let view = UIFactory().createBorderedContainerView() view.backgroundColor = R.color.colorBlack19() view.borderType = .bottom @@ -147,7 +147,7 @@ final class AccountCreateViewLayout: UIView { return view }() - private let expandableControl: ExpandableActionControl = { + let expandableControl: ExpandableActionControl = { let view = UIFactory().createExpandableActionControl() view.backgroundColor = R.color.colorBlack19() view.translatesAutoresizingMaskIntoConstraints = false @@ -397,7 +397,7 @@ private extension AccountCreateViewLayout { backupButton.snp.makeConstraints { make in make.height.equalTo(UIConstants.actionHeight) } - case .chain: + case .chain, .ethereum: backupButton.isHidden = true case .backup: expandableControl.isHidden = true @@ -409,7 +409,7 @@ private extension AccountCreateViewLayout { .commonAdvanced(preferredLanguages: locale.rLanguages) switch flow { - case .wallet, .chain: + case .wallet, .chain, .ethereum: detailsLabel.text = R.string.localizable.accountCreateDetails(preferredLanguages: locale.rLanguages) nextButton.imageWithTitleView?.title = R.string.localizable .accountConfirmationTitle(preferredLanguages: locale.rLanguages) diff --git a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift index 8336692a40..b30ee5ed8f 100644 --- a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift +++ b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift @@ -5,6 +5,7 @@ enum AccountCreateChainType { case substrate case ethereum case both + case ton } extension AccountCreateChainType { @@ -12,14 +13,14 @@ extension AccountCreateChainType { switch self { case .substrate, .both: return true - case .ethereum: + case .ethereum, .ton: return false } } var includeEthereum: Bool { switch self { - case .ethereum, .both: + case .ethereum, .both, .ton: return true case .substrate: return false @@ -28,6 +29,7 @@ extension AccountCreateChainType { } enum AccountCreationStep { + case ton case substrate case ethereum(data: SubstrateStepData) diff --git a/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift b/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift index 5275f1f0d5..0cab2418ea 100644 --- a/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift +++ b/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift @@ -1,7 +1,10 @@ +import SSFModels + enum AccountCreateFlow { case chain(model: UniqueChainModel) case wallet case backup + case ethereum(wallet: MetaAccountModel, chains: [ChainModel]) var supportsSubstrate: Bool { switch self { @@ -9,12 +12,14 @@ enum AccountCreateFlow { return true case let .chain(model): return !model.chain.isEthereumBased + case .ethereum: + return false } } var supportsEthereum: Bool { switch self { - case .wallet, .backup: + case .wallet, .backup, .ethereum: return true case let .chain(model): return model.chain.isEthereumBased @@ -25,7 +30,7 @@ enum AccountCreateFlow { switch self { case .wallet, .backup: return true - case .chain: + case .chain, .ethereum: return false } } @@ -36,6 +41,8 @@ enum AccountCreateFlow { return "" case let .chain(model): return model.meta.name + case let .ethereum(wallet, _): + return wallet.name } } } diff --git a/fearless/Modules/AccountImport/AccountImportInteractor.swift b/fearless/Modules/AccountImport/AccountImportInteractor.swift index 12b63d73dc..2466b83509 100644 --- a/fearless/Modules/AccountImport/AccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels final class AccountImportInteractor: BaseAccountImportInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountImport/AccountImportPresenter.swift b/fearless/Modules/AccountImport/AccountImportPresenter.swift index 95815613dc..b8e4188891 100644 --- a/fearless/Modules/AccountImport/AccountImportPresenter.swift +++ b/fearless/Modules/AccountImport/AccountImportPresenter.swift @@ -18,6 +18,7 @@ struct UniqueChainModel { enum AccountImportFlow { case chain(model: UniqueChainModel) case wallet(step: AccountCreationStep) + case ethereum(wallet: MetaAccountModel, chains: [ChainModel]) var isEthereumFlow: Bool { switch self { @@ -25,11 +26,13 @@ enum AccountImportFlow { return model.chain.isEthereumBased case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: return false case .ethereum: return true } + case .ethereum: + return true } } @@ -66,7 +69,7 @@ struct UniqueChainImportRequestData { let selectedCryptoType: CryptoType let password: String let meta: MetaAccountModel - let chain: ChainModel + let chains: [ChainModel] } struct PreferredData { @@ -159,7 +162,12 @@ private extension AccountImportPresenter { case let .ethereum(data): selectedCryptoType = data.cryptoType view?.setSource(type: selectedSourceType, chainType: .ethereum, selectable: false) + case .ton: + view?.setSource(type: .tonMnemonic, chainType: .ton, selectable: false) } + case .ethereum(wallet: let wallet, chains: let chains): + selectedCryptoType = .ecdsa + view?.setSource(type: selectedSourceType, chainType: .ethereum, selectable: false) } applySourceTextViewModel(value) @@ -170,11 +178,13 @@ private extension AccountImportPresenter { username = model.meta.name case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: username = preferredData?.username ?? "" case let .ethereum(data): username = data.username } + case let .ethereum(wallet, _): + username = wallet.name } applyUsernameViewModel(username) applyPasswordViewModel() @@ -191,7 +201,7 @@ private extension AccountImportPresenter { let locale = localizationManager?.selectedLocale ?? Locale.current switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: let placeholder = R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) let normalizer = MnemonicTextNormalizer() @@ -247,7 +257,7 @@ private extension AccountImportPresenter { switch flow { case .wallet: visible = true - case .chain: + case .chain, .ethereum: visible = false } @@ -260,7 +270,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic, .seed: + case .mnemonic, .seed, .tonMnemonic: passwordViewModel = nil case .keystore: let viewModel = InputViewModel(inputHandler: InputHandler(required: true)) @@ -278,7 +288,7 @@ private extension AccountImportPresenter { return } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: applyCryptoTypeViewModel(cryptoType) switch flow { @@ -294,6 +304,9 @@ private extension AccountImportPresenter { applySubstrateDerivationPathViewModel() view?.show(chainType: .substrate) } + case .ethereum: + applyEthereumDerivationPathViewModel() + view?.show(chainType: .ethereum) } case .seed: applyCryptoTypeViewModel(cryptoType) @@ -510,11 +523,27 @@ private extension AccountImportPresenter { selectedCryptoType: data.selectedCryptoType, password: data.password, meta: model.meta, - chain: model.chain + chains: [model.chain] ) - importUniqueChain(data: data) + importUniqueChains(data: data, isEthereum: model.chain.isEthereumBased) case let .wallet(step): importMetaAccount(data: data, step: step) + case let .ethereum(wallet, chains): + guard let chain = chains.first else { + return + } + let derivationPath = data.ethereumDerivationPath + let data = UniqueChainImportRequestData( + selectedSourceType: data.selectedSourceType, + source: data.source, + username: data.username, + derivationPath: derivationPath, + selectedCryptoType: data.selectedCryptoType, + password: data.password, + meta: wallet, + chains: chains + ) + importUniqueChains(data: data, isEthereum: true) } } @@ -539,6 +568,15 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + case (.tonMnemonic, .ton): + let mnemonicString = data.source + let request = MetaAccountImportRequest( + source: .ton(mnemonic: mnemonicString), + username: data.username, + cryptoType: .ed25519, + defaultChainId: nil + ) + interactor.importMetaAccount(request: request) case (.seed, .substrate): askIfNeedAddEthereum { [weak self] in self?.showSecondStep(data: data) @@ -607,6 +645,7 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + default: break } } @@ -622,7 +661,10 @@ private extension AccountImportPresenter { wireframe.showEthereumStep(from: view, with: data) } - func importUniqueChain(data: UniqueChainImportRequestData) { + func importUniqueChains( + data: UniqueChainImportRequestData, + isEthereum: Bool + ) { var source: UniqueChainImportRequestSource switch data.selectedSourceType { case .mnemonic: @@ -647,15 +689,20 @@ private extension AccountImportPresenter { password: data.password ) source = UniqueChainImportRequestSource.keystore(data: sourceData) + case .tonMnemonic: + return } let request = UniqueChainImportRequest( - source: source, username: data.username, - cryptoType: data.chain.isEthereumBased ? .ecdsa : data.selectedCryptoType, - meta: data.meta, - chain: data.chain + cryptoType: isEthereum ? .ecdsa : data.selectedCryptoType, + chains: data.chains + ) + + interactor.importUniqueChain( + source: source, + wallet: data.meta, + request: request ) - interactor.importUniqueChain(request: request) } func validateSource(with value: String) -> Error? { @@ -664,7 +711,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: return validateMnemonic(value: value) case .seed: return validateSeed(value: value) diff --git a/fearless/Modules/AccountImport/AccountImportProtocols.swift b/fearless/Modules/AccountImport/AccountImportProtocols.swift index 826470f3db..7f3c041be3 100644 --- a/fearless/Modules/AccountImport/AccountImportProtocols.swift +++ b/fearless/Modules/AccountImport/AccountImportProtocols.swift @@ -38,7 +38,11 @@ protocol AccountImportPresenterProtocol: AnyObject { protocol AccountImportInteractorInputProtocol: AnyObject { func setup() func importMetaAccount(request: MetaAccountImportRequest) - func importUniqueChain(request: UniqueChainImportRequest) + func importUniqueChain( + source: UniqueChainImportRequestSource, + wallet: MetaAccountModel, + request: UniqueChainImportRequest + ) func deriveMetadataFromKeystore(_ keystore: String) func createMnemonicFromString(_ mnemonicString: String) -> IRMnemonicProtocol? } diff --git a/fearless/Modules/AccountImport/AccountImportViewController.swift b/fearless/Modules/AccountImport/AccountImportViewController.swift index f3cb56645d..c8eb2bf487 100644 --- a/fearless/Modules/AccountImport/AccountImportViewController.swift +++ b/fearless/Modules/AccountImport/AccountImportViewController.swift @@ -105,7 +105,7 @@ private extension AccountImportViewController { switch presenter.flow { case .wallet: title = R.string.localizable.importWallet(preferredLanguages: locale.rLanguages) - case .chain: + case .chain, .ethereum: title = R.string.localizable.onboardingRestoreAccount(preferredLanguages: locale.rLanguages) } @@ -233,13 +233,18 @@ extension AccountImportViewController: AccountImportViewProtocol { rootView.textViewContainer.isHidden = false + rootView.passwordContainerView.isHidden = true + rootView.uploadViewContainer.isHidden = true + case .tonMnemonic: + rootView.setAdvancedVisibility(false) + rootView.textViewContainer.isHidden = false rootView.passwordContainerView.isHidden = true rootView.uploadViewContainer.isHidden = true case .seed: switch chainType { case .substrate, .both: rootView.setAdvancedVisibility(true) - case .ethereum: + case .ethereum, .ton: rootView.setAdvancedVisibility(false) } rootView.textViewContainer.isHidden = false diff --git a/fearless/Modules/AccountImport/AccountImportViewLayout.swift b/fearless/Modules/AccountImport/AccountImportViewLayout.swift index f92bcb3a8e..b1919ab5ec 100644 --- a/fearless/Modules/AccountImport/AccountImportViewLayout.swift +++ b/fearless/Modules/AccountImport/AccountImportViewLayout.swift @@ -137,6 +137,7 @@ final class AccountImportViewLayout: UIView { view.autocapitalizationType = .none view.autocorrectionType = .no view.isScrollEnabled = false + view.backgroundColor = .clear return view }() diff --git a/fearless/Modules/AccountImport/AccountImportWireframe.swift b/fearless/Modules/AccountImport/AccountImportWireframe.swift index 8f5ba4391d..00db9803fe 100644 --- a/fearless/Modules/AccountImport/AccountImportWireframe.swift +++ b/fearless/Modules/AccountImport/AccountImportWireframe.swift @@ -25,7 +25,7 @@ final class AccountImportWireframe: AccountImportWireframeProtocol { return } rootAnimator.animateTransition(to: pincodeViewController) - case .chain: + case .chain, .ethereum: dismiss(view: view) } } diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index 70dcce9f0b..2b1ca58089 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SSFUtils import RobinHood @@ -86,7 +87,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { cryptoType: request.cryptoType, defaultChainId: request.defaultChainId ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .seed(data): let request = MetaAccountImportSeedRequest( substrateSeed: data.substrateSeed, @@ -96,7 +97,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { ethereumDerivationPath: data.ethereumDerivationPath, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .keystore(data): let request = MetaAccountImportKeystoreRequest( substrateKeystore: data.substrateKeystore, @@ -106,47 +107,57 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) + case let .ton(mnemonic): + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic, + username: request.username + ) + operation = accountOperationFactory.newTonMetaAccountOperation( + request: request, + isBackedUp: true + ) } importAccountUsingOperation(operation) } - func importUniqueChain(request: UniqueChainImportRequest) { + func importUniqueChain( + source: UniqueChainImportRequestSource, + wallet: MetaAccountModel, + request: UniqueChainImportRequest + ) { let operation: BaseOperation - switch request.source { + switch source { case let .mnemonic(data): - let request = ChainAccountImportMnemonicRequest( + let mnemonicRequest = ChainAccountImportMnemonicRequest( + wallet: wallet, mnemonic: data.mnemonic, username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: mnemonicRequest) case let .seed(data): - let request = ChainAccountImportSeedRequest( + let seedRequest = ChainAccountImportSeedRequest( + wallet: wallet, seed: data.seed, username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: seedRequest) case let .keystore(data): - let request = ChainAccountImportKeystoreRequest( + let keystoreRequest = ChainAccountImportKeystoreRequest( + wallet: wallet, keystore: data.keystore, password: data.password, username: request.username, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: keystoreRequest) } importAccountUsingOperation(operation) } diff --git a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift index 1e74009f6d..2ab93873c5 100644 --- a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift +++ b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift @@ -53,6 +53,7 @@ enum MetaAccountImportRequestSource { case mnemonic(data: MnemonicImportRequestData) case seed(data: SeedImportRequestData) case keystore(data: KeystoreImportRequestData) + case ton(mnemonic: String) } struct MetaAccountImportRequest { @@ -63,33 +64,30 @@ struct MetaAccountImportRequest { } struct ChainAccountImportMnemonicRequest { + let wallet: MetaAccountModel let mnemonic: IRMnemonicProtocol let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } struct ChainAccountImportSeedRequest { + let wallet: MetaAccountModel let seed: String let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } struct ChainAccountImportKeystoreRequest { + let wallet: MetaAccountModel let keystore: String let password: String let username: String let cryptoType: CryptoType - let isEthereum: Bool - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } enum UniqueChainImportRequestSource { @@ -114,9 +112,7 @@ enum UniqueChainImportRequestSource { } struct UniqueChainImportRequest { - let source: UniqueChainImportRequestSource let username: String let cryptoType: CryptoType - let meta: MetaAccountModel - let chain: ChainModel + let chains: [ChainModel] } diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift index 0bb8f1706c..787af58a8c 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SoraKeystore import IrohaCrypto +import SSFModels import RobinHood // TODO: Check how to convert this to chain account import diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift index 5a25ba0487..0c8c1820e6 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels extension AddAccount { final class AccountImportInteractor: BaseAccountImportInteractor { diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift index af1f038ee2..eff6e793de 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift @@ -3,6 +3,17 @@ import SSFCloudStorage extension AddAccount { final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { + func didCompleteCreate(from view: ControllerBackedProtocol?) { + guard let navigationController = view?.controller.navigationController else { + return + } + + MainTransitionHelper.transitToMainTabBarController( + closing: navigationController, + animated: true + ) + } + func showPreinstalledFlow(from view: ControllerBackedProtocol?) { let module = GetPreinstalledWalletAssembly.configureModuleForNewUser() @@ -34,8 +45,8 @@ extension AddAccount { view?.controller.navigationController?.pushViewController(controller, animated: true) } - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } @@ -46,10 +57,11 @@ extension AddAccount { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForAdding(defaultSource: defaultSource)?.controller + .createViewForAdding(defaultSource: defaultSource, flow)?.controller else { return } @@ -64,7 +76,7 @@ extension AddAccount { let navigationController = view?.controller.navigationController, navigationController.topViewController == view?.controller, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .mnemonic, from: view) + showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift index a4d726af46..23a5bffc89 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift @@ -5,9 +5,10 @@ extension AddAccount { func proceed( from view: UsernameSetupViewProtocol?, flow _: AccountCreateFlow = .wallet, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { - guard let accountCreation = AccountCreateViewFactory.createViewForAdding(model: model) else { + guard let accountCreation = AccountCreateViewFactory.createViewForAdding(ecosystem: ecosystem, model: model) else { return } diff --git a/fearless/Modules/AllDone/AllDonePresenter.swift b/fearless/Modules/AllDone/AllDonePresenter.swift index 6afa3c5a2b..01412f3e52 100644 --- a/fearless/Modules/AllDone/AllDonePresenter.swift +++ b/fearless/Modules/AllDone/AllDonePresenter.swift @@ -5,6 +5,10 @@ import SSFModels final class AllDonePresenter { // MARK: Private properties + private lazy var wallet: MetaAccountModel? = { + SelectedWalletSettings.shared.value + }() + private weak var view: AllDoneViewInput? private let router: AllDoneRouterInput private let interactor: AllDoneInteractorInput @@ -61,6 +65,12 @@ final class AllDonePresenter { } private func prepareExplorer() { + if chainAsset?.chain.ecosystem == .ton { + let explorer = chainAsset?.chain.externalApi?.explorers?.first(where: { $0.types.contains(.tonAccount) }) + view?.didReceive(explorer: explorer) + self.explorer = explorer + return + } guard hashString != nil else { view?.didReceive(explorer: nil) return @@ -82,23 +92,46 @@ extension AllDonePresenter: AllDoneViewOutput { } func explorerButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.presentSubscan(from: view, url: explorerUrl) + router.presentSubscan(from: view, url: url) } func shareButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.share(sources: [explorerUrl], from: view, with: nil) + router.share(sources: [url], from: view, with: nil) + } + + private func prepareUrl() -> URL? { + guard let chainAsset else { + return nil + } + let url: URL + switch chainAsset.chain.ecosystem { + case .ethereumBased, .ethereum, .substrate: + guard + let explorer = self.explorer, + let hashString = hashString, + let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) + else { + return nil + } + url = explorerUrl + case .ton: + guard + let wallet, + let explorer, + let address = try? wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId.asTonAddress().toRaw(), + let explorerUrl = explorer.explorerUrl(for: address, type: .tonAccount) + else { + return nil + } + url = explorerUrl + } + return url } func dismiss() { diff --git a/fearless/Modules/AllDone/AllDoneViewLayout.swift b/fearless/Modules/AllDone/AllDoneViewLayout.swift index 11934a54c3..67871226a7 100644 --- a/fearless/Modules/AllDone/AllDoneViewLayout.swift +++ b/fearless/Modules/AllDone/AllDoneViewLayout.swift @@ -186,6 +186,7 @@ final class AllDoneViewLayout: UIView { } private func setupLayout() { + mainCloseButton.isHidden = true backgroundColor = R.color.colorAlmostBlack()! layer.cornerRadius = Constants.cornerRadius clipsToBounds = true diff --git a/fearless/Modules/AllDone/AllDoneViewModelFactory.swift b/fearless/Modules/AllDone/AllDoneViewModelFactory.swift index 6c8469bf05..173d6efc5e 100644 --- a/fearless/Modules/AllDone/AllDoneViewModelFactory.swift +++ b/fearless/Modules/AllDone/AllDoneViewModelFactory.swift @@ -19,9 +19,9 @@ final class AllDoneViewModelFactory: AllDoneViewModelFactoryProtocol { isWalletConnectResult: Bool ) -> AllDoneViewModel { let defaultTitle = R.string.localizable - .allDoneAlertAllDoneStub(preferredLanguages: locale.rLanguages) + .commonTransactionSent(preferredLanguages: locale.rLanguages) let defaultDesription = R.string.localizable - .allDoneAlertDescriptionStub(preferredLanguages: locale.rLanguages) + .commonTransactionSentDescription(preferredLanguages: locale.rLanguages) return AllDoneViewModel( title: title ?? defaultTitle, diff --git a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift index 1dd4bb5222..c3741264e5 100644 --- a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift +++ b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class AssetListSearchAssembly { static func configureModule(wallet: MetaAccountModel) -> AssetListSearchModuleCreationResult? { diff --git a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift index a7b27174f9..b51d4a036b 100644 --- a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift +++ b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift @@ -36,34 +36,8 @@ final class AssetManagementAssembly { assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) - let repository = SubstrateRepositoryFactory( - storageFacade: UserDataStorageFacade.shared - ).createAccountInfoStorageItemRepository() - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainRegistry = ChainRegistryFacade.sharedRegistry - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - let walletAssetsObserver = WalletAssetsObserverImpl( wallet: wallet, chainRegistry: chainRegistry, diff --git a/fearless/Modules/AssetManagement/AssetManagementInteractor.swift b/fearless/Modules/AssetManagement/AssetManagementInteractor.swift index 499db37475..cb30319fcc 100644 --- a/fearless/Modules/AssetManagement/AssetManagementInteractor.swift +++ b/fearless/Modules/AssetManagement/AssetManagementInteractor.swift @@ -122,6 +122,12 @@ extension AssetManagementInteractor: AssetManagementInteractorInput { // MARK: - EventVisitorProtocol extension AssetManagementInteractor: EventVisitorProtocol { + nonisolated func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + Task { + await output?.didReceiveUpdated(wallet: event.account) + } + } + nonisolated func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { Task { await output?.didReceiveUpdated(wallet: event.account) diff --git a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift index 5d370ac3c0..1f1a5741c6 100644 --- a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift +++ b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias AssetManagementModuleCreationResult = ( view: AssetManagementViewInput, input: AssetManagementModuleInput diff --git a/fearless/Modules/AssetManagement/AssetManagementRouter.swift b/fearless/Modules/AssetManagement/AssetManagementRouter.swift index dd004b3b9a..54ac744e04 100644 --- a/fearless/Modules/AssetManagement/AssetManagementRouter.swift +++ b/fearless/Modules/AssetManagement/AssetManagementRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class AssetManagementRouter: AssetManagementRouterInput { func showSelectNetwork( diff --git a/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift b/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift index fd2f5ac225..e3e2b54f08 100644 --- a/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift +++ b/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift @@ -2,7 +2,11 @@ import UIKit import SoraUI final class AssetManagementTableCell: UITableViewCell { - let iconImageView = UIImageView() + let iconImageView: UIImageView = { + let iconImageView = UIImageView() + iconImageView.layer.masksToBounds = true + return iconImageView + }() let symbolLabel: UILabel = { let label = UILabel() @@ -67,6 +71,11 @@ final class AssetManagementTableCell: UITableViewCell { fatalError("init(coder:) has not been implemented") } + override func layoutSubviews() { + super.layoutSubviews() + iconImageView.rounded() + } + func bind(viewModel: AssetManagementTableCellViewModel) { self.viewModel = viewModel viewModel.assetImage?.loadImage( diff --git a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift index df10c37532..ba6f4f766e 100644 --- a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift +++ b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift @@ -222,7 +222,7 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact amount: amount, price: price ) - let hidden = checkAssetIsHidden( + let isEnabled = checkAssetIsEnabled( wallet: wallet, chainAsset: chainAsset ) @@ -234,7 +234,7 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact chainName: chainAsset.chain.name, balance: balance, decimalPrice: decimalPrice, - hidden: hidden, + hidden: !isEnabled, hasGroup: hasGroup, isLoadingBalance: isLoadingBalance ) @@ -273,14 +273,23 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact } } - private func checkAssetIsHidden( + private func checkAssetIsEnabled( wallet: MetaAccountModel, chainAsset: ChainAsset ) -> Bool { - let isHidden = wallet.assetsVisibility.contains(where: { - $0.assetId == chainAsset.identifier && $0.hidden - }) - return isHidden + switch wallet.ecosystem { + case .regular: + let isEnabled = wallet.assetsVisibility.contains(where: { + $0.assetId == chainAsset.identifier && !$0.hidden + }) + return isEnabled + case .ton: + if let visibility = wallet.assetsVisibility.first(where: { $0.assetId == chainAsset.identifier}) { + return !visibility.hidden + } else { + return true + } + } } private func createFilterButtonTitle( diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index 62b334f65a..40ae80a98b 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import SoraKeystore import IrohaCrypto import SSFModels +import SSFCrypto protocol BackupCreatePasswordInteractorOutput: AnyObject { func didReceive(error: Error) @@ -47,7 +48,8 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { var flow: AccountConfirmFlow? if let mnemonicRequest = createPasswordFlow.mnemonicRequest { - flow = .wallet(mnemonicRequest) + // TODO: - Ton google backup + flow = .wallet(.regular(mnemonicRequest)) } super.init( @@ -93,8 +95,14 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { settings.setup() eventCenter.notify(with: SelectedAccountChanged(account: wallet)) switch flow { - case let .wallet(request): - saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case let .wallet(importEcosystem): + switch importEcosystem { + case let .regular(request): + saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case .ton: + // TODO: - Ton google backup + break + } default: break } @@ -128,7 +136,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { seeds: [ExportSeedData], password: String ) { - let substrateRestoreSeed = seeds.first(where: { $0.chain.chainBaseType == .substrate }) + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } + let substrateRestoreSeed = seeds.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreSeed = seeds.first(where: { $0.chain.isEthereumBased }) let substrateSeed = substrateRestoreSeed?.seed.toHex(includePrefix: true) @@ -137,12 +151,12 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { substrateSeed: substrateSeed, ethSeed: ethSeed ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), substrateDerivationPath: substrateRestoreSeed?.derivationPath, ethDerivationPath: ethereumRestoreSeed?.derivationPath, @@ -157,19 +171,25 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { jsons: [RestoreJson], password: String ) { - let substrateRestoreJson = jsons.first(where: { $0.chain.chainBaseType == .substrate }) + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } + let substrateRestoreJson = jsons.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreJson = jsons.first(where: { $0.chain.isEthereumBased }) let json = OpenBackupAccount.Json( substrateJson: substrateRestoreJson?.data, ethJson: ethereumRestoreJson?.data ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), backupAccountType: [.json], json: json @@ -182,10 +202,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { request: MetaAccountImportMnemonicRequest, password: String ) { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + guard let substratePublicKey = wallet.ecosystem.substratePublicKey else { + return + } + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: request.username, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), passphrase: request.mnemonic.toString(), cryptoType: request.cryptoType.stringValue.uppercased(), substrateDerivationPath: request.substrateDerivationPath, @@ -365,7 +388,7 @@ extension BackupCreatePasswordInteractor: BackupCreatePasswordInteractorInput { switch flow { case let .multiple(wallet, accounts): let ethereum = accounts.first(where: { $0.chain.isEthereumBased }) - guard let substrate = accounts.first(where: { $0.chain.chainBaseType == .substrate }) else { + guard let substrate = accounts.first(where: { $0.chain.ecosystem == .substrate }) else { return } let accounts = [substrate, ethereum].compactMap { $0 } diff --git a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift index 6494f9ef12..2d186100d7 100644 --- a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift +++ b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift @@ -1,6 +1,7 @@ import UIKit import RobinHood import SSFCloudStorage +import SSFModels protocol BackupPasswordInteractorOutput: AnyObject { func didReceiveBackup(result: Result) diff --git a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift index dbdf3f49f0..ec218633c4 100644 --- a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift +++ b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift @@ -4,9 +4,8 @@ final class BackupRiskWarningsRouter: BackupRiskWarningsRouterInput { func showCreateAccount( usernameModel: UsernameSetupModel, from view: ControllerBackedProtocol? - ) { - guard let controller = AccountCreateViewFactory - .createViewForOnboarding(model: usernameModel, flow: .backup)?.controller else { + ) { // TODO: - Select ecosystem + guard let controller = AccountCreateViewFactory.createViewForOnboarding(ecosystem: .regular, model: usernameModel, flow: .backup)?.controller else { return } diff --git a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift index ad47c62361..640f4aabec 100644 --- a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift +++ b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift @@ -4,6 +4,7 @@ import RobinHood import SoraKeystore import SSFCloudStorage import SSFNetwork +import SSFModels final class BackupWalletAssembly { static func configureModule( diff --git a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift index d7e1f85c70..ab2b8e5c8c 100644 --- a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift +++ b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift @@ -107,20 +107,24 @@ extension BackupWalletInteractor: BackupWalletInteractorInput { } func removeBackupFromGoogle() { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) - let account = OpenBackupAccount(address: address42 ?? wallet.substratePublicKey.toHex()) - - Task { - do { - try await cloudStorage?.deleteBackup(account: account) - await MainActor.run { - output?.didReceiveRemove(result: .success(())) - } - } catch { - await MainActor.run { - output?.didReceiveRemove(result: .failure(error)) + switch wallet.ecosystem { + case .regular(let regular): + Task { + do { + let address42 = try? regular.substratePublicKey.toAddress(using: .substrate(42)) + let account = OpenBackupAccount(address: address42 ?? regular.substratePublicKey.toHex()) + try await cloudStorage?.deleteBackup(account: account) + await MainActor.run { + output?.didReceiveRemove(result: .success(())) + } + } catch { + await MainActor.run { + output?.didReceiveRemove(result: .failure(error)) + } } } + case .ton: + break } } diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index 1a85093ce4..661d6fbef1 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -78,7 +78,7 @@ final class BackupWalletPresenter { case .json: router.showKeystoreExport(flow: flow, from: view) case .backupGoogle, .removeGoogle: - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) if backupAccounts.or([]).contains(where: { $0.address == address42 }) { removeBackupFromGoogle() } else { @@ -252,8 +252,14 @@ extension BackupWalletPresenter: BackupWalletViewOutput { guard !googleAuthorized else { return } - view?.didStartLoading() - interactor.viewDidAppear() + // TODO: Ton google backup + switch wallet.ecosystem { + case .regular: + view?.didStartLoading() + interactor.viewDidAppear() + case .ton: + break + } } func backButtonDidTapped() { @@ -291,7 +297,7 @@ extension BackupWalletPresenter: BackupWalletInteractorOutput { .commonDone(preferredLanguages: selectedLocale.rLanguages) router.presentSuccessNotification(text, from: view) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) backupAccounts?.removeAll(where: { $0.address == address42 }) provideViewModel() case let .failure(failure): diff --git a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift index 9c7b3dc0db..acaa2a9fbb 100644 --- a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift +++ b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias BackupWalletModuleCreationResult = ( view: BackupWalletViewInput, input: BackupWalletModuleInput diff --git a/fearless/Modules/BackupWallet/BackupWalletRouter.swift b/fearless/Modules/BackupWallet/BackupWalletRouter.swift index a9f282461f..a59c179daa 100644 --- a/fearless/Modules/BackupWallet/BackupWalletRouter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class BackupWalletRouter: BackupWalletRouterInput { func showMnemonicExport( @@ -96,7 +97,7 @@ final class BackupWalletRouter: BackupWalletRouterInput { from view: ControllerBackedProtocol? ) { let module = WalletDetailsViewFactory - .createView(flow: .normal(wallet: wallet)) + .createView(flow: .normal(wallet: wallet), chains: nil) view?.controller.navigationController?.pushViewController(module.controller, animated: true) } } diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 305507a951..72eff87785 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -3,6 +3,7 @@ import SoraFoundation import SSFCloudStorage import SSFModels import SoraKeystore +import SSFCrypto protocol BackupWalletViewModelFactoryProtocol { func createViewModel( @@ -63,6 +64,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { ) let logoutViewModel = createLogoutViewModel(locale: locale) return ProfileViewModel( + wallet: wallet, profileUserViewModel: profileUserViewModel, profileOptionViewModel: profileOptionViewModel, logoutViewModel: logoutViewModel @@ -77,14 +79,19 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { backupAccounts: [OpenBackupAccount]?, locale: Locale ) -> [ProfileOptionViewModelProtocol] { - let publicKey = wallet.substratePublicKey - let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) - var backupOptions: [BackupWalletOptions] = exportOptions.map { BackupWalletOptions(exportOptions: $0) } - if backupAccounts?.contains(where: { $0.address == address }) == true { - backupOptions.append(.removeGoogle) - } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { - backupOptions.append(.backupGoogle) + switch wallet.ecosystem { + case .regular(let regular): + let publicKey = regular.substratePublicKey + let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) + + if backupAccounts?.contains(where: { $0.address == address }) == true { + backupOptions.append(.removeGoogle) + } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { + backupOptions.append(.backupGoogle) + } + case .ton: + break } let optionViewModels = backupOptions.compactMap { (option) -> ProfileOptionViewModel? in @@ -155,7 +162,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { balance: WalletBalanceInfo?, locale: Locale ) -> WalletsManagmentCellViewModel { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel(fetcher: accountScoreFetcher, address: address, chain: nil, settings: settings, eventCenter: EventCenter.shared, logger: Logger.shared) var fiatBalance: String = "" @@ -174,9 +181,11 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { return WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: false ) } diff --git a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift index fa445c4757..6d0bded6ea 100644 --- a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift +++ b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class WalletNameAssembly { static func configureModule(with wallet: MetaAccountModel?) -> WalletNameModuleCreationResult? { diff --git a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift index ebec45e3a9..8527af80d7 100644 --- a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift +++ b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels protocol WalletNameInteractorOutput: AnyObject { func didReceiveSaveOperation(result: Result) diff --git a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift index c05c880239..7ce80eb48c 100644 --- a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift +++ b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels protocol WalletNameViewInput: ControllerBackedProtocol, HiddableBarWhenPushed, LoadableViewProtocol { func setInputViewModel(_ viewModel: InputViewModelProtocol) diff --git a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift index 739c9d5e3a..ef72a61c79 100644 --- a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift +++ b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift @@ -20,8 +20,7 @@ final class BalanceInfoDepencyContainer { let operationManager = OperationManagerFacade.sharedManager let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let balanceLocksFetcher = BalanceLocksFetchingFactory.buildBalanceLocksFetcher(for: chainAsset) diff --git a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift index dcfbeb476d..b845fd47e2 100644 --- a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift +++ b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFAccountManagment final class BalanceLocksDetailInteractor { // MARK: - Private properties diff --git a/fearless/Modules/Banners/BannerCollectionViewCell.swift b/fearless/Modules/Banners/BannerCollectionViewCell.swift index 57fc8d210c..2e45f0a8b5 100644 --- a/fearless/Modules/Banners/BannerCollectionViewCell.swift +++ b/fearless/Modules/Banners/BannerCollectionViewCell.swift @@ -24,6 +24,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { let label = UILabel() label.textColor = R.color.colorWhite() label.font = .h3Title + label.numberOfLines = 0 return label }() @@ -141,7 +142,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { titleLabel.snp.makeConstraints { make in make.top.equalToSuperview().offset(16) make.leading.equalToSuperview().offset(UIConstants.bigOffset) - make.trailing.equalTo(closeButton.snp.leading).inset(16) + make.trailing.equalTo(closeButton.snp.leading).offset(16) } addSubview(subtitleLabel) @@ -152,7 +153,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { } addSubview(actionButton) - actionButton.snp.makeConstraints { make in + actionButton.snp.remakeConstraints { make in make.top.greaterThanOrEqualTo(subtitleLabel.snp.bottom).offset(UIConstants.defaultOffset) make.leading.equalToSuperview().offset(UIConstants.bigOffset) make.bottom.equalToSuperview().inset(UIConstants.defaultOffset) diff --git a/fearless/Modules/Banners/BannersAssembly.swift b/fearless/Modules/Banners/BannersAssembly.swift index 90be3884a7..28b6113c78 100644 --- a/fearless/Modules/Banners/BannersAssembly.swift +++ b/fearless/Modules/Banners/BannersAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class BannersAssembly { static func configureModule( @@ -12,14 +13,15 @@ final class BannersAssembly { let walletProvider = UserDataStorageFacade.shared .createStreamableProvider( - filter: NSPredicate.selectedMetaAccount(), + filter: nil, sortDescriptors: [], mapper: AnyCoreDataMapper(ManagedMetaAccountMapper()) ) let interactor = BannersInteractor( walletProvider: walletProvider, - eventCenter: EventCenter.shared + eventCenter: EventCenter.shared, + userDefaults: ServiceAssembly.shared.userDefaults ) let router = BannersRouter() diff --git a/fearless/Modules/Banners/BannersInteractor.swift b/fearless/Modules/Banners/BannersInteractor.swift index 11864bd8f3..73f48eb68b 100644 --- a/fearless/Modules/Banners/BannersInteractor.swift +++ b/fearless/Modules/Banners/BannersInteractor.swift @@ -1,5 +1,7 @@ import UIKit +import SoraKeystore import RobinHood +import SSFModels protocol BannersInteractorOutput: AnyObject { func didReceive(error: Error) @@ -13,13 +15,16 @@ final class BannersInteractor { private let walletProvider: StreamableProvider private let eventCenter: EventCenterProtocol + private let userDefaults: SettingsManagerProtocol init( walletProvider: StreamableProvider, - eventCenter: EventCenterProtocol + eventCenter: EventCenterProtocol, + userDefaults: SettingsManagerProtocol ) { self.walletProvider = walletProvider self.eventCenter = eventCenter + self.userDefaults = userDefaults } // MARK: - Private methods @@ -28,6 +33,15 @@ final class BannersInteractor { // MARK: - BannersInteractorInput extension BannersInteractor: BannersInteractorInput { + var shouldShowAddWalletBanner: Bool { + get { + userDefaults.shouldShowAddWalletBanner + } + set { + userDefaults.shouldShowAddWalletBanner = newValue + } + } + func setup(with output: BannersInteractorOutput) { self.output = output } @@ -51,12 +65,20 @@ extension BannersInteractor: BannersInteractorInput { func subscribeToWallet() { let updateClosure: ([DataProviderChange]) -> Void = { [weak self] changes in - guard let selectedWallet = changes.firstToLastChange(filter: { wallet in - wallet.isSelected - }) else { + guard let wallet = changes.reduceToLastChange() else { return } - self?.output?.didReceive(wallet: selectedWallet.info) + self?.output?.didReceive(wallet: wallet.info) + changes.forEach { change in + switch change { + case .insert(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .update(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .delete(deletedIdentifier: let deletedIdentifier): + break + } + } } let failureClosure: (Error) -> Void = { [weak self] error in diff --git a/fearless/Modules/Banners/BannersPresenter.swift b/fearless/Modules/Banners/BannersPresenter.swift index 828ca7f5bc..2535d4bdb9 100644 --- a/fearless/Modules/Banners/BannersPresenter.swift +++ b/fearless/Modules/Banners/BannersPresenter.swift @@ -12,6 +12,7 @@ protocol BannersViewInput: ControllerBackedProtocol { } protocol BannersInteractorInput: AnyObject { + var shouldShowAddWalletBanner: Bool { get set } func setup(with output: BannersInteractorOutput) func markWalletAsBackedUp(_ wallet: MetaAccountModel) func subscribeToWallet() @@ -31,7 +32,7 @@ final class BannersPresenter { BannersViewModelFactory() }() - private var wallet: MetaAccountModel? + private var wallets: [MetaAccountModel] = [] // MARK: - Constructors @@ -49,7 +50,9 @@ final class BannersPresenter { self.interactor = interactor self.router = router self.type = type - self.wallet = wallet + if let wallet { + self.wallets.append(wallet) + } self.localizationManager = localizationManager } @@ -57,14 +60,16 @@ final class BannersPresenter { // MARK: - Private methods private func provideViewModel() { - guard let wallet = wallet else { - return - } - let viewModel = viewModelFactory.createViewModel(wallet: wallet, locale: selectedLocale) + let viewModel = viewModelFactory.createViewModel( + wallets: wallets, + locale: selectedLocale, + shouldShowAddWalletBanner: interactor.shouldShowAddWalletBanner + ) DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) } - moduleOutput?.reloadBannersView() + + moduleOutput?.reloadBannersView(bannersCount: viewModel.banners.count) } private func showNotBackedUpAlert(wallet: MetaAccountModel) { @@ -102,7 +107,7 @@ final class BannersPresenter { extension BannersPresenter: BannersViewOutput { func didTapOnBanner(_ banner: Banners) { - guard let wallet = wallet else { + guard let wallet = SelectedWalletSettings.shared.value else { return } @@ -115,21 +120,31 @@ extension BannersPresenter: BannersViewOutput { router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraMain.genesisHash) case .liquidityPoolsTest: router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraTest.genesisHash) + case .addRegularWallet: + router.showCreateNewWallet(ecosystem: .regular, from: view) + case .addTonWallet: + router.showCreateNewWallet(ecosystem: .ton, from: view) } } func didCloseBanner(_ banner: Banners) { - guard let wallet = wallet else { - return - } - switch banner { case .backup: + guard let wallet = SelectedWalletSettings.shared.value else { + return + } showNotBackedUpAlert(wallet: wallet) case .buyXor: break case .liquidityPools, .liquidityPoolsTest: moduleOutput?.didTapCloseBanners() + case .addRegularWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() + case .addTonWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() + } } @@ -151,7 +166,8 @@ extension BannersPresenter: BannersInteractorOutput { } func didReceive(wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } } @@ -164,12 +180,18 @@ extension BannersPresenter: Localizable { extension BannersPresenter: BannersModuleInput { func reload(with wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } func update(banners: [Banners]) { let viewModel = viewModelFactory.createViewModel(banners: banners, locale: selectedLocale) + view?.didReceive(viewModel: viewModel) } + + func reload() { + provideViewModel() + } } diff --git a/fearless/Modules/Banners/BannersProtocols.swift b/fearless/Modules/Banners/BannersProtocols.swift index e28bddd444..398a928f3a 100644 --- a/fearless/Modules/Banners/BannersProtocols.swift +++ b/fearless/Modules/Banners/BannersProtocols.swift @@ -5,7 +5,7 @@ typealias BannersModuleCreationResult = ( input: BannersModuleInput ) -protocol BannersRouterInput: AnyObject, SheetAlertPresentable { +protocol BannersRouterInput: AnyObject, SheetAlertPresentable, AccountManagementPresentable { func showWalletBackupScreen( for wallet: MetaAccountModel, from view: ControllerBackedProtocol? @@ -21,9 +21,10 @@ protocol BannersRouterInput: AnyObject, SheetAlertPresentable { protocol BannersModuleInput: AnyObject { func reload(with wallet: MetaAccountModel) func update(banners: [Banners]) + func reload() } protocol BannersModuleOutput: AnyObject { - func reloadBannersView() + func reloadBannersView(bannersCount: Int) func didTapCloseBanners() } diff --git a/fearless/Modules/Banners/BannersViewController.swift b/fearless/Modules/Banners/BannersViewController.swift index 3330a4a738..97926da977 100644 --- a/fearless/Modules/Banners/BannersViewController.swift +++ b/fearless/Modules/Banners/BannersViewController.swift @@ -91,4 +91,11 @@ extension BannersViewController: UICollectionViewDelegate { rootView.pageControl.currentPage = Int(offSet + horizontalCenter) / Int(width) } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let viewModel = dataSource?.data[safe: indexPath.row] else { + return + } + output.didTapOnBanner(viewModel.bannerType) + } } diff --git a/fearless/Modules/Banners/BannersViewModelFactory.swift b/fearless/Modules/Banners/BannersViewModelFactory.swift index a879911be5..c98850a10a 100644 --- a/fearless/Modules/Banners/BannersViewModelFactory.swift +++ b/fearless/Modules/Banners/BannersViewModelFactory.swift @@ -10,12 +10,15 @@ enum Banners: Int { case buyXor case liquidityPools case liquidityPoolsTest + case addRegularWallet + case addTonWallet } protocol BannersViewModelFactoryProtocol { func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel func createViewModel(banners: [Banners], locale: Locale) -> BannersViewModel @@ -86,6 +89,26 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { fullsizeImage: true, bannerType: .liquidityPoolsTest ) + case .addRegularWallet: + return BannerCellViewModel( + title: R.string.localizable.bannerAddwalletRegularTitle(preferredLanguages: locale.rLanguages), + subtitle: R.string.localizable.bannerAddwalletRegularSubtitle(preferredLanguages: locale.rLanguages), + buttonTitle: R.string.localizable.bannerAddwalletRegularButtonTitle(preferredLanguages: locale.rLanguages), + image: R.image.regularBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) + case .addTonWallet: + return BannerCellViewModel( + title: R.string.localizable.bannerAddwalletTonTitle(preferredLanguages: locale.rLanguages), + subtitle: "", + buttonTitle: R.string.localizable.bannerAddwalletTonButtonTitle(preferredLanguages: locale.rLanguages), + image: R.image.tonBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) } } @@ -93,14 +116,24 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { } func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel { var banners: [Banners] = [] - if !wallet.hasBackup { + if let wallet = SelectedWalletSettings.shared.value, !wallet.hasBackup { banners.insert(.backup, at: 0) } + if shouldShowAddWalletBanner { + let divided = wallets.divide(predicate: { $0.ecosystem.isRegular }) + if divided.slice.isEmpty { + banners.append(.addRegularWallet) + } else if divided.remainder.isEmpty { + banners.append(.addTonWallet) + } + } + return createViewModel(banners: banners, locale: locale) } } diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift index 1f6a9b407a..4cf70fe3c0 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift @@ -43,8 +43,7 @@ final class ClaimCrowdloanRewardsAssembly { accountResponse: accountResponse ) let storageRequestPerformer = StorageRequestPerformerDefault( - runtimeService: runtimeService, - connection: connection + chainRegistry: chainRegistry ) let substrateRepositoryFactory = SubstrateRepositoryFactory( storageFacade: UserDataStorageFacade.shared diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift index 80b367d871..f154dc6d1c 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift @@ -3,6 +3,7 @@ import SSFUtils import SSFModels import RobinHood import SSFSigner +import SSFAccountManagment final class ClaimCrowdloanRewardsInteractor { // MARK: - Private properties @@ -62,7 +63,7 @@ final class ClaimCrowdloanRewardsInteractor { do { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let tokensLocksRequest = TokensLocksRequest(accountId: accountIdVariant, currencyId: currencyId) - let locks: TokenLocks? = try await storageRequestPerformer.performSingle(tokensLocksRequest) + let locks: TokenLocks? = try await storageRequestPerformer.performSingle(tokensLocksRequest, chain: chainAsset.chain) await MainActor.run { output?.didReceiveTokenLocks(locks) @@ -85,7 +86,7 @@ final class ClaimCrowdloanRewardsInteractor { do { let accountId = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountId) - let locks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest) + let locks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) await MainActor.run { output?.didReceiveBalanceLocks(locks) diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift new file mode 100644 index 0000000000..4d41058394 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift @@ -0,0 +1,43 @@ +import UIKit +import SoraFoundation +import SSFNetwork +import SoraKeystore +import SSFModels + +final class ConnectedAccountsAssembly { + static func configureModule(wallet: MetaAccountModel) -> ConnectedAccountsModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = ConnectedAccountsInteractor( + wallet: wallet, + chainRepository: ServiceAssembly.shared.asyncChainModelRepository(), + walletBalanceSubscriptionAdapter: ServiceAssembly.shared.walletBalanceSubscriptionAdapter, + eventCenter: ServiceAssembly.shared.eventCenter + ) + let router = ConnectedAccountsRouter() + + let accountScoreFetcher = NomisAccountStatisticsFetcher( + networkWorker: NetworkWorkerImpl(), + signer: NomisRequestSigner() + ) + let viewModelFactory = ConnectedAccountsViewModelFactoryImpl( + accountScoreFetcher: accountScoreFetcher, + settings: SettingsManager.shared + ) + + let presenter = ConnectedAccountsPresenter( + wallet: wallet, + viewModelFactory: viewModelFactory, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = ConnectedAccountsViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift new file mode 100644 index 0000000000..72a8bb113a --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift @@ -0,0 +1,75 @@ +import UIKit +import SSFModels +import RobinHood + +protocol ConnectedAccountsInteractorOutput: AnyObject { + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) + func processSelectedAccountChanged(wallet: MetaAccountModel) +} + +final class ConnectedAccountsInteractor { + // MARK: - Private properties + private weak var output: ConnectedAccountsInteractorOutput? + + private var wallet: MetaAccountModel + private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + private let chainRepository: AsyncAnyRepository + private let eventCenter: EventCenterProtocol + + init( + wallet: MetaAccountModel, + chainRepository: AsyncAnyRepository, + walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, + eventCenter: EventCenterProtocol + ) { + self.wallet = wallet + self.chainRepository = chainRepository + self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter + self.eventCenter = eventCenter + eventCenter.add(observer: self, dispatchIn: .global()) + } + + // MARK: - Private methods + + private func fetchBalances() { + walletBalanceSubscriptionAdapter.subscribeWalletBalance( + wallet: wallet, + listener: self + ) + } +} + +// MARK: - ConnectedAccountsInteractorInput +extension ConnectedAccountsInteractor: ConnectedAccountsInteractorInput { + var chains: [ChainModel] { + get async throws { + try await chainRepository.fetchAll() + } + } + + func setup(with output: ConnectedAccountsInteractorOutput) { + self.output = output + fetchBalances() + } +} + +// MARK: - WalletBalanceSubscriptionListener + +extension ConnectedAccountsInteractor: WalletBalanceSubscriptionListener { + var type: WalletBalanceListenerType { + .wallet(wallet: wallet) + } + + func handle(result: WalletBalancesResult) { + output?.didReceiveWalletBalances(result) + } +} + +// MARK: - EventVisitorProtocol + +extension ConnectedAccountsInteractor: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + wallet = event.account + output?.processSelectedAccountChanged(wallet: wallet) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift new file mode 100644 index 0000000000..4afbc19148 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -0,0 +1,260 @@ +import Foundation +import SSFModels +import SoraFoundation + +@MainActor +protocol ConnectedAccountsViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [ConnectedAccountsViewModel]) +} + +protocol ConnectedAccountsInteractorInput: AnyObject { + func setup(with output: ConnectedAccountsInteractorOutput) + var chains: [ChainModel] { get async throws } +} + +final class ConnectedAccountsPresenter { + // MARK: Private properties + private weak var view: ConnectedAccountsViewInput? + private let router: ConnectedAccountsRouterInput + private let interactor: ConnectedAccountsInteractorInput + private let viewModelFactory: ConnectedAccountsViewModelFactory + private var wallet: MetaAccountModel + private lazy var logger: LoggerProtocol = Logger.shared + + private var balance: WalletBalanceInfo? + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + viewModelFactory: ConnectedAccountsViewModelFactory, + interactor: ConnectedAccountsInteractorInput, + router: ConnectedAccountsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.viewModelFactory = viewModelFactory + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel() { + Task { + let viewModel = viewModelFactory.buildViewModel( + wallet: wallet, + balance: balance, + chains: try await interactor.chains, + locale: selectedLocale + ) + await view?.didReceive(viewModels: viewModel) + } + } + + private func startAddAccountFlow(chains: [ChainModel]) { + func showCreateFlow() { + let rLanguages = localizationManager?.selectedLocale.rLanguages + let actionTitle = R.string.localizable.commonOk(preferredLanguages: rLanguages) + let action = SheetAlertPresentableAction(title: actionTitle) { [weak self] in + guard let self else { return } + self.router.showCreate( + wallet: self.wallet, + chains: chains, + from: self.view + ) + } + + let title = R.string.localizable.commonNoScreenshotTitle(preferredLanguages: rLanguages) + let message = R.string.localizable.commonNoScreenshotMessage(preferredLanguages: rLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: message, + actions: [action], + closeAction: nil, + icon: R.image.iconWarningBig() + ) + + router.present(viewModel: viewModel, from: view) + } + + let options: [ReplaceChainOption] = ReplaceChainOption.allCases + router.showUniqueChainSourceSelection( + from: view, + items: options, + callback: { + [weak self] selectedIndex in + let option = options[selectedIndex] + switch option { + case .create: + showCreateFlow() + case .import: + guard let wallet = self?.wallet else { + return + } + let uniqueChainModels = chains.map { + UniqueChainModel( + meta: wallet, + chain: $0 + ) + } + self?.showImportSource(for: chains) + } + } + ) + } + + private func showImportSource(for chains: [ChainModel]) { + let preferredLanguages = selectedLocale.rLanguages + + let mnemonicTitle = R.string.localizable + .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) + let mnemonicAction = SheetAlertPresentableAction( + title: mnemonicTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .mnemonic, from: view) + } + + let rawTitle = R.string.localizable + .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) + let rawAction = SheetAlertPresentableAction( + title: rawTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .seed, from: view) + } + + let jsonTitle = R.string.localizable + .googleBackupChoiceJson(preferredLanguages: preferredLanguages) + let jsonAction = SheetAlertPresentableAction( + title: jsonTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .keystore, from: view) + } + + let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) + let cancelAction = SheetAlertPresentableAction( + title: cancelTitle, + style: .pinkBackgroundWhiteText + ) + + let title = R.string.localizable + .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: nil, + actions: [mnemonicAction, rawAction, jsonAction, cancelAction], + closeAction: nil, + icon: nil + ) + + router.present(viewModel: viewModel, from: view) + } +} + +// MARK: - ConnectedAccountsViewOutput +extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { + func activateAccountDetails() { + switch wallet.ecosystem { + case .regular: + router.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } + } + + func didTapAccountScore(address: String?) { + router.presentAccountScore(address: address, from: view) + + } + + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { + guard viewModel.count > 0 else { + startAddAccountFlow(chains: viewModel.chains) + return + } + router.showOptions( + from: view, + ecosystem: viewModel.ecosystem, + wallet: wallet, + chains: viewModel.chains, + moduleOutput: self + ) + } + + func dismiss() { + router.dismiss(view: view) + } + + func pop() { + router.dismiss(view: view) + } + + func didLoad(view: ConnectedAccountsViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel() + } +} + +// MARK: - ConnectedAccountsInteractorOutput +extension ConnectedAccountsPresenter: ConnectedAccountsInteractorOutput { + func processSelectedAccountChanged(wallet: SSFModels.MetaAccountModel) { + self.wallet = wallet + provideViewModel() + } + + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], any Error>) { + switch balances { + case let .success(balances): + balance = balances[wallet.metaId] + provideViewModel() + case let .failure(error): + logger.error("WalletsManagmentPresenter error: \(error.localizedDescription)") + } + } +} + +// MARK: - Localizable +extension ConnectedAccountsPresenter: Localizable { + func applyLocalization() {} +} + +extension ConnectedAccountsPresenter: ConnectedAccountsModuleInput {} + +// MARK: - EcosystemOptionsModuleOutput +extension ConnectedAccountsPresenter: EcosystemOptionsModuleOutput { + func showMnemonicExport(flow: ExportFlow) { + router.showMnemonicExport( + flow: flow, + from: view + ) + } + + func showKeystoreExport(flow: ExportFlow) { + router.showKeystoreExport( + flow: flow, + from: view + ) + } + + func showSeedExport(flow: ExportFlow) { + router.showSeedExport( + flow: flow, + from: view + ) + } + + func showWalletDetails(chains: [ChainModel]?) { + router.showWalletDetails( + view: view, + wallet: wallet, + chains: chains + ) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift new file mode 100644 index 0000000000..83a11ffb80 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift @@ -0,0 +1,62 @@ +import SSFModels + +typealias ConnectedAccountsModuleCreationResult = ( + view: ConnectedAccountsViewInput, + input: ConnectedAccountsModuleInput +) + +protocol ConnectedAccountsRouterInput: + AnyDismissable, + AuthorizationPresentable, + AccountScorePresentable, + SheetAlertPresentable { + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) + + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showUniqueChainSourceSelection( + from view: ControllerBackedProtocol?, + items: [ReplaceChainOption], + callback: @escaping ModalPickerSelectionCallback + ) + func showCreate( + wallet: MetaAccountModel, + chains: [ChainModel], + from view: ControllerBackedProtocol? + ) + func showImport( + wallet: MetaAccountModel, + chains: [ChainModel], + defaultSource: AccountImportSource, + from view: ControllerBackedProtocol? + ) +} + +protocol ConnectedAccountsModuleInput: AnyObject {} + +protocol ConnectedAccountsModuleOutput: AnyObject {} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift new file mode 100644 index 0000000000..3f88b9c931 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -0,0 +1,161 @@ +import Foundation +import SSFModels + +final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { + func showUniqueChainSourceSelection( + from view: (any ControllerBackedProtocol)?, + items: [ReplaceChainOption], + callback: @escaping ModalPickerSelectionCallback + ) { + let actionsView = ModalPickerFactory.createPickerForList( + items, + callback: callback, + context: nil + ) + + guard let actionsView = actionsView else { + return + } + + view?.controller.navigationController?.present(actionsView, animated: true) + } + + func showCreate( + wallet: SSFModels.MetaAccountModel, + chains: [SSFModels.ChainModel], + from view: (any ControllerBackedProtocol)? + ) { + guard let createController = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: .regular, + model: UsernameSetupModel(username: wallet.name), + flow: .ethereum(wallet: wallet, chains: chains) + )?.controller else { + return + } + createController.hidesBottomBarWhenPushed = true + view?.controller.navigationController?.pushViewController(createController, animated: true) + } + + func showImport( + wallet: SSFModels.MetaAccountModel, + chains: [SSFModels.ChainModel], + defaultSource: AccountImportSource, + from view: (any ControllerBackedProtocol)? + ) { + guard let importController = AccountImportViewFactory.createViewForOnboarding( + defaultSource: defaultSource, + flow: .ethereum(wallet: wallet, chains: chains) + )?.controller else { + return + } + importController.hidesBottomBarWhenPushed = true + let navigationController = FearlessNavigationController(rootViewController: importController) + view?.controller.navigationController?.present(navigationController, animated: true) + } + + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) { + guard + let walletOptionsController = WalletOptionAssembly.configureModule( + with: metaAccount, + delegate: nil + )?.view.controller + else { + return + } + + view?.controller.present(walletOptionsController, animated: true) + } + + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) { + guard let module = EcosystemOptionsAssembly.configureModule( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput + ) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) { + let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet), chains: chains) + + view?.controller.navigationController?.pushViewController(module.controller, animated: true) + } + + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let mnemonicView = ExportMnemonicViewFactory.createViewForAddress( + flow: flow + ) else { + return + } + + view?.controller.navigationController?.pushViewController(mnemonicView.controller, animated: true) + } + } + + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let passwordView = AccountExportPasswordViewFactory.createView( + flow: flow + ) else { + return + } + + view?.controller.navigationController?.pushViewController(passwordView.controller, animated: true) + } + } + + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let seedView = ExportSeedViewFactory.createViewForAddress(flow: flow) else { + return + } + + view?.controller.navigationController?.pushViewController(seedView.controller, animated: true) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift new file mode 100644 index 0000000000..3ed86e2f44 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift @@ -0,0 +1,111 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .p1Paragraph + return label + }() + + let countLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + private let optionsButton: UIButton = { + let button = UIButton() + button.clipsToBounds = true + button.isUserInteractionEnabled = false + return button + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure( + model: ConnectedAccountsViewModel.Accounts, + position: Position + ) { + titleLabel.text = model.title + if model.count > 0 { + countLabel.text = "\(model.count)" + optionsButton.setImage(R.image.iconHorMore(), for: .normal) + } else { + countLabel.text = nil + optionsButton.setImage(R.image.iconWarning(), for: .normal) + } + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + + let hStackView = UIFactory.default.createHorizontalStackView() + containerView.addSubview(hStackView) + hStackView.addArrangedSubview(titleLabel) + hStackView.addArrangedSubview(countLabel) + hStackView.addArrangedSubview(optionsButton) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + hStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalToSuperview().inset(12) + make.trailing.equalToSuperview() + make.centerY.equalToSuperview() + } + optionsButton.snp.makeConstraints { make in + make.size.equalTo(44) + } + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + countLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift new file mode 100644 index 0000000000..3abcff4fb5 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift @@ -0,0 +1,59 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableHeaderView: UITableViewHeaderFooterView { + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 44) + } + + // MARK: - Private methods + + private func setup() { + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(12) + } + separator.snp.makeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(12) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift new file mode 100644 index 0000000000..164217ca62 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift @@ -0,0 +1,190 @@ +import UIKit +import SSFModels +import SoraFoundation + +protocol ConnectedAccountsViewOutput: AnyObject { + func didLoad(view: ConnectedAccountsViewInput) + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) + func dismiss() + func pop() + func activateAccountDetails() + func didTapAccountScore(address: String?) +} + +enum ConnectedAccountsViewModel { + case wallet(WalletsManagmentCellViewModel) + case accounts([Accounts]) + + struct Accounts { + let title: String + let count: Int + let ecosystem: Ecosystem + let chains: [ChainModel] + } +} + +final class ConnectedAccountsViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = ConnectedAccountsViewLayout + + // MARK: Private properties + private let output: ConnectedAccountsViewOutput + + private var viewModels: [ConnectedAccountsViewModel] = [] + + // MARK: - Constructor + init( + output: ConnectedAccountsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = ConnectedAccountsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(WalletsManagmentTableCell.self) + rootView.tableView.registerClassForCell(ConnectedAccountsTableCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.closeButton.addAction { [weak self] in + self?.output.dismiss() + } + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.pop() + } + } +} + +// MARK: - ConnectedAccountsViewInput +extension ConnectedAccountsViewController: ConnectedAccountsViewInput { + func didReceive(viewModels: [ConnectedAccountsViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension ConnectedAccountsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - UITableViewDataSource + +extension ConnectedAccountsViewController: UITableViewDataSource { + func numberOfSections(in _: UITableView) -> Int { + viewModels.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModels[section] { + case .wallet: + return 1 + case let .accounts(accounts): + return accounts.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModels[indexPath.section] { + case let .wallet(viewModel): + guard let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) else { + return UITableViewCell() + } + cell.bind(to: viewModel) + cell.hideScore() + cell.delegate = self + return cell + case let .accounts(viewModels): + let cell = tableView.dequeueReusableCellWithType(ConnectedAccountsTableCell.self, forIndexPath: indexPath) + + var position: ConnectedAccountsTableCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = viewModels[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension ConnectedAccountsViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModels[section] { + case .wallet: + return nil + case .accounts: + let view = ConnectedAccountsTableHeaderView() + view.titleLabel.text = R.string.localizable.connectedAccountsCommon(preferredLanguages: selectedLocale.rLanguages) + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModels[section] { + case .wallet: + return 0 + case .accounts: + return 44 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModels[indexPath.section] { + case .wallet: + return 86 + case .accounts: + return 48 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModels[safe: indexPath.section], + case let .accounts(accountsModel) = section, + let viewModel = accountsModel[safe: indexPath.row] + else { + return + } + output.didSelect(viewModel: viewModel) + } +} + +extension ConnectedAccountsViewController: WalletsManagmentTableCellDelegate { + func didTapOptionsCell(with _: IndexPath?) { + output.activateAccountDetails() + } + + func didTapAccountScore(address: String?) { + output.didTapAccountScore(address: address) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift new file mode 100644 index 0000000000..1d4fbeeec1 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift @@ -0,0 +1,74 @@ +import UIKit + +final class ConnectedAccountsViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + let navigationBar: BaseNavigationBar = { + let bar = BaseNavigationBar() + bar.set(.push) + bar.backButton.backgroundColor = R.color.colorWhite8() + bar.backgroundColor = R.color.colorBlack19() + return bar + }() + + let closeButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconClose(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = R.color.colorBlack19() + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + navigationBar.backButton.rounded() + closeButton.rounded() + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + navigationBar.setRightViews([closeButton]) + closeButton.snp.makeConstraints { make in + make.size.equalTo(32) + } + + addSubview(navigationBar) + navigationBar.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + } + + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview() + make.bottom.equalTo(safeAreaLayoutGuide) + } + } + + private func applyLocalization() {} +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift new file mode 100644 index 0000000000..81f16d8942 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -0,0 +1,179 @@ +import Foundation +import SoraFoundation +import SSFModels +import SoraKeystore + +protocol ConnectedAccountsViewModelFactory { + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] +} + +final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFactory { + + private lazy var assetBalanceFormatterFactory = AssetBalanceFormatterFactory() + private let accountScoreFetcher: AccountStatisticsFetching + private let settings: SettingsManagerProtocol + + init( + accountScoreFetcher: AccountStatisticsFetching, + settings: SettingsManagerProtocol + ) { + self.accountScoreFetcher = accountScoreFetcher + self.settings = settings + } + + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] { + let walletViewModel = createUserViewModel( + from: wallet, + balance: balance, + locale: locale + ) + + let accountsViewModel = createAccountsViewModel( + chains: chains, + wallet: wallet, + locale: locale + ) + + let viewModel: [ConnectedAccountsViewModel] = [ + .wallet(walletViewModel), + .accounts(accountsViewModel) + ] + return viewModel + } + + // MARK: - Private methods + + private func createUserViewModel( + from wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + locale: Locale + ) -> WalletsManagmentCellViewModel { + var fiatBalance: String = "" + var dayChange: NSAttributedString? + if let balance = balance { + let formatter = tokenFormatter(for: balance.currency, locale: locale) + fiatBalance = formatter.stringFromDecimal(balance.totalFiatValue) ?? "" + dayChange = getDayChangeAttributedString( + currency: balance.currency, + dayChange: balance.dayChangePercent, + dayChangeValue: balance.dayChangeValue, + locale: locale + ) + } + + return WalletsManagmentCellViewModel( + isSelected: false, + walletName: wallet.name, + icon: wallet.icon(), + fiatBalance: fiatBalance, + dayChange: dayChange, + accountScoreViewModel: nil, + optionsAvailable: wallet.ecosystem.isRegular + ) + } + + private func createAccountsViewModel( + chains: [ChainModel], + wallet: MetaAccountModel, + locale: Locale + ) -> [ConnectedAccountsViewModel.Accounts] { + var accountsViewModel: [ConnectedAccountsViewModel.Accounts] = [] + + let mapped = chains.reduce([Ecosystem: [ChainModel]]()) { partialResult, chain in + var part = partialResult + switch chain.ecosystem { + case .substrate, .ethereum: + var possibleValues = partialResult[chain.ecosystem] ?? [] + possibleValues.append(chain) + part[chain.ecosystem] = possibleValues + case .ethereumBased: + var possibleValues = partialResult[.ethereum] ?? [] + possibleValues.append(chain) + part[.ethereum] = possibleValues + case .ton: + break + } + return part + } + + mapped.forEach { ecosystem, chains in + let title: String + var count: Int + switch ecosystem { + case .substrate: + title = R.string.localizable.connectedAccountsSubstrateTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ethereum, .ethereumBased: + title = R.string.localizable.connectedAccountsEthereumTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ton: + title = R.string.localizable.connectedAccountsTonTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + } + let accounts = ConnectedAccountsViewModel.Accounts( + title: title, + count: count, + ecosystem: ecosystem, + chains: chains + ) + accountsViewModel.append(accounts) + } + + return accountsViewModel.sorted(by: { $0.count > $1.count }) + } + + private func tokenFormatter(for currency: Currency, locale: Locale) -> TokenFormatter { + let balanceDisplayInfo = AssetBalanceDisplayInfo.forCurrency(currency) + let balanceTokenFormatter = assetBalanceFormatterFactory.createTokenFormatter(for: balanceDisplayInfo, usageCase: .detailsCrypto) + let balanceTokenFormatterValue = balanceTokenFormatter.value(for: locale) + return balanceTokenFormatterValue + } + + private func getDayChangeAttributedString( + currency: Currency, + dayChange: Decimal, + dayChangeValue: Decimal, + locale: Locale + ) -> NSAttributedString? { + let balanceTokenFormatterValue = tokenFormatter(for: currency, locale: locale) + let dayChangePercent = dayChange.percentString(locale: locale) ?? "" + + var dayChangeValue: String = balanceTokenFormatterValue.stringFromDecimal(abs(dayChangeValue)) ?? "" + dayChangeValue = "(\(dayChangeValue))" + let priceWithChangeString = [dayChangePercent, dayChangeValue].joined(separator: " ") + let priceWithChangeAttributed = NSMutableAttributedString(string: priceWithChangeString) + + let color = dayChange > 0 + ? R.color.colorGreen() + : R.color.colorRed() + + if let color = color, let colorLightGray = R.color.colorStrokeGray() { + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: color], + range: NSRange( + location: 0, + length: dayChangePercent.count + ) + ) + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: colorLightGray], + range: NSRange( + location: dayChangePercent.count + 1, + length: dayChangeValue.count + ) + ) + } + + return priceWithChangeAttributed + } +} diff --git a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift index 08276ac03c..5b6c888893 100644 --- a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift @@ -2,11 +2,17 @@ import Foundation import SoraFoundation import WalletConnectSign import UIKit +import SSFNetwork +import SSFModels final class WalletConnectCoordinator: DefaultCoordinator { + static let shared = WalletConnectCoordinator() + // MARK: - Private properties private let walletConnect: WalletConnectService = WalletConnectServiceImpl.shared + private let tonConnect: TonConnectService = ServiceAssembly.shared.tonConnectService() + private lazy var router: WalletConnectCoordinatorRouter = { WalletConnectCoordinatorRouterImpl() }() @@ -15,9 +21,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { ApplicationHandler() }() - override init() { + override private init() { super.init() walletConnect.set(listener: self) + Task { await tonConnect.set(listener: self) } applicationHandler.delegate = self } @@ -52,7 +59,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { extension WalletConnectCoordinator: WalletConnectServiceDelegate { func sign(request: Request, session: Session?) { - let coordinator = WalletConnectSessionCoordinator(router: router, request: request, session: session) + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .walletConnect(request: request, session: session) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -63,7 +73,10 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } func session(proposal: Session.Proposal) { - let coordinator = WalletConnectProposalCoordinator(router: router, proposal: proposal) + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: .walletConnect(proposal) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -74,6 +87,95 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } } +extension WalletConnectCoordinator: TonConnectServiceDelegate { + func send( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonConnect( + request: request, + walletId: walletId, + app: app + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: (any WalletConnectSessionModuleOutput)? + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonJsBridge( + invocationId: invocationId, + wallet: wallet, + dapp: dapp, + request: request, + delegate: delegate + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: (any WalletConnectProposalModuleOutput)? + ) { + let proposal: ConnectProposal + if let invocationId, let delegate { + proposal = .tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + ) + } else { + proposal = .tonConnect( + manifest: manifest, + requestPayload: requestPayload + ) + } + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: proposal + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } +} + // MARK: - ApplicationHandlerDelegate extension WalletConnectCoordinator: ApplicationHandlerDelegate { diff --git a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift index 305ce67960..b4b0ad39fe 100644 --- a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift @@ -1,13 +1,46 @@ import Foundation import WalletConnectSign +enum ConnectProposal { + case walletConnect(Session.Proposal) + case tonJsBridge( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String, + delegate: (any WalletConnectProposalModuleOutput)? + ) + case tonConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters + ) + + var walletConnectProposal: Session.Proposal? { + switch self { + case let .walletConnect(proposal): return proposal + case .tonJsBridge, .tonConnect: return nil + } + } + + var tonConnectManifest: TonConnectManifest? { + switch self { + case .walletConnect, .tonConnect: return nil + case let .tonJsBridge(manifest, _, _, _): return manifest + } + } +} + +enum ActionConnect { + case walletConnect(Session) + case tonConnect(app: TonConnectApp, delegate: (any WalletConnectProposalModuleOutput)?) +} + final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let proposal: Session.Proposal + private let proposal: ConnectProposal init( router: WalletConnectCoordinatorRouter, - proposal: Session.Proposal + proposal: ConnectProposal ) { self.router = router self.proposal = proposal @@ -26,7 +59,29 @@ final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFin // MARK: - Private methods private func runFlow() { - let module = WalletConnectProposalAssembly.configureModule(status: .proposal(proposal)) + let module: WalletConnectProposalModuleCreationResult? + switch proposal { + case let .walletConnect(proposal): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.walletConnect(proposal)) + ) + case let .tonJsBridge(manifest, requestPayload, invocationId, delegate): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + )) + ) + case let .tonConnect(manifest, requestPayload): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonConnect( + manifest: manifest, + requestPayload: requestPayload + )) + ) + } guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift index ca9ce28782..05f902fa45 100644 --- a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift @@ -3,17 +3,14 @@ import WalletConnectSign final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant init( router: WalletConnectCoordinatorRouter, - request: Request, - session: Session? + variant: ConnectRequestVariant ) { self.router = router - self.request = request - self.session = session + self.variant = variant } // MARK: - CoordinatorFinishOutput @@ -29,7 +26,7 @@ final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFini // MARK: - Private methods private func runFlow() { - let module = WalletConnectSessionAssembly.configureModule(request: request, session: session) { [weak self] inputData in + let module = WalletConnectSessionAssembly.configureModule(variant: variant) { [weak self] inputData in self?.presentConfirmation(inputData: inputData) } guard let controller = module?.view.controller else { diff --git a/fearless/Modules/CreateContact/CreateContactInteractor.swift b/fearless/Modules/CreateContact/CreateContactInteractor.swift index af23a825b9..00464fece5 100644 --- a/fearless/Modules/CreateContact/CreateContactInteractor.swift +++ b/fearless/Modules/CreateContact/CreateContactInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFCrypto final class CreateContactInteractor { // MARK: - Private properties diff --git a/fearless/Modules/CrossChain/CrossChainAssembly.swift b/fearless/Modules/CrossChain/CrossChainAssembly.swift index de917264a2..4f346deb3a 100644 --- a/fearless/Modules/CrossChain/CrossChainAssembly.swift +++ b/fearless/Modules/CrossChain/CrossChainAssembly.swift @@ -42,17 +42,10 @@ final class CrossChainAssembly { let existentialDepositService = ExistentialDepositService( operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) - let storageRequestPerformer: StorageRequestPerformer? = runtimeService.flatMap { - guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { - return nil - } - - return StorageRequestPerformerDefault(runtimeService: $0, connection: connection) - } + let storageRequestPerformer = StorageRequestPerformerDefault(chainRegistry: chainRegistry) let interactor = CrossChainInteractor( chainAssetFetching: chainAssetFetching, diff --git a/fearless/Modules/CrossChain/CrossChainInteractor.swift b/fearless/Modules/CrossChain/CrossChainInteractor.swift index 383b992095..b18184910f 100644 --- a/fearless/Modules/CrossChain/CrossChainInteractor.swift +++ b/fearless/Modules/CrossChain/CrossChainInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import BigInt import SSFExtrinsicKit import SSFModels +import SSFCrypto protocol CrossChainInteractorOutput: AnyObject { func didReceiveAccountInfo( @@ -202,7 +203,7 @@ final class CrossChainInteractor { do { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer?.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer?.performSingle(request, chain: chainAsset.chain) await MainActor.run { output?.didReceiveAssetAccountInfo(assetAccountInfo: assetAccountInfo) @@ -322,7 +323,7 @@ extension CrossChainInteractor: CrossChainInteractorInput { let chainAsset = ChainAsset(chain: destinationChain, asset: asset) let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = SystemAccountRequest(accountId: accountIdVariant, chainAsset: chainAsset) - let accountInfo: AccountInfo? = try await deps?.destinationStorageRequestPerformer?.performSingle(request) + let accountInfo: AccountInfo? = try await deps?.destinationStorageRequestPerformer?.performSingle(request, chain: chainAsset.chain) await MainActor.run { output?.didReceiveDestinationAccountInfo(accountInfo: accountInfo) diff --git a/fearless/Modules/CrossChain/CrossChainPresenter.swift b/fearless/Modules/CrossChain/CrossChainPresenter.swift index cd3959a42d..d022010f76 100644 --- a/fearless/Modules/CrossChain/CrossChainPresenter.swift +++ b/fearless/Modules/CrossChain/CrossChainPresenter.swift @@ -6,6 +6,7 @@ import SSFExtrinsicKit import SSFUtils import SSFModels import SSFQRService +import SSFCrypto protocol CrossChainViewInput: ControllerBackedProtocol, LoadableViewProtocol { func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) diff --git a/fearless/Modules/CrossChain/CrossChainViewController.swift b/fearless/Modules/CrossChain/CrossChainViewController.swift index ece2e86f75..7a1fa1a907 100644 --- a/fearless/Modules/CrossChain/CrossChainViewController.swift +++ b/fearless/Modules/CrossChain/CrossChainViewController.swift @@ -58,6 +58,7 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW super.viewDidLoad() output.didLoad(view: self) configure() + configureInputAccessoryView() } override func viewWillAppear(_ animated: Bool) { @@ -101,20 +102,50 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW self?.output.didTapPasteButton() } - let locale = localizationManager?.selectedLocale ?? Locale.current - let accessoryView = UIFactory - .default - .createAmountAccessoryView(for: self, locale: locale) - rootView.amountView.textField.inputAccessoryView = accessoryView rootView.amountView.textField.delegate = self rootView.searchView.textField.delegate = self updatePreviewButton() } private func updatePreviewButton() { - let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && rootView.searchView.isValid + let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && (rootView.searchView.isValid != nil) rootView.actionButton.set(enabled: isEnabled, changeStyle: true) } + + private func configureInputAccessoryView() { + let locale = localizationManager?.selectedLocale ?? Locale.current + let frame = CGRect( + x: 0.0, + y: 0.0, + width: UIScreen.main.bounds.width, + height: UIConstants.accessoryBarHeight + ) + + let toolBar = AmountInputAccessoryView(frame: frame) + toolBar.actionDelegate = self + let actions: [ViewSelectorAction] = [ + ViewSelectorAction(title: "75%", selector: #selector(toolBar.actionSelect75)), + ViewSelectorAction(title: "50%", selector: #selector(toolBar.actionSelect50)), + ViewSelectorAction(title: "25%", selector: #selector(toolBar.actionSelect25)) + ] + + let doneTitle = R.string.localizable.commonDone(preferredLanguages: locale.rLanguages) + let doneAction = ViewSelectorAction( + title: doneTitle, + selector: #selector(toolBar.actionSelectDone) + ) + + let accessoryView = UIFactory + .default + .createActionsAccessoryView( + for: actions, + doneAction: doneAction, + target: self, + spacing: UIConstants.accessoryItemsSpacing, + toolBar: toolBar + ) + rootView.amountView.textField.inputAccessoryView = accessoryView + } } // MARK: - CrossChainViewInput diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift index 892ca4db56..3c46725143 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift @@ -3,6 +3,7 @@ import SSFXCM import RobinHood import BigInt import SSFModels +import SSFCrypto protocol CrossChainConfirmationInteractorOutput: AnyObject { func didTransfer(result: Result) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift index 2d9fbc36c7..a65bb7bf05 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels typealias CrossChainConfirmationModuleCreationResult = ( view: CrossChainConfirmationViewInput, @@ -10,8 +9,7 @@ protocol CrossChainConfirmationRouterInput: ErrorPresentable, BaseErrorPresentable, ModalAlertPresenting, - SheetAlertPresentable -{ + SheetAlertPresentable { func complete( on view: ControllerBackedProtocol?, title: String, diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift index a6e636d87d..8b92e671ed 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift @@ -10,7 +10,7 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let originSymbolViewModel = SymbolViewModel( - symbolViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: originShadowColor ) @@ -18,13 +18,13 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let destSymbolViewModel = SymbolViewModel( - symbolViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: destShadowColor ) let doubleImageViewViewModel = PolkaswapDoubleSymbolViewModel( - leftViewModel: originSymbolViewModel.symbolViewModel, - rightViewModel: destSymbolViewModel.symbolViewModel, + leftViewModel: originSymbolViewModel.iconViewModel, + rightViewModel: destSymbolViewModel.iconViewModel, leftShadowColor: originShadowColor, rightShadowColor: destShadowColor ) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift index 1e9c2d76db..ee4e351d6c 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift @@ -41,23 +41,11 @@ final class CrossChainDepsContainer { originalChainAsset: originalChainAsset, originalRuntimeMetadataItem: originalRuntimeMetadataItem ) - let existentialDepositService = (destChainModel?.chainId).map { - ExistentialDepositService( - operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: $0 - ) - } - let storageRequestPerformer: StorageRequestPerformer? = (destChainModel?.chainId).flatMap { - guard - let runtimeService = chainRegistry.getRuntimeProvider(for: $0), - let connection = chainRegistry.getConnection(for: $0) - else { - return nil - } - - return StorageRequestPerformerDefault(runtimeService: runtimeService, connection: connection) - } + let existentialDepositService = ExistentialDepositService( + operationManager: OperationManagerFacade.sharedManager, + chainRegistry: chainRegistry + ) + let storageRequestPerformer = StorageRequestPerformerDefault(chainRegistry: chainRegistry) let deps = CrossChainConfirmationDeps( xcmServices: xcmServices, @@ -99,12 +87,11 @@ final class CrossChainDepsContainer { cryptoType: cryptoType, chainMetadata: originalRuntimeMetadataItem, accountId: accountId, - signingWrapperData: signingWrapperData, - chainType: originalChainAsset.chain.chainBaseType + signingWrapperData: signingWrapperData ) let sourceConfig = ApplicationConfig.shared - let services = XcmAssembly.createExtrincisServices( + let services = try XcmAssembly.createExtrincisServices( fromChainData: fromChainData, sourceConfig: sourceConfig, chainRegistry: ChainRegistryFacade.sharedRegistry @@ -119,9 +106,7 @@ final class CrossChainDepsContainer { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift index 58d83c28f9..a5b864d12e 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment class CrowdloanContributionInteractor: CrowdloanContributionInteractorInputProtocol, RuntimeConstantFetching { weak var presenter: CrowdloanContributionInteractorOutputProtocol! diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift index c31f3d9d79..baf9d9c5df 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct CrowdloanContributionConfirmData { let contribution: Decimal diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift index 6f42c41f38..44d3cd0f54 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanContributionConfirmInteractor: CrowdloanContributionInteractor, AccountFetching { var confirmPresenter: CrowdloanContributionConfirmInteractorOutputProtocol? { diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift index 2eecfc1c88..b425faef29 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift @@ -1,5 +1,6 @@ import SoraFoundation import BigInt +import SSFModels protocol CrowdloanContributionConfirmViewProtocol: ControllerBackedProtocol, Localizable, LoadableViewProtocol { func didReceiveAsset(viewModel: AssetBalanceViewModelProtocol) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift index 45c02f6133..907bca40db 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift @@ -116,8 +116,7 @@ struct CrowdloanContributionConfirmViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift index 6a8c413b2f..4fea8f0bd0 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift @@ -107,8 +107,7 @@ struct CrowdloanContributionSetupViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift index e9a5ebb28e..01483a29b0 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift @@ -2,11 +2,14 @@ import UIKit import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanListInteractor: RuntimeConstantFetching { weak var presenter: CrowdloanListInteractorOutputProtocol! - let selectedMetaAccount: MetaAccountModel + var selectedMetaAccount: MetaAccountModel? { + SelectedWalletSettings.shared.value + } let crowdloanOperationFactory: CrowdloanOperationFactoryProtocol let jsonDataProviderFactory: JsonDataProviderFactoryProtocol let chainRegistry: ChainRegistryProtocol @@ -32,7 +35,6 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { } init( - selectedMetaAccount: MetaAccountModel, settings: CrowdloanChainSettings, chainRegistry: ChainRegistryProtocol, crowdloanOperationFactory: CrowdloanOperationFactoryProtocol, @@ -44,7 +46,6 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { logger: LoggerProtocol? = nil, eventCenter: EventCenterProtocol ) { - self.selectedMetaAccount = selectedMetaAccount self.crowdloanOperationFactory = crowdloanOperationFactory self.chainRegistry = chainRegistry self.jsonDataProviderFactory = jsonDataProviderFactory @@ -63,7 +64,7 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { connection: ChainConnection, runtimeService: RuntimeCodingServiceProtocol ) { - guard !crowdloans.isEmpty else { + guard !crowdloans.isEmpty, let selectedMetaAccount else { presenter.didReceiveContributions(result: .success([:])) return } @@ -266,7 +267,9 @@ extension CrowdloanListInteractor { } func handleSelectionChange(to chain: ChainModel) { - guard let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { + guard + let selectedMetaAccount, + let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { presenter.didReceiveAccountInfo( result: .failure(ChainAccountFetchingError.accountNotExists) ) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift index 8c19ef62b5..f2994f0395 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift @@ -80,7 +80,6 @@ struct CrowdloanListViewFactory { ) return CrowdloanListInteractor( - selectedMetaAccount: selectedMetaAccount, settings: state.settings, chainRegistry: chainRegistry, crowdloanOperationFactory: crowdloanOperationFactory, diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift index ac2cc908f7..9d1f7c7d62 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment extension CrowdloanListInteractor: CrowdloanListInteractorInputProtocol { func setup() { @@ -13,7 +14,9 @@ extension CrowdloanListInteractor: CrowdloanListInteractorInputProtocol { return } - guard let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { + guard + let selectedMetaAccount, + let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { presenter.didReceiveAccountInfo( result: .failure(ChainAccountFetchingError.accountNotExists) ) diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift new file mode 100644 index 0000000000..b66dc7baaf --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -0,0 +1,93 @@ +import UIKit + +final class DappBrowserFeaturedCell: UICollectionViewCell { + let posterImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleToFill + imageView.clipsToBounds = true + return imageView + }() + let iconViewImage: UIImageView = { + let imageView = UIImageView() + imageView.clipsToBounds = true + return imageView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + } + + override func prepareForReuse() { + super.prepareForReuse() + posterImageView.kf.cancelDownloadTask() + posterImageView.image = nil + iconViewImage.kf.cancelDownloadTask() + iconViewImage.image = nil + } + + func configure(model: DappBrowserFeaturedViewModel) { + model.poster.loadImage( + on: posterImageView, + targetSize: bounds.size, + animated: true, + cornerRadius: 0, + completionHandler: nil + ) + model.icon.loadImage( + on: iconViewImage, + placholder: R.image.iconFearlessSmall(), + targetSize: CGSize(width: 40, height: 40), + animated: true + ) + titleLabel.text = model.dappName + descriptionLabel.text = model.dappDescription + } + + private func setup() { + contentView.addSubview(posterImageView) + posterImageView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 8) + posterImageView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + posterImageView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.leading.bottom.equalToSuperview().inset(16) + make.size.equalTo(40) + } + vStackView.snp.makeConstraints { make in + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalTo(iconViewImage.snp.centerY) + } + } +} diff --git a/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift new file mode 100644 index 0000000000..4aec9f7801 --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift @@ -0,0 +1,122 @@ +import UIKit +import SoraUI + +struct DappBrowserListCellViewModel { + let icon: ImageViewModelProtocol + let iconUrl: URL + let name: String + let description: String? + let dapp: TonDapp +} + +final class DappBrowserListCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let iconViewImage: UIImageView = { + let imageView = UIImageView() + imageView.clipsToBounds = true + return imageView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + iconViewImage.kf.cancelDownloadTask() + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + } + + func configure( + model: DappBrowserListCellViewModel, + position: Position + ) { + titleLabel.text = model.name + descriptionLabel.text = model.description + iconViewImage.kf.setImage(with: model.iconUrl) + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + containerView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 0) + containerView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.size.equalTo(40) + make.leading.equalToSuperview().offset(12) + make.centerY.equalToSuperview() + } + vStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalToSuperview() + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserAssembly.swift b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift new file mode 100644 index 0000000000..5d711cde5c --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift @@ -0,0 +1,53 @@ +import UIKit +import SoraFoundation +import RobinHood +import SSFSingleValueCache +import SSFModels + +final class DappBrowserAssembly { + static func configureModule( + wallet: MetaAccountModel + ) -> DappBrowserModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserInteractor( + dappProvider: createProvider(), + appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), + chainsRepository: ServiceAssembly.shared.asyncChainModelRepository(sortDescriptors: []), + filterStorage: ServiceAssembly.shared.userDefaults, + eventCenter: ServiceAssembly.shared.eventCenter + ) + let router = DappBrowserRouter() + + let presenter = DappBrowserPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager, + logger: ServiceAssembly.shared.logger, + viewModelFactory: DappBrowserViewModelFactoryImpl(), + wallet: wallet + ) + + let view = DappBrowserViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } + + private static func createProvider() -> AnySingleValueProvider<[DappCategory]> { + let repository: CoreDataRepository = SingleValueCacheRepositoryFactoryDefault().createSingleValueCacheRepository() + let source = DappDataSource() + let trigger: DataProviderEventTrigger = [.onFetchPage, .onAll] + let provider = SingleValueProvider( + targetIdentifier: "dapp.remote.target.identifier", + source: AnySingleValueProviderSource(source), + repository: AnyDataProviderRepository(repository), + updateTrigger: trigger, + executionQueue: OperationManagerFacade.sharedDefaultQueue + ) + + return AnySingleValueProvider(provider) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift new file mode 100644 index 0000000000..b1bff6c8a1 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift @@ -0,0 +1,105 @@ +import UIKit +import SoraKeystore +import RobinHood +import SSFModels + +protocol DappBrowserInteractorOutput: AnyObject { + func didReceive(dapps: Result<[DappCategory], Error>) + func didUpdate(wallet: MetaAccountModel) +} + +final class DappBrowserInteractor { + // MARK: - Private properties + + private enum Constants { + static let filterKey = "jp.co.soramitsu.fearless.dapp.browser.filter" + } + + private weak var output: DappBrowserInteractorOutput? + private let dappProvider: AnySingleValueProvider<[DappCategory]> + private let appRepository: AsyncAnyRepository + private let chainsRepository: AsyncAnyRepository + private let filterStorage: SettingsManagerProtocol + private let eventCenter: EventCenterProtocol + + init( + dappProvider: AnySingleValueProvider<[DappCategory]>, + appRepository: AsyncAnyRepository, + chainsRepository: AsyncAnyRepository, + filterStorage: SettingsManagerProtocol, + eventCenter: EventCenterProtocol + ) { + self.dappProvider = dappProvider + self.appRepository = appRepository + self.chainsRepository = chainsRepository + self.filterStorage = filterStorage + self.eventCenter = eventCenter + eventCenter.add(observer: self) + } + + private func setupDappProvider() { + let updateClosure = { [weak self] (changes: [DataProviderChange<[DappCategory]>]) in + guard let dapps = changes.reduceToLastChange() else { + return + } + self?.output?.didReceive(dapps: .success(dapps)) + } + + let failureClosure: (any Error) -> Void = { [weak self] (error: Error) in + self?.output?.didReceive(dapps: .failure(error)) + } + + dappProvider.addObserver( + self, + deliverOn: nil, + executing: updateClosure, + failing: failureClosure, + options: DataProviderObserverOptions() + ) + } +} + +// MARK: - DappBrowserInteractorInput + +extension DappBrowserInteractor: DappBrowserInteractorInput { + var connectedApps: [TonConnectApp] { + get async throws { + try await appRepository.fetchAll() + } + } + + var chains: [ChainModel] { + get async throws { + try await chainsRepository.fetchAll() + } + } + + var filter: NetworkManagmentFilter { + get { + let id = filterStorage.string(for: Constants.filterKey) + return NetworkManagmentFilter(identifier: id) + } + set { + filterStorage.set(value: newValue.identifier, for: Constants.filterKey) + } + } + + func setup(with output: DappBrowserInteractorOutput) { + self.output = output + setupDappProvider() + } +} + +extension DappBrowserInteractor: EventVisitorProtocol { + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + output?.didUpdate(wallet: event.account) + } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + output?.didUpdate(wallet: event.account) + } + + func processSelectedAccountChanged(event: SelectedAccountChanged) { + output?.didUpdate(wallet: event.account) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift new file mode 100644 index 0000000000..6334ab6c02 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -0,0 +1,282 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserViewInput: ControllerBackedProtocol { + func didReceive(viewModel: [DappBrowserViewModel]) + func didReceive(walletName: String) + func didReceive(viewModel: DappBrowsetNetworkFilterViewModel?) +} + +protocol DappBrowserInteractorInput: AnyObject { + var connectedApps: [TonConnectApp] { get async throws } + var chains: [ChainModel] { get async throws } + var filter: NetworkManagmentFilter { get set } + func setup(with output: DappBrowserInteractorOutput) +} + +final class DappBrowserPresenter { + // MARK: Private properties + + private weak var view: DappBrowserViewInput? + private let router: DappBrowserRouterInput + private let interactor: DappBrowserInteractorInput + private let logger: LoggerProtocol + private let viewModelFactory: DappBrowserViewModelFactory + private var wallet: MetaAccountModel + + private var dapps: [DappCategory]? + private var page: DappBrowserViewControllerPage = .dapps + + // MARK: - Constructors + + init( + interactor: DappBrowserInteractorInput, + router: DappBrowserRouterInput, + localizationManager: LocalizationManagerProtocol, + logger: LoggerProtocol, + viewModelFactory: DappBrowserViewModelFactory, + wallet: MetaAccountModel + ) { + self.interactor = interactor + self.router = router + self.logger = logger + self.viewModelFactory = viewModelFactory + self.wallet = wallet + + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideTableViewModel() { + guard let dapps else { + return + } + Task { + let viewModel = viewModelFactory.buildViewModel( + dapps: dapps, + connected: try await interactor.connectedApps, + chains: try await interactor.chains, + networkFilter: interactor.filter, + locale: selectedLocale, + wallet: wallet, + page: page + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } + + private func provideWalletViewModel() { + Task { @MainActor in + view?.didReceive(walletName: wallet.name) + } + } + + private func provideNetworkViewModel() { + Task { + let viewModel = viewModelFactory.buildNetworkFilterViewModel( + chains: try await interactor.chains, + filter: interactor.filter, + locale: selectedLocale, + wallet: wallet + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } + + private func observTonConnect() { + Task { + await ServiceAssembly.shared.tonConnectService().set(listener: self) + } + } +} + +// MARK: - DappBrowserViewOutput + +extension DappBrowserPresenter: DappBrowserViewOutput { + func didTapSearchButton() { + Task { + var appsForSearch: [TonDapp] = dapps.or([]) + .map { $0.apps } + .reduce([], +) + .uniq(predicate: { $0 }) + switch page { + case .dapps: + break + case .connected: + let connectedApps = try await interactor.connectedApps + appsForSearch = appsForSearch.filter { app in + connectedApps.contains(where: { $0.appUrl.host == app.url.host }) + } + } + Task { @MainActor [appsForSearch] in + let title = R.string.localizable.commonSearch(preferredLanguages: selectedLocale.rLanguages) + router.showList( + from: view, + dapps: appsForSearch, + title: title, + wallet: wallet + ) + } + } + } + + func didSelect(page: DappBrowserViewControllerPage) { + self.page = page + provideTableViewModel() + } + + func didSelect(dapp: TonDapp) { + let confirmAction = SheetAlertPresentableAction(title: R.string.localizable.commonConfirm(preferredLanguages: selectedLocale.rLanguages), style: .pinkBackgroundWhiteText ,handler: { [weak self] in + guard let self else { + return + } + + self.router.showDapp( + from: self.view, + dapp: dapp, + wallet: self.wallet, + moduleOutput: self + ) + }) + + let termsAction = SheetAlertPresentableAction(title: R.string.localizable.aboutTermsAndConditions(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundPinkText, handler: { [weak self] in + guard let self, let view = self.view else { + return + } + + self.router.showWeb(url: ApplicationConfig.shared.termsURL, from: view, style: .modal) + }) + + let declineAction = SheetAlertPresentableAction(title: R.string.localizable.commonDecline(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundWhiteText) + + router.present( + message: R.string.localizable.webThirdPartyWarningDescription(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.webThirdPartyWarningTitle(preferredLanguages: selectedLocale.rLanguages), + closeAction: nil, + from: view, + actions: [confirmAction, declineAction, termsAction] + ) + } + + func didTapOnWalletSelectButton() { +// router.showWalletManagment( +// from: view, +// moduleOutput: self +// ) + } + + func didTapOnNetworkSelectButton() { + Task { + let allChains = try await interactor.chains + let hasDappChains = allChains.filter { chainModel in + dapps.or([]).contains { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains(chainModel.chainId) + } + } + } + Task { @MainActor in + router.showSelectNetwork( + from: view, + wallet: wallet, + chains: hasDappChains, + delegate: self, + initialFilter: interactor.filter + ) + } + } + } + + func didTapOnSection(with dapps: [TonDapp], title: String) { + let all = R.string.localizable.stakingAnalyticsPeriodAll( + preferredLanguages: selectedLocale.rLanguages + ) + router.showList( + from: view, + dapps: dapps, + title: [all, title].joined(separator: " "), + wallet: wallet + ) + } + + func didLoad(view: DappBrowserViewInput) { + self.view = view + interactor.setup(with: self) + provideWalletViewModel() + provideNetworkViewModel() + observTonConnect() + } +} + +// MARK: - DappBrowserInteractorOutput + +extension DappBrowserPresenter: DappBrowserInteractorOutput { + func didReceive(dapps: Result<[DappCategory], any Error>) { + switch dapps { + case let .success(dapps): + self.dapps = dapps + provideTableViewModel() + provideNetworkViewModel() + case let .failure(error): + logger.customError(error) + } + } + + func didUpdate(wallet: MetaAccountModel) { + self.wallet = wallet + provideWalletViewModel() + } +} + +// MARK: - Localizable + +extension DappBrowserPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserPresenter: DappBrowserModuleInput {} + +// MARK: - WalletsManagmentModuleOutput + +extension DappBrowserPresenter: WalletsManagmentModuleOutput { + func selectedWallet(_ wallet: MetaAccountModel, for contextTag: Int) { + self.wallet = wallet + provideWalletViewModel() + } + + func showAddNewWallet() { + router.showCreateNewWallet(ecosystem: nil, from: view) + } +} + +// MARK: - NetworkManagmentModuleOutput + +extension DappBrowserPresenter: NetworkManagmentModuleOutput { + func did(select: NetworkManagmentFilter, contextTag: Int?) { + interactor.filter = select + provideTableViewModel() + provideNetworkViewModel() + } +} + +// MARK: - TonWebBridgeModuleOutput + +extension DappBrowserPresenter: TonWebBridgeModuleOutput { + func didDisconnect() { + provideTableViewModel() + } +} + +// MARK: - TonConnectServiceDelegate + +extension DappBrowserPresenter: TonConnectServiceDelegate { + func didDisconnectedApp() { + provideTableViewModel() + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift new file mode 100644 index 0000000000..eec88fdde0 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift @@ -0,0 +1,36 @@ +import SSFModels + +typealias DappBrowserModuleCreationResult = ( + view: DappBrowserViewInput, + input: DappBrowserModuleInput +) + +protocol DappBrowserRouterInput: AccountManagementPresentable, SheetAlertPresentable, WebPresentable { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel, + moduleOutput: TonWebBridgeModuleOutput? + ) + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserModuleInput: AnyObject {} + +protocol DappBrowserModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowser/DappBrowserRouter.swift b/fearless/Modules/DappBrowser/DappBrowserRouter.swift new file mode 100644 index 0000000000..5e880cb3d4 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserRouter.swift @@ -0,0 +1,68 @@ +import Foundation +import SSFModels + +final class DappBrowserRouter: DappBrowserRouterInput { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) { + guard + let module = WalletsManagmentAssembly.configureModule( + shouldSaveSelected: true, + moduleOutput: moduleOutput + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) { + guard + let module = NetworkManagmentAssembly.configureModule( + initialFilter: initialFilter, + wallet: wallet, + chains: chains, + contextTag: nil, + moduleOutput: delegate + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel, + moduleOutput: TonWebBridgeModuleOutput? + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet, moduleOutput: moduleOutput) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) { + guard let module = DappBrowserListAssembly.configureModule(title: title, dapps: dapps, wallet: wallet) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift new file mode 100644 index 0000000000..d0bed2fe8b --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -0,0 +1,291 @@ +import UIKit +import SoraUI +import SoraFoundation + +protocol DappBrowserViewOutput: AnyObject { + func didLoad(view: DappBrowserViewInput) + func didSelect(dapp: TonDapp) + func didTapOnWalletSelectButton() + func didTapOnNetworkSelectButton() + func didTapOnSection(with dapps: [TonDapp], title: String) + func didTapSearchButton() + func didSelect(page: DappBrowserViewControllerPage) +} + +final class DappBrowserViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserViewLayout + + // MARK: Private properties + + private let output: DappBrowserViewOutput + + private var viewModel: [DappBrowserViewModel] = [] + + // MARK: - Constructor + + init( + output: DappBrowserViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = DappBrowserViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + rootView.segmentedControl.delegate = self + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.featuredView.didSelectApp = { [weak self] index in + guard + case let .featured(models) = self?.viewModel[safe: 0], + let dapp = models[safe: index]?.dapp + else { + return + } + self?.output.didSelect(dapp: dapp) + } + rootView.switchWalletButton.addAction { [weak self] in + self?.output.didTapOnWalletSelectButton() + } + rootView.selectNetworkButton.addAction { [weak self] in + self?.output.didTapOnNetworkSelectButton() + } + rootView.searchButton.addAction { [weak self] in + self?.output.didTapSearchButton() + } + } + + private func didTapOnSeeAll(for section: Int) { + guard + let section = viewModel[safe: section], + case let .section(sectionViewModel) = section + else { + return + } + output.didTapOnSection(with: sectionViewModel.dapps, title: sectionViewModel.header.title) + } +} + +// MARK: - DappBrowserViewInput + +extension DappBrowserViewController: DappBrowserViewInput { + func didReceive(viewModel: [DappBrowserViewModel]) { + self.viewModel = viewModel + rootView.tableView.reloadData() + if let dataSource = viewModel.first(where: { $0.featured != nil })?.featured { + rootView.featuredView.set(dataSource: dataSource) + } + let sections = IndexSet(integersIn: 0.. Int { + viewModel.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModel[section] { + case .featured: + return 1 + case let .section(sectionList): + return sectionList.list.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModel[indexPath.section] { + case .featured: + let cell = UITableViewCell() + cell.contentView.addSubview(rootView.featuredView) + cell.selectionStyle = .none + cell.backgroundColor = .clear + rootView.featuredView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview() + } + return cell + case let .section(sectionList): + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self, forIndexPath: indexPath) + + var position: DappBrowserListCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = sectionList.list[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModel[section] { + case .featured: + return nil + case let .section(sectionList): + let view = DappBrowserSectionHeaderView() + view.allTapAction = { [weak self] in + self?.didTapOnSeeAll(for: section) + } + view.locale = selectedLocale + let viewModel = sectionList.header + view.configure(model: viewModel) + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModel[section] { + case .featured: + return 0 + case .section: + return 42 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModel[indexPath.section] { + case .featured: + return UIScreen.width / 3.4 + case .section: + return 64 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModel[safe: indexPath.section], + case let .section(sectionListViewModel) = section, + let dapp = sectionListViewModel.dapps[safe: indexPath.row] + else { + return + } + output.didSelect(dapp: dapp) + } +} + +// MARK: - FWSegmentedControlDelegate + +enum DappBrowserViewControllerPage: Int { + case dapps + case connected +} + +extension DappBrowserViewController: FWSegmentedControlDelegate { + func didSelect(_ segmentIndex: Int) { + guard let page = DappBrowserViewControllerPage(rawValue: segmentIndex) else { + return + } + output.didSelect(page: page) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable.emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + let page = DappBrowserViewControllerPage(rawValue: rootView.segmentedControl.selectedSegmentIndex) + switch page { + case .dapps: + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) + case .connected: + emptyView.text = R.string.localizable.dappNoConnectedDappsTitle(preferredLanguages: selectedLocale.rLanguages) + case nil: + break + } + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.tableContainer + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModel.compactMap { $0.section }.first == nil + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModel.swift b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift new file mode 100644 index 0000000000..683e887075 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift @@ -0,0 +1,30 @@ +import Foundation + +enum DappBrowserViewModel { + case featured([DappBrowserFeaturedViewModel]) + case section(ListSection) + + struct ListSection { + let header: DappBrowserSectionHeaderViewViewModel + let list: [DappBrowserListCellViewModel] + let dapps: [TonDapp] + } + + var featured: [DappBrowserFeaturedViewModel]? { + switch self { + case let .featured(featured): + return featured + case .section: + return nil + } + } + + var section: ListSection? { + switch self { + case .featured: + return nil + case let .section(list): + return list + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift new file mode 100644 index 0000000000..fea88e1e8f --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -0,0 +1,270 @@ +import Foundation +import SoraFoundation +import SSFModels + +struct DappBrowsetNetworkFilterViewModel { + let networkName: String + let image: ImageViewModelProtocol? +} + +protocol DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel + ) -> DappBrowsetNetworkFilterViewModel? +} + +final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] { + switch page { + case .dapps: + return buildDappsPageViewModel( + dapps: dapps, + chains: chains, + networkFilter: networkFilter, + locale: locale, + wallet: wallet + ) + case .connected: + return buildConnectedPageViewModel( + wallet: wallet, + connected: connected, + locale: locale + ) + } + } + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel + ) -> DappBrowsetNetworkFilterViewModel? { + switch wallet.ecosystem { + case .regular: + let selectedFilterName: String + let selectedFilterImage: ImageViewModelProtocol? + switch filter { + case let .chain(id): + let selectedChain = chains.first(where: { $0.chainId == id }) + selectedFilterName = selectedChain?.name ?? "" + selectedFilterImage = selectedChain?.icon.map { RemoteImageViewModel(url: $0) } + case .all: + selectedFilterName = R.string.localizable.chainSelectionAllNetworks( + preferredLanguages: locale.rLanguages + ) + selectedFilterImage = filter.filterImage + case .popular: + selectedFilterName = R.string.localizable.networkManagementPopular(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + case .favourite: + selectedFilterName = R.string.localizable.networkManagmentFavourite(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + } + return DappBrowsetNetworkFilterViewModel( + networkName: selectedFilterName, + image: selectedFilterImage + ) + case .ton: + return DappBrowsetNetworkFilterViewModel( + networkName: "Ton Mainnet", + image: BundleImageViewModel(image: R.image.tonIcon()) + ) + } + } + + // MARK: - Private methods + + private func buildDappsPageViewModel( + dapps: [DappCategory], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + + if let top = dapps.first(where: { $0.type == .top }) { + let topViewModel = buildFeaturedViewModel(dapps: top.apps) + viewModel.append(topViewModel) + } + + switch networkFilter { + case .all: + let sections = dapps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3) } + viewModel.append(contentsOf: sections) + case let .chain(chain): + let chainApps = dapps.filter { dapp in + dapp.apps.contains(where: { $0.chains.contains(chain) }) + } + let sections = chainApps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3)} + viewModel.append(contentsOf: sections) + case .popular: + let popularChains = chains + .filter { $0.rank != nil } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: popularChains, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + case .favourite: + let favourite = chains + .filter { wallet.favouriteChainIds.contains($0.chainId) == true } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: favourite, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + } + + return viewModel + } + + private func buildConnectedPageViewModel( + wallet: MetaAccountModel, + connected: [TonConnectApp], + locale: Locale + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + let walletApps = connected.filter { $0.walletId == wallet.metaId && $0.connectionType == .js } + + if walletApps.isNotEmpty { + let apps = connected + .filter { $0.walletId == wallet.metaId } + .map { + TonDapp( + identifier: $0.identifier, + chains: ["\(TonConstants.tonChainId)", "\(TonConstants.testnetChainId)"], + name: $0.name, + description: nil, + icon: $0.iconUrl ?? TonConstants.tonIcon, + background: nil, + url: $0.appUrl + ) + } + let connectedViewModel = buildSectionViewModel( + category: .init( + type: .connected, + apps: apps + ), + locale: locale, + maxInSection: .max + ) + if let connectedViewModel { + viewModel.append(connectedViewModel) + } + } + return viewModel + } + + private func buildSection( + dapps: [DappCategory], + chains: [ChainModel.Id], + locale: Locale, + maxInSection: Int + ) -> [DappBrowserViewModel] { + let apps = dapps.filter { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains { chainId in + chains.contains(chainId) + } + } + } + let sections = apps.map { buildSectionViewModel(category: $0, locale: locale, maxInSection: maxInSection)} + return sections.compactMap { $0 } + } + + private func buildFeaturedViewModel( + dapps: [TonDapp] + ) -> DappBrowserViewModel { + let featured = dapps.map { + DappBrowserFeaturedViewModel( + poster: RemoteImageViewModel(url: $0.background) ?? BundleImageViewModel(image: R.image.featuredBanner()), + icon: RemoteImageViewModel(url: $0.icon), + dappName: $0.name, + dappDescription: $0.description ?? "", + dapp: $0 + ) + } + let viewModel = DappBrowserViewModel.featured(featured) + return viewModel + } + + private func buildSectionViewModel( + category: DappCategory, + locale: Locale, + maxInSection: Int + ) -> DappBrowserViewModel? { + guard let title = getTitle(for: category.type, locale: locale) else { + return nil + } + let header = DappBrowserSectionHeaderViewViewModel( + title: title, + isAllHidden: category.apps.count <= maxInSection + ) + let list = category.apps.prefix(maxInSection).map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.icon), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + let listSection = DappBrowserViewModel.ListSection( + header: header, + list: list, + dapps: category.apps + ) + let viewModel = DappBrowserViewModel.section(listSection) + return viewModel + } + + private func getTitle( + for category: DappCategoryType, + locale: Locale + ) -> String? { + switch category { + case .connected: + return R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) + case .featured: + return R.string.localizable.dappCategoryFeaturedTitle(preferredLanguages: locale.rLanguages) + case .utilities: + return R.string.localizable.dappCategoryUtilitiesTitle(preferredLanguages: locale.rLanguages) + case .nft: + return R.string.localizable.dappCategoryNftTitle(preferredLanguages: locale.rLanguages) + case .defi: + return R.string.localizable.dappCategoryDefiTitle(preferredLanguages: locale.rLanguages) + case .top: + return nil + case .explorers: + return "Explorers" + } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift new file mode 100644 index 0000000000..f3690cc2b3 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift @@ -0,0 +1,265 @@ +import UIKit + +struct DappBrowserFeaturedViewModel { + let poster: ImageViewModelProtocol + let icon: ImageViewModelProtocol + let dappName: String + let dappDescription: String + let dapp: TonDapp +} + +final class DappBrowserFeaturedView: UIView { + private enum Constants { + static let numberOfAdditionalItems = 5 + } + + var didSelectApp: ((Int) -> Void)? + + private var dataSource = [DappBrowserFeaturedViewModel]() + + private lazy var collectionView = CollectionView( + frame: .zero, + collectionViewLayout: createLayout() + ) + + private var indexOfCellBeforeDragging = 0 + private var slideshowTask: Task? + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + collectionView.frame = bounds + } + + override func didMoveToSuperview() { + guard superview != nil else { + stopSlideShow() + return + } + startSlideShow() + } + + func set(dataSource: [DappBrowserFeaturedViewModel]) { + let dataSource = (0 ..< Constants.numberOfAdditionalItems) + .reduce(into: [DappBrowserFeaturedViewModel]()) { partialResult, _ in + partialResult = partialResult + dataSource + } + self.dataSource = dataSource + + collectionView.alpha = 0 + collectionView.reloadData() + collectionView.layoutIfNeeded() + guard !dataSource.isEmpty else { return } + DispatchQueue.main.async { + self.collectionView.scrollToItem( + at: IndexPath( + item: 0, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + UIView.animate(withDuration: 0.2) { + self.collectionView.alpha = 1.0 + } + self.startSlideShowTask() + } + } + + // MARK: - Private methods + + private func setup() { + collectionView.contentInsetAdjustmentBehavior = .never + collectionView.backgroundColor = .clear + collectionView.showsHorizontalScrollIndicator = false + collectionView.decelerationRate = .fast + collectionView.dataSource = self + collectionView.delegate = self + collectionView.registerClassForCell(DappBrowserFeaturedCell.self) + + addSubview(collectionView) + } + + private func createLayout() -> UICollectionViewLayout { + let configuration = UICollectionViewCompositionalLayoutConfiguration() + configuration.scrollDirection = .horizontal + + let layout = UICollectionViewCompositionalLayout(sectionProvider: { _, environment -> NSCollectionLayoutSection? in + let itemSize = NSCollectionLayoutSize( + widthDimension: .fractionalWidth(1.0), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + let item = NSCollectionLayoutItem(layoutSize: itemSize) + + let groupSize = NSCollectionLayoutSize( + widthDimension: .absolute(environment.container.effectiveContentSize.width), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + + let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item]) + + let section = NSCollectionLayoutSection(group: group) + return section + + }, configuration: configuration) + return layout + } + + private func startSlideShow() { + startSlideShowTask() + } + + private func stopSlideShow() { + slideshowTask?.cancel() + slideshowTask = nil + } + + private func indexOfMostVisibleCell() -> Int { + let proportionalOffset = collectionView.contentOffset.x / collectionView.bounds.width + guard !proportionalOffset.isNaN else { + return 0 + } + let index = Int(round(proportionalOffset)) + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let safeIndex = max(0, min(numberOfItems - 1, index)) + return safeIndex + } + + private func startSlideShowTask() { + slideshowTask?.cancel() + slideshowTask = Task { + try? await Task.sleep(nanoseconds: 4_000_000_000) + guard !Task.isCancelled else { return } + await MainActor.run { + resetCarouselIfNeeded() + self.collectionView.isScrollEnabled = false + UIView.animate(withDuration: 0.5) { + self.collectionView.scrollToItem( + at: IndexPath(item: self.indexOfMostVisibleCell() + 1, section: 0), + at: .centeredHorizontally, + animated: true + ) + } completion: { _ in + self.collectionView.isScrollEnabled = true + self.startSlideShowTask() + } + } + } + } + + private func resetCarouselIfNeeded() { + let indexOfLeftSignificantCell = Constants.numberOfAdditionalItems / 2 * dataSource.count / Constants.numberOfAdditionalItems + let indexOfRightSignificantCell = indexOfLeftSignificantCell + (dataSource.count - 1) / Constants.numberOfAdditionalItems + + if indexOfMostVisibleCell() == indexOfLeftSignificantCell - 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfRightSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + + if indexOfMostVisibleCell() == indexOfRightSignificantCell + 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfLeftSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + } +} + +extension DappBrowserFeaturedView: UICollectionViewDataSource { + func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { + dataSource.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: DappBrowserFeaturedCell.reuseIdentifier, + for: indexPath + ) + + (cell as? DappBrowserFeaturedCell)?.configure(model: dataSource[indexPath.item]) + + return cell + } +} + +extension DappBrowserFeaturedView: UICollectionViewDelegate { + func collectionView( + _: UICollectionView, + didSelectItemAt indexPath: IndexPath + ) { + let dAppsCount = dataSource.count / Constants.numberOfAdditionalItems + let index = indexPath.item - ((indexPath.item / dAppsCount) * dAppsCount) + didSelectApp?(index) + } + + func scrollViewWillBeginDragging(_: UIScrollView) { + indexOfCellBeforeDragging = indexOfMostVisibleCell() + slideshowTask?.cancel() + } + + func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { + targetContentOffset.pointee = scrollView.contentOffset + + let indexOfMostVisibleCell = self.indexOfMostVisibleCell() + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let swipeVelocityThreshold: CGFloat = 0.5 + let hasEnoughVelocityToSlideToTheNextCell = indexOfCellBeforeDragging + 1 < numberOfItems && velocity.x > swipeVelocityThreshold + let hasEnoughVelocityToSlideToThePreviousCell = indexOfCellBeforeDragging - 1 >= 0 && velocity.x < -swipeVelocityThreshold + let majorCellIsTheCellBeforeDragging = indexOfMostVisibleCell == indexOfCellBeforeDragging + let didUseSwipeToSkipCell = majorCellIsTheCellBeforeDragging && (hasEnoughVelocityToSlideToTheNextCell || hasEnoughVelocityToSlideToThePreviousCell) + + if didUseSwipeToSkipCell { + let snapToIndex = indexOfCellBeforeDragging + (hasEnoughVelocityToSlideToTheNextCell ? 1 : -1) + let toValue = collectionView.bounds.width * CGFloat(snapToIndex) + + UIView.animate( + withDuration: 0.5, + delay: 0, + usingSpringWithDamping: 1, + initialSpringVelocity: velocity.x, + options: .allowUserInteraction, + animations: { + scrollView.contentOffset = CGPoint(x: toValue, y: 0) + scrollView.layoutIfNeeded() + }, + completion: nil + ) + + } else { + let indexPath = IndexPath(row: indexOfMostVisibleCell, section: 0) + collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) + } + } + + func scrollViewDidEndDecelerating(_: UIScrollView) { + resetCarouselIfNeeded() + startSlideShowTask() + } +} + +private class CollectionView: UICollectionView { + private var _safeAreaInsets: UIEdgeInsets? + override var safeAreaInsets: UIEdgeInsets { + get { _safeAreaInsets ?? super.safeAreaInsets } + set { _safeAreaInsets = newValue } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift new file mode 100644 index 0000000000..7b88229139 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -0,0 +1,114 @@ +import UIKit +import SoraUI + +struct DappBrowserSectionHeaderViewViewModel { + let title: String + let isAllHidden: Bool +} + +final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { + var locale: Locale = .current { + didSet { + setupLocalization() + } + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + let moreButton: UIButton = { + let button = UIButton(type: .custom) + button.titleLabel?.font = .capsTitle + button.setTitleColor(.white, for: .normal) + button.setImage(R.image.iconChevronRight(), for: .normal) + button.semanticContentAttribute = .forceRightToLeft + button.backgroundColor = R.color.colorWhite8() + return button + }() + + var allTapAction: (() -> Void)? + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 42) + } + + override func layoutSubviews() { + super.layoutSubviews() + moreButton.rounded() + } + + func configure(model: DappBrowserSectionHeaderViewViewModel) { + titleLabel.text = model.title + moreButton.isHidden = model.isAllHidden + } + + // MARK: - Private methods + + private func setup() { + moreButton.addAction { [weak self] in + self?.allButtonAction() + } + + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(moreButton) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + moreButton.snp.makeConstraints { make in + make.width.greaterThanOrEqualTo(61) + make.height.equalTo(24) + make.trailing.equalToSuperview().inset(16) + make.centerY.equalToSuperview() + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.trailing.greaterThanOrEqualTo(moreButton.snp.leading).inset(16) + make.leading.equalToSuperview().offset(16) + } + separator.snp.makeConstraints { make in + make.top.equalTo(moreButton.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(16) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + + moreButton.setContentHuggingPriority(.required, for: .horizontal) + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + } + + private func allButtonAction() { + allTapAction?() + } + + private func setupLocalization() { + moreButton.setTitle(R.string.localizable.commonSeeAll(preferredLanguages: locale.rLanguages), for: .normal) + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift new file mode 100644 index 0000000000..0ff38f569c --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift @@ -0,0 +1,147 @@ +import UIKit + +final class DappBrowserViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + private let navigationContainerView = UIView() + + let switchWalletButton: UIButton = { + let button = UIButton() + button.setImage(R.image.tonIcon(), for: .normal) + return button + }() + + let walletNameTitle: UILabel = { + let label = UILabel() + label.font = .h4Title + label.textAlignment = .center + return label + }() + + let searchButton: UIButton = { + let button = UIButton() + button.backgroundColor = R.color.colorWhite8() + button.setImage(R.image.iconSearchWhite(), for: .normal) + button.clipsToBounds = true + return button + }() + + let selectNetworkButton = SelectedNetworkButton() + let segmentedControl = FWSegmentedControl() + + lazy var featuredView = DappBrowserFeaturedView() + + let tableContainer = UIView() + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = .clear + view.contentInset = UIEdgeInsets( + top: 0, + left: 0, + bottom: UIConstants.actionHeight, + right: 0 + ) + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + searchButton.rounded() + } + + private func setup() { + let walletInfoVStackView = UIFactory.default.createVerticalStackView(spacing: 6) + walletInfoVStackView.alignment = .center + walletInfoVStackView.distribution = .fill + + addSubview(backgroundImageView) + addSubview(navigationContainerView) + addSubview(tableContainer) + tableContainer.addSubview(tableView) + navigationContainerView.addSubview(switchWalletButton) + navigationContainerView.addSubview(walletInfoVStackView) + navigationContainerView.addSubview(searchButton) + walletInfoVStackView.addArrangedSubview(walletNameTitle) + walletInfoVStackView.addArrangedSubview(selectNetworkButton) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + navigationContainerView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide) + make.leading.trailing.equalToSuperview() + } + switchWalletButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.equalToSuperview().offset(16) + make.size.equalTo(40) + } + walletInfoVStackView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.bottom.equalToSuperview().inset(16) + make.leading.greaterThanOrEqualTo(switchWalletButton.snp.trailing) + } + selectNetworkButton.snp.makeConstraints { make in + make.height.equalTo(22) + } + walletNameTitle.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(UIConstants.minimalOffset) + } + searchButton.snp.makeConstraints { make in + make.size.equalTo(32) + make.centerY.equalToSuperview() + make.trailing.equalToSuperview().inset(16) + } + let segmentContainer = UIView() + addSubview(segmentContainer) + segmentContainer.addSubview(segmentedControl) + segmentedControl.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(segmentContainer.snp.width) + make.edges.equalToSuperview() + } + segmentContainer.snp.makeConstraints { make in + make.top.equalTo(navigationContainerView.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + tableContainer.snp.makeConstraints { make in + make.top.equalTo(segmentContainer.snp.bottom).offset(16) + make.leading.trailing.equalToSuperview() + make.bottom.equalToSuperview() + } + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + let localizedItems = [ + R.string.localizable.dappDiscoverTitle(preferredLanguages: locale.rLanguages), + R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) + ] + segmentedControl.setSegmentItems(localizedItems) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift new file mode 100644 index 0000000000..1b20988178 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift @@ -0,0 +1,32 @@ +import UIKit +import SoraFoundation +import SSFModels + +final class DappBrowserListAssembly { + static func configureModule( + title: String, + dapps: [TonDapp], + wallet: MetaAccountModel + ) -> DappBrowserListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserListInteractor() + let router = DappBrowserListRouter() + + let presenter = DappBrowserListPresenter( + wallet: wallet, + dapps: dapps, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = DappBrowserListViewController( + title: title, + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift new file mode 100644 index 0000000000..fe64455067 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift @@ -0,0 +1,15 @@ +import UIKit + +protocol DappBrowserListInteractorOutput: AnyObject {} + +final class DappBrowserListInteractor { + // MARK: - Private properties + private weak var output: DappBrowserListInteractorOutput? +} + +// MARK: - DappBrowserListInteractorInput +extension DappBrowserListInteractor: DappBrowserListInteractorInput { + func setup(with output: DappBrowserListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift new file mode 100644 index 0000000000..4cb0fcf33e --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift @@ -0,0 +1,115 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [DappBrowserListCellViewModel]) +} + +protocol DappBrowserListInteractorInput: AnyObject { + func setup(with output: DappBrowserListInteractorOutput) +} + +final class DappBrowserListPresenter { + // MARK: Private properties + private weak var view: DappBrowserListViewInput? + private let router: DappBrowserListRouterInput + private let interactor: DappBrowserListInteractorInput + + private let wallet: MetaAccountModel + private let dapps: [TonDapp] + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + dapps: [TonDapp], + interactor: DappBrowserListInteractorInput, + router: DappBrowserListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.dapps = dapps + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel(search: String?) { + var apps = dapps + if let search, search.isNotEmpty { + apps = dapps.filter { $0.name.lowercased().contains(search.lowercased()) } + } + let viewModels = apps + .map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.url), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + view?.didReceive(viewModels: viewModels) + } +} + +// MARK: - DappBrowserListViewOutput +extension DappBrowserListPresenter: DappBrowserListViewOutput { + func didSelect(dapp: TonDapp) { + let confirmAction = SheetAlertPresentableAction(title: R.string.localizable.commonConfirm(preferredLanguages: selectedLocale.rLanguages), style: .pinkBackgroundWhiteText ,handler: { [weak self] in + guard let self else { + return + } + + self.router.showDapp( + from: self.view, + dapp: dapp, + wallet: self.wallet + ) + }) + + let termsAction = SheetAlertPresentableAction(title: R.string.localizable.aboutTermsAndConditions(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundPinkText, handler: { [weak self] in + guard let self, let view = self.view else { + return + } + + self.router.showWeb(url: ApplicationConfig.shared.termsURL, from: view, style: .modal) + }) + + let declineAction = SheetAlertPresentableAction(title: R.string.localizable.commonDecline(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundWhiteText) + + router.present( + message: R.string.localizable.webThirdPartyWarningDescription(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.webThirdPartyWarningTitle(preferredLanguages: selectedLocale.rLanguages), + closeAction: nil, + from: view, + actions: [confirmAction, declineAction, termsAction] + ) + } + + func searchTextDidChanged(_ text: String?) { + provideViewModel(search: text) + } + + func didTapBackButton() { + router.dismiss(view: view) + } + + func didLoad(view: DappBrowserListViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel(search: nil) + } +} + +// MARK: - DappBrowserListInteractorOutput +extension DappBrowserListPresenter: DappBrowserListInteractorOutput {} + +// MARK: - Localizable +extension DappBrowserListPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserListPresenter: DappBrowserListModuleInput {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift new file mode 100644 index 0000000000..3f248c7b62 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift @@ -0,0 +1,18 @@ +import SSFModels + +typealias DappBrowserListModuleCreationResult = ( + view: DappBrowserListViewInput, + input: DappBrowserListModuleInput +) + +protocol DappBrowserListRouterInput: PresentDismissable, SheetAlertPresentable, WebPresentable { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserListModuleInput: AnyObject {} + +protocol DappBrowserListModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift new file mode 100644 index 0000000000..8dab02327d --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift @@ -0,0 +1,16 @@ +import Foundation +import SSFModels + +final class DappBrowserListRouter: DappBrowserListRouterInput { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet, moduleOutput: nil) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift new file mode 100644 index 0000000000..4b9afac82f --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift @@ -0,0 +1,170 @@ +import UIKit +import SoraUI +import SnapKit +import SoraFoundation + +protocol DappBrowserListViewOutput: AnyObject { + func didLoad(view: DappBrowserListViewInput) + func searchTextDidChanged(_ text: String?) + func didTapBackButton() + func didSelect(dapp: TonDapp) +} + +final class DappBrowserListViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserListViewLayout + var keyboardHandler: FearlessKeyboardHandler? + + // MARK: Private properties + private let output: DappBrowserListViewOutput + + var viewModels: [DappBrowserListCellViewModel] = [] + + // MARK: - Constructor + init( + title: String, + output: DappBrowserListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + rootView.navigationBar.setTitle(title) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = DappBrowserListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + configureTableView() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if keyboardHandler == nil { + setupKeyboardHandler() + } + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + clearKeyboardHandler() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.didTapBackButton() + } + rootView.searchTextField.onTextDidChanged = { [weak self] text in + self?.output.searchTextDidChanged(text) + } + } + + private func configureTableView() { + rootView.tableView.separatorStyle = .none + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 64 + } +} + +// MARK: - DappBrowserListViewInput +extension DappBrowserListViewController: DappBrowserListViewInput { + func didReceive(viewModels: [DappBrowserListCellViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + reloadEmptyState(animated: true) + } +} + +// MARK: - Localizable +extension DappBrowserListViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - KeyboardViewAdoptable + +extension DappBrowserListViewController: KeyboardViewAdoptable { + var target: Constraint? { rootView.keyboardAdoptableConstraint } + + func offsetFromKeyboardWithInset(_: CGFloat) -> CGFloat { 0 } + func updateWhileKeyboardFrameChanging(_: CGRect) {} +} + +// MARK: - UITableViewDataSource + +extension DappBrowserListViewController: UITableViewDataSource { + func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard + let viewModel = viewModels[safe: indexPath.row], + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self) + else { + return UITableViewCell() + } + cell.configure(model: viewModel, position: .list) + return cell + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserListViewController: UITableViewDelegate { + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let viewModel = viewModels[safe: indexPath.row] else { + return + } + let dapp = viewModel.dapp + output.didSelect(dapp: dapp) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserListViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserListViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable + .emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.container + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserListViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModels.isEmpty + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift new file mode 100644 index 0000000000..eb558423d0 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift @@ -0,0 +1,85 @@ +import UIKit +import SnapKit + +final class DappBrowserListViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + var keyboardAdoptableConstraint: Constraint? + + let navigationBar: BaseNavigationBar = { + let view = BaseNavigationBar() + view.set(.present) + view.backgroundColor = R.color.colorBlack19() + return view + }() + + let searchTextField: SearchTextField = { + let searchTextField = SearchTextField() + searchTextField.triangularedView?.cornerCut = [.bottomRight, .topLeft] + searchTextField.triangularedView?.strokeWidth = 1 + searchTextField.triangularedView?.strokeColor = R.color.colorWhite8()! + searchTextField.triangularedView?.fillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.highlightedFillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.shadowOpacity = 0 + searchTextField.textField.backgroundColor = R.color.colorBlack50() + searchTextField.textField.tintColor = R.color.colorWhite50() + return searchTextField + }() + + let container = UIView() + let tableView: UITableView = { + let tableView = UITableView() + tableView.backgroundColor = R.color.colorBlack19() + return tableView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + addSubview(navigationBar) + addSubview(searchTextField) + addSubview(container) + container.addSubview(tableView) + + navigationBar.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.trailing.equalToSuperview() + make.height.equalTo(56) + } + + searchTextField.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + } + + container.snp.makeConstraints { make in + make.top.equalTo(searchTextField.snp.bottom).offset(UIConstants.offset12) + make.leading.trailing.equalToSuperview() + keyboardAdoptableConstraint = make.bottom.equalTo(safeAreaLayoutGuide).constraint + } + + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + searchTextField.textField.placeholder = R.string.localizable.commonSearch(preferredLanguages: locale.rLanguages) + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift new file mode 100644 index 0000000000..353510c7e2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift @@ -0,0 +1,45 @@ +import UIKit +import SoraUI +import SSFModels +import SoraFoundation + +final class EcosystemOptionsAssembly { + static func configureModule( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) -> EcosystemOptionsModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = EcosystemOptionsInteractor( + wallet: wallet, + keystore: ServiceAssembly.shared.keystore, + availableExportOptionsProvider: AvailableExportOptionsProvider() + ) + let router = EcosystemOptionsRouter() + + let presenter = EcosystemOptionsPresenter( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = EcosystemOptionsViewController( + output: presenter, + localizationManager: localizationManager + ) + view.modalPresentationStyle = .custom + + let factory = ModalSheetBlurPresentationFactory( + configuration: ModalSheetPresentationConfiguration.fearlessBlur + ) + view.modalTransitioningFactory = factory + + return (view, presenter) + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift new file mode 100644 index 0000000000..5972f90f77 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift @@ -0,0 +1,40 @@ +import UIKit +import SoraKeystore +import SSFModels + +protocol EcosystemOptionsInteractorOutput: AnyObject {} + +final class EcosystemOptionsInteractor { + // MARK: - Private properties + private weak var output: EcosystemOptionsInteractorOutput? + + private let wallet: MetaAccountModel + private let keystore: KeystoreProtocol + private let availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + + init( + wallet: MetaAccountModel, + keystore: KeystoreProtocol, + availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + ) { + self.wallet = wallet + self.keystore = keystore + self.availableExportOptionsProvider = availableExportOptionsProvider + } +} + +// MARK: - EcosystemOptionsInteractorInput +extension EcosystemOptionsInteractor: EcosystemOptionsInteractorInput { + func setup(with output: EcosystemOptionsInteractorOutput) { + self.output = output + } + + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] { + let options = availableExportOptionsProvider.getAvailableExportOptions( + for: wallet, + accountId: nil, + ecosystem: ecosystem + ) + return options + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift new file mode 100644 index 0000000000..7af5a158bd --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift @@ -0,0 +1,94 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol EcosystemOptionsViewInput: ControllerBackedProtocol {} + +protocol EcosystemOptionsInteractorInput: AnyObject { + func setup(with output: EcosystemOptionsInteractorOutput) + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] +} + +final class EcosystemOptionsPresenter { + // MARK: Private properties + private weak var moduleOutput: EcosystemOptionsModuleOutput? + private weak var view: EcosystemOptionsViewInput? + private let router: EcosystemOptionsRouterInput + private let interactor: EcosystemOptionsInteractorInput + + private let wallet: MetaAccountModel + private let chains: [ChainModel] + private let ecosystem: Ecosystem + + // MARK: - Constructors + init( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput?, + interactor: EcosystemOptionsInteractorInput, + router: EcosystemOptionsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.ecosystem = ecosystem + self.wallet = wallet + self.chains = chains + self.moduleOutput = moduleOutput + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func prepareChainAccountInfos() -> [ChainAccountInfo] { + let chainAccountsInfo = chains.compactMap { chain -> ChainAccountInfo? in + guard let accountResponse = wallet.fetch(for: chain.accountRequest()), !accountResponse.isChainAccount else { + return nil + } + return ChainAccountInfo( + chain: chain, + account: accountResponse + ) + }.compactMap { $0 } + return chainAccountsInfo + } +} + +// MARK: - EcosystemOptionsViewOutput +extension EcosystemOptionsPresenter: EcosystemOptionsViewOutput { + func didTapOnBackup() { + let options = interactor.getAvailableExportOptions(for: ecosystem) + let accounts = prepareChainAccountInfos() + let flow: ExportFlow = .multiple(wallet: wallet, accounts: accounts) + + router.dismiss(view: view) + if options.contains(.mnemonic) { + moduleOutput?.showMnemonicExport(flow: flow) + } else if options.contains(.seed) { + moduleOutput?.showSeedExport(flow: flow) + } else { + moduleOutput?.showKeystoreExport(flow: flow) + } + } + + func didTapOnAccounts() { + router.dismiss(view: view) + moduleOutput?.showWalletDetails(chains: chains) + } + + func didLoad(view: EcosystemOptionsViewInput) { + self.view = view + interactor.setup(with: self) + } +} + +// MARK: - EcosystemOptionsInteractorOutput +extension EcosystemOptionsPresenter: EcosystemOptionsInteractorOutput {} + +// MARK: - Localizable +extension EcosystemOptionsPresenter: Localizable { + func applyLocalization() {} +} + +extension EcosystemOptionsPresenter: EcosystemOptionsModuleInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift new file mode 100644 index 0000000000..0fbedbf4eb --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift @@ -0,0 +1,17 @@ +import SSFModels + +typealias EcosystemOptionsModuleCreationResult = ( + view: EcosystemOptionsViewInput, + input: EcosystemOptionsModuleInput +) + +protocol EcosystemOptionsRouterInput: AnyDismissable {} + +protocol EcosystemOptionsModuleInput: AnyObject {} + +protocol EcosystemOptionsModuleOutput: AnyObject { + func showMnemonicExport(flow: ExportFlow) + func showKeystoreExport(flow: ExportFlow) + func showSeedExport(flow: ExportFlow) + func showWalletDetails(chains: [ChainModel]?) +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift new file mode 100644 index 0000000000..5f68e2b456 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift @@ -0,0 +1,4 @@ +import Foundation +import SSFModels + +final class EcosystemOptionsRouter: EcosystemOptionsRouterInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift new file mode 100644 index 0000000000..dd4403cdf2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift @@ -0,0 +1,62 @@ +import UIKit +import SoraFoundation + +protocol EcosystemOptionsViewOutput: AnyObject { + func didLoad(view: EcosystemOptionsViewInput) + func didTapOnBackup() + func didTapOnAccounts() +} + +final class EcosystemOptionsViewController: UIViewController, ViewHolder { + typealias RootViewType = EcosystemOptionsViewLayout + + // MARK: Private properties + private let output: EcosystemOptionsViewOutput + + // MARK: - Constructor + init( + output: EcosystemOptionsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = EcosystemOptionsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.backupWalletButton.addAction { [weak self] in + self?.output.didTapOnBackup() + } + rootView.accountsDetailsButton.addAction { [weak self] in + self?.output.didTapOnAccounts() + } + } +} + +// MARK: - EcosystemOptionsViewInput +extension EcosystemOptionsViewController: EcosystemOptionsViewInput {} + +// MARK: - Localizable +extension EcosystemOptionsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift new file mode 100644 index 0000000000..aa10ce2da9 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift @@ -0,0 +1,107 @@ +import UIKit + +final class EcosystemOptionsViewLayout: UIView { + private enum Constants { + static let headerHeight: CGFloat = 56.0 + static let cornerRadius: CGFloat = 20.0 + } + + let titleLabel: UILabel = { + let titleLabel = UILabel() + titleLabel.font = .h3Title + return titleLabel + }() + + let backupWalletButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + let accountsDetailsButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + private lazy var buttons: [TriangularedButton] = { + [ + backupWalletButton, + accountsDetailsButton + ] + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocale() { + titleLabel.text = R.string.localizable.ecosystemOptionsTitle(preferredLanguages: locale.rLanguages) + backupWalletButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsBackupTitle(preferredLanguages: locale.rLanguages) + accountsDetailsButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsDetailsTitle(preferredLanguages: locale.rLanguages) + } + + private func setupLayout() { + backgroundColor = R.color.colorAlmostBlack()! + layer.cornerRadius = Constants.cornerRadius + clipsToBounds = true + + let navView = UIView() + addSubview(navView) + navView.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + make.height.equalTo(Constants.headerHeight) + } + + navView.addSubview(titleLabel) + titleLabel.snp.makeConstraints { make in + make.center.equalToSuperview() + } + + let indicator = UIFactory.default.createIndicatorView() + + navView.addSubview(indicator) + indicator.snp.makeConstraints { make in + make.size.equalTo(UIConstants.indicatorSize) + make.top.equalTo(navView.snp.top) + make.centerX.equalTo(navView.snp.centerX) + } + + buttons.forEach { + $0.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + + let vStackView = UIFactory.default.createVerticalStackView(spacing: UIConstants.accessoryItemsSpacing) + vStackView.backgroundColor = .clear + addSubview(vStackView) + vStackView.snp.makeConstraints { make in + make.top.equalTo(navView.snp.bottom).offset(UIConstants.accessoryItemsSpacing) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom).inset(UIConstants.accessoryItemsSpacing) + } + + buttons.forEach { + vStackView.addArrangedSubview($0) + } + } +} diff --git a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift index c2525e6c47..5ae855efe6 100644 --- a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift +++ b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift @@ -2,6 +2,7 @@ import UIKit import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto enum AccountExportPasswordInteractorError: Error { case missingAccount @@ -43,7 +44,15 @@ extension AccountExportPasswordInteractor: AccountExportPasswordInteractorInputP ) { var jsons: [RestoreJson] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { if let data = try? exportJsonWrapper.export( chainAccount: chainAccount.account, password: password, diff --git a/fearless/Modules/Export/ExportFlow.swift b/fearless/Modules/Export/ExportFlow.swift index a844e529ad..b72db22687 100644 --- a/fearless/Modules/Export/ExportFlow.swift +++ b/fearless/Modules/Export/ExportFlow.swift @@ -11,18 +11,24 @@ enum ExportFlow { } var accountsToExport: [ChainAccountInfo] = [] - accounts.forEach { chainAccountInfo in - if !chainAccountInfo.account.isChainAccount { - if chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { $0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - - if !chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { !$0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - } else { + if chainAccountInfo.account.isChainAccount { accountsToExport.append(chainAccountInfo) + } else { + switch chainAccountInfo.account.ecosystem { + case .substrate: + if accountsToExport.first(where: { $0.account.ecosystem.isSubstrate }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ethereumBased, .ethereum: + if accountsToExport.first(where: { $0.account.ecosystem.isEthereum || $0.account.ecosystem.isEthereumBased }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ton: + if accountsToExport.first(where: { $0.account.ecosystem.isTon }) == nil { + accountsToExport.append(chainAccountInfo) + } + } } } diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift index 9738a50ff6..2842badba1 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift @@ -45,8 +45,13 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol return true } switch (option, flow) { - case (.mnemonic, _): - return true + case let (.mnemonic, flow): + switch flow.wallet.ecosystem { + case .regular: + return true + case .ton: + return false + } case let (.seed, flow): if case let .single(chain, _, _) = flow, chain.isEthereumBased { return false @@ -164,7 +169,7 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol view.removeFromSuperview() } - sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ethereumBased: nil) + sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ecosystem: nil) var views: [UIView] = [] viewModel.viewModels.forEach { exportViewModel in if let view = setupExportDataView(exportViewModel) { @@ -172,10 +177,13 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol } if viewModel.option == .keystore { - if exportViewModel.ethereumBased { - setupExportEthereumButton() - } else { + switch exportViewModel.ecosystem { + case .substrate: setupExportSubstrateButton() + case .ethereumBased, .ethereum: + setupExportEthereumButton() + case .ton: + break } } else if mainOptionTitle != nil { setupMainActionButton() @@ -490,23 +498,23 @@ extension ExportGenericViewController { var subviews: [UIView] = [] - if let cryptoType = exportViewModel.cryptoType { - let cryptoTypeView = setupCryptoTypeView( - cryptoType: cryptoType, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let cryptoType = exportViewModel.cryptoType, + let cryptoTypeView = setupCryptoTypeView( + cryptoType: cryptoType, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(cryptoTypeView) } - if let derivationPath = exportViewModel.derivationPath { - let derivationPathView = setupDerivationView( - derivationPath, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let derivationPath = exportViewModel.derivationPath, + let derivationPathView = setupDerivationView( + derivationPath, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(derivationPathView) } @@ -527,15 +535,20 @@ extension ExportGenericViewController { cryptoType: CryptoType, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let cryptoView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) cryptoView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(cryptoView) - cryptoView.title = isEthereum - ? R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + cryptoView.title = R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + cryptoView.title = R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } cryptoView.subtitle = cryptoType.titleForLocale(locale) + " | " + cryptoType.subtitleForLocale(locale) @@ -546,15 +559,20 @@ extension ExportGenericViewController { _ path: String, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let derivationPathView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) derivationPathView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(derivationPathView) - derivationPathView.title = isEthereum - ? R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + derivationPathView.title = R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + derivationPathView.title = R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } derivationPathView.subtitle = path return derivationPathView diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift index edc5c36f53..a8462f1d6b 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift @@ -17,7 +17,7 @@ protocol ExportGenericViewModelProtocol { var chain: ChainModel? { get } var cryptoType: CryptoType? { get } var derivationPath: String? { get } - var ethereumBased: Bool { get } + var ecosystem: Ecosystem { get } func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView } @@ -30,16 +30,11 @@ struct MultiExportViewModel: MultipleExportGenericViewModelProtocol { struct ExportStringViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let data: String - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { if option == .seed { @@ -52,16 +47,11 @@ struct ExportStringViewModel: ExportGenericViewModelProtocol { struct ExportMnemonicViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let mnemonic: [String] - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { binder.bind(mnemonicViewModel: self, locale: locale) diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift index e2cf3194cf..f517d88ca7 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift @@ -15,7 +15,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { .constraint(equalToConstant: UIConstants.triangularedViewHeight).isActive = true detailsView.subtitleLabel?.lineBreakMode = .byTruncatingMiddle - detailsView.title = stringViewModel.option.titleForLocale(locale, ethereumBased: stringViewModel.ethereumBased) + detailsView.title = stringViewModel.option.titleForLocale(locale, ecosystem: stringViewModel.ecosystem) detailsView.subtitle = stringViewModel.data return detailsView @@ -24,7 +24,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { func bind(multilineViewModel: ExportStringViewModel, locale: Locale) -> UIView { let detailsView = uiFactory.createMultilinedTriangularedView() - detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ethereumBased: multilineViewModel.ethereumBased) + detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ecosystem: multilineViewModel.ecosystem) detailsView.subtitleLabel.text = multilineViewModel.data return detailsView diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift index 230869caf2..0134ff7eaa 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift @@ -4,7 +4,7 @@ import SSFUtils import SSFModels struct ExportMnemonicData { - let mnemonic: IRMnemonicProtocol + let mnemonic: [String] let derivationPath: String? let cryptoType: CryptoType? let chain: ChainModel diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift index 491bf2517c..3f431fd0c9 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import IrohaCrypto import SSFUtils import SSFModels +import TonSwift enum ExportMnemonicInteractorError: Error { case missingAccount @@ -37,16 +38,28 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try keystore.fetchKey(for: entropyTag) - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch wallet.ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + return + } + allWords = mnemonic.components(separatedBy: " ") + } + let derivationPathTag = chainAccount.chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath: String? = try keystore.fetchDeriviationForAddress(derivationPathTag) + let isEthereum = chainAccount.account.ecosystem.isEthereum || chainAccount.account.ecosystem.isEthereumBased let data = ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, - cryptoType: chainAccount.account.isEthereumBased ? nil : chainAccount.account.cryptoType, + cryptoType: isEthereum ? nil : chainAccount.account.cryptoType, chain: chainAccount.chain ) @@ -71,6 +84,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { return } self?.fetchExportData( + ecosystem: wallet.ecosystem, metaId: wallet.metaId, accountId: response.isChainAccount ? accountId : nil, cryptoType: response.cryptoType, @@ -83,6 +97,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { } private func fetchExportData( + ecosystem: WalletEcosystem, metaId: String, accountId: AccountId?, cryptoType: CryptoType, @@ -94,14 +109,24 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { throw ExportMnemonicInteractorError.missingEntropy } - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + throw ExportMnemonicInteractorError.missingEntropy + } + allWords = mnemonic.components(separatedBy: " ") + } let derivationPathTag = chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(metaId, accountId: accountId) let derivationPath: String? = try self?.keystore.fetchDeriviationForAddress(derivationPathTag) return ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, cryptoType: cryptoType, chain: chain diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift index 8d0a46e9e7..5fd3ea1415 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift @@ -12,6 +12,7 @@ final class ExportMnemonicPresenter { let localizationManager: LocalizationManager private(set) var exportDatas: [ExportMnemonicData]? + private(set) var isShownAlert = false init(flow: ExportFlow, localizationManager: LocalizationManager) { self.flow = flow @@ -32,7 +33,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), derivationPath, preferredLanguages: locale.rLanguages ) @@ -40,7 +41,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithoutDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), preferredLanguages: locale.rLanguages ) } @@ -55,6 +56,9 @@ final class ExportMnemonicPresenter { extension ExportMnemonicPresenter: ExportGenericPresenterProtocol { func didLoadView() { + guard !isShownAlert else { + return + } let locale = localizationManager.selectedLocale let title = R.string.localizable.accountExportWarningTitle(preferredLanguages: locale.rLanguages) @@ -72,6 +76,9 @@ extension ExportMnemonicPresenter: ExportGenericPresenterProtocol { message: message, actions: [exportAction, cancelAction], closeAction: nil, + dismissCompletion: { [weak self] in + self?.isShownAlert = true + }, icon: R.image.iconWarningBig() ) @@ -108,8 +115,8 @@ extension ExportMnemonicPresenter: ExportMnemonicInteractorOutputProtocol { chain: exportData.chain, cryptoType: exportData.cryptoType, derivationPath: exportData.derivationPath, - mnemonic: exportData.mnemonic.allWords(), - ethereumBased: exportData.chain.isEthereumBased + mnemonic: exportData.mnemonic, + ecosystem: exportData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift index 0ff0b13abf..44305967c1 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift @@ -14,7 +14,7 @@ protocol ExportMnemonicInteractorOutputProtocol: AnyObject { protocol ExportMnemonicWireframeProtocol: ExportGenericWireframeProtocol { func close(view: ExportGenericViewProtocol?) func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift index 3d36f468c8..57ef88b905 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift @@ -1,9 +1,10 @@ import Foundation import IrohaCrypto +import SSFModels final class ExportMnemonicWireframe: ExportMnemonicWireframeProtocol { func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) { diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift index f77d68b102..a6eef718dd 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift @@ -1,17 +1,18 @@ import UIKit import IrohaCrypto +import SSFModels final class ExportMnemonicConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! - private let mnemonic: IRMnemonicProtocol + private let mnemonic: [String] private let shuffledWords: [String] private let settings: SelectedWalletSettings private let wallet: MetaAccountModel private let eventCenter: EventCenterProtocol init( - mnemonic: IRMnemonicProtocol, + mnemonic: [String], settings: SelectedWalletSettings, wallet: MetaAccountModel, eventCenter: EventCenterProtocol @@ -20,7 +21,7 @@ final class ExportMnemonicConfirmInteractor { self.settings = settings self.wallet = wallet self.eventCenter = eventCenter - shuffledWords = mnemonic.allWords().shuffled() + shuffledWords = mnemonic.shuffled() } } @@ -34,7 +35,7 @@ extension ExportMnemonicConfirmInteractor: AccountConfirmInteractorInputProtocol } func confirm(words: [String]) { - guard words == mnemonic.allWords() else { + guard words == mnemonic else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift index c37f434434..897a1e2ebb 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift @@ -1,9 +1,10 @@ import Foundation import IrohaCrypto +import SSFModels protocol ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? } diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift index 00e5fd2b7b..b740e41b20 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift @@ -1,10 +1,11 @@ import Foundation import IrohaCrypto import SoraFoundation +import SSFModels final class ExportMnemonicConfirmViewFactory: ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? { let view = AccountConfirmViewController(nib: R.nib.accountConfirmViewController) diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift index be665ac7cf..e4d94a9cc6 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import IrohaCrypto +import SSFModels final class ExportRestoreJsonInteractor { private let settings: SelectedWalletSettings diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift index ecbd0dcd17..57d384ee71 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift @@ -84,7 +84,7 @@ extension ExportRestoreJsonPresenter: ExportGenericPresenterProtocol { cryptoType: model.cryptoType, derivationPath: nil, data: model.data, - ethereumBased: model.chain.isEthereumBased + ecosystem: model.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift index 3b5cf3a75f..a5adf694f1 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift @@ -55,22 +55,24 @@ extension ExportSeedInteractor: ExportSeedInteractorInputProtocol { func fetchExportDataForWallet(_ wallet: MetaAccountModel, accounts: [ChainAccountInfo]) { var seeds: [ExportSeedData] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { let chain = chainAccount.chain let account = chainAccount.account let accountId = account.isChainAccount ? account.accountId : nil do { - let seedTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSeedTagForMetaId(wallet.metaId, accountId: accountId) - + let seedTag = KeystoreTagV2.seedKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) var optionalSeed: Data? = try keystore.fetchKey(for: seedTag) - let keyTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - + let keyTag = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) if optionalSeed == nil, account.cryptoType.supportsSeedFromSecretKey { optionalSeed = try keystore.fetchKey(for: keyTag) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift index a9b7410273..05ae753df3 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift @@ -104,7 +104,7 @@ extension ExportSeedPresenter: ExportSeedInteractorOutputProtocol { cryptoType: seedData.chain.isEthereumBased ? nil : seedData.cryptoType, derivationPath: seedData.derivationPath, data: seedData.seed.toHex(includePrefix: true), - ethereumBased: seedData.chain.isEthereumBased + ecosystem: seedData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift b/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift index f1aff51f09..1ac6280ac2 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels protocol ExportSeedInteractorInputProtocol: AnyObject { diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift new file mode 100644 index 0000000000..2e9fa632d9 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift @@ -0,0 +1,24 @@ +import UIKit +import SoraFoundation + +final class FeatureToggleListAssembly { + static func configureModule() -> FeatureToggleListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = FeatureToggleListInteractor() + let router = FeatureToggleListRouter() + + let presenter = FeatureToggleListPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = FeatureToggleListViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift new file mode 100644 index 0000000000..9824eebb5e --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift @@ -0,0 +1,30 @@ +import UIKit +import RobinHood + +protocol FeatureToggleListInteractorOutput: AnyObject {} + +final class FeatureToggleListInteractor { + // MARK: - Private properties + private weak var output: FeatureToggleListInteractorOutput? + + private lazy var storage: LocalToggleService = { + ServiceAssembly.shared.localToggle + }() +} + +// MARK: - FeatureToggleListInteractorInput +extension FeatureToggleListInteractor: FeatureToggleListInteractorInput { + var toggles: [LocalListToggle] { + get { + storage.list + } + } + + func set(toggle: LocalListToggle) { + storage.set(toggle: toggle) + } + + func setup(with output: FeatureToggleListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift new file mode 100644 index 0000000000..2dd05de984 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift @@ -0,0 +1,78 @@ +import Foundation +import SoraFoundation + +protocol FeatureToggleListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [SelectableViewModel]) +} + +protocol FeatureToggleListInteractorInput: AnyObject { + var toggles: [LocalListToggle] { get } + func setup(with output: FeatureToggleListInteractorOutput) + func set(toggle: LocalListToggle) +} + +final class FeatureToggleListPresenter { + // MARK: Private properties + private weak var view: FeatureToggleListViewInput? + private let router: FeatureToggleListRouterInput + private let interactor: FeatureToggleListInteractorInput + + // MARK: - Constructors + init( + interactor: FeatureToggleListInteractorInput, + router: FeatureToggleListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideToggles() { + Task { + let toggles = interactor.toggles + let viewModels = toggles.map { + let underlyingViewModel = TitleWithSubtitleViewModel( + title: $0.title, + subtitle: $0.description + ) + return SelectableViewModel( + underlyingViewModel: underlyingViewModel, + selectable: $0.storageValue + ) + } + Task { @MainActor in + view?.didReceive(viewModels: viewModels) + } + } + } +} + +// MARK: - FeatureToggleListViewOutput +extension FeatureToggleListPresenter: FeatureToggleListViewOutput { + func didSwitch(index: Int) { + guard var toggle = interactor.toggles[safe: index] else { + return + } + let updatedToggle = toggle.toggle() + interactor.set(toggle: updatedToggle) + } + + func didLoad(view: FeatureToggleListViewInput) { + self.view = view + interactor.setup(with: self) + provideToggles() + } +} + +// MARK: - FeatureToggleListInteractorOutput +extension FeatureToggleListPresenter: FeatureToggleListInteractorOutput {} + +// MARK: - Localizable +extension FeatureToggleListPresenter: Localizable { + func applyLocalization() {} +} + +extension FeatureToggleListPresenter: FeatureToggleListModuleInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift new file mode 100644 index 0000000000..1f356a817e --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift @@ -0,0 +1,10 @@ +typealias FeatureToggleListModuleCreationResult = ( + view: FeatureToggleListViewInput, + input: FeatureToggleListModuleInput +) + +protocol FeatureToggleListRouterInput: AnyObject {} + +protocol FeatureToggleListModuleInput: AnyObject {} + +protocol FeatureToggleListModuleOutput: AnyObject {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift new file mode 100644 index 0000000000..7499d79e79 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift @@ -0,0 +1,3 @@ +import Foundation + +final class FeatureToggleListRouter: FeatureToggleListRouterInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift new file mode 100644 index 0000000000..33a708ed6f --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift @@ -0,0 +1,92 @@ +import UIKit +import SoraFoundation + +protocol FeatureToggleListViewOutput: AnyObject { + func didLoad(view: FeatureToggleListViewInput) + func didSwitch(index: Int) +} + +final class FeatureToggleListViewController: UIViewController, ViewHolder { + typealias RootViewType = FeatureToggleListViewLayout + + // MARK: Private properties + private let output: FeatureToggleListViewOutput + + private var viewModels: [SelectableViewModel] = [] + + // MARK: - Constructor + init( + output: FeatureToggleListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = FeatureToggleListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + title = "Toggle list" + setupTableView() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.registerClassForCell(TitleSubtitleSwitchTableViewCell.self) + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 44 + } +} + +// MARK: - FeatureToggleListViewInput +extension FeatureToggleListViewController: FeatureToggleListViewInput { + func didReceive(viewModels: [SelectableViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension FeatureToggleListViewController: Localizable { + func applyLocalization() {} +} + +// MARK: - UITableViewDataSource + +extension FeatureToggleListViewController: UITableViewDataSource { + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let viewModel = viewModels[safe: indexPath.row] else { return UITableViewCell() } + + let cell = tableView.dequeueReusableCellWithType(TitleSubtitleSwitchTableViewCell.self)! + cell.delegate = self + cell.bind(viewModel: viewModel) + + return cell + } +} + +extension FeatureToggleListViewController: SwitchTableViewCellDelegate { + func didToggle(cell: SwitchTableViewCell) { + guard let indexPath = rootView.tableView.indexPath(for: cell) else { + return + } + output.didSwitch(index: indexPath.row) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift new file mode 100644 index 0000000000..4f5d696813 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift @@ -0,0 +1,28 @@ +import UIKit + +final class FeatureToggleListViewLayout: UIView { + let tableView: UITableView = { + let view = UITableView() + view.backgroundColor = R.color.colorBlack19() + view.separatorStyle = .none + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = R.color.colorBlack19() + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } +} diff --git a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift index 8d834bb137..5ddf9ea255 100644 --- a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift +++ b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SSFQRService import RobinHood +import SSFModels final class GetPreinstalledWalletInteractor: BaseAccountImportInteractor { // MARK: - Private properties diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift index de4790fe0e..10e5b0c2d7 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift @@ -2,12 +2,14 @@ import UIKit import SSFModels import SSFPolkaswap import SSFPools +import SSFAccountManagment +import SSFCrypto import SSFStorageQueryKit protocol LiquidityPoolDetailsInteractorOutput: AnyObject { func didReceiveLiquidityPair(liquidityPair: LiquidityPair?) func didReceiveUserPool(pool: AccountPool?) - func didReceivePoolReserves(reserves: CachedStorageResponse?) + func didReceivePoolReserves(reserves: SSFStorageQueryKit.CachedStorageResponse) func didReceivePoolAPY(apy: PoolApyInfo?) func didReceiveLiquidityPairError(error: Error) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift index cb138fec23..921c2e859c 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift @@ -29,7 +29,7 @@ final class LiquidityPoolDetailsPresenter { private var liquidityPair: LiquidityPair? private var accountPoolInfo: AccountPool? - private var reserves: CachedStorageResponse? + private var reserves: SSFStorageQueryKit.CachedStorageResponse? private var apyInfo: PoolApyInfo? // MARK: - Constructors @@ -69,7 +69,7 @@ final class LiquidityPoolDetailsPresenter { return } - let reserves = reserves ?? CachedStorageResponse(value: input.reserves, type: .remote) + let reserves = reserves ?? SSFStorageQueryKit.CachedStorageResponse(value: input.reserves, type: .remote) let apy = apyInfo ?? input.apyInfo let accountPoolInfo = accountPoolInfo ?? input.accountPool @@ -151,7 +151,7 @@ extension LiquidityPoolDetailsPresenter: LiquidityPoolDetailsInteractorOutput { provideViewModel() } - func didReceivePoolReserves(reserves: CachedStorageResponse?) { + func didReceivePoolReserves(reserves: SSFStorageQueryKit.CachedStorageResponse) { self.reserves = reserves provideViewModel() } diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index cee499f261..7ba1252fe9 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -1,41 +1,46 @@ -[{ +[ + { "disabled": false, "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "rank": 8, "name": "Polkadot", + "ecosystem": "substrate", + "identityChain": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://polkadot.subscan.io/{type}/{value}" + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://polkadot.subscan.io/{type}/{value}" }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/polkadot/{type}/{value}" - } - ] + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/polkadot/{type}/{value}" + } + ] }, - "assets": [{ + "assets": [ + { "isUtility": true, "id": "887a17c7-1370-4de0-97dd-5422e294fa75", "name": "polkadot", @@ -45,9 +50,11 @@ "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", "color": "FF0066", "staking": "relaychain", + "coinbaseUrl": "addresses={\"{address}\":[\"polkadot\"]}&assets=[\"DOT\"]", "purchaseProviders": [ - "moonpay", - "ramp" + "moonpay", + "ramp", + "coinbase" ], "type": "normal", "priceProvider": { @@ -55,8437 +62,8699 @@ "id": "0xa6bc5baf2000424e90434ba7104ee399dee80dec", "precision": 8 } - }], + } + ], "xcm": { - "xcmVersion": "v3", - "availableAssets": [ + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ], + "availableDestinations": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "availableDestinations": [ - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT", - "minAmount": "11000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ] - }, - "nodes": [{ - "url": "wss://rpc.polkadot.io", - "name": "Parity node" + ] }, { - "url": "wss://polkadot-rpc.dwellir.com", - "name": "Dwellir node" + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] }, { - "url": "wss://polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT", + "minAmount": "11000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" } + ] + }, + "nodes": [ + { + "url": "wss://api-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } ], "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", "addressPrefix": 0, "options": [ - "crowdloans", - "poolStaking" + "crowdloans", + "poolStaking" ] -}, - { - "disabled": false, - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 9, - "name": "Kusama", - "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/kusama.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://kusama.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/kusama/{type}/{value}" - } - ] - }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - }], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ], - "availableDestinations": [ - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM", - "minAmount": "50000000000" - } - - ], - "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" - } - ] + }, + { + "disabled": false, + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 9, + "name": "Kusama", + "ecosystem": "substrate", + "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://kusama.subscan.io/{type}/{value}" }, - "nodes": [{ - "url": "wss://kusama-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://kusama-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/kusama/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ], + "availableDestinations": [ + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://kusama.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "crowdloans", - "poolStaking" - ] - }, - { - "disabled": false, - "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", - "rank": 108, - "name": "Westend", - "externalApi": { - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://westend.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "staking": "relaychain", - "isUtility": true, - "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", - "name": "westend", - "symbol": "wnd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "normal" - }], - "nodes": [{ - "url": "wss://westend-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://westend-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://westend.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", - "addressPrefix": 42, - "options": [ - "testnet", - "crowdloans", - "poolStaking" - ] - }, - { - "disabled": false, - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1000", - "name": "Kusama AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemine/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "id": "27768227-8a9a-4443-a57d-6013c24f85e9", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 4, - "currencyId": "11", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", - "type": "assets", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "8", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "inferred": true, - "confidence": 0 + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "xcm": { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://kusama-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemine-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemine.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 2, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "1000", - "name": "Polkadot AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemint/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-polkadot.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "type": "normal" + ] }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1984", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", - "type": "assets", - "name": "dot is $ded", - "symbol": "ded", - "precision": 10, - "currencyId": "30", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", - "color": "FE0186" - }, - { - "id": "44587704-7da8-45c3-9541-be7b81de76ee", - "type": "assets", - "name": "pink", - "symbol": "pink", - "precision": 10, - "currencyId": "23", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM", + "minAmount": "50000000000" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://polkadot-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemint-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemint.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + ], + "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" + } + ] }, - { - "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", - "name": "LuckyFriday node" + "nodes": [ + { + "url": "wss://api-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://kusama.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "rank": 108, + "name": "Westend", + "ecosystem": "substrate", + "externalApi": { + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://westend.subscan.io/{type}/{value}" + } + ] }, - { - "url": "wss://dot-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" + "assets": [ + { + "staking": "relaychain", + "isUtility": true, + "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", + "name": "westend", + "symbol": "wnd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", + "color": "FFFFFF", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://westend-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://westend-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", + "addressPrefix": 42, + "options": [ + "testnet", + "crowdloans", + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1000", + "name": "Kusama AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-statemine-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-kusama.subscan.io/{type}/{value}" + } + ] }, - { - "url": "wss://statemint.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 0, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "name": "Acala", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-acala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://acala.subscan.io/{type}/{value}" - }] + "isUtility": true, + "type": "normal" + }, + { + "id": "27768227-8a9a-4443-a57d-6013c24f85e9", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 4, + "currencyId": "11", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", + "type": "assets", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "8", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "inferred": true, + "confidence": 0 + } + ], + "xcm": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - "assets": [{ - "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", - "name": "acala", - "symbol": "aca", - "precision": 12, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal", - "existentialDeposit": "100000000000" + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "100000000000" - }, - { - "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", - "name": "tapio dot", - "symbol": "tdot", - "precision": 10, - "currencyId": "0", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", - "color": "FF0066", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "currencyId": "1", - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "b6c22f93-be25-426b-b921-18bf19c49667", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "0", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" - }, - { - "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true - }, - { - "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "13", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066", - "type": "liquidCrowdloan", - "isNative": true, - "existentialDeposit": "0" - }, - { - "id": "402c606d-691f-4889-a48d-a459a0e37c56", - "name": "inter btc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "3", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "foreignAsset" - }, - { - "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", - "name": "wrapped ether", - "symbol": "weth", - "precision": 18, - "currencyId": "6", - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "foreignAsset" - }, - { - "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", - "name": "astar", - "symbol": "astr", - "precision": 18, - "currencyId": "2", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "foreignAsset" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA", - "minAmount": "56000000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } - ] + ] }, - "nodes": [ - { - "url": "wss://acala-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-acala.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://acala-polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://acala-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://acala-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", - "addressPrefix": 10, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Karura", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-karura/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://karura.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "10000000000" - }, - { - "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", - "name": "rmrk", - "symbol": "rmrk", - "currencyId": "0", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "type": "foreignAsset", - "existentialDeposit": "100000000" - }, - { - "id": "10757cfa-b590-43c1-8524-efc28d798bcb", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "8000000000" - }, - { - "id": "77562113-9e01-49b6-a39d-87a47bde24fe", - "name": "liquid ksm", - "symbol": "lksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", - "name": "crust shadow", - "symbol": "csm", - "currencyId": "5", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "priceId": "crust-storage-market", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ { - "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "1000000000000" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", - "name": "polarisdao", - "symbol": "aris", - "currencyId": "1", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", - "color": "423F47", - "priceId": "polarisdao", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "3d32d7cb-4de5-427e-9668-a9763648a555", - "name": "quartz", - "symbol": "qtz", - "currencyId": "2", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "priceId": "quartz", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "17142348-16f6-49f2-9006-098f5562bda0", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc", - "type": "ormlAsset", - "existentialDeposit": "66" - }, - { - "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "133330000" - }, - { - "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", - "name": "taiga ksm", - "symbol": "taiksm", - "currencyId": "0", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", - "color": "FFFFFF", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", - "name": "voucher slot ksm", - "symbol": "vsksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", - "name": "moonriver", - "symbol": "movr", - "currencyId": "3", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000" - }, - { - "id": "54b7f751-ef62-45b2-ad65-837852de5af4", - "name": "heiko finance", - "symbol": "hko", - "currencyId": "4", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", - "name": "kico", - "symbol": "kico", - "currencyId": "6", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000" - }, - { - "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "7", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "foreignAsset", - "existentialDeposit": "10000" - }, - { - "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", - "name": "integritee", - "symbol": "teer", - "currencyId": "8", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", - "name": "metaverse.network pioneer", - "symbol": "neer", - "currencyId": "9", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", - "name": "calamari network", - "symbol": "kma", - "currencyId": "10", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", - "name": "basilisk", - "symbol": "bsx", - "currencyId": "11", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", - "name": "altair", - "symbol": "air", - "currencyId": "12", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "e0fe6aac-a52e-4e78-be60-defee1006569", - "name": "crab network", - "symbol": "crab", - "currencyId": "13", - "precision": 18, - "priceId": "darwinia-crab-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", - "color": "581BD1", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", - "name": "genshiro", - "symbol": "gens", - "currencyId": "14", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "15", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "foreignAsset", - "existentialDeposit": "10000000000" - }, - { - "id": "2433813f-403f-40e1-9e00-688b037113d5", - "name": "turing token", - "symbol": "tur", - "currencyId": "16", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "type": "foreignAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", - "name": "pichu token", - "symbol": "pchu", - "currencyId": "17", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-assethub-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemine.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 2, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1000", + "name": "Polkadot AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-statemint/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-polkadot.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - } - ] + "type": "normal" + }, + { + "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1984", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "951ca8aa-c390-4512-a35c-d3851440b580", + "type": "assets", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "1337", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", + "type": "assets", + "name": "dot is $ded", + "symbol": "ded", + "precision": 10, + "currencyId": "30", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", + "color": "FE0186" + }, + { + "id": "44587704-7da8-45c3-9541-be7b81de76ee", + "type": "assets", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "23", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "nodes": [{ - "url": "wss://karura-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, - { - "url": "wss://karura-rpc-2.aca-api.network/ws", - "name": "Acala Foundation node 2" - }, - { - "url": "wss://karura-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" - }, - { - "url": "wss://karura.polkawallet.io", - "name": "Polkawallet node" - }, - { - "url": "wss://karura-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "url": "wss://karura.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", - "addressPrefix": 8, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 11, - "name": "Moonriver", - "paraId": "2023", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonriver/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonriver.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "35346815-009a-4cf9-a5ad-85a0167e594d", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "id": "980af72c-d1b8-46c7-9793-fa87912652ec", - "name": "kusama", - "symbol": "xcksm", - "currencyId": "42259045809535163221576417993425387648", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assets" - }, - { - "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "currencyId": "214920334981412447805621250067209749032", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "8e45603e-91c4-4624-8457-9e9b24a98610", - "type": "assets", - "name": "xcrmrk", - "symbol": "xcrmrk", - "currencyId": "182365888117048807484804376330534607370", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", - "type": "assets", - "name": "kintsugi wrapped btc", - "symbol": "xckbtc", - "currencyId": "328179947973504579459046439826496046832", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "currencyId": "189307976387032586987344677431204943363", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", - "type": "assets", - "name": "robonomics native token", - "symbol": "xcxrt", - "currencyId": "108036400430056508975016746969135344601", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF" - }, - { - "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", - "type": "assets", - "name": "kintsugi native token", - "symbol": "xckint", - "currencyId": "175400718394635817552109270754364440562", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "1854feda-ca0c-4e82-9076-af2c7978f042", - "type": "assets", - "name": "karura", - "symbol": "xckar", - "currencyId": "10810581592933651521121702237638664357", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://wss.moonriver.moonbeam.network", - "name": "PureStake node" - }, - { - "url": "wss://moonriver.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://wss.api.moonriver.moonbeam.network", - "name": "Moonbeam Foundation node" - }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "url": "wss://moonriver.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", - "addressPrefix": 1285, - "options": [ - "ethereumBased" - ] + ] + } + ] }, - { - "disabled": false, - "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2007", - "name": "Shiden", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-shiden/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shiden.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-assethub-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://polkadot-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemint.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 0, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Acala", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-acala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://acala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", + "name": "acala", + "symbol": "aca", + "precision": 12, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal", + "existentialDeposit": "100000000000" + }, + { + "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "100000000000" + }, + { + "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", + "name": "tapio dot", + "symbol": "tdot", + "precision": 10, + "currencyId": "0", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", + "color": "FF0066", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "currencyId": "1", + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "b6c22f93-be25-426b-b921-18bf19c49667", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "0", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "13", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066", + "type": "liquidCrowdloan", + "isNative": true, + "existentialDeposit": "0" + }, + { + "id": "402c606d-691f-4889-a48d-a459a0e37c56", + "name": "inter btc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "3", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "foreignAsset" + }, + { + "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", + "name": "wrapped ether", + "symbol": "weth", + "precision": 18, + "currencyId": "6", + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "foreignAsset" + }, + { + "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "2", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "foreignAsset" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", - "name": "shiden network", - "symbol": "sdn", - "precision": 18, - "priceId": "shiden", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + }, + { + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "id": "52509327-116a-4365-bf7d-03cecf7868bc", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551623", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "nodes": [{ - "url": "wss://rpc.shiden.astar.network", - "name": "StakeTechnologies node" - }, + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "url": "wss://shiden.public.blastapi.io", - "name": "Blast node" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "url": "wss://shiden-rpc.dwellir.com", - "name": "Dwellir node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "url": "wss://shiden.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", - "addressPrefix": 5 - }, - { - "disabled": false, - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2001", - "name": "Bifrost", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "normal" + ] }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "75206b90-456e-48ae-a118-0bf9ab861115", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "existentialDeposit": "10000", - "type": "ormlAsset" - }, - { - "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", - "name": "voucher ksm", - "symbol": "vksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "isNative": true, - "type": "vToken" - }, - { - "id": "dd0efecb-51a1-481d-a949-80cb7663c105", - "name": "voucher slot ksm", - "symbol": "vsksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "vsToken", - "isNative": true - }, - { - "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "priceId": "acala-dollar", - "existentialDeposit": "100000000", - "type": "stable" - }, - { - "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "priceId": "tether", - "existentialDeposit": "1000", - "type": "foreignAsset", - "currencyId": "0" - }, - { - "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF", - "existentialDeposit": "1000000000000", - "type": "ormlAsset", - "isNative": true + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" }, { - "id": "33746c72-6806-47d0-a1c4-7b433df862f1", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "url": "wss://bifrost-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA", + "minAmount": "56000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6, - "types": { - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", - "overridesCommon": true + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" } + ] }, - { - "disabled": false, - "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2004", - "name": "Khala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-khala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://khala.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" + "nodes": [ + { + "url": "wss://api-acala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-acala.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", + "addressPrefix": 10, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Karura", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-karura-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://karura.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "10000000000" + }, + { + "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", + "name": "rmrk", + "symbol": "rmrk", + "currencyId": "0", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "type": "foreignAsset", + "existentialDeposit": "100000000" + }, + { + "id": "10757cfa-b590-43c1-8524-efc28d798bcb", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "8000000000" + }, + { + "id": "77562113-9e01-49b6-a39d-87a47bde24fe", + "name": "liquid ksm", + "symbol": "lksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", + "name": "crust shadow", + "symbol": "csm", + "currencyId": "5", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "priceId": "crust-storage-market", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "1000000000000" + }, + { + "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", + "name": "polarisdao", + "symbol": "aris", + "currencyId": "1", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", + "color": "423F47", + "priceId": "polarisdao", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "3d32d7cb-4de5-427e-9668-a9763648a555", + "name": "quartz", + "symbol": "qtz", + "currencyId": "2", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "priceId": "quartz", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "17142348-16f6-49f2-9006-098f5562bda0", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc", + "type": "ormlAsset", + "existentialDeposit": "66" + }, + { + "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "133330000" + }, + { + "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", + "name": "taiga ksm", + "symbol": "taiksm", + "currencyId": "0", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", + "color": "FFFFFF", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", + "name": "voucher slot ksm", + "symbol": "vsksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", + "name": "moonriver", + "symbol": "movr", + "currencyId": "3", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000" + }, + { + "id": "54b7f751-ef62-45b2-ad65-837852de5af4", + "name": "heiko finance", + "symbol": "hko", + "currencyId": "4", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", + "name": "kico", + "symbol": "kico", + "currencyId": "6", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000" + }, + { + "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "7", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "foreignAsset", + "existentialDeposit": "10000" + }, + { + "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", + "name": "integritee", + "symbol": "teer", + "currencyId": "8", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", + "name": "metaverse.network pioneer", + "symbol": "neer", + "currencyId": "9", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", + "name": "calamari network", + "symbol": "kma", + "currencyId": "10", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", + "name": "basilisk", + "symbol": "bsx", + "currencyId": "11", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", + "name": "altair", + "symbol": "air", + "currencyId": "12", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "e0fe6aac-a52e-4e78-be60-defee1006569", + "name": "crab network", + "symbol": "crab", + "currencyId": "13", + "precision": 18, + "priceId": "darwinia-crab-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", + "color": "581BD1", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", + "name": "genshiro", + "symbol": "gens", + "currencyId": "14", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "15", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "foreignAsset", + "existentialDeposit": "10000000000" + }, + { + "id": "2433813f-403f-40e1-9e00-688b037113d5", + "name": "turing token", + "symbol": "tur", + "currencyId": "16", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "type": "foreignAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", + "name": "pichu token", + "symbol": "pchu", + "currencyId": "17", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "0", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "nodes": [{ - "url": "wss://khala-api.phala.network/ws", - "name": "Phala node" - }, + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://khala-rpc.dwellir.com", - "name": "Dwellir node" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "url": "wss://khala.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2086", - "name": "KILT Spiritnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://spiritnet.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", - "name": "kilt protocol", - "symbol": "kilt", - "precision": 15, - "priceId": "kilt-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://spiritnet.kilt.io/", - "name": "KILT Protocol node" - }, - { - "url": "wss://kilt-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ { - "url": "wss://spiritnet.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", - "addressPrefix": 38 - }, - { - "disabled": false, - "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2084", - "name": "Calamari", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-calamari/graphql" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://calamari.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", - "name": "calamari network", - "symbol": "kma", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, { - "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "11", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "id": "003bb609-cae4-4cf0-afad-4230ca17873b", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "12", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, { - "id": "6094eb13-6084-4909-9232-31b6088ad4cc", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "8", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://calamari.systems", - "name": "Manta Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", - "addressPrefix": 78 - }, - { - "disabled": false, - "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2095", - "name": "Quartz", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" } + ] }, - "assets": [{ - "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", - "name": "quartz", - "symbol": "qtz", - "precision": 18, - "priceId": "quartz", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://eu-ws-quartz.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://ws-quartz.unique.network", - "name": "Geo Load Balancer node" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://asia-ws-quartz.unique.network", - "name": "Unique Asia node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "url": "wss://quartz.unique.network", - "name": "Unique node" + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" }, { - "url": "wss://us-ws-quartz.unique.network", - "name": "Unique America node" + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" }, { - "url": "wss://quartz.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", - "addressPrefix": 255 + ] + } + ] }, - { - "disabled": false, - "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2085", - "name": "Parallel Heiko", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel-heiko.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-karura.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://karura.polkawallet.io", + "name": "Polkawallet node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", + "addressPrefix": 8, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 11, + "name": "Moonriver", + "ecosystem": "ethereumBased", + "paraId": "2023", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonriver-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonriver.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "35346815-009a-4cf9-a5ad-85a0167e594d", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "980af72c-d1b8-46c7-9793-fa87912652ec", + "name": "kusama", + "symbol": "xcksm", + "currencyId": "42259045809535163221576417993425387648", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assets" + }, + { + "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "currencyId": "214920334981412447805621250067209749032", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "8e45603e-91c4-4624-8457-9e9b24a98610", + "type": "assets", + "name": "xcrmrk", + "symbol": "xcrmrk", + "currencyId": "182365888117048807484804376330534607370", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", + "type": "assets", + "name": "kintsugi wrapped btc", + "symbol": "xckbtc", + "currencyId": "328179947973504579459046439826496046832", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "currencyId": "189307976387032586987344677431204943363", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", + "type": "assets", + "name": "robonomics native token", + "symbol": "xcxrt", + "currencyId": "108036400430056508975016746969135344601", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF" + }, + { + "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", + "type": "assets", + "name": "kintsugi native token", + "symbol": "xckint", + "currencyId": "175400718394635817552109270754364440562", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "1854feda-ca0c-4e82-9076-af2c7978f042", + "type": "assets", + "name": "karura", + "symbol": "xckar", + "currencyId": "10810581592933651521121702237638664357", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" }, - "assets": [{ - "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", - "name": "heiko finance", - "symbol": "hko", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "isUtility": true, - "type": "normal" + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "382a7dd4-5444-4797-8cec-d921000144ed", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "100", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "113", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "107", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - }, - { - "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "7a97a272-c767-4b45-b055-4c521168558c", - "type": "assets", - "name": "kintsugi native token", - "symbol": "kint", - "precision": 12, - "currencyId": "119", - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "5959efca-47b7-4ec4-a009-5870e2231d52", - "type": "assets", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "currencyId": "121", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "nodes": [{ - "url": "wss://heiko-rpc.parallel.fi", - "name": "Parallel node" + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" }, { - "url": "wss://parallel-heiko.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 110 - }, - { - "disabled": false, - "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2087", - "name": "Picasso", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-picasso" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://picasso.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", - "name": "picasso", - "symbol": "pica", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://picasso-rpc.composable.finance", - "name": "Composable Finance node" - }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "url": "wss://rpc.composablenodes.tech", - "name": "Composable node" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2088", - "name": "Altair", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-altair" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://altair.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "56c7f785-23d6-4199-accf-846be58011e6", - "name": "altair", - "symbol": "air", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.altair.centrifuge.io", - "name": "Centrifuge node" - }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://altair.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", - "addressPrefix": 136 - }, - { - "disabled": false, - "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2096", - "name": "Bit.Country Pioneer", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" } - }, - "assets": [{ - "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", - "name": "metaverse.network pioneer", - "symbol": "neer", - "precision": 18, - "priceId": "metaverse-network-pioneer", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://pioneer.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", - "addressPrefix": 268 + ] }, - { - "disabled": false, - "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2002", - "name": "Clover", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://clv.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", - "name": "clover finance", - "symbol": "clv", - "precision": 18, - "priceId": "clover-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", - "color": "73D4FD", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-para.clover.finance", - "name": "Clover node" - }, - { - "url": "wss://clover.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", - "addressPrefix": 128 + "nodes": [ + { + "url": "wss://api-moonriver.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.moonriver.moonbeam.network", + "name": "PureStake node" + }, + { + "url": "wss://moonriver.unitedbloc.com", + "name": "UnitedBloc node" + }, + { + "url": "wss://wss.api.moonriver.moonbeam.network", + "name": "Moonbeam Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", + "addressPrefix": 1285, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2007", + "name": "Shiden", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-shiden-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shiden.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2006", - "name": "Astar", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-astar/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://astar.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "name": "astar", - "symbol": "astr", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "isUtility": true, - "type": "normal" - }, - { - "id": "d898014a-5c0f-49a1-b563-51017e9dce38", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "4294969280", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", - "type": "assets", - "name": "equilibrium", - "symbol": "eq", - "precision": 9, - "currencyId": "18446744073709551628", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551622", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "18446744073709551619", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://rpc.astar.network", - "name": "Astar node" - }, - { - "url": "wss://astar.public.blastapi.io", - "name": "Blast node" - }, - { - "url": "wss://astar-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://astar.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://astar.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", - "addressPrefix": 5, - "options": [ - "tipRequired" - ] + "assets": [ + { + "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", + "name": "shiden network", + "symbol": "sdn", + "precision": 18, + "priceId": "shiden", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "52509327-116a-4365-bf7d-03cecf7868bc", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551623", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://api-shiden.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.shiden.astar.network", + "name": "StakeTechnologies node" + }, + { + "url": "wss://shiden.public.blastapi.io", + "name": "Blast node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", + "addressPrefix": 5 + }, + { + "disabled": false, + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2001", + "name": "Bifrost", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost-kusama.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2012", - "name": "Parallel", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "isUtility": true, - "type": "normal" + "assets": [ + { + "isUtility": true, + "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "normal" + }, + { + "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "75206b90-456e-48ae-a118-0bf9ab861115", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "existentialDeposit": "10000", + "type": "ormlAsset" + }, + { + "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", + "name": "voucher ksm", + "symbol": "vksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "isNative": true, + "type": "vToken" + }, + { + "id": "dd0efecb-51a1-481d-a949-80cb7663c105", + "name": "voucher slot ksm", + "symbol": "vsksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "vsToken", + "isNative": true + }, + { + "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "priceId": "acala-dollar", + "existentialDeposit": "100000000", + "type": "stable" + }, + { + "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "priceId": "tether", + "existentialDeposit": "1000", + "type": "foreignAsset", + "currencyId": "0" + }, + { + "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF", + "existentialDeposit": "1000000000000", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "33746c72-6806-47d0-a1c4-7b433df862f1", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - { - "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "101", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "1d850850-a2fb-4728-8dfc-13679c470017", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "114", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", - "type": "assets", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "currencyId": "120", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", - "type": "assets", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "106", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066" - }, - { - "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", - "type": "assets", - "name": "acala", - "symbol": "aca", - "precision": 12, - "currencyId": "108", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", - "type": "assets", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "currencyId": "110", - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066" - }, - { - "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", - "type": "assets", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "122", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - }, - { - "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "e52c5825-3076-4277-84e2-8b45f778d981", - "type": "assets", - "name": "cdot-6/13", - "symbol": "cdot-6/13", - "precision": 10, - "currencyId": "200060013", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "1236185c-fa70-481e-befa-deda855054df", - "type": "assets", - "name": "cdot-7/14", - "symbol": "cdot-7/14", - "precision": 10, - "currencyId": "200070014", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", - "type": "assets", - "name": "cdot-8/15", - "symbol": "cdot-8/15", - "precision": 10, - "currencyId": "200080015", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - - ] + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, - "nodes": [ - { - "url": "wss://parallel-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 172 - }, - { - "disabled": false, - "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2090", - "name": "Basilisk", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-basilisk" - } + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" }, - "assets": [{ - "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", - "name": "basilisk", - "symbol": "bsx", - "precision": 12, - "priceId": "basilisk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "isUtility": true, - "type": "normal" + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assetId", - "existentialDeposit": "100000000" - }, - { - "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "14", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "assetId", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc.basilisk.cloud", - "name": "Basilisk node" - }, - { - "url": "wss://basilisk-rpc.dwellir.com", - "name": "Dwellir node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", - "addressPrefix": 10041 - }, - { - "disabled": false, - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 12, - "paraId": "2004", - "name": "Moonbeam", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonbeam/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbeam.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", - "type": "assets", - "name": "polkadot", - "symbol": "xcdot", - "precision": 10, - "currencyId": "42259045809535163221576417993425387648", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "311e3073-1bfb-40de-b601-20278e457577", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "precision": 12, - "currencyId": "110021739665376159354538090254163045594", - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "9539da0e-3610-406a-b1b9-c811b6508a17", - "type": "assets", - "name": "acala", - "symbol": "xcaca", - "precision": 12, - "currencyId": "224821240862170613278369189818311486111", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", - "type": "assets", - "name": "interlay", - "symbol": "xcintr", - "precision": 10, - "currencyId": "101170542313601871197860408087030232491", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", - "type": "assets", - "name": "astar", - "symbol": "xcastr", - "precision": 18, - "currencyId": "224077081838586484055667086558292981199", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF" - }, - { - "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", - "type": "assets", - "name": "tether usd", - "symbol": "xcusdt", - "precision": 6, - "currencyId": "311091173110107856861649819128533077277", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", - "type": "assets", - "name": "equilibrium token", - "symbol": "xceq", - "precision": 9, - "currencyId": "190590555344745888270686124937537713878", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", - "type": "assets", - "name": "equilibrium dollar protocol", - "symbol": "xceqd", - "precision": 9, - "currencyId": "187224307232923873519830480073807488153", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED" - }, - { - "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "precision": 12, - "currencyId": "132685552157663328694213725410064821485", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", - "type": "assets", - "name": "pink", - "symbol": "xcpink", - "precision": 10, - "currencyId": "64174511183114006009298114091987195453", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://wss.api.moonbeam.network", - "name": "Moonbeam Foundation node" - }, - { - "url": "wss://moonbeam.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://moonbeam.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "url": "wss://1rpc.io/glmr", - "name": "Automata 1RPC node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1284, - "options": [ - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", - "rank": 112, - "name": "Moonbase Alpha", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" - }, - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbase.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", - "name": "moonbase alpha", - "symbol": "dev", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://wss.api.moonbase.moonbeam.network", - "name": "Moonbeam Network node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "url": "wss://moonbase.unitedbloc.com", - "name": "UnitedBloc node" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "url": "wss://moonbeam-alpha.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1287, - "options": [ - "testnet", - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2092", - "name": "Kintsugi", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } + ] }, - "assets": [{ - "id": "f5d1db12-0a68-4897-903d-51a887daa1db", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "id": "a6761186-60ba-4ea8-bec1-2db08a420301", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "id": "80662ad9-8920-43ae-859a-33d97e87f74e", - "type": "ormlChain", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "priceId": "kintsugi-btc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://api-kusama.interlay.io/parachain", - "name": "Kintsugi Labs node" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "url": "wss://kintsugi.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", - "addressPrefix": 2092, - "iosMinAppVersion": "2.0.7" - }, - { - "disabled": false, - "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2024", - "name": "Genshiro", - "assets": [{ - "id": "e207bcef-ab90-4df4-852f-566c309d778e", - "name": "genshiro", - "symbol": "gens", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://node.ksm.genshiro.io", - "name": "Genshiro node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", - "addressPrefix": 67 + ] + } + ] }, - { - "disabled": false, - "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2048", - "name": "Robonomics", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://robonomics.subscan.io/{type}/{value}" - }], - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-robonomics" - } - }, - "assets": [{ - "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", - "name": "robonomics network", - "symbol": "xrt", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4294967295", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://kusama.rpc.robonomics.network", - "name": "Airalab node" - }, - { - "url": "wss://robonomics.leemo.me", - "name": "Leemo node" - }, - { - "url": "wss://robonomics.0xsamsara.com", - "name": "Samsara node" - }, - { - "url": "wss://robonomics.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", - "addressPrefix": 32 + "nodes": [ + { + "url": "wss://api-bifrost-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6, + "types": { + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", + "overridesCommon": true + } + }, + { + "disabled": false, + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2004", + "name": "Khala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-khala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://khala.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2100", - "name": "Subsocial", - "assets": [{ - "id": "07f9e907-d099-4893-a67b-96cb2fe63049", - "name": "subsocial", - "symbol": "sub", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://para.subsocial.network", - "name": "Dappforce node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", - "addressPrefix": 28 + "assets": [ + { + "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + }, + { + "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-khala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://khala-api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2086", + "name": "KILT Spiritnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kilt-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://spiritnet.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2101", - "name": "Zeitgeist", - "assets": [{ - "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", - "name": "zeitgeist", - "symbol": "ztg", - "precision": 10, - "priceId": "zeitgeist", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://zeitgeist.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://zeitgeist-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", - "addressPrefix": 73 + "assets": [ + { + "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", + "name": "kilt protocol", + "symbol": "kilt", + "precision": 15, + "priceId": "kilt-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://spiritnet.kilt.io/", + "name": "KILT Protocol node" + }, + { + "url": "wss://kilt-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", + "addressPrefix": 38 + }, + { + "disabled": false, + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2084", + "name": "Calamari", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-calamari-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://calamari.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "335369975fced3fc22e23498da306a712f4fd964c957364d53c49cea9db8bc2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2021", - "name": "Efinity", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-efinity/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://efinity.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "80b7c347-161d-40a9-aed6-b2f202e3577e", - "name": "efinity", - "symbol": "efi", - "precision": 18, - "priceId": "efinity", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EFI.svg", - "color": "516CD4", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.efinity.io", - "name": "Efinity node" - }, - { - "url": "wss://efinity-rpc.dwellir.com", - "name": "Dwellir node" - }, + "assets": [ + { + "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", + "name": "calamari network", + "symbol": "kma", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "11", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "003bb609-cae4-4cf0-afad-4230ca17873b", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "12", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "6094eb13-6084-4909-9232-31b6088ad4cc", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "8", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://calamari.systems", + "name": "Manta Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", + "addressPrefix": 78 + }, + { + "disabled": false, + "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2095", + "name": "Quartz", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + } + }, + "assets": [ + { + "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", + "name": "quartz", + "symbol": "qtz", + "precision": 18, + "priceId": "quartz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-quartz.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://eu-ws-quartz.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://ws-quartz.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://asia-ws-quartz.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws-quartz.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", + "addressPrefix": 255 + }, + { + "disabled": false, + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2085", + "name": "Parallel Heiko", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel-heiko.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", + "name": "heiko finance", + "symbol": "hko", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "isUtility": true, + "type": "normal" + }, + { + "id": "382a7dd4-5444-4797-8cec-d921000144ed", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "100", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "113", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "107", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + }, + { + "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "7a97a272-c767-4b45-b055-4c521168558c", + "type": "assets", + "name": "kintsugi native token", + "symbol": "kint", + "precision": 12, + "currencyId": "119", + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "5959efca-47b7-4ec4-a009-5870e2231d52", + "type": "assets", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "currencyId": "121", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://heiko-rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 110 + }, + { + "disabled": false, + "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2087", + "name": "Picasso", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-picasso-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://picasso.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-picasso.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://picasso-rpc.composable.finance", + "name": "Composable Finance node" + }, + { + "url": "wss://rpc.composablenodes.tech", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2088", + "name": "Altair", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-altair-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://altair.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "56c7f785-23d6-4199-accf-846be58011e6", + "name": "altair", + "symbol": "air", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://fullnode.altair.centrifuge.io", + "name": "Centrifuge node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", + "addressPrefix": 136 + }, + { + "disabled": false, + "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2096", + "name": "Pioneer Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + } + }, + "assets": [ + { + "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", + "name": "metaverse.network pioneer", + "symbol": "neer", + "precision": 18, + "priceId": "metaverse-network-pioneer", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://pioneer-rpc-3.bit.country/wss", + "name": "MetaverseNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", + "addressPrefix": 268 + }, + { + "disabled": false, + "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2002", + "name": "Clover", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://clv.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", + "name": "clover finance", + "symbol": "clv", + "precision": 18, + "priceId": "clover-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", + "color": "73D4FD", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-para.clover.finance", + "name": "Clover node" + }, + { + "url": "wss://clover-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2006", + "name": "Astar", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-astar-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://astar.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "name": "astar", + "symbol": "astr", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "isUtility": true, + "type": "normal" + }, + { + "id": "d898014a-5c0f-49a1-b563-51017e9dce38", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "4294969280", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", + "type": "assets", + "name": "equilibrium", + "symbol": "eq", + "precision": 9, + "currencyId": "18446744073709551628", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551622", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "18446744073709551619", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "url": "wss://efinity.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR", + "minAmount": "73000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/efinity.svg", - "addressPrefix": 1110 + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] }, - { - "disabled": false, - "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2034", - "name": "HydraDX", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-hydradx/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://hydradx.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-astar.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.astar.network", + "name": "Astar node" + }, + { + "url": "wss://astar.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://astar.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", + "addressPrefix": 5, + "options": [ + "tipRequired" + ] + }, + { + "disabled": false, + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2012", + "name": "Parallel", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-parallel-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "isUtility": true, + "type": "normal" + }, + { + "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "101", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1d850850-a2fb-4728-8dfc-13679c470017", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "114", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", + "type": "assets", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "currencyId": "120", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", + "type": "assets", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "106", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066" + }, + { + "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", + "type": "assets", + "name": "acala", + "symbol": "aca", + "precision": 12, + "currencyId": "108", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", + "type": "assets", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "currencyId": "110", + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066" + }, + { + "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", + "type": "assets", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "122", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + }, + { + "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "e52c5825-3076-4277-84e2-8b45f778d981", + "type": "assets", + "name": "cdot-6/13", + "symbol": "cdot-6/13", + "precision": 10, + "currencyId": "200060013", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "1236185c-fa70-481e-befa-deda855054df", + "type": "assets", + "name": "cdot-7/14", + "symbol": "cdot-7/14", + "precision": 10, + "currencyId": "200070014", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", + "type": "assets", + "name": "cdot-8/15", + "symbol": "cdot-8/15", + "precision": 10, + "currencyId": "200080015", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "fce79b6c-e071-4271-837e-6ec87a719390", - "name": "hydradx", - "symbol": "hdx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" }, + { + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" + }, + { + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" + }, + { + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" + }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "id": "4697396b-37c4-426f-a36a-fda1935f365a", - "type": "assetId", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "5", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "existentialDeposit": "17540000" - }, - { - "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", - "type": "assetId", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "11", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "existentialDeposit": "36" - }, - { - "id": "880664d6-71f6-473e-95ba-4cc697429578", - "type": "assetId", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "16", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "existentialDeposit": "34854864344868000" - }, - { - "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", - "type": "assetId", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "10", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "nodes": [{ - "url": "wss://rpc.hydradx.cloud", - "name": "Galactic Council node" - }, + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "url": "wss://hydradx-rpc.dwellir.com", - "name": "Dwellir node" + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" }, { - "url": "wss://hydradx.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" }, { - "url": "wss://rpc-lb.data6.zp-labs.net:8443/hydradx/ws/?token=2ZGuGivPJJAxXiT1hR1Yg2MXGjMrhEBYFjgbdPi", - "name": "ZeePrime node" + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", - "addressPrefix": 63 - }, - { - "disabled": false, - "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2031", - "name": "Centrifuge", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-centrifuge" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://centrifuge.subscan.io//{type}/{value}" - }] + ] }, - "assets": [{ - "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", - "name": "centrifuge", - "symbol": "cfg", - "precision": 18, - "priceId": "centrifuge", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.parachain.centrifuge.io", - "name": "Centrufge node" - }, - { - "url": "wss://centrifuge-parachain.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", - "addressPrefix": 36 - }, - { - "disabled": false, - "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2026", - "name": "Nodle Parachain", - "assets": [{ - "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", - "name": "nodle network", - "symbol": "nodl", - "precision": 11, - "priceId": "nodle-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://nodle-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "url": "wss://nodle-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", - "addressPrefix": 37 - }, - { - "disabled": false, - "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2032", - "name": "Interlay", - "assets": [{ - "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true + ] }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", - "type": "ormlChain", - "currencyId": "DOT", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", - "type": "ormlChain", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - } - ], - "nodes": [{ - "url": "wss://api.interlay.io/parachain", - "name": "Kintsugi Labs node" - }, - { - "url": "wss://interlay.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", - "addressPrefix": 2032 - }, - { - "disabled": false, - "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2106", - "name": "Litmus", - "assets": [{ - "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", - "color": "6530F0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litmus-parachain.litentry.io", - "name": "Litentry node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", - "addressPrefix": 131 - }, - { - "disabled": false, - "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2040", - "name": "Polkadex Main Network", - "assets": [{ - "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", - "name": "polkadex", - "symbol": "pdex", - "precision": 12, - "priceId": "polkadex", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", - "color": "D32D79", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.polkadex.trade", - "name": "Polkadex Team node" - }, - { - "url": "wss://polkadex.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "Onfinalty node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", - "addressPrefix": 88 - }, - { - "disabled": true, - "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2115", - "name": "Dorafactory Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", - "name": "dora factory", - "symbol": "dora", - "precision": 12, - "priceId": "dora-factory", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.dorafactory.org", - "name": "DORA node" + ] } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", - "addressPrefix": 128 + ] }, - { - "disabled": false, - "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2043", - "name": "OriginTrail Parachain", - "assets": [{ - "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", - "name": "origitrail parachain", - "symbol": "otp", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OTP.svg", - "color": "6344DF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://parachain-rpc.origin-trail.network", - "name": "TraceLabs node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OriginTrail.svg", - "addressPrefix": 101 + "nodes": [ + { + "url": "wss://api-parallel.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 172 + }, + { + "disabled": false, + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2090", + "name": "Basilisk", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-basilisk-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2037", - "name": "UNIQUE", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "57d05537-06a2-453b-ac87-d081aee65ec9", - "name": "unique network", - "symbol": "unq", - "precision": 18, - "priceId": "unique-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", - "color": "65BAF9", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://eu-ws.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://asia-ws.unique.network", - "name": "Unique Asia node" - }, - { - "url": "wss://us-ws.unique.network", - "name": "Unique America node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", - "addressPrefix": 7391 + "assets": [ + { + "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", + "name": "basilisk", + "symbol": "bsx", + "precision": 12, + "priceId": "basilisk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "isUtility": true, + "type": "normal" + }, + { + "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assetId", + "existentialDeposit": "100000000" + }, + { + "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "14", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "assetId", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-basilisk.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.basilisk.cloud", + "name": "Basilisk node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", + "addressPrefix": 10041 + }, + { + "disabled": false, + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 12, + "paraId": "2004", + "name": "Moonbeam", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonbeam-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbeam.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2030", - "name": "Bifrost Polkadot", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost.subscan.io/{type}/{value}" - }] + "assets": [ + { + "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", + "type": "assets", + "name": "polkadot", + "symbol": "xcdot", + "precision": 10, + "currencyId": "42259045809535163221576417993425387648", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "311e3073-1bfb-40de-b601-20278e457577", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "precision": 12, + "currencyId": "110021739665376159354538090254163045594", + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "9539da0e-3610-406a-b1b9-c811b6508a17", + "type": "assets", + "name": "acala", + "symbol": "xcaca", + "precision": 12, + "currencyId": "224821240862170613278369189818311486111", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", + "type": "assets", + "name": "interlay", + "symbol": "xcintr", + "precision": 10, + "currencyId": "101170542313601871197860408087030232491", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", + "type": "assets", + "name": "astar", + "symbol": "xcastr", + "precision": 18, + "currencyId": "224077081838586484055667086558292981199", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", + "type": "assets", + "name": "tether usd", + "symbol": "xcusdt", + "precision": 6, + "currencyId": "311091173110107856861649819128533077277", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", + "type": "assets", + "name": "equilibrium token", + "symbol": "xceq", + "precision": 9, + "currencyId": "190590555344745888270686124937537713878", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", + "type": "assets", + "name": "equilibrium dollar protocol", + "symbol": "xceqd", + "precision": 9, + "currencyId": "187224307232923873519830480073807488153", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED" + }, + { + "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "precision": 12, + "currencyId": "132685552157663328694213725410064821485", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", + "type": "assets", + "name": "pink", + "symbol": "xcpink", + "precision": 10, + "currencyId": "64174511183114006009298114091987195453", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" }, - { - "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", - "type": "token2", - "currencyId": "0", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", - "type": "token2", - "currencyId": "1", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", - "type": "token2", - "currencyId": "2", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - } - ], - "nodes": [{ - "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-polkadot.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6 - }, - { - "disabled": false, - "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2013", - "name": "Litentry", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Litentry-x-Fearless-Wallet" - } + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, - "assets": [{ - "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", - "color": "02C86A", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litentry-parachain.litentry.io", - "name": "Litentry node" - }, - { - "url": "wss://litentry-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", - "addressPrefix": 31 - }, - { - "disabled": false, - "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2035", - "name": "Phala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-phala/graphql" - } + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, - "assets": [{ - "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://api.phala.network/ws", - "name": "Phala node" - }, - { - "url": "wss://phala-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "url": "wss://phala.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2019", - "name": "Composable Finance", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Composable-Finance-X-Fearless-Wallet" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://composable.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", - "name": "composable finance", - "symbol": "layr", - "precision": 12, - "priceId": "composable-finance-layr", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.composable.finance", - "name": "Composable node" - }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "url": "wss://composable.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2119", - "name": "Bajun Kusama", - "assets": [{ - "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", - "name": "bajun network", - "symbol": "baju", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.bajun.network", - "name": "AjunaNetwork node" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "url": "wss://bajun.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "url": "wss://bajun.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1337 - }, - { - "disabled": false, - "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2113", - "name": "Kabocha", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Kabocha-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "898eb0a1-ede6-437a-97b7-e92407db985f", - "name": "kabocha", - "symbol": "kab", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kabocha.jelliedowl.com", - "name": "JelliedOwl node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", - "addressPrefix": 27 - }, - { - "disabled": true, - "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2107", - "name": "KICO", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" } + ] }, - "assets": [{ - "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", - "name": "kico", - "symbol": "kico", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.kico.dico.io", - "name": "DICO Foundation node" - }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "url": "wss://rpc.api.kico.dico.io", - "name": "DICO Foundation 2 node" + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2110", - "name": "Mangata Kusama Mainnet", - "assets": [{ - "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", - "name": "mangata x", - "symbol": "mgx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", - "color": "10C5C5", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", - "type": "ormlChain", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "currencyId": "14", - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF" - }, - { - "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", - "type": "ormlChain", - "name": "voucher ksm", - "symbol": "vksm", - "precision": 12, - "currencyId": "15", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF" - }, - { - "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", - "type": "ormlChain", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "currencyId": "26", - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF" - }, - { - "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", - "type": "ormlChain", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "31", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", - "type": "ormlChain", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "30", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", - "type": "ormlChain", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "currencyId": "7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0" - } - ], - "nodes": [{ - "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", - "name": "Mangata node" - }, - { - "url": "wss://kusama-archive.mangata.online", - "name": "Mangata Archive node" - }, - { - "url": "wss://kusama-rpc.mangata.online", - "name": "Mangata RPC node" - }, - { - "url": "wss://mangata-x.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2116", - "name": "DataHighway Tanganika", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } - }, - "assets": [{ - "id": "15df9971-2e6a-4619-a5ca-9ad571655287", - "name": "datahighway", - "symbol": "dhx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", - "color": "6C179F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://tanganika.datahighway.com", - "name": "DataHighway node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", - "addressPrefix": 33 + ] + } + ] }, - { - "disabled": false, - "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2011", - "name": "Equilibrium", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://equilibrium.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", - "name": "equilibrium", - "symbol": "eq", - "currencyId": "25969", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6", - "isUtility": true, - "type": "equilibrium" - }, - { - "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "6648164", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "equilibrium" - }, - { - "id": "6b21d130-7475-4f61-b893-799061fc05bf", - "name": "acala", - "symbol": "aca", - "currencyId": "6382433", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", - "name": "bnb", - "symbol": "bnb", - "currencyId": "6450786", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", - "name": "polkadot", - "symbol": "dot", - "currencyId": "6582132", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", - "name": "astar", - "symbol": "astr", - "currencyId": "1634956402", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "equilibrium" - }, - { - "id": "c98efbda-a452-4329-8199-fef32dc9307e", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "1635087204", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "equilibrium" - }, - { - "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", - "name": "binance usd", - "symbol": "busd", - "currencyId": "1651864420", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", - "name": "moonbeam", - "symbol": "glmr", - "currencyId": "1735159154", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", - "name": "inter ibtc", - "symbol": "ibtc", - "currencyId": "1768060003", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "equilibrium" - }, - { - "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", - "name": "interlay", - "symbol": "intr", - "currencyId": "1768846450", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", - "name": "parallel finance", - "symbol": "para", - "currencyId": "1885434465", - "precision": 9, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "equilibrium" - }, - { - "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "1970496628", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "equilibrium" - }, - { - "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", - "name": "fluid xdot", - "symbol": "xdot", - "currencyId": "2019848052", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", - "name": "equilibrium dot", - "symbol": "eqdot", - "currencyId": "435694104436", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", - "color": "FFFFFF", - "type": "equilibrium" - } - ], - "nodes": [ - { - "url": "wss://equilibrium-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://node.pol.equilibrium.io", - "name": "Equilibrium node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", - "addressPrefix": 68, - "options": [ - "utilityFeePayment" - ] + "nodes": [ + { + "url": "wss://api-moonbeam.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.api.moonbeam.network", + "name": "Moonbeam Foundation node" + }, + { + "url": "wss://moonbeam.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1284, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": true, + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "rank": 111, + "name": "Moonbase Alpha", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" + }, + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbase.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2039", - "name": "Integritee Shell", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" - } - }, - "assets": [{ - "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [ - { - "url": "wss://integritee-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://polkadot.api.integritee.network", - "name": "Integritee node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2114", - "name": "Turing Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" - } - }, - "assets": [{ - "id": "148ce615-aea3-42fa-be45-5eb5606813b8", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "isUtility": true, - "type": "normal" - }, - { - "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", - "type": "assetId", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000" - } - ], - "nodes": [{ - "url": "wss://rpc.turing.oak.tech", - "name": "OAK node" - }, - { - "url": "wss://turing-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", - "addressPrefix": 51 - }, - { - "disabled": false, - "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1001", - "name": "Encointer on Kusama", - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.encointer.org", - "name": "Encointer Association node" - }, - { - "url": "wss://sys.ibp.network/encointer-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/encointer-kusama", - "name": "IBP-GeoDNS2 node" - }, - { - "url": "wss://encointer.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", - "addressPrefix": 2 + "assets": [ + { + "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", + "name": "moonbase alpha", + "symbol": "dev", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.api.moonbase.moonbeam.network", + "name": "Moonbeam Network node" + }, + { + "url": "wss://moonbase.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1287, + "options": [ + "testnet", + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2092", + "name": "Kintsugi", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" + } }, - { - "disabled": true, - "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2102", - "name": "Pichiu Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", - "name": "pichu token", - "symbol": "pchu", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "f5d1db12-0a68-4897-903d-51a887daa1db", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "a6761186-60ba-4ea8-bec1-2db08a420301", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "80662ad9-8920-43ae-859a-33d97e87f74e", + "type": "ormlChain", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "priceId": "kintsugi-btc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-kintsugi.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api-kusama.interlay.io/parachain", + "name": "Kintsugi Labs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", + "addressPrefix": 2092, + "iosMinAppVersion": "2.0.7" + }, + { + "disabled": true, + "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2024", + "name": "Genshiro", + "ecosystem": "substrate", + "assets": [ + { + "id": "e207bcef-ab90-4df4-852f-566c309d778e", + "name": "genshiro", + "symbol": "gens", + "currencyId": "1734700659", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://node.ksm.genshiro.io", + "name": "Genshiro node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", + "addressPrefix": 67 + }, + { + "disabled": false, + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2048", + "name": "Robonomics", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://robonomics.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "giantsquid", + "url": "https://squid-robonomics-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2125", - "name": "InvArch Tinker Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", - "name": "tinkernet parachain", - "symbol": "tnkr", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://invarch-tinkernet.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", - "addressPrefix": 117 + "assets": [ + { + "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", + "name": "robonomics network", + "symbol": "xrt", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4294967295", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.robonomics.network", + "name": "Airalab node" + }, + { + "url": "wss://robonomics.leemo.me", + "name": "Leemo node" + }, + { + "url": "wss://robonomics.0xsamsara.com", + "name": "Samsara node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2101", + "name": "Subsocial", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-subsocial-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2123", - "name": "GM Parachain", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" - } - }, - "assets": [{ - "id": "19763697-37d8-4643-b840-3fd8565f5d83", - "name": "gm parachain", - "symbol": "fren", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", - "color": "F7D64D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://leemo.gmordie.com", - "name": "leemo node" - }, - { - "url": "wss://ws.gm.bldnodes.org", - "name": "bLd Nodes node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", - "addressPrefix": 7013 + "assets": [ + { + "id": "07f9e907-d099-4893-a67b-96cb2fe63049", + "name": "subsocial", + "symbol": "sub", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://para.subsocial.network", + "name": "Dappforce node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", + "addressPrefix": 28 + }, + { + "disabled": false, + "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2092", + "name": "Zeitgeist", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-zeitgeist-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2121", - "name": "Imbue Kusama", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", - "name": "imbue network", - "symbol": "imbu", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", - "color": "C3FD51", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://imbue-kusama.imbue.network", - "name": "Imbue Network node node" + "assets": [ + { + "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", + "name": "zeitgeist", + "symbol": "ztg", + "precision": 10, + "priceId": "zeitgeist", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-zeitgeist.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", + "addressPrefix": 73 + }, + { + "disabled": false, + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2034", + "name": "HydraDX", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-hydradx-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://hydradx.subscan.io/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2124", - "name": "Amplitude", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-amplitude/graphql" - } - }, - "assets": [{ - "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", - "name": "amplitude", - "symbol": "ampe", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", - "color": "7CE2A0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://amplitude-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-amplitude.pendulumchain.tech", - "name": "PendulumChain node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", - "addressPrefix": 57 + ] }, - { - "disabled": true, - "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2046", - "name": "Darwinia2", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://darwinia-parachain.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b861f610-cf2c-43ad-a660-f6b809a05062", - "name": "darwinia", - "symbol": "ring", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.darwinia.network", - "name": "Darwinia Network node" - }, - { - "url": "wss://darwinia-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://parachain-rpc.darwinia.network", - "name": "Darwinia Network 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", - "addressPrefix": 18 + "assets": [ + { + "id": "fce79b6c-e071-4271-837e-6ec87a719390", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "4697396b-37c4-426f-a36a-fda1935f365a", + "type": "assetId", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "5", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "existentialDeposit": "17540000" + }, + { + "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", + "type": "assetId", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "11", + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "existentialDeposit": "36" + }, + { + "id": "880664d6-71f6-473e-95ba-4cc697429578", + "type": "assetId", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "16", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "existentialDeposit": "34854864344868000" + }, + { + "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", + "type": "assetId", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "10", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-hydradx.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.hydradx.cloud", + "name": "Galactic Council node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", + "addressPrefix": 63 + }, + { + "disabled": false, + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2031", + "name": "Centrifuge", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-centrifuge-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://centrifuge.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2052", - "name": "Kylin Network", - "assets": [{ - "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", - "name": "kylin network", - "symbol": "kyl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://polkadot.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", + "name": "centrifuge", + "symbol": "cfg", + "precision": 18, + "priceId": "centrifuge", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-centrifuge.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://fullnode.parachain.centrifuge.io", + "name": "Centrufge node" + }, + { + "url": "wss://rpc-centrifuge.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", + "addressPrefix": 36 + }, + { + "disabled": false, + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2026", + "name": "Nodle Parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", + "name": "nodle network", + "symbol": "nodl", + "precision": 11, + "priceId": "nodle-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-nodle.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", + "addressPrefix": 37 + }, + { + "disabled": false, + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2032", + "name": "Interlay", + "ecosystem": "substrate", + "assets": [ + { + "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", + "type": "ormlChain", + "currencyId": "DOT", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", + "type": "ormlChain", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + } + ], + "nodes": [ + { + "url": "wss://api-interlay.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.interlay.io/parachain", + "name": "Kintsugi Labs node" + }, + { + "url": "wss://rpc-interlay.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", + "addressPrefix": 2032 + }, + { + "disabled": false, + "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2106", + "name": "Litmus", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litmus-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Crust Shadow Parachain", - "paraId": "2012", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shadow.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", - "name": "crust shadow", - "symbol": "csm", - "precision": 12, - "priceId": "crust-storage-market", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-shadow.crust.network", - "name": "Crust node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", - "addressPrefix": 66 + "assets": [ + { + "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", + "color": "6530F0", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.litmus-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", + "addressPrefix": 131 + }, + { + "disabled": false, + "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", + "name": "Polkadex Main Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-polkadex-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", - "name": "Kusama (test)", - "assets": [{ - "id": "03561957-3383-4f9f-8033-1b2c36d88db6", - "name": "kusama", - "symbol": "unit", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", - "name": "SORA Kusama Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] + "assets": [ + { + "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", + "name": "polkadex", + "symbol": "pdex", + "precision": 12, + "priceId": "polkadex", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", + "color": "D32D79", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.polkadex.trade", + "name": "Polkadex Team node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", + "addressPrefix": 88 + }, + { + "disabled": true, + "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2115", + "name": "Dorafactory Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" + } }, - { - "disabled": true, - "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", - "name": "Polkadot (test)", - "assets": [{ - "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", - "name": "polkadot", - "symbol": "unit", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", - "name": "SORA Polkadot Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] + "assets": [ + { + "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", + "name": "dora factory", + "symbol": "dora", + "precision": 12, + "priceId": "dora-factory", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.dorafactory.org", + "name": "DORA node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2043", + "name": "NeuroWeb Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-origintrail-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Snow Kusama", - "assets": [{ - "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", - "name": "snow", - "symbol": "icz", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://snow-rpc.icenetwork.io", - "name": "Snow node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", - "addressPrefix": 2207 + "assets": [ + { + "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", + "name": "neuro", + "symbol": "neuro", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-neuroweb.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://parachain-rpc.origin-trail.network", + "name": "TraceLabs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "addressPrefix": 101 + }, + { + "disabled": false, + "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2037", + "name": "UNIQUE", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "rank": 100, - "name": "SORA test", - "externalApi": { - "history": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-staging" - }, - "staking": { - "type": "sora", - "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-test" - } - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ] - } - ] - }, - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true - }, - { - "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true - }, - { - "id": "038a7045-af00-466d-b72b-95485c4674b7", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "c96e012c-0786-4980-9750-bae61de0aa19", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true - }, - { - "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true - }, - { - "id": "38eae54b-723d-457c-8d45-4beab249612f", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true - }, - { - "id": "2565e418-d5bc-4318-99b5-53e893681518", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true - }, - { - "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset" - }, - { - "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset" - }, - { - "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset" - }, - { - "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true - }, - { - "id": "eface91d-b2a8-49d2-88e8-640586bda477", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset" - }, - { - "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset" - }, - { - "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset" - } - - ], - "nodes": [ - { - "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", - "name": "Sora Stage #8" - }, - { - "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #1" - }, - { - "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #2" - }, - { - "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "testnet", - "polkaswap" - ] - }, - { - "disabled": false, - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "rank": 0, - "name": "SORA Mainnet", - "externalApi": { - "history": { - "type": "sora", - "url": "https://squid.subsquid.io/sora/v/v5/graphql" - }, - "staking": { - "type" : "sora", - "url": "https://squid.subsquid.io/sora/v/v5/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-prod" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://sora.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200040000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200050000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200090000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "217925d8-c529-4480-98e5-b8bf651129ef", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200080000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "5e3de486-789e-4e47-8f49-870852cfebb6", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" - } - }, - { - "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" - } - }, - { - "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" - } - }, - { - "id": "2de2b668-33cd-4e85-a501-4921481e618f", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" - } - }, - { - "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" - } - }, - { - "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" - } - }, - { - "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" - } - }, - { - "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200060000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200070000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", - "name": "soshiba", - "symbol": "soshiba", - "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", - "color": "FFA409", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" - } - }, - { - "id": "68a46965-94e8-4a03-af65-6237f83d482f", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", - "name": "hermes dao", - "symbol": "hmx", - "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", - "color":"FFFFFF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" - } - }, - { - "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" - } - }, - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "name": "kusama", - "symbol": "ksm", - "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", - "precision": 18, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" - } - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot-sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" - } - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "name": "acala", - "symbol": "aca", - "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", - "precision": 18, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" - } - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "name": "astar", - "symbol": "astr", - "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" - } - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "name": "liberland merit", - "symbol": "llm", - "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" - } - }, - { - "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", - "name": "liberland dollar", - "symbol": "lld", - "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", - "precision": 18, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" - } - }, - { - "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", - "name": "toncoin", - "symbol": "toncoin", - "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", - "precision": 18, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" - } - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT" - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA" - }, - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - } - ] - }, - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT", - "minAmount": "1100000000000000000" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA", - "minAmount": "1000000000000000000" - } - ] - }, - { - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD", - "minAmount": "1000000000000000000" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - } - ] - }, - { - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "assets": [ - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://ws.mof.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof2.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof3.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://sora.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "polkaswap", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", - "name": "Aleph Zero", - "assets": [{ - "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", - "name": "aleph zero", - "symbol": "azero", - "precision": 12, - "priceId": "aleph-zero", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.azero.dev", - "name": "Aleph Zero Foundation node" + "assets": [ + { + "id": "57d05537-06a2-453b-ac87-d081aee65ec9", + "name": "unique network", + "symbol": "unq", + "precision": 18, + "priceId": "unique-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", + "color": "65BAF9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-unique.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://eu-ws.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://asia-ws.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", + "addressPrefix": 7391 + }, + { + "disabled": false, + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2030", + "name": "Bifrost Polkadot", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bifrostpolkadot-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost.subscan.io/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1002", - "name": "Kusama BridgeHub", - "assets": [{ - "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama-bridge-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://sys.ibp.network/bridgehub-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-kusama", - "name": "IBP-GeoDNS2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", - "addressPrefix": 2 + ] }, - { - "disabled": false, - "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2222", - "name": "Ipci", - "assets": [{ - "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", - "name": "dao ipci", - "symbol": "mito", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", - "color": "0BF0A6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.rpc.ipci.io", - "name": "Airalab node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", - "addressPrefix": 32 - }, - { - "disabled": false, - "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2015", - "name": "Integritee Network (Kusama)", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://integritee.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.integritee.network", - "name": "Integritee node" - }, - { - "url": "wss://integritee-kusama.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2236", - "name": "Subzero", - "assets": [{ - "id": "3a1cc15e-903b-4102-9384-364c00e67283", - "name": "zero", - "symbol": "zero", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-1.kusama.node.zero.io", - "name": "ZeroNetwork node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", - "addressPrefix": 25 - }, - { - "disabled": false, - "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2051", - "name": "Ajuna Polkadot", - "assets": [{ - "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", - "name": "ajuna network", - "symbol": "ajun", - "precision": 12, - "priceId": "ajuna-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.ajuna.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://ajuna.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1328 + "assets": [ + { + "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", + "type": "token2", + "currencyId": "0", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", + "type": "token2", + "currencyId": "1", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", + "type": "token2", + "currencyId": "2", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + } + ], + "nodes": [ + { + "url": "wss://api-bifrost-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6 + }, + { + "disabled": false, + "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2013", + "name": "Litentry", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litentry-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2048", - "name": "Bitgreen", - "assets": [{ - "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", - "name": "bitgreen", - "symbol": "bbb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", - "color": "C0FF00", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.bitgreen.org", - "name": "Bitgreen node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", + "color": "02C86A", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-litentry.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.litentry-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", + "addressPrefix": 31 + }, + { + "disabled": false, + "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2035", + "name": "Phala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-phala-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2008", - "name": "Crust", - "assets": [{ - "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", - "name": "crust network", - "symbol": "cru", - "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", - "color": "FA8C16", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://crust-parachain.crustapps.net", - "name": "Crust node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", - "addressPrefix": 88 + "assets": [ + { + "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-phala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2019", + "name": "Composable Finance", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-composable-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://composable.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2091", - "name": "Frequency", - "assets": [{ - "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", - "name": "frequency", - "symbol": "frqcy", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", - "color": "4473EC", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://0.rpc.frequency.xyz", - "name": "Frequency 0 node" - }, - { - "url": "wss://1.rpc.frequency.xyz", - "name": "Frequency 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", - "addressPrefix": 90 + "assets": [ + { + "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", + "name": "composable finance", + "symbol": "layr", + "precision": 12, + "priceId": "composable-finance-layr", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-composable.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.composable.finance", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2119", + "name": "Bajun Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bajun-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2007", - "name": "Kapex", - "assets": [{ - "id": "a99dd750-0c15-49df-a86f-6caa577614bc", - "name": "kapex parachain", - "symbol": "kpx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", - "color": "306EB6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kapex-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", - "addressPrefix": 2007 + "assets": [ + { + "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", + "name": "bajun network", + "symbol": "baju", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.bajun.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://bajun.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1337 + }, + { + "disabled": false, + "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2113", + "name": "Kabocha", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kabocha-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 10, - "paraId": "2094", - "name": "Pendulum", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-pendulum/graphql" - } - }, - "assets": [ - { - "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", - "name": "pendulum", - "symbol": "pen", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", - "color": "8D809E", - "isUtility": true, - "type": "normal" - }, - { - "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", - "type": "xcm", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc-pendulum.prd.pendulumchain.tech", - "name": "PendulumChain node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", - "addressPrefix": 56, - "options": [ - "utilityFeePayment" - ] + "assets": [ + { + "id": "898eb0a1-ede6-437a-97b7-e92407db985f", + "name": "kabocha", + "symbol": "kab", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kabocha.jelliedowl.com", + "name": "JelliedOwl node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", + "addressPrefix": 27 + }, + { + "disabled": true, + "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2107", + "name": "KICO", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", - "name": "Ternoa Mainnet", - "assets": [{ - "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", - "name": "ternoa", - "symbol": "caps", - "precision": 18, - "priceId": "coin-capsule", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", - "color": "FF002B", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - }, - "staking": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - } - }, - "nodes": [{ - "url": "wss://mainnet.ternoa.network", - "name": "CapsuleCorp node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", + "name": "kico", + "symbol": "kico", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.kico.dico.io", + "name": "DICO Foundation node" + }, + { + "url": "wss://rpc.api.kico.dico.io", + "name": "DICO Foundation 2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2110", + "name": "Mangata Kusama Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", + "name": "mangata x", + "symbol": "mgx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", + "color": "10C5C5", + "isUtility": true, + "type": "normal" + }, + { + "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", + "type": "ormlChain", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "14", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", + "type": "ormlChain", + "name": "voucher ksm", + "symbol": "vksm", + "precision": 12, + "currencyId": "15", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF" + }, + { + "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", + "type": "ormlChain", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "currencyId": "26", + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF" + }, + { + "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", + "type": "ormlChain", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "31", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", + "type": "ormlChain", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "30", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", + "type": "ormlChain", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0" + } + ], + "nodes": [ + { + "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", + "name": "Mangata node" + }, + { + "url": "wss://kusama-archive.mangata.online", + "name": "Mangata Archive node" + }, + { + "url": "wss://kusama-rpc.mangata.online", + "name": "Mangata RPC node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2116", + "name": "DataHighway Tanganika", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2011", - "name": "SORA Kusama parachain", - "assets": [{ - "id": "2df458e8-c4a9-4026-986f-8962a36fe604", - "name": "sora", - "symbol": "xor", - "precision": 12, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420 + "assets": [ + { + "id": "15df9971-2e6a-4619-a5ca-9ad571655287", + "name": "datahighway", + "symbol": "dhx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", + "color": "6C179F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://tanganika.datahighway.com", + "name": "DataHighway node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", + "addressPrefix": 33 + }, + { + "disabled": true, + "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Equilibrium", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://equilibrium.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2025", - "name": "SORA Polkadot parachain", - "assets": [{ - "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 81 + "assets": [ + { + "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", + "name": "equilibrium", + "symbol": "eq", + "currencyId": "25969", + "precision": 9, + "existentialDeposit": "1000000000", + "priceId": "equilibrium-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6", + "isUtility": true, + "type": "equilibrium" + }, + { + "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "6648164", + "precision": 9, + "existentialDeposit": "1000000000", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "equilibrium" + }, + { + "id": "6b21d130-7475-4f61-b893-799061fc05bf", + "name": "acala", + "symbol": "aca", + "currencyId": "6382433", + "precision": 9, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", + "name": "bnb", + "symbol": "bnb", + "currencyId": "6450786", + "precision": 9, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", + "name": "polkadot", + "symbol": "dot", + "currencyId": "6582132", + "precision": 9, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", + "name": "astar", + "symbol": "astr", + "currencyId": "1634956402", + "precision": 9, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "equilibrium" + }, + { + "id": "c98efbda-a452-4329-8199-fef32dc9307e", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "1635087204", + "precision": 9, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "equilibrium" + }, + { + "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", + "name": "binance usd", + "symbol": "busd", + "currencyId": "1651864420", + "precision": 9, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", + "name": "moonbeam", + "symbol": "glmr", + "currencyId": "1735159154", + "precision": 9, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", + "name": "inter ibtc", + "symbol": "ibtc", + "currencyId": "1768060003", + "precision": 9, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "equilibrium" + }, + { + "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", + "name": "interlay", + "symbol": "intr", + "currencyId": "1768846450", + "precision": 9, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", + "name": "parallel finance", + "symbol": "para", + "currencyId": "1885434465", + "precision": 9, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "equilibrium" + }, + { + "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "1970496628", + "precision": 9, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "equilibrium" + }, + { + "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", + "name": "fluid xdot", + "symbol": "xdot", + "currencyId": "2019848052", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", + "name": "equilibrium dot", + "symbol": "eqdot", + "currencyId": "435694104436", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", + "color": "FFFFFF", + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://api-equilibrium.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", + "addressPrefix": 68, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2039", + "name": "Integritee Shell", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" + } }, - { - "disabled": false, - "chainId": "1", - "rank": 1, - "name": "Ethereum", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "name": "chainlink", - "symbol": "link", - "precision": 18, - "priceId": "chainlink", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x111111111117dC0aa78b770fA6A738034120C302", - "name": "1inch", - "symbol": "1inch", - "precision": 18, - "priceId": "1inch", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "normal", - "ethereumType": "erc20", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "isUtility": false, - "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", - "name": "sora validator", - "symbol": "val", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", - "name": "polkaswap", - "symbol": "pswap", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", - "name": "ceres", - "symbol": "ceres", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x236501327e701692a281934230AF0b6BE8Df3353", - "name": "fluence", - "symbol": "flt", - "precision": 18, - "priceId": "fluence-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-mainnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] + "assets": [ + { + "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-integritee.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2114", + "name": "Turing Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" + } }, - { - "disabled": false, - "chainId": "5", - "rank": 101, - "name": "Ethereum Goerli", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://goerli.etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-goerli.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "a31e35a9-5026-4816-9b8b-08029627b256", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "name": "usdc stablecoin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-goerli.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-goerli.blastapi.io/", - "name": "Blast wss" - } + "assets": [ + { + "id": "148ce615-aea3-42fa-be45-5eb5606813b8", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "isUtility": true, + "type": "normal" + }, + { + "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", + "type": "assetId", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000" + } + ], + "nodes": [ + { + "url": "wss://api-turing.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.turing.oak.tech", + "name": "OAK node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", + "addressPrefix": 51 + }, + { + "disabled": false, + "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1001", + "name": "Encointer on Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.encointer.org", + "name": "Encointer Association node" + }, + { + "url": "wss://sys.ibp.network/encointer-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/encointer-kusama", + "name": "IBP-GeoDNS2 node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/encointer", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", + "addressPrefix": 2 + }, + { + "disabled": true, + "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2102", + "name": "Pichiu Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "56", - "rank": 2, - "name": "BNB Smart Chain", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", - "name": "BNB", - "symbol": "BNB", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - }, + "assets": [ + { + "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", + "name": "pichu token", + "symbol": "pchu", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2125", + "name": "InvArch Tinker Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", + "name": "tinkernet parachain", + "symbol": "tnkr", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-invarch.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", + "addressPrefix": 117 + }, + { + "disabled": true, + "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2123", + "name": "GM Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" + } + }, + "assets": [ + { + "id": "19763697-37d8-4643-b840-3fd8565f5d83", + "name": "gm parachain", + "symbol": "fren", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", + "color": "F7D64D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://leemo.gmordie.com", + "name": "leemo node" + }, + { + "url": "wss://ws.gm.bldnodes.org", + "name": "bLd Nodes node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", + "addressPrefix": 7013 + }, + { + "disabled": true, + "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2121", + "name": "Imbue Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", + "name": "imbue network", + "symbol": "imbu", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", + "color": "C3FD51", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://imbue-kusama.imbue.network", + "name": "Imbue Network node node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2124", + "name": "Amplitude", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-amplitude-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", + "name": "amplitude", + "symbol": "ampe", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", + "color": "7CE2A0", + "isUtility": true, + "type": "normal" + }, + { + "id": "b2f80126-9b7f-4026-adc8-dd7fb39baf2c", + "type": "xcm", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "dc34cadc-d448-4bd8-a484-af6e602fe08d", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "465b44c5-ab78-4283-960e-d3b834adb646", + "type": "xcm", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "currencyId": "2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-amplitude.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-amplitude.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", + "addressPrefix": 57 + }, + { + "disabled": true, + "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2046", + "name": "Darwinia2", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-darwinia-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "isUtility": false, - "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", - "name": "usd coin", - "symbol": "usdc", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://darwinia-parachain.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b861f610-cf2c-43ad-a660-f6b809a05062", + "name": "darwinia", + "symbol": "ring", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.darwinia.network", + "name": "Darwinia Network node" + }, + { + "url": "wss://darwinia-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://parachain-rpc.darwinia.network", + "name": "Darwinia Network 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", + "addressPrefix": 18 + }, + { + "disabled": true, + "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2052", + "name": "Kylin Network", + "ecosystem": "substrate", + "assets": [ + { + "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", + "name": "kylin network", + "symbol": "kyl", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://polkadot.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Crust Shadow Parachain", + "ecosystem": "substrate", + "paraId": "2012", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shadow.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", + "name": "crust shadow", + "symbol": "csm", + "precision": 12, + "priceId": "crust-storage-market", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-shadow.crust.network", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", + "addressPrefix": 66 + }, + { + "disabled": true, + "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", + "name": "Kusama (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "03561957-3383-4f9f-8033-1b2c36d88db6", + "name": "kusama", + "symbol": "unit", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", + "name": "SORA Kusama Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", + "name": "Polkadot (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", + "name": "polkadot", + "symbol": "unit", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", + "name": "SORA Polkadot Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Snow Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", + "name": "snow", + "symbol": "icz", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://snow-rpc.icenetwork.io", + "name": "Snow node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", + "addressPrefix": 2207 + }, + { + "disabled": true, + "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", + "rank": 100, + "name": "SORA test", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-staging" + }, + "staking": { + "type": "sora", + "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" + } + }, + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ], + "availableDestinations": [ + { + "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "assets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ] + } + ] + }, + "assets": [ + { + "id": "b5a44630-920e-43ee-809f-61890d0888b0", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain" + }, + { + "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true + }, + { + "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true + }, + { + "id": "038a7045-af00-466d-b72b-95485c4674b7", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "c96e012c-0786-4980-9750-bae61de0aa19", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true + }, + { + "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true + }, + { + "id": "38eae54b-723d-457c-8d45-4beab249612f", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true + }, + { + "id": "2565e418-d5bc-4318-99b5-53e893681518", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true + }, + { + "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset" + }, + { + "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset" + }, + { + "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset" + }, + { + "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "name": "rococo", + "symbol": "roc", + "precision": 18, + "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true + }, + { + "id": "eface91d-b2a8-49d2-88e8-640586bda477", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset" + }, + { + "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset" + }, + { + "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset" + } + ], + "nodes": [ + { + "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", + "name": "Sora Stage #8" + }, + { + "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #1" + }, + { + "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #2" + }, + { + "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "testnet", + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "rank": 0, + "name": "SORA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "staking": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "history": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "pricing": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-prod" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://sora.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200040000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200050000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200090000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "217925d8-c529-4480-98e5-b8bf651129ef", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200080000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "5e3de486-789e-4e47-8f49-870852cfebb6", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" + } + }, + { + "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" + } + }, + { + "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" + } + }, + { + "id": "2de2b668-33cd-4e85-a501-4921481e618f", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" + } + }, + { + "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" + } + }, + { + "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" + } + }, + { + "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" + } + }, + { + "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200060000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200070000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", + "name": "soshiba", + "symbol": "soshiba", + "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", + "color": "FFA409", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" + } + }, + { + "id": "68a46965-94e8-4a03-af65-6237f83d482f", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", + "name": "hermes dao", + "symbol": "hmx", + "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", + "priceId": "hermes-dao", + "color": "FFFFFF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" + } + }, + { + "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" + } + }, + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "name": "kusama", + "symbol": "ksm", + "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", + "precision": 18, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" + } + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" + } + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "name": "acala", + "symbol": "aca", + "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", + "precision": 18, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" + } + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "name": "astar", + "symbol": "astr", + "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" + } + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "name": "liberland merit", + "symbol": "llm", + "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" + } + }, + { + "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", + "name": "liberland dollar", + "symbol": "lld", + "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", + "precision": 18, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" + } + }, + { + "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", + "name": "toncoin", + "symbol": "toncoin", + "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", + "precision": 18, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" + } + }, + { + "id": "59a87850-0194-4040-b92e-b869ee3dd3fa", + "name": "kensetsu token", + "symbol": "ken", + "currencyId": "0x02000b0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KEN.svg", + "color": "00004E", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000b0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "ffc85c62-c970-4cb4-900c-f7d4831c3695", + "name": "kensetsu usd", + "symbol": "kusd", + "currencyId": "0x02000c0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KUSD.svg", + "color": "BF0A30", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000c0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "46e8a947-ade7-4c87-83b5-d724a35da919", + "name": "apollo", + "symbol": "apollo", + "currencyId": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/APOLLO.svg", + "color": "EB0EAD", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d" + } + }, + { + "id": "1028531a-5e46-4759-9452-1c3c903b7cec", + "name": "kensetsu ounce of gold", + "symbol": "kgold", + "currencyId": "0x02000d0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KGOLD.svg", + "color": "FAF49C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000d0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "b221dd6b-c34e-4ed0-b46c-70f7ed0758d9", + "name": "chameleon", + "symbol": "karma", + "currencyId": "0x02000f0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KARMA.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000f0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "8ad4fe9d-1d1c-4708-88c4-1b96dc2615d0", + "name": "sora pussy", + "symbol": "pussy", + "currencyId": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PUSSY.svg", + "color": "F54E48", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac" + } + }, + { + "id": "6ea1fc55-5154-4ebc-85d2-5ccc9a26d81c", + "name": "kensetsu xor", + "symbol": "kxor", + "currencyId": "0x02000e0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KXOR.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000e0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "def9e74d-3e0f-43d3-9d30-798202b3bd18", + "name": "vested xor", + "symbol": "vxor", + "currencyId": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VXOR.svg", + "color": "E3232C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "symbol": "DOT" + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA" + }, + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + } + ] + }, + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA", + "minAmount": "1000000000000000000" + } + ] + }, + { + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD", + "minAmount": "1000000000000000000" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://ws.mof.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof2.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof3.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", + "name": "Aleph Zero", + "ecosystem": "substrate", + "externalApi": { + "history":{ + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aleph-zero" + } + }, + "assets": [ + { + "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", + "name": "aleph zero", + "symbol": "azero", + "precision": 12, + "priceId": "aleph-zero", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-aleph-zero-mainnet.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.azero.dev", + "name": "Aleph Zero Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1002", + "name": "Kusama BridgeHub", + "ecosystem": "substrate", + "externalApi":{ + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---kusama-bridgehub" + } + }, + "assets": [ + { + "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-kusama-bridge-hub.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-bridge-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://sys.ibp.network/bridgehub-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-kusama", + "name": "IBP-GeoDNS2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2222", + "name": "Ipci", + "ecosystem": "substrate", + "assets": [ + { + "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", + "name": "dao ipci", + "symbol": "mito", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", + "color": "0BF0A6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.ipci.io", + "name": "Airalab node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2015", + "name": "Integritee Network (Kusama)", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://integritee.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-integritee" + } + }, + "assets": [ + { + "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.integritee.network", + "name": "Integritee node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2236", + "name": "Subzero", + "ecosystem": "substrate", + "assets": [ + { + "id": "3a1cc15e-903b-4102-9384-364c00e67283", + "name": "zero", + "symbol": "zero", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-1.kusama.node.zero.io", + "name": "ZeroNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", + "addressPrefix": 25 + }, + { + "disabled": false, + "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2051", + "name": "Ajuna Polkadot", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://ajuna.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---ajuna" + } + }, + "assets": [ + { + "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", + "name": "ajuna network", + "symbol": "ajun", + "precision": 12, + "priceId": "ajuna-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.ajuna.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://ajuna.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1328 + }, + { + "disabled": false, + "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2048", + "name": "Bitgreen", + "ecosystem": "substrate", + "assets": [ + { + "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", + "name": "bitgreen", + "symbol": "bbb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", + "color": "C0FF00", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.bitgreen.org", + "name": "Bitgreen node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2008", + "name": "Crust", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://crust-parachain.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-crust" + } + }, + "assets": [ + { + "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", + "name": "crust network", + "symbol": "cru", + "precision": 12, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://crust-parachain.crustapps.net", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", + "addressPrefix": 88 + }, + { + "disabled": false, + "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2091", + "name": "Frequency", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/frequency" + } + }, + "assets": [ + { + "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", + "name": "frequency", + "symbol": "frqcy", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", + "color": "4473EC", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-frequency.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://0.rpc.frequency.xyz", + "name": "Frequency 0 node" + }, + { + "url": "wss://1.rpc.frequency.xyz", + "name": "Frequency 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", + "addressPrefix": 90 + }, + { + "disabled": true, + "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2007", + "name": "Kapex", + "ecosystem": "substrate", + "assets": [ + { + "id": "a99dd750-0c15-49df-a86f-6caa577614bc", + "name": "kapex parachain", + "symbol": "kpx", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", + "color": "306EB6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kapex-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", + "addressPrefix": 2007 + }, + { + "disabled": false, + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 10, + "paraId": "2094", + "name": "Pendulum", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-pendulum-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", + "name": "pendulum", + "symbol": "pen", + "precision": 12, + "priceId": "pendulum-chain", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", + "color": "8D809E", + "isUtility": true, + "type": "normal" + }, + { + "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "a54675c6-83de-4f11-84ee-b8cd1754e512", + "type": "xcm", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "6", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "6578b36f-eed9-4e60-bbd9-def276266957", + "type": "xcm", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "2", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "1463120c-42c8-499d-a16f-8fcb9f1ee58c", + "type": "xcm", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "0", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1070de6d-0bb9-4159-8852-ced84ff7ad10", + "type": "xcm", + "name": "brazilian digital", + "symbol": "brz", + "precision": 18, + "currencyId": "4", + "priceId": "brz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BRZ.svg", + "color": "14B23D" + }, + { + "id": "cdfd0d0e-f19a-4636-8823-3d3b4efcff03", + "type": "xcm", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + }, + { + "id": "a1a2523b-e151-49ed-a42e-73c67e964067", + "type": "xcm", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "currencyId": "8", + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF" + }, + { + "id": "b890fc17-a609-4d79-a45e-2bb6e59f82c0", + "type": "xcm", + "name": "voucher dot", + "symbol": "vdot", + "precision": 10, + "currencyId": "10", + "priceId": "voucher-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/vDOT.svg", + "color": "E6007A" + }, + { + "id": "3af48a15-5358-4616-bca5-14cca9c5b0dc", + "type": "xcm", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "9", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "579b7f7f-330f-43a4-b2f0-c890bd97c92d", + "type": "xcm", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "11", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "ce9aebd0-c1f6-4ddf-b3a0-65fce4c556e5", + "type": "xcm", + "name": "axelar bridged usdc", + "symbol": "usdc.axl", + "precision": 6, + "currencyId": "12", + "priceId": "axelar-bridged-usdc-cosmos", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC_AXL.svg", + "color": "3E73C4" + } + ], + "nodes": [ + { + "url": "wss://api-pendulum.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-pendulum.prd.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", + "addressPrefix": 56, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", + "name": "Ternoa Mainnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + }, + "staking": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + } + }, + "assets": [ + { + "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", + "name": "ternoa", + "symbol": "caps", + "precision": 18, + "priceId": "coin-capsule", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", + "color": "FF002B", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "nodes": [ + { + "url": "wss://mainnet.ternoa.network", + "name": "CapsuleCorp node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2011", + "name": "SORA Kusama parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "2df458e8-c4a9-4026-986f-8962a36fe604", + "name": "sora", + "symbol": "xor", + "precision": 12, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 420 + }, + { + "disabled": false, + "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2025", + "name": "SORA Polkadot parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 81 + }, + { + "disabled": false, + "chainId": "1", + "rank": 1, + "name": "Ethereum", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://etherscan.io/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.etherscan.io/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "name": "chainlink", + "symbol": "link", + "precision": 18, + "priceId": "chainlink", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x111111111117dC0aa78b770fA6A738034120C302", + "name": "1inch", + "symbol": "1inch", + "precision": 18, + "priceId": "1inch", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x455e53CBB86018Ac2B8092FdCd39d8444aFFC3F6", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", + "name": "sora validator", + "symbol": "val", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", + "name": "polkaswap", + "symbol": "pswap", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", + "name": "ceres", + "symbol": "ceres", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x32a7C02e79c4ea1008dD6564b35F131428673c41", + "name": "crust network", + "symbol": "cru", + "precision": 18, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", + "name": "the sandbox", + "symbol": "sand", + "precision": 18, + "priceId": "sand", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SAND.svg", + "color": "4AA4EB", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x236501327e701692a281934230AF0b6BE8Df3353", + "name": "fluence", + "symbol": "flt", + "precision": 18, + "priceId": "fluence-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "https://ethereum.publicnode.com", + "name": "Public https" + }, + { + "url": "https://nodes.mewapi.io/rpc/eth", + "name": "MEW https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ethereum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "56", + "rank": 2, + "name": "BNB Smart Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api.bscscan.com/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://bscscan.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", + "name": "BNB", + "symbol": "BNB", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", + "name": "DAI", + "symbol": "DAI", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + "name": "usd coin", + "symbol": "usdc", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", + "name": "trueusd", + "symbol": "tusd", + "precision": 18, + "priceId": "true-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", + "color": "005ADD", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", + "name": "pancakeswap", + "symbol": "cake", + "precision": 18, + "priceId": "pancakeswap-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", + "color": "D1884F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", + "name": "biswap", + "symbol": "bsw", + "precision": 18, + "priceId": "biswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", + "color": "E42648", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", + "name": "hooked protocol", + "symbol": "hook", + "precision": 18, + "priceId": "hooked-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", + "name": "venus", + "symbol": "xvs", + "precision": 18, + "priceId": "venus", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xF21768cCBC73Ea5B6fd3C687208a7c2def2d966e", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "ethereumType": "bep20" + } + ], + "nodes": [ + { + "url": "https://bsc.publicnode.com", + "name": "Public https" + }, + { + "url": "wss://bsc.publicnode.com", + "name": "Public wss" + }, + { + "url": "https://bsc-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://bsc-mainnet.blastapi.io/", + "name": "Blast wss" + }, + { + "url": "https://bsc-dataseed1.ninicoin.io/", + "name": "Ninicoin" + }, + { + "url": "https://bsc.nodereal.io/", + "name": "Nodereal" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "137", + "rank": 3, + "name": "Polygon", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://polygonscan.com/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.polygonscan.com/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "0x0000000000000000000000000000000000001010", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "name": "weth", + "symbol": "weth", + "precision": 18, + "priceId": "weth", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "name": "dai", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://polygon-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://polygon-mainnet.blastapi.io/", + "name": "Blast wss" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", + "parentId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://matrix.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/enjin-matrixchain" + } + }, + "assets": [ + { + "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 1110 + }, + { + "disabled": false, + "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", + "name": "Canary Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://canary-matrix.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", + "name": "enjin coin", + "symbol": "cenj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.canary.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 9030, + "options": [ + "testnet" + ] + }, + { + "disabled": true, + "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Relaychain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://enjin.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "43748d94-90ba-41b2-8732-326cd943a501", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.relay.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 2135 + }, + { + "disabled": false, + "chainId": "42161", + "rank": 4, + "name": "Arbitrum One", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "37b6375a-0708-4728-bec9-bf15b8680aff", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", + "name": "arbitrum", + "symbol": "arb", + "precision": 18, + "priceId": "arbitrum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", + "color": "12AAFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://arbitrum-one.publicnode.com/", + "name": "Public http node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "chainlinkProvider", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "10", + "rank": 5, + "name": "OP Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x4200000000000000000000000000000000000042", + "name": "optimism", + "symbol": "op", + "precision": 18, + "priceId": "optimism", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", + "color": "FF0420", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://optimism-mainnet.blastapi.io/", + "name": "Blast https node" + }, + { + "url": "wss://optimism-mainnet.blastapi.io/", + "name": "Blast wss node" + }, + { + "url": "https://optimism.publicnode.com/", + "name": "Public http node" + }, + { + "url": "wss://optimism.publicnode.com/", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "43114", + "rank": 6, + "name": "Avalanche C-Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" + }, + "explorers": [ { - "isUtility": false, - "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "870f6877-c917-48bc-aa64-723416c94ebb", + "name": "avalanche", + "symbol": "avax", + "precision": 18, + "priceId": "avalanche-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", + "color": "E84142", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://avalanche-c-chain.publicnode.com/", + "name": "Public https node" + }, + { + "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1101", + "rank": 7, + "name": "Polygon zkEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" + }, + "explorers": [ { - "isUtility": false, - "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", - "name": "trueusd", - "symbol": "tusd", - "precision": 18, - "priceId": "true-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", - "color": "005ADD", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xa2036f0538221a77A3937F1379699f44945018d0", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x22b21beddef74fe62f031d2c5c8f7a9f8a4b304d", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://zkevm-rpc.com", + "name": "Zkevm https node" + }, + { + "url": "https://polygon-zkevm-mainnet.public.blastapi.io", + "name": "Blast https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7001", + "name": "ZetaChain Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", + "name": "zetachain", + "symbol": "zeta", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", + "color": "235643", + "ethereumType": "normal" + } + ], + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://zetachain-athens-3.blockscout.com/api/v2/" + } + }, + "nodes": [ + { + "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", + "name": "Ankr https node" + }, + { + "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + }, + { + "url": "https://zetachain-testnet-evm.itrocket.net", + "name": "Itrocket https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", + "name": "Reef Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "externalApi": { + "history": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "staking": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "explorers": [ { - "isUtility": false, - "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "reef", + "types": [ + "transfer", + "extrinsic", + "account" + ], + "url": "https://reefscan.com/{type}/{value}" + } + ] + }, + "nodes": [ + { + "url": "wss://rpc.reefscan.com/ws", + "name": "Reef Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "name": "Manta Parachain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ { - "isUtility": false, - "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", - "name": "pancakeswap", - "symbol": "cake", - "precision": 18, - "priceId": "pancakeswap-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", - "color": "D1884F", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://manta.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---manta" + } + }, + "assets": [ + { + "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", + "name": "manta", + "symbol": "manta", + "precision": 18, + "priceId": "manta-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", + "color": "29CCB9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.manta.systems", + "name": "Manta Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", + "addressPrefix": 77 + }, + { + "disabled": false, + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "name": "Liberland", + "ecosystem": "substrate", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "name": "liberland dollar", + "symbol": "lld", + "precision": 12, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "isUtility": true, + "type": "normal" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "name": "liberland merit", + "symbol": "llm", + "precision": 12, + "currencyId": "1", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" + } + }, + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "name": "sora xor", + "symbol": "xor", + "priceId": "sora", + "precision": 18, + "currencyId": "774441749", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "isUtility": false, - "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", - "name": "biswap", - "symbol": "bsw", - "precision": 18, - "priceId": "biswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", - "color": "E42648", - "type": "normal", - "ethereumType": "bep20" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD" }, { - "isUtility": false, - "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", - "name": "hooked protocol", - "symbol": "hook", - "precision": 18, - "priceId": "hooked-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" }, { - "isUtility": false, - "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", - "name": "venus", - "symbol": "xvs", - "precision": 18, - "priceId": "venus", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } - ], - "nodes": [ - { - "url": "https://bsc-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://bsc-mainnet.blastapi.io/", - "name": "Blast wss" - }, - { - "url": "https://bsc-dataseed1.ninicoin.io/", - "name": "Ninicoin" - }, - { - "url": "https://bsc.nodereal.io/", - "name": "Nodereal" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "97", - "rank": 102, - "name": "BNB Smart Chain Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-testnet.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://testnet.bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "49e67f26-e01b-4aeb-b741-f0bd727c51e4", - "name": "tBNB", - "symbol": "tBNB", - "precision": 18, - "priceId": "binancecoin", - "color": "FF0066", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xEC5dCb5Dbf4B114C9d0F65BcCAb49EC54F6A0867", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc-testnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://bsc-testnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "11155111", - "name": "Sepolia", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-sepolia.etherscan.io/api" - }, - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://sepolia.etherscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302s", - "name": "sepolia eth", - "symbol": "seth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-sepolia.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://eth-sepolia.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "137", - "rank": 3, - "name": "Polygon", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.polygonscan.com/api" - } - }, + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "name": "weth", - "symbol": "weth", - "precision": 18, - "priceId": "weth", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "name": "dai", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "normal", - "ethereumType": "erc20" - }, { - "isUtility": false, - "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD", + "minAmount": "1000000000000" }, { - "isUtility": false, - "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" }, { - "isUtility": false, - "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://mainnet.liberland.org", + "name": "Liberland node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "248", + "name": "Oasys Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.games/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.games/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://oasys.blockpi.network/v1/rpc/public/", + "name": "Blockpi https node" + }, + { + "url": "https://rpc.mainnet.oasys.games/", + "name": "Oasys https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "72778", + "name": "CAGA Ankara Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", + "name": "caga", + "symbol": "caga", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.ankara-cagacrypto.com", + "name": "Caga wss node" + }, + { + "url": "https://www.ankara-cagacrypto.com", + "name": "Caga https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", + "name": "XX network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" + } + }, + "assets": [ + { + "id": "526dca29-63ff-4683-88d6-852d1455b17b", + "name": "xx network", + "symbol": "xx", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", + "priceId": "xxcoin", + "color": "0AC1C7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://xxnetwork-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.xx.network", + "name": "xx Foundation node #1" + }, + { + "url": "wss://rpc-hetzner.xx.network", + "name": "xx Foundation node #2" + }, + { + "url": "wss://rpc-do.xx.network", + "name": "xx Foundation node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", + "addressPrefix": 55 + }, + { + "disabled": false, + "chainId": "d3d2f3a3495dc597434a99d7d449ebad6616db45e4e4f178f31cc6fa14378b70", + "name": "Avail Turing Testnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "nodes": [ - { - "url": "https://polygon-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-mainnet.blastapi.io/", - "name": "Blast wss" - } + "url": "https://avail-turing.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", + "name": "avail token", + "symbol": "avail", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://turing-testnet.avail-rpc.com", + "name": "Ankr node" + }, + { + "url": "wss://avail-turing.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://avail-turing-rpc.publicnode.com", + "name": "AllNode node" + }, + { + "url": "wss://turing.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://avail-turing.bountyblok.io", + "name": "Bountyblok node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42, + "options": [ + "checkAppId", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "196", + "rank": 13, + "name": "X Layer Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] + "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", + "name": "okb", + "symbol": "okb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", + "color": "FFFFFF", + "priceId": "okb", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.xlayer.tech/", + "name": "X Layer Tech https node" + }, + { + "url": "wss://ws.xlayer.tech/", + "name": "X Layer Tech wss node" }, { - "disabled": false, - "chainId": "80001", - "rank": 103, - "name": "Polygon mumbai testnet", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://mumbai.polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-testnet.polygonscan.com/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://polygon-testnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-testnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "nft", - "utilityFeePayment" - ] + "url": "https://xlayerrpc.okx.com/", + "name": "X Layer OKX https node" + }, + { + "url": "wss://xlayerws.okx.com/", + "name": "X Layer OKX wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", + "rank": 14, + "name": "Analog Testnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/analog-testnet__c29yY" + } + }, + "assets": [ + { + "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", + "name": "tanlog", + "symbol": "tanlog", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", + "color": "9A74F7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.testnet.analog.one", + "name": "Analog Testnet node" + } + ], + "options": [ + "utilityFeePayment" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", + "addressPrefix": 12850 + }, + { + "disabled": false, + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1004", + "name": "Kusama People", + "ecosystem": "substrate", + "assets": [ + { + "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama-people-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/people", + "name": "Stakeworld node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1004", + "name": "Polkadot People", + "ecosystem": "substrate", + "assets": [ + { + "isUtility": true, + "id": "bb56f037-6f96-45e6-9b3c-c9059bf0f731", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://sys.ibp.network/people-polkadot", + "name": "IBP1 node" }, { - "disabled": false, - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "rank": 109, - "name": "Rococo", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://rococo.subscan.io/{type}/{value}" - }] - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "bridgeParachainId" : "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f" - } - ] - }, - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "name": "rococo", - "symbol": "roc", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ROC.svg", - "color": "FFFFFF", - "type": "normal", - "isUtility": true - }], - "nodes": [ - { - "url": "wss://rococo-rpc.polkadot.io", - "name": "Parity node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Rococo.svg", - "addressPrefix": 42, - "options": [ - "testnet" - ] + "url": "wss://sys.dotters.network/people-polkadot", + "name": "IBP2 node" }, { - "disabled": false, - "chainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f", - "parentId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "paraId": "2011", - "name": "SORA Rococo parachain", - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0123", - "name": "sora", - "symbol": "rxor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset" - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2123", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "soraAsset" - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420, - "options": [ - "testnet" - ] + "url": "wss://rpc-people-polkadot.luckyfriday.io", + "name": "LuckyFriday node" }, { - "disabled": false, - "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Enjin Matrixchain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io//{type}/{value}" - }] - }, - "assets": [{ - "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.matrix.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 1110 + "url": "wss://polkadot-people-rpc.polkadot.io", + "name": "Parity node" }, { - "disabled": false, - "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", - "parentId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Canary Matrixchain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://matrix.subscan.io///{type}/{value}" - }] - }, - "assets": [{ - "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", - "name": "enjin coin", - "symbol": "cenj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.matrix.canary.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 9030, - "options": [ - "testnet" - ] - }, - { - "disabled": false, - "chainId": "42161", - "rank": 4, - "name": "Arbitrum One", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "37b6375a-0708-4728-bec9-bf15b8680aff", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", - "name": "arbitrum", - "symbol": "arb", - "precision": 18, - "priceId": "arbitrum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", - "color": "12AAFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://arbitrum-one.publicnode.com/", - "name": "Public http node" - }, - { - "url": "wss://arbitrum-one.publicnode.com/", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "chainlinkProvider", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "10", - "rank": 5, - "name": "OP Mainnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x4200000000000000000000000000000000000042", - "name": "optimism", - "symbol": "op", - "precision": 18, - "priceId": "optimism", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", - "color": "FF0420", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://optimism-mainnet.blastapi.io/", - "name": "Blast https node" - }, - { - "url": "wss://optimism-mainnet.blastapi.io/", - "name": "Blast wss node" - }, - { - "url": "https://optimism.publicnode.com/", - "name": "Public http node" - }, - { - "url": "wss://optimism.publicnode.com/", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "43114", - "rank": 6, - "name": "Avalanche C-Chain", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "870f6877-c917-48bc-aa64-723416c94ebb", - "name": "avalanche", - "symbol": "avax", - "precision": 18, - "priceId": "avalanche-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", - "color": "E84142", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://avalanche-c-chain.publicnode.com/", - "name": "Public https node" - }, - { - "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "195", - "rank": 130, - "name": "X Layer Testnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER_TESTNET" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "a61b1842-30c0-431d-9bbc-fc3370562455", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://testrpc.xlayer.tech/", - "name": "X Layer Test Tech https node" - }, - { - "url": "wss://testws.xlayer.tech", - "name": "X Layer Test Tech wss node" - }, - { - "url": "https://xlayertestrpc.okx.com/", - "name": "X Layer Test OKX https node" - }, - { - "url": "wss://xlayertestws.okx.com", - "name": "X Layer Test OKX wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "196", - "rank": 13, - "name": "X Layer Mainnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "priceId": "okb", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.xlayer.tech/", - "name": "X Layer Tech https node" - }, - { - "url": "wss://ws.xlayer.tech/", - "name": "X Layer Tech wss node" - }, - { - "url": "https://xlayerrpc.okx.com/", - "name": "X Layer OKX https node" - }, - { - "url": "wss://xlayerws.okx.com/", - "name": "X Layer OKX wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "1101", - "rank": 7, - "name": "Polygon zkEVM", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, + "url": "wss://people-polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 0 + }, + { + "disabled": false, + "chainId": "8217", + "name": "Kaia Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=KAIA" + }, + "explorers": [ { - "isUtility": false, - "id": "0xa2036f0538221a77A3937F1379699f44945018d0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://zkevm-rpc.com", - "name": "Zkevm https node" - }, - { - "url": "https://polygon-zkevm-mainnet.public.blastapi.io", - "name": "Blast https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7001", - "rank": 14, - "name": "ZetaChain Testnet", - "assets": [ - { - "isUtility": true, - "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", - "name": "zetachain", - "symbol": "zeta", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", - "color": "235643", - "type": "normal", - "ethereumType": "normal" - } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", - "name": "Ankr https node" - }, - { - "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", - "name": "Blockpi https node" - }, - { - "url": "https://zetachain-testnet-evm.itrocket.net", - "name": "Itrocket https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", - "name": "Reef Mainnet", - "assets": [{ - "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", - "name": "reef", - "symbol": "reef", - "precision": 18, - "priceId": "reef", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", - "color": "C547CB", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "staking": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "explorers": [{ - "type": "reef", - "types": [ - "transfer", - "extrinsic", - "account" - ], - "url": "https://reefscan.com/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://rpc.reefscan.com/ws", - "name": "Reef Community node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/kaia/{type}/{value}?channelID=flessw" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", - "addressPrefix": 42 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "dd80081e-7fc3-4a69-8218-57018d6e31c2", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "priceId": "kaia", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "DE1E41", + "ethereumType": "normal" }, { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 + "isUtility": false, + "id": "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" }, { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 + "isUtility": false, + "id": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", + "name": "orbit bridge klaytn usd tether", + "symbol": "ousdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" }, { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland dollar", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "name": "liberland merit", - "symbol": "llm", - "precision": 12, - "currencyId": "1", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "assets" - }, + "isUtility": false, + "id": "0x078db7827a5531359f6cb63f62cfa20183c4f10c", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://public-en.node.kaia.io/", + "name": "Kaia Foundation https node" + }, + { + "url": "wss://public-en.node.kaia.io/ws", + "name": "Kaia Foundation wss node" + }, + { + "url": "https://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode https node" + }, + { + "url": "wss://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode wss node" + }, + { + "url": "https://kaia.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1001", + "name": "Kaia Kairos Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "klaytn", + "url": "https://api-baobab.klaytnscope.com/v2/" + }, + "explorers": [ { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "name": "sora xor", - "symbol": "xor", - "precision": 12, - "currencyId": "774441749", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "assets" + "type": "klaytn", + "types": [ + "tx", + "account" + ], + "url": "https://baobab.klaytnscope.com/{type}/{value}" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - ], - "availableDestinations": [ - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD", - "minAmount": "1000000000000" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - - ] - } - ] - }, - "nodes": [ - { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://public-en.kairos.node.kaia.io", + "name": "Kairos https node" }, { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" + "url": "https://public-en-baobab.klaytn.net", + "name": "Klaytn Foundation https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "88", + "name": "Viction", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "vicscan", + "url": "https://www.vicscan.xyz/api/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://www.vicscan.xyz/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "d7635547-bc3a-4410-944f-f8b851745c32", + "name": "viction", + "symbol": "vic", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VIC.svg", + "color": "FFFFFF", + "priceId": "tomochain", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://viction.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" }, { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" + "url": "https://rpc.viction.xyz", + "name": "Viction https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/viction.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "995", + "name": "5ire", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "fire", + "url": "https://api.evm.scan.5ire.network/5ire/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://5irescan.io/{type}/{value}" } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "f9e1d5bb-2402-45c3-9147-e8166e3a7c75", + "name": "5ire", + "symbol": "5fire", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/5IRE.svg", + "color": "071941", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.5ire.network", + "name": "5ire https node" + }, + { + "url": "wss://rpc.5ire.network", + "name": "5ire wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/5irechain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "b91746b45e0346cc2f815a520b9c6cb4d5c0902af848db0a80f85932d2e8276a", + "name": "Avail DA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], - "url": "https://enjin.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 - }, - { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland lld", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "248", - "rank": 15, - "name": "Oasys Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.games/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://oasys.blockpi.network/v1/rpc/public/", - "name": "Blockpi https node" - }, - { - "url": "https://rpc.mainnet.oasys.games/", - "name": "Oasys https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "29548", - "rank": 150, - "name": "MCH Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.mycryptoheroes.net/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.mycryptoheroes.net/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dad38228-7e66-46cb-b8f8-bee5a738a18a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "url": "https://avail.subscan.io/{type}/{value}" } ], - "nodes": [ - { - "url": "https://rpc.oasys.mycryptoheroes.net/", - "name": "MCH https node" - }, - { - "url": "wss://ws.oasys.mycryptoheroes.net/", - "name": "MCH wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mchverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "2400", - "rank": 151, - "name": "TCG Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.tcgverse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.tcgverse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "e2661f7b-3916-464d-8ea2-5650b6c7de94", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.tcgverse.xyz/", - "name": "TCG https node" - }, - { - "url": "wss://ws-rpc.tcgverse.xyz/", - "name": "TCG wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/tcgverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "19011", - "rank": 152, - "name": "HOME Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.homeverse.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.homeverse.games/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "943d4fe9-76e5-48bd-9220-4fcda4e3b8e4", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.mainnet.oasys.homeverse.games/", - "name": "HOME https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/homeverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "5555", - "rank": 153, - "name": "Chain Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.chainverse.info/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.chainverse.info/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "f1eeb4f0-d87d-41ef-8e23-af5a535b793c", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.chainverse.info/", - "name": "Chain https node" + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-avail" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/chainverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7225878", - "rank": 154, - "name": "Saakuru Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.saakuru.network/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.saakuru.network/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "5e15fa7a-b398-49a6-8459-da4b4f660f32", - "name": "oasys", - "symbol": "oas", + }, + "assets": [ + { + "id": "c1f11fa8-7369-4456-a0f2-be66030715c2", + "name": "avail token", + "symbol": "avail", "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.saakuru.network/", - "name": "Saakuru https node" - }, - { - "url": "wss://ws.saakuru.network/", - "name": "Saakuru wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/saakuruverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "50005", - "rank": 155, - "name": "Yooldo Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.yooldo-verse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.yooldo-verse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { + "priceId": "avail", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", "isUtility": true, - "id": "648d069c-c32f-4fbc-af23-14f77a9158aa", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.yooldo-verse.xyz/", - "name": "Yooldo https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/yooldoverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "30", - "rank": 16, - "name": "Rootstock Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://rootstock.blockscout.com//api/v2/addresses/" - } + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://avail-mainnet.public.blastapi.io/", + "name": "Blastapi node" }, - "assets": [ - { - "isUtility": true, - "id": "defb1fb8-8cf1-49b1-8dd3-b8dac33394a4", - "name": "rootstock rsk rbtc", - "symbol": "rbtc", - "precision": 18, - "priceId": "rootstock", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RBTC.svg", - "color": "", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://public-node.rsk.co/", - "name": "Public https node" - }, - { - "url": "https://mycrypto.rsk.co/", - "name": "Mycrypto https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/rootstock.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", - "name": "XX network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" - } + { + "url": "wss://mainnet.avail-rpc.com/", + "name": " Ankr node" }, - "assets": [{ - "id": "526dca29-63ff-4683-88d6-852d1455b17b", - "name": "xx network", - "symbol": "xx", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", - "priceId": "xxcoin", - "color": "0AC1C7", - "isUtility": true, - "type": "normal" - }], - "nodes": [ - { - "url": "wss://xxnetwork-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.xx.network", - "name": "xx Foundation node #1" - }, - { - "url": "wss://rpc-hetzner.xx.network", - "name": "xx Foundation node #2" - }, - { - "url": "wss://rpc-do.xx.network", - "name": "xx Foundation node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", - "addressPrefix": 55 - }, - { - "disabled": false, - "chainId": "6660", - "name": "Latest Testnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://testscan.latestchain.io/api/v2/addresses/" - } + { + "url": "wss://avail-rpc.rubynodes.io/", + "name": " Ruby node" }, - "assets": [ - { - "isUtility": true, - "id": "1a31227d-c6fe-4c78-a3d6-353be70e56a6", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "https://testnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latestchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "9630", - "name": "Latest Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://scan.latestchain.io/api/v2/addresses/" - } + { + "url": "wss://avail-us.brightlystake.com", + "name": " BrightlyStake node" }, - "assets": [ - { - "isUtility": true, - "id": "e7094e62-d86d-4c08-8497-9ebc4c9011ea", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "https://mainnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latest.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "72778", - "name": "CAGA Ankara Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.ankara-cagacrypto.com/api" - } + { + "url": "wss://rpc-avail.globalstake.io", + "name": " GlobalStake node" }, - "assets": [ - { - "isUtility": true, - "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", - "name": "caga", - "symbol": "caga", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "wss://wss.ankara-cagacrypto.com", - "name": "Caga wss node" - }, - { - "url": "https://www.ankara-cagacrypto.com", - "name": "Caga https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "6f09966420b2608d1947ccfb0f2a362450d1fc7fd902c29b67c906eaa965a7ae", - "name": "Avail Goldberg Testnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://avail-testnet.subscan.io/{type}/{value}" - }] + { + "url": "wss://avail.rpc.bountyblok.io", + "name": "Bountyblok node" }, - "assets": [ - { - "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", - "name": "avail token", - "symbol": "avl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVL.svg", - "color": "56E5FF", - "isUtility": true, - "type": "normal" + { + "url": "wss://avail.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://avail-rpc.lgns.net/", + "name": "LugaNodes node" + }, + { + "url": "wss://rpc.avail.stakepool.dev.br/ws", + "name": "StakePool node" } ], - "nodes": [{ - "url": "wss://goldberg-testnet-rpc.avail.tools/ws", - "name": "Avail Goldberg Testnet node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", - "addressPrefix": 42, - "options": [ - "checkAppId" - ] + "options": [ + "checkAppId" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "2340", + "name": "Atleta Olympia", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://blockscout.atleta.network/api/v2/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://blockscout.atleta.network/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", - "name": "Analog Testnet", - "assets": [ - { - "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", - "name": "tanlog", - "symbol": "tanlog", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", - "color": "9A74F7", - "isUtility": true, - "type": "normal" + "assets": [ + { + "isUtility": true, + "id": "e25d94ba-805d-4d82-9238-2c4d3e7d2ff5", + "name": "ATLA", + "symbol": "ATLA", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ATLA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet-rpc.atleta.network:9944", + "name": "Atla https node" + }, + { + "url": "wss://testnet-rpc.atleta.network:9944", + "name": "Atla wss node" } ], - "nodes": [{ - "url": "wss://rpc.testnet.analog.one", - "name": "Analog Testnet node" - } - - ], - "options": [ - "testnet" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", - "addressPrefix": 12850 + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Atleta.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "168168", + "name": "ZChains", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zchain", + "url": "https://mainnet-scan-api.zchains.com/api/v1/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://scan.zchains.com/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Kusama People", - "assets": [ - { - "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama-people-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/people", - "name": "Stakeworld node" - } - ], - "options": [ - "identityChain" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", - "addressPrefix": 2 - } + "assets": [ + { + "isUtility": true, + "id": "a8b3e303-ded2-4d79-8bb4-1592e0b1230a", + "name": "ZCD", + "symbol": "ZCD", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZCD.svg", + "priceId": "zchains", + "color": "E10600", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.zchains.com", + "name": "ZChains https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "2525", + "name": "inEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://explorer.inevm.com/api/v2/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.inevm.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "d23263f5-1167-4eef-9a8d-a42df86c2647", + "name": "Injective", + "symbol": "INJ", + "precision": 18, + "priceId": "injective-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INJ.svg", + "color": "00F2FE", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://mainnet.rpc.inevm.com/http", + "name": "inEVM https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/inevm.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "-239", + "name": "Ton Mainnet", + "ecosystem": "ton", + "iosMinAppVersion": "4.0.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ + { + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://keeper.tonapi.io", + "name": "Keeper api" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": ["remoteAssets"], + "tonBridgeUrl": "https://fearless-ton-bridge.tachi.soramitsu.co.jp" + }, + { + "disabled": false, + "chainId": "-3", + "name": "Ton Testnet", + "ecosystem": "ton", + "iosMinAppVersion": "3.8.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ + { + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet.tonapi.io", + "name": "Keeper api testnet" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": [ + "remoteAssets", + "testnet" + ], + "tonBridgeUrl": "https://fearless-ton-bridge.tachi.soramitsu.co.jp" + } ] diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json new file mode 100644 index 0000000000..f8cd7b269d --- /dev/null +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json @@ -0,0 +1,131 @@ +[ + { + "type": "top", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "FW dapp example", + "url": "https://ton-connect.example.fearless.soramitsu.co.jp", + "description": "FW dapp example", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/FW_icon_288.png" + } + ] + }, + { + "type": "featured", + "apps": [ + { + "identifier": "f745ab46-84fd-4669-940c-6cb4048a6372", + "chains": ["-239"], + "name": "Spinarium", + "url": "https://spintg.com/ru/games?category=popular", + "description": "Players' Choice 2024 - TON, Profitable and Safe casino!", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/spinarium.png" + } + ] + }, + { + "type": "utilities", + "apps": [ + { + "identifier": "aa592b75-9134-4708-8122-0b7d5519f593", + "chains": ["-239"], + "name": "Aqua Protocol", + "url": "https://app.aquaprotocol.xyz/mint", + "description": "Over-collaterized Stablecoin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/aquaprotocol.png" + }, + { + "identifier": "c2301105-b592-45da-8039-a99552f05ccb", + "chains": ["-239"], + "name": "TON Fonates", + "url": "https://fonates.com/", + "description": "Send and accept donations on streams in TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonfonates.png" + }, + { + "identifier": "cd3357b7-7a79-4193-93b2-fe277eb18d8c", + "chains": ["-239"], + "name": "Tonnel Network", + "url": "https://www.tonnel.network/", + "description": "#1 Zero-Knowledge protocol on TON, Privacy for TON, JETTON, NFTs.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonnelnetwork.png" + } + ] + }, + { + "type": "nft", + "apps": [ + { + "identifier": "a2737106-e725-445a-8165-e3d128c51fcd", + "chains": ["-239"], + "name": "TON Diamonds", + "url": "https://ton.diamonds/", + "description": "Marketplace for digital artists and high-quality collections. The first NFT on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "327fcf07-18ed-4c84-a9d9-a0b3d8559540", + "chains": ["-239"], + "name": "Getgems.io", + "url": "https://getgems.io/", + "description": "The Home of NFT on The Open Network.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/getgems.jpg" + }, + { + "identifier": "8c4ecf28-417e-40bf-99c8-c243d539d628", + "chains": ["-239"], + "name": "DAOLama", + "url": "https://app.daolama.co", + "description": "Use your NFTs as collateral to instantly get TON Coin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/daolama.png" + } + ] + }, + { + "type": "defi", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "STON.fi", + "url": "https://app.ston.fi/", + "description": "Cross-chain DEX built on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stonfi.png" + }, + { + "identifier": "d32532fa-7306-4927-9cfa-04e164a17419", + "chains": ["-239"], + "name": "DeDust.io", + "url": "https://dedust.io/swap", + "description": "AMM DEX for the TON blockchain.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/dedust.jpg" + }, + { + "identifier": "3e4b07d5-8272-4381-9f69-37f008b2f386", + "chains": ["-239"], + "name": "TON Diamonds DEX", + "url": "https://ton.diamonds/dex/swap", + "description": "Find top jetton rates and get $GLINT cashback.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "bd485b34-7e10-45da-8e20-a58f5acccdc3", + "chains": ["-239"], + "name": "Storm Trade", + "url": "https://storm.tg/", + "description": "Perps DEX with ×100 leverage.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stormtrade.png" + }, + { + "identifier": "e6563c0f-abf3-4506-86f1-d61e03c9b2b6", + "chains": ["-239"], + "name": "swap.coffee", + "url": "https://swap.coffee/dex", + "description": "The most effective DEX Aggregator on TON. Smart routing and transaction splitting.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/swapcoffee.png" + } + ] + } +] diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift index 660dd1bec0..7e4e4e0f17 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift @@ -8,7 +8,7 @@ import SoraFoundation protocol LiquidityPoolDetailsViewModelFactory { func buildViewModel( liquidityPair: LiquidityPair, - reserves: CachedStorageResponse?, + reserves: SSFStorageQueryKit.CachedStorageResponse?, apyInfo: PoolApyInfo?, chain: ChainModel, locale: Locale, @@ -32,7 +32,7 @@ final class LiquidityPoolDetailsViewModelFactoryDefault: LiquidityPoolDetailsVie func buildViewModel( liquidityPair: LiquidityPair, - reserves: CachedStorageResponse?, + reserves: SSFStorageQueryKit.CachedStorageResponse?, apyInfo: PoolApyInfo?, chain: ChainModel, locale: Locale, diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift index 372f217635..aa7c9f7c93 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift @@ -30,7 +30,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -82,9 +82,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift index 9d72c140e1..077b53789f 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift @@ -3,6 +3,7 @@ import SSFPools import SSFPolkaswap import SSFModels import BigInt +import SSFAccountManagment protocol LiquidityPoolRemoveLiquidityInteractorOutput: AnyObject { func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift index 962c244e3e..3164b8e150 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift @@ -32,7 +32,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -82,9 +82,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift index 4386c25f40..6f76140199 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift @@ -32,7 +32,7 @@ final class LiquidityPoolSupplyAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -83,9 +83,7 @@ final class LiquidityPoolSupplyAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift index e92b5e10d2..117e3c3594 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift @@ -4,6 +4,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol LiquidityPoolSupplyInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift index 11b76c7559..32ef80fd84 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift @@ -39,7 +39,7 @@ enum LiquidityPoolSupplyConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -88,9 +88,7 @@ enum LiquidityPoolSupplyConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift index aa6bca8359..a461de7af6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift @@ -3,6 +3,7 @@ import SSFModels import SSFPolkaswap import SSFPools import BigInt +import SSFCrypto protocol LiquidityPoolSupplyConfirmInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift index 8c4831a5e5..37ae913bad 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift @@ -3,10 +3,11 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pairs: [LiquidityPair]?) - func didReceivePoolsReserves(reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>) + func didReceivePoolsReserves(reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>) func didReceivePoolsAPY(apy: [PoolApyInfo]?) func didReceiveLiquidityPairsError(error: Error) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift index e738f10700..81c14e40b5 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorInput { func setup(with output: AvailableLiquidityPoolsListInteractorOutput) @@ -24,7 +25,7 @@ final class AvailableLiquidityPoolsListPresenter { private let type: LiquidityPoolListType private var pairs: [LiquidityPair]? - private var reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>? + private var reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>? private var apy: [PoolApyInfo]? private var searchText: String? @@ -132,7 +133,7 @@ extension AvailableLiquidityPoolsListPresenter: AvailableLiquidityPoolsListInter provideViewModel() } - func didReceivePoolsReserves(reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>) { + func didReceivePoolsReserves(reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>) { self.reserves = reserves.merge(with: self.reserves, priorityType: .remote) provideViewModel() } diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift index 6f13b78897..fae5ff5428 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift @@ -5,11 +5,12 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListViewModelFactory { func buildViewModel( pairs: [LiquidityPair]?, - reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, + reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, apyInfos: [PoolApyInfo]?, chain: ChainModel, locale: Locale, @@ -69,7 +70,7 @@ final class AvailableLiquidityPoolsListViewModelFactoryDefault: AvailableLiquidi func buildViewModel( pairs: [LiquidityPair]?, - reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, + reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, apyInfos: [PoolApyInfo]?, chain: ChainModel, locale: Locale, diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift index 48fab8076b..b91238f7a6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift @@ -3,6 +3,8 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFAccountManagment +import SSFCrypto protocol UserLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pools: [LiquidityPair]?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift index 829656feab..c7ddbfd9c1 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListInteractorInput { func setup(with output: UserLiquidityPoolsListInteractorOutput) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift index e024dc2425..0c5cfe9d6a 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift @@ -5,6 +5,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListViewModelFactory { func buildViewModel( diff --git a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift index 426ad92666..a6dc757714 100644 --- a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift +++ b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift @@ -53,9 +53,6 @@ extension MainTabBarInteractor: MainTabBarInteractorInputProtocol { extension MainTabBarInteractor: EventVisitorProtocol { func processSelectedAccountChanged(event _: SelectedAccountChanged) { serviceCoordinator.updateOnAccountChange() - DispatchQueue.main.async { - self.presenter?.didReloadSelectedAccount() - } } } diff --git a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift index fc4b93031b..1709d31a71 100644 --- a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift +++ b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift @@ -3,6 +3,7 @@ import WalletConnectSign import UIKit import SoraFoundation import SSFUtils +import SoraKeystore final class MainTabBarPresenter { private weak var view: MainTabBarViewProtocol? @@ -10,6 +11,7 @@ final class MainTabBarPresenter { private let wireframe: MainTabBarWireframeProtocol private let appVersionObserver: AppVersionObserver private let applicationHandler: ApplicationHandler + private let eventCenter: EventCenterProtocol private let reachability: ReachabilityManager? private let networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol @@ -25,7 +27,8 @@ final class MainTabBarPresenter { networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol, reachability: ReachabilityManager?, walletConnectCoordinator: WalletConnectCoordinator, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol ) { self.wireframe = wireframe self.interactor = interactor @@ -34,8 +37,9 @@ final class MainTabBarPresenter { self.networkStatusPresenter = networkStatusPresenter self.reachability = reachability self.walletConnectCoordinator = walletConnectCoordinator - self.localizationManager = localizationManager + self.eventCenter = eventCenter + self.localizationManager = localizationManager applicationHandler.delegate = self } } @@ -55,14 +59,12 @@ extension MainTabBarPresenter: MainTabBarPresenterProtocol { appVersionObserver.checkVersion(from: view, callback: nil) try? reachability?.add(listener: self) + + eventCenter.add(observer: self, dispatchIn: .main) } } extension MainTabBarPresenter: MainTabBarInteractorOutputProtocol { - func didReloadSelectedAccount() { - crowdloanListView = wireframe.showNewCrowdloan(on: view) as? UINavigationController - } - func didRequestImportAccount() { wireframe.presentAccountImport(on: view) } @@ -91,3 +93,13 @@ extension MainTabBarPresenter: StakingMainModuleOutput { wireframe.replaceStaking(on: view, type: type, moduleOutput: self) } } + +extension MainTabBarPresenter: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + guard event.account.ecosystem.isRegular else { + return + } + + wireframe.replaceStaking(on: view, type: .normal(chainAsset: nil), moduleOutput: self) + } +} diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index 9ce7dc6dbb..96f63f32c8 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -1,9 +1,9 @@ import UIKit import WalletConnectSign +import SSFModels protocol MainTabBarViewProtocol: ControllerBackedProtocol { func didReplaceView(for newView: UIViewController, for index: Int) - func presentFailedMemoView() } protocol MainTabBarPresenterProtocol: AnyObject { @@ -16,21 +16,19 @@ protocol MainTabBarInteractorInputProtocol: AnyObject { } protocol MainTabBarInteractorOutputProtocol: AnyObject { - func didReloadSelectedAccount() func didRequestImportAccount() } protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccessible, WarningPresentable, AppUpdatePresentable, PresentDismissable { - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? func presentAccountImport(on view: MainTabBarViewProtocol?) - func replaceStaking(on view: MainTabBarViewProtocol?, type: AssetSelectionStakingType, moduleOutput: StakingMainModuleOutput?) + func replaceStaking( + on view: MainTabBarViewProtocol?, + type: AssetSelectionStakingType, + moduleOutput: StakingMainModuleOutput? + ) func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) } protocol MainTabBarViewFactoryProtocol: AnyObject { static func createView() -> MainTabBarViewProtocol? - - static func reloadCrowdloanView( - on view: MainTabBarViewProtocol - ) -> UIViewController? } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index df55da1da1..265ba4f824 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -1,24 +1,26 @@ import UIKit import SoraFoundation +import SSFModels +import SoraKeystore final class MainTabBarViewController: UITabBarController { - private lazy var failedMemoView: AttentionView = { - let view = AttentionView() - view.backgroundColor = .black.withAlphaComponent(0.9) - view.titleLabel.font = .h6Title - return view - }() - private var presenter: MainTabBarPresenterProtocol - + private var eventCenter: EventCenterProtocol private var viewAppeared: Bool = false + private var fullViewControllersList: [UIViewController] + private var wallet: MetaAccountModel init( viewControllers: [UIViewController], presenter: MainTabBarPresenterProtocol, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol, + wallet: MetaAccountModel ) { self.presenter = presenter + self.eventCenter = eventCenter + self.fullViewControllersList = viewControllers + self.wallet = wallet super.init(nibName: nil, bundle: nil) @@ -34,17 +36,21 @@ final class MainTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self + + eventCenter.add(observer: self, dispatchIn: .main) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !viewAppeared { + update(with: wallet) viewAppeared = true presenter.didLoad(view: self) } let tabBar = TabBar(frame: tabBar.frame) + tabBar.setup(for: wallet.ecosystem) tabBar.middleButton.addAction { [weak self] in self?.presenter.presentPolkaswap() } @@ -53,11 +59,6 @@ final class MainTabBarViewController: UITabBarController { applyLocalization() } - @objc private func didTapFailedMemoView(_: UIGestureRecognizer) { - _ = openTab(vcClass: CrowdloanListViewController.self) - failedMemoView.removeFromSuperview() - } - private func openTab(vcClass _: T.Type) -> Bool { if let index = viewControllers?.firstIndex(where: { viewController in if viewController.isKind(of: T.self) { @@ -82,6 +83,24 @@ final class MainTabBarViewController: UITabBarController { private func wrappedSelectedViewController() -> UIViewController? { selectedViewController?.navigationRootViewController() } + + private func update(with wallet: MetaAccountModel) { + let isDappEnabled = SettingsManager.shared.dappEnabled + + if let tabBar = self.tabBar as? TabBar { + tabBar.setup(for: wallet.ecosystem) + } + let indexes: IndexSet + switch wallet.ecosystem { + case .regular: + indexes = [0, 2, 3, 4, 5] + case .ton: + indexes = isDappEnabled ? [0, 1, 5] : [0, 5] + } + let tonViewControllers = indexes.map { fullViewControllersList[$0] } + selectedIndex = 0 + setViewControllers(tonViewControllers, animated: true) + } } extension MainTabBarViewController: UITabBarControllerDelegate { @@ -89,11 +108,6 @@ extension MainTabBarViewController: UITabBarControllerDelegate { _: UITabBarController, shouldSelect viewController: UIViewController ) -> Bool { - if let wrappedSelectedViewController = viewController.navigationRootViewController(), - wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) { - failedMemoView.removeFromSuperview() - } - if viewController == viewControllers?[selectedIndex], let scrollableController = viewController as? ScrollsToTop { scrollableController.scrollToTop() @@ -113,43 +127,19 @@ extension MainTabBarViewController: MainTabBarViewProtocol { setViewControllers(newViewControllers, animated: false) } - - func presentFailedMemoView() { - guard let wrappedSelectedViewController = wrappedSelectedViewController(), - !wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) else { - return - } - - view.addSubview(failedMemoView) - failedMemoView.snp.makeConstraints { make in - make.bottom.equalTo(self.tabBar.snp.top) - make.centerX.equalToSuperview() - make.width.equalToSuperview() - make.height.equalTo(UIConstants.cellHeight) - } - - failedMemoView.iconView.snp.remakeConstraints { make in - make.leading.equalToSuperview().offset(UIConstants.defaultOffset) - make.size.equalTo(UIConstants.normalAddressIconSize.height) - make.centerY.equalToSuperview() - } - - failedMemoView.titleLabel.snp.remakeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalTo(failedMemoView.iconView.snp.trailing).offset(UIConstants.defaultOffset) - } - - applyLocalization() - - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapFailedMemoView(_:))) - tapGesture.isEnabled = true - failedMemoView.addGestureRecognizer(tapGesture) - } } extension MainTabBarViewController: Localizable { - func applyLocalization() { - failedMemoView.titleLabel.text = R.string.localizable - .tabbarCrowdloanAttention(preferredLanguages: selectedLocale.rLanguages) + func applyLocalization() {} +} + +extension MainTabBarViewController: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + self.wallet = event.account + update(with: event.account) + } + + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) { + update(with: wallet) } } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 322ab9cfd7..ca8ab3db09 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -1,13 +1,15 @@ import UIKit +import SSFNetwork import SoraFoundation import SoraKeystore - +import SSFModels import SSFUtils final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { static let walletIndex: Int = 0 static let crowdloanIndex: Int = 1 static let stakingIndex: Int = 3 + static let dappIndex: Int = 1 static func createView() -> MainTabBarViewProtocol? { guard @@ -55,15 +57,22 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { applicationHandler: ApplicationHandler(), networkStatusPresenter: networkStatusPresenter, reachability: ReachabilityManager.shared, - walletConnectCoordinator: WalletConnectCoordinator(), - localizationManager: localizationManager + walletConnectCoordinator: WalletConnectCoordinator.shared, + localizationManager: localizationManager, + eventCenter: EventCenter.shared ) - let viewControllers = createViewControllers(stakingModuleOutput: presenter, walletConnect: walletConnect, wallet: wallet) + let viewControllers = createViewControllers( + stakingModuleOutput: presenter, + walletConnect: walletConnect, + wallet: wallet + ) let view = MainTabBarViewController( viewControllers: viewControllers, presenter: presenter, - localizationManager: localizationManager + localizationManager: localizationManager, + eventCenter: EventCenter.shared, + wallet: wallet ) return view @@ -78,6 +87,9 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { let walletController = createWalletController(walletConnect: walletConnect) viewControllers.append(walletController) + let dAppController = createBrowserController(wallet: wallet) + viewControllers.append(dAppController) + let crowdloanController = createCrowdloanController() viewControllers.append(crowdloanController) @@ -93,16 +105,6 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return viewControllers.compactMap { $0 } } - static func reloadCrowdloanView(on view: MainTabBarViewProtocol) -> UIViewController? { - guard let crowdloanController = createCrowdloanController() else { - return nil - } - - view.didReplaceView(for: crowdloanController, for: Self.crowdloanIndex) - - return crowdloanController - } - @discardableResult static func reloadStakingView( on view: MainTabBarViewProtocol, @@ -112,7 +114,9 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { switch stakingType { case .normal: let stakingViewController = createStakingController(moduleOutput: moduleOutput) - view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + if let stakingViewController = stakingViewController { + view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + } return stakingViewController case .pool: @@ -150,21 +154,28 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { static func createStakingController( moduleOutput: StakingMainModuleOutput? - ) -> UIViewController { - let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller ?? UIViewController() + ) -> UIViewController? { + let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller let icon = R.image.iconTabStaking() let normalIcon = icon?.tinted(with: R.color.colorGray()!)? .withRenderingMode(.alwaysOriginal) let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? .withRenderingMode(.alwaysOriginal) - viewController.tabBarItem = createTabBarItem( + + var navigationController: FearlessNavigationController + + if let viewController = viewController { + navigationController = FearlessNavigationController(rootViewController: viewController) + } else { + navigationController = FearlessNavigationController() + } + + navigationController.tabBarItem = createTabBarItem( normalImage: normalIcon, selectedImage: selectedIcon ) - let navigationController = FearlessNavigationController(rootViewController: viewController) - return navigationController } @@ -208,6 +219,32 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return navigationController } + static func createBrowserController(wallet: MetaAccountModel) -> UIViewController? { + guard let controller = DappBrowserAssembly.configureModule(wallet: wallet)?.view.controller else { + return nil + } + + let navigationController = FearlessNavigationController(rootViewController: controller) + + let icon = R.image.iconBrowser() + let normalIcon = icon?.tinted(with: R.color.colorGray()!)? + .withRenderingMode(.alwaysOriginal) + let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? + .withRenderingMode(.alwaysOriginal) + navigationController.tabBarItem = createTabBarItem( + normalImage: normalIcon, + selectedImage: selectedIcon + ) + + return navigationController + } + + static func createPolkaswapController(wallet _: MetaAccountModel) -> UIViewController? { + let fakeSwapViewController = UIViewController() + fakeSwapViewController.tabBarItem.isEnabled = false + return fakeSwapViewController + } + static func createCrowdloanController() -> UIViewController? { let crowdloanState = CrowdloanSharedState() crowdloanState.settings.setup() @@ -236,12 +273,6 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return navigationController } - static func createPolkaswapController(wallet _: MetaAccountModel) -> UIViewController? { - let fakeSwapViewController = UIViewController() - fakeSwapViewController.tabBarItem.isEnabled = false - return fakeSwapViewController - } - static func createTabBarItem( normalImage: UIImage?, selectedImage: UIImage? diff --git a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift index 25f35201e3..f119b084fd 100644 --- a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift +++ b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import WalletConnectSign +import SSFModels final class MainTabBarWireframe: MainTabBarWireframeProtocol { func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) { @@ -16,16 +17,6 @@ final class MainTabBarWireframe: MainTabBarWireframeProtocol { presentingController.present(navigationController, animated: true, completion: nil) } - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? { - if let view = view { - return MainTabBarViewFactory.reloadCrowdloanView( - on: view - ) - } - - return nil - } - func presentAccountImport(on view: MainTabBarViewProtocol?) { guard let tabBarController = view?.controller else { return diff --git a/fearless/Modules/MainTabBar/TabBar.swift b/fearless/Modules/MainTabBar/TabBar.swift index 5631625401..4a9e82052e 100644 --- a/fearless/Modules/MainTabBar/TabBar.swift +++ b/fearless/Modules/MainTabBar/TabBar.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class TabBar: UITabBar { public var middleButton: UIButton = { @@ -13,11 +14,11 @@ final class TabBar: UITabBar { return middleButton }() - private lazy var bluredView: UIView = { + lazy var bluredView: UIView = { let blurEffect = UIBlurEffect(style: .dark) let bluredView = UIVisualEffectView(effect: blurEffect) bluredView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - bluredView.layer.mask = createMaskLayer() + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) bluredView.clipsToBounds = true return bluredView }() @@ -35,12 +36,19 @@ final class TabBar: UITabBar { override func layoutSubviews() { super.layoutSubviews() bluredView.frame = bounds - bluredView.layer.mask = createMaskLayer() +// bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: <#Bool#>) middleButton.rounded() } - - override public func draw(_ rect: CGRect) { - super.draw(rect) + + func setup(for ecosystem: WalletEcosystem) { + switch ecosystem { + case .regular: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) + middleButton.isHidden = false + case .ton: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: false) + middleButton.isHidden = true + } } private func setupLayout() { @@ -55,7 +63,7 @@ final class TabBar: UITabBar { } } - private func createMaskLayer() -> CAShapeLayer { + private func createMaskLayer(withMiddleButtonPlace: Bool) -> CAShapeLayer { let padding: CGFloat = 6.0 let centerButtonHeight: CGFloat = 56.0 let r = CGFloat(28) @@ -67,23 +75,25 @@ final class TabBar: UITabBar { let path = UIBezierPath() path.move(to: .zero) - path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) - path.addQuadCurve( - to: CGPoint(x: halfW - f, y: r / 2.0), - controlPoint: CGPoint(x: halfW - f, y: 0) - ) - path.addArc( - withCenter: CGPoint(x: halfW, y: r / 2.0), - radius: f, - startAngle: .pi, - endAngle: 0, - clockwise: false - ) - path.addQuadCurve( - to: CGPoint(x: halfW + f - padding, y: 0), - controlPoint: CGPoint(x: halfW + f, y: 0) - ) - + if withMiddleButtonPlace { + path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) + path.addQuadCurve( + to: CGPoint(x: halfW - f, y: r / 2.0), + controlPoint: CGPoint(x: halfW - f, y: 0) + ) + path.addArc( + withCenter: CGPoint(x: halfW, y: r / 2.0), + radius: f, + startAngle: .pi, + endAngle: 0, + clockwise: false + ) + path.addQuadCurve( + to: CGPoint(x: halfW + f - padding, y: 0), + controlPoint: CGPoint(x: halfW + f, y: 0) + ) + } + path.addLine(to: CGPoint(x: w, y: 0)) path.addLine(to: CGPoint(x: w, y: h)) path.addLine(to: CGPoint(x: 0.0, y: h)) diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift index ccbb7d0eab..2a0c47952e 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SSFNetwork import SoraKeystore +import SSFModels final class MainNftContainerAssembly { static func configureModule(wallet: MetaAccountModel) -> MainNftContainerModuleCreationResult? { diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift index 7b059187ff..209d00cc37 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class MainNftContainerRouter: MainNftContainerRouterInput { func showCollection( diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift index 2b74dcf37d..878f2647f1 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift @@ -83,7 +83,9 @@ final class MainNftContainerViewController: UIViewController, ViewHolder { // MARK: - Private methods @objc private func actionRefresh() { - viewModels = nil + if viewModels?.isNotEmpty == true { + viewModels = nil + } rootView.tableView.reloadData() rootView.collectionView.reloadData() output.didPullToRefresh() diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift index 75acb1ecac..18ebbacb90 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftCollectionModuleCreationResult = (view: NftCollectionViewInput, input: NftCollectionModuleInput) protocol NftCollectionViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift index 59d9826543..89a320e4b2 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftCollectionRouter: NftCollectionRouterInput { func openNftDetails(nft: NFT, type: NftType, wallet: MetaAccountModel, address: String, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift index 451e6f5fb7..e6ee79e5f6 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NftDetailsAssembly { static func configureModule( diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift index dc0c4f95f5..39d0196d02 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift @@ -1,6 +1,7 @@ import Foundation import SoraFoundation import Kingfisher +import SSFModels final class NftDetailsPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift index ceab9a7eb6..b756a8382d 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftDetailsModuleCreationResult = (view: NftDetailsViewInput, input: NftDetailsModuleInput) protocol NftDetailsViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift index bb949c492a..394356f030 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftDetailsRouter: NftDetailsRouterInput, SharingPresentable { func openSend(nft: NFT, wallet: MetaAccountModel, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift index fa30620155..f56f406a08 100644 --- a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift +++ b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import SoraFoundation import SSFModels import SoraKeystore @@ -9,6 +10,7 @@ import SSFNetwork enum NftSendAssemblyError: Error { case substrateNftNotImplemented + case tonNftNotImplemented } enum NftSendAssembly { @@ -71,11 +73,9 @@ enum NftSendAssembly { nft: nft, wallet: wallet, logger: Logger.shared, - viewModelFactory: - SendViewModelFactory( - iconGenerator: UniversalIconGenerator(), - accountScoreFetcher: accountStatisticsFetcher, - settings: SettingsManager.shared + viewModelFactory: SendViewModelFactory( + wallet: wallet, + iconGenerator: UniversalIconGenerator() ), dataValidatingFactory: dataValidatingFactory ) @@ -100,8 +100,8 @@ enum NftSendAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -123,6 +123,8 @@ enum NftSendAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.substrateNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift index f08ce7e1d3..6c1192124f 100644 --- a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift +++ b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift @@ -3,6 +3,7 @@ import SoraFoundation import BigInt import SSFModels import SSFQRService +import SSFCrypto final class NftSendPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftSend/NftSendViewController.swift b/fearless/Modules/NFT/NftSend/NftSendViewController.swift index 912a257d24..70674eefae 100644 --- a/fearless/Modules/NFT/NftSend/NftSendViewController.swift +++ b/fearless/Modules/NFT/NftSend/NftSendViewController.swift @@ -83,7 +83,7 @@ extension NftSendViewController: NftSendViewInput { func didReceive(viewModel: RecipientViewModel) { rootView.bind(viewModel: viewModel) - rootView.actionButton.set(enabled: viewModel.isValid) + rootView.actionButton.set(enabled: viewModel.isValid == true) } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift index 8133a13edc..9609d82a43 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift @@ -4,6 +4,7 @@ import SSFUtils import SSFModels import SoraKeystore import Web3 +import SSFAccountManagment final class NftSendConfirmAssembly { static func configureModule( @@ -65,8 +66,8 @@ final class NftSendConfirmAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -88,6 +89,8 @@ final class NftSendConfirmAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.tonNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift index 2f48c3c550..3af5883b3d 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFModels import BigInt +import SSFCrypto final class NftSendConfirmPresenter { // MARK: Private properties diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift index fdf3e14d61..ee8c18f3ea 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NetworkIssuesNotificationAssembly { static func configureModule( diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift index e530a4cba1..8510036863 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift @@ -64,7 +64,8 @@ final class NetworkIssuesNotificationRouter: NetworkIssuesNotificationRouterInpu private func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift index e6cc8b2a8a..72d18b9843 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift @@ -5,6 +5,7 @@ import SSFModels final class NetworkManagmentAssembly { static func configureModule( + initialFilter: NetworkManagmentFilter? = nil, wallet: MetaAccountModel, chains: [ChainModel]?, contextTag: Int?, @@ -27,6 +28,7 @@ final class NetworkManagmentAssembly { let router = NetworkManagmentRouter() let presenter = NetworkManagmentPresenter( + initialFilter: initialFilter, wallet: wallet, interactor: interactor, router: router, diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift index 778e336cb4..bf21a4184e 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift @@ -34,6 +34,7 @@ final class NetworkManagmentPresenter { // MARK: - Constructors init( + initialFilter: NetworkManagmentFilter?, wallet: MetaAccountModel, interactor: NetworkManagmentInteractorInput, router: NetworkManagmentRouterInput, @@ -51,7 +52,7 @@ final class NetworkManagmentPresenter { self.viewModelFactory = viewModelFactory self.contextTag = contextTag - initialFilter = NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) + self.initialFilter = initialFilter ?? NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) self.localizationManager = localizationManager } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift index 59d22c0ec5..d164e255b7 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift @@ -24,7 +24,7 @@ final class ChainAccountInteractor { private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol private let dependencyContainer = BalanceInfoDepencyContainer() private var currentDependencies: BalanceInfoDependencies? - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let accountInfoRemoteService: AccountInfoRemoteService private let chainRegistry: ChainRegistryProtocol private var remoteFetchTimer: Timer? @@ -39,7 +39,7 @@ final class ChainAccountInteractor { chainAssetFetching: ChainAssetFetchingProtocol, storageRequestFactory: StorageRequestFactoryProtocol, walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + accountInfoRemoteService: AccountInfoRemoteService, chainRegistry: ChainRegistryProtocol ) { self.wallet = wallet @@ -51,7 +51,7 @@ final class ChainAccountInteractor { self.chainAssetFetching = chainAssetFetching self.storageRequestFactory = storageRequestFactory self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.accountInfoRemoteService = accountInfoRemoteService self.chainRegistry = chainRegistry } @@ -108,6 +108,12 @@ final class ChainAccountInteractor { } private func fetchBalanceLocks() { + guard chainAsset.chain.ecosystem == .substrate else { + presenter?.didReceiveBalanceLocks(.zero) + presenter?.didReceiveAssetFrozen(.zero) + return + } + guard let balanceLocksFetcher = currentDependencies?.balanceLocksFetcher, let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId @@ -177,7 +183,7 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { .getAvailableExportOptions( for: self.wallet, accountId: accountId, - isEthereum: response.isEthereumBased + ecosystem: response.ecosystem ) self.presenter?.didReceiveExportOptions(options: options) default: @@ -198,10 +204,11 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { } func updateData() { + fetchChainAssetBasedData() + guard remoteFetchTimer == nil, - let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - chainAsset.chain.isEthereum + !chainAsset.chain.ecosystem.isSubstrate else { return } @@ -210,7 +217,13 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { timer.invalidate() self?.remoteFetchTimer = nil }) - ethRemoteBalanceFetching.fetch(for: chainAsset, accountId: accountId, completionBlock: { _, _ in }) + Task { + do { + _ = try await accountInfoRemoteService.fetchAccountInfo(for: chainAsset, wallet: wallet) + } catch { + Logger.shared.customError(error) + } + } } func checkIsClaimAvailable() -> Bool { diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index d0895b57bb..fa562fe804 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -19,6 +19,7 @@ final class ChainAccountPresenter { weak var moduleOutput: ChainAccountModuleOutput? private let balanceInfoModule: BalanceInfoModuleInput + private lazy var coinbaseProvider = CoinbasePurchaseProvivder() private lazy var rampProvider = RampProvider() private lazy var moonpayProvider: PurchaseProviderProtocol = { let config: ApplicationConfigProtocol = ApplicationConfig.shared @@ -100,14 +101,17 @@ final class ChainAccountPresenter { ) ?? Decimal.zero let transferrableBalance = freeBalance - frozenValue.or(.zero) - let transferrableValue = balanceViewModelFactory.balanceFromPrice(transferrableBalance, priceData: priceData, usageCase: .detailsCrypto) - let totalLocked = balanceLocksValue.or(.zero) + frozenValue.or(.zero) - let lockedValue = balanceViewModelFactory.balanceFromPrice(totalLocked, priceData: priceData, usageCase: .detailsCrypto) + let transferrableValue = balanceViewModelFactory.balanceFromPrice(transferrableBalance, priceData: chainAsset.asset.getPrice(for: wallet.selectedCurrency), usageCase: .detailsCrypto) + let lockedComponents = [balanceLocksValue, frozenValue].compactMap { $0 } + let totalLocked = lockedComponents.first != nil ? lockedComponents.reduce(0, +) : nil + let lockedValue = totalLocked.flatMap { + balanceViewModelFactory.balanceFromPrice($0, priceData: chainAsset.asset.getPrice(for: wallet.selectedCurrency), usageCase: .detailsCrypto) + } let balanceViewModel = ChainAccountBalanceViewModel( transferrableValue: transferrableValue, lockedValue: lockedValue, - hasLockedTokens: totalLocked > Decimal.zero + hasLockedTokens: totalLocked.or(.zero) > Decimal.zero ) DispatchQueue.main.async { [weak self] in @@ -129,10 +133,12 @@ final class ChainAccountPresenter { availableProviders.append(moonpayProvider) case .ramp: availableProviders.append(rampProvider) + case .coinbase: + availableProviders.append(coinbaseProvider) } } - let providersAggregator = PurchaseAggregator.defaultAggregator(with: availableProviders) + let providersAggregator = PurchaseAggregator.defaultAggregator(with: availableProviders, chain: chainAsset.chain) actions = providersAggregator.buildPurchaseActions(asset: chainAsset.asset, address: address) } return actions @@ -283,8 +289,9 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { func didReceiveExportOptions(options: [ExportOption]) { var items: [ChainAction] = [] items.append(.export) - if !chainAsset.chain.isEthereum { items.append(.switchNode) } - items.append(.replace) + if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { + items.append(.switchNode) + } if interactor.checkIsClaimAvailable() { items.append(.claimCrowdloanRewards) } let selectionCallback: ModalPickerSelectionCallback = { [weak self] selectedIndex in @@ -308,8 +315,6 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { from: self.view, chain: self.chainAsset.chain ) - case .replace: - self.startReplaceAccountFlow() case .claimCrowdloanRewards: self.wireframe.showClaimCrowdloanRewardsFlow(from: self.view, chainAsset: self.chainAsset, wallet: self.wallet) default: diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift index e7ec9fb734..75c31cbdd2 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift @@ -47,15 +47,7 @@ enum ChainAccountViewFactory { let walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) + let accountInfoRemoteService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let interactor = ChainAccountInteractor( wallet: wallet, chainAsset: chainAsset, @@ -66,7 +58,7 @@ enum ChainAccountViewFactory { chainAssetFetching: chainAssetFetching, storageRequestFactory: storageRequestFactory, walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + accountInfoRemoteService: accountInfoRemoteService, chainRegistry: chainRegistry ) diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift index ffdb5ea156..1129a6757d 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift @@ -189,7 +189,7 @@ final class ChainAccountViewLayout: UIView { // balanceInfoStackView.isHidden = balanceViewModel == nil transferableBalanceView.bindBalance(viewModel: balanceViewModel?.transferrableValue.value(for: locale)) - balanceLocksView.bindBalance(viewModel: balanceViewModel?.lockedValue.value(for: locale)) + balanceLocksView.bindBalance(viewModel: balanceViewModel?.lockedValue?.value(for: locale)) infoButton.isHidden = !(balanceViewModel?.hasLockedTokens == true) } @@ -281,8 +281,6 @@ private extension ChainAccountViewLayout { } func setupNavigationViewLayout() { - selectNetworkButton.isUserInteractionEnabled = false - navigationBar.addSubview(backButton) backButton.snp.makeConstraints { make in make.centerY.equalToSuperview() diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift index 4df0cde6ce..e01677c86e 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift @@ -24,12 +24,12 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { ) } - func presentSendFlow( + @MainActor func presentSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { @@ -172,6 +172,7 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let createController = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: .regular, model: UsernameSetupModel(username: uniqueChainModel.meta.name), flow: .chain(model: uniqueChainModel) )?.controller else { diff --git a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift index acc6f2d4d1..046ce8e9f7 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift @@ -3,6 +3,6 @@ import SoraFoundation struct ChainAccountBalanceViewModel { let transferrableValue: LocalizableResource - let lockedValue: LocalizableResource + let lockedValue: LocalizableResource? let hasLockedTokens: Bool } diff --git a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift index 3fc7e8a686..625c24447a 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFModels +import SSFCrypto protocol ChainAccountViewModelFactoryProtocol { func buildChainAccountViewModel( @@ -24,7 +25,7 @@ class ChainAccountViewModelFactory: ChainAccountViewModelFactoryProtocol { var address: String? if let chainAccountResponse = wallet.fetch(for: chainAsset.chain.accountRequest()), - let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chain: chainAsset.chain) { + let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chainFormat: chainAsset.chain.chainFormat(bounceable: false)) { address = address1 } let allAssets = Array(chainAsset.chain.assets) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift index d0da0bca57..9c55ef0e73 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SoraKeystore import SSFStorageQueryKit +import SSFModels final class ChainAssetListAssembly { static func configureModule( @@ -26,15 +27,6 @@ final class ChainAssetListAssembly { let dependencyContainer = ChainAssetListDependencyContainer() - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) let chainRepository = ChainRepositoryFactory().createRepository( for: NSPredicate.enabledCHain(), sortDescriptors: [NSSortDescriptor.chainsByAddressPrefix] @@ -59,22 +51,11 @@ final class ChainAssetListAssembly { missingAccountHelper: missingAccountHelper, accountInfoFetcher: accountInfoFetcher ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() + + let remoteBalanceService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainSettingsRepositoryFactory = ChainSettingsRepositoryFactory(storageFacade: UserDataStorageFacade.shared) let chainSettingsRepostiry = chainSettingsRepositoryFactory.createAsyncRepository() - let operationQueue = OperationManagerFacade.sharedDefaultQueue - let assetRepository = AssetRepositoryFactory().createRepository() let pricesService = PricesService.shared - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemoteService = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) let interactor = ChainAssetListInteractor( wallet: wallet, @@ -82,15 +63,14 @@ final class ChainAssetListAssembly { accountRepository: AnyDataProviderRepository(accountRepository), accountInfoFetchingProvider: accountInfoFetching, dependencyContainer: dependencyContainer, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + remoteBalanceService: remoteBalanceService, chainAssetFetching: chainAssetFetching, userDefaultsStorage: SettingsManager.shared, chainsIssuesCenter: chainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository(chainSettingsRepostiry), chainRegistry: ChainRegistryFacade.sharedRegistry, - accountInfoRemoteService: accountInfoRemoteService, - pricesService: pricesService, - operationQueue: operationQueue + logger: ServiceAssembly.shared.logger, + pricesService: pricesService ) let router = ChainAssetListRouter() let viewModelFactory = ChainAssetListViewModelFactory( @@ -113,6 +93,8 @@ final class ChainAssetListAssembly { keyboardAdoptable: keyboardAdoptable, localizationManager: localizationManager ) + + presenter.bannersInput = bannersModule?.input return (view, presenter) } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift index 9bda654e1d..aec3dd043a 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ChainAssetListDependencies { let chainAssetFetching: ChainAssetFetchingProtocol diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index d77d528331..d620a92b85 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -19,7 +19,7 @@ final class ChainAssetListInteractor { private let accountRepository: AnyDataProviderRepository private let accountInfoFetchingProvider: AccountInfoFetching private let dependencyContainer: ChainAssetListDependencyContainer - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let remoteBalanceService: AccountInfoRemoteService private let chainAssetFetching: ChainAssetFetchingProtocol private var chainAssets: [ChainAsset]? private var filters: [ChainAssetsFetching.Filter] = [] @@ -28,9 +28,8 @@ final class ChainAssetListInteractor { private let chainsIssuesCenter: ChainsIssuesCenter private let chainSettingsRepository: AsyncAnyRepository private let chainRegistry: ChainRegistryProtocol - private let accountInfoRemoteService: AccountInfoRemoteService + private let logger: LoggerProtocol private let pricesService: PricesServiceProtocol - private let operationQueue: OperationQueue private let mutex = NSLock() private var remoteFetchTimer: Timer? @@ -47,30 +46,28 @@ final class ChainAssetListInteractor { accountRepository: AnyDataProviderRepository, accountInfoFetchingProvider: AccountInfoFetching, dependencyContainer: ChainAssetListDependencyContainer, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + remoteBalanceService: AccountInfoRemoteService, chainAssetFetching: ChainAssetFetchingProtocol, userDefaultsStorage: SettingsManagerProtocol, chainsIssuesCenter: ChainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository, chainRegistry: ChainRegistryProtocol, - accountInfoRemoteService: AccountInfoRemoteService, - pricesService: PricesServiceProtocol, - operationQueue: OperationQueue + logger: LoggerProtocol, + pricesService: PricesServiceProtocol ) { self.wallet = wallet self.eventCenter = eventCenter self.accountRepository = accountRepository self.accountInfoFetchingProvider = accountInfoFetchingProvider self.dependencyContainer = dependencyContainer - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.remoteBalanceService = remoteBalanceService self.chainAssetFetching = chainAssetFetching self.userDefaultsStorage = userDefaultsStorage self.chainsIssuesCenter = chainsIssuesCenter self.chainSettingsRepository = chainSettingsRepository self.chainRegistry = chainRegistry - self.accountInfoRemoteService = accountInfoRemoteService + self.logger = logger self.pricesService = pricesService - self.operationQueue = operationQueue } // MARK: - Private methods @@ -105,8 +102,7 @@ final class ChainAssetListInteractor { accountInfoSubscriptionAdapter.subscribe( chainsAssets: chainAssets, handler: self, - deliveryOn: accountInfosDeliveryQueue, - notifyJustWhenUpdated: false + deliveryOn: accountInfosDeliveryQueue ) } @@ -125,9 +121,22 @@ final class ChainAssetListInteractor { sortDescriptors: sorts ) { [weak self] result in guard let result = result else { return } + if let chainAsset = try? result.get() { + self?.chainAssets = chainAsset + self?.subscribeToAccountInfo(for: chainAsset) + } self?.output?.didReceiveChainAssets(result: result) } } + + private func updateTonPricesIfNeeded() { + Task { + guard let tonAssets = chainAssets?.filter({ $0.chain.ecosystem == .ton }) else { + return + } + _ = try await remoteBalanceService.fetchAccountInfos(for: tonAssets, wallet: wallet) + } + } } // MARK: - ChainAssetListInteractorInput @@ -183,7 +192,13 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { self?.output?.didReceiveChainAssets(result: .success(chainAssets)) self?.accountInfoFetchingProvider.fetch(for: chainAssets, wallet: strongSelf.wallet) { accountInfosByChainAssets in - self?.ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: strongSelf.wallet) { _ in } + Task { + do { + _ = try await strongSelf.remoteBalanceService.fetchAccountInfos(for: chainAssets, wallet: strongSelf.wallet) + } catch { + strongSelf.logger.customError(error) + } + } self?.output?.didReceive(accountInfosByChainAssets: accountInfosByChainAssets) self?.subscribeToAccountInfo(for: chainAssets) } @@ -221,9 +236,14 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { timer.invalidate() self?.remoteFetchTimer = nil }) - - ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: wallet) { _ in } pricesService.updatePrices() + Task { + do { + _ = try await remoteBalanceService.fetchAccountInfos(for: chainAssets, wallet: wallet) + } catch { + logger.customError(error) + } + } } func getAvailableChainAssets(chainAsset: ChainAsset, completion: @escaping (([ChainAsset]) -> Void)) { @@ -272,21 +292,26 @@ extension ChainAssetListInteractor: AccountInfoSubscriptionAdapterHandler { } extension ChainAssetListInteractor: EventVisitorProtocol { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + guard event.account.metaId == wallet.metaId else { + return + } + + output?.didReceiveWallet(wallet: event.account) + updateTonPricesIfNeeded() + wallet = event.account + output?.updateViewModel() + } + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { output?.didReceiveWallet(wallet: event.account) - if wallet.selectedCurrency != event.account.selectedCurrency { - guard let chainAssets = chainAssets else { - return - } - } - if wallet.assetsVisibility != event.account.assetsVisibility { - output?.updateViewModel(isInitSearchState: false) + updateChainAssets(using: filters, sorts: sorts, useCashe: false) } if wallet.unusedChainIds != event.account.unusedChainIds { - output?.updateViewModel(isInitSearchState: false) + output?.updateViewModel() } wallet = event.account diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift index 9109fd54d8..089189a0b5 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift @@ -10,7 +10,7 @@ final class ChainAssetListPresenter { private weak var view: ChainAssetListViewInput? private let router: ChainAssetListRouterInput private let interactor: ChainAssetListInteractorInput - + var bannersInput: BannersModuleInput? private let viewModelFactory: ChainAssetListViewModelFactoryProtocol private var wallet: MetaAccountModel private var chainAssets: [ChainAsset]? @@ -35,6 +35,7 @@ final class ChainAssetListPresenter { self.router = router self.wallet = wallet self.viewModelFactory = viewModelFactory + self.localizationManager = localizationManager } @@ -64,6 +65,11 @@ final class ChainAssetListPresenter { DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) + + DispatchQueue.global().async { + self.bannersInput?.reload() + } + } } } @@ -116,6 +122,10 @@ extension ChainAssetListPresenter: ChainAssetListViewOutput { self.view = view interactor.setup(with: self) } + + func didAppear(view: ChainAssetListViewInput) { + + } func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) { if viewModel.chainAsset.chain.isSupported { @@ -194,7 +204,7 @@ extension ChainAssetListPresenter: ChainAssetListViewOutput { // MARK: - ChainAssetListInteractorOutput extension ChainAssetListPresenter: ChainAssetListInteractorOutput { - func updateViewModel(isInitSearchState _: Bool) { + func updateViewModel() { provideViewModel() } @@ -342,9 +352,9 @@ extension ChainAssetListPresenter: ChainAssetListModuleInput { extension ChainAssetListPresenter: BannersModuleOutput { func didTapCloseBanners() {} - func reloadBannersView() { + func reloadBannersView(bannersCount: Int) { DispatchQueue.main.async { - self.view?.reloadBanners() + self.view?.reloadBanners(shouldShowBanners: bannersCount > 0) } } } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift index cab98fdbd0..61f2a54f41 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift @@ -5,10 +5,11 @@ typealias ChainAssetListModuleCreationResult = (view: ChainAssetListViewInput, i protocol ChainAssetListViewInput: ControllerBackedProtocol { func didReceive(viewModel: ChainAssetListViewModel) - func reloadBanners() + func reloadBanners(shouldShowBanners: Bool) } protocol ChainAssetListViewOutput: AnyObject { + func didAppear(view: ChainAssetListViewInput) func didLoad(view: ChainAssetListViewInput) func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) func didTapAction(actionType: SwipableCellButtonType, viewModel: ChainAccountBalanceCellViewModel) @@ -39,7 +40,7 @@ protocol ChainAssetListInteractorOutput: AnyObject { func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) func didReceiveWallet(wallet: MetaAccountModel) func didReceiveChainsWithIssues(_ issues: [ChainIssue]) - func updateViewModel(isInitSearchState: Bool) + func updateViewModel() func didReceive(accountInfosByChainAssets: [ChainAsset: AccountInfo?]) func handleWalletChanged(wallet: MetaAccountModel) func didReceive(chainSettings: [ChainSettings]) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift index bf76a08797..8679d89195 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift @@ -34,12 +34,12 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { ) } - func showSendFlow( + @MainActor func showSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { @@ -89,7 +89,8 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index 7c3113cee8..961dbf9e87 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -63,6 +63,8 @@ final class ChainAssetListViewController: if keyboardHandler == nil, keyboardAdoptable { setupKeyboardHandler() } + + output.didAppear(view: self) } override func viewDidDisappear(_ animated: Bool) { @@ -146,11 +148,17 @@ private extension ChainAssetListViewController { // MARK: - ChainAssetListViewInput extension ChainAssetListViewController: ChainAssetListViewInput { - func reloadBanners() { - guard viewModel != nil else { + func reloadBanners(shouldShowBanners: Bool) { + guard shouldShowBanners else { + rootView.removeHeaderView() + return + } + + guard let viewModel else { return } - rootView.tableView.setAndLayoutTableHeaderView(header: rootView.headerViewContainer) + + didReceive(viewModel: viewModel) } func didReceive(viewModel: ChainAssetListViewModel) { @@ -162,21 +170,24 @@ extension ChainAssetListViewController: ChainAssetListViewInput { switch viewModel.displayState { case let .defaultList(_, withAnimate): - rootView.setHeaderView() rootView.setFooterView() + rootView.tableView.reloadData() + guard rootView.isAnimating == false else { + rootView.setHeaderView() + reloadEmptyState(animated: false) return } - rootView.tableView.reloadData() - if withAnimate { rootView.runManageAssetAnimate(finish: { [weak self] in self?.output.didFinishManageAssetAnimate() - self?.rootView.tableView.reloadData() + self?.rootView.setHeaderView() }) + } else { + rootView.setHeaderView() } - case .chainHasNetworkIssue, .chainHasAccountIssue, .allIsHidden: + case .chainHasNetworkIssue, .chainHasAccountIssue: rootView.removeHeaderView() rootView.removeFooterView() rootView.tableView.reloadData() @@ -185,6 +196,10 @@ extension ChainAssetListViewController: ChainAssetListViewInput { isEmpty ? rootView.removeFooterView() : rootView.setFooterView() isEmpty ? rootView.removeHeaderView() : rootView.setHeaderView() rootView.tableView.reloadData() + case .allIsHidden: + rootView.setFooterView() + rootView.setHeaderView() + rootView.tableView.reloadData() } reloadEmptyState(animated: false) } diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift index fb5058d65a..367f434b44 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift @@ -25,6 +25,7 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { private var assetIconImageView: UIImageView = { let imageView = UIImageView() imageView.contentMode = .scaleAspectFit + imageView.layer.masksToBounds = true return imageView }() @@ -106,6 +107,11 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { } } + override func layoutSubviews() { + super.layoutSubviews() + assetIconImageView.rounded() + } + // MARK: - Public methods func bind(to viewModel: ChainAccountBalanceCellViewModel) { @@ -117,7 +123,8 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { viewModel.imageViewModel?.loadBalanceListIcon( on: assetIconImageView, - animated: false + animated: true, + cornerRadius: LayoutConstants.iconSize / 2 ) if let options = viewModel.options { diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift index a1d70b28c1..9336871f04 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift @@ -65,15 +65,12 @@ final class ChainAssetListViewLayout: UIView { func addBanners(view: UIView) { bannersView = view - bannersView?.isHidden = true - headerViewContainer.addArrangedSubview(view) - view.snp.makeConstraints { make in - make.width.equalToSuperview().inset(UIConstants.bigOffset) - } } func setHeaderView() { - tableView.setAndLayoutTableHeaderView(header: headerViewContainer) + if let bannersView = bannersView { + tableView.setAndLayoutTableHeaderView(header: bannersView) + } } func removeHeaderView() { @@ -111,10 +108,10 @@ final class ChainAssetListViewLayout: UIView { container.scrollBottomOffset = 116 container.addArrangedSubview(headerViewContainer) container.addArrangedSubview(emptyView) - container.addArrangedSubview(footerButton) + let footerContainer = UIView() + container.addArrangedSubview(footerContainer) headerViewContainer.snp.remakeConstraints { make in - make.leading.trailing.equalToSuperview() make.width.equalToSuperview() } @@ -124,7 +121,9 @@ final class ChainAssetListViewLayout: UIView { make.height.greaterThanOrEqualToSuperview() } + footerContainer.addSubview(footerButton) footerButton.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() make.leading.trailing.equalToSuperview().inset(16) make.height.equalTo(UIConstants.actionHeight) } @@ -133,17 +132,23 @@ final class ChainAssetListViewLayout: UIView { } func runManageAssetAnimate(finish: @escaping (() -> Void)) { - isAnimating = true + var visibleRect: CGRect = .zero + visibleRect.origin = self.tableView.contentOffset + visibleRect.size = self.tableView.bounds.size + let rect = self.tableView.convert( + self.footerButton.bounds, + from: self.tableView.tableFooterView + ) + + guard !visibleRect.intersects(rect) else { + finish() + return + } + + self.tableView.scrollRectToVisible(rect, animated: true) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - let rect = self.tableView.convert( - self.footerButton.bounds, - from: self.tableView.tableFooterView - ) - self.tableView.scrollRectToVisible( - rect, - animated: true - ) + self.isAnimating = true UIView.animate( withDuration: 0.6, @@ -152,13 +157,14 @@ final class ChainAssetListViewLayout: UIView { self.footerButton.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) }, completion: { _ in - UIView.animate(withDuration: 0.6) { + UIView.animate(withDuration: 0.6, + animations: { self.footerButton.transform = CGAffineTransform.identity - finish() self.isAnimating = false - } - } - ) + }, completion: { _ in + finish() + }) + }) } } diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift deleted file mode 100644 index 4fb1b4160f..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift +++ /dev/null @@ -1,71 +0,0 @@ -import Foundation -import SSFModels - -struct WalletSendConfirmViewModelFactoryParameters { - let amount: Decimal - let senderAccountViewModel: AccountViewModel? - let receiverAccountViewModel: AccountViewModel? - let assetBalanceViewModel: AssetBalanceViewModelProtocol? - let tipRequired: Bool - let tipViewModel: BalanceViewModelProtocol? - let feeViewModel: BalanceViewModelProtocol? - let wallet: MetaAccountModel - let locale: Locale - let scamInfo: ScamInfo? - let assetModel: AssetModel -} - -protocol WalletSendConfirmViewModelFactoryProtocol { - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel -} - -class WalletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol { - let amountFormatterFactory: AssetBalanceFormatterFactoryProtocol - let assetInfo: AssetBalanceDisplayInfo - - init(amountFormatterFactory: AssetBalanceFormatterFactoryProtocol, assetInfo: AssetBalanceDisplayInfo) { - self.amountFormatterFactory = amountFormatterFactory - self.assetInfo = assetInfo - } - - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel { - let formatter = amountFormatterFactory.createTokenFormatter(for: assetInfo, usageCase: .detailsCrypto) - let inputAmount = formatter.value(for: parameters.locale).stringFromDecimal(parameters.amount) ?? "" - let amountString = R.string.localizable.sendConfirmAmountTitle( - inputAmount, - preferredLanguages: parameters.locale.rLanguages - ) - let amountAttributedString = NSMutableAttributedString(string: amountString) - amountAttributedString.addAttribute( - NSAttributedString.Key.foregroundColor, - value: R.color.colorWhite()!.cgColor, - range: (amountString as NSString).range(of: inputAmount) - ) - let shadowColor = HexColorConverter.hexStringToUIColor( - hex: parameters.assetModel.color - )?.cgColor - let symbolViewModel = SymbolViewModel( - symbolViewModel: parameters.assetModel.icon.map { RemoteImageViewModel(url: $0) }, - shadowColor: shadowColor - ) - return WalletSendConfirmViewModel( - amountAttributedString: amountAttributedString, - amountString: inputAmount, - senderNameString: parameters.wallet.name, - senderAddressString: parameters.senderAccountViewModel?.name ?? "", - receiverAddressString: parameters.receiverAccountViewModel?.name ?? "", - priceString: parameters.assetBalanceViewModel?.price ?? "", - feeAmountString: parameters.feeViewModel?.amount ?? "", - feePriceString: parameters.feeViewModel?.price ?? "", - tipRequired: parameters.tipRequired, - tipAmountString: parameters.tipViewModel?.amount ?? "", - tipPriceString: parameters.tipViewModel?.price ?? "", - showWarning: parameters.scamInfo != nil, - symbolViewModel: symbolViewModel - ) - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift deleted file mode 100644 index b31303cb03..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -enum WalletSendConfirmViewState { - case loading - case loaded(WalletSendConfirmViewModel) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift deleted file mode 100644 index 67f775ad66..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift +++ /dev/null @@ -1,159 +0,0 @@ -import UIKit -import RobinHood -import Web3 -import IrohaCrypto -import SSFModels -import SSFCrypto -import SoraKeystore -import Web3PromiseKit - -final class WalletSendConfirmInteractor: RuntimeConstantFetching { - weak var presenter: WalletSendConfirmInteractorOutputProtocol? - - private let selectedMetaAccount: MetaAccountModel - private let accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol - private let call: SendConfirmTransferCall - private let chainAsset: ChainAsset - private let wallet: MetaAccountModel - private var equilibriumTotalBalanceService: EquilibriumTotalBalanceServiceProtocol? - let dependencyContainer: SendDepencyContainer - private var balanceProvider: AnyDataProvider? - - init( - selectedMetaAccount: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, - dependencyContainer: SendDepencyContainer, - wallet: MetaAccountModel - ) { - self.selectedMetaAccount = selectedMetaAccount - self.chainAsset = chainAsset - self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter - self.call = call - self.dependencyContainer = dependencyContainer - self.wallet = wallet - } - - private func subscribeToAccountInfo() { - var chainsAssets = [chainAsset] - if !chainAsset.isUtility, - let utilityAsset = getFeePaymentChainAsset(for: chainAsset) { - chainsAssets.append(utilityAsset) - } - accountInfoSubscriptionAdapter.subscribe( - chainsAssets: chainsAssets, - handler: self, - deliveryOn: .main - ) - } - - private func subscribeToFee() { - switch call { - case let .transfer(transfer): - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - transferService.subscribeForFee(transfer: transfer, listener: self) - } catch { - await MainActor.run { - presenter?.didReceiveFee(result: .failure(error)) - } - } - } - case let .xorlessTransfer(xorlessTransfer): - break - } - } -} - -extension WalletSendConfirmInteractor: WalletSendConfirmInteractorInputProtocol { - func setup() { - subscribeToAccountInfo() - provideConstants() - subscribeToFee() - } - - func submitExtrinsic() { - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - - let txHash: String - switch call { - case let .transfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - case let .xorlessTransfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - } - - await MainActor.run { - presenter?.didTransfer(result: .success(txHash)) - } - } catch { - await MainActor.run { - presenter?.didTransfer(result: .failure(error)) - } - } - } - } - - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? { - guard let chainAsset = chainAsset else { return nil } - if let utilityAsset = chainAsset.chain.utilityAssets().first { - return ChainAsset(chain: chainAsset.chain, asset: utilityAsset) - } - return chainAsset - } - - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) { - if chainAsset.chain.isEquilibrium { - Task { - let service = try await dependencyContainer - .prepareDepencies(chainAsset: chainAsset) - .equilibruimTotalBalanceService - equilibriumTotalBalanceService = service - - let totalBalanceAfterTransfer = equilibriumTotalBalanceService? - .totalBalanceAfterTransfer(chainAsset: chainAsset, amount: amount) ?? .zero - presenter?.didReceive(eqTotalBalance: totalBalanceAfterTransfer) - } - } - } - - func provideConstants() { - Task { - let dependencies = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset) - - dependencies.existentialDepositService.fetchExistentialDeposit( - chainAsset: chainAsset - ) { [weak self] result in - self?.presenter?.didReceiveMinimumBalance(result: result) - } - } - } -} - -extension WalletSendConfirmInteractor: AccountInfoSubscriptionAdapterHandler { - func handleAccountInfo( - result: Swift.Result, - accountId _: AccountId, - chainAsset: ChainAsset - ) { - presenter?.didReceiveAccountInfo(result: result, for: chainAsset) - } -} - -extension WalletSendConfirmInteractor: TransferFeeEstimationListener { - func didReceiveFee(fee: BigUInt) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .success(RuntimeDispatchInfo(feeValue: fee))) - } - } - - func didReceiveFeeError(feeError: Error) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .failure(feeError)) - } - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift deleted file mode 100644 index 9a0fcffb34..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift +++ /dev/null @@ -1,378 +0,0 @@ -import Foundation -import Web3 -import BigInt -import SoraFoundation -import IrohaCrypto -import SwiftUI -import SSFModels - -struct SendLoadingCollector { - var feeReady: Bool = false - var balanceReady: Bool = false - var utilityBalanceReady: Bool = false - var edReady: Bool = false - - mutating func reset(isUtility: Bool) { - feeReady = false - balanceReady = false - utilityBalanceReady = !isUtility - edReady = false - } - - var isReady: Bool { - [ - feeReady, - balanceReady, - utilityBalanceReady, - edReady - ].allSatisfy { $0 } - } -} - -final class WalletSendConfirmPresenter { - weak var view: WalletSendConfirmViewProtocol? - private let wireframe: WalletSendConfirmWireframeProtocol - private let interactor: WalletSendConfirmInteractorInputProtocol - private let accountViewModelFactory: AccountViewModelFactoryProtocol - private let dataValidatingFactory: SendDataValidatingFactory - private let logger: LoggerProtocol? - private let chainAsset: ChainAsset - private let call: SendConfirmTransferCall - private let wallet: MetaAccountModel - private let walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol - private let scamInfo: ScamInfo? - private var feeViewModel: BalanceViewModelProtocol? - - private var balance: Decimal? - private var utilityBalance: Decimal? - private var fee: Decimal? - private var minimumBalance: BigUInt? - private var eqUilibriumTotalBalance: Decimal? - - private var loadingCollector = SendLoadingCollector() - private var priceData: PriceData? { - chainAsset.asset.getPrice(for: wallet.selectedCurrency) - } - - init( - interactor: WalletSendConfirmInteractorInputProtocol, - wireframe: WalletSendConfirmWireframeProtocol, - accountViewModelFactory: AccountViewModelFactoryProtocol, - dataValidatingFactory: SendDataValidatingFactory, - walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol, - logger: LoggerProtocol?, - chainAsset: ChainAsset, - wallet: MetaAccountModel, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol?, - localizationManager: LocalizationManagerProtocol - ) { - self.interactor = interactor - self.wireframe = wireframe - self.accountViewModelFactory = accountViewModelFactory - self.dataValidatingFactory = dataValidatingFactory - self.walletSendConfirmViewModelFactory = walletSendConfirmViewModelFactory - self.logger = logger - self.chainAsset = chainAsset - self.call = call - self.wallet = wallet - self.scamInfo = scamInfo - self.feeViewModel = feeViewModel - self.localizationManager = localizationManager - if let feeViewModel { - fee = Decimal(string: feeViewModel.amount) - } - loadingCollector.feeReady = feeViewModel != nil - } - - private func provideViewModel() { - Task { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let parameters = WalletSendConfirmViewModelFactoryParameters( - amount: amount, - senderAccountViewModel: provideSenderAccountViewModel(), - receiverAccountViewModel: provideReceiverAccountViewModel(), - assetBalanceViewModel: try await provideAssetVewModel(), - tipRequired: chainAsset.chain.isTipRequired, - tipViewModel: try await provideTipViewModel(), - feeViewModel: feeViewModel, - wallet: wallet, - locale: selectedLocale, - scamInfo: scamInfo, - assetModel: chainAsset.asset - ) - let viewModel = walletSendConfirmViewModelFactory.buildViewModel( - parameters: parameters - ) - - await MainActor.run { - self.view?.didReceive(state: .loaded(viewModel)) - } - } - } - - private func provideReceiverAccountViewModel() -> AccountViewModel? { - let title = R.string.localizable - .walletSendReceiverTitle(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: call.receiverAddress, - locale: selectedLocale - ) - } - - private func provideSenderAccountViewModel() -> AccountViewModel? { - guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - let senderAddress = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) - else { - return nil - } - - let title = R.string.localizable - .transactionDetailsFrom(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: senderAddress, - locale: selectedLocale - ) - } - - private func provideAssetVewModel() async throws -> AssetBalanceViewModelProtocol? { - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - return balanceViewModelFactory?.createAssetBalanceViewModel( - amount, - balance: balance, - priceData: priceData - ).value(for: selectedLocale) - } - - private func provideTipViewModel() async throws -> BalanceViewModelProtocol? { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { return nil } - - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(chainAsset.asset.precision)) - return tip - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - } - - private func updateFeeViewModel() { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { - return - } - let utilityPriceData = utilityAsset.asset.getPrice(for: wallet.selectedCurrency) - - let viewModel = fee - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: utilityPriceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - feeViewModel = viewModel - } - - private func buildBalanceViewModelFactory( - wallet: MetaAccountModel, - for chainAsset: ChainAsset? - ) -> BalanceViewModelFactoryProtocol? { - guard let chainAsset = chainAsset else { - return nil - } - let assetInfo = chainAsset.asset - .displayInfo(with: chainAsset.chain.icon) - let balanceViewModelFactory = BalanceViewModelFactory( - targetAssetInfo: assetInfo, - selectedMetaAccount: wallet - ) - return balanceViewModelFactory - } - - private func validateAndSubmitTransfer() { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let balanceType: BalanceType = !chainAsset.isUtility ? - .orml(balance: balance, utilityBalance: utilityBalance) : .utility(balance: balance) - - DataValidationRunner(validators: [ - dataValidatingFactory.canPayFeeAndAmount( - balanceType: balanceType, - feeAndTip: (fee ?? 0) + tip, - sendAmount: amount, - locale: selectedLocale - ) - ]).runValidation { [weak self] in - guard let strongSelf = self else { return } - strongSelf.view?.didStartLoading() - strongSelf.interactor.submitExtrinsic() - } - } - - private func submitXorlessTransfer() { - view?.didStartLoading() - interactor.submitExtrinsic() - } - - private func checkLoadingState() { - DispatchQueue.main.async { [unowned self] in - self.view?.didReceive(isLoading: !self.loadingCollector.isReady) - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmPresenterProtocol { - func didTapScamWarningButton() { - let title = R.string.localizable.scamWarningAlertTitle( - chainAsset.asset.symbol.uppercased(), - preferredLanguages: selectedLocale.rLanguages - ) - let message = R.string.localizable.scamWarningAlertSubtitle( - chainAsset.asset.symbolUppercased, - preferredLanguages: selectedLocale.rLanguages - ) - - let sheetViewModel = SheetAlertPresentableViewModel( - title: title, - message: message, - actions: [], - closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), - icon: R.image.iconWarningBig() - ) - wireframe.present( - viewModel: sheetViewModel, - from: view - ) - } - - func setup() { - interactor.setup() - provideViewModel() - loadingCollector.utilityBalanceReady = chainAsset.isUtility - } - - func didTapBackButton() { - wireframe.close(view: view) - } - - func didTapConfirmButton() { - switch call { - case .transfer: - validateAndSubmitTransfer() - case .xorlessTransfer: - submitXorlessTransfer() - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmInteractorOutputProtocol { - func didTransfer(result: Result) { - view?.didStopLoading() - - switch result { - case let .success(hash): - - wireframe.complete(on: view, title: hash, chainAsset: chainAsset) - case let .failure(error): - guard let view = view else { - return - } - - if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { - wireframe.presentAmountTooHigh(from: view, locale: selectedLocale) - return - } - - if !wireframe.present(error: error, from: view, locale: selectedLocale) { - wireframe.presentExtrinsicFailed(from: view, locale: selectedLocale) - } - } - } - - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) { - switch result { - case let .success(accountInfo): - if chainAsset == self.chainAsset { - loadingCollector.balanceReady = true - checkLoadingState() - - balance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(chainAsset.asset.precision) - ) - } ?? 0.0 - - provideViewModel() - } else if let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - utilityAsset == chainAsset { - loadingCollector.utilityBalanceReady = true - checkLoadingState() - - utilityBalance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(utilityAsset.asset.precision) - ) - } ?? 0 - } - case let .failure(error): - logger?.error("Did receive account info error: \(error)") - } - } - - func didReceiveMinimumBalance(result: Result) { - switch result { - case let .success(minimumBalance): - loadingCollector.edReady = true - checkLoadingState() - self.minimumBalance = minimumBalance - - provideViewModel() - case let .failure(error): - loadingCollector.edReady = true - checkLoadingState() - logger?.error("Did receive minimum balance error: \(error)") - } - } - - func didReceiveFee(result: Result) { - switch result { - case let .success(dispatchInfo): - guard let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset) else { return } - fee = BigUInt(string: dispatchInfo.fee).map { - Decimal.fromSubstrateAmount($0, precision: Int16(utilityAsset.asset.precision)) - } ?? nil - updateFeeViewModel() - provideViewModel() - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let fullAmount = amount + fee.or(.zero) + tip - interactor.fetchEquilibriumTotalBalance(chainAsset: chainAsset, amount: fullAmount) - loadingCollector.feeReady = true - checkLoadingState() - case let .failure(error): - logger?.error("Did receive fee error: \(error)") - } - } - - func didReceive(eqTotalBalance: Decimal) { - eqUilibriumTotalBalance = eqTotalBalance - loadingCollector.balanceReady = true - checkLoadingState() - } -} - -extension WalletSendConfirmPresenter: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift deleted file mode 100644 index b0113d7dea..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift +++ /dev/null @@ -1,47 +0,0 @@ -import BigInt -import Foundation -import SSFModels - -protocol WalletSendConfirmViewProtocol: ControllerBackedProtocol, LoadableViewProtocol { - func didReceive(state: WalletSendConfirmViewState) - func didReceive(isLoading: Bool) -} - -protocol WalletSendConfirmPresenterProtocol: AnyObject { - func setup() - func didTapConfirmButton() - func didTapBackButton() - func didTapScamWarningButton() -} - -protocol WalletSendConfirmInteractorInputProtocol: AnyObject { - var dependencyContainer: SendDepencyContainer { get } - - func setup() - func submitExtrinsic() - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) - func provideConstants() -} - -protocol WalletSendConfirmInteractorOutputProtocol: AnyObject { - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) - func didReceiveMinimumBalance(result: Result) - func didReceiveFee(result: Result) - func didReceive(eqTotalBalance: Decimal) - func didTransfer(result: Result) -} - -protocol WalletSendConfirmWireframeProtocol: - ErrorPresentable, - BaseErrorPresentable, - ModalAlertPresenting, - SheetAlertPresentable { - func close(view: ControllerBackedProtocol?) - func finish(view: ControllerBackedProtocol?) - func complete( - on view: ControllerBackedProtocol?, - title: String, - chainAsset: ChainAsset - ) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift deleted file mode 100644 index 076b66d738..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift +++ /dev/null @@ -1,81 +0,0 @@ -import UIKit -import SoraFoundation - -final class WalletSendConfirmViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { - typealias RootViewType = WalletSendConfirmViewLayout - - let presenter: WalletSendConfirmPresenterProtocol - - private var state: WalletSendConfirmViewState = .loading - - init(presenter: WalletSendConfirmPresenterProtocol, localizationManager: LocalizationManagerProtocol) { - self.presenter = presenter - super.init(nibName: nil, bundle: nil) - self.localizationManager = localizationManager - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func loadView() { - view = WalletSendConfirmViewLayout() - } - - override func viewDidLoad() { - super.viewDidLoad() - - setupLocalization() - presenter.setup() - - rootView.navigationBar.backButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside) - rootView.receiverWarningButton.addTarget(self, action: #selector(handleScamWarningTapped), for: .touchUpInside) - rootView.confirmButton.addTarget(self, action: #selector(continueButtonClicked), for: .touchUpInside) - } - - private func setupLocalization() { - rootView.locale = selectedLocale - } - - private func applyState(_ state: WalletSendConfirmViewState) { - self.state = state - - switch state { - case .loading: - break - case let .loaded(model): - rootView.bind(confirmViewModel: model) - } - } - - @objc private func continueButtonClicked() { - presenter.didTapConfirmButton() - } - - @objc private func backButtonClicked() { - presenter.didTapBackButton() - } - - @objc private func handleScamWarningTapped() { - presenter.didTapScamWarningButton() - } -} - -extension WalletSendConfirmViewController: WalletSendConfirmViewProtocol { - func didReceive(state: WalletSendConfirmViewState) { - applyState(state) - } - - func didReceive(isLoading: Bool) { - rootView.confirmButton.set(loading: isLoading) - - if !isLoading { - rootView.confirmButton.set(enabled: true, changeStyle: true) - } - } -} - -extension WalletSendConfirmViewController: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift deleted file mode 100644 index 45855dfedc..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift +++ /dev/null @@ -1,122 +0,0 @@ -import Foundation -import BigInt -import SSFUtils -import SoraFoundation -import SoraKeystore -import SSFModels -import RobinHood - -enum SendConfirmTransferCall { - case transfer(Transfer) - case xorlessTransfer(XorlessTransfer) - - var amount: BigUInt { - switch self { - case let .transfer(transfer): - return transfer.amount - case let .xorlessTransfer(xorlessTransfer): - return xorlessTransfer.amount - } - } - - var receiverAddress: String { - switch self { - case let .transfer(transfer): - return transfer.receiver - case let .xorlessTransfer(xorlessTransfer): - let bokoloId = String(data: xorlessTransfer.additionalData, encoding: .utf8) - if let bokoloAddress = bokoloId, bokoloAddress.isNotEmpty { - return bokoloAddress - } else if let receiver = try? AddressFactory.address(for: xorlessTransfer.receiver, chainFormat: .substrate(69)) { - return receiver - } - return "" - } - } - - var tip: BigUInt? { - switch self { - case let .transfer(transfer): - return transfer.tip - case .xorlessTransfer: - return nil - } - } -} - -enum WalletSendConfirmViewFactory { - static func createView( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) -> WalletSendConfirmViewProtocol? { - let interactor = createInteractor( - wallet: wallet, - chainAsset: chainAsset, - call: call - ) - - let wireframe = WalletSendConfirmWireframe() - - let accountViewModelFactory = AccountViewModelFactory(iconGenerator: UniversalIconGenerator()) - let assetInfo = chainAsset.asset.displayInfo(with: chainAsset.chain.icon) - - let dataValidatingFactory = SendDataValidatingFactory(presentable: wireframe) - - let viewModelFactory = WalletSendConfirmViewModelFactory( - amountFormatterFactory: AssetBalanceFormatterFactory(), - assetInfo: assetInfo - ) - - let presenter = WalletSendConfirmPresenter( - interactor: interactor, - wireframe: wireframe, - accountViewModelFactory: accountViewModelFactory, - dataValidatingFactory: dataValidatingFactory, - walletSendConfirmViewModelFactory: viewModelFactory, - logger: Logger.shared, - chainAsset: chainAsset, - wallet: wallet, - call: call, - scamInfo: scamInfo, - feeViewModel: feeViewModel, - localizationManager: LocalizationManager.shared - ) - - let view = WalletSendConfirmViewController( - presenter: presenter, - localizationManager: LocalizationManager.shared - ) - - dataValidatingFactory.view = view - presenter.view = view - interactor.presenter = presenter - - return view - } - - private static func createInteractor( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall - ) -> WalletSendConfirmInteractor { - let operationManager = OperationManagerFacade.sharedManager - let dependencyContainer = SendDepencyContainer( - wallet: wallet, - operationManager: operationManager - ) - return WalletSendConfirmInteractor( - selectedMetaAccount: wallet, - chainAsset: chainAsset, - call: call, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapter( - walletLocalSubscriptionFactory: WalletLocalSubscriptionFactory.shared, - selectedMetaAccount: wallet - ), - dependencyContainer: dependencyContainer, - wallet: wallet - ) - } -} diff --git a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift index c03a0c17f7..f70cb971c5 100644 --- a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift @@ -1,5 +1,5 @@ import Foundation - +import TonSwift import SoraFoundation import SSFModels @@ -66,8 +66,17 @@ class WalletTransactionDetailsViewModelFactory: WalletTransactionDetailsViewMode switch transactionType { case .incoming, .outgoing: - let from = transactionType == .outgoing ? accountAddress : transaction.peerName - let to = transactionType == .incoming ? accountAddress : transaction.peerName + let from: String? + let to: String? + switch chain.ecosystem { + case .substrate, .ethereumBased, .ethereum: + from = transactionType == .outgoing ? accountAddress : transaction.peerName + to = transactionType == .incoming ? accountAddress : transaction.peerName + case .ton: + let tonAddress = try? TonSwift.Address.parse(accountAddress).toFriendly(bounceable: false).toString() + from = transactionType == .outgoing ? tonAddress : transaction.peerName + to = transactionType == .incoming ? tonAddress : transaction.peerName + } let amountString = tokenFormatter.stringFromDecimal(transaction.amount.decimalValue) let fee: Decimal = transaction.fees.map(\.amount.decimalValue).reduce(0, +) let feeString = feeFormatter?.stringFromDecimal(fee) diff --git a/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift b/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift index 4e323cb509..f05e410b8d 100644 --- a/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift +++ b/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift @@ -1,4 +1,3 @@ - protocol WalletTransactionDetailsViewProtocol: ControllerBackedProtocol { func didReceiveState(_ state: WalletTransactionDetailsViewState) } diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift index 0b2be7706b..cea64a0ba6 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift @@ -1,5 +1,3 @@ - - enum WalletTransactionHistoryDataState { case waitingCached case loading(page: Pagination, previousPage: Pagination?) diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift index a078ac4a88..4a767f9826 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift @@ -1,4 +1,3 @@ - import RobinHood import SSFUtils import UIKit @@ -198,6 +197,10 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi size: CGSize(width: 50, height: 50), contentScale: UIScreen.main.scale ) + var imageViewModel: RemoteImageViewModel? + if let icon = data.context?["icon"] { + imageViewModel = RemoteImageViewModel(string: icon) + } let viewModel = WalletTransactionHistoryCellViewModel( transaction: data, address: address, @@ -208,7 +211,7 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi statusIcon: statusIcon, status: data.status, incoming: incoming, - imageViewModel: nil + imageViewModel: imageViewModel ) return viewModel } diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift index f847748981..2d037ea21c 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift @@ -12,6 +12,7 @@ class WalletTransactionHistoryCell: UITableViewCell { let accountIconImageView: UIImageView = { let iconView = UIImageView() iconView.backgroundColor = .clear + iconView.layer.masksToBounds = true return iconView }() @@ -64,15 +65,16 @@ class WalletTransactionHistoryCell: UITableViewCell { setupLayout() } - override func prepareForReuse() { - super.prepareForReuse() - } - @available(*, unavailable) required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") } + override func layoutSubviews() { + super.layoutSubviews() + accountIconImageView.layer.cornerRadius = LayoutConstants.accountImageViewSize.height / 2 + } + private func configure() { backgroundColor = .clear @@ -128,15 +130,15 @@ class WalletTransactionHistoryCell: UITableViewCell { transactionStatusIconImageView.image = viewModel.statusIcon transactionStatusIconImageView.isHidden = viewModel.statusIcon == nil - if let icon = viewModel.icon { - accountIconImageView.image = icon - } else if let imageViewModel = viewModel.imageViewModel { + if let imageViewModel = viewModel.imageViewModel { imageViewModel.loadImage( on: accountIconImageView, targetSize: LayoutConstants.accountImageViewSize, animated: true, - cornerRadius: 0 + cornerRadius: LayoutConstants.accountImageViewSize.height / 2 ) + } else if let icon = viewModel.icon { + accountIconImageView.image = icon } switch viewModel.status { diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift index 19f282e4a0..ededa8d629 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift @@ -268,7 +268,7 @@ final class WalletTransactionHistoryInteractor { do { try dependencyContainer.createDependencies(for: chainAsset, selectedAccount: selectedAccount) - let changesBlock = { [weak self] (changes: [DataProviderChange]) -> Void in + let changesBlock = { [weak self] (changes: [DataProviderChange]) in if let change = changes.first { switch change { case let .insert(item), let .update(item): diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift index f366cbe567..a86767f747 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels protocol WalletTransactionHistoryViewProtocol: ControllerBackedProtocol, Draggable, LoadableViewProtocol { diff --git a/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift b/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift index 87642b9827..b0e0fd5625 100644 --- a/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift +++ b/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift @@ -54,10 +54,6 @@ class NodeSelectionTableCell: UITableViewCell { setupLayout() } - override func prepareForReuse() { - super.prepareForReuse() - } - @available(*, unavailable) required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") diff --git a/fearless/Modules/Onboarding/OnboardingViewLayout.swift b/fearless/Modules/Onboarding/OnboardingViewLayout.swift index 759bd04635..c2f12fa94e 100644 --- a/fearless/Modules/Onboarding/OnboardingViewLayout.swift +++ b/fearless/Modules/Onboarding/OnboardingViewLayout.swift @@ -27,8 +27,6 @@ final class OnboardingViewLayout: UIView { return view }() - let segmentedControl = FWSegmentedControl() - let nextButton: TriangularedButton = { let button = TriangularedButton() button.applyEnabledStyle() diff --git a/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift b/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift index b3fe806a48..8befaa36e3 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift @@ -1,6 +1,10 @@ import Foundation +import SSFAccountManagment import SSFUtils import SSFCloudStorage +import TonSwift +import RobinHood +import SSFModels final class OnboardingMainInteractor { weak var presenter: OnboardingMainInteractorOutputProtocol? @@ -9,17 +13,26 @@ final class OnboardingMainInteractor { private let cloudStorage: CloudStorageServiceProtocol private let featureToggleService: FeatureToggleProviderProtocol private let operationQueue: OperationQueue + private let accountOperationFactory: MetaAccountOperationFactoryProtocol + private let settings: SelectedWalletSettings + private let eventCenter: EventCenterProtocol init( keystoreImportService: KeystoreImportServiceProtocol, cloudStorage: CloudStorageServiceProtocol, featureToggleService: FeatureToggleProviderProtocol, - operationQueue: OperationQueue + operationQueue: OperationQueue, + accountOperationFactory: MetaAccountOperationFactoryProtocol, + settings: SelectedWalletSettings, + eventCenter: EventCenterProtocol ) { self.keystoreImportService = keystoreImportService self.cloudStorage = cloudStorage self.featureToggleService = featureToggleService self.operationQueue = operationQueue + self.accountOperationFactory = accountOperationFactory + self.settings = settings + self.eventCenter = eventCenter } deinit { @@ -37,6 +50,43 @@ final class OnboardingMainInteractor { operationQueue.addOperation(fetchOperation) } + + private func createAccountUsingOperation(_ importOperation: BaseOperation) { + let saveOperation: ClosureOperation = ClosureOperation { [weak self] in + let accountItem = try importOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + self?.settings.save(value: accountItem) + + return accountItem + } + + saveOperation.completionBlock = { [weak self] in + DispatchQueue.main.async { + switch saveOperation.result { + case .success: + do { + let accountItem = try importOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + + self?.settings.setup() + self?.eventCenter.notify(with: SelectedAccountChanged(account: accountItem)) + self?.presenter?.didCompleteConfirmation() + } catch { + self?.presenter?.didReceive(error: error) + } + case let .failure(error): + self?.presenter?.didReceive(error: error) + + case .none: + let error = BaseOperationError.parentOperationCancelled + self?.presenter?.didReceive(error: error) + } + } + } + + saveOperation.addDependency(importOperation) + operationQueue.addOperations([importOperation, saveOperation], waitUntilFinished: false) + } } extension OnboardingMainInteractor: OnboardingMainInteractorInputProtocol { @@ -66,6 +116,19 @@ extension OnboardingMainInteractor: OnboardingMainInteractorInputProtocol { } } } + + func createTonAccount() { + let allWords = TonSwift.Mnemonic.mnemonicNew(wordsCount: 24) + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: allWords.joined(separator: " "), + username: "Wallet" + ) + let operation = accountOperationFactory.newTonMetaAccountOperation( + request: request, + isBackedUp: false + ) + createAccountUsingOperation(operation) + } } extension OnboardingMainInteractor: KeystoreImportObserver { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index 2d279ad1d1..6ad239e83c 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -9,6 +9,7 @@ final class OnboardingMainPresenter { private let legalData: LegalData private let locale: Locale + private var ecosystem: AccountCreateEcosystem? init( legalData: LegalData, @@ -52,6 +53,14 @@ final class OnboardingMainPresenter { } extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { + func dismiss() { + wireframe.dismiss(view: view) + } + + func didSelect(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + } + func setup() { interactor.setup() @@ -79,72 +88,85 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { } func activateSignup() { - wireframe.showSignup(from: view) + guard let ecosystem else { return } + switch ecosystem { + case .regular: + wireframe.showSignup(from: view, ecosystem: ecosystem) + case .ton: + interactor.createTonAccount() + } } func activateAccountRestore() { - let preferredLanguages = locale.rLanguages - - let mnemonicTitle = R.string.localizable - .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) - let mnemonicAction = SheetAlertPresentableAction( - title: mnemonicTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .mnemonic, from: self.view) - } - - let rawTitle = R.string.localizable - .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) - let rawAction = SheetAlertPresentableAction( - title: rawTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .seed, from: self.view) - } + guard let ecosystem else { return } + switch ecosystem { + case .regular: + let preferredLanguages = locale.rLanguages + + let mnemonicTitle = R.string.localizable + .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) + let mnemonicAction = SheetAlertPresentableAction( + title: mnemonicTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: self.view) + } + + let rawTitle = R.string.localizable + .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) + let rawAction = SheetAlertPresentableAction( + title: rawTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .seed, flow: .wallet(step: .substrate), from: self.view) + } + + let jsonTitle = R.string.localizable + .googleBackupChoiceJson(preferredLanguages: preferredLanguages) + let jsonAction = SheetAlertPresentableAction( + title: jsonTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: self.view) + } + + let googleButton = TriangularedButton() + googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() + googleButton.applyDisabledStyle() + let googleTitle = R.string.localizable + .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) + let googleAction = SheetAlertPresentableAction( + title: googleTitle, + button: googleButton + ) { [weak self] in + guard let self = self else { return } + self.activateGoogleBackup() + } + + let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) + let cancelAction = SheetAlertPresentableAction( + title: cancelTitle, + style: .pinkBackgroundWhiteText + ) - let jsonTitle = R.string.localizable - .googleBackupChoiceJson(preferredLanguages: preferredLanguages) - let jsonAction = SheetAlertPresentableAction( - title: jsonTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .keystore, from: self.view) - } + let title = R.string.localizable + .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: nil, + actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], + closeAction: nil, + icon: nil + ) - let googleButton = TriangularedButton() - googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() - googleButton.applyDisabledStyle() - let googleTitle = R.string.localizable - .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) - let googleAction = SheetAlertPresentableAction( - title: googleTitle, - button: googleButton - ) { [weak self] in - guard let self = self else { return } - self.activateGoogleBackup() + wireframe.present(viewModel: viewModel, from: view) + case .ton: + // TODO: - Ton google backup + wireframe.showAccountRestore(defaultSource: .tonMnemonic, flow: .wallet(step: .ton), from: self.view) } - - let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) - let cancelAction = SheetAlertPresentableAction( - title: cancelTitle, - style: .pinkBackgroundWhiteText - ) - - let title = R.string.localizable - .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) - let viewModel = SheetAlertPresentableViewModel( - title: title, - message: nil, - actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], - closeAction: nil, - icon: nil - ) - - wireframe.present(viewModel: viewModel, from: view) } func didTapGetPreinstalled() { @@ -153,6 +175,12 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { } extension OnboardingMainPresenter: OnboardingMainInteractorOutputProtocol { + func didCompleteConfirmation() { + wireframe.didCompleteCreate(from: view) + } + + func didReceive(error: any Error) {} + func didSuggestKeystoreImport() { wireframe.showKeystoreImport(from: view) } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index 3584c13e6f..e5a08f6dcf 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -12,12 +12,18 @@ protocol OnboardingMainPresenterProtocol: AnyObject { func activateTerms() func activatePrivacy() func didTapGetPreinstalled() + func didSelect(ecosystem: AccountCreateEcosystem) + func dismiss() } protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, SheetAlertPresentable, WarningPresentable, PresentDismissable, AppUpdatePresentable { - func showSignup(from view: OnboardingMainViewProtocol?) + func showSignup( + from view: OnboardingMainViewProtocol?, + ecosystem: AccountCreateEcosystem + ) func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) func showKeystoreImport(from view: OnboardingMainViewProtocol?) @@ -27,21 +33,25 @@ protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, Shee ) func showCreateFlow(from view: ControllerBackedProtocol?) func showPreinstalledFlow(from view: ControllerBackedProtocol?) + func didCompleteCreate(from view: ControllerBackedProtocol?) } protocol OnboardingMainInteractorInputProtocol: AnyObject { func setup() func activateGoogleBackup() + func createTonAccount() } protocol OnboardingMainInteractorOutputProtocol: AnyObject { func didSuggestKeystoreImport() func didReceiveBackupAccounts(result: Result<[OpenBackupAccount], Error>) func didReceiveFeatureToggleConfig(result: Result?) + func didCompleteConfirmation() + func didReceive(error: Error) } protocol OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? - static func createViewForAdding() -> OnboardingMainViewProtocol? + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 92fdf98db3..a2328b5836 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -2,93 +2,117 @@ import UIKit import SoraUI import SoraFoundation -final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { - var presenter: OnboardingMainPresenterProtocol! - - @IBOutlet private var termsLabel: UILabel! - @IBOutlet private var signUpButton: TriangularedButton! - @IBOutlet private var restoreButton: TriangularedButton! - @IBOutlet private var logoView: UIImageView! - @IBOutlet var preInstalledButton: TriangularedButton! +final class OnboardingMainViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = OnboardingMainViewLayout - @IBOutlet private var restoreBottomConstraint: NSLayoutConstraint! - @IBOutlet private var restoreWidthConstraint: NSLayoutConstraint! - @IBOutlet private var signupWidthConstraint: NSLayoutConstraint! - - @IBOutlet private var termsBottomConstraint: NSLayoutConstraint! + var presenter: OnboardingMainPresenterProtocol! - var localizationManager: LocalizationManagerProtocol? + private let ecosystem: AccountCreateEcosystem? + private var shouldDismiss: Bool + init(ecosystem: AccountCreateEcosystem?) { + self.ecosystem = ecosystem + self.shouldDismiss = ecosystem != nil + super.init(nibName: nil, bundle: nil) + } - var termDecorator: AttributedStringDecoratorProtocol? + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } - // MARK: Appearance + override func loadView() { + view = OnboardingMainViewLayout() + } override func viewDidLoad() { super.viewDidLoad() - - setupLocalization() - configureLogoView() - configureTermsLabel() - adjustLayout() - presenter.setup() + rootView.preInstalledButton.isHidden = true + bindActions() + setupGestureRecognizer() - preInstalledButton.isHidden = true - } - - private func configureTermsLabel() { - if let attributedText = termsLabel.attributedText { - termsLabel.attributedText = termDecorator?.decorate(attributedString: attributedText) + if let ecosystem { + ecosystemHasBeenSelected() + presenter.didSelect(ecosystem: ecosystem) } } - private func configureLogoView() { - logoView.tintColor = R.color.colorWhite()! - } - - private func setupLocalization() { - signUpButton.imageWithTitleView?.title = R.string.localizable - .usernameSetupTitle20(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - restoreButton.imageWithTitleView?.title = R.string.localizable - .onboardingRestoreWallet(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() - let text = NSAttributedString(string: R.string.localizable - .onboardingTermsAndConditions1(preferredLanguages: localizationManager?.selectedLocale.rLanguages)) - termsLabel.attributedText = text - } - - private func adjustLayout() { - if isAdaptiveHeightDecreased { - restoreBottomConstraint.constant *= designScaleRatio.height - termsBottomConstraint.constant *= designScaleRatio.height + private func bindActions() { + rootView.selectRegularBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .regular) + self.ecosystemHasBeenSelected() + } + rootView.selectRegularBannerView.addTapGestureRecognizer { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .regular) + self.ecosystemHasBeenSelected() + } + rootView.selectTonBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .ton) + self.ecosystemHasBeenSelected() + } + rootView.selectTonBannerView.addTapGestureRecognizer { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .ton) + self.ecosystemHasBeenSelected() } - if isAdaptiveWidthDecreased { - restoreWidthConstraint.constant *= designScaleRatio.width - signupWidthConstraint.constant *= designScaleRatio.width + rootView.signUpButton.addAction { [weak self] in + self?.presenter.activateSignup() + } + rootView.restoreButton.addAction { [weak self] in + self?.presenter.activateAccountRestore() + } + rootView.preInstalledButton.addAction { [weak self] in + self?.presenter.didTapGetPreinstalled() + } + rootView.backButton.addAction { [weak self] in + if self?.shouldDismiss == true { + self?.presenter.dismiss() + } + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.bannerContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 0 + self?.rootView.bannerContainer.alpha = 1 + } completion: { [weak self] _ in + self?.rootView.buttonContainer.isHidden = true + self?.rootView.backButton.isHidden = true + } } } - // MARK: Action - - @IBAction private func actionSignup(sender _: AnyObject) { - presenter.activateSignup() - } + private func setupGestureRecognizer() { + let gesture = UITapGestureRecognizer() + rootView.termsLabel.addGestureRecognizer(gesture) - @IBAction private func actionRestoreAccess(sender _: AnyObject) { - presenter.activateAccountRestore() + gesture.addTarget(self, action: #selector(actionTerms(gestureRecognizer: ))) } - @IBAction func actionPreinstalled() { - presenter.didTapGetPreinstalled() + private func ecosystemHasBeenSelected() { + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.buttonContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 1 + self?.rootView.bannerContainer.alpha = 0 + } completion: { [weak self] _ in + self?.rootView.bannerContainer.isHidden = true + self?.rootView.backButton.isHidden = false + } } - @IBAction private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { + @objc private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { if gestureRecognizer.state == .ended { - let location = gestureRecognizer.location(in: termsLabel.superview) + let location = gestureRecognizer.location(in: rootView.termsLabel.superview) - if location.x < termsLabel.center.x { + if location.x < rootView.termsLabel.center.x { presenter.activateTerms() } else { presenter.activatePrivacy() @@ -99,6 +123,13 @@ final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { extension OnboardingMainViewController: OnboardingMainViewProtocol { func didReceive(preinstalledWalletEnabled: Bool) { - preInstalledButton.isHidden = !preinstalledWalletEnabled + rootView.preInstalledButton.isHidden = !preinstalledWalletEnabled + } +} + +// MARK: - Localizable +extension OnboardingMainViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale } } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index f806265898..a2e2d5e612 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -7,21 +7,22 @@ import SSFNetwork final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? { let wireframe = OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } - static func createViewForAdding() -> OnboardingMainViewProtocol? { + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? { let wireframe = AddAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? { let wireframe = SwitchAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } private static func createView( - for wireframe: OnboardingMainWireframeProtocol + for wireframe: OnboardingMainWireframeProtocol, + ecosystem: AccountCreateEcosystem? ) -> OnboardingMainViewProtocol? { guard let kestoreImportService: KeystoreImportServiceProtocol = URLHandlingService.shared.findService() @@ -41,9 +42,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let localizationManager = LocalizationManager.shared - let view = OnboardingMainViewController(nib: R.nib.onbordingMain) - view.termDecorator = CompoundAttributedStringDecorator.legal(for: locale) - view.localizationManager = localizationManager + let view = OnboardingMainViewController(ecosystem: ecosystem) let appVersionObserver = AppVersionObserver( operationManager: OperationManagerFacade.sharedManager, @@ -58,14 +57,19 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let featureToggleProvider = FeatureToggleProvider( networkOperationFactory: NetworkOperationFactory(jsonDecoder: GithubJSONDecoder()), - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + settingsManager: SettingsManager.shared, + eventCenter: EventCenter.shared ) let interactor = OnboardingMainInteractor( keystoreImportService: kestoreImportService, cloudStorage: cloudStorage, featureToggleService: featureToggleProvider, - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + accountOperationFactory: MetaAccountOperationFactory(keystore: Keychain()), + settings: SelectedWalletSettings.shared, + eventCenter: ServiceAssembly.shared.eventCenter ) let presenter = OnboardingMainPresenter( @@ -80,6 +84,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { presenter.view = view interactor.presenter = presenter + view.localizationManager = localizationManager return view } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift new file mode 100644 index 0000000000..5539e1814a --- /dev/null +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift @@ -0,0 +1,153 @@ +import Foundation +import UIKit + +final class OnboardingMainViewLayout: UIView { + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + let backButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconBack(), for: .normal) + button.backgroundColor = .clear + button.isHidden = true + return button + }() + + let logoView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.logo() + imageView.tintColor = R.color.colorWhite() + return imageView + }() + + let termsLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.isUserInteractionEnabled = true + return label + }() + + let buttonContainer = UIFactory.default.createVerticalStackView(spacing: 8) + + let signUpButton: TriangularedButton = { + let button = TriangularedButton() + button.applyEnabledStyle() + return button + }() + + let restoreButton: TriangularedButton = { + let button = TriangularedButton() + button.applyAccessoryStyle() + return button + }() + + let preInstalledButton: TriangularedButton = { + let button = TriangularedButton() + return button + }() + + let bannerContainer = UIFactory.default.createVerticalStackView(spacing: 12) + let selectRegularBannerView = SelectEcosystemBannerView(ecosystem: .regular) + let selectTonBannerView = SelectEcosystemBannerView(ecosystem: .ton) + + lazy var termDecorator = CompoundAttributedStringDecorator.legal(for: locale) + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + buttonContainer.isHidden = true + buttonContainer.alpha = 0 + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func configureTermsLabel() { + if let attributedText = termsLabel.attributedText { + termsLabel.attributedText = termDecorator.decorate(attributedString: attributedText) + } + } + + private func applyLocale() { + signUpButton.imageWithTitleView?.title = R.string.localizable + .usernameSetupTitle20(preferredLanguages: locale.rLanguages) + restoreButton.imageWithTitleView?.title = R.string.localizable + .onboardingRestoreWallet(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() + let text = NSAttributedString(string: R.string.localizable + .onboardingTermsAndConditions1(preferredLanguages: locale.rLanguages)) + termsLabel.attributedText = text + + selectRegularBannerView.titleLabel.text = R.string.localizable.onboardingBannerRegularEcosystemTitle(preferredLanguages: locale.rLanguages) + selectRegularBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerRegularEcosystemButtonTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.titleLabel.text = R.string.localizable.onboardingBannerTonEcosystemTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerTonEcosystemButtonTitle(preferredLanguages: locale.rLanguages) + + configureTermsLabel() + } + + private func setupLayout() { + addSubview(backgroundImageView) + addSubview(backButton) + addSubview(logoView) + addSubview(termsLabel) + addSubview(buttonContainer) + addSubview(bannerContainer) + buttonContainer.addArrangedSubview(signUpButton) + buttonContainer.addArrangedSubview(restoreButton) + buttonContainer.addArrangedSubview(preInstalledButton) + bannerContainer.addArrangedSubview(selectRegularBannerView) + bannerContainer.addArrangedSubview(selectTonBannerView) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + backButton.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide).offset(10) + make.leading.equalToSuperview().offset(16) + make.size.equalTo(44) + } + logoView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(149).priority(.low) + make.centerX.equalToSuperview() + } + buttonContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + bannerContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + termsLabel.snp.makeConstraints { make in + make.top.equalTo(bannerContainer.snp.bottom).offset(24) + make.top.equalTo(buttonContainer.snp.bottom).offset(24) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + + [signUpButton, restoreButton, preInstalledButton].forEach { view in + view.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + } +} diff --git a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift index af657359a0..a6e7ad35c5 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift @@ -2,8 +2,18 @@ import Foundation import SSFCloudStorage final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding() else { + lazy var rootAnimator: RootControllerAnimationCoordinatorProtocol = RootControllerAnimationCoordinator() + + func didCompleteCreate(from view: ControllerBackedProtocol?) { + guard let pincodeViewController = PinViewFactory.createPinSetupView()?.controller else { + return + } + + rootAnimator.animateTransition(to: pincodeViewController) + } + + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding(ecosystem: ecosystem) else { return } @@ -14,10 +24,11 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForOnboarding(defaultSource: defaultSource)?.controller + .createViewForOnboarding(defaultSource: defaultSource, flow: flow)?.controller else { return } @@ -32,7 +43,7 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { let navigationController = view?.controller.navigationController, navigationController.viewControllers.count == 1, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .keystore, from: view) + showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift b/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift index 438ff2c76f..a488a37b76 100644 --- a/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift +++ b/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift @@ -17,7 +17,7 @@ extension PinChangeInteractor: PinSetupInteractorInputProtocol { pin, for: KeystoreTag.pincode.rawValue, completionQueue: DispatchQueue.main - ) { [weak self] (_) -> Void in + ) { [weak self] (_) in self?.presenter?.didSavePin() } } diff --git a/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift b/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift index 5cc6980843..f6702904ae 100644 --- a/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift +++ b/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift @@ -72,14 +72,14 @@ extension CheckPincodeViewController: PinSetupViewProtocol { let useAction = UIAlertAction( title: R.string.localizable.commonUse(preferredLanguages: languages), style: .default - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(true) } let skipAction = UIAlertAction( title: R.string.localizable.commonSkip(preferredLanguages: languages), style: .cancel - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(false) } diff --git a/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift b/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift index 33a1d00141..04d0e30ddb 100644 --- a/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift +++ b/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift @@ -58,7 +58,7 @@ class LocalAuthInteractor { biometryAuth.authenticate( localizedReason: R.string.localizable.askBiometryReason(preferredLanguages: locale.rLanguages), completionQueue: .global(qos: .userInteractive) - ) { [weak self] (result: Bool) -> Void in + ) { [weak self] (result: Bool) in self?.processBiometryAuth(result: result) } @@ -130,7 +130,7 @@ extension LocalAuthInteractor: LocalAuthInteractorInputProtocol { secretManager.loadSecret( for: KeystoreTag.pincode.rawValue, completionQueue: .global(qos: .userInteractive) - ) { [weak self] (secret: SecretDataRepresentable?) -> Void in + ) { [weak self] (secret: SecretDataRepresentable?) in self?.processStored(pin: secret?.toUTF8String()) } } diff --git a/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift b/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift index 97882f9eda..80c33b9c9d 100644 --- a/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift +++ b/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift @@ -48,7 +48,7 @@ class PinSetupInteractor { private func handleTouchId() { state = .waitingBiometrics - presenter?.didStartWaitingBiometryDecision(type: .touchId) { [weak self] (result: Bool) -> Void in + presenter?.didStartWaitingBiometryDecision(type: .touchId) { [weak self] (result: Bool) in self?.processResponseForBiometrics(result: result) } } @@ -80,7 +80,7 @@ class PinSetupInteractor { currentPincode, for: KeystoreTag.pincode.rawValue, completionQueue: DispatchQueue.main - ) { [weak self] _ -> Void in + ) { [weak self] _ in self?.completeSetup() } } diff --git a/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift b/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift index 6ea4855124..b21036bd19 100644 --- a/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift +++ b/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift @@ -222,14 +222,14 @@ extension PinSetupViewController: PinSetupViewProtocol { let useAction = UIAlertAction( title: R.string.localizable.commonUse(preferredLanguages: languages), style: .default - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(true) } let skipAction = UIAlertAction( title: R.string.localizable.commonSkip(preferredLanguages: languages), style: .cancel - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(false) } diff --git a/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift b/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift index df369eb95f..93fb4218ec 100644 --- a/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift +++ b/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift @@ -57,15 +57,13 @@ final class PolkaswapAdjustmentViewModelFactory: PolkaswapAdjustmentViewModelFac } private let assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol - private let xorChainAsset: ChainAsset private var wallet: MetaAccountModel + init( wallet: MetaAccountModel, - xorChainAsset: ChainAsset, assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol ) { self.wallet = wallet - self.xorChainAsset = xorChainAsset self.assetBalanceFormatterFactory = assetBalanceFormatterFactory } @@ -219,21 +217,6 @@ final class PolkaswapAdjustmentViewModelFactory: PolkaswapAdjustmentViewModelFac return (receiveValue, minMaxValue) } - private func createLiqitityProviderFeeViewMode( - lpAmount: Decimal, - locale: Locale - ) -> BalanceViewModelProtocol { - let balanceViewModelFactory = createBalanceViewModelFactory(for: xorChainAsset) - let lpViewModel = balanceViewModelFactory.balanceFromPrice( - lpAmount, - priceData: xorChainAsset.asset.getPrice(for: wallet.selectedCurrency), - isApproximately: true, - usageCase: .detailsCrypto - ).value(for: locale) - - return lpViewModel - } - private func createSwapRoute( dexId: UInt32, swapToChainAsset: ChainAsset, diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift index 898657b251..6c2aa5e6f6 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift @@ -14,10 +14,8 @@ final class PolkaswapAdjustmentAssembly { let chainRegistry = ChainRegistryFacade.sharedRegistry guard - let xorChainAsset = chainRegistry.getChain(for: Chain.soraMain.genesisHash)?.utilityChainAssets().first, - let connection = chainRegistry.getConnection(for: xorChainAsset.chain.chainId), - let accountResponse = wallet.fetch(for: xorChainAsset.chain.accountRequest()), - let runtimeService = chainRegistry.getRuntimeProvider(for: xorChainAsset.chain.chainId) + let connection = chainRegistry.getConnection(for: Chain.soraMain.genesisHash), + let runtimeService = chainRegistry.getRuntimeProvider(for: Chain.soraMain.genesisHash) else { return nil } @@ -39,7 +37,7 @@ final class PolkaswapAdjustmentAssembly { let operationFactory = PolkaswapOperationFactory( storageRequestFactory: storageOperationFactory, chainRegistry: chainRegistry, - chainId: xorChainAsset.chain.chainId + chainId: Chain.soraMain.genesisHash ) let logger = Logger.shared @@ -48,15 +46,6 @@ final class PolkaswapAdjustmentAssembly { logger: logger ) - let extrinsicService = ExtrinsicService( - accountId: accountResponse.accountId, - chainFormat: xorChainAsset.chain.chainFormat, - cryptoType: accountResponse.cryptoType, - runtimeRegistry: runtimeService, - engine: connection, - operationManager: operationManager - ) - let mapper = PolkaswapSettingMapper() let settingsRepository: CoreDataRepository = repositoryFacade.createRepository( @@ -68,29 +57,27 @@ final class PolkaswapAdjustmentAssembly { let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) let interactor = PolkaswapAdjustmentInteractor( - xorChainAsset: xorChainAsset, + wallet: wallet, subscriptionService: subscriptionService, accountInfoSubscriptionAdapter: accountInfoSubscriptionAdapter, feeProxy: ExtrinsicFeeProxy(), settingsRepository: AnyDataProviderRepository(settingsRepository), - extrinsicService: extrinsicService, operationFactory: operationFactory, operationManager: operationManager, userDefaultsStorage: SettingsManager.shared, - callFactory: callFactory + callFactory: callFactory, + chainModelRepo: ServiceAssembly.shared.asyncChainModelRepository() ) let router = PolkaswapAdjustmentRouter() let viewModelFactory = PolkaswapAdjustmentViewModelFactory( wallet: wallet, - xorChainAsset: xorChainAsset, assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) let dataValidatingFactory = SendDataValidatingFactory(presentable: router) let presenter = PolkaswapAdjustmentPresenter( wallet: wallet, - xorChainAsset: xorChainAsset, swapChainAsset: chainAsset, viewModelFactory: viewModelFactory, dataValidatingFactory: dataValidatingFactory, diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift index d2d602afd6..b22d7b7785 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift @@ -14,10 +14,11 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { private let subscriptionService: PolkaswapRemoteSubscriptionServiceProtocol private let settingsRepository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private let xorChainAsset: ChainAsset - private let extrinsicService: ExtrinsicServiceProtocol + private var xorChainAsset: ChainAsset? private let userDefaultsStorage: SettingsManagerProtocol private let callFactory: SubstrateCallFactoryProtocol + private let chainModelRepo: AsyncAnyRepository + private let wallet: MetaAccountModel private var dexIds: [UInt32] = [] private var swapValues: [SwapValues] = [] @@ -26,27 +27,27 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { private var dexInfos: [PolkaswapDexInfo] = [] init( - xorChainAsset: ChainAsset, + wallet: MetaAccountModel, subscriptionService: PolkaswapRemoteSubscriptionServiceProtocol, accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, feeProxy: ExtrinsicFeeProxyProtocol, settingsRepository: AnyDataProviderRepository, - extrinsicService: ExtrinsicServiceProtocol, operationFactory: PolkaswapOperationFactoryProtocol, operationManager: OperationManagerProtocol, userDefaultsStorage: SettingsManagerProtocol, - callFactory: SubstrateCallFactoryProtocol + callFactory: SubstrateCallFactoryProtocol, + chainModelRepo: AsyncAnyRepository ) { - self.xorChainAsset = xorChainAsset + self.wallet = wallet self.subscriptionService = subscriptionService self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter self.feeProxy = feeProxy self.settingsRepository = settingsRepository - self.extrinsicService = extrinsicService self.operationFactory = operationFactory self.operationManager = operationManager self.userDefaultsStorage = userDefaultsStorage self.callFactory = callFactory + self.chainModelRepo = chainModelRepo } // MARK: - Private methods @@ -130,6 +131,26 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { operationManager.enqueue(operations: [operation], in: .transient) } + + private func createExtrinsicService() async throws -> ExtrinsicServiceProtocol? { + let chainRegistry = ChainRegistryFacade.sharedRegistry + guard + let chain = try await chainModelRepo.fetch(by: Chain.soraMain.genesisHash), + let accountResponse = wallet.fetch(for: chain.accountRequest()), + let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId), + let connection = chainRegistry.getConnection(for: chain.chainId) + else { + return nil + } + return ExtrinsicService( + accountId: accountResponse.accountId, + chainFormat: chain.chainFormat, + cryptoType: accountResponse.cryptoType, + runtimeRegistry: runtimeService, + engine: connection, + operationManager: operationManager + ) + } } // MARK: - PolkaswapAdjustmentInteractorInput @@ -140,6 +161,14 @@ extension PolkaswapAdjustmentInteractor: PolkaswapAdjustmentInteractorInput { feeProxy.delegate = self fetchPolkaswapSettings() fetchDisclaimerVisible() + Task { [weak self] in + guard let self else { return } + let xorChainModel = try await chainModelRepo.fetch(by: Chain.soraMain.genesisHash) + if let utilityChainAsset = xorChainModel?.utilityChainAssets().first { + self.xorChainAsset = utilityChainAsset + self.output?.didReceive(xorChainAsset: utilityChainAsset) + } + } } func didReceive(_ fromChainAsset: ChainAsset?, _ toChainAsset: ChainAsset?) { @@ -243,11 +272,16 @@ extension PolkaswapAdjustmentInteractor: PolkaswapAdjustmentInteractorInput { liquiditySourceType.rawValue ].joined() - feeProxy.estimateFee( - using: extrinsicService, - reuseIdentifier: reuseIdentifier, - setupBy: builderClosure - ) + Task { + guard let extrinsicService = try await createExtrinsicService() else { + return + } + feeProxy.estimateFee( + using: extrinsicService, + reuseIdentifier: reuseIdentifier, + setupBy: builderClosure + ) + } } func fetchDisclaimerVisible() { diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index ccec5c0670..533c59c8d8 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -29,7 +29,7 @@ final class PolkaswapAdjustmentPresenter { private let logger: LoggerProtocol private var polkaswapRemoteSettings: PolkaswapRemoteSettings? - private let xorChainAsset: ChainAsset + private var xorChainAsset: ChainAsset? private var swapVariant: SwapVariant = .desiredInput private var swapFromChainAsset: ChainAsset? private var swapToChainAsset: ChainAsset? @@ -70,7 +70,6 @@ final class PolkaswapAdjustmentPresenter { init( wallet: MetaAccountModel, - xorChainAsset: ChainAsset, swapChainAsset: ChainAsset?, viewModelFactory: PolkaswapAdjustmentViewModelFactoryProtocol, dataValidatingFactory: SendDataValidatingFactory, @@ -81,7 +80,6 @@ final class PolkaswapAdjustmentPresenter { localizationManager: LocalizationManagerProtocol ) { self.wallet = wallet - self.xorChainAsset = xorChainAsset self.viewModelFactory = viewModelFactory self.dataValidatingFactory = dataValidatingFactory self.logger = logger @@ -360,7 +358,7 @@ final class PolkaswapAdjustmentPresenter { } private func provideFeeViewModel() { - guard let swapFromFee = networkFee else { + guard let swapFromFee = networkFee, let xorChainAsset else { return } let balanceViewModelFactory = viewModelFactory @@ -403,7 +401,8 @@ final class PolkaswapAdjustmentPresenter { let networkFeeViewModel = networkFeeViewModel, let detailsViewModel = detailsViewModel, let fromAmount = swapFromInputResult?.absoluteValue(from: swapFromBalance ?? .zero), - let toAmount = swapToInputResult?.absoluteValue(from: swapToBalance ?? .zero) + let toAmount = swapToInputResult?.absoluteValue(from: swapToBalance ?? .zero), + let xorChainAsset else { return nil } @@ -443,7 +442,7 @@ final class PolkaswapAdjustmentPresenter { contextTag = InputTag.swapFrom.rawValue filterChainAsset = swapToChainAsset } - let showChainAssets = strongSelf.xorChainAsset.chain.chainAssets + let showChainAssets = strongSelf.xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != filterChainAsset?.chainAssetId } strongSelf.router.showSelectAsset( from: strongSelf.view, @@ -548,7 +547,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } func didTapSelectFromAsset() { - let showChainAssets = xorChainAsset.chain.chainAssets + let showChainAssets = xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != swapToChainAsset?.chainAssetId } router.showSelectAsset( from: view, @@ -561,7 +560,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } func didTapSelectToAsset() { - let showChainAssets = xorChainAsset.chain.chainAssets + let showChainAssets = xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != swapFromChainAsset?.chainAssetId } router.showSelectAsset( from: view, @@ -682,7 +681,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } // if don't have XOR balance for fee payment, fee will be payment from receive amount - if xorBalance.or(.zero) < networkFee, swapToChainAsset?.identifier == xorChainAsset.identifier { + if xorBalance.or(.zero) < networkFee, swapToChainAsset?.identifier == xorChainAsset?.identifier { if params.toAmount <= networkFee { presentAddMoreAmountAlert() return @@ -699,7 +698,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } var feeAndTip: Decimal = .zero - if swapFromChainAsset?.identifier == xorChainAsset.identifier { + if swapFromChainAsset?.identifier == xorChainAsset?.identifier { feeAndTip = networkFee } @@ -710,7 +709,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { dataValidatingFactory.canPayFeeAndAmount( balanceType: .utility(balance: xorBalance), feeAndTip: networkFee, - sendAmount: .zero, + sendAmount: nil, locale: selectedLocale ), dataValidatingFactory.canPayFeeAndAmount( @@ -738,6 +737,12 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { // MARK: - PolkaswapAdjustmentInteractorOutput extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentInteractorOutput { + func didReceive(xorChainAsset: SSFModels.ChainAsset) { + self.xorChainAsset = xorChainAsset + provideFromAssetVewModel() + provideToAssetVewModel() + } + func didReceive(error: Error) { logger.error("\(error)") } @@ -782,6 +787,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentInteractorOutput { switch result { case let .success(info): guard let feeValue = BigUInt(info.fee), + let xorChainAsset, let fee = Decimal.fromSubstrateAmount( feeValue, precision: Int16(xorChainAsset.asset.precision) @@ -958,7 +964,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapTransaktionSettingsModuleOutput // MARK: - BannersModuleOutput extension PolkaswapAdjustmentPresenter: BannersModuleOutput { - func reloadBannersView() {} + func reloadBannersView(bannersCount: Int) {} func didTapCloseBanners() { DispatchQueue.main.async { [weak self] in diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift index 9324791964..3d697ccabf 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift @@ -64,6 +64,7 @@ protocol PolkaswapAdjustmentInteractorOutput: AnyObject { func didReceiveSettings(settings: PolkaswapRemoteSettings?) func updateQuotes() func didReceiveDisclaimer(isRead: Bool) + func didReceive(xorChainAsset: ChainAsset) } protocol PolkaswapAdjustmentRouterInput: PresentDismissable, ErrorPresentable, SheetAlertPresentable, BaseErrorPresentable { diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift b/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift index 131620a675..21e1bb4362 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels typealias PolkaswapSwapConfirmationModuleCreationResult = ( diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index e8f9d778e7..089d413f10 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -21,6 +21,7 @@ final class ProfileInteractor { private let walletRepository: AnyDataProviderRepository private let chainsIssuesCenter: ChainsIssuesCenterProtocol private let walletConnectDisconnectService: WalletConnectDisconnectService + private let tonConnectService: TonConnectService private lazy var currentCurrency: Currency? = { selectedMetaAccount.selectedCurrency @@ -37,7 +38,8 @@ final class ProfileInteractor { walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, walletRepository: AnyDataProviderRepository, chainsIssuesCenter: ChainsIssuesCenterProtocol, - walletConnectDisconnectService: WalletConnectDisconnectService + walletConnectDisconnectService: WalletConnectDisconnectService, + tonConnectService: TonConnectService ) { self.selectedWalletSettings = selectedWalletSettings self.eventCenter = eventCenter @@ -48,6 +50,7 @@ final class ProfileInteractor { self.walletRepository = walletRepository self.chainsIssuesCenter = chainsIssuesCenter self.walletConnectDisconnectService = walletConnectDisconnectService + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -105,6 +108,9 @@ extension ProfileInteractor: ProfileInteractorInputProtocol { let operation = repository.deleteAllOperation() operation.completionBlock = { [weak self] in self?.walletConnectDisconnectService.disconnectAllSessions() + Task { [weak self] in + await self?.tonConnectService.disconnectAll() + } completion() } operationQueue.addOperation(operation) @@ -130,6 +136,14 @@ extension ProfileInteractor: EventVisitorProtocol { func processWalletNameChanged(event: WalletNameChanged) { updateWallet(event.wallet) } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + provideUserSettings() + } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + provideUserSettings() + } } extension ProfileInteractor: WalletBalanceSubscriptionListener { @@ -146,9 +160,10 @@ extension ProfileInteractor: ChainsIssuesCenterListener { func handleChainsIssues(_ issues: [ChainIssue]) { let missingAccountIssues = issues.filter { issue in switch issue { - case .missingAccount: - return true - default: return false + case let .missingAccount(chains): + return chains.filter { !$0.ecosystem.isTon }.count > 0 + default: + return false } } presenter?.didReceiveMissingAccount(issues: missingAccountIssues) diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index b50e4092ef..b2b9f105a8 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -63,6 +63,10 @@ final class ProfilePresenter { } extension ProfilePresenter: ProfilePresenterProtocol { + func openDebugMenu() { + wireframe.openDebugMenu(from: view) + } + func didLoad(view: ProfileViewProtocol) { self.view = view interactor.setup(with: self) @@ -72,7 +76,12 @@ extension ProfilePresenter: ProfilePresenterProtocol { guard let wallet = selectedWallet else { return } - wireframe.showAccountDetails(from: view, metaAccount: wallet) + switch wallet.ecosystem { + case .regular: + wireframe.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } } func activateOption(_ option: ProfileOption) { @@ -220,12 +229,15 @@ extension ProfilePresenter: Localizable { } extension ProfilePresenter: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { if selectedCurrency != event.account.selectedCurrency { selectedWallet = event.account let currency = event.account.selectedCurrency interactor.update(currency: currency) } + } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { selectedWallet = event.account } } diff --git a/fearless/Modules/Profile/ProfileProtocol.swift b/fearless/Modules/Profile/ProfileProtocol.swift index ab6697f93e..dee7fbb6f9 100644 --- a/fearless/Modules/Profile/ProfileProtocol.swift +++ b/fearless/Modules/Profile/ProfileProtocol.swift @@ -12,6 +12,7 @@ protocol ProfilePresenterProtocol: AnyObject { func logout() func switcherValueChanged(isOn: Bool, index: Int) func didTapAccountScore(address: String?) + func openDebugMenu() } protocol ProfileInteractorInputProtocol: AnyObject { @@ -55,6 +56,7 @@ protocol ProfileWireframeProtocol: ErrorPresentable, func close(view: ControllerBackedProtocol?) func showPolkaswapDisclaimer(from view: ControllerBackedProtocol?) func showWalletConnect(from view: ControllerBackedProtocol?) + func openDebugMenu(from view: ControllerBackedProtocol?) } protocol ProfileViewFactoryProtocol: AnyObject { diff --git a/fearless/Modules/Profile/ProfileViewController.swift b/fearless/Modules/Profile/ProfileViewController.swift index f2a1d4f34d..ff963fb3c8 100644 --- a/fearless/Modules/Profile/ProfileViewController.swift +++ b/fearless/Modules/Profile/ProfileViewController.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import SSFUtils +import SSFModels final class ProfileViewController: UIViewController, ViewHolder { typealias RootViewType = ProfileViewLayout @@ -69,6 +70,10 @@ final class ProfileViewController: UIViewController, ViewHolder { presenter.switcherValueChanged(isOn: sender.isOn, index: sender.tag) } + @objc func debugMenu(tapGesture: UITapGestureRecognizer) { + presenter.openDebugMenu() + } + // MARK: - tableView private func prepareProfileSectionCell( @@ -81,7 +86,9 @@ final class ProfileViewController: UIViewController, ViewHolder { ) { let locale = localizationManager?.selectedLocale cell.titleLabel.text = R.string.localizable.profileTitle(preferredLanguages: locale?.rLanguages) - + let tap = UITapGestureRecognizer(target: self, action: #selector(debugMenu)) + tap.numberOfTapsRequired = 5 + cell.titleLabel.addGestureRecognizer(tap) return cell } else { assertionFailure("Profile section cell creation failed") @@ -91,11 +98,17 @@ final class ProfileViewController: UIViewController, ViewHolder { private func prepareProfileDetailsCell( _ tableView: UITableView, - with viewModel: WalletsManagmentCellViewModel + with viewModel: WalletsManagmentCellViewModel, + walletEcosystem: WalletEcosystem ) -> UITableViewCell { if let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) { cell.bind(to: viewModel) - cell.delegate = self + switch walletEcosystem { + case .regular: + cell.delegate = self + case .ton: + break + } return cell } else { assertionFailure("Profile details cell creation failed") @@ -179,7 +192,7 @@ extension ProfileViewController: UITableViewDataSource { case 0: return prepareProfileSectionCell(tableView, indexPath: indexPath) case 1: - return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel) + return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel, walletEcosystem: viewModel.wallet.ecosystem) default: let optionViewModel = viewModel.profileOptionViewModel[indexPath.row - 2] return prepareProfileCell(tableView, indexPath: indexPath, with: optionViewModel) diff --git a/fearless/Modules/Profile/ProfileViewFactory.swift b/fearless/Modules/Profile/ProfileViewFactory.swift index 4529d1b0f1..665d6c5f54 100644 --- a/fearless/Modules/Profile/ProfileViewFactory.swift +++ b/fearless/Modules/Profile/ProfileViewFactory.swift @@ -84,7 +84,8 @@ final class ProfileViewFactory: ProfileViewFactoryProtocol { walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, walletRepository: accountRepository, chainsIssuesCenter: chainsIssuesCenter, - walletConnectDisconnectService: walletConnectDisconnectService + walletConnectDisconnectService: walletConnectDisconnectService, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let presenter = ProfilePresenter( diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 7e1f5121f5..8801990146 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable { lazy var rootAnimator: RootControllerAnimationCoordinatorProtocol = RootControllerAnimationCoordinator() @@ -8,9 +9,11 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable from view: ProfileViewProtocol?, metaAccount: MetaAccountModel ) { - let walletDetails = WalletDetailsViewFactory.createView(flow: .normal(wallet: metaAccount)) + guard let walletDetails = ConnectedAccountsAssembly.configureModule(wallet: metaAccount) else { + return + } let navigationController = FearlessNavigationController( - rootViewController: walletDetails.controller + rootViewController: walletDetails.view.controller ) view?.controller.present(navigationController, animated: true) } @@ -115,6 +118,15 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable view?.controller.present(navigation, animated: true) } + func openDebugMenu(from view: (any ControllerBackedProtocol)?) { + let module = FeatureToggleListAssembly.configureModule() + guard let controller = module?.view.controller else { + return + } + let navigation = FearlessNavigationController(rootViewController: controller) + view?.controller.present(navigation, animated: true) + } + // MARK: Private private func showPinSetup(from view: ProfileViewProtocol?) { diff --git a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib index 84d2dce50f..516a6b407f 100644 --- a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib +++ b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib @@ -1,9 +1,9 @@ - + - + @@ -22,8 +22,8 @@ -