diff --git a/README.md b/README.md
index 86f73fa1fe9425c34f3b12b14363e0ac507c8c27..ad22d44b0748e65878371882473b15129f6f4882 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,29 @@ npm run start
   npm run android:assemble:prod
   ```
 
+### Build for iOS
+
+- Requirements
+
+Install CocoaPods (required [Homebrew](https://brew.sh/fr)):
+
+  ```bash
+  brew install cocoapods
+  ```
+
+- Init the ios project:
+
+  ```bash
+  npm run ios:init
+  npm run ios:sync  # or `ionic capacitor sync ios`
+  ```
+
+- Compile from XCode:
+  - Build the iOS from command line previously `npm run ios:build`
+  - Open the iOS project at `<cesium2s-root>/ios/App`
+  - Open the App.xcworkspace file
+  - Run !
+
 ## More documentation
 
 You will find more devloper documentation in [doc/](https://git.duniter.org/clients/cesium-grp/cesium2s/-/tree/master/doc) directory.
diff --git a/ios/.gitignore b/ios/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f47029973b442a32c7ce8a83195f29d70661f124
--- /dev/null
+++ b/ios/.gitignore
@@ -0,0 +1,13 @@
+App/build
+App/Pods
+App/output
+App/App/public
+DerivedData
+xcuserdata
+
+# Cordova plugins for Capacitor
+capacitor-cordova-ios-plugins
+
+# Generated Config files
+App/App/capacitor.config.json
+App/App/config.xml
diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000000000000000000000000000000000..8e332b95ed4fc884815c063f6356fbcba4b8f5ae
--- /dev/null
+++ b/ios/App/App.xcodeproj/project.pbxproj
@@ -0,0 +1,416 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 48;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
+		50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
+		504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
+		504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
+		504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
+		504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
+		50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
+		8ACFFF51EF56B7EEDAE21BA7 /* Pods_Cesium_2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D89263E3FB205AFC4A916362 /* Pods_Cesium_2.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		0215FDDC743488CCE78A8992 /* Pods-Cesium 2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Cesium 2.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Cesium 2/Pods-Cesium 2.debug.xcconfig"; sourceTree = "<group>"; };
+		2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
+		50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
+		504EC3041FED79650016851F /* Cesium 2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Cesium 2.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; };
+		A8E37FAB29D400AD2804053F /* Pods-Cesium 2.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Cesium 2.release.xcconfig"; path = "Pods/Target Support Files/Pods-Cesium 2/Pods-Cesium 2.release.xcconfig"; sourceTree = "<group>"; };
+		AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; };
+		D89263E3FB205AFC4A916362 /* Pods_Cesium_2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Cesium_2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		504EC3011FED79650016851F /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8ACFFF51EF56B7EEDAE21BA7 /* Pods_Cesium_2.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				D89263E3FB205AFC4A916362 /* Pods_Cesium_2.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		504EC2FB1FED79650016851F = {
+			isa = PBXGroup;
+			children = (
+				504EC3061FED79650016851F /* App */,
+				504EC3051FED79650016851F /* Products */,
+				7F8756D8B27F46E3366F6CEA /* Pods */,
+				27E2DDA53C4D2A4D1A88CE4A /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		504EC3051FED79650016851F /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				504EC3041FED79650016851F /* Cesium 2.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		504EC3061FED79650016851F /* App */ = {
+			isa = PBXGroup;
+			children = (
+				50379B222058CBB4000EE86E /* capacitor.config.json */,
+				504EC3071FED79650016851F /* AppDelegate.swift */,
+				504EC30B1FED79650016851F /* Main.storyboard */,
+				504EC30E1FED79650016851F /* Assets.xcassets */,
+				504EC3101FED79650016851F /* LaunchScreen.storyboard */,
+				504EC3131FED79650016851F /* Info.plist */,
+				2FAD9762203C412B000D30F8 /* config.xml */,
+				50B271D01FEDC1A000F3C39B /* public */,
+			);
+			path = App;
+			sourceTree = "<group>";
+		};
+		7F8756D8B27F46E3366F6CEA /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */,
+				AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */,
+				0215FDDC743488CCE78A8992 /* Pods-Cesium 2.debug.xcconfig */,
+				A8E37FAB29D400AD2804053F /* Pods-Cesium 2.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		504EC3031FED79650016851F /* Cesium 2 */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "Cesium 2" */;
+			buildPhases = (
+				6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */,
+				504EC3001FED79650016851F /* Sources */,
+				504EC3011FED79650016851F /* Frameworks */,
+				504EC3021FED79650016851F /* Resources */,
+				9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Cesium 2";
+			productName = App;
+			productReference = 504EC3041FED79650016851F /* Cesium 2.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		504EC2FC1FED79650016851F /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastSwiftUpdateCheck = 0920;
+				LastUpgradeCheck = 0920;
+				TargetAttributes = {
+					504EC3031FED79650016851F = {
+						CreatedOnToolsVersion = 9.2;
+						LastSwiftMigration = 1100;
+						ProvisioningStyle = Automatic;
+					};
+				};
+			};
+			buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
+			compatibilityVersion = "Xcode 8.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 504EC2FB1FED79650016851F;
+			productRefGroup = 504EC3051FED79650016851F /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				504EC3031FED79650016851F /* Cesium 2 */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		504EC3021FED79650016851F /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
+				50B271D11FEDC1A000F3C39B /* public in Resources */,
+				504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
+				50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
+				504EC30D1FED79650016851F /* Main.storyboard in Resources */,
+				2FAD9763203C412B000D30F8 /* config.xml in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-Cesium 2-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;
+		};
+		9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Cesium 2/Pods-Cesium 2-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		504EC3001FED79650016851F /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		504EC30B1FED79650016851F /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				504EC30C1FED79650016851F /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				504EC3111FED79650016851F /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		504EC3141FED79650016851F /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Debug;
+		};
+		504EC3151FED79650016851F /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		504EC3171FED79650016851F /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 0215FDDC743488CCE78A8992 /* Pods-Cesium 2.debug.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = 3TH8P5JJ9J;
+				INFOPLIST_FILE = App/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MARKETING_VERSION = 1.0;
+				OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
+				PRODUCT_BUNDLE_IDENTIFIER = app.cesium;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		504EC3181FED79650016851F /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = A8E37FAB29D400AD2804053F /* Pods-Cesium 2.release.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = 3TH8P5JJ9J;
+				INFOPLIST_FILE = App/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = app.cesium;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				504EC3141FED79650016851F /* Debug */,
+				504EC3151FED79650016851F /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "Cesium 2" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				504EC3171FED79650016851F /* Debug */,
+				504EC3181FED79650016851F /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 504EC2FC1FED79650016851F /* Project object */;
+}
diff --git a/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000000000000000000000000000000..42daef8a10c8eeacd37880e912699e0990c5f4a6
--- /dev/null
+++ b/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:App.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/ios/App/App.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000000000000000000000000000000000..b301e824b3903452049f7866037c935418024b7b
--- /dev/null
+++ b/ios/App/App.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:App.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000000000000000000000000000000000000..18d981003d68d0546c4804ac2ff47dd97c6e7921
--- /dev/null
+++ b/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>
diff --git a/ios/App/App/AppDelegate.swift b/ios/App/App/AppDelegate.swift
new file mode 100644
index 0000000000000000000000000000000000000000..c3cd83b5c0a62be3fc56a7909aedc70ccf6a92c0
--- /dev/null
+++ b/ios/App/App/AppDelegate.swift
@@ -0,0 +1,49 @@
+import UIKit
+import Capacitor
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+    var window: UIWindow?
+
+    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+        // Override point for customization after application launch.
+        return true
+    }
+
+    func applicationWillResignActive(_ application: UIApplication) {
+        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
+    }
+
+    func applicationDidEnterBackground(_ application: UIApplication) {
+        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+    }
+
+    func applicationWillEnterForeground(_ application: UIApplication) {
+        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+    }
+
+    func applicationDidBecomeActive(_ application: UIApplication) {
+        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+    }
+
+    func applicationWillTerminate(_ application: UIApplication) {
+        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+    }
+
+    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
+        // Called when the app was launched with a url. Feel free to add additional processing here,
+        // but if you want the App API to support tracking app url opens, make sure to keep this call
+        return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
+    }
+
+    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
+        // Called when the app was launched with an activity, including Universal Links.
+        // Feel free to add additional processing here, but if you want the App API to support
+        // tracking app url opens, make sure to keep this call
+        return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
+    }
+
+}
diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..adf6ba01dbe256605c5152ac1fd78ae99aaa2a8d
Binary files /dev/null and b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..9b7d382dcecca887eac19d7f1c4c8dc57abe00e4
--- /dev/null
+++ b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,14 @@
+{
+  "images" : [
+    {
+      "filename" : "AppIcon-512@2x.png",
+      "idiom" : "universal",
+      "platform" : "ios",
+      "size" : "1024x1024"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/ios/App/App/Assets.xcassets/Contents.json b/ios/App/App/Assets.xcassets/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..da4a164c918651cdd1e11dca5cc62c333f097601
--- /dev/null
+++ b/ios/App/App/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
new file mode 100644
index 0000000000000000000000000000000000000000..d7d96a67c0d764a2ddfc9545441c627e6d5fa1fc
--- /dev/null
+++ b/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "splash-2732x2732-2.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "splash-2732x2732-1.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "splash-2732x2732.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..33ea6c970f2df1db62a624a55e5bbcc4ee07bbdf
Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png differ
diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..33ea6c970f2df1db62a624a55e5bbcc4ee07bbdf
Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png differ
diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
new file mode 100644
index 0000000000000000000000000000000000000000..33ea6c970f2df1db62a624a55e5bbcc4ee07bbdf
Binary files /dev/null and b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png differ
diff --git a/ios/App/App/Base.lproj/LaunchScreen.storyboard b/ios/App/App/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000000000000000000000000000000000000..e7ae5d7802c067edcd71596688fa7b059de8a262
--- /dev/null
+++ b/ios/App/App/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17132" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17105"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <imageView key="view" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Splash" id="snD-IY-ifK">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    </imageView>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="Splash" width="1366" height="1366"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>
diff --git a/ios/App/App/Base.lproj/Main.storyboard b/ios/App/App/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000000000000000000000000000000000..b44df7be8f82acfcd747fd8d77fcd7a87b788f6f
--- /dev/null
+++ b/ios/App/App/Base.lproj/Main.storyboard
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14111" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
+    </dependencies>
+    <scenes>
+        <!--Bridge View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="CAPBridgeViewController" customModule="Capacitor" sceneMemberID="viewController"/>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+    </scenes>
+</document>
diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist
new file mode 100644
index 0000000000000000000000000000000000000000..1e8aaa670d12d8eae863d4f55ba6d86648b5c107
--- /dev/null
+++ b/ios/App/App/Info.plist
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>Cesium2</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSCameraUsageDescription</key>
+	<string>To scan QRCode</string>
+	<key>NSPhotoLibraryUsageDescription</key>
+	<string>To choose a profile picture</string>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<true/>
+</dict>
+</plist>
diff --git a/ios/App/Podfile b/ios/App/Podfile
new file mode 100644
index 0000000000000000000000000000000000000000..07ac8d005af6c7815366b149d425d0adfaab50b7
--- /dev/null
+++ b/ios/App/Podfile
@@ -0,0 +1,33 @@
+require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
+
+platform :ios, '13.0'
+use_frameworks!
+
+# workaround to avoid Xcode caching of Pods that requires
+# Product -> Clean Build Folder after new Cordova plugins installed
+# Requires CocoaPods 1.6 or newer
+install! 'cocoapods', :disable_input_output_paths => true
+
+def capacitor_pods
+  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
+  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
+  pod 'CapacitorCommunityBarcodeScanner', :path => '../../node_modules/@capacitor-community/barcode-scanner'
+  pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app'
+  pod 'CapacitorBrowser', :path => '../../node_modules/@capacitor/browser'
+  pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera'
+  pod 'CapacitorClipboard', :path => '../../node_modules/@capacitor/clipboard'
+  pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics'
+  pod 'CapacitorKeyboard', :path => '../../node_modules/@capacitor/keyboard'
+  pod 'CapacitorNetwork', :path => '../../node_modules/@capacitor/network'
+  pod 'CapacitorSplashScreen', :path => '../../node_modules/@capacitor/splash-screen'
+  pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar'
+end
+
+target 'Cesium 2' do
+  capacitor_pods
+  # Add your Pods here
+end
+
+post_install do |installer|
+  assertDeploymentTarget(installer)
+end
diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock
new file mode 100644
index 0000000000000000000000000000000000000000..d8e390b5bbdbb74ee5a5d62e3088fa8a88a455a8
--- /dev/null
+++ b/ios/App/Podfile.lock
@@ -0,0 +1,82 @@
+PODS:
+  - Capacitor (5.6.0):
+    - CapacitorCordova
+  - CapacitorApp (5.0.7):
+    - Capacitor
+  - CapacitorBrowser (5.2.0):
+    - Capacitor
+  - CapacitorCamera (5.0.9):
+    - Capacitor
+  - CapacitorClipboard (5.0.7):
+    - Capacitor
+  - CapacitorCommunityBarcodeScanner (4.0.1):
+    - Capacitor
+  - CapacitorCordova (5.6.0)
+  - CapacitorHaptics (5.0.7):
+    - Capacitor
+  - CapacitorKeyboard (5.0.8):
+    - Capacitor
+  - CapacitorNetwork (5.0.7):
+    - Capacitor
+  - CapacitorSplashScreen (5.0.7):
+    - Capacitor
+  - CapacitorStatusBar (5.0.7):
+    - Capacitor
+
+DEPENDENCIES:
+  - "Capacitor (from `../../node_modules/@capacitor/ios`)"
+  - "CapacitorApp (from `../../node_modules/@capacitor/app`)"
+  - "CapacitorBrowser (from `../../node_modules/@capacitor/browser`)"
+  - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)"
+  - "CapacitorClipboard (from `../../node_modules/@capacitor/clipboard`)"
+  - "CapacitorCommunityBarcodeScanner (from `../../node_modules/@capacitor-community/barcode-scanner`)"
+  - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
+  - "CapacitorHaptics (from `../../node_modules/@capacitor/haptics`)"
+  - "CapacitorKeyboard (from `../../node_modules/@capacitor/keyboard`)"
+  - "CapacitorNetwork (from `../../node_modules/@capacitor/network`)"
+  - "CapacitorSplashScreen (from `../../node_modules/@capacitor/splash-screen`)"
+  - "CapacitorStatusBar (from `../../node_modules/@capacitor/status-bar`)"
+
+EXTERNAL SOURCES:
+  Capacitor:
+    :path: "../../node_modules/@capacitor/ios"
+  CapacitorApp:
+    :path: "../../node_modules/@capacitor/app"
+  CapacitorBrowser:
+    :path: "../../node_modules/@capacitor/browser"
+  CapacitorCamera:
+    :path: "../../node_modules/@capacitor/camera"
+  CapacitorClipboard:
+    :path: "../../node_modules/@capacitor/clipboard"
+  CapacitorCommunityBarcodeScanner:
+    :path: "../../node_modules/@capacitor-community/barcode-scanner"
+  CapacitorCordova:
+    :path: "../../node_modules/@capacitor/ios"
+  CapacitorHaptics:
+    :path: "../../node_modules/@capacitor/haptics"
+  CapacitorKeyboard:
+    :path: "../../node_modules/@capacitor/keyboard"
+  CapacitorNetwork:
+    :path: "../../node_modules/@capacitor/network"
+  CapacitorSplashScreen:
+    :path: "../../node_modules/@capacitor/splash-screen"
+  CapacitorStatusBar:
+    :path: "../../node_modules/@capacitor/status-bar"
+
+SPEC CHECKSUMS:
+  Capacitor: ebfc16cdb8116d04c101686b080342872da42d43
+  CapacitorApp: 17fecd0e6cb23feafac7eb0939417389038b0979
+  CapacitorBrowser: a6deae9e5bf87f62b62a753cff7992c5def9e771
+  CapacitorCamera: 4892c5c392f60039d853dde78bc50ba19fbd113e
+  CapacitorClipboard: 45e5e25f2271f98712985d422776cdc5a779cca1
+  CapacitorCommunityBarcodeScanner: 7feb206489c8555a8ca0c74c57ddf49ead774eb8
+  CapacitorCordova: 931b48fcdbc9bc985fc2f16cec9f77c794a27729
+  CapacitorHaptics: 7c7c206f0c96a628fed073830c96d28c4b2e772e
+  CapacitorKeyboard: aec619a578235c6ce279075009a2689c2cf5c42c
+  CapacitorNetwork: 81ef9728aa7a65cac8c1181ce79e578162b57b57
+  CapacitorSplashScreen: dd3de3f3644710fa2a697cfb91ec262eece4d242
+  CapacitorStatusBar: f390fbb49b82ffb754ea4b3cf71dc8b048baf3e7
+
+PODFILE CHECKSUM: e7407b06a28be05e662b9075a941974275fd0935
+
+COCOAPODS: 1.16.2
diff --git a/ios/App/public/assets/i18n/ca-2.0.0-alpha42.json b/ios/App/public/assets/i18n/ca-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..363b957965512af23998a9da8d103ecc20c7d6a3
--- /dev/null
+++ b/ios/App/public/assets/i18n/ca-2.0.0-alpha42.json
@@ -0,0 +1,1016 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "data: {{build}}",
+    "PUBKEY": "Clau pública",
+    "ADDRESS": "Adreça SS58",
+    "MEMBER": "Membre",
+    "BLOCK": "Bloc",
+    "BTN_OK": "OK",
+    "BTN_YES": "Sí",
+    "BTN_NO": "No",
+    "BTN_SEND": "Envia",
+    "BTN_SEND_MONEY": "Fes un pagament",
+    "BTN_SEND_MONEY_SHORT": "Pagament",
+    "BTN_SAVE": "Desa",
+    "BTN_YES_SAVE": "Sí, desa",
+    "BTN_YES_CONTINUE": "Sí, continua",
+    "BTN_SHOW": "Mostra",
+    "BTN_SHOW_PUBKEY": "Mostra la clau pública",
+    "BTN_RELATIVE_UNIT": "Mostra els imports en DU",
+    "BTN_BACK": "Anterior",
+    "BTN_NEXT": "Següent",
+    "BTN_IMPORT": "Importa",
+    "BTN_CANCEL": "Cancel·la",
+    "BTN_CLOSE": "Tanca",
+    "BTN_LATER": "Més tard",
+    "BTN_LOGIN": "Connectar-se",
+    "BTN_LOGOUT": "Desconnexió",
+    "BTN_ADD_ACCOUNT": "Compte nou",
+    "BTN_SHARE": "Comparteix",
+    "BTN_EDIT": "Modifica",
+    "BTN_DELETE": "Suprimeix",
+    "BTN_ADD": "Afegeix",
+    "BTN_SEARCH": "Busca",
+    "BTN_REFRESH": "Actualitza",
+    "BTN_RETRY": "Comença de bell nou",
+    "BTN_START": "Comença",
+    "BTN_CONTINUE": "Continua",
+    "BTN_CREATE": "Crea",
+    "BTN_UNDERSTOOD": "Entesos",
+    "BTN_OPTIONS": "Opcions",
+    "BTN_HELP_TOUR": "Visita guiada",
+    "BTN_HELP_TOUR_SCREEN": "Explica'm aquesta pantalla",
+    "BTN_DOWNLOAD": "Descarrega",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Descarrega l'històric del compte",
+    "BTN_MODIFY": "Modifica",
+    "CHOOSE_FILE": "Arrossegueu el fitxer<br/>o cliqueu-lo per a seleccionar-lo",
+    "DAYS": "Dies",
+    "NO_ACCOUNT_QUESTION": "Encara no sou membre? Feu-vos un compte!",
+    "SEARCH_NO_RESULT": "No s'ha trobat res",
+    "LOADING": "Espereu si us plau...",
+    "LOADING_WAIT": "Espereu si us plau...<br/><small>(en espera de tenir un node disponible)</small>",
+    "SEARCHING": "Cerca en procés...",
+    "FROM": "De",
+    "TO": "A",
+    "COPY": "Copia",
+    "LANGUAGE": "Idioma",
+    "UNIVERSAL_DIVIDEND": "Dividend universal",
+    "UD": "DU",
+    "DATE_PATTERN": "DD/MM/YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(buit)",
+    "UID": "Pseudònim",
+    "ENABLE": "Activat",
+    "DISABLE": "Desactivat",
+    "RESULTS_LIST": "Resultats:",
+    "RESULTS_COUNT": "{{count}} resultats",
+    "EXECUTION_TIME": "executat en {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Mostrar les contrasenyes?",
+    "POPOVER_ACTIONS_TITLE": "Opcions",
+    "POPOVER_FILTER_TITLE": "Filtres",
+    "SHOW_MORE": "Mostra'n més",
+    "SHOW_MORE_COUNT": "(límit actual {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Comparteix",
+      "SHARE_ON_TWITTER": "Comparteix a Twitter",
+      "SHARE_ON_FACEBOOK": "Comparteix a Facebook",
+      "SHARE_ON_DIASPORA": "Comparteix a Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Comparteix a Google+"
+    },
+    "FILE": {
+      "DATE": "Data:",
+      "TYPE": "Tipus:",
+      "SIZE": "Mida:",
+      "VALIDATING": "Validant..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Trieu la font:",
+    "BTN_PICTURE_GALLERY": "Galeria",
+    "BTN_PICTURE_CAMERA": "<b>Càmera</b>"
+  },
+  "MENU": {
+    "HOME": "Inici",
+    "WOT": "Directori",
+    "CURRENCY": "Moneda",
+    "ACCOUNT": "Compte",
+    "WALLETS": "Moneders",
+    "SETTINGS": "Ajustos",
+    "NETWORK": "Xarxa",
+    "TRANSACTIONS": "Transaccions"
+  },
+  "ABOUT": {
+    "TITLE": "A propòsit de",
+    "LICENSE": "Programari <b>lliure</b> (llicència GNU AGPLv3).",
+    "LATEST_RELEASE": "Existeix una <b>versió més nova</b> de {{'COMMON.APP_NAME' | translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Si us plau feu l'actualització {{'COMMON.APP_NAME' | translate}} (última versió: <b>v{{version}}</b>)",
+    "CODE": "Codi font:",
+    "OFFICIAL_WEB_SITE": "Web oficial:",
+    "DEVELOPERS": "Desenvolupat per:",
+    "FORUM": "Fòrum:",
+    "PLEASE_REPORT_ISSUE": "Si us plau, informeu-nos de les anomalies que trobeu",
+    "REPORT_ISSUE": "Informeu d'un problema",
+    "BTN_OPEN_DEV_WINDOW": "Obriu la finestra de depuració"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Benvinguts a l'aplicació Cesium!",
+    "WELCOME_READONLY": "Benvinguts a Cesium <span class='badge badge-balanced'>Monit</span> !",
+    "MESSAGE": "Rebeu i envieu moneda lliure {{currency}} fàcilment",
+    "MESSAGE_READONLY": "Seguiu l'estat de la moneda lliure {{currency}} en temps real.",
+    "BTN_CURRENCY": "Exploreu la moneda {{ currency }}",
+    "BTN_ABOUT": "A propòsit de",
+    "BTN_HELP": "Ajuda en línia",
+    "BTN_NETWORK": "Estat de la xarxa",
+    "FREE_SOFTWARE": "Programari lliure",
+    "FORK_ME": "Clona'm!",
+    "SHOW_LICENSE": "Veure la llicència de l'aplicació",
+    "REPORT_ISSUE": "Informeu d'una anomalia",
+    "NOT_YOUR_ACCOUNT_QUESTION": "Aquest compte <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} no és vostre</b>?",
+    "BTN_CHANGE_ACCOUNT": "Desconnecta aquest compte",
+    "CONNECTION_ERROR": "Node <b>{{server}}</b> inabastable o adreça invàlida.<br/><br/>Comproveu bé la vostra connexió a Internet, o el node Duniter <a class=\"positive\" ng-click=\"doQuickFix('settings')\">als ajustos</a>.",
+    "SHOW_ALL_FEED": "Veure-ho tot",
+    "READ_MORE": "Llegiu més",
+    "FEED_SOURCE": "Font"
+  },
+  "SETTINGS": {
+    "TITLE": "Ajustos",
+    "DISPLAY_DIVIDER": "Visualització",
+    "STORAGE_DIVIDER": "Emmagatzematge",
+    "NETWORK_SETTINGS": "Xarxa",
+    "BTN_DARK_MODE": "Mode fosc/clar",
+    "PEER": "Adreça del node Duniter",
+    "PEER_SHORT": "Node Duniter",
+    "INDEXER": "Indexador de dades",
+    "PEER_CHANGED_TEMPORARY": "Adreça usada temporalment",
+    "PERSIST_CACHE": "Conserva les dades de navegació (experimental)",
+    "PERSIST_CACHE_HELP": "Permet una navegació més ràpida, conservant localment les dades rebudes, per fer servir d'una sessió a una altra.",
+    "USE_LOCAL_STORAGE": "Activa l'emmagatzematge local",
+    "USE_LOCAL_STORAGE_HELP": "Permet conservar els vostres ajustos",
+    "WALLETS_SETTINGS": "Els meus moneders",
+    "USE_WALLETS_ENCRYPTION": "Xifra el llistat",
+    "USE_WALLETS_ENCRYPTION_HELP": "Permet protegir el listat dels vostres moneders (mitjançant xifrat), exigint una autenticació per accedir-hi.",
+    "ENABLE_HELPTIP": "Activa l'ajuda contextual",
+    "DISABLE_HELPTIP": "Desactivar l'ajuda contextual",
+    "ENABLE_UI_EFFECTS": "Activa els efectes visuals",
+    "ENABLE_UI_EFFECTS_HELP": "Transicions entre les pàgines, animació de les llistes, etc.",
+    "HISTORY_SETTINGS": "Transaccions del compte",
+    "DISPLAY_UD_HISTORY": "Mostra els DU creats",
+    "TX_HISTORY_AUTO_REFRESH": "Activa l'actualització automàtica",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Actualitza el saldo i les transaccions automàticament, amb cada bloc nou.",
+    "AUTHENTICATION_SETTINGS": "Autenticació",
+    "KEEP_AUTH": "Caducitat de l'autenticació",
+    "KEEP_AUTH_SHORT": "Caducitat",
+    "KEEP_AUTH_HELP": "Defineixi quan expira la seva sessió",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Després de cada operació",
+      "SECONDS": "Després de {{value}}s d'inactivitat",
+      "MINUTE": "Després de {{value}}min d'inactivitat",
+      "MINUTES": "Després de {{value}}min d'inactivitat",
+      "HOUR": "Després de {{value}}h d'inactivitat",
+      "ALWAYS": "Al final de la sessió"
+    },
+    "KEYRING_FILE": "Arxiu de claus",
+    "KEYRING_FILE_HELP": "Us permet <b>connectar-vos</b> automàticament a cada inici <br/>i fins i tot <b>autenticar-vos</b> (només si \"Caducitat de l'autenticació\" està configurada en mode: \"al final de la sessió\").",
+    "REMEMBER_ME": "Recordar-me",
+    "REMEMBER_ME_HELP": "Permet mantenir-se siempre connectat (no recomanat), conservant localment la clau pública.",
+    "PLUGINS_SETTINGS": "Extensiones",
+    "BTN_RESET": "Restaurar els valors per defecte",
+    "EXPERT_MODE": "Mode expert",
+    "EXPERT_MODE_HELP": "Permet una visualizació més detallada",
+    "BLOCK_VALIDITY_WINDOW": "Retard d'incertitesa dels blocs",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Retard d'incertesa",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Temps de espera abans de considerar una informació como a validada",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "Sense espera",
+      "N": "{{time | formatDuration}} ({{count}} blocs)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Node Duniter",
+      "HOST": "Adreça",
+      "HOST_HELP": "Adreça: servidor:port",
+      "USE_SSL": "Connexió segura",
+      "USE_SSL_HELP": "(Xifrat SSL)",
+      "BTN_SHOW_LIST": "Llista de nodes"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Bloc #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Bloc actual",
+      "TITLE": "Bloc #{{number|formatInteger}}",
+      "COMPUTED_BY": "Calculat pel node de",
+      "SHOW_RAW": "Veure l'arxiu en brut",
+      "TECHNICAL_DIVIDER": "Informacions tècniques",
+      "VERSION": "Versió del format",
+      "HASH": "Hash calculat",
+      "UNIVERSAL_DIVIDEND_HELP": "Moneda co-produïda per cadscun dels {{membersCount}} membres",
+      "EMPTY": "Cap dada en aquest bloc",
+      "POW_MIN": "Dificultat mínima",
+      "POW_MIN_HELP": "Dificultat imposada pel càlcul del hash",
+      "DATA_DIVIDER": "Dades",
+      "CALLS_COUNT": "Nombre de crides",
+      "EXTRINSICS_COUNT": "Nombre d'extrínsics",
+      "EVENTS_COUNT": "Nombre d'events",
+      "IDENTITIES_COUNT": "Noves identitats",
+      "JOINERS_COUNT": "Nous membres",
+      "ACTIVES_COUNT": "Renovacions",
+      "ACTIVES_COUNT_HELP": "Membres que han renovat les seves adhesions",
+      "LEAVERS_COUNT": "Membres sortints",
+      "LEAVERS_COUNT_HELP": "Membres sortints que ja no volen estar certificats",
+      "EXCLUDED_COUNT": "Membres exclosos",
+      "EXCLUDED_COUNT_HELP": "Antics membres exclosos per no renovació o manca de certificacions",
+      "REVOKED_COUNT": "Identitats revocades",
+      "REVOKED_COUNT_HELP": "Aquests comptes no podran ser membres",
+      "TX_COUNT": "Transaccions",
+      "CERT_COUNT": "Certificacions",
+      "TX_TO_HIMSELF": "Operació de canvi",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Condicions de desbloqueig",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "i",
+        "OR": "o"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Signatura</b> de ",
+        "XHX": "<b>Contrasenya</b>, amb SHA256 =",
+        "CSV": "Bloquejat durant",
+        "CLTV": "Bloquejat fins"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blocs",
+      "NO_BLOCK": "Cap bloc",
+      "LAST_BLOCKS": "Darrers blocs:",
+      "BTN_COMPACT": "Compactar"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Moneda",
+      "TAB_CURRENCY": "Moneda",
+      "TAB_WOT": "Xarxa de confiança",
+      "TAB_NETWORK": "Xarxa",
+      "TAB_BLOCKS": "Blocs",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} es una <b>moneda lliure</b>, originada {{firstBlockTime|formatFromNow}}. Té actualmente <b>{{N}} membres</b>, que produeixen i reben un <a ng-click=\"showHelpModal('ud')\">Dividend Universal</a> (DU) cada {{dt|formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Regles de la xarxa",
+      "CURRENCY_NAME": "Nom de la moneda",
+      "MEMBERS": "Quantitat de membres",
+      "MEMBERS_VARIATION": "Variació des del darrer DU",
+      "MONEY_DIVIDER": "Moneda",
+      "MASS": "Massa monetària",
+      "SHARE": "Massa mitjana per membre",
+      "UD": "Dividend Universal",
+      "C_ACTUAL": "Creixement actual",
+      "MEDIAN_TIME": "Hora de la cadena de blocs",
+      "POW_MIN": "Nivell mínim de dificultad de càlcul",
+      "MONEY_RULES_DIVIDER": "Regles de la moneda",
+      "C_RULE": "Creixement teòric objectiu",
+      "UD_RULE": "Càlcul del dividend universal",
+      "DT_REEVAL": "Període de revalorització del DU",
+      "REEVAL_SYMBOL": "reval",
+      "DT_REEVAL_VALUE": "Cada <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Data de la primera revalorització",
+      "SIG_QTY_RULE": "Certificacions requerides per a esdevenir membre",
+      "SIG_STOCK": "Màxim de certificacions emetibles per membre",
+      "SIG_PERIOD": "Espera mínima entre 2 certificacions suxcessives emeses pel mateix individu",
+      "SIG_WINDOW": "Límit per a tenir en compte una certificació",
+      "SIG_VALIDITY": "Durada d'una certificació tinguda en compte",
+      "MS_WINDOW": "Límit per a aprovar una sol.licitud d'adhesió",
+      "MS_VALIDITY": "Durada d'una adhesió aprovada",
+      "STEP_MAX": "Distancia màxima entre una nova candidatura i cada membre referent",
+      "WOT_RULES_DIVIDER": "Regles de la xarxa de confiança",
+      "SENTRIES": "Certificacions necessàries per a esdevenir membre referent",
+      "SENTRIES_FORMULA": "Fòrmula de les certificacions necessàrias per a ser membre referent",
+      "XPERCENT": "Precentatge mínim necessari de membres referents que calen per complir amb la regla de distància",
+      "AVG_GEN_TIME": "Temps mig entre dos blocs",
+      "CURRENT": "actual",
+      "MATH_CEILING": "SOSTRE",
+      "DISPLAY_ALL_RULES": "Mostrar totes les regles?",
+      "BTN_SHOW_LICENSE": "Veure la llicència",
+      "WOT_DIVIDER": "Xarxa de confiança"
+    },
+    "LICENSE": {
+      "TITLE": "Llicència de la moneda",
+      "BTN_DOWNLOAD": "Descarregar l'arxiu",
+      "NO_LICENSE_FILE": "No he trobat l'arxiu de llicència."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Hora de la cadena de blocs",
+      "LOADING_PEERS": "Carregant nodes…",
+      "NODE_ADDRESS": "Adreça:",
+      "SOFTWARE": "Software",
+      "WARN_PRE_RELEASE": "Pre-llançament (darrera versió estable: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Versió <b>{{version}}</b> disponible",
+      "WS2PID": "ID:",
+      "PRIVATE_ACCESS": "Accés privat",
+      "POW_PREFIX": "Prefix de la prova de treball:",
+      "ENDPOINTS": {
+        "BMAS": "Interfície segura (SSL)",
+        "BMATOR": "Interfície xarxa TOR",
+        "WS2P": "Interfície WS2P",
+        "ES_USER_API": "Node de dades Cesium+"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "La visualització de nodes sense SSL està deteriorada perquè Cesium funciona en modo HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Nodes",
+    "SIGNED_ON_BLOCK": "Signat sobre el bloc",
+    "MIRROR": "mirall",
+    "MIRRORS": "Miralls",
+    "MIRROR_PEERS": "Nodes mirall",
+    "PEER_LIST": "Llista de nodes",
+    "MEMBERS": "Membre",
+    "MEMBER_PEERS": "Nodes membre",
+    "ALL_PEERS": "Tots els nodes",
+    "DIFFICULTY": "Dificultad",
+    "API": "API",
+    "CURRENT_BLOCK": "Bloc #",
+    "POPOVER_FILTER_TITLE": "Filtro",
+    "OFFLINE": "Fora de línia",
+    "OFFLINE_PEERS": "Nodes fora de línia",
+    "BTN_SHOW_PEER": "Veure node",
+    "VIEW": {
+      "TITLE": "Node",
+      "OWNER": "Propietat de",
+      "SHOW_RAW_PEERING": "Veure la fitxa del parell",
+      "SHOW_RAW_CURRENT_BLOCK": "Veure el darrer bloc (format brut)",
+      "LAST_BLOCKS": "Blocs recents",
+      "KNOWN_PEERS": "Nodes coneguts:",
+      "GENERAL_DIVIDER": "Informació general",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "No s'ha pogut obtenir la informació del node fent servir la xarxa TOR.",
+        "LOADING_NODE_ERROR": "No s'ha pogut obtenir la informació del node"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Buscar (pseudònim o clau pública)",
+    "SEARCH_INIT_PHASE_WARNING": "Durant l'etapa de preinscripció, el temps de cerca de les candidatures en espera <b>pot trigar</b>. Si us plau espereu…",
+    "REGISTERED_SINCE": "Inscrit el",
+    "REGISTERED_SINCE_BLOCK": "Inscrit al bloc #",
+    "NO_CERTIFICATION": "Cap certificació validada",
+    "NO_GIVEN_CERTIFICATION": "Cap certificació emesa",
+    "NOT_MEMBER_PARENTHESIS": "(no membre)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identitat revocada)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(revocació en curs)",
+    "EXPIRE_IN": "Caduca",
+    "NOT_WRITTEN_EXPIRE_IN": "Data límit<br/>de processament",
+    "EXPIRED": "Caducat",
+    "PSEUDO": "Pseudònim",
+    "SIGNED_ON_BLOCK": "Emesa al bloc #{{block}}",
+    "WRITTEN_ON_BLOCK": "Escrita al bloc #{{block}}",
+    "GENERAL_DIVIDER": "Informacions generals",
+    "NOT_MEMBER_ACCOUNT": "Compte no membre",
+    "NOT_MEMBER_ACCOUNT_HELP": "Es tracta d'un moneder simple, sense solicitud d'inscripció en espera",
+    "TECHNICAL_DIVIDER": "Informacions tècniques",
+    "BTN_CERTIFY": "Certificar",
+    "BTN_YES_CERTIFY": "Sí, certificar",
+    "BTN_SELECT_AND_CERTIFY": "Nova certificació",
+    "ACCOUNT_OPERATIONS": "Transaccions del compte",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identitat {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Directori",
+      "NEWCOMERS": "Nous membres:",
+      "NEWCOMERS_COUNT": "{{count}} membres",
+      "PENDING": "Inscripcions en espera:",
+      "PENDING_COUNT": "{{count}} inscripcions en espera",
+      "REGISTERED": "Es va inscriure {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Membre des de {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Membres recents",
+      "BTN_PENDING": "Candidatures en espera",
+      "SHOW_MORE": "Mostrar-ne més",
+      "SHOW_MORE_COUNT": "(mostrar-ne només {{limit}})",
+      "NO_PENDING": "Cap candidatura en espera.",
+      "NO_NEWCOMERS": "Cap membre."
+    },
+    "CONTACTS": {
+      "TITLE": "Contactes"
+    },
+    "MODAL": {
+      "TITLE": "Buscar"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificacions",
+      "SUMMARY": "Certificacions rebudes",
+      "LIST": "Detall de les certificacions rebudes",
+      "PENDING_LIST": "Certificacions en espera de tractament",
+      "RECEIVED": "Certificacions rebudes",
+      "RECEIVED_BY": "Certificacions rebudes per {{uid}}",
+      "ERROR": "Certificacions rebudes per error",
+      "SENTRY_MEMBER": "Membre referent"
+    },
+    "OPERATIONS": {
+      "TITLE": "Transaccions"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificacions emeses",
+      "SUMMARY": "Certificacions emeses",
+      "LIST": "Detall de les certificacions emeses",
+      "PENDING_LIST": "Certificacions en espera a ser processades",
+      "SENT": "Certificacions emeses",
+      "SENT_BY": "Certificacions emeses per {{uid}}",
+      "ERROR": "Certificacions emeses per error"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Connexió",
+    "SCRYPT_FORM_HELP": "Introduïu les vostres credencials.<br>Recordeu comprovar que la clau pública pertany al vostre compte.",
+    "PUBKEY_FORM_HELP": "Si us plau introduïu una clau pública de compte:",
+    "FILE_FORM_HELP": "Escolliu l'arxiu de claus a utilitzar:",
+    "SCAN_FORM_HELP": "Escanegeu el codi QR d'un moneder.",
+    "SALT": "Frase secreta",
+    "SALT_HELP": "Frase secreta",
+    "SHOW_SALT": "Mostrar la frase secreta",
+    "PASSWORD": "Contrasenya",
+    "PASSWORD_HELP": "Contrasenya",
+    "PUBKEY_HELP": "Clau pública o pseudònim",
+    "MNEMONIC": "Frase de recuperació",
+    "NO_ACCOUNT_QUESTION": "Encara no teniu un compte?",
+    "HAVE_ACCOUNT_QUESTION": "Ja teniu un compte?",
+    "CREATE_ACCOUNT": "Crear una compte",
+    "CREATE_FREE_ACCOUNT": "Crear un compte gratuitament",
+    "FORGOTTEN_ID": "Heu oblidat la contrasenya?",
+    "ASSOCIATED_PUBKEY": "Clau pública de l'arxiu de claus:",
+    "BTN_METHODS": "Altres mètodes",
+    "BTN_METHODS_DOTS": "Canviar de mètode...",
+    "METHOD_POPOVER_TITLE": "Mètodes de connexió:",
+    "MEMORIZE_AUTH_FILE": "Memoritzar les claus durant la sessió de navegació",
+    "SCRYPT_PARAMETERS": "Paràmetres (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Informació",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> S'ha <b>desconnectat</b> de forma automàtica, després d'un període de llarga inactivitat.",
+      "BTN_RELOGIN": "Tornar-me a connectar",
+      "IDLE_WARNING": "Sereu desconnectat en… {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Estàndard (per defecte)",
+      "SCRYPT_ADVANCED": "Aleatorietat avançada",
+      "FILE": "Arxiu de claus",
+      "PUBKEY": "Clau pública o pseudònim",
+      "SCAN": "Escanejar un codi QR"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Lleuger",
+      "DEFAULT": "Predeterminat",
+      "SECURE": "Segur",
+      "HARDEST": "El més segur",
+      "EXTREME": "Extrem",
+      "USER": "Personalitzat",
+      "N": "N (Cicles):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Format d'arxiu esperat: <b>.yml</b> o <b>.dunikey</b> (tipus PubSec, WIF o EWIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Autenticació",
+    "BTN_AUTH": "Autenticar",
+    "PASSPHRASE": "Frase de pas",
+    "PASSPHRASE_HELP": "Si us plau, autentiqueu-vos, introduint la vostra frase de pas:",
+    "GENERAL_HELP": "Si us plau, autentiqueu-vos:",
+    "EXPECTED_UID_HELP": "Si us plau inicieu sessió al compte de <i class=\"ion-person\"></i> {{uid}}:",
+    "EXPECTED_PUBKEY_HELP": "Si us plau, autentiqueu-vos al moneder <br class=\"visible-xs\"/><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} :",
+    "SCAN_FORM_HELP": "Escanegeu el codi QR de la <b>clau privada</b> del moneder."
+  },
+  "ACCOUNT": {
+    "TITLE": "El meu compte",
+    "BALANCE": "Saldo",
+    "LAST_TX": "Darreres transaccions validades",
+    "BALANCE_ACCOUNT": "Saldo del compte",
+    "NO_TX": "Cap transacció",
+    "SHOW_MORE_TX": "Mostrar-ne més",
+    "SHOW_ALL_TX": "Mostrar-ho tot",
+    "TX_FROM_DATE": "(límit actual a {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Transaccions pendents",
+    "VALIDATING_TX": "Transaccions validades",
+    "ERROR_TX": "Transaccions no executades",
+    "ERROR_TX_SENT": "Transaccions executades fallades",
+    "PENDING_TX_RECEIVED": "Transaccions en espera de recepció",
+    "EVENTS": "Events",
+    "OUT_DISTANCED": "Les vostres certificacions rebudes provenen d'un grup massa aïllat de la <a ng-click=\"showHelpModal('wot')\">Xarxa de Confiança</a> (XdC) : la <a ng-click=\"showHelpModal('distance_rule')\">regla de distància màxima</a> no es compleix.<br/>Haureu d'obtenir certificacions provinents d'altres sectors de la XdC, o esperar a que aquesta estrenyi els seus vincles.",
+    "WAITING_MEMBERSHIP": "Sol.licitud d'adhesió emesa. Pendent d'acceptació.",
+    "WAITING_CERTIFICATIONS": "Heu d'obtenir {{needCertificationCount}} certificació(ns) per a esdevenir membre.",
+    "--- reviewed up to here ---": null,
+    "WAITING_CERTIFICATIONS_HELP": "Para obtenir sus certificacions, solicitelas únicamente a membres <b>que le conozcan bien (y físicamente)</b>, como exige <a ng-click=\"showLicenseModal()\">la llicència de la moneda</a> que usted ha aceptado.<br/>Si no conoce lo suficiente a membres, hágalo saber en <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">el foro</a> para conocerse físicamente o asistir a algún encuentro.",
+    "WILL_MISSING_CERTIFICATIONS": "Pronto le van a <b>faltar certificacions</b> (al menos {{willNeedCertificationCount}} son necessàrias)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Su adhesión como membre <b>va a expirar {{membershipExpiresIn|formatDurationTo}}</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a> mientras tanto.",
+    "NEED_RENEW_MEMBERSHIP": "Ya no es membre porque su adhesión <b>ha expirado</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Ya no es membre de la moneda, <b>por falta de certificacions</b>. Considere <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.",
+    "NO_WAITING_MEMBERSHIP": "No hay adhesión membre en espera. Si desea <b>convertirse en membre</b>, per favor <a ng-click=\"doQuickFix('membership')\">envíe su adhesión como membre</a>.",
+    "CERTIFICATION_COUNT": "Certificacions rebudes",
+    "CERTIFICATION_COUNT_SHORT": "Certificacions",
+    "SIG_STOCK": "Certificacions emeses",
+    "BTN_RECEIVE_MONEY": "Recibir",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Cambiar a otra identitat…",
+    "BTN_FIX_MEMBERSHIP": "Volver a enviar la candidatura…",
+    "BTN_MEMBERSHIP_RENEW": "Renovar la membresía",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Renovar la membresía…",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Cancelar la membresía…",
+    "BTN_SECURITY_DOTS": "Cuenta i seguridad…",
+    "BTN_SHOW_DETAILS": "Publicar la información técnica",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Importe blocado",
+      "DESCRIPTION": "Aquí están las condiciones para desblocar este importe:",
+      "DESCRIPTION_MANY": "Esta transacció esta compuesta de varias partes, cuyas condiciones de desbloco son:",
+      "LOCKED_AMOUNT": "Condiciones del importe:"
+    },
+    "NEW": {
+      "TITLE": "Registrarse",
+      "INTRO_WARNING_TIME": "Crear una compte en {{name|capitalize}} es muy simple. Sin embargo, per favor tome el temps suficiente para hacerlo correctamente (generar i memorizar bien las credenciales, etc.)",
+      "INTRO_WARNING_SECURITY": "Asegúrese de que el dispositivo actual (ordenador, tablet, teléfono) <b>es seguro i de confiança</b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Antivirus, cortafuegos, sessió protegida per contraseña o número PIN, etc.",
+      "INTRO_HELP": "Haga clic en <b>{{'COMMON.BTN_START'|translate}}</b> para iniciar la creación de la compte. Se le guiará paso a paso.",
+      "REGISTRATION_NODE": "Su registro será grabado a través del nodo Duniter <b>{{server}}</b>, que luego se transmitirá al resto del sistema de la moneda.",
+      "REGISTRATION_NODE_HELP": "Si no confía en este nodo, <a ng-click=\"doQuickFix('settings')\">cambie los ajustes</a> de Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Elegir el tipo de compte a crear:",
+      "MEMBER_ACCOUNT": "Cuenta membre",
+      "MEMBER_ACCOUNT_TITLE": "Crear una compte membre",
+      "MEMBER_ACCOUNT_HELP": "Si todavía no es membre (solamente una compte membre posible per ser humano).",
+      "WALLET_ACCOUNT": "Simple moneder",
+      "WALLET_ACCOUNT_TITLE": "Crear una compte simple",
+      "WALLET_ACCOUNT_HELP": "Monedero simple para todos los demás casos, per ejemplo si necesita una compte suplementaria para un proyecto, colectivo, para hacer pruebas, etc.<br/>El Dividend Universal no será producido para esta compte.",
+      "SALT_WARNING": "Elija su frase secreta.<br/>Se solicitará cada vez que se conectará con esta compte.<br/><br/><b>Conserve bien esta frase secreta</b>.<br/>¡En caso de pérdida, nadie podrá acceder a su compte!",
+      "PASSWORD_WARNING": "Elija su contraseña.<br/>Se solicitará cada vez que se conectará con esta compte.<br/><br/><b>Conserve bien esta contraseña</b>.<br/>¡En caso de pérdida, nadie podrá acceder su compte!",
+      "PSEUDO_WARNING": "Elija un pseudònim.<br/>Sirve para que los otros membres puedan encontrarlo más fácilmente.<br/><br/>No debe contener <b>ni espacios ni caracteres acentuados</b>.<div class='hidden-xs'><br/>Ejemplo: <span class='gray'>SophieDupond, MarcelChemin, etc.</span>",
+      "PSEUDO": "Pseudònim",
+      "PSEUDO_HELP": "Pseudònim",
+      "SALT_CONFIRM": "Confirmación",
+      "SALT_CONFIRM_HELP": "Confirmación de la frase secreta",
+      "PASSWORD_CONFIRM": "Confirmación",
+      "PASSWORD_CONFIRM_HELP": "Confirmación de la contraseña",
+      "SLIDE_6_TITLE": "Confirmación:",
+      "COMPUTING_PUBKEY": "Càlcul en proceso…",
+      "LAST_SLIDE_CONGRATULATION": "<b>¡Bien!</b> Ha introducido todas los dades necessaris.<br/><b>Puede solicitar</b> la creación de su compte.</b><br/><br/>Para su información, la clau pública que se muestra más abajo identificará su futura compte.<br/>Esta podrá ser comunicada a terceros para recibir pagos.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Advertencia:</b> la frase secreta, la contraseña i el pseudònim no podrán ser modificados.<br/><b>¡Asegúrese siempre de recordarlos!</b><br/><br/><b>¿Desea</b> solicitar la inscripción?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Advertencia:</b> la frase secreta i la contraseña no podrán ser modificados.<br/><b>¡Asegúrese de recordarlos siempre!</b><br/><br/><b>¿Desea</b> continuar?",
+      "CHECKING_PSEUDO": "Verificando…",
+      "PSEUDO_AVAILABLE": "Este nombre está disponible",
+      "PSEUDO_NOT_AVAILABLE": "Este nombre de usuario no está disponible",
+      "INFO_LICENSE": "Para unirse a la moneda, le pedimos leer i aceptar esta llicència.",
+      "BTN_ACCEPT": "Acepto",
+      "BTN_ACCEPT_LICENSE": "Acepto la llicència"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Elija un pseudònim",
+      "HELP": "Un pseudònim es obligatorio para ser membre."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Selección de identitat",
+      "HELP": "Se han enviado varias <b>identitates diferentes</b> para la clau pública <span class=\"gray\"><i class=\"ion-key\"></i>{{pubkey | formatPubkey}}</span>.<br/>Si us plau, selecciona la carpeta para usar:"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Selección de moneder"
+    },
+    "WALLET_LIST": {
+      "IMPORT_MODAL": {
+        "HELP": "Para <b>importar moneders</b>, haga clic para seleccionar o arrastre en la zona de abajo el arxiu con la lista de moneders.",
+        "NO_NEW_WALLET": "Ningún moneder nuevo",
+        "TITLE": "Importar moneders",
+        "WALLET_COUNT": "<b>{{count}}</b> nuevo{{count > 1 ? 's' : ''}} moneder{{count > 1 ? 's' : ''}}"
+      },
+      "TITLE": "Mis moneders",
+      "BTN_NEW": "Añadir un moneder",
+      "BTN_DOWNLOAD": "Descargue el listado",
+      "BTN_IMPORT_FILE_DOTS": "Importar desde fichero…",
+      "NO_WALLET": "Sin moneder secundario",
+      "BTN_DELETE": "Eliminar un moneder secundario…",
+      "BTN_RENAME": "Renombrar el moneder",
+      "EXPORT_FILENAME": "moneders-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Total : ",
+      "EDIT_POPOVER": {
+        "TITLE": "Renombrar el moneder",
+        "HELP": "Escribe el nuevo nombre",
+        "NAME_HELP": "Nombre del moneder"
+      }
+    },
+    "SECURITY": {
+      "KEYFILE": {
+        "ERROR": {
+          "BAD_CHECKSUM": "Suma de control (checksum) incorrecta",
+          "BAD_PASSWORD": "Frase secreta incorrecta"
+        },
+        "EWIF_FORMAT": "Formato EWIF (Encrypted Wallet Import Format) - v1",
+        "EWIF_FORMAT_HELP": "Este formato almacena su arxiu de claus <b>de forma cifrada</b> a partir de una frase secreta de su elección. También guarda una suma de control (checksum) para verificar la integridad del arxiu.<br/><b>Atención :</b>¡ Asegúrese siempre de recordar su frase secreta !",
+        "PASSWORD_POPUP": {
+          "HELP": "Indique la frase secreta :",
+          "PASSWORD_HELP": "Frase secreta",
+          "TITLE": "Archivo de claus cifrado"
+        },
+        "PUBSEC_FORMAT": "Formato PubSec",
+        "PUBSEC_FORMAT_HELP": "Este formato almacena su arxiu de claus de forma simple. Es compatible con Cesium, ğannonce i Duniter.<br/><b>Atención :</b>El arxiu <b>no está cifrado</b> (la clau privada aparece en claro) ; ¡ guárdelo en un lugar seguro !",
+        "WIF_FORMAT": "Formato WIF (Wallet Import Format) - v1",
+        "WIF_FORMAT_HELP": "Este formato almacena su arxiu de claus con una suma de control (checksum) para verificar la integridad del arxiu. Es compatible con los moneders en papel (Duniter paper wallet).<br/><b>Atención :</b>El arxiu <b>no está cifrado</b> (la clau privada aparece en claro) ; ¡ guárdelo en un lugar seguro !"
+      },
+      "ADD_QUESTION": "Añadir pregunta personalizada",
+      "BTN_CLEAN": "Limpiar",
+      "BTN_RESET": "Reiniciar",
+      "DOWNLOAD_REVOKE": "Guardar un arxiu de revocación",
+      "DOWNLOAD_REVOKE_HELP": "Tener un arxiu de revocación es importante, en caso de perdida de les credenciales. Le permitirá <b>invalidar i sacar su compte membre fora de la Red de Confianza</b>, convirtíendose en un moneder simple.",
+      "RECOVER_ID_SELECT_FILE": "Elija el <b>arxiu para salvaguardar sus credenciales</b> a utilizar :",
+      "GENERATE_KEYFILE": "Generar mi arxiu de claus…",
+      "GENERATE_KEYFILE_HELP": "Genera un arxiu que le permitirá atenticarse sin tener que introducir las credenciales.<br/><b>Cuidado:</b> este arxiu contendrá su clau secreta; ¡Es muy importante conservarlo en un lugar seguro!",
+      "KEYFILE_FILENAME": "clauro-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Registrarse como membre…",
+      "MEMBERSHIP_IN_HELP": "Le permite <b>transformar</b> una compte de moneder simple <b>en una compte membre</b>, enviando una petición de membresía. Solo si todavía no tiene una compte membre.",
+      "SEND_IDENTITY": "Publicar identitat…",
+      "SEND_IDENTITY_HELP": "Le permite asociar un pseudònim a esta compte, pero <b>sin pedir ser membre</b>. La validez de este pseudònim tiene un plazo limitado.",
+      "HELP_LEVEL": "Elija <strong> al menos {{nb}} preguntas:</strong>",
+      "LEVEL": "Nivel de seguridad",
+      "LOW_LEVEL": "Bajo <span class=\"hidden-xs\">(2 preguntas min.)</span>",
+      "MEDIUM_LEVEL": "Medio <span class=\"hidden-xs\">(4 preguntas min.)</span>",
+      "QUESTION_1": "¿Cómo se llamaba su mejor amigo de la adolescencia?",
+      "QUESTION_2": "¿Cómo se llamaba su primer animal de compañía?",
+      "QUESTION_3": "¿Cuál es el primer plato que aprendió a cocinar?",
+      "QUESTION_4": "¿Cuál es la primera película que vió en un cine?",
+      "QUESTION_5": "¿Cuál era el destino del primer avión que cogió?",
+      "QUESTION_6": "¿Cómo se llamaba su docente favorito en la escuela primaria?",
+      "QUESTION_7": "¿Cuál sería para usted el mejor oficio?",
+      "QUESTION_8": "¿Cuál es su libro infantil preferido?",
+      "QUESTION_9": "¿Cuál fue el modelo de su primer vehículo?",
+      "QUESTION_10": "¿Cuál fue su sobrenombre durante su infancia?",
+      "QUESTION_11": "¿Cuál fue su personaje o actor/actriz preferido/a cuando era estudiante?",
+      "QUESTION_12": "¿Cuál fue su cantante o grupo preferido cuando era estudiante?",
+      "QUESTION_13": "¿En qué ciudad sus padres se encontraron?",
+      "QUESTION_14": "¿Cómo se llamaba su primer jefe/a?",
+      "QUESTION_15": "¿Cómo se llama la calle donde creció?",
+      "QUESTION_16": "¿Cómo se llama la primera playa donde se bañó?",
+      "QUESTION_17": "¿Cuál es el primer álbum que compró?",
+      "QUESTION_18": "¿Cuál es el nombre de su equipo deportivo preferido?",
+      "QUESTION_19": "¿Cuál fue el oficio de su abuelo?",
+      "RECOVER_ID": "Recuperar sus credenciales",
+      "REVOCATION_WITH_FILE": "Revocar una identitat a partir de un fichero",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "Si ha perdido de forma permanente las credenciales de su compte membre (o la seguridad de la compte se ve comprometida), puede usar <b>el arxiu de revocación de la compte</b> para forzar la salida de la Red de Confianza.",
+      "REVOCATION_WITH_FILE_HELP": "Para <b>revocar permanentemente</b> una compte membre, arrastre el arxiu de revocación en el cuadro siguiente o haga clic en el cuadro para seleccionar un arxiu.",
+      "REVOCATION_FILENAME": "revocacion-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "REVOCATION_WALLET": "Revocar esta identitat",
+      "SAVE_ID": "Guardar mis credenciales",
+      "STRONG_LEVEL": "Alto <span class=\"hidden-xs \">(6 preguntas min.)</span>",
+      "TITLE": "Cuenta i seguridad",
+      "RECOVER_ID_HELP": "Si dispone de un <b>arxiu de recuperación de sus credenciales</b>, las puede reobtenir respondiendo correctamente a las preguntas personales elegidas en su momento.",
+      "REVOCATION_WALLET_HELP": "Pedir la revocación de vuestra identitat comporta la <b>salida de la xarxa de confiança</b> (definitiva para el pseudònim i la clau pública asociada). La compte no producirá ya más el Dividend Universal.<br/>Podrá seguir usándola como moneder simple.",
+      "SAVE_ID_HELP": "Creación de un arxiu de recuperación, para <b>reobtenir su contraseña</b> (y frase secreta) en caso de olvido. El arxiu se <b>cifra</b> con ayuda de les preguntas personales elegidas."
+    },
+    "FILE_NAME": "{{currency}}_HistorialDeCuenta_{{pubkey|formatPubkey}}_{{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Fecha",
+      "AMOUNT": "Cantidad",
+      "COMMENT": "Comentario"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Transferencia",
+    "SUB_TITLE": "Hacer una transferencia",
+    "FROM": "De",
+    "TO": "A",
+    "AMOUNT": "Importe",
+    "AMOUNT_HELP": "Importe",
+    "COMMENT": "Comentario",
+    "COMMENT_HELP": "Comentario",
+    "BTN_SEND": "Enviar",
+    "BTN_ADD_COMMENT": "Añadir un comentario",
+    "REST": "Resto de compte",
+    "REST_TO": "a",
+    "WARN_COMMENT_IS_PUBLIC": "Tenga en compte que los <b>comentarios son públicos</b> (sin encriptar).",
+    "MODAL": {
+      "TITLE": "Transferencia"
+    }
+  },
+  "ERROR": {
+    "ADD_SECONDARY_WALLET_FAILED": "Error añadiendo el moneder secundario.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Monedero ya existe en la lista.",
+    "COULD_NOT_ADD_MAIN_WALLET": "Este moneder <b>corresponde a la compte principal</b> con la que se conecta.<br/>Imposible añadirlo como moneder secundario.",
+    "ISSUE_524_TX_FAILED": "Error en la transferencia.<br/><br/>Un mensaje ha sido enviado a los/as desarrolladores/as para facilitar la resolución del problema. <b>Gracias per su ayuda</b>.",
+    "LOAD_WALLET_LIST_FAILED": "Error cargando los moneders secundarios.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Usted debe <b>ser membre (o haber sido membre)</b> para poder efectuar esta acción.",
+    "RESTORE_WALLET_LIST_FAILED": "Error en la restauración de los moneders secundarios.",
+    "SAVE_WALLET_LIST_FAILED": "Error al guardar los moneders secundarios.",
+    "UNKNOWN_WALLET_ID": "Monedero secundario desconocido.",
+    "UPDATE_WALLET_LIST_FAILED": "Error en la actualización de los moneders secundarios.",
+    "UNKNOWN_URI_FORMAT": "Formato URI desconocido",
+    "PUBKEY_INVALID_CHECKSUM": "Clau pública no válida (suma de comprobación incorrecta).",
+    "POPUP_TITLE": "Error",
+    "UNKNOWN_ERROR": "Error desconocido",
+    "CRYPTO_UNKNOWN_ERROR": "Su navegador parece incompatible con las funcionalidades de cryptografía.",
+    "DOWNLOAD_KEYFILE_FAILED": "Error al generar el arxiu de claus.",
+    "EQUALS_TO_PSEUDO": "Debe ser diferente del pseudònim.",
+    "EQUALS_TO_SALT": "Debe ser diferente de la frase secreta.",
+    "FIELD_REQUIRED": "Campo obligatorio.",
+    "FIELD_TOO_SHORT": "Valor demasiado corta.",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Valor demasiado corta ({{minLength}} carácteres mín)",
+    "FIELD_TOO_LONG": "Valor demasiado largo",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Valor demasiado largo, ({{maxLength}} carácteres máx)",
+    "FIELD_MIN": "Valor mínim: {{min}}",
+    "FIELD_MAX": "Valor máximo: {{max}}",
+    "FIELD_ACCENT": "Caracteres acentuados i comas no autorizados",
+    "FIELD_NOT_NUMBER": "Valor numérico esperado",
+    "FIELD_NOT_INT": "Valor entero esperado",
+    "FIELD_NOT_EMAIL": "Correo electrónico no válido",
+    "PASSWORD_NOT_CONFIRMED": "No coincide con la contraseña anterior.",
+    "SALT_NOT_CONFIRMED": "No corresponde a la frase secreta anterior.",
+    "SEND_IDENTITY_FAILED": "Error de la inscripción.",
+    "SEND_CERTIFICATION_FAILED": "Error de la certificació.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "No se puede certificar, porque su compte no <b>es membre</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "No se puede certificar, porque su compte todavía no es membre.<br/><br/>Todavía faltan certificacions para serlo.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Esta compte no se pudo certificar. No se ha solicitado la membresía, o se necesita renovarla.",
+    "LOGIN_FAILED": "Error durante la autentificación.",
+    "LOAD_IDENTITY_FAILED": "Error de carga de la identitat.",
+    "LOAD_REQUIREMENTS_FAILED": "Error de carga de les condiciones de la identitat.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Error en el intento de entrada en la comunidad.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Error en la interrupción de adhesión.",
+    "REFRESH_WALLET_DATA": "Error en la actualización del moneder.",
+    "GET_CURRENCY_PARAMETER": "Error en la recuperación de les regles de moneda.",
+    "GET_CURRENCY_FAILED": "Carga de la moneda imposible. Si us plau, intente más tarde.",
+    "SEND_TX_FAILED": "Error en la transferencia.",
+    "ALL_SOURCES_USED": "Si us plau, espera el càlcul del bloc siguiente (Todas sus fuentes de moneda fueron utilizada).",
+    "NOT_ENOUGH_SOURCES": "No lo bastante cambio para mandar este importe en una sola transacció.<br/>Importe máximo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Error en la creación de la compte membre.",
+    "RESTORE_WALLET_DATA_ERROR": "Error en la recarga de los ajustes desde el almacenamiento local",
+    "LOAD_WALLET_DATA_ERROR": "Error en la carga de los dades del moneder.",
+    "COPY_CLIPBOARD_FAILED": "Copia de la valor imposible.",
+    "TAKE_PICTURE_FAILED": "Error en la recuperación de la foto.",
+    "SCAN_FAILED": "Error en el escán del Codigo QR",
+    "SCAN_UNKNOWN_FORMAT": "Codigo no reconocido.",
+    "WOT_LOOKUP_FAILED": "Error en la cerca",
+    "LOAD_PEER_DATA_FAILED": "Lectura del nodo Duniter imposible. Si us plau, intente más tarde.",
+    "NEED_LOGIN_FIRST": "Si us plau, conéctese en primer lugar.",
+    "AMOUNT_REQUIRED": "El importe es obligatorio.",
+    "AMOUNT_NEGATIVE": "Importe negativo no autorizado.",
+    "NOT_ENOUGH_CREDIT": "Crédito insuficiente.",
+    "INVALID_NODE_SUMMARY": "Nodo ilocalizable o dirección inválida.",
+    "INVALID_USER_ID": "El pseudònim no debe contener ni espacios ni caracteres especiales o acentuado.",
+    "INVALID_COMMENT": "El campo 'referencia’ no debe contener carácteres acentuados.",
+    "INVALID_PUBKEY": "La clau pública no tiene el formato esperado.",
+    "INVALID_PUBKEY_CHECKSUM": "Suma de comprobación inválida.",
+    "IDENTITY_REVOKED": "Esta identitat <b>fue revocada</b>. No puede volver a convertirla en membre.",
+    "IDENTITY_REVOKED_WITH_TIME": "Esta identitat <b>fue revocada {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). No puede volver a convertirla en membre.",
+    "IDENTITY_PENDING_REVOCATION": "La <b>revocación de esta identitat</b> fue solicitado i esta en espera de tractament. Por lo que, la certificació es desactivada.",
+    "IDENTITY_INVALID_BLOCK_HASH": "Esta solicitud de adhesión no es valida (porque denomina un bloc los nodes de la xarxa han anulado): este individuo/a debe renovelar su solicitud de adhesión <b>antes que</b> estar certificada.",
+    "IDENTITY_EXPIRED": "La publicación de esta identitat ha caducada: este individuo/a debe realizar una nueva solicitud de adhesión <b>antes que</b> estar certificada.",
+    "IDENTITY_SANDBOX_FULL": "EL nodo Duniter utilizado per Cesium ya no puede recibir más nuevas identitates, porque la fila de espera es llena.<br/><br/>Si us plau, intenta ulteriormente o cambia de nodo (vía el menú <b>Ajustes</b>).",
+    "IDENTITY_NOT_FOUND": "Identidad no encontrada",
+    "IDENTITY_TX_FAILED": "Error cargando las transaccions de la identitat",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Adhesión no validada.",
+    "WALLET_INVALID_BLOCK_HASH": "Su solicitud de adhesión ya no está validada (porque denomina un bloc los nodes de la xarxa han anulado).<br/>Debe <a ng-click=\"doQuickFix('fixMembership')\">mandar una nueva solicitud</a> para resolver este problema.",
+    "WALLET_IDENTITY_EXPIRED": "La publicación de <b>su identitat ha caducada</b>.<br/>Debe <a ng-click=\"doQuickFix('fixIdentity')\">publicar une outra vez su identitat</a> para resolver este problema.",
+    "WALLET_REVOKED": "Su identitat fue <b>revocada</b>: ni su pseudònim ni su clau pública podrán estar utilizados en el futuro per una compte membre.",
+    "WALLET_HAS_NO_SELF": "Su identitat debe en primer lugar haber estado publicado, i no estar caducada.",
+    "AUTH_REQUIRED": "Autenticación requerida.",
+    "AUTH_INVALID_PUBKEY": "La clau pública no se corresponde con la compte conectada",
+    "AUTH_INVALID_SCRYPT": "De usuario o contraseña no válidos.",
+    "AUTH_INVALID_FILE": "arxiu de clau no válido.",
+    "AUTH_FILE_ERROR": "No se pudo abrir el arxiu de clau",
+    "IDENTITY_ALREADY_CERTIFY": "Ha <b>ya certificado</b> esta identitat.<br/><br/>Esta certificació todavía es valida (expiration {{expiresIn|formatDurationTo}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "Ha <b>ya certificado</b> esta identitat.<br/><br/>Esta certificació está en espera de tractament (fecha límite de tractament {{expiresIn|formatDurationTo}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Certificación imposible",
+    "LOAD_NEWCOMERS_FAILED": "No se pudo cargar las nuevas membresías.",
+    "LOAD_PENDING_FAILED": "No se pudo cargar las inscripciones pendents.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Debe <b>ser membre</b> para poder realizar esta acción.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Debe haber <b>publicado su identitat</b> para poder realizar esta acción.",
+    "GET_BLOCK_FAILED": "Error en la recuperación del bloc",
+    "INVALID_BLOCK_HASH": "Bloc no encontrado (hash diferente)",
+    "DOWNLOAD_REVOCATION_FAILED": "Debe seleccionar un fichero de texto",
+    "REVOCATION_FAILED": "Error en la revocación.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Frase secreta o contraseña incorrectos",
+    "RECOVER_ID_FAILED": "Error en la recuperación de les credenciales",
+    "LOAD_FILE_FAILED": "Error en la carga del arxiu",
+    "NOT_VALID_REVOCATION_FILE": "Archivo de revocación no válido (formato de arxiu erróneo)",
+    "NOT_VALID_SAVE_ID_FILE": "Archivo no válido (formato de arxiu erróneo)",
+    "NOT_VALID_KEY_FILE": "Archivo no válido (formato de arxiu erróneo)",
+    "EXISTING_ACCOUNT": "Sus credenciales corresponden a una compte existente, la <a ng-click=\"showHelpModal('pubkey')\">clau pública</a> es:",
+    "EXISTING_ACCOUNT_REQUEST": "Si us plau, cambie sus credenciales para que coincida con una compte sin usar.",
+    "GET_LICENSE_FILE_FAILED": "Error al obtenir el arxiu de llicència",
+    "CHECK_NETWORK_CONNECTION": "No se puede conectar a ningún nodo.<br/><br/><b>Compruebe la conexión a Internet</b>.",
+    "INVALID_FILE_FORMAT": "Formato de arxiu inválido.",
+    "SAME_TX_RECIPIENT": "El destinatario debe ser diferente del emisor."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Informació",
+    "CERTIFICATION_DONE": "Certificación enviada",
+    "NOT_ENOUGH_CREDIT": "Crédito insuficiente",
+    "TRANSFER_SENT": "Transferencia enviada",
+    "COPY_TO_CLIPBOARD_DONE": "Copia realizada",
+    "MEMBERSHIP_OUT_SENT": "Anulación enviada",
+    "NOT_NEED_MEMBERSHIP": "Ya es membre.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "Esta identitat pronto va a necesitar certificacions (al menos {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "Esta identitat no ha enviado una solicitud de membresía para convertirse en membre.",
+    "HAS_ALTERNATIVE_IDENTITIES": "Hay <b>identitates múltiples</b> adjuntas a esta clau pública. <b>Antes de cualquier certificació</b>, <a ng-click=\"doQuickFix('showSelectIdentities')\">verifique otras identitates</a> para elegir la correcta o comuníquese con el propietario de la compte.",
+    "REVOCATION_SENT": "Revocación enviada",
+    "REVOCATION_SENT_WAITING_PROCESS": "La <b>revocación de esta identitat</b> fue solicitada i está en espera de ser procesada.",
+    "FEATURES_NOT_IMPLEMENTED": "Esta funcionalidad todavía está en proceso de desarrollo.<br/><br/>¿Por qué no <b>contribuir a Cesium</b>, para obtenirla más rápido? ;)",
+    "EMPTY_TX_HISTORY": "Ninguna operación a exportar"
+  },
+  "CONFIRM": {
+    "EXIT_APP": "¿ Cerrar la aplicación ?",
+    "FULLSCREEN": "¿ Mostrar la aplicación en pantalla completa ?",
+    "ISSUE_524_SEND_LOG": "La transacció ha sido rechazada a causa de una anomalía conocida (ticket #524) pero todavía <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envío de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>.",
+    "POPUP_TITLE": "<b>Confirmación</b>",
+    "POPUP_WARNING_TITLE": "<b>Advertencia</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Advertencia de seguridad</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certificar {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">NO CERTIFICAR</b> una compte si piensa que:<br/><br/><ul><li>1.) no corresponde a un ser humano <b>físico i vivo</b>.<li>2.) su propietario/a <b>posee otra compte</b> ya certificada.<li>3.) su propietaria/o incumple (voluntariamente o no) la regla 1 o 2 (por ejemplo certificando comptes fantasmas o duplicadas).</ul><br/><b>¿Desea</b> todavía certificar esta identitat?",
+    "TRANSFER": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li></ul><br/><b>Desea realizar esta transferencia?</b>",
+    "TRANSFER_ALL": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li><br/><li> - Resto: <b>{{restAmount}} {{unit}}</b> para <b>{{restTo}}</b></li></ul><br/><b>¿Desea realizar esta transferencia?</b>",
+    "MEMBERSHIP_OUT": "Esta operación es <b>irreversible</b>.<br/></br/>¿Desea <b>anular su compte membre</b>?",
+    "MEMBERSHIP_OUT_2": "¡Esta operación es <b>irreversible</b>!<br/><br/>¿Desea <b>anular su candidatura</b> como membre?",
+    "LOGIN_UNUSED_WALLET_TITLE": "¿Error de introducción de dades?",
+    "LOGIN_UNUSED_WALLET": "Las credenciales introducidas corresponden a una compte que parece <b>inactiva</b>.<br/></br/><b>¿Quiere sin embargo continuar con esta compte?</b>",
+    "FIX_IDENTITY": "El pseudònim <b>{{uid}}</b> va a ser publicado de nuevo, en reemplazo del antiguo que caducó.<br/></br/><b>¿Desea</b> continuar?",
+    "FIX_MEMBERSHIP": "Su solicitud de adhesión como membre va a ser enviada de nuevo.<br/></br/><b>¿Desea</b> continuar?",
+    "MEMBERSHIP": "Se enviará su solicitud de membresía como membre.<br/></br/><b>¿Desea</b> continuar?",
+    "RENEW_MEMBERSHIP": "Su adhesión como membre va a estar renovada.<br/></br/><b>¿Desea</b> continuar?",
+    "REVOKE_IDENTITY": "Va a <b>revocar definitivamente esta identitat</b>.<br/><br/>La clau pública i el pseudònim asociados <b>jamás podrán ser utilizados</b> (para una compte membre). <br/><br/><b>¿Desea</b> revocar definitivamente esta compte?",
+    "REVOKE_IDENTITY_2": "¡Esta operación es <b>irreversible</b>!<br/><br/>¿Desea <b>revocar definitivamente</b> esta compte?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Su membresía no necesita ser renovada actualmente (caducará en {{membershipExpiresIn|formatDuration}}).<br/></br/><b>¿Confirma</b> querer renovar su membresía?",
+    "SAVE_BEFORE_LEAVE": "¿Desea <b>guardar sus cambios</b> antes de abandonar la página?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Cambios no registrados",
+    "LOGOUT": "¿Desea desconectarse?",
+    "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> inalcanzable o dirección inválida.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{new}}</b>?"
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Revocación del arxiu</b>",
+    "POPUP_REVOKE_MESSAGE": "Para proteger su compte, descargue el <b>documento de revocación de compte</b>. Le permitirá cancelar su compte (en caso de robo, cambio de identificadores, compte creada incorrectamente, etc.).<br/><br/><b>Si us plau, almacénelo en un lugar seguro.</b>"
+  },
+  "HELP": {
+    "TITLE": "Ayuda en línia",
+    "JOIN": {
+      "SECTION": "Inscripción",
+      "SALT": "La frase secreta es muy importante. Sirve para mezclar(<span class=\"text-italic\">hash</span>) la contraseña, antes de calcular la <span class=\"text-italic\">clau pública</span> (el número de compte) i la <span class=\"text-italic\">clau privada</span> para acceder a esta.<br/><b>Si us plau, memorícelo muy bien</b> porque no existe ninguna forma de recuperarlo en caso de pérdida.<br/>No puede ser modificado. Deberá crear una nueva compte si lo pierde o se olvida.<br/><br/>Una buena frase secreta debe ser suficientemente larga (al menos 8 carácteres) i lo más original posible.",
+      "PASSWORD": "La contraseña es muy importante. Junto a la frase secreta, sirve para calcular la clau pública (el número de compte), i la clau privada para acceder a ella.<br/><b>Si us plau, memorícela muy bien</b> porque no existe ninguna forma de recuperarla en caso de pérdida (excepto si se tuviese un fichero de respaldo o <span class=\"text-italic\">backup</span>.).<br/>No puede ser modificada. Deberá crear una nueva compte si la pierde o se olvida.<br/><br/>Una buena contraseña contiene al menos 8 carácteres, con al menos una mayúscula i un dígito.",
+      "PSEUDO": "El pseudònim se utiliza solamente en caso de inscripción como <span class=\"text-italic\">membre</span>. Siempre está asociado a un moneder (vía su <span class=\"text-italic\">clau pública</span>).<br/>Este se publica en la xarxa para que los demás usuarios puedan identificar, certificar o enviar dinero a la compte.<br/>Un pseudònim debe ser único para cada membre (actuales i antiguos)."
+    },
+    "LOGIN": {
+      "SECTION": "Autenticación",
+      "PUBKEY": "Clau pública",
+      "PUBKEY_DEF": "La clau pública del arxiu de claus es generada de les credenciales introducidas (cualquiera que sean), sin estar obligatoriamente vinculadas o contrastadas con ninguna compte ya usada. <br/><b>Asegúrese per lo tanto de que la clau pública es la misma con la que se creó originalmente su compte</b>. De lo contrario, se autogenerará una compte vacía que probablemente nunca ha sido usada, ya que el riesgo de coincidir con las credenciales de otra compte ajena es muy pequeño.<br/><a href=\"https://es.wikipedia.org/wiki/Criptograf%C3%ADa_de_curva_el%C3%ADptica\" target=\"_ system\">Conozca más sobre criptografía</a> con claus públicas.",
+      "METHOD": "Mètodes de connexió: de autenticación",
+      "METHOD_DEF": "Diversas opciones están disponibles para conectar a las comptes: <br/> - La conexión <b>con aleatoriedad (estándar o avanzada)</b> mezcla su contraseña con su frase secreta, para limitar las posibilidades de ataque<br/> - La conexión <b>usando clau pública</b> le permite entrar sin credenciales, las cuales solo se le pedirán cuando alguna operación lo necesite.<br/> - La conexión <b>usando arxiu de claus</b> leerá las clau pública i privada de la compte desde un arxiu sin necesitar sus credenciales. Varios formatos son posibles."
+    },
+    "GLOSSARY": {
+      "DISTANCE_RULE": "Regla de distància",
+      "DISTANCE_RULE_DEF": "La regle de distància de la Red de Confianza define <b>una distància màxima a respetar</b> entre una candidatura i número mínim membres referents (aquellos más conectados). Esta distància es calculada utilizando los enlaces de certificació.",
+      "WOT": "Red de Confianza (XdC)",
+      "WOT_DEF": "La Red de Confianza se compone del conjunto de membres de la moneda, i de los enlaces de certificacions que los conectan.",
+      "SECTION": "Glosario",
+      "PUBKEY_DEF": "Una clau pública identifica un moneder, que puede estar asociado a un membre o ser un moneder anónimo. En Cesium se calcula a partir de la frase secreta i la contraseña.",
+      "MEMBER": "Membre",
+      "MEMBER_DEF": "Cada membre es una ser humano físico i vivo, deseosa de participar libremente en la comunidad monetaria. Percibe un dividend universal, de acuerdo a un periodo e importe definido en las <span class=\"text-italic\">regles de la moneda</span>",
+      "CURRENCY_RULES": "Reglas de la moneda",
+      "CURRENCY_RULES_DEF": "Las regles de la moneda se han definido una vez i para siempre. Establecen el funcionamiento de la moneda: el càlcul del dividend universal, la cantidad de certificacions necessàrias para ser membre, la cantidad màxima de certificacions que cada membre puede emitir, etc. <a href=\"#/app/currency\">Ver las regles actuales</a>.<br/> Sus parámetros no pueden alterarse gracias a una <span class=\"text-italic\">Cadena de Blocs</span> que soporta, implementa i verifica la buena aplicación de estas regles.",
+      "BLOCKCHAIN": "Cadena de blocs (<span class=\"text-italic\">Blockchain</span>)",
+      "BLOCKCHAIN_DEF": "La cadena de blocs es un sistema descentralizado, que en el caso de Duniter, sirve para mantener e implementar las <span class=\"text-italic\">regles de la moneda</span>.<br/><a href=\"http://duniter.org\" target=\"_system\">Más información</a> acerca de Duniter i el funcionamiento de su cadena de blocs.",
+      "UNIVERSAL_DIVIDEND_DEF": "El Dividend Universal (DU) es la cantidad de moneda co-creada per cada membre, dependiendo del periodo i del càlcul definidos en las <span class=\"text-italic\">regles de la moneda</span>.<br/>En cada periodo, los membres reciben en sus comptes la misma cantidad de moneda.<br/><br/>El DU crece regularmente, para ser justo entre cada membre (actualmente i en el futuro), i calculado en función de la esperanza de vida media, como se demuestra en la <span class=\"text-italic\">Teoría Relativa de la Moneda</span> (TRM, de Stéphane Laborde).<br/><a href=\"http://trm.creationmonetaire.info\">Más información</a> sobre la TRM i las monedas libres."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "El menú <b>{{'MENU.CURRENCY'|translate}}</b> permite consultar las <b>regles de la moneda</b> i su estado.",
+      "CURRENCY_WOT": "El <b>número de membres</b> muestra el peso de la comunidad i permite <b>seguir su evolución</b>.",
+      "CURRENCY_MASS": "Siga aquí la <b>cantidad total de moneda</b> existente i su <b>distribución media</b> per membre.<br/><br/>Esto permite juzgar la <b>relevancia de un importe</b>, en relación con lo que <b>poseen los demás</b> en sus comptes (de media).",
+      "CURRENCY_UNIT_RELATIVE": "La unidad utilizada (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa que los importes en {{currency|capitalize}} han sido divididos entre el valor del <b>Dividend Universal</b> (DU).<br/><br/><small> Esta unidad relativa es <b>pertinente</b>, porque permanece estable, independiente de la cantidad de moneda que aumenta constantemente.</small>",
+      "CURRENCY_CHANGE_UNIT": "Este botón permite <b>cambiar la unidad</b>, para visualizar los importes <b>directamente en {{currency|capitalize}}</b> (en lugar de &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "Este botón permite <b>cambiar la unidad</b>, para visualizar los importes en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, es decir, relativo al Dividend Universal (el monto co-producido per cada membre).",
+      "CURRENCY_RULES": "Las <b>regles</b> de la moneda fijan su funcionamiento <b>exacto i previsible</b>.<br/><br/>Es el propio ADN de la moneda, que hace que su codi monetario sea <b>legible i transparente</b>.",
+      "MENU_BTN_NETWORK": "El menú <b>{{'MENU.NETWORK'|translate}}</b> permite consultar el estado de la red.",
+      "NETWORK_BLOCKCHAIN": "Todas las transaccions de la moneda están registradas dentro de un gran libro de contabilidad <b>público e infalsificable</b>, conocido como la <b>cadena de blocs</b> (<em>BlockChain</em> en inglés).",
+      "NETWORK_PEERS": "Los <b>nodes</b> visibles aquí corresponden a los <b>dispositivos de membres que actualizan i validan</b> la cadena de blocs.<br/><br/>Cuanto más nodes haya conectados, la moneda tendrá una gestión más <b>descentralizada</b> i digna de confiança.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "Este <b>número</b> (en verde) indica el <b>darrer bloc validado</b> per este nodo (última página escrita en la cadena de blocs).<br/><br/>El color verde indica que este bloc ha sido también validado per <b>la mayoría del resto de nodes</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Cada membre</b>, equipado de un dispositivo conectado a Internet, <b>puede contribuir añadiendo un nodo</b>.  Necesita <b>instalar el programa Duniter</b> (libre i gratuito). <a href=\"{{installDocUrl}}\" target=\"_system\">Ver manual de uso &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> permite acceder a la gestión i al historial de su compte.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Consulte aquí el estado de su compte i la información sobre sus certificacions.",
+      "WALLET_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus certificacions (rebudes i emeses).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus <b>certificacions rebudes</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus <b>certificacions emeses</b>.",
+      "WALLET_BALANCE": "El <b>saldo</b> de su compte se visualiza aquí.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>La unidad utilizada (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa que el importe en {{currency|capitalize}} fue dividido entre el <b>Dividend Universal</b> (DU) co-producido per cada membre.<br/><br/>Actualmente un DU vale {{currentUD|formatInteger}} {{currency|capitalize}}s.",
+      "WALLET_BALANCE_CHANGE_UNIT": "Podrá <b>cambiar la unidad</b> de visualización de los importes en los <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Por ejemplo, para visualizar los importes <b>directamente en {{currency|capitalize}}</b>, en lugar de unidad relativa.",
+      "WALLET_PUBKEY": "Esta es la clau pública de su compte. Puede comunicarla a un tercero para que pueda identificar su compte de forma simple.",
+      "WALLET_SEND": "Realizar un pago en algunos clics",
+      "WALLET_SEND_NO_MONEY": "Realizar un pago en algunos clics.<br/>(Su saldo ya no lo permite)",
+      "WALLET_OPTIONS": "Este botón permite acceder a las <b>acciones de adhesión</b> i de seguridad.<br/><br/>¡No olvide echar un vistazo!",
+      "WALLET_RECEIVED_CERTS": "Se exhibirá aquí la lista de individuo/as que le han certificado.",
+      "WALLET_CERTIFY": "El botón <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permite seleccionar una identitat i certificarla.<br/><br/>Solo quienes son <b>membres</b> pueden certificar a otros seres humanos.",
+      "WALLET_CERT_STOCK": "Su stock de certificacions (emeses) es limitado a <b>{{sigStock}} certificacions</b>.<br/><br/>Este stock se renueva con el temps, a medida que las certificacions caducan.",
+      "MENU_BTN_TX": "El menú <b>{{'MENU.TRANSACTIONS'|translate}}</b> permite consultar su saldo, el historial de transaccions i realizar nuevos pagos.",
+      "MENU_BTN_WALLETS": "El menú <b>{{'MENU.WALLETS'|translate}}</b> permite añadir moneders complementarios que usted maneja.",
+      "MENU_BTN_WOT": "El menú <b>{{'MENU.WOT'|translate}}</b> permite buscar <b>usuarios</b> de la moneda (membre o no).",
+      "WOT_SEARCH_TEXT_XS": "Para buscar en el directorio, escriba las <b>primeras letras de un pseudònim</b> (o de una clau pública).<br/><br/>La cerca se iniciará automàticamente.",
+      "WOT_SEARCH_TEXT": "Para buscar en el directorio, escriba las <b>primeras letras de un pseudònim</b> (o de una clau pública). <br/><br/>Luego, pulse en la tecla <b>Intro</b> para iniciar la cerca.",
+      "WOT_SEARCH_RESULT": "Visualice la ficha detallada <b>haciendo clic</b> sobre una fila.",
+      "WOT_VIEW_CERTIFICATIONS": "La opción <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> muestra qué membres han validado esta identitat.<br/><br/>Estas certificacions atestiguan que la compte pertany a <b>un ser humano vivo</b> i que no posee <b>ninguna otra compte membre</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "Necesita al menos <b>{{sigQty}} certificacions</b> para ser membre i recibir el <b>Dividend Universal</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Un clic aquí permite abrir <b>la lista de todas las certificacions</b> de la identitat (rebudes i emeses).",
+      "WOT_VIEW_CERTIFY": "El botón <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permite añadir su certificació a esta identitat.",
+      "CERTIFY_RULES": "<b>Atención:</b> Certifique solamente <b>seres humanos físicos vivos</b>, que no posean ya ninguna otra compte membre.<br/><br/>¡La seguridad de la xarxa de la moneda depende del cuidado de cada individuo/a!",
+      "MENU_BTN_SETTINGS": "En <b>{{'MENU.SETTINGS'|translate}}</b> podrá configurar la aplicación.",
+      "HEADER_BAR_BTN_PROFILE": "Haga clic aquí para acceder a su <b>perfil</b>",
+      "SETTINGS_CHANGE_UNIT": "Podrá <b>cambiar la unidad de visualización</b> de los importes haciendo clic aquí.<br/><br/>- Desactive la opción para mostrar los importes en {{currency|capitalize}}.<br/>- Actívela para importes relativos al {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (las cantidades de los importes se mostrarán <b>divididos</b> entre el Dividend Universal actual).",
+      "END_LOGIN": "¡La visita guiada ha <b>terminado</b>!<br/><br/>¡Buena suerte en este nuevo mundo de la <b>economía libre</b> !",
+      "END_NOT_LOGIN": "¡La visita guiada ha <b>terminado</b>!<br/><br/>Si quiere utilizar la moneda {{currency|capitalize}}, tiene que hacer un clic en <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> más abajo."
+    }
+  },
+  "API": {
+    "COMMON": {
+      "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Verifique su conexión a Internet, o contacte con la administración del sitio.</a>.",
+      "LINK_DOC": "Documentación API",
+      "LINK_DOC_HELP": "Documentación para desarrolladores",
+      "LINK_STANDARD_APP": "Versión clásica",
+      "LINK_STANDARD_APP_HELP": "Abrir la versión clásica de {{'COMMON.APP_NAME'|translate}}"
+    },
+    "DOC": {
+      "AVAILABLE_PARAMETERS": "Llista de parámetros disponibles :",
+      "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Cancelado per el usuario",
+      "DEMO_DIVIDER": "Probar",
+      "DEMO_HELP": "Para probar este servicio, haga clic en este botón. El resultado se mostrará debajo.",
+      "DEMO_RESULT": "Resultado retornado per la llamada :",
+      "DEMO_RESULT_PEER": "Dirección del nodo utilizado :",
+      "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> ¡ Éxito !",
+      "DESCRIPTION_DIVIDER": "Descripción",
+      "INTEGRATE_CODE": "Código :",
+      "INTEGRATE_DIVIDER": "Integrar",
+      "INTEGRATE_PARAMETERS": "Parámetros",
+      "INTEGRATE_RESULT": "Previsualización del resultado :",
+      "PARAMETERS_DIVIDER": "Parámetros",
+      "TRANSFER": {
+        "DESCRIPTION": "Desde una web (ej: tienda online) puede delegar el pago en moneda libre con la API de Cesium. Para eso, simplemente ponga un link a la siguiente dirección :",
+        "EXAMPLE_BUTTON": "Botón HTML",
+        "EXAMPLE_BUTTON_BG_COLOR": "Color de fondo",
+        "EXAMPLE_BUTTON_BG_COLOR_HELP": "Ejemplo : #fbc14c, black, lightgrey, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_DEFAULT_STYLE": "Estilo personalizado",
+        "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pagar en {{currency|currencySymbol}}",
+        "EXAMPLE_BUTTON_FONT_COLOR": "Color del texto",
+        "EXAMPLE_BUTTON_FONT_COLOR_HELP": "Ejemplo : black, orange, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium",
+        "EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter",
+        "EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Äž1 (negro)",
+        "EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Äž1",
+        "EXAMPLE_BUTTON_ICON_NONE": "Ninguno",
+        "EXAMPLE_BUTTON_TEXT_HELP": "Texto del botón",
+        "EXAMPLE_BUTTON_TEXT_ICON": "Icono",
+        "EXAMPLE_BUTTON_TEXT_WIDTH": "Anchura",
+        "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Ejemplo : 200px, 50%",
+        "EXAMPLES_HELP": "Ejemplos de integración :",
+        "PARAM_AMOUNT": "Cuantía",
+        "PARAM_AMOUNT_HELP": "Cuantía de la transición (obligatorio). Valores múltiples permitidos utilizando un separador (punto i coma, barra vertical o espacio).",
+        "PARAM_CANCEL_URL": "Dirección web de cancelación",
+        "PARAM_CANCEL_URL_HELP": "Dirección web (URL) en caso de anulación del pago per parte del usuario. Puede contener las siguientes palabras que serán remplazadas per sus valores dinámicamente en cada caso: \"{comment}\", \"{amount}\" i \"{pubkey}\".",
+        "PARAM_COMMENT": "Concepto (o comentario)",
+        "PARAM_COMMENT_HELP": "Concepto o comentario. Le permitirá per ejemplo identificar el pago en la cadena de blocs (blockchain).",
+        "PARAM_NAME": "Nombre (del destinatario o de su sitio web)",
+        "PARAM_NAME_HELP": "El nombre del destinatario, o de su sitio web. Puede ser un nombre leíble (\"Mi tienda en línia\"), o un dominio (\"Mitienda.com\").",
+        "PARAM_PREFERRED_NODE": "Dirección del nodo preferido",
+        "PARAM_PREFERRED_NODE_HELP": "Dirección (URL) del nodo Duniter a utilizar preferentmente (\"g1.domaine.com:443\" o \"https://g1.domaine.com\").",
+        "PARAM_PUBKEY": "Clau pública del destinatario",
+        "PARAM_PUBKEY_HELP": "La clau pública del destinatario (obligatoria)",
+        "PARAM_REDIRECT_URL": "Dirección web de redirección",
+        "PARAM_REDIRECT_URL_HELP": "Dirección web (URL) de redirección, llamada cuanda el pago ha sido enviado. Puede contener las palabras siguientes, que serán remplazadas per los valores de la transacció dinámicanente : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" i \"{node}\".",
+        "TITLE": "Pagos"
+      },
+      "URL_DIVIDER": "Dirección de llamada"
+    },
+    "HOME": {
+      "DOC_HEADER": "Servicios disponibles :",
+      "MESSAGE": "Bienvenido/a a la <b>documentación de la API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Conecte sus sitios webs a la cadena de blocs <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !",
+      "MESSAGE_SHORT": "Conecte sus sitios a <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !",
+      "TITLE": "Documentación API {{'COMMON.APP_NAME'|translate}}"
+    },
+    "TRANSFER": {
+      "AMOUNT": "Cuantía :",
+      "AMOUNTS_HELP": "Elija la cuantía :",
+      "COMMENT": "Concepto/Comentario de la operación :",
+      "DEMO": {
+        "BAD_CREDENTIALS": "Verifique sus credenciales.<br/>En modo demostración, las credenciales son : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}",
+        "HELP": "<b>Modo demostración</b> : Ningún pago será enviado realmente durante esta simulación.<br/>Utilice las credenciales : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
+        "PASSWORD": "demo",
+        "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
+        "SALT": "demo"
+      },
+      "ERROR": {
+        "TRANSFER_FAILED": "Error en el pago"
+      },
+      "INFO": {
+        "CANCEL_REDIRECTING": "Pago cancelado.<br/>Redirigiendo al sitio del vendedor...",
+        "CANCEL_REDIRECTING_WITH_NAME": "Pago cancelado.<br/>Redirigiendo a <b>{{name}}</b>...",
+        "SUCCESS_REDIRECTING": "Pago enviado.<br/>Redirigiendo al sitio del vendedor...",
+        "SUCCESS_REDIRECTING_WITH_NAME": "Pago enviado.<br/>Redirigiendo a <b>{{name}}</b>..."
+      },
+      "NAME": "Nombre :",
+      "NODE": "Dirección del nodo :",
+      "PUBKEY": "Clau pública del destinatario :",
+      "SUMMARY": "Resumen del pago :",
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} - Pago en línia",
+      "TITLE_SHORT": "Pago en línia"
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/en-2.0.0-alpha42.json b/ios/App/public/assets/i18n/en-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..fcdf4511ce70cc6d7e73ffb1442846fb91506df6
--- /dev/null
+++ b/ios/App/public/assets/i18n/en-2.0.0-alpha42.json
@@ -0,0 +1,953 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "build {{build}}",
+    "PUBKEY": "Public key",
+    "ADDRESS": "SS58 Address",
+    "MEMBER": "Member",
+    "BLOCK": "Block",
+    "BTN_OK": "OK",
+    "BTN_YES": "Yes",
+    "BTN_NO": "No",
+    "BTN_SEND": "Send",
+    "BTN_SEND_MONEY": "Transfer money",
+    "BTN_SEND_MONEY_SHORT": "Transfer",
+    "BTN_SAVE": "Save",
+    "BTN_YES_SAVE": "Yes, Save",
+    "BTN_YES_CONTINUE": "Yes, Continue",
+    "BTN_SHOW": "Show",
+    "BTN_SHOW_PUBKEY": "Show key",
+    "BTN_RELATIVE_UNIT": "Display amounts in UD?",
+    "BTN_BACK": "Back",
+    "BTN_NEXT": "Next",
+    "BTN_IMPORT": "Import",
+    "BTN_CANCEL": "Cancel",
+    "BTN_CLOSE": "Close",
+    "BTN_LATER": "Later",
+    "BTN_LOGIN": "Sign In",
+    "BTN_LOGOUT": "Logout",
+    "BTN_ADD_ACCOUNT": "New Account",
+    "BTN_SHARE": "Share",
+    "BTN_EDIT": "Edit",
+    "BTN_DELETE": "Delete",
+    "BTN_ADD": "Add",
+    "BTN_SEARCH": "Search",
+    "BTN_REFRESH": "Refresh",
+    "BTN_RETRY": "Retry",
+    "BTN_START": "Start",
+    "BTN_CONTINUE": "Continue",
+    "BTN_CREATE": "Create",
+    "BTN_UNDERSTOOD": "I understand",
+    "BTN_OPTIONS": "Options",
+    "BTN_HELP_TOUR": "Features tour",
+    "BTN_HELP_TOUR_SCREEN": "Discover this screen",
+    "BTN_DOWNLOAD": "Download",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Download account statement",
+    "BTN_MODIFY": "Modify",
+    "CHOOSE_FILE": "Drag your file<br/>or click to select",
+    "DAYS": "days",
+    "NO_ACCOUNT_QUESTION": "Not a member yet? Register now!",
+    "SEARCH_NO_RESULT": "No result found",
+    "LOADING": "Loading...",
+    "LOADING_WAIT": "Loading...<br/><small>(Waiting for node availability)</small>",
+    "SEARCHING": "Searching...",
+    "FROM": "From",
+    "TO": "To",
+    "COPY": "Copy",
+    "LANGUAGE": "Language",
+    "UNIVERSAL_DIVIDEND": "Universal dividend",
+    "UD": "UD",
+    "DATE_PATTERN": "MM/DD/YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "MM/DD/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(empty)",
+    "UID": "Pseudonym",
+    "ENABLE": "Enabled",
+    "DISABLE": "Disabled",
+    "RESULTS_LIST": "Results:",
+    "RESULTS_COUNT": "{{count}} results",
+    "EXECUTION_TIME": "executed in {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Display values openly?",
+    "POPOVER_ACTIONS_TITLE": "Options",
+    "POPOVER_FILTER_TITLE": "Filters",
+    "SHOW_MORE": "Show more",
+    "SHOW_MORE_COUNT": "(current limit at {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Share",
+      "SHARE_ON_TWITTER": "Share on Twitter",
+      "SHARE_ON_FACEBOOK": "Share on Facebook",
+      "SHARE_ON_DIASPORA": "Share on Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Share on Google+"
+    },
+    "FILE": {
+      "DATE": "Date:",
+      "TYPE": "Type:",
+      "SIZE": "Size:",
+      "VALIDATING": "Validating..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Choose source:",
+    "BTN_PICTURE_GALLERY": "Gallery",
+    "BTN_PICTURE_CAMERA": "<b>Camera</b>"
+  },
+  "MENU": {
+    "HOME": "Home",
+    "WOT": "Registry",
+    "CURRENCY": "Currency",
+    "ACCOUNT": "My Account",
+    "WALLETS": "My wallets",
+    "SETTINGS": "Settings",
+    "NETWORK": "Network",
+    "TRANSACTIONS": "My transactions"
+  },
+  "ABOUT": {
+    "TITLE": "About",
+    "LICENSE": "<b>Free/libre software</b> (License GNU AGPLv3).",
+    "LATEST_RELEASE": "There is a <b>newer version</ b> of {{'COMMON.APP_NAME' | translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Please update {{'COMMON.APP_NAME' | translate}} (latest version: <b>v{{version}}</b>)",
+    "CODE": "Source code:",
+    "OFFICIAL_WEB_SITE": "Official web site:",
+    "DEVELOPERS": "Developers:",
+    "FORUM": "Forum:",
+    "PLEASE_REPORT_ISSUE": "Please report any issue to us!",
+    "REPORT_ISSUE": "Report an issue",
+    "BTN_OPEN_DEV_WINDOW": "Open the debug window"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Welcome to the Cesium application!",
+    "WELCOME_READONLY": "Welcome to Cesium <span class='badge badge-balanced'>Monit</span> !",
+    "MESSAGE": "Receive and send libre currency {{currency}}",
+    "MESSAGE_READONLY": "Real-time monitoring of libre currency {{currency}}",
+    "BTN_CURRENCY": "Explore currency {{currency}}",
+    "BTN_ABOUT": "about",
+    "BTN_HELP": "Help",
+    "BTN_NETWORK": "Network status",
+    "FREE_SOFTWARE": "Free software",
+    "FORK_ME": "Fork me!",
+    "SHOW_LICENSE": "Show license",
+    "REPORT_ISSUE": "Report an issue",
+    "NOT_YOUR_ACCOUNT_QUESTION": "You do not own the account <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
+    "BTN_CHANGE_ACCOUNT": "Disconnect this account",
+    "CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or change node <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
+    "SHOW_ALL_FEED": "Show all",
+    "READ_MORE": "Read more",
+    "FEED_SOURCE": "Source"
+  },
+  "SETTINGS": {
+    "TITLE": "Settings",
+    "DISPLAY_DIVIDER": "Display",
+    "STORAGE_DIVIDER": "Storage",
+    "NETWORK_SETTINGS": "Network",
+    "PEER": "Duniter peer address",
+    "PEER_SHORT": "Peer address",
+    "PEER_CHANGED_TEMPORARY": "Address used temporarily",
+    "PERSIST_CACHE": "Keep navigation data (experimental)",
+    "PERSIST_CACHE_HELP": "Allows faster navigation, locally retaining the data received, for use from one session to another.",
+    "USE_LOCAL_STORAGE": "Enable local storage",
+    "USE_LOCAL_STORAGE_HELP": "Allows you to save your settings",
+    "WALLETS_SETTINGS": "My wallets",
+    "USE_WALLETS_ENCRYPTION": "Secure the list",
+    "USE_WALLETS_ENCRYPTION_HELP": "Enables you to encrypt the list of your wallets. Authentication required to access it.",
+    "ENABLE_HELPTIP": "Enable contextual help tips",
+    "DISABLE_HELPTIP": "Disable contextual help tips",
+    "ENABLE_UI_EFFECTS": "Enable visual effects",
+    "ENABLE_UI_EFFECTS_HELP": "Transition between pages, animation of list",
+    "HISTORY_SETTINGS": "Account operations",
+    "DISPLAY_UD_HISTORY": "Display produced dividends?",
+    "TX_HISTORY_AUTO_REFRESH": "Enable automatic refresh?",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Updates the list of operations to each new block.",
+    "AUTHENTICATION_SETTINGS": "Authentication",
+    "KEEP_AUTH": "Expiration of authentication",
+    "KEEP_AUTH_SHORT": "Expiration",
+    "KEEP_AUTH_HELP": "Define when authentication is cleared from memory.",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "After each operation",
+      "SECONDS": "After {{value}}s of inactivity",
+      "MINUTE": "After {{value}}min of inactivity",
+      "MINUTES": "After {{value}}min of inactivity",
+      "HOUR": "After {{value}}h of inactivity",
+      "ALWAYS": "At the end of the session"
+    },
+    "KEYRING_FILE": "Keyring file",
+    "KEYRING_FILE_HELP": "Allow auto-connect at startup, or to authenticate (only if \"Expiration of authentication\" is \"at the end of the session\"",
+    "REMEMBER_ME": "Remember me ?",
+    "REMEMBER_ME_HELP": "Allows to remain identified from one session to another, keeping the public key locally.",
+    "PLUGINS_SETTINGS": "Extensions",
+    "BTN_RESET": "Restore default values",
+    "EXPERT_MODE": "Enable expert mode",
+    "EXPERT_MODE_HELP": "Allow to see more details",
+    "BLOCK_VALIDITY_WINDOW": "Block uncertainty time",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Time of uncertainty",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Time to wait before considering an information is validated",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "No delay",
+      "N": "{{time | formatDuration}} ({{count}} blocks)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Duniter peer",
+      "HOST": "Address",
+      "HOST_HELP": "Address: server:port",
+      "USE_SSL": "Secured?",
+      "USE_SSL_HELP": "(SSL Encryption)",
+      "BTN_SHOW_LIST": "Peer's list"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Block #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Current block",
+      "TITLE": "Block #{{number|formatInteger}}",
+      "COMPUTED_BY": "Computed by",
+      "SHOW_RAW": "Show raw data",
+      "TECHNICAL_DIVIDER": "Technical informations",
+      "VERSION": "Format version",
+      "HASH": "Computed hash",
+      "UNIVERSAL_DIVIDEND_HELP": "Money co-produced by each of the {{membersCount}} members",
+      "EMPTY": "Aucune donnée dans ce bloc",
+      "POW_MIN": "Minimal difficulty",
+      "POW_MIN_HELP": "Difficulty imposed in calculating hash",
+      "DATA_DIVIDER": "Data",
+      "IDENTITIES_COUNT": "New identities",
+      "JOINERS_COUNT": "Joiners",
+      "ACTIVES_COUNT": "Renewals",
+      "ACTIVES_COUNT_HELP": "Members having renewed their membership",
+      "LEAVERS_COUNT": "Leavers",
+      "LEAVERS_COUNT_HELP": "Members that now refused certification",
+      "EXCLUDED_COUNT": "Excluded members",
+      "EXCLUDED_COUNT_HELP": "Old members, excluded because missing membreship renewal or certifications",
+      "REVOKED_COUNT": "Revoked identities",
+      "REVOKED_COUNT_HELP": "These accounts may no longer be member",
+      "TX_COUNT": "Transactions",
+      "CERT_COUNT": "Certifications",
+      "TX_TO_HIMSELF": "Change",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Unlock conditions",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "and",
+        "OR": "or"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Sign</b> of the public key",
+        "XHX": "<b>Password</b>, including SHA256 =",
+        "CSV": "Blocked during",
+        "CLTV": "Bloqué until"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blocks",
+      "NO_BLOCK": "No bloc",
+      "LAST_BLOCKS": "Last blocks:",
+      "BTN_COMPACT": "Compact"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Currency",
+      "TAB_CURRENCY": "Currency",
+      "TAB_WOT": "Web of trust",
+      "TAB_NETWORK": "Network",
+      "TAB_BLOCKS": "Blocks",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency|capitalize}} is a <b>libre money</b>, started {{firstBlockTime | formatFromNow}}. It currently counts <b>{{N}} members </b>, who produce and collect a <a ng-click=\"showHelpModal('ud')\">Universal Dividend</a> (DU), each {{dt | formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Network rules",
+      "CURRENCY_NAME": "Currency name",
+      "MEMBERS": "Members count",
+      "MEMBERS_VARIATION": "Variation since {{duration|formatDuration}} (since last UD)",
+      "MONEY_DIVIDER": "Money",
+      "MASS": "Monetary mass",
+      "SHARE": "Money share",
+      "UD": "Universal Dividend",
+      "C_ACTUAL": "Current growth",
+      "MEDIAN_TIME": "Current blockchain time",
+      "POW_MIN": "Common difficulty",
+      "MONEY_RULES_DIVIDER": "Rules of currency",
+      "C_RULE": "Theoretical growth target",
+      "UD_RULE": "Universal dividend (formula)",
+      "DT_REEVAL": "Period between two re-evaluation of the UD",
+      "REEVAL_SYMBOL": "reeval",
+      "DT_REEVAL_VALUE": "Every <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Date of first reevaluation of the UD",
+      "SIG_QTY_RULE": "Required number of certifications to become a member",
+      "SIG_STOCK": "Maximum number of certifications sent by a member",
+      "SIG_PERIOD": "Minimum delay between 2 certifications sent by one and the same issuer.",
+      "SIG_WINDOW": "Maximum delay before a certification will be treated",
+      "SIG_VALIDITY": "Lifetime of a certification that has been treated",
+      "MS_WINDOW": "Maximum delay before a pending membership will be treated",
+      "MS_VALIDITY": "Lifetime of a membership that has been treated",
+      "STEP_MAX": "Maximum distance between a newcomer and each referring members.",
+      "WOT_RULES_DIVIDER": "Rules for web of trust",
+      "SENTRIES": "Required number of certifications (given <b>and</b> received) to become a referring member",
+      "SENTRIES_FORMULA": "Required number of certifications to become a referring member (formula)",
+      "XPERCENT": "Minimum percent of referring member to reach to match the distance rule",
+      "AVG_GEN_TIME": "The average time between 2 blocks",
+      "CURRENT": "current",
+      "MATH_CEILING": "CEILING",
+      "DISPLAY_ALL_RULES": "Display all rules?",
+      "BTN_SHOW_LICENSE": "Show license",
+      "WOT_DIVIDER": "Web of trust"
+    },
+    "LICENSE": {
+      "TITLE": "Currency license",
+      "BTN_DOWNLOAD": "Download file",
+      "NO_LICENSE_FILE": "License file not found."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Blockchain time",
+      "LOADING_PEERS": "Loading peers...",
+      "NODE_ADDRESS": "Address:",
+      "SOFTWARE": "Software:",
+      "WARN_PRE_RELEASE": "Pre-release (latest stable: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Version <b>{{version}}</b> available",
+      "WS2PID": "Identifier:",
+      "PRIVATE_ACCESS": "Private access",
+      "POW_PREFIX": "Proof of work prefix:",
+      "ENDPOINTS": {
+        "BMAS": "Secure endpoint (SSL)",
+        "BMATOR": "TOR endpoint",
+        "WS2P": "WS2P endpoint",
+        "ES_USER_API": "Cesium+ data node"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "Non-SSL nodes have a degraded display because Cesium works in HTTPS mode."
+    }
+  },
+  "PEER": {
+    "PEERS": "Peers",
+    "SIGNED_ON_BLOCK": "Signed on block",
+    "MIRROR": "mirror",
+    "MIRRORS": "Mirrors",
+    "MIRROR_PEERS": "Mirror peers",
+    "PEER_LIST": "Peer's list",
+    "MEMBERS": "Members",
+    "MEMBER_PEERS": "Member peers",
+    "ALL_PEERS": "All peers",
+    "DIFFICULTY": "Difficulty",
+    "API": "API",
+    "CURRENT_BLOCK": "Block #",
+    "POPOVER_FILTER_TITLE": "Filter",
+    "OFFLINE": "Offline",
+    "OFFLINE_PEERS": "Offline peers",
+    "BTN_SHOW_PEER": "Show peer",
+    "VIEW": {
+      "TITLE": "Peer",
+      "OWNER": "Owned by ",
+      "SHOW_RAW_PEERING": "See peering document",
+      "SHOW_RAW_CURRENT_BLOCK": "See current block (raw format)",
+      "LAST_BLOCKS": "Last blocks",
+      "KNOWN_PEERS": "Known peers :",
+      "GENERAL_DIVIDER": "General information",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Could not get peer data, using the TOR network.",
+        "LOADING_NODE_ERROR": "Could not get peer data"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Search (member or public key)",
+    "SEARCH_INIT_PHASE_WARNING": "During the pre-registration phase, the search for pending registrations <b>may be long</b>. Please wait ...",
+    "REGISTERED_SINCE": "Registered on",
+    "REGISTERED_SINCE_BLOCK": "Registered since block #",
+    "NO_CERTIFICATION": "No validated certification",
+    "NO_GIVEN_CERTIFICATION": "No given certification",
+    "NOT_MEMBER_PARENTHESIS": "(non-member)",
+    "IDENTITY_UNCONFIRMED": "Identity <b>not confirmed</b> (non membre)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identity revoked)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(being revoked)",
+    "EXPIRE_IN": "Expires",
+    "NOT_WRITTEN_EXPIRE_IN": "Deadline<br/>treatment",
+    "EXPIRED": "Expired",
+    "PSEUDO": "Pseudonym",
+    "SIGNED_ON_BLOCK": "Emitted on block #{{block}}",
+    "WRITTEN_ON_BLOCK": "Written on block #{{block}}",
+    "GENERAL_DIVIDER": "General information",
+    "NOT_MEMBER_ACCOUNT": "Non-member account",
+    "NOT_MEMBER_ACCOUNT_HELP": "This is a simple wallet, with no pending membership application.",
+    "TECHNICAL_DIVIDER": "Technical data",
+    "BTN_CERTIFY": "Certify",
+    "BTN_YES_CERTIFY": "Yes, certify",
+    "BTN_SELECT_AND_CERTIFY": "New certification",
+    "ACCOUNT_OPERATIONS": "Account operations",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identity {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Registry",
+      "NEWCOMERS": "New members:",
+      "NEWCOMERS_COUNT": "{{count}} members",
+      "PENDING": "Pending registrations:",
+      "PENDING_COUNT": "{{count}} pending registrations",
+      "REGISTERED": "Registered {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Member since {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Latest members",
+      "BTN_PENDING": "Pending registrations",
+      "SHOW_MORE": "Show more",
+      "SHOW_MORE_COUNT": "(current limit to {{limit}})",
+      "NO_PENDING": "No pending registrations.",
+      "NO_NEWCOMERS": "No members."
+    },
+    "CONTACTS": {
+      "TITLE": "Contacts"
+    },
+    "MODAL": {
+      "TITLE": "Search"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications",
+      "SUMMARY": "Received certifications",
+      "LIST": "Details of received certifications",
+      "PENDING_LIST": "Pending certifications",
+      "RECEIVED": "Received certifications",
+      "RECEIVED_BY": "Certifications received by {{uid}}",
+      "ERROR": "Received certifications in error",
+      "SENTRY_MEMBER": "Referring member"
+    },
+    "OPERATIONS": {
+      "TITLE": "Operations"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications sent",
+      "SUMMARY": "Sent certifications",
+      "LIST": "Details of sent certifications",
+      "PENDING_LIST": "Pending certifications",
+      "SENT": "Sent certifications",
+      "SENT_BY": "Certifications sent by {{uid}}",
+      "ERROR": "Sent certifications with error"
+    },
+    "STATUS_ENUM": {
+      "MEMBER": "Member",
+      "NOTMEMBER": "Not member",
+      "REMOVED": "Not member",
+      "REVOKED": "Revoked identity",
+      "UNCONFIRMED": "Unconfirmed identity",
+      "UNVALIDATED": "Waiting validation"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-log-in\"></i> Login",
+    "SCRYPT_FORM_HELP": "Please enter your credentials. <br> Remember to check the public key for your account.",
+    "PUBKEY_FORM_HELP": "Please enter a public account key:",
+    "FILE_FORM_HELP": "Choose the keychain file to use:",
+    "SCAN_FORM_HELP": "Scan the QR code of a wallet.",
+    "SALT": "Secret identifier",
+    "SALT_HELP": "Secret identifier",
+    "SHOW_SALT": "Display secret identifier?",
+    "PASSWORD": "Password",
+    "PASSWORD_HELP": "Password",
+    "PUBKEY_HELP": "Public key or pseudonym",
+    "MNEMONIC": "Mnemonic phrase",
+    "NO_ACCOUNT_QUESTION": "Don't have an account yet?",
+    "HAVE_ACCOUNT_QUESTION": "Already have an account ?",
+    "CREATE_ACCOUNT": "Create an account",
+    "CREATE_FREE_ACCOUNT": "Create a free account",
+    "FORGOTTEN_ID": "Forgot password?",
+    "ASSOCIATED_PUBKEY": "Public key :",
+    "BTN_METHODS": "Other methods",
+    "BTN_METHODS_DOTS": "Change method...",
+    "METHOD_POPOVER_TITLE": "Connection methods",
+    "MEMORIZE_AUTH_FILE": "Memorize this keychain during the navigation session",
+    "SCRYPT_PARAMETERS": "Paramètres (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Information",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> You were <b>logout</ b> automatically, due to prolonged inactivity.",
+      "BTN_RELOGIN": "Sign In",
+      "IDLE_WARNING": "You will be logout... {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Secret identifier and password",
+      "SCRYPT_ADVANCED": "Advanced salt",
+      "FILE": "Keychain file",
+      "PUBKEY": "Public key or pseudonym",
+      "ADDRESS": "SS58 Address",
+      "SCAN": "Scan a QR code",
+      "MNEMONIC": "Mnemonic phrase"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Light salt",
+      "DEFAULT": "Standard salt",
+      "SECURE": "Secure salt",
+      "HARDEST": "Hardest salt",
+      "EXTREME": "Extreme salt",
+      "USER": "Personal value",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Expected file format: <b>.dunikey</b> (type PubSec). Other formats are under development (EWIF, WIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Authentication",
+    "BTN_AUTH": "Authenticate",
+    "GENERAL_HELP": "Please authenticate yourself:",
+    "EXPECTED_UID_HELP": "Please authenticate to the account <i class=\"ion-person\"></i> {{uid}}:",
+    "EXPECTED_PUBKEY_HELP": "Please authenticate to the wallet <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}:",
+    "SCAN_FORM_HELP": "Scan the QR code of the <b>private key</b> of the wallet."
+  },
+  "ACCOUNT": {
+    "TITLE": "My Account",
+    "BALANCE": "Balance",
+    "LAST_TX": "Latest validated transactions",
+    "BALANCE_ACCOUNT": "Account balance",
+    "NO_TX": "No transaction",
+    "SHOW_MORE_TX": "Show more",
+    "SHOW_ALL_TX": "Show all",
+    "TX_FROM_DATE": "(current limit to {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Pending transactions",
+    "VALIDATING_TX": "Transactions being validated",
+    "ERROR_TX": "Transaction not executed",
+    "ERROR_TX_SENT": "Sent transactions",
+    "PENDING_TX_RECEIVED": "Transactions awaiting receipt",
+    "EVENTS": "Events",
+    "OUT_DISTANCED": "Your current certifications come from a group too isolated from the <a ng-click=\"showHelpModal('wot')\"> Web of Trust</a> (WoT): the <a ng-click=\"showHelpModal('distance_rule')\">maximum distance rule</a> is violated.<br/>You must obtain certifications from another area of the Web of Trust, or wait for it to tighten.",
+    "WAITING_MEMBERSHIP": "Membership application sent. Waiting validation.",
+    "WAITING_CERTIFICATIONS": "You need {{needCertificationCount}} certification(s) to become a member and produce the <a ng-click=\"showHelpModal('ud')\">Universal Dividend</a>. Your account is however already operational, to receive and send payments.",
+    "WAITING_CERTIFICATIONS_HELP": "To get your certifications, only request members <b>who know you enough</b>, as required by <a ng-click=\"showLicenseModal()\">the currency license</a> that you have accepted.<br/>If you do not know enough members, let them know on <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">the user forum</a>.",
+    "WILL_MISSING_CERTIFICATIONS": "You will <b>lack certifications</b> soon (at least {{willNeedCertificationCount}} more are needed)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a> before then.",
+    "NEED_RENEW_MEMBERSHIP": "You are no longer a member because your membership <b>has expired</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "You are no longer a member because your membership <b>has been canceled</b> for lack of certifications. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
+    "NO_WAITING_MEMBERSHIP": "No membership application pending. If you'd like to <b>become a member</ b>, please <a ng-click=\"doQuickFix('membership')\">send the membership application</a>.",
+    "CERTIFICATION_COUNT": "Received certifications",
+    "CERTIFICATION_COUNT_SHORT": "Certifications",
+    "SIG_STOCK": "Stock of certifications to give",
+    "BTN_CONFIRM_MEMBERSHIP": "Confirm membership",
+    "BTN_RECEIVE_MONEY": "Receive",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Switch to another identity...",
+    "BTN_FIX_MEMBERSHIP": "Resubmit membership request...",
+    "BTN_MEMBERSHIP_RENEW": "Renew membership",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Renew membership...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
+    "BTN_SECURITY_DOTS": "Sign-in and security...",
+    "BTN_SHOW_DETAILS": "Display technical data",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Locked amount",
+      "DESCRIPTION": "Here are the conditions for unlocking this amount:",
+      "DESCRIPTION_MANY": "This transaction consists of several parts, of which the unlock conditions are:",
+      "LOCKED_AMOUNT": "Conditions for the amount:"
+    },
+    "NEW": {
+      "TITLE": "Registration",
+      "INTRO_WARNING_TIME": "Creating an account on {{name|capitalize}} is very simple. Please take sufficient time to do this correctly (not to forget the usernames, passwords, etc.).",
+      "INTRO_WARNING_SECURITY": "Check that the hardware you are currently using (computer, tablet, phone) <b>is secure and trustworthy </b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Up-to-date anti-virus, firewall enabled, session protected by password or pin code...",
+      "INTRO_HELP": "Click <b> {{'COMMON.BTN_START'|translate}}</b> to begin creating an account. You will be guided step by step.",
+      "REGISTRATION_NODE": "Your registration will be registered via the Duniter peer <b>{{server}}</b> node, which will then be distributed to the rest of the currency network.",
+      "REGISTRATION_NODE_HELP": "If you do not trust this peer, please change <a ng-click=\"doQuickFix('settings')\">in the settings</a> of Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Choose the type of account to create:",
+      "MEMBER_ACCOUNT": "Member account",
+      "MEMBER_ACCOUNT_TITLE": "Create a member account",
+      "MEMBER_ACCOUNT_HELP": "You know enough about libre money and want to participate in its production?<br/>As an individual, you can create your member account (only one per individual). This works like a simple wallet account, but also allows you to co-produce the money, by <b>receiving for each {{parameters.dt|formatPeriod}} a universal dividend</b>: it's then up to you to put to good use!",
+      "WALLET_ACCOUNT": "Simple wallet",
+      "WALLET_ACCOUNT_TITLE": "Create a wallet",
+      "WALLET_ACCOUNT_HELP": "Are you <b>new to libre money</b>? You need an additional account?<br/>This type of account will suit you. Although it does not co-produce the money (unlike a member account - see below), you will be able to receive and send payments there, as soon as registration is complete.<br/>If necessary, you can convert it into a member account later.",
+      "SALT_WARNING": "Choose a secret identifier.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this identifier</b>.<br/>If lost, there are no means to retrieve it!",
+      "PASSWORD_WARNING": "Choose a password.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this password</b>.<br/>If lost, there are no means to retrieve it!",
+      "PSEUDO_WARNING": "Choose a pseudonym.<br/>It may be used by other people to find you more easily.<br/><br/>.Use of <b>commas, spaces and accents</b> is not allowed.<br/><div class='hidden-xs'><br/>Example: <span class='gray'>JohnDalton, JackieChan, etc.</span>",
+      "PSEUDO": "Pseudonym",
+      "PSEUDO_HELP": "joe123",
+      "SALT_CONFIRM": "Confirm",
+      "SALT_CONFIRM_HELP": "Confirm the secret identifier",
+      "PASSWORD_CONFIRM": "Confirm",
+      "PASSWORD_CONFIRM_HELP": "Confirm the password",
+      "SLIDE_6_TITLE": "Confirmation:",
+      "COMPUTING_PUBKEY": "Computing...",
+      "LAST_SLIDE_CONGRATULATION": "You completed all required fields.<br/><b>You can send the account creation request</b>.<br/><br/>For information, the public key below identifies your future account.<br/>It can be communicated to third parties to receive their payment.<br/>Once your account has been approved, you can find this key under <b>{{'ACCOUNT.TITLE'|translate}}</b>.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Warning:</b> your secret identifier, password and pseudonym can not be changed.<br/><b>Make sure you always remember it!</b><br/><b>Are you sure</b> you want to send this account creation request?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Warning:</b> your password and pseudonym can not be changed.<br/><b>Make sure you always remember it!</b><br/><b>Are you sure</b> you want to continue?",
+      "CHECKING_PSEUDO": "Checking...",
+      "PSEUDO_AVAILABLE": "This pseudonym is available",
+      "PSEUDO_NOT_AVAILABLE": "This pseudonym is not available",
+      "INFO_LICENSE": "To be able to adhere to the currency, we ask you to kindly read and accept this license.",
+      "BTN_ACCEPT": "I accept",
+      "BTN_ACCEPT_LICENSE": "I accept the license"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Enter a pseudonym",
+      "HELP": "A pseudonym is needed to let other members find you."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Identity selection",
+      "HELP": "Several <b>different identities</b> have been sent, for the public key <span class=\"gray\"> <i class=\"ion-key\"></i> {{pubkey | formatPubkey}}</span>.<br/>Please select the identity to use:"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Wallet selection"
+    },
+    "WALLET_LIST": {
+      "TITLE": "My wallets",
+      "BTN_NEW": "Add a wallet",
+      "BTN_NEW_DOTS": "Add a wallet...",
+      "BTN_DOWNLOAD": "Download the list",
+      "BTN_IMPORT_FILE_DOTS": "Import from a file...",
+      "NO_WALLET": "No secondary wallet",
+      "BTN_DELETE": "Remove a secondary wallet...",
+      "BTN_RENAME": "Rename the wallet",
+      "EXPORT_FILENAME": "my_wallets-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Total: ",
+      "EDIT_POPOVER": {
+        "TITLE": "Rename the wallet",
+        "HELP": "Fill in the new name",
+        "NAME_HELP": "Wallet name"
+      },
+      "IMPORT_MODAL": {
+        "TITLE": "Import secondary wallets",
+        "HELP": "To <b>import secodnary wallets</b>, please drag the file in the box below, or click in the box to search for a file.",
+        "WALLET_COUNT": "<b>{{count}}</b> new wallet{{count > 1 ? 's' : ''}}",
+        "NO_NEW_WALLET": "No new wallet"
+      }
+    },
+    "SECURITY": {
+      "ADD_QUESTION": "Add custom question",
+      "BTN_CLEAN": "Clean",
+      "BTN_RESET": "Reset",
+      "DOWNLOAD_REVOKE": "Save a revocation file",
+      "DOWNLOAD_REVOKE_HELP": "Having a revocation file is important, for example in case of loss of identifiers. It allows you to <b>get this account out of the Web Of Trust</b>, thus becoming a simple wallet.",
+      "GENERATE_KEYFILE": "Generate my keychain file ...",
+      "GENERATE_KEYFILE_HELP": "Generate a file allowing you to authenticate without entering your identifiers.<br/><b>Warning:</b> this file will contain your secret key; It is therefore very important to put it in a safe place!",
+      "KEYFILE_FILENAME": "keychain-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Register as member...",
+      "MEMBERSHIP_IN_HELP": "Allows you to <b>transform </b> a simple wallet account <b>into a member account</b>, by sending a membership request. Useful only if you do not already have another member account.",
+      "SEND_IDENTITY": "Publish identity...",
+      "SEND_IDENTITY_HELP": "Allows you to associate a pseudonym to this account, but <b>without applying for membership</b> to become a member. This is not very useful because the validity of this pseudonym association is limited in time.",
+      "HELP_LEVEL": "Choose <strong> at least {{nb}} questions </strong> :",
+      "LEVEL": "Security level",
+      "LOW_LEVEL": "Low <span class=\"hidden-xs\">(2 questions minimum)</span>",
+      "MEDIUM_LEVEL": "Medium <span class=\"hidden-xs\">(4 questions minimum)</span>",
+      "QUESTION_1": "What was your best friend's name when you were a teen ?",
+      "QUESTION_2": "What was the name of your first pet ?",
+      "QUESTION_3": "What is the first meal you have learned to cook ?",
+      "QUESTION_4": "What is the first movie you saw in the cinema?",
+      "QUESTION_5": "Where did you go the first time you flew ?",
+      "QUESTION_6": "What was your favorite elementary school teacher's name  ?",
+      "QUESTION_7": "What would you consider the ideal job ?",
+      "QUESTION_8": "Which children's book do you prefer?",
+      "QUESTION_9": "What was the model of your first vehicle?",
+      "QUESTION_10": "What was your nickname when you were a child ?",
+      "QUESTION_11": "What was your favorite movie character or actor when you were a student ?",
+      "QUESTION_12": "What was your favorite singer or band when you were a student ?",
+      "QUESTION_13": "In which city did your parents meet ?",
+      "QUESTION_14": "What was the name of your first boss ?",
+      "QUESTION_15": "What is the name of the street where you grew up ?",
+      "QUESTION_16": "What is the name of the first beach where you go swim ?",
+      "QUESTION_17": "QWhat is the first album you bought ?",
+      "QUESTION_18": "What is the name of your favorite sport team ?",
+      "QUESTION_19": "What was your grand-father's job ?",
+      "RECOVER_ID": "Recover my password...",
+      "RECOVER_ID_HELP": "If you have a <b>backup file of your identifiers</b>, you can find them by answering your personal questions correctly.",
+      "RECOVER_ID_SELECT_FILE": "Select the <b>backup file of your identifiers</b> to use:",
+      "REVOCATION_WITH_FILE": "Revoke my member account...",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "If you have <b>permanently lost your member account credentials (or if account security is compromised), you can use <b>the revocation file</b> of the account <b>to quit the Web Of Trust</b>.",
+      "REVOCATION_WITH_FILE_HELP": "To <b>permanently revoke</ b> a member account, please drag the revocation file in the box below, or click in the box to search for a file.",
+      "REVOCATION_WALLET": "Revoke this account immediately",
+      "REVOCATION_WALLET_HELP": "Requesting revocation of your identity causes <b>will revoke your membership</ b> (definitely for the associated pseudonym and public key). The account will no longer be able to produce a Universal Dividend.<br/>However, you can still use it as a simple wallet.",
+      "REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "SAVE_ID": "Save my credentials...",
+      "SAVE_ID_HELP": "Creating a backup file, to <b>retrieve your password</b> (and the secret identifier) <b> in case of forgetting</b>. The file is <b>secured</ b> (encrypted) using personal questions.",
+      "STRONG_LEVEL": "Strong <span class=\"hidden-xs \">(6 questions minimum)</span>",
+      "TITLE": "Account and security",
+      "KEYFILE": {
+        "PUBSEC_FORMAT": "PubSec format.",
+        "PUBSEC_FORMAT_HELP": "This file format is compatible in particular with Cesium and Gannonce. Your keychain is stored <b>without encryption</b>: anyone with a copy of this file will be able to empty your account.",
+        "WIF_FORMAT": "Wallet Import Format (WIF)",
+        "WIF_FORMAT_HELP": "This format is used in particular by paper wallets. Your keychain is stored <b>without encryption</b>: anyone with a copy of this file will be able to empty your account.",
+        "EWIF_FORMAT": "Encrypted Wallet Import Format (WIF)",
+        "EWIF_FORMAT_HELP": "This format is used in particular by paper wallets. However, <b>the keychain is encrypted</b> from a passphrase of your choice.",
+        "PASSWORD_POPUP": {
+          "TITLE": "Keychain file encrypted",
+          "HELP": "Please enter the passphrase:",
+          "PASSWORD_HELP": "Passphrase"
+        },
+        "ERROR": {
+          "BAD_PASSWORD": "Bad passphrase",
+          "BAD_CHECKSUM": "Bad checksum"
+        }
+      }
+    },
+    "FILE_NAME": "{{currency}} - Account statement {{pubkey|formatPubkey}} to {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Date",
+      "AMOUNT": "Amount",
+      "COMMENT": "Comment"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Transfer",
+    "SUB_TITLE": "Transfer money",
+    "SUB_TITLE_ALL": "Empty the account",
+    "FROM": "From",
+    "TO": "To",
+    "AMOUNT": "Amount",
+    "AMOUNT_HELP": "Amount",
+    "COMMENT": "Comment",
+    "COMMENT_HELP": "Comment (optional)",
+    "FEE": "+{{fee}} {{currency}} fees",
+    "BTN_SEND": "Send",
+    "BTN_ADD_COMMENT": "Add a comment",
+    "REST": "Rest of account",
+    "REST_TO": "to",
+    "WARN_COMMENT_IS_PUBLIC": "Please note that <b>comments are public</b> (not encrypted).",
+    "BTN_SCAN_HELP": "Scan a QR Code",
+    "BTN_QR_CODE": "QR Code",
+    "QR_CODE_HELP": "Ask the recipient to flash this code. They can then deposit the payment later, whenever they want.",
+    "MODAL": {
+      "TITLE": "Transfer"
+    }
+  },
+  "ERROR": {
+    "UNKNOWN_URI_FORMAT": "Unknown URI format",
+    "PUBKEY_INVALID_CHECKSUM": "Invalid public key (bad checksum).",
+    "POPUP_TITLE": "Error",
+    "UNKNOWN_ERROR": "Unknown error",
+    "CRYPTO_UNKNOWN_ERROR": "Your browser is not compatible with cryptographic features.",
+    "DOWNLOAD_KEYFILE_FAILED": "Failed to generate the keychain file.",
+    "EQUALS_TO_PSEUDO": "Must be different from pseudonym",
+    "EQUALS_TO_SALT": "Must be different from secret identifier",
+    "FIELD_REQUIRED": "This field is required.",
+    "FIELD_TOO_SHORT": "This field value is too short.",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Value is too short (min {{minLength]] characters).",
+    "FIELD_TOO_LONG": "Value is exceeding max length.",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Value is too long (max {{maxLength}} characters).",
+    "FIELD_MIN": "Minimum value: {{min}}",
+    "FIELD_MAX": "Maximal value: {{max}}",
+    "FIELD_ACCENT": "Commas and accent characters not allowed",
+    "FIELD_NOT_NUMBER": "Value is not a number",
+    "FIELD_NOT_INT": "Value is not an integer",
+    "FIELD_NOT_EMAIL": "Email adress not valid",
+    "PASSWORD_NOT_CONFIRMED": "Must match previous password.",
+    "SALT_NOT_CONFIRMED": "Must match previous identifier.",
+    "SEND_IDENTITY_FAILED": "Error while trying to register.",
+    "SEND_CERTIFICATION_FAILED": "Could not certify identity.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "You could not send certification, because your account is <b>not a member account</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "You could not send certification now, because your are <b>not a member</b> yet.<br/><br/>You still need certification to become a member.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "This account could not be certified. No registration found, or need to renew.",
+    "LOGIN_FAILED": "Error while sign in.",
+    "LOAD_IDENTITY_FAILED": "Could not load identity.",
+    "LOAD_REQUIREMENTS_FAILED": "Could not load identity requirements.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Error while sending registration as member.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Error while sending membership revocation.",
+    "REFRESH_WALLET_DATA": "Could not refresh wallet.",
+    "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
+    "GET_CURRENCY_FAILED": "Could not load currency. Please retry later.",
+    "SEND_TX_FAILED": "Could not send transaction.",
+    "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
+    "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
+    "RESTORE_WALLET_DATA_ERROR": "Error while reloading settings from local storage",
+    "LOAD_WALLET_DATA_ERROR": "Error while loading wallet data.",
+    "COPY_CLIPBOARD_FAILED": "Could not copy to clipboard",
+    "TAKE_PICTURE_FAILED": "Could not get picture.",
+    "SCAN_FAILED": "Could not scan QR code.",
+    "SCAN_UNKNOWN_FORMAT": "Code not recognized.",
+    "WOT_LOOKUP_FAILED": "Search failed.",
+    "LOAD_PEER_DATA_FAILED": "Duniter peer not accessible. Please retry later.",
+    "NEED_LOGIN_FIRST": "Please sign in first.",
+    "AMOUNT_REQUIRED": "Amount is required.",
+    "AMOUNT_NEGATIVE": "Negative amount not allowed.",
+    "FEE_NEGATIVE": "Negative fee not allowed..",
+    "NOT_ENOUGH_CREDIT": "Not enough credit.",
+    "INVALID_NODE_SUMMARY": "Unreachable peer or invalid address",
+    "INVALID_USER_ID": "Field 'pseudonym' must not contains spaces or special characters.",
+    "INVALID_COMMENT": "Field 'reference' has a bad format.",
+    "INVALID_PUBKEY": "Public key has a bad format.",
+    "INVALID_PUBKEY_CHECKSUM": "Invalid checksum.",
+    "IDENTITY_REVOKED": "This identity <b>has been revoked</b>. It can no longer become a member.",
+    "IDENTITY_REVOKED_WITH_TIME": "This identity <b>has been revoked {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). It can no longer become a member.",
+    "IDENTITY_PENDING_REVOCATION": "The <b>revocation of this identity</b> has been requested and is awaiting processing. Certification is therefore disabled.",
+    "IDENTITY_INVALID_BLOCK_HASH": "This membership application is no longer valid (because it references a block that network peers are cancelled): the person must renew its application for membership <b>before</b> being certified.",
+    "IDENTITY_EXPIRED": "This identity has expired: this person must re-apply <b>before</b> being certified.",
+    "IDENTITY_SANDBOX_FULL": "Could not register, because peer's sandbox is full.<br/><br/>Please retry later or choose another Duniter peer (in <b>Settings</b>).",
+    "IDENTITY_NOT_FOUND": "Identity not found",
+    "IDENTITY_TX_FAILED": "Error while getting identity's transactions",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Membership not valid.",
+    "WALLET_INVALID_BLOCK_HASH": "Your membership application is no longer valid (because it references a block that network peers are cancelled).<br/>You must <a ng-click=\"doQuickFix('renew')\">renew your application for membership</a> to fix this issue.",
+    "WALLET_IDENTITY_EXPIRED": "The publication of your identity <b>has expired</b>.<br/>You must <a ng-click=\"doQuickFix('fixIdentity')\">re-issue your identity</a> to resolve this issue.",
+    "WALLET_REVOKED": "Your identity has been <b>revoked</b>: neither your pseudonym nor your public key will be used in the future for a member account.",
+    "WALLET_HAS_NO_SELF": "Your identity must first have been published, and not expired.",
+    "AUTH_REQUIRED": "Authentication required.",
+    "AUTH_INVALID_PUBKEY": "The public key does not match the connected account.",
+    "AUTH_INVALID_SCRYPT": "Invalid username or password.",
+    "AUTH_INVALID_FILE": "Invalid keychain file.",
+    "AUTH_FILE_ERROR": "Failed to open keychain file",
+    "IDENTITY_ALREADY_CERTIFY": "You have <b>already certified</b> that identity.<br/><br/>Your certificate is still valid (expires {{expiresIn|formatDuration}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "You have <b>already certified</b> that identity.<br/><br/>Your certification is still pending (Deadline for treatment {{expiresIn|formatDuration}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Unable to certify",
+    "LOAD_NEWCOMERS_FAILED": "Unable to load new members.",
+    "LOAD_PENDING_FAILED": "Unable to load pending registrations.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "You must <b>be a member</b> in order to perform this action.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "You must <b>be a member (or old member)</b> in order to perform this action.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "You must have <b>published your identity</b> in order to perform this action.",
+    "GET_BLOCK_FAILED": "Error while getting block",
+    "INVALID_BLOCK_HASH": "Block not found (incorrect hash)",
+    "DOWNLOAD_REVOCATION_FAILED": "Error while downloading revocation file.",
+    "REVOCATION_FAILED": "Error while trying to revoke the identity.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Wrong secret identifier or password ",
+    "RECOVER_ID_FAILED": "Could not recover password",
+    "LOAD_FILE_FAILED": "Unable to load file",
+    "NOT_VALID_REVOCATION_FILE": "Invalid revocation file (wrong file format)",
+    "NOT_VALID_SAVE_ID_FILE": "Invalid credentials backup file (wrong file format)",
+    "NOT_VALID_KEY_FILE": "Invalid keychain file (unrecognized format)",
+    "EXISTING_ACCOUNT": "Your identifiers correspond to an already existing account, whose <a ng-click=\"showHelpModal('pubkey')\">public key</a> is:",
+    "EXISTING_ACCOUNT_REQUEST": "Please modify your credentials so that they correspond to an unused account.",
+    "GET_LICENSE_FILE_FAILED": "Unable to get license file",
+    "CHECK_NETWORK_CONNECTION": "No peer appears to be accessible.<br/><br/>Please <b>check your Internet connection</b>.",
+    "ISSUE_524_TX_FAILED": "Failed to transfer.<br/><br/>A message has been sent to developers to help solve the problem.<b>Thank you for your help</b>.",
+    "ADD_SECONDARY_WALLET_FAILED": "Unable to add secondary wallet.",
+    "REMOVE_SECONDARY_WALLET_FAILED": "Unable to remove secondary wallet.",
+    "UPDATE_WALLET_LIST_FAILED": "Unable to refresh the list of wallets.",
+    "LOAD_WALLET_LIST_FAILED": "Unable to load the list of wallets.",
+    "SAVE_WALLET_LIST_FAILED": "Unable to save the list of wallets.",
+    "COULD_NOT_ADD_MAIN_WALLET": "This wallet <b>is the main account</b> with which you are connected. Unable to add it as a secondary wallet.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Wallet already existing in the list.",
+    "UNKNOWN_WALLET_ID": "Unknown secondary wallet.",
+    "RESTORE_WALLET_LIST_FAILED": "Unable to restore the list of wallets.",
+    "INVALID_FILE_FORMAT": "Invalid file format.",
+    "SAME_TX_RECIPIENT": "The recipient must be different from the issuer."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Information",
+    "CERTIFICATION_PENDING": "Certification sent. Waiting for validation...",
+    "CERTIFICATION_DONE": "Identity successfully signed",
+    "NOT_ENOUGH_CREDIT": "Not enough credit",
+    "TRANSFER_SENT": "Transfer request successfully sent",
+    "COPY_TO_CLIPBOARD_DONE": "Copy succeeded",
+    "MEMBERSHIP_OUT_SENT": "Membership revocation sent",
+    "NOT_NEED_MEMBERSHIP": "Already a member.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "This identity will soon lack certification (at least {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "This identity did not send a membership request. She will have to if she wishes to become a member.",
+    "HAS_ALTERNATIVE_IDENTITIES": "There are <b>multiple identities</b> attached to this public key. <b>Before any certification</b>, please <a ng-click=\"doQuickFix('showSelectIdentities')\">check other identities</a> to choose the correct one, or contact the wallet owner.",
+    "REVOCATION_SENT": "Revocation sent successfully",
+    "REVOCATION_SENT_WAITING_PROCESS": "Revocation <b>has been sent successfully</b>. It is awaiting processing.",
+    "FEATURES_NOT_IMPLEMENTED": "This features is not implemented yet.<br/><br/>Why not to contribute to get it faster? ;)",
+    "EMPTY_TX_HISTORY": "No operations to export"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Are you sure</b> you want to continue?",
+    "POPUP_TITLE": "<b>Confirmation</b>",
+    "POPUP_WARNING_TITLE": "<b>Warning</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Security warning</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certify {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">Don't certify an account</b> if you believe that: <ul><li>1.) the issuers identity might be faked.<li>2.) the issuer already has another certified account.<li>3.) the issuer purposely or carelessly violates rule 1 or 2 (he certifies faked or double accounts).</ul></small><br/>Are you sure you want to certify this identity?",
+    "FULLSCREEN": "View the application in full screen?",
+    "EXIT_APP": "Close the application ?",
+    "TRANSFER": "<b>Transfer summary:</b><br/><br/><ul><li> - From: <b>{{from}}</b></li><li> - To: <b>{{to}}</b></li><li> - Amount: <b>{{amount}} {{unit}}</b></li><li> - Comment: <i>{{comment}}</i></li></ul><br/><b>Are-you sure you want to do this transfer?</b>",
+    "TRANSFER_ALL": "<b>Transfer summary:</b><br/><br/><ul><li> - From: <b>{{from}}</b></li><li> - To: <b>{{to}}</b></li><li> - Amount: <b>{{amount}} {{unit}}</b></li><li> - Comment: <i>{{comment}}</i></li><br/><li> - Rest : <b>{{restAmount}} {{unit}}</b> to <b>{{restTo}}</b></li></ul><br/><b>Are-you sure you want to do this transfer?</b>",
+    "MEMBERSHIP_OUT": "This operation is <b>irreversible</b>.<br/></br/><b>Are you sure you want to terminate your membership?</b>",
+    "MEMBERSHIP_OUT_2": "This operation is <b>irreversible</b>!<br/><br/>Are you sure you want to <b>terminate your membership</b>?",
+    "LOGIN_UNUSED_WALLET_TITLE": "Typing error?",
+    "LOGIN_UNUSED_WALLET": "The account seems to be <b>inactive</b>.<br/><br/>It's probably a <b>typing error</b> when sign in. Please try again, checking that <b>public key is yours<b/>.",
+    "FIX_IDENTITY": "The pseudonym <b>{{uid}}</b> will be published again, replacing the old publication that has expired.<br/></br/><b>Are you sure</b> you want to continue?",
+    "FIX_MEMBERSHIP": "Your application for membership will be sent.<br/></br/><b>Are you sure?</b>",
+    "MEMBERSHIP": "Your membership request will be sent. <br/></br/><b>Are you sure?</b>",
+    "RENEW_MEMBERSHIP": "Your membership will be renewed.<br/></br/><b>Are you sure?</b>",
+    "REVOKE_IDENTITY": "You will <b>definitely revoke this identity</b>.<br/><br/>The public key and the associated pseudonym <b>will never be used again</b> (for a member account).<br/></br/><b>Are you sure</b> you want to revoke this identity?",
+    "REVOKE_IDENTITY_2": "This operation is <b>irreversible</b>!<br/><br/>Are you sure you want to <b>revoke this identity</b>?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Your membership does not need to be renewed (it will only expire in {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Are you sure you</b> want to renew your membership?",
+    "SAVE_BEFORE_LEAVE": "Do you want to <b>save your changes</b> before leaving the page?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Changes not saved",
+    "LOGOUT": "Are you sure you want to logout?",
+    "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",
+    "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Demonstration mode",
+      "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
+      "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation on account is available, but no operation can be performed.",
+      "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Monitoring mode",
+      "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
+      "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    }
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Revocation file</b>",
+    "POPUP_REVOKE_MESSAGE": "To safeguard your account, please download the <b>account revocation document</b>. It will allow you to cancel your account (in case of account theft, ID, an incorrectly created account, etc.).<br/><br/><b>Please store it in a safe place.</b>"
+  },
+  "HELP": {
+    "TITLE": "Online help",
+    "JOIN": {
+      "SECTION": "Join",
+      "SALT": "The secret identifier is very important. It is used to hash you password, which in turn is used to calculate your <span class=\"text-italic\">public account key</span> (its number) and the private key to access it.<br/><b>Please remeber this identifier well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good secret identifier must be sufficiently long (8 characters at the very least) and as original as possible.",
+      "PASSWORD": "The password is very important. Together with the secret identifier, it is use to calculate your account number (pblic key) and the private key to access it.<br/><b>Please remember it well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good password is made (ideally) of at least 8 characters, with at least one capital and one number.",
+      "PSEUDO": "A pseudonym is used only when joining as <span class=\"text-italic\">member</span>. It is always associated with a wallet (by its <span class=\"text-italic\">public key</span>).<br/>It is published on the network so that other users may identify it, certify or send money to the account.<br/>A pseudonym must be unique among all members (current and past)."
+    },
+    "LOGIN": {
+      "SECTION": "Log in",
+      "PUBKEY": "Account public key",
+      "PUBKEY_DEF": "The public key of the keychain is generated from the entered identifiers (any), but does not correspond to an account already used.<br/><b>Make sure your public key is the same as your account</b>. Otherwise, you will be logged into an account that is probably never used, as the risk of collision with an existing account is very small.<br/><a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_cryptography\" target=\"_ system\">Learn more about cryptography</a> by public key.",
+      "METHOD": "Connection methods",
+      "METHOD_DEF": "Several options are available to connect to a portfolios: <br/> - The connection <b>with salt (simple or advanced)</b> mixes your password with the secret identifier, to limit the attempts of piracy<br/> - The connection <b>using public key</b> prevents you from entering your credentials, which you will be asked only when an operation need it.<br/> - The connection <b>using keychain file</b> will read the public and private keys of the account from a file without the need to enter credentials. Several file formats are possible."
+    },
+    "GLOSSARY": {
+      "SECTION": "Glossary",
+      "PUBKEY_DEF": "A public key always identifies a wallet. It may identify a member. In Cesium it is calculated using the secret identifier and the password.",
+      "MEMBER": "Member",
+      "MEMBER_DEF": "A member is a real and living human, wishing to participate freely to the monitary community. The member will receive universal dividend, according to the period and amount as defined in the <span class=\"text-italic\">currency parameters</span>.",
+      "CURRENCY_RULES": "Currency rules",
+      "CURRENCY_RULES_DEF": "The currency rules are defined only once, and for all. They set the parameters under which the currency will perform: universal dividend calculation, the amount of certifications needed to become a member, the maximum amount of certifications a member can send, etc.<br/><br/>The parameters cannot be modified because of the use of a <span class=\"text-italic\">Blockchain</span> which carries and executes these rules, and constantly verifies their correct application. <a href=\"#/app/currency\">See current parameters</a>.",
+      "BLOCKCHAIN": "Blockchain",
+      "BLOCKCHAIN_DEF": "The Blockchain is a decentralised system which, in case of Duniter, serves to carry and execute the <span class=\"text-italic\">currency rules</span>.<br/><a href=\"http://en.duniter.org/presentation/\" target=\"_blank\">Read more about Duniter</a> and the working of its blockchain.",
+      "UNIVERSAL_DIVIDEND_DEF": "The Universal Dividend (UD) is the quantity of money co-created by each member, according to the period and the calculation defined in the <span class=\"text-italic\">currency rules</span>.<br/>Every term, the members receive an equal amount of new money on their account.<br/><br/>The UD undergoes a steady growth, to remain fair under its members (current and future), calculated by an average life expectancy, as demonstrated in the Relative Theory of Money (RTM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">Read more about RTM</a> and open money.",
+      "WOT": "Web of Trust (WoT)",
+      "WOT_DEF": "The Web of Trust is made up of all the members of the currency, and the links of certification which connect them.",
+      "DISTANCE_RULE": "Distance rule",
+      "DISTANCE_RULE_DEF": "The rule of distance defines <b>a maximum distance to meet</b> between an applicant and a minimum number of referring member. This distance is calculated using the certification links."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "Menu <b>{{'MENU.CURRENCY'|translate}}</b> allows discovery of <b>currency parameters</b> and its state.",
+      "CURRENCY_WOT": "The <b>member count</b> shows the <b>community's weight and evolution</b>.",
+      "CURRENCY_MASS": "Shown here is the <b>total amount</b> currently in circulation and its <b>average distribution</b> per member.<br/><br/>This allows to estimate the <b>worth of any amount</b>, in respect to what <b>others own</b> on their account (on average).",
+      "CURRENCY_UNIT_RELATIVE": "The unit used here (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amounts in {{currency|capitalize}} have been devided by the <b>Universal Dividend</b> (UD).<br/><br/><small>This relative unit is <b>relevant</b> because it is stable in contrast to the permanently growing monitary mass.</small>",
+      "CURRENCY_CHANGE_UNIT": "The option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> allows to <b>switch the unit</b> to show amounts in <b>{{currency|capitalize}}</b>, undevided by the Universal Dividend (instead of in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "The option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> allows to <b>switch the unit</b> to show amounts in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, which is relative to the Universal Dividend (the amount co-produced by each member).",
+      "CURRENCY_RULES": "The <b>rules</b> of the currency determine its <b>exact and predictible</b> performance.<br/><br/>As a true DNA of the currency these rules make the monetary code <b>transparent and understandable</b>.",
+      "MENU_BTN_NETWORK": "Menu <b>{{'MENU.NETWORK'|translate}}</b> allows discovery of <b>network's state<b>.",
+      "NETWORK_BLOCKCHAIN": "All monetary transactions are recoded in a <b>public and tamper proof</b> ledger, generally referred to as the <b>blockchain</b>.",
+      "NETWORK_PEERS": "The <b>peers</b> shown here correspond to <b>computers that update and check</b> the blockchain.<br/><br/>The more active peers there are, the more <b>decentralised</b> and therefore trustworhty the currency becomes.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "This <b>number</b> (in green) indicates the peer's <b>latest validated block</b> (last page written in the ledger).<br/><br/>Green indicates that the block was equally validated by the <b>majority of other peers</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Each member</b>, equiped with a computer with Internet, <b>can participate, adding a peer</b> simply by <b>installing the Duniter software</b> (free/libre). <a target=\"_new\" href=\"{{installDocUrl}}\" target=\"_system\">Read the installation manual &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> allows access to your account balance and transaction history.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Here you can consult your account status, transaction history and your certifications.",
+      "WALLET_CERTIFICATIONS": "Click here to reveiw the details of your certifications (given and received).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Click here to review the details of your <b>received certifications</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Click here to review the details of your <b>given certifications</b>.",
+      "WALLET_BALANCE": "Your account <b>balance</b> is shown here.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>The used unit (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amount in {{currency|capitalize}} has been divided by the <b>Universal Dividend</b> (UD) co-created by each member.<br/>At this moment, 1 UD equals {{currentUD}} {{currency|capitalize}}.",
+      "WALLET_BALANCE_CHANGE_UNIT": "You can <b>change the unit</b> in which amounts are shown in <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>For example, to display amounts <b>directly in {{currency|capitalize}}</b> instead of relative amounts.",
+      "WALLET_PUBKEY": "This is your account public key. You can communicate it to a third party so that it more easily identifies your account.",
+      "WALLET_SEND": "Issue a payment in just a few clicks.",
+      "WALLET_SEND_NO_MONEY": "Issue a payment in just a few clicks.<br/>(Your balance does not allow this yet)",
+      "WALLET_OPTIONS": "Please note that this button allows access to <b>other, less used actions</b>.<br/><br/>Don't forget to take a quick look, when you have a moment!",
+      "WALLET_RECEIVED_CERTS": "This shows the list of persons that certified you.",
+      "WALLET_CERTIFY": "The button <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> allows selecting an identity and certifying it.<br/><br/>Only users that are <b>already member</b> may certify others.",
+      "WALLET_CERT_STOCK": "Your supply of certifications (to send) is limited to <b>{{sigStock}} certifications</b>.<br/><br/>This supply will replete itself over time, as and when earlier certifications expire.",
+      "MENU_BTN_WALLETS": "The menu <b>{{'MENU.WALLETS'|translate}}</b> allows you to add additional wallets that you manage.",
+      "MENU_BTN_TX": "The menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> allow access to transactions history, and send new payments.",
+      "MENU_BTN_WOT": "The menu <b>{{'MENU.WOT'|translate}}</b> allows searching <b>users</b> of the currency (member or not).",
+      "WOT_SEARCH_TEXT_XS": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>The search will start automatically.",
+      "WOT_SEARCH_TEXT": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>Then hit <b>Enter</b> to start the search.",
+      "WOT_SEARCH_RESULT": "Simply click a user row to view the details sheet.",
+      "WOT_VIEW_CERTIFICATIONS": "The row <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> shows how many members members validated this identity.<br/><br/>These certifications testify that the account belongs to <b>a living human</b> and this person has <b>no other member account</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "There are at least <b>{{sigQty}} certifications</b> needed to become a member and receive the <b>Universal Dividend</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Click here to open <b>a list of all certifications</b> given to and by this identity.",
+      "WOT_VIEW_CERTIFY": "The button <b>{{'WOT.BTN_CERTIFY'|translate}}</b> allows to add your certification to this identity.",
+      "CERTIFY_RULES": "<b>Attention:</b> Only certify <b>real and living persons</b> that do not own any other certified account.<br/><br/>The trust carried by the currency depends on each member's vigilance!",
+      "MENU_BTN_SETTINGS": "The <b>{{'MENU.SETTINGS'|translate}}</b> allow you to configure the Cesium application.<br/><br/>For example, you can <b>change the unit</b> in which the currency will be shown.",
+      "HEADER_BAR_BTN_PROFILE": "Click here to access your <b>user profile</b>",
+      "SETTINGS_CHANGE_UNIT": "You can <b>change the display unit</b> of amounts by clicking here.<br/><br/>- Deactivate the option to show amounts in {{currency|capitalize}}.<br/>- Activate the option for relative amounts in {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (<b>divided</b> by the current Universal Dividend).",
+      "END_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>Welcome to the <b>free economy</b>!",
+      "END_NOT_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>If you wish to join the currency {{currency|capitalize}}, simply click <b>{{'LOGIN.CREATE_FREE_ACCOUNT'|translate}}</b> below.",
+      "END_READONLY": "This guided visit has <b>ended</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/en-GB-2.0.0-alpha42.json b/ios/App/public/assets/i18n/en-GB-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4fa9e5d77cc0060886b2b6576b859247e87c911
--- /dev/null
+++ b/ios/App/public/assets/i18n/en-GB-2.0.0-alpha42.json
@@ -0,0 +1,1025 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "build {{build}}",
+    "PUBKEY": "Public key",
+    "MEMBER": "Member",
+    "BLOCK": "Block",
+    "BTN_OK": "OK",
+    "BTN_YES": "Yes",
+    "BTN_NO": "No",
+    "BTN_SEND": "Send",
+    "BTN_SEND_MONEY": "Transfer money",
+    "BTN_SEND_MONEY_SHORT": "Transfer",
+    "BTN_SAVE": "Save",
+    "BTN_YES_SAVE": "Yes, Save",
+    "BTN_YES_CONTINUE": "Yes, Continue",
+    "BTN_SHOW": "Show",
+    "BTN_SHOW_PUBKEY": "Show key",
+    "BTN_RELATIVE_UNIT": "Display amounts in UD?",
+    "BTN_BACK": "Back",
+    "BTN_NEXT": "Next",
+    "BTN_IMPORT": "Import",
+    "BTN_CANCEL": "Cancel",
+    "BTN_CLOSE": "Close",
+    "BTN_LATER": "Later",
+    "BTN_LOGIN": "Sign In",
+    "BTN_LOGOUT": "Logout",
+    "BTN_ADD_ACCOUNT": "New Account",
+    "BTN_SHARE": "Share",
+    "BTN_EDIT": "Edit",
+    "BTN_DELETE": "Delete",
+    "BTN_ADD": "Add",
+    "BTN_SEARCH": "Search",
+    "BTN_REFRESH": "Refresh",
+    "BTN_RETRY": "Retry",
+    "BTN_START": "Start",
+    "BTN_CONTINUE": "Continue",
+    "BTN_CREATE": "Create",
+    "BTN_UNDERSTOOD": "I understand",
+    "BTN_OPTIONS": "Options",
+    "BTN_HELP_TOUR": "Features tour",
+    "BTN_HELP_TOUR_SCREEN": "Discover this screen",
+    "BTN_DOWNLOAD": "Download",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Download account statement",
+    "BTN_MODIFY": "Modify",
+    "CHOOSE_FILE": "Drag your file<br/>or click to select",
+    "DAYS": "days",
+    "NO_ACCOUNT_QUESTION": "Not a member yet? Register now!",
+    "SEARCH_NO_RESULT": "No result found",
+    "LOADING": "Loading...",
+    "LOADING_WAIT": "Loading...<br/><small>(Waiting for node availability)</small>",
+    "SEARCHING": "Searching...",
+    "FROM": "From",
+    "TO": "To",
+    "COPY": "Copy",
+    "LANGUAGE": "Language",
+    "UNIVERSAL_DIVIDEND": "Universal dividend",
+    "UD": "UD",
+    "DATE_PATTERN": "DD/MM/YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(empty)",
+    "UID": "Pseudonym",
+    "ENABLE": "Enabled",
+    "DISABLE": "Disabled",
+    "RESULTS_LIST": "Results:",
+    "RESULTS_COUNT": "{{count}} results",
+    "EXECUTION_TIME": "executed in {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Display values openly?",
+    "POPOVER_ACTIONS_TITLE": "Options",
+    "POPOVER_FILTER_TITLE": "Filters",
+    "SHOW_MORE": "Show more",
+    "SHOW_MORE_COUNT": "(current limit at {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Share",
+      "SHARE_ON_TWITTER": "Share on Twitter",
+      "SHARE_ON_FACEBOOK": "Share on Facebook",
+      "SHARE_ON_DIASPORA": "Share on Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Share on Google+"
+    },
+    "FILE": {
+      "DATE": "Date:",
+      "TYPE": "Type:",
+      "SIZE": "Size:",
+      "VALIDATING": "Validating..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Choose source:",
+    "BTN_PICTURE_GALLERY": "Gallery",
+    "BTN_PICTURE_CAMERA": "<b>Camera</b>"
+  },
+  "MENU": {
+    "HOME": "Home",
+    "WOT": "Registry",
+    "CURRENCY": "Currency",
+    "ACCOUNT": "My Account",
+    "WALLETS": "My wallets",
+    "SETTINGS": "Settings",
+    "NETWORK": "Network",
+    "TRANSACTIONS": "My transactions"
+  },
+  "ABOUT": {
+    "TITLE": "About",
+    "LICENSE": "<b>Free/libre software</b> (License GNU AGPLv3).",
+    "LATEST_RELEASE": "There is a <b>newer version</ b> of {{'COMMON.APP_NAME' | translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Please update {{'COMMON.APP_NAME' | translate}} (latest version: <b>v{{version}}</b>)",
+    "CODE": "Source code:",
+    "OFFICIAL_WEB_SITE": "Official web site:",
+    "DEVELOPERS": "Developers:",
+    "FORUM": "Forum:",
+    "PLEASE_REPORT_ISSUE": "Please report any issue to us!",
+    "REPORT_ISSUE": "Report an issue",
+    "BTN_OPEN_DEV_WINDOW": "Open the debug window"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Welcome to the Cesium application!",
+    "WELCOME_READONLY": "Welcome to Cesium <span class='badge badge-balanced'>Monit</span> !",
+    "MESSAGE": "Receive and send libre currency {{currency}}",
+    "MESSAGE_READONLY": "Real-time monitoring of libre currency {{currency}}",
+    "BTN_CURRENCY": "Explore currency {{currency}}",
+    "BTN_ABOUT": "about",
+    "BTN_HELP": "Help",
+    "BTN_NETWORK": "Network status",
+    "FREE_SOFTWARE": "Free software",
+    "FORK_ME": "Fork me!",
+    "SHOW_LICENSE": "Show license",
+    "REPORT_ISSUE": "Report an issue",
+    "NOT_YOUR_ACCOUNT_QUESTION": "You do not own the account <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
+    "BTN_CHANGE_ACCOUNT": "Disconnect this account",
+    "CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or change node <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
+    "SHOW_ALL_FEED": "Show all",
+    "READ_MORE": "Read more",
+    "FEED_SOURCE": "Source"
+  },
+  "SETTINGS": {
+    "TITLE": "Settings",
+    "DISPLAY_DIVIDER": "Display",
+    "STORAGE_DIVIDER": "Storage",
+    "NETWORK_SETTINGS": "Network",
+    "PEER": "Duniter peer address",
+    "PEER_SHORT": "Peer address",
+    "PEER_CHANGED_TEMPORARY": "Address used temporarily",
+    "PERSIST_CACHE": "Keep navigation data (experimental)",
+    "PERSIST_CACHE_HELP": "Allows faster navigation, locally retaining the data received, for use from one session to another.",
+    "USE_LOCAL_STORAGE": "Enable local storage",
+    "USE_LOCAL_STORAGE_HELP": "Allows you to save your settings",
+    "WALLETS_SETTINGS": "My wallets",
+    "USE_WALLETS_ENCRYPTION": "Secure the list",
+    "USE_WALLETS_ENCRYPTION_HELP": "Enables you to encrypt the list of your wallets. Authentication required to access it.",
+    "ENABLE_HELPTIP": "Enable contextual help tips",
+    "DISABLE_HELPTIP": "Disable contextual help tips",
+    "ENABLE_UI_EFFECTS": "Enable visual effects",
+    "ENABLE_UI_EFFECTS_HELP": "Transition between pages, animation of list",
+    "HISTORY_SETTINGS": "Account operations",
+    "DISPLAY_UD_HISTORY": "Display produced dividends?",
+    "TX_HISTORY_AUTO_REFRESH": "Enable automatic refresh?",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Updates the list of operations to each new block.",
+    "AUTHENTICATION_SETTINGS": "Authentication",
+    "KEEP_AUTH": "Expiration of authentication",
+    "KEEP_AUTH_SHORT": "Expiration",
+    "KEEP_AUTH_HELP": "Define when authentication is cleared from memory.",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "After each operation",
+      "SECONDS": "After {{value}}s of inactivity",
+      "MINUTE": "After {{value}}min of inactivity",
+      "MINUTES": "After {{value}}min of inactivity",
+      "HOUR": "After {{value}}h of inactivity",
+      "ALWAYS": "At the end of the session"
+    },
+    "KEYRING_FILE": "Keyring file",
+    "KEYRING_FILE_HELP": "Allow auto-connect at startup, or to authenticate (only if \"Expiration of authentication\" is \"at the end of the session\"",
+    "REMEMBER_ME": "Remember me ?",
+    "REMEMBER_ME_HELP": "Allows to remain identified from one session to another, keeping the public key locally.",
+    "PLUGINS_SETTINGS": "Extensions",
+    "BTN_RESET": "Restore default values",
+    "EXPERT_MODE": "Enable expert mode",
+    "EXPERT_MODE_HELP": "Allow to see more details",
+    "BLOCK_VALIDITY_WINDOW": "Block uncertainty time",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Time of uncertainty",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Time to wait before considering an information is validated",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "No delay",
+      "N": "{{time | formatDuration}} ({{count}} blocks)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Duniter peer",
+      "HOST": "Address",
+      "HOST_HELP": "Address: server:port",
+      "USE_SSL": "Secured?",
+      "USE_SSL_HELP": "(SSL Encryption)",
+      "BTN_SHOW_LIST": "Peer's list"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Block #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Current block",
+      "TITLE": "Block #{{number|formatInteger}}",
+      "COMPUTED_BY": "Computed by",
+      "SHOW_RAW": "Show raw data",
+      "TECHNICAL_DIVIDER": "Technical informations",
+      "VERSION": "Format version",
+      "HASH": "Computed hash",
+      "UNIVERSAL_DIVIDEND_HELP": "Money co-produced by each of the {{membersCount}} members",
+      "EMPTY": "Aucune donnée dans ce bloc",
+      "POW_MIN": "Minimal difficulty",
+      "POW_MIN_HELP": "Difficulty imposed in calculating hash",
+      "DATA_DIVIDER": "Data",
+      "IDENTITIES_COUNT": "New identities",
+      "JOINERS_COUNT": "Joiners",
+      "ACTIVES_COUNT": "Renewals",
+      "ACTIVES_COUNT_HELP": "Members having renewed their membership",
+      "LEAVERS_COUNT": "Leavers",
+      "LEAVERS_COUNT_HELP": "Members that now refused certification",
+      "EXCLUDED_COUNT": "Excluded members",
+      "EXCLUDED_COUNT_HELP": "Old members, excluded because missing membreship renewal or certifications",
+      "REVOKED_COUNT": "Revoked identities",
+      "REVOKED_COUNT_HELP": "These accounts may no longer be member",
+      "TX_COUNT": "Transactions",
+      "CERT_COUNT": "Certifications",
+      "TX_TO_HIMSELF": "Change",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Unlock conditions",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "and",
+        "OR": "or"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Sign</b> of the public key",
+        "XHX": "<b>Password</b>, including SHA256 =",
+        "CSV": "Blocked during",
+        "CLTV": "Bloqué until"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blocks",
+      "NO_BLOCK": "No bloc",
+      "LAST_BLOCKS": "Last blocks:",
+      "BTN_COMPACT": "Compact"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Currency",
+      "TAB_CURRENCY": "Currency",
+      "TAB_WOT": "Web of trust",
+      "TAB_NETWORK": "Network",
+      "TAB_BLOCKS": "Blocks",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency|}} is a <b>libre money</b>, started {{firstBlockTime | formatFromNow}}. It currently counts <b>{{N}} members </b>, who produce and collect a <a ng-click=\"showHelpModal('ud')\">Universal Dividend</a> (DU), each {{dt | formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Network rules",
+      "CURRENCY_NAME": "Currency name",
+      "MEMBERS": "Members count",
+      "MEMBERS_VARIATION": "Variation since {{duration|formatDuration}} (since last UD)",
+      "MONEY_DIVIDER": "Money",
+      "MASS": "Monetary mass",
+      "SHARE": "Money share",
+      "UD": "Universal Dividend",
+      "C_ACTUAL": "Current growth",
+      "MEDIAN_TIME": "Current blockchain time",
+      "POW_MIN": "Common difficulty",
+      "MONEY_RULES_DIVIDER": "Rules of currency",
+      "C_RULE": "Theoretical growth target",
+      "UD_RULE": "Universal dividend (formula)",
+      "DT_REEVAL": "Period between two re-evaluation of the UD",
+      "REEVAL_SYMBOL": "reeval",
+      "DT_REEVAL_VALUE": "Every <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Date of first reevaluation of the UD",
+      "SIG_QTY_RULE": "Required number of certifications to become a member",
+      "SIG_STOCK": "Maximum number of certifications sent by a member",
+      "SIG_PERIOD": "Minimum delay between 2 certifications sent by one and the same issuer.",
+      "SIG_WINDOW": "Maximum delay before a certification will be treated",
+      "SIG_VALIDITY": "Lifetime of a certification that has been treated",
+      "MS_WINDOW": "Maximum delay before a pending membership will be treated",
+      "MS_VALIDITY": "Lifetime of a membership that has been treated",
+      "STEP_MAX": "Maximum distance between a newcomer and each referring members.",
+      "WOT_RULES_DIVIDER": "Rules for web of trust",
+      "SENTRIES": "Required number of certifications (given <b>and</b> received) to become a referring member",
+      "SENTRIES_FORMULA": "Required number of certifications to become a referring member (formula)",
+      "XPERCENT": "Minimum percent of referring member to reach to match the distance rule",
+      "AVG_GEN_TIME": "The average time between 2 blocks",
+      "CURRENT": "current",
+      "MATH_CEILING": "CEILING",
+      "DISPLAY_ALL_RULES": "Display all rules?",
+      "BTN_SHOW_LICENSE": "Show license",
+      "WOT_DIVIDER": "Web of trust"
+    },
+    "LICENSE": {
+      "TITLE": "Currency license",
+      "BTN_DOWNLOAD": "Download file",
+      "NO_LICENSE_FILE": "License file not found."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Blockchain time",
+      "LOADING_PEERS": "Loading peers...",
+      "NODE_ADDRESS": "Address:",
+      "SOFTWARE": "Software:",
+      "WARN_PRE_RELEASE": "Pre-release (latest stable: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Version <b>{{version}}</b> available",
+      "WS2PID": "Identifier:",
+      "PRIVATE_ACCESS": "Private access",
+      "POW_PREFIX": "Proof of work prefix:",
+      "ENDPOINTS": {
+        "BMAS": "Secure endpoint (SSL)",
+        "BMATOR": "TOR endpoint",
+        "WS2P": "WS2P endpoint",
+        "ES_USER_API": "Cesium+ data node"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "Non-SSL nodes have a degraded display because Cesium works in HTTPS mode."
+    }
+  },
+  "PEER": {
+    "PEERS": "Peers",
+    "SIGNED_ON_BLOCK": "Signed on block",
+    "MIRROR": "mirror",
+    "MIRRORS": "Mirrors",
+    "MIRROR_PEERS": "Mirror peers",
+    "PEER_LIST": "Peer's list",
+    "MEMBERS": "Members",
+    "MEMBER_PEERS": "Member peers",
+    "ALL_PEERS": "All peers",
+    "DIFFICULTY": "Difficulty",
+    "API": "API",
+    "CURRENT_BLOCK": "Block #",
+    "POPOVER_FILTER_TITLE": "Filter",
+    "OFFLINE": "Offline",
+    "OFFLINE_PEERS": "Offline peers",
+    "BTN_SHOW_PEER": "Show peer",
+    "VIEW": {
+      "TITLE": "Peer",
+      "OWNER": "Owned by ",
+      "SHOW_RAW_PEERING": "See peering document",
+      "SHOW_RAW_CURRENT_BLOCK": "See current block (raw format)",
+      "LAST_BLOCKS": "Last blocks",
+      "KNOWN_PEERS": "Known peers :",
+      "GENERAL_DIVIDER": "General information",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Could not get peer data, using the TOR network.",
+        "LOADING_NODE_ERROR": "Could not get peer data"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Search (member or public key)",
+    "SEARCH_INIT_PHASE_WARNING": "During the pre-registration phase, the search for pending registrations <b>may be long</b>. Please wait ...",
+    "REGISTERED_SINCE": "Registered on",
+    "REGISTERED_SINCE_BLOCK": "Registered since block #",
+    "NO_CERTIFICATION": "No validated certification",
+    "NO_GIVEN_CERTIFICATION": "No given certification",
+    "NOT_MEMBER_PARENTHESIS": "(non-member)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identity revoked)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(being revoked)",
+    "EXPIRE_IN": "Expires",
+    "NOT_WRITTEN_EXPIRE_IN": "Deadline<br/>treatment",
+    "EXPIRED": "Expired",
+    "PSEUDO": "Pseudonym",
+    "SIGNED_ON_BLOCK": "Emitted on block #{{block}}",
+    "WRITTEN_ON_BLOCK": "Written on block #{{block}}",
+    "GENERAL_DIVIDER": "General information",
+    "NOT_MEMBER_ACCOUNT": "Non-member account",
+    "NOT_MEMBER_ACCOUNT_HELP": "This is a simple wallet, with no pending membership application.",
+    "TECHNICAL_DIVIDER": "Technical data",
+    "BTN_CERTIFY": "Certify",
+    "BTN_YES_CERTIFY": "Yes, certify",
+    "BTN_SELECT_AND_CERTIFY": "New certification",
+    "ACCOUNT_OPERATIONS": "Account operations",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identity {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Registry",
+      "NEWCOMERS": "New members:",
+      "NEWCOMERS_COUNT": "{{count}} members",
+      "PENDING": "Pending registrations:",
+      "PENDING_COUNT": "{{count}} pending registrations",
+      "REGISTERED": "Registered {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Member since {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Latest members",
+      "BTN_PENDING": "Pending registrations",
+      "SHOW_MORE": "Show more",
+      "SHOW_MORE_COUNT": "(current limit to {{limit}})",
+      "NO_PENDING": "No pending registrations.",
+      "NO_NEWCOMERS": "No members."
+    },
+    "CONTACTS": {
+      "TITLE": "Contacts"
+    },
+    "MODAL": {
+      "TITLE": "Search"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications",
+      "SUMMARY": "Received certifications",
+      "LIST": "Details of received certifications",
+      "PENDING_LIST": "Pending certifications",
+      "RECEIVED": "Received certifications",
+      "RECEIVED_BY": "Certifications received by {{uid}}",
+      "ERROR": "Received certifications in error",
+      "SENTRY_MEMBER": "Referring member"
+    },
+    "OPERATIONS": {
+      "TITLE": "Operations"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications sent",
+      "SUMMARY": "Sent certifications",
+      "LIST": "Details of sent certifications",
+      "PENDING_LIST": "Pending certifications",
+      "SENT": "Sent certifications",
+      "SENT_BY": "Certifications sent by {{uid}}",
+      "ERROR": "Sent certifications with error"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-log-in\"></i> Login",
+    "SCRYPT_FORM_HELP": "Please enter your credentials. <br> Remember to check the public key for your account.",
+    "PUBKEY_FORM_HELP": "Please enter a public account key:",
+    "FILE_FORM_HELP": "Choose the keychain file to use:",
+    "SCAN_FORM_HELP": "Scan the QR code of a wallet.",
+    "SALT": "Secret identifier",
+    "SALT_HELP": "Secret identifier",
+    "SHOW_SALT": "Display secret identifier?",
+    "PASSWORD": "Password",
+    "PASSWORD_HELP": "Password",
+    "PUBKEY_HELP": "Public key or pseudonym",
+    "NO_ACCOUNT_QUESTION": "Don't have an account yet?",
+    "HAVE_ACCOUNT_QUESTION": "Already have an account ?",
+    "CREATE_ACCOUNT": "Create an account",
+    "CREATE_FREE_ACCOUNT": "Create a free account",
+    "FORGOTTEN_ID": "Forgot password?",
+    "ASSOCIATED_PUBKEY": "Public key :",
+    "BTN_METHODS": "Other methods",
+    "BTN_METHODS_DOTS": "Change method...",
+    "METHOD_POPOVER_TITLE": "Methods",
+    "MEMORIZE_AUTH_FILE": "Memorize this keychain during the navigation session",
+    "SCRYPT_PARAMETERS": "Paramètres (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Information",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> You were <b>logout</ b> automatically, due to prolonged inactivity.",
+      "BTN_RELOGIN": "Sign In",
+      "IDLE_WARNING": "You will be logout... {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Secret identifier and password",
+      "SCRYPT_ADVANCED": "Advanced salt",
+      "FILE": "Keychain file",
+      "PUBKEY": "Public key or pseudonym",
+      "SCAN": "Scan a QR code"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Light salt",
+      "DEFAULT": "Standard salt",
+      "SECURE": "Secure salt",
+      "HARDEST": "Hardest salt",
+      "EXTREME": "Extreme salt",
+      "USER": "Personal value",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Expected file format: <b>.dunikey</b> (type PubSec). Other formats are under development (EWIF, WIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Authentication",
+    "BTN_AUTH": "Authenticate",
+    "GENERAL_HELP": "Please authenticate yourself:",
+    "EXPECTED_UID_HELP": "Please authenticate to the account <i class=\"ion-person\"></i> {{uid}}:",
+    "EXPECTED_PUBKEY_HELP": "Please authenticate to the wallet <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}:",
+    "SCAN_FORM_HELP": "Scan the QR code of the <b>private key</b> of the wallet."
+  },
+  "ACCOUNT": {
+    "TITLE": "My Account",
+    "BALANCE": "Balance",
+    "LAST_TX": "Latest validated transactions",
+    "BALANCE_ACCOUNT": "Account balance",
+    "NO_TX": "No transaction",
+    "SHOW_MORE_TX": "Show more",
+    "SHOW_ALL_TX": "Show all",
+    "TX_FROM_DATE": "(current limit to {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Pending transactions",
+    "VALIDATING_TX": "Transactions being validated",
+    "ERROR_TX": "Transaction not executed",
+    "ERROR_TX_SENT": "Sent transactions",
+    "PENDING_TX_RECEIVED": "Transactions awaiting receipt",
+    "EVENTS": "Events",
+    "OUT_DISTANCED": "Your current certifications come from a group too isolated from the <a ng-click=\"showHelpModal('wot')\"> Web of Trust</a> (WoT): the <a ng-click=\"showHelpModal('distance_rule')\">maximum distance rule</a> is violated.<br/>You must obtain certifications from another area of the Web of Trust, or wait for it to tighten.",
+    "WAITING_MEMBERSHIP": "Membership application sent. Waiting validation.",
+    "WAITING_CERTIFICATIONS": "You need {{needCertificationCount}} certification(s) to become a member and produce the <a ng-click=\"showHelpModal('ud')\">Universal Dividend</a>. Your account is however already operational, to receive and send payments.",
+    "WAITING_CERTIFICATIONS_HELP": "To get your certifications, only request members <b>who know you enough</b>, as required by <a ng-click=\"showLicenseModal()\">the currency license</a> that you have accepted.<br/>If you do not know enough members, let them know on <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">the user forum</a>.",
+    "WILL_MISSING_CERTIFICATIONS": "You will <b>lack certifications</b> soon (at least {{willNeedCertificationCount}} more are needed)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a> before then.",
+    "NEED_RENEW_MEMBERSHIP": "You are no longer a member because your membership <b>has expired</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "You are no longer a member because your membership <b>has been cancelled</b> for lack of certifications. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
+    "NO_WAITING_MEMBERSHIP": "No membership application pending. If you'd like to <b>become a member</ b>, please <a ng-click=\"doQuickFix('membership')\">send the membership application</a>.",
+    "CERTIFICATION_COUNT": "Received certifications",
+    "CERTIFICATION_COUNT_SHORT": "Certifications",
+    "SIG_STOCK": "Stock of certifications to give",
+    "BTN_RECEIVE_MONEY": "Receive",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Switch to another identity...",
+    "BTN_FIX_MEMBERSHIP": "Resubmit membership request...",
+    "BTN_MEMBERSHIP_RENEW": "Renew membership",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Renew membership...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
+    "BTN_SECURITY_DOTS": "Sign-in and security...",
+    "BTN_SHOW_DETAILS": "Display technical data",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Locked amount",
+      "DESCRIPTION": "Here are the conditions for unlocking this amount:",
+      "DESCRIPTION_MANY": "This transaction consists of several parts, of which the unlock conditions are:",
+      "LOCKED_AMOUNT": "Conditions for the amount:"
+    },
+    "NEW": {
+      "TITLE": "Registration",
+      "INTRO_WARNING_TIME": "Creating an account on {{name|capitalize}} is very simple. Please take sufficient time to do this correctly (not to forget the usernames, passwords, etc.).",
+      "INTRO_WARNING_SECURITY": "Check that the hardware you are currently using (computer, tablet, phone) <b>is secure and trustworthy </b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Up-to-date anti-virus, firewall enabled, session protected by password or pin code...",
+      "INTRO_HELP": "Click <b> {{'COMMON.BTN_START'|translate}}</b> to begin creating an account. You will be guided step by step.",
+      "REGISTRATION_NODE": "Your registration will be registered via the Duniter peer <b>{{server}}</b> node, which will then be distributed to the rest of the currency network.",
+      "REGISTRATION_NODE_HELP": "If you do not trust this peer, please change <a ng-click=\"doQuickFix('settings')\">in the settings</a> of Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Choose the type of account to create:",
+      "MEMBER_ACCOUNT": "Member account",
+      "MEMBER_ACCOUNT_TITLE": "Create a member account",
+      "MEMBER_ACCOUNT_HELP": "You know enough about libre money and want to participate in its production?<br/>As an individual, you can create your member account (only one per individual). This works like a simple wallet account, but also allows you to co-produce the money, by <b>receiving for each {{parameters.dt|formatPeriod}} a universal dividend</b>: it's then up to you to put to good use!",
+      "WALLET_ACCOUNT": "Simple wallet",
+      "WALLET_ACCOUNT_TITLE": "Create a wallet",
+      "WALLET_ACCOUNT_HELP": "Are you <b>new to libre money</b>? You need an additional account?<br/>This type of account will suit you. Although it does not co-produce the money (unlike a member account - see below), you will be able to receive and send payments there, as soon as registration is complete.<br/>If necessary, you can convert it into a member account later.",
+      "SALT_WARNING": "Choose a secret identifier.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this identifier</b>.<br/>If lost, there are no means to retrieve it!",
+      "PASSWORD_WARNING": "Choose a password.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this password</b>.<br/>If lost, there are no means to retrieve it!",
+      "PSEUDO_WARNING": "Choose a pseudonym.<br/>It may be used by other people to find you more easily.<br/><br/>.Use of <b>commas, spaces and accents</b> is not allowed.<br/><div class='hidden-xs'><br/>Example: <span class='gray'>JohnDalton, JackieChan, etc.</span>",
+      "PSEUDO": "Pseudonym",
+      "PSEUDO_HELP": "joe123",
+      "SALT_CONFIRM": "Confirm",
+      "SALT_CONFIRM_HELP": "Confirm the secret identifier",
+      "PASSWORD_CONFIRM": "Confirm",
+      "PASSWORD_CONFIRM_HELP": "Confirm the password",
+      "SLIDE_6_TITLE": "Confirmation:",
+      "COMPUTING_PUBKEY": "Computing...",
+      "LAST_SLIDE_CONGRATULATION": "You completed all required fields.<br/><b>You can send the account creation request</b>.<br/><br/>For information, the public key below identifies your future account.<br/>It can be communicated to third parties to receive their payment.<br/>Once your account has been approved, you can find this key under <b>{{'ACCOUNT.TITLE'|translate}}</b>.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Warning:</b> your secret identifier, password and pseudonym can not be changed.<br/><b>Make sure you always remember it!</b><br/><b>Are you sure</b> you want to send this account creation request?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Warning:</b> your password and pseudonym can not be changed.<br/><b>Make sure you always remember it!</b><br/><b>Are you sure</b> you want to continue?",
+      "CHECKING_PSEUDO": "Checking...",
+      "PSEUDO_AVAILABLE": "This pseudonym is available",
+      "PSEUDO_NOT_AVAILABLE": "This pseudonym is not available",
+      "INFO_LICENSE": "To be able to adhere to the currency, we ask you to kindly read and accept this license.",
+      "BTN_ACCEPT": "I accept",
+      "BTN_ACCEPT_LICENSE": "I accept the license"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Enter a pseudonym",
+      "HELP": "A pseudonym is needed to let other members find you."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Identity selection",
+      "HELP": "Several <b>different identities</b> have been sent, for the public key <span class=\"gray\"> <i class=\"ion-key\"></i> {{pubkey | formatPubkey}}</span>.<br/>Please select the identity to use:"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Wallet selection"
+    },
+    "WALLET_LIST": {
+      "TITLE": "My wallets",
+      "BTN_NEW": "Add a wallet",
+      "BTN_DOWNLOAD": "Download the list",
+      "BTN_IMPORT_FILE_DOTS": "Import from a file...",
+      "NO_WALLET": "No secondary wallet",
+      "BTN_DELETE": "Remove a secondary wallet...",
+      "BTN_RENAME": "Rename the wallet",
+      "EXPORT_FILENAME": "my_wallets-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Total: ",
+      "EDIT_POPOVER": {
+        "TITLE": "Rename the wallet",
+        "HELP": "Fill in the new name",
+        "NAME_HELP": "Wallet name"
+      },
+      "IMPORT_MODAL": {
+        "TITLE": "Import secondary wallets",
+        "HELP": "To <b>import secodnary wallets</b>, please drag the file in the box below, or click in the box to search for a file.",
+        "WALLET_COUNT": "<b>{{count}}</b> new wallet{{count > 1 ? 's' : ''}}",
+        "NO_NEW_WALLET": "No new wallet"
+      }
+    },
+    "SECURITY": {
+      "ADD_QUESTION": "Add custom question",
+      "BTN_CLEAN": "Clean",
+      "BTN_RESET": "Reset",
+      "DOWNLOAD_REVOKE": "Save a revocation file",
+      "DOWNLOAD_REVOKE_HELP": "Having a revocation file is important, for example in case of loss of identifiers. It allows you to <b>get this account out of the Web Of Trust</b>, thus becoming a simple wallet.",
+      "GENERATE_KEYFILE": "Generate my keychain file ...",
+      "GENERATE_KEYFILE_HELP": "Generate a file allowing you to authenticate without entering your identifiers.<br/><b>Warning:</b> this file will contain your secret key; It is therefore very important to put it in a safe place!",
+      "KEYFILE_FILENAME": "keychain-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Register as member...",
+      "MEMBERSHIP_IN_HELP": "Allows you to <b>transform </b> a simple wallet account <b>into a member account</b>, by sending a membership request. Useful only if you do not already have another member account.",
+      "SEND_IDENTITY": "Publish identity...",
+      "SEND_IDENTITY_HELP": "Allows you to associate a pseudonym to this account, but <b>without applying for membership</b> to become a member. This is not very useful because the validity of this pseudonym association is limited in time.",
+      "HELP_LEVEL": "Choose <strong> at least {{nb}} questions </strong> :",
+      "LEVEL": "Security level",
+      "LOW_LEVEL": "Low <span class=\"hidden-xs\">(2 questions minimum)</span>",
+      "MEDIUM_LEVEL": "Medium <span class=\"hidden-xs\">(4 questions minimum)</span>",
+      "QUESTION_1": "What was your best friend's name when you were a teen ?",
+      "QUESTION_2": "What was the name of your first pet ?",
+      "QUESTION_3": "What is the first meal you have learned to cook ?",
+      "QUESTION_4": "What is the first movie you saw in the cinema?",
+      "QUESTION_5": "Where did you go the first time you flew ?",
+      "QUESTION_6": "What was your favorite elementary school teacher's name  ?",
+      "QUESTION_7": "What would you consider the ideal job ?",
+      "QUESTION_8": "Which children's book do you prefer?",
+      "QUESTION_9": "What was the model of your first vehicle?",
+      "QUESTION_10": "What was your nickname when you were a child ?",
+      "QUESTION_11": "What was your favorite movie character or actor when you were a student ?",
+      "QUESTION_12": "What was your favorite singer or band when you were a student ?",
+      "QUESTION_13": "In which city did your parents meet ?",
+      "QUESTION_14": "What was the name of your first boss ?",
+      "QUESTION_15": "What is the name of the street where you grew up ?",
+      "QUESTION_16": "What is the name of the first beach where you go swim ?",
+      "QUESTION_17": "QWhat is the first album you bought ?",
+      "QUESTION_18": "What is the name of your favorite sport team ?",
+      "QUESTION_19": "What was your grand-father's job ?",
+      "RECOVER_ID": "Recover my password...",
+      "RECOVER_ID_HELP": "If you have a <b>backup file of your identifiers</b>, you can find them by answering your personal questions correctly.",
+      "RECOVER_ID_SELECT_FILE": "Select the <b>backup file of your identifiers</b> to use:",
+      "REVOCATION_WITH_FILE": "Revoke my member account...",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "If you have <b>permanently lost your member account credentials (or if account security is compromised), you can use <b>the revocation file</b> of the account <b>to quit the Web Of Trust</b>.",
+      "REVOCATION_WITH_FILE_HELP": "To <b>permanently revoke</ b> a member account, please drag the revocation file in the box below, or click in the box to search for a file.",
+      "REVOCATION_WALLET": "Revoke this account immediately",
+      "REVOCATION_WALLET_HELP": "Requesting revocation of your identity causes <b>will revoke your membership</ b> (definitely for the associated pseudonym and public key). The account will no longer be able to produce a Universal Dividend.<br/>However, you can still use it as a simple wallet.",
+      "REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "SAVE_ID": "Save my credentials...",
+      "SAVE_ID_HELP": "Creating a backup file, to <b>retrieve your password</b> (and the secret identifier) <b> in case of forgetting</b>. The file is <b>secured</ b> (encrypted) using personal questions.",
+      "STRONG_LEVEL": "Strong <span class=\"hidden-xs \">(6 questions minimum)</span>",
+      "TITLE": "Account and security",
+      "KEYFILE": {
+        "PUBSEC_FORMAT": "PubSec format.",
+        "PUBSEC_FORMAT_HELP": "This file format is compatible in particular with Cesium and Gannonce. Your keychain is stored <b>without encryption</b>: anyone with a copy of this file will be able to empty your account.",
+        "WIF_FORMAT": "Wallet Import Format (WIF)",
+        "WIF_FORMAT_HELP": "This format is used in particular by paper wallets. Your keychain is stored <b>without encryption</b>: anyone with a copy of this file will be able to empty your account.",
+        "EWIF_FORMAT": "Encrypted Wallet Import Format (WIF)",
+        "EWIF_FORMAT_HELP": "This format is used in particular by paper wallets. However, <b>the keychain is encrypted</b> from a passphrase of your choice.",
+        "PASSWORD_POPUP": {
+          "TITLE": "Keychain file encrypted",
+          "HELP": "Please enter the passphrase:",
+          "PASSWORD_HELP": "Passphrase"
+        },
+        "ERROR": {
+          "BAD_PASSWORD": "Bad passphrase",
+          "BAD_CHECKSUM": "Bad checksum"
+        }
+      }
+    },
+    "FILE_NAME": "{{currency}} - Account statement {{pubkey|formatPubkey}} to {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Date",
+      "AMOUNT": "Amount",
+      "COMMENT": "Comment"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Transfer",
+    "SUB_TITLE": "Transfer money",
+    "SUB_TITLE_ALL": "Empty the account",
+    "FROM": "From",
+    "TO": "To",
+    "AMOUNT": "Amount",
+    "AMOUNT_HELP": "Amount",
+    "COMMENT": "Comment",
+    "COMMENT_HELP": "Comment (optional)",
+    "BTN_SEND": "Send",
+    "BTN_ADD_COMMENT": "Add a comment",
+    "REST": "Rest of account",
+    "REST_TO": "to",
+    "WARN_COMMENT_IS_PUBLIC": "Please note that <b>comments are public</b> (not encrypted).",
+    "MODAL": {
+      "TITLE": "Transfer"
+    }
+  },
+  "ERROR": {
+    "UNKNOWN_URI_FORMAT": "Unknown URI format",
+    "PUBKEY_INVALID_CHECKSUM": "Invalid public key (bad checksum).",
+    "POPUP_TITLE": "Error",
+    "UNKNOWN_ERROR": "Unknown error",
+    "CRYPTO_UNKNOWN_ERROR": "Your browser is not compatible with cryptographic features.",
+    "DOWNLOAD_KEYFILE_FAILED": "Failed to generate the keychain file.",
+    "EQUALS_TO_PSEUDO": "Must be different from pseudonym",
+    "EQUALS_TO_SALT": "Must be different from secret identifier",
+    "FIELD_REQUIRED": "This field is required.",
+    "FIELD_TOO_SHORT": "This field value is too short.",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Value is too short (min {{minLength]] characters).",
+    "FIELD_TOO_LONG": "Value is exceeding max length.",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Value is too long (max {{maxLength}} characters).",
+    "FIELD_MIN": "Minimum value: {{min}}",
+    "FIELD_MAX": "Maximal value: {{max}}",
+    "FIELD_ACCENT": "Commas and accent characters not allowed",
+    "FIELD_NOT_NUMBER": "Value is not a number",
+    "FIELD_NOT_INT": "Value is not an integer",
+    "FIELD_NOT_EMAIL": "Email adress not valid",
+    "PASSWORD_NOT_CONFIRMED": "Must match previous password.",
+    "SALT_NOT_CONFIRMED": "Must match previous identifier.",
+    "SEND_IDENTITY_FAILED": "Error while trying to register.",
+    "SEND_CERTIFICATION_FAILED": "Could not certify identity.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "You could not send certification, because your account is <b>not a member account</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "You could not send certification now, because your are <b>not a member</b> yet.<br/><br/>You still need certification to become a member.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "This account could not be certified. No registration found, or need to renew.",
+    "LOGIN_FAILED": "Error while sign in.",
+    "LOAD_IDENTITY_FAILED": "Could not load identity.",
+    "LOAD_REQUIREMENTS_FAILED": "Could not load identity requirements.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Error while sending registration as member.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Error while sending membership revocation.",
+    "REFRESH_WALLET_DATA": "Could not refresh wallet.",
+    "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
+    "GET_CURRENCY_FAILED": "Could not load currency. Please retry later.",
+    "SEND_TX_FAILED": "Could not send transaction.",
+    "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
+    "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
+    "RESTORE_WALLET_DATA_ERROR": "Error while reloading settings from local storage",
+    "LOAD_WALLET_DATA_ERROR": "Error while loading wallet data.",
+    "COPY_CLIPBOARD_FAILED": "Could not copy to clipboard",
+    "TAKE_PICTURE_FAILED": "Could not get picture.",
+    "SCAN_FAILED": "Could not scan QR code.",
+    "SCAN_UNKNOWN_FORMAT": "Code not recognized.",
+    "WOT_LOOKUP_FAILED": "Search failed.",
+    "LOAD_PEER_DATA_FAILED": "Duniter peer not accessible. Please retry later.",
+    "NEED_LOGIN_FIRST": "Please sign in first.",
+    "AMOUNT_REQUIRED": "Amount is required.",
+    "AMOUNT_NEGATIVE": "Negative amount not allowed.",
+    "NOT_ENOUGH_CREDIT": "Not enough credit.",
+    "INVALID_NODE_SUMMARY": "Unreachable peer or invalid address",
+    "INVALID_USER_ID": "Field 'pseudonym' must not contains spaces or special characters.",
+    "INVALID_COMMENT": "Field 'reference' has a bad format.",
+    "INVALID_PUBKEY": "Public key has a bad format.",
+    "INVALID_PUBKEY_CHECKSUM": "Invalid checksum.",
+    "IDENTITY_REVOKED": "This identity <b>has been revoked</b>. It can no longer become a member.",
+    "IDENTITY_REVOKED_WITH_TIME": "This identity <b>has been revoked {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). It can no longer become a member.",
+    "IDENTITY_PENDING_REVOCATION": "The <b>revocation of this identity</b> has been requested and is awaiting processing. Certification is therefore disabled.",
+    "IDENTITY_INVALID_BLOCK_HASH": "This membership application is no longer valid (because it references a block that network peers are cancelled): the person must renew its application for membership <b>before</b> being certified.",
+    "IDENTITY_EXPIRED": "This identity has expired: this person must re-apply <b>before</b> being certified.",
+    "IDENTITY_SANDBOX_FULL": "Could not register, because peer's sandbox is full.<br/><br/>Please retry later or choose another Duniter peer (in <b>Settings</b>).",
+    "IDENTITY_NOT_FOUND": "Identity not found",
+    "IDENTITY_TX_FAILED": "Error while getting identity's transactions",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Membership not valid.",
+    "WALLET_INVALID_BLOCK_HASH": "Your membership application is no longer valid (because it references a block that network peers are cancelled).<br/>You must <a ng-click=\"doQuickFix('renew')\">renew your application for membership</a> to fix this issue.",
+    "WALLET_IDENTITY_EXPIRED": "The publication of your identity <b>has expired</b>.<br/>You must <a ng-click=\"doQuickFix('fixIdentity')\">re-issue your identity</a> to resolve this issue.",
+    "WALLET_REVOKED": "Your identity has been <b>revoked</b>: neither your pseudonym nor your public key will be used in the future for a member account.",
+    "WALLET_HAS_NO_SELF": "Your identity must first have been published, and not expired.",
+    "AUTH_REQUIRED": "Authentication required.",
+    "AUTH_INVALID_PUBKEY": "The public key does not match the connected account.",
+    "AUTH_INVALID_SCRYPT": "Invalid username or password.",
+    "AUTH_INVALID_FILE": "Invalid keychain file.",
+    "AUTH_FILE_ERROR": "Failed to open keychain file",
+    "IDENTITY_ALREADY_CERTIFY": "You have <b>already certified</b> that identity.<br/><br/>Your certificate is still valid (expires {{expiresIn|formatDuration}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "You have <b>already certified</b> that identity.<br/><br/>Your certification is still pending (Deadline for treatment {{expiresIn|formatDuration}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Unable to certify",
+    "LOAD_NEWCOMERS_FAILED": "Unable to load new members.",
+    "LOAD_PENDING_FAILED": "Unable to load pending registrations.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "You must <b>be a member</b> in order to perform this action.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "You must <b>be a member (or old member)</b> in order to perform this action.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "You must have <b>published your identity</b> in order to perform this action.",
+    "GET_BLOCK_FAILED": "Error while getting block",
+    "INVALID_BLOCK_HASH": "Block not found (incorrect hash)",
+    "DOWNLOAD_REVOCATION_FAILED": "Error while downloading revocation file.",
+    "REVOCATION_FAILED": "Error while trying to revoke the identity.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Wrong secret identifier or password ",
+    "RECOVER_ID_FAILED": "Could not recover password",
+    "LOAD_FILE_FAILED": "Unable to load file",
+    "NOT_VALID_REVOCATION_FILE": "Invalid revocation file (wrong file format)",
+    "NOT_VALID_SAVE_ID_FILE": "Invalid credentials backup file (wrong file format)",
+    "NOT_VALID_KEY_FILE": "Invalid keychain file (unrecognized format)",
+    "EXISTING_ACCOUNT": "Your identifiers correspond to an already existing account, whose <a ng-click=\"showHelpModal('pubkey')\">public key</a> is:",
+    "EXISTING_ACCOUNT_REQUEST": "Please modify your credentials so that they correspond to an unused account.",
+    "GET_LICENSE_FILE_FAILED": "Unable to get license file",
+    "CHECK_NETWORK_CONNECTION": "No peer appears to be accessible.<br/><br/>Please <b>check your Internet connection</b>.",
+    "ISSUE_524_TX_FAILED": "Failed to transfer.<br/><br/>A message has been sent to developers to help solve the problem.<b>Thank you for your help</b>.",
+    "ADD_SECONDARY_WALLET_FAILED": "Unable to add secondary wallet.",
+    "REMOVE_SECONDARY_WALLET_FAILED": "Unable to remove secondary wallet.",
+    "UPDATE_WALLET_LIST_FAILED": "Unable to refresh the list of wallets.",
+    "LOAD_WALLET_LIST_FAILED": "Unable to load the list of wallets.",
+    "SAVE_WALLET_LIST_FAILED": "Unable to save the list of wallets.",
+    "COULD_NOT_ADD_MAIN_WALLET": "This wallet <b>is the main account</b> with which you are connected. Unable to add it as a secondary wallet.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Wallet already existing in the list.",
+    "UNKNOWN_WALLET_ID": "Unknown secondary wallet.",
+    "RESTORE_WALLET_LIST_FAILED": "Unable to restore the list of wallets.",
+    "INVALID_FILE_FORMAT": "Invalid file format.",
+    "SAME_TX_RECIPIENT": "The recipient must be different from the issuer."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Information",
+    "CERTIFICATION_DONE": "Identity successfully signed",
+    "NOT_ENOUGH_CREDIT": "Not enough credit",
+    "TRANSFER_SENT": "Transfer request successfully sent",
+    "COPY_TO_CLIPBOARD_DONE": "Copy succeeded",
+    "MEMBERSHIP_OUT_SENT": "Membership revocation sent",
+    "NOT_NEED_MEMBERSHIP": "Already a member.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "This identity will soon lack certification (at least {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "This identity did not send a membership request. She will have to if she wishes to become a member.",
+    "HAS_ALTERNATIVE_IDENTITIES": "There are <b>multiple identities</b> attached to this public key. <b>Before any certification</b>, please <a ng-click=\"doQuickFix('showSelectIdentities')\">check other identities</a> to choose the correct one, or contact the wallet owner.",
+    "REVOCATION_SENT": "Revocation sent successfully",
+    "REVOCATION_SENT_WAITING_PROCESS": "Revocation <b>has been sent successfully</b>. It is awaiting processing.",
+    "FEATURES_NOT_IMPLEMENTED": "This features is not implemented yet.<br/><br/>Why not to contribute to get it faster? ;)",
+    "EMPTY_TX_HISTORY": "No operations to export"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Are you sure</b> you want to continue?",
+    "POPUP_TITLE": "<b>Confirmation</b>",
+    "POPUP_WARNING_TITLE": "<b>Warning</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Security warning</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certify {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">Don't certify an account</b> if you believe that: <ul><li>1.) the issuers identity might be faked.<li>2.) the issuer already has another certified account.<li>3.) the issuer purposely or carelessly violates rule 1 or 2 (he certifies faked or double accounts).</ul></small><br/>Are you sure you want to certify this identity?",
+    "FULLSCREEN": "View the application in full screen?",
+    "EXIT_APP": "Close the application ?",
+    "TRANSFER": "<b>Transfer summary:</b><br/><br/><ul><li> - From: <b>{{from}}</b></li><li> - To: <b>{{to}}</b></li><li> - Amount: <b>{{amount}} {{unit}}</b></li><li> - Comment: <i>{{comment}}</i></li></ul><br/><b>Are-you sure you want to do this transfer?</b>",
+    "TRANSFER_ALL": "<b>Transfer summary:</b><br/><br/><ul><li> - From: <b>{{from}}</b></li><li> - To: <b>{{to}}</b></li><li> - Amount: <b>{{amount}} {{unit}}</b></li><li> - Comment: <i>{{comment}}</i></li><br/><li> - Rest : <b>{{restAmount}} {{unit}}</b> to <b>{{restTo}}</b></li></ul><br/><b>Are-you sure you want to do this transfer?</b>",
+    "MEMBERSHIP_OUT": "This operation is <b>irreversible</b>.<br/></br/><b>Are you sure you want to terminate your membership?</b>",
+    "MEMBERSHIP_OUT_2": "This operation is <b>irreversible</b>!<br/><br/>Are you sure you want to <b>terminate your membership</b>?",
+    "LOGIN_UNUSED_WALLET_TITLE": "Typing error?",
+    "LOGIN_UNUSED_WALLET": "The account seems to be <b>inactive</b>.<br/><br/>It's probably a <b>typing error</b> when sign in. Please try again, checking that <b>public key is yours<b/>.",
+    "FIX_IDENTITY": "The pseudonym <b>{{uid}}</b> will be published again, replacing the old publication that has expired.<br/></br/><b>Are you sure</b> you want to continue?",
+    "FIX_MEMBERSHIP": "Your application for membership will be sent.<br/></br/><b>Are you sure?</b>",
+    "MEMBERSHIP": "Your membership request will be sent. <br/></br/><b>Are you sure?</b>",
+    "RENEW_MEMBERSHIP": "Your membership will be renewed.<br/></br/><b>Are you sure?</b>",
+    "REVOKE_IDENTITY": "You will <b>definitely revoke this identity</b>.<br/><br/>The public key and the associated pseudonym <b>will never be used again</b> (for a member account).<br/></br/><b>Are you sure</b> you want to revoke this identity?",
+    "REVOKE_IDENTITY_2": "This operation is <b>irreversible</b>!<br/><br/>Are you sure you want to <b>revoke this identity</b>?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Your membership does not need to be renewed (it will only expire in {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Are you sure you</b> want to renew your membership?",
+    "SAVE_BEFORE_LEAVE": "Do you want to <b>save your changes</b> before leaving the page?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Changes not saved",
+    "LOGOUT": "Are you sure you want to logout?",
+    "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",
+    "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Demonstration mode",
+      "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.",
+      "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation on account is available, but no operation can be performed.",
+      "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Monitoring mode",
+      "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
+      "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
+    }
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Revocation file</b>",
+    "POPUP_REVOKE_MESSAGE": "To safeguard your account, please download the <b>account revocation document</b>. It will allow you to cancel your account (in case of account theft, ID, an incorrectly created account, etc.).<br/><br/><b>Please store it in a safe place.</b>"
+  },
+  "HELP": {
+    "TITLE": "Online help",
+    "JOIN": {
+      "SECTION": "Join",
+      "SALT": "The secret identifier is very important. It is used to hash you password, which in turn is used to calculate your <span class=\"text-italic\">public account key</span> (its number) and the private key to access it.<br/><b>Please remeber this identifier well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good secret identifier must be sufficiently long (8 characters at the very least) and as original as possible.",
+      "PASSWORD": "The password is very important. Together with the secret identifier, it is use to calculate your account number (pblic key) and the private key to access it.<br/><b>Please remember it well</b>, because there is no way to recover it when lost.<br/>Furthermore, it cannot be changed without having to create a new account.<br/><br/>A good password is made (ideally) of at least 8 characters, with at least one capital and one number.",
+      "PSEUDO": "A pseudonym is used only when joining as <span class=\"text-italic\">member</span>. It is always associated with a wallet (by its <span class=\"text-italic\">public key</span>).<br/>It is published on the network so that other users may identify it, certify or send money to the account.<br/>A pseudonym must be unique among all members (current and past)."
+    },
+    "LOGIN": {
+      "SECTION": "Log in",
+      "PUBKEY": "Account public key",
+      "PUBKEY_DEF": "The public key of the keychain is generated from the entered identifiers (any), but does not correspond to an account already used.<br/><b>Make sure your public key is the same as your account</b>. Otherwise, you will be logged into an account that is probably never used, as the risk of collision with an existing account is very small.<br/><a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_cryptography\" target=\"_ system\">Learn more about cryptography</a> by public key.",
+      "METHOD": "Connection methods",
+      "METHOD_DEF": "Several options are available to connect to a portfolios: <br/> - The connection <b>with salt (simple or advanced)</b> mixes your password with the secret identifier, to limit the attempts of piracy<br/> - The connection <b>using public key</b> prevents you from entering your credentials, which you will be asked only when an operation need it.<br/> - The connection <b>using keychain file</b> will read the public and private keys of the account from a file without the need to enter credentials. Several file formats are possible."
+    },
+    "GLOSSARY": {
+      "SECTION": "Glossary",
+      "PUBKEY_DEF": "A public key always identifies a wallet. It may identify a member. In Cesium it is calculated using the secret identifier and the password.",
+      "MEMBER": "Member",
+      "MEMBER_DEF": "A member is a real and living human, wishing to participate freely to the monitary community. The member will receive universal dividend, according to the period and amount as defined in the <span class=\"text-italic\">currency parameters</span>.",
+      "CURRENCY_RULES": "Currency rules",
+      "CURRENCY_RULES_DEF": "The currency rules are defined only once, and for all. They set the parameters under which the currency will perform: universal dividend calculation, the amount of certifications needed to become a member, the maximum amount of certifications a member can send, etc.<br/><br/>The parameters cannot be modified because of the use of a <span class=\"text-italic\">Blockchain</span> which carries and executes these rules, and constantly verifies their correct application. <a href=\"#/app/currency\">See current parameters</a>.",
+      "BLOCKCHAIN": "Blockchain",
+      "BLOCKCHAIN_DEF": "The Blockchain is a decentralised system which, in case of Duniter, serves to carry and execute the <span class=\"text-italic\">currency rules</span>.<br/><a href=\"http://en.duniter.org/presentation/\" target=\"_blank\">Read more about Duniter</a> and the working of its blockchain.",
+      "UNIVERSAL_DIVIDEND_DEF": "The Universal Dividend (UD) is the quantity of money co-created by each member, according to the period and the calculation defined in the <span class=\"text-italic\">currency rules</span>.<br/>Every term, the members receive an equal amount of new money on their account.<br/><br/>The UD undergoes a steady growth, to remain fair under its members (current and future), calculated by an average life expectancy, as demonstrated in the Relative Theory of Money (RTM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">Read more about RTM</a> and open money.",
+      "WOT": "Web of Trust (WoT)",
+      "WOT_DEF": "The Web of Trust is made up of all the members of the currency, and the links of certification which connect them.",
+      "DISTANCE_RULE": "Distance rule",
+      "DISTANCE_RULE_DEF": "The rule of distance defines <b>a maximum distance to meet</b> between an applicant and a minimum number of referring member. This distance is calculated using the certification links."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "Menu <b>{{'MENU.CURRENCY'|translate}}</b> allows discovery of <b>currency parameters</b> and its state.",
+      "CURRENCY_WOT": "The <b>member count</b> shows the <b>community's weight and evolution</b>.",
+      "CURRENCY_MASS": "Shown here is the <b>total amount</b> currently in circulation and its <b>average distribution</b> per member.<br/><br/>This allows to estimate the <b>worth of any amount</b>, in respect to what <b>others own</b> on their account (on average).",
+      "CURRENCY_UNIT_RELATIVE": "The unit used here (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amounts in {{currency|capitalize}} have been devided by the <b>Universal Dividend</b> (UD).<br/><br/><small>This relative unit is <b>relevant</b> because it is stable in contrast to the permanently growing monitary mass.</small>",
+      "CURRENCY_CHANGE_UNIT": "The option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> allows to <b>switch the unit</b> to show amounts in <b>{{currency|capitalize}}</b>, undevided by the Universal Dividend (instead of in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "The option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> allows to <b>switch the unit</b> to show amounts in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, which is relative to the Universal Dividend (the amount co-produced by each member).",
+      "CURRENCY_RULES": "The <b>rules</b> of the currency determine its <b>exact and predictible</b> performance.<br/><br/>As a true DNA of the currency these rules make the monetary code <b>transparent and understandable</b>.",
+      "MENU_BTN_NETWORK": "Menu <b>{{'MENU.NETWORK'|translate}}</b> allows discovery of <b>network's state<b>.",
+      "NETWORK_BLOCKCHAIN": "All monetary transactions are recoded in a <b>public and tamper proof</b> ledger, generally referred to as the <b>blockchain</b>.",
+      "NETWORK_PEERS": "The <b>peers</b> shown here correspond to <b>computers that update and check</b> the blockchain.<br/><br/>The more active peers there are, the more <b>decentralised</b> and therefore trustworhty the currency becomes.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "This <b>number</b> (in green) indicates the peer's <b>latest validated block</b> (last page written in the ledger).<br/><br/>Green indicates that the block was equally validated by the <b>majority of other peers</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Each member</b>, equiped with a computer with Internet, <b>can participate, adding a peer</b> simply by <b>installing the Duniter software</b> (free/libre). <a target=\"_new\" href=\"{{installDocUrl}}\" target=\"_system\">Read the installation manual &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> allows access to your account balance and transaction history.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Here you can consult your account status, transaction history and your certifications.",
+      "WALLET_CERTIFICATIONS": "Click here to reveiw the details of your certifications (given and received).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Click here to review the details of your <b>received certifications</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Click here to review the details of your <b>given certifications</b>.",
+      "WALLET_BALANCE": "Your account <b>balance</b> is shown here.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>The used unit (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amount in {{currency|capitalize}} has been divided by the <b>Universal Dividend</b> (UD) co-created by each member.<br/>At this moment, 1 UD equals {{currentUD}} {{currency|capitalize}}.",
+      "WALLET_BALANCE_CHANGE_UNIT": "You can <b>change the unit</b> in which amounts are shown in <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>For example, to display amounts <b>directly in {{currency|capitalize}}</b> instead of relative amounts.",
+      "WALLET_PUBKEY": "This is your account public key. You can communicate it to a third party so that it more easily identifies your account.",
+      "WALLET_SEND": "Issue a payment in just a few clicks.",
+      "WALLET_SEND_NO_MONEY": "Issue a payment in just a few clicks.<br/>(Your balance does not allow this yet)",
+      "WALLET_OPTIONS": "Please note that this button allows access to <b>other, less used actions</b>.<br/><br/>Don't forget to take a quick look, when you have a moment!",
+      "WALLET_RECEIVED_CERTS": "This shows the list of persons that certified you.",
+      "WALLET_CERTIFY": "The button <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> allows selecting an identity and certifying it.<br/><br/>Only users that are <b>already member</b> may certify others.",
+      "WALLET_CERT_STOCK": "Your supply of certifications (to send) is limited to <b>{{sigStock}} certifications</b>.<br/><br/>This supply will replete itself over time, as and when earlier certifications expire.",
+      "MENU_BTN_WALLETS": "The menu <b>{{'MENU.WALLETS'|translate}}</b> allows you to add additional wallets that you manage.",
+      "MENU_BTN_TX": "The menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> allow access to transactions history, and send new payments.",
+      "MENU_BTN_WOT": "The menu <b>{{'MENU.WOT'|translate}}</b> allows searching <b>users</b> of the currency (member or not).",
+      "WOT_SEARCH_TEXT_XS": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>The search will start automatically.",
+      "WOT_SEARCH_TEXT": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>Then hit <b>Enter</b> to start the search.",
+      "WOT_SEARCH_RESULT": "Simply click a user row to view the details sheet.",
+      "WOT_VIEW_CERTIFICATIONS": "The row <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> shows how many members members validated this identity.<br/><br/>These certifications testify that the account belongs to <b>a living human</b> and this person has <b>no other member account</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "There are at least <b>{{sigQty}} certifications</b> needed to become a member and receive the <b>Universal Dividend</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Click here to open <b>a list of all certifications</b> given to and by this identity.",
+      "WOT_VIEW_CERTIFY": "The button <b>{{'WOT.BTN_CERTIFY'|translate}}</b> allows to add your certification to this identity.",
+      "CERTIFY_RULES": "<b>Attention:</b> Only certify <b>real and living persons</b> that do not own any other certified account.<br/><br/>The trust carried by the currency depends on each member's vigilance!",
+      "MENU_BTN_SETTINGS": "The <b>{{'MENU.SETTINGS'|translate}}</b> allow you to configure the Cesium application.<br/><br/>For example, you can <b>change the unit</b> in which the currency will be shown.",
+      "HEADER_BAR_BTN_PROFILE": "Click here to access your <b>user profile</b>",
+      "SETTINGS_CHANGE_UNIT": "You can <b>change the display unit</b> of amounts by clicking here.<br/><br/>- Deactivate the option to show amounts in {{currency|capitalize}}.<br/>- Activate the option for relative amounts in {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (<b>divided</b> by the current Universal Dividend).",
+      "END_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>Welcome to the <b>free economy</b>!",
+      "END_NOT_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>If you wish to join the currency {{currency|capitalize}}, simply click <b>{{'LOGIN.CREATE_FREE_ACCOUNT'|translate}}</b> below.",
+      "END_READONLY": "This guided visit has <b>ended</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."
+    }
+  },
+  "API": {
+    "COMMON": {
+      "LINK_DOC": "API documentation",
+      "LINK_DOC_HELP": "API documentation for developers",
+      "LINK_STANDARD_APP": "Standard version",
+      "LINK_STANDARD_APP_HELP": "Open standard version of {{'COMMON.APP_NAME'|translate}}",
+      "CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or contact the web site administrator."
+    },
+    "HOME": {
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} API Documentation",
+      "MESSAGE": "Welcome to the {{'COMMON.APP_NAME'|translate}} <b>API documentation </b>.<br/>Connect your web site to <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> very easily!",
+      "MESSAGE_SHORT": "Connect your websites to <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> very easily!",
+      "DOC_HEADER": "Available services:"
+    },
+    "TRANSFER": {
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} - Online payment",
+      "TITLE_SHORT": "Online payment",
+      "SUMMARY": "Order summary:",
+      "AMOUNT": "Amount:",
+      "AMOUNTS_HELP": "Please select the amount:",
+      "NAME": "Name:",
+      "PUBKEY": "Public key of the recipient:",
+      "COMMENT": "Order reference:",
+      "NODE": "Peer address:",
+      "DEMO": {
+        "SALT": "demo",
+        "PASSWORD": "demo",
+        "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
+        "HELP": "<b>Demonstration mode</b>: No payment will actually be sent during this simulation.<br/>Please use credentials: <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
+        "BAD_CREDENTIALS": "Invalid credentials.<br/>In demonstration mode, credentials should be: {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"
+      },
+      "INFO": {
+        "SUCCESS_REDIRECTING_WITH_NAME": "Payment sent.<br/>Redirect to <b>{{name}}</b>...",
+        "SUCCESS_REDIRECTING": "Payment sent.<br/>Redirect to the seller's website...",
+        "CANCEL_REDIRECTING_WITH_NAME": "Payment cancelled.<br/>Redirect to <b>{{name}}</b>...",
+        "CANCEL_REDIRECTING": "Payment cancelled.<br/>Redirect to the seller's website..."
+      },
+      "ERROR": {
+        "TRANSFER_FAILED": "Payment failed"
+      }
+    },
+    "DOC": {
+      "DESCRIPTION_DIVIDER": "Description",
+      "URL_DIVIDER": "Calling address",
+      "PARAMETERS_DIVIDER": "Parameters",
+      "AVAILABLE_PARAMETERS": "Here is the list of al available parameters:",
+      "DEMO_DIVIDER": "Try it !",
+      "DEMO_HELP": "To test this service, click on this button. The result content will be display below.",
+      "DEMO_RESULT": "Result returned by call:",
+      "DEMO_RESULT_PEER": "Peer address used:",
+      "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> Success!",
+      "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Cancelled by user",
+      "INTEGRATE_DIVIDER": "Website integration",
+      "INTEGRATE_CODE": "Code:",
+      "INTEGRATE_RESULT": "Result preview:",
+      "INTEGRATE_PARAMETERS": "Parameters",
+      "TRANSFER": {
+        "TITLE": "Payments",
+        "DESCRIPTION": "From a site (eg online marketplace) you can delegate payment in free currency to Cesium API. To do this, simply open a page at the following address:",
+        "PARAM_PUBKEY": "Recipient's public key",
+        "PARAM_PUBKEY_HELP": "Recipient's public key (required)",
+        "PARAM_AMOUNT": "Amount",
+        "PARAM_AMOUNT_HELP": "Transaction amount (required)",
+        "PARAM_COMMENT": "Reference (or comment)",
+        "PARAM_COMMENT_HELP": "Reference or comment. You will allow for example to identify the payment in the BlockChain.",
+        "PARAM_NAME": "Name (of recipient or website)",
+        "PARAM_NAME_HELP": "The name of your website. This can be a readable name (eg \"My online site\"), or a web address (eg \"www.MySite.com\").",
+        "PARAM_REDIRECT_URL": "URL redirection",
+        "PARAM_REDIRECT_URL_HELP": "URL redirection after sending payment, after the payment has been sent. Can contain the following strings, which will be replaced by the values of the transaction: \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\" and \"{pubkey}\".",
+        "PARAM_CANCEL_URL": "URL if cancelled",
+        "PARAM_CANCEL_URL_HELP": "URL in case of cancellation.  Can contain the following strings, which will be replaced: \"{comment}\", \"{amount}\" and \"{pubkey}\".",
+        "PARAM_PREFERRED_NODE": "Preferred Duniter peer",
+        "PARAM_PREFERRED_NODE_HELP": "Peer address (URL) to use preferably (\"g1.domain.com:443\" or \"https://g1.domain.com\")",
+        "EXAMPLES_HELP": "Examples of integration:",
+        "EXAMPLE_BUTTON": "HTML Button",
+        "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pay in {{currency}}",
+        "EXAMPLE_BUTTON_DEFAULT_STYLE": "Custom style",
+        "EXAMPLE_BUTTON_TEXT_HELP": "Button text",
+        "EXAMPLE_BUTTON_BG_COLOR": "Background color",
+        "EXAMPLE_BUTTON_BG_COLOR_HELP": "eg: #fbc14c, yellow, lightgrey, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_FONT_COLOR": "Font color",
+        "EXAMPLE_BUTTON_FONT_COLOR_HELP": "eg: black, orange, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_TEXT_ICON": "Icon",
+        "EXAMPLE_BUTTON_TEXT_WIDTH": "Width",
+        "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "eg: 200px, 50%",
+        "EXAMPLE_BUTTON_ICON_NONE": "No icon",
+        "EXAMPLE_BUTTON_ICON_DUNITER": "Duniter logo",
+        "EXAMPLE_BUTTON_ICON_CESIUM": "Cesium logo",
+        "EXAMPLE_BUTTON_ICON_G1_COLOR": "Äž1 logo",
+        "EXAMPLE_BUTTON_ICON_G1_BLACK": "Äž1 logo (outline)"
+      }
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/eo-EO-2.0.0-alpha42.json b/ios/App/public/assets/i18n/eo-EO-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..963cb589ba6ec417cfb39f4114c5c65621984b15
--- /dev/null
+++ b/ios/App/public/assets/i18n/eo-EO-2.0.0-alpha42.json
@@ -0,0 +1,1024 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "date : {{build}}",
+    "PUBKEY": "Publika ŝlosilo",
+    "MEMBER": "Membro",
+    "BLOCK": "Bloko",
+    "BTN_OK": "OK",
+    "BTN_YES": "Jes",
+    "BTN_NO": "Ne",
+    "BTN_SEND": "Sendi",
+    "BTN_SEND_MONEY": "Fari elspezon",
+    "BTN_SEND_MONEY_SHORT": "Elspezo",
+    "BTN_SAVE": "Konservi",
+    "BTN_YES_SAVE": "Jes, Konservi",
+    "BTN_YES_CONTINUE": "Jes, DaÅ­rigi",
+    "BTN_SHOW": "Vidi",
+    "BTN_SHOW_PUBKEY": "Afiŝi la publikan ŝlosilon",
+    "BTN_RELATIVE_UNIT": "Afiŝi la sumojn en UD?",
+    "BTN_BACK": "Reiro",
+    "BTN_NEXT": "Sekva",
+    "BTN_IMPORT": "Enporti",
+    "BTN_CANCEL": "Nuligi",
+    "BTN_CLOSE": "Fermi",
+    "BTN_LATER": "Poste",
+    "BTN_LOGIN": "Konektiĝi",
+    "BTN_LOGOUT": "Malkonektiĝo",
+    "BTN_ADD_ACCOUNT": "Nova konto",
+    "BTN_SHARE": "Diskonigi",
+    "BTN_EDIT": "Modifi",
+    "BTN_DELETE": "Forigi",
+    "BTN_ADD": "Aldoni",
+    "BTN_SEARCH": "Serĉi",
+    "BTN_REFRESH": "Aktualigi",
+    "BTN_RETRY": "Rekomenci",
+    "BTN_START": "Komenci",
+    "BTN_CONTINUE": "DaÅ­rigi",
+    "BTN_CREATE": "Krei",
+    "BTN_UNDERSTOOD": "Mi komprenis",
+    "BTN_OPTIONS": "Kromeblecoj",
+    "BTN_HELP_TOUR": "Gvidata vizito",
+    "BTN_HELP_TOUR_SCREEN": "Malkovri tiun ĉi paĝon",
+    "BTN_DOWNLOAD": "Elŝuti",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Elŝuti la konto-tabelon",
+    "BTN_MODIFY": "Modifi",
+    "CHOOSE_FILE": "Almetu vian dosieron <br/>aŭ klaku por elekti ĝin",
+    "DAYS": "tagoj",
+    "NO_ACCOUNT_QUESTION": "Ankoraŭ sen konto? Kreu ĝin senpage!",
+    "SEARCH_NO_RESULT": "Neniu rezulto trovita",
+    "LOADING": "Bonvolu pacienci...",
+    "LOADING_WAIT": "Bonvolu pacienci...<br/><small>(Atendado pri disponebleco de la nodo)</small>",
+    "SEARCHING": "Serĉanta...",
+    "FROM": "De",
+    "TO": "Al",
+    "COPY": "Kopii",
+    "LANGUAGE": "Lingvo",
+    "UNIVERSAL_DIVIDEND": "Universala dividendo",
+    "UD": "UD",
+    "DATE_PATTERN": "DD/MM/YY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(malplena)",
+    "UID": "PseÅ­donimo",
+    "ENABLE": "Aktiva",
+    "DISABLE": "Malaktiva",
+    "RESULTS_LIST": "Rezultoj",
+    "RESULTS_COUNT": "{{count}} rezultoj",
+    "EXECUTION_TIME": "Plenumita en {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Afiŝi la signojn klare?",
+    "POPOVER_ACTIONS_TITLE": "Kromeblecoj",
+    "POPOVER_FILTER_TITLE": "Filtriloj",
+    "SHOW_MORE": "Afiŝi pli",
+    "SHOW_MORE_COUNT": "(nuna limo je {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Diskonigi",
+      "SHARE_ON_TWITTER": "Diskonigi ĉe Twitter",
+      "SHARE_ON_FACEBOOK": "Diskonigi ĉe Facebook",
+      "SHARE_ON_DIASPORA": "Diskonigi ĉe Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Diskonigi ĉe Google+"
+    },
+    "FILE": {
+      "DATE": "Dato:",
+      "TYPE": "Tipo:",
+      "SIZE": "Pezo:",
+      "VALIDATING": "Validiĝanta..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Elekti la fonton:",
+    "BTN_PICTURE_GALLERY": "Bildaro",
+    "BTN_PICTURE_CAMERA": "<b>Kamerao</b>"
+  },
+  "MENU": {
+    "HOME": "Hejmpaĝo",
+    "WOT": "Kontaro",
+    "CURRENCY": "Mono",
+    "ACCOUNT": "Mia konto",
+    "WALLETS": "Miaj monujoj",
+    "SETTINGS": "Parametroj",
+    "NETWORK": "Reto",
+    "TRANSACTIONS": "Miaj spezoj"
+  },
+  "ABOUT": {
+    "TITLE": "Prie",
+    "LICENSE": "Programo <b>libera</b> (Licenco GNU AGPLv3).",
+    "LATEST_RELEASE": "Ekzistas <b>pli freŝdata versio</b> de {{'COMMON.APP_NAME'|translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Bonvolu ĝisdatigi {{'COMMON.APP_NAME'|translate}} (lasta versio: <b>v{{version}}</b>)",
+    "CODE": "Fonto-kodo:",
+    "OFFICIAL_WEB_SITE": "Oficiala retejo:",
+    "DEVELOPERS": "Programita de:",
+    "FORUM": "Forumo:",
+    "PLEASE_REPORT_ISSUE": "Ne hezitu sciigi al ni la renkontitajn fuŝaĵojn",
+    "REPORT_ISSUE": "Sciigi problemon",
+    "BTN_OPEN_DEV_WINDOW": "Malfermi la fenestron pri malfuŝigado"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Bonvenon ĉe la programo Cesium!",
+    "WELCOME_READONLY": "Bonvenon ĉe Cesium <span class='badge badge-balanced'>Observo</span>!",
+    "MESSAGE": "Ricevu kaj sendu liberan monon {{currency}}",
+    "MESSAGE_READONLY": "Sekvu la staton de la libera mono {{currency}} en tuja tempo.",
+    "BTN_CURRENCY": "Esploru la monon {{currency}}",
+    "BTN_ABOUT": "prie",
+    "BTN_HELP": "Reta helpo",
+    "BTN_NETWORK": "Stato de la reto",
+    "FREE_SOFTWARE": "Libera programo",
+    "FORK_ME": "Duobligu min!",
+    "SHOW_LICENSE": "Vidi la licencon de la programo",
+    "REPORT_ISSUE": "fuŝaĵo",
+    "NOT_YOUR_ACCOUNT_QUESTION": "Vi ne posedas la konton <b class=\"ion-key\"> {{pubkey|formatPubkey}}</b>&nbsp;?",
+    "BTN_CHANGE_ACCOUNT": "Malkonektu tiun ĉi konton",
+    "CONNECTION_ERROR": "Nodo <b>{{server}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Kontrolu vian retkonekton, aŭ elektu alian nodon <a class=\"positive\" ng-click=\"doQuickFix('settings')\">ĉe la parametroj</a>.",
+    "SHOW_ALL_FEED": "Vidi ĉion",
+    "READ_MORE": "Legi la sekvon",
+    "FEED_SOURCE": "Fonto"
+  },
+  "SETTINGS": {
+    "TITLE": "Parametroj",
+    "DISPLAY_DIVIDER": "Afiŝado",
+    "STORAGE_DIVIDER": "Stokado",
+    "NETWORK_SETTINGS": "Reto",
+    "PEER": "Adreso de la nodo Duniter",
+    "PEER_SHORT": "Adreso de la nodo",
+    "PEER_CHANGED_TEMPORARY": "Adreso provizore uzata",
+    "PERSIST_CACHE": "Konservi la datenojn pri retumado (provaĵo)",
+    "PERSIST_CACHE_HELP": "Ebligas pli rapidan retumadon, loke konservante la ricevitajn datenojn, por uzi ilin de seanco al alia.",
+    "USE_LOCAL_STORAGE": "Aktivigi lokan stokadon",
+    "USE_LOCAL_STORAGE_HELP": "Ebligas konservi viajn parametrojn",
+    "WALLETS_SETTINGS": "Miaj monujoj",
+    "USE_WALLETS_ENCRYPTION": "Sekurigi la liston?",
+    "USE_WALLETS_ENCRYPTION_HELP": "Ebligas sekurigi la liston de viaj monujoj (per ĉifrado), postulante aŭtentigado por aliri ilin.",
+    "ENABLE_HELPTIP": "Aktivigi la rilatigajn help-vezikojn",
+    "DISABLE_HELPTIP": "Malaktivigi la rilatigajn help-vezikojn",
+    "ENABLE_UI_EFFECTS": "Aktivigi la vid-efikojn",
+    "HISTORY_SETTINGS": "Miaj spezoj",
+    "DISPLAY_UD_HISTORY": "Afiŝi la produktitajn dividendojn?",
+    "TX_HISTORY_AUTO_REFRESH": "Aktualigi aÅ­tomate",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Aktualigas la saldon kaj la spezojn aŭtomate, por ĉiu nova bloko de la reto.",
+    "AUTHENTICATION_SETTINGS": "AÅ­tentigado",
+    "KEEP_AUTH": "AÅ­tomata malaÅ­tentigado",
+    "KEEP_AUTH_SHORT": "MalaÅ­tentigado",
+    "KEEP_AUTH_HELP": "Difinas la momenton, kiam la aŭtentigado estas forviŝita de la memoro.",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Post ĉiu ago",
+      "SECONDS": "Post {{value}}s de neatktiveco",
+      "MINUTE": "Post {{value}}min de neatktiveco",
+      "MINUTES": "Post {{value}}min de neatktiveco",
+      "HOUR": "Post {{value}}h de neatktiveco",
+      "ALWAYS": "Fine de la seanco"
+    },
+    "KEYRING_FILE": "Dosiero pri ŝlosilaro",
+    "KEYRING_FILE_HELP": "Ebligas <b>konektiĝi</b> aŭtomate por ĉiu ekuzo<br/>kaj eĉ <b>aŭtentiĝi</b> (nur se \"Finiĝo de la aŭtentiĝo\" estas agordita kiel \"fine de la seanco\").",
+    "REMEMBER_ME": "Memori min?",
+    "REMEMBER_ME_HELP": "Ebligas resti identigita de seanco al alia, loke konservante la publikan ŝlosilon.",
+    "PLUGINS_SETTINGS": "Krom-programoj",
+    "BTN_RESET": "Restarigi la originajn valorojn",
+    "EXPERT_MODE": "Aktivigi la spertan moduson",
+    "EXPERT_MODE_HELP": "Ebligas pli detalan afiŝadon.",
+    "BLOCK_VALIDITY_WINDOW": "Limtempo pri necerteco de la blokoj",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Limtempo pri necerteco",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Limtempo antaÅ­ ol taksi, ke iu informo estas validigita",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "Neniu limtempo",
+      "N": "{{time | formatDuration}} ({{count}} blokoj)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Nodo Duniter",
+      "HOST": "Adreso",
+      "HOST_HELP": "Adreso: servilo: konektujo",
+      "USE_SSL": "Sekurigita?",
+      "USE_SSL_HELP": "(SSL-ĉifrado)",
+      "BTN_SHOW_LIST": "Listo de la nodoj"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Haketo: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Bloko #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Nuna bloko",
+      "TITLE": "Bloko #{{number|formatInteger}}",
+      "COMPUTED_BY": "Kalkulita de la nodo de",
+      "SHOW_RAW": "Vidi la kompletan dosieron",
+      "TECHNICAL_DIVIDER": "Teknikaj informoj",
+      "VERSION": "Versio de la daten-strukturo",
+      "HASH": "Kalkulita haketo",
+      "UNIVERSAL_DIVIDEND_HELP": "Mono kunproduktita de ĉiu el la {{membersCount}} membroj",
+      "EMPTY": "Neniu dateno en tiu ĉi bloko",
+      "POW_MIN": "Minimuma malfacileco",
+      "POW_MIN_HELP": "Malfacileco trudita por la haket-kalkulo",
+      "DATA_DIVIDER": "Datenoj",
+      "IDENTITIES_COUNT": "Novaj identecoj",
+      "JOINERS_COUNT": "Novaj membroj",
+      "ACTIVES_COUNT": "Revalidigoj",
+      "ACTIVES_COUNT_HELP": "Membroj revalidigintaj sian membrecon",
+      "LEAVERS_COUNT": "Membroj elirintaj",
+      "LEAVERS_COUNT_HELP": "Membroj ne plu dezirantaj atestaĵon",
+      "EXCLUDED_COUNT": "Membroj eksigitaj",
+      "EXCLUDED_COUNT_HELP": "Malnovaj membroj eksigitaj pro nerevalidiĝo aŭ manko de atestaĵoj",
+      "REVOKED_COUNT": "Nuligitaj identecoj",
+      "REVOKED_COUNT_HELP": "Tiuj kontoj ne plu povos esti membroj",
+      "TX_COUNT": "Spezoj",
+      "CERT_COUNT": "Atestaĵoj",
+      "TX_TO_HIMSELF": "Operacio pri monŝanĝo",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Kondiĉoj por malblokado",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "kaj",
+        "OR": "aÅ­"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Subskribo</b> de ",
+        "XHX": "<b>Pasvorto</b>, el kiu SHA256 =",
+        "CSV": "Blokita dum",
+        "CLTV": "Blokita ĝis"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blokoj",
+      "NO_BLOCK": "Neniu bloko",
+      "LAST_BLOCKS": "Lastaj blokoj:",
+      "BTN_COMPACT": "Densigi"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Mono",
+      "TAB_CURRENCY": "Mono",
+      "TAB_WOT": "Reto de fido",
+      "TAB_NETWORK": "Reto",
+      "TAB_BLOCKS": "Blokoj",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} estas <b>libera mono</b>, kiu ekis {{firstBlockTime|formatFromNow}}. Ĝi nombras nun <b>{{N}} membrojn</b>, kiuj produktas kaj ricevas <a ng-click=\"showHelpModal('ud')\">Universalan Dividendon</a> (UD), ĉiun {{dt|formatPeriod}}n.",
+      "NETWORK_RULES_DIVIDER": "Reguloj de la reto",
+      "CURRENCY_NAME": "Nomo de la mono",
+      "MEMBERS": "Nombro de membroj",
+      "MEMBERS_VARIATION": "Variado depost la lasta UD",
+      "MONEY_DIVIDER": "Mono",
+      "MASS": "Mona maso",
+      "SHARE": "Monkvanto por ĉiu membro",
+      "UD": "Universala Dividendo",
+      "C_ACTUAL": "Nuna kreskado",
+      "MEDIAN_TIME": "Horo de la blokĉeno",
+      "POW_MIN": "Minimuma nivelo pri malfacileco de kalkulo",
+      "MONEY_RULES_DIVIDER": "Reguloj de la mono",
+      "C_RULE": "Teoria kreskado celata",
+      "UD_RULE": "Kalkulo de la universala dividendo",
+      "DT_REEVAL": "Periodo de revalorigo de la UD",
+      "REEVAL_SYMBOL": "reval",
+      "DT_REEVAL_VALUE": "Ĉiuj <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Dato de la unua revalorigo",
+      "SIG_QTY_RULE": "Nombro de necesaj atestaĵoj por fariĝi membro",
+      "SIG_STOCK": "Maksimuma nombro da senditaj atestaĵoj por membro",
+      "SIG_PERIOD": "Minimuma daŭro de atendado inter 2 sinsekvaj atestaĵoj senditaj de sama persono",
+      "SIG_WINDOW": "Limdaŭro por akcepti atestaĵon",
+      "SIG_VALIDITY": "Vivdaŭro de atestaĵo, kiu estis akceptita",
+      "MS_WINDOW": "Limdaŭro por la akcepto de aliĝ-peto",
+      "MS_VALIDITY": "Vivdaŭro de aliĝo, kiu estis akceptita",
+      "STEP_MAX": "Maksimuma distanco, per la atestaĵoj, inter nova eniranto kaj la referencaj membroj",
+      "WOT_RULES_DIVIDER": "Reguloj de la reto de fido",
+      "SENTRIES": "Nombro de atestaĵoj (senditaj <b>kaj</b> ricevitaj) por fariĝi referenca membro",
+      "SENTRIES_FORMULA": "Nombro de atestaĵoj (senditaj <b>kaj</b> ricevitaj) por fariĝi referenca membro (formulo)",
+      "XPERCENT": "Minimuma procento da referencaj membroj atingenda por konformiĝi al la regulo pri distanco",
+      "AVG_GEN_TIME": "Meza daÅ­ro inter du blokoj",
+      "CURRENT": "nuna",
+      "MATH_CEILING": "PLAFONO",
+      "DISPLAY_ALL_RULES": "Afiŝi ĉiujn regulojn?",
+      "BTN_SHOW_LICENSE": "Vidi la licencon",
+      "WOT_DIVIDER": "Reto de fido"
+    },
+    "LICENSE": {
+      "TITLE": "Licenco de la mono",
+      "BTN_DOWNLOAD": "Elŝuti la dosieron",
+      "NO_LICENSE_FILE": "Dosiero pri licenco ne trovita."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Horo de la blokĉeno",
+      "LOADING_PEERS": "Nodoj ŝarĝiĝantaj...",
+      "NODE_ADDRESS": "Adreso:",
+      "SOFTWARE": "Programo",
+      "WARN_PRE_RELEASE": "AntaÅ­-versio (lasta stabila versio: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Versio <b>{{version}}</b> disponebla",
+      "WS2PID": "Identigilo:",
+      "PRIVATE_ACCESS": "Privata aliro",
+      "POW_PREFIX": "Prefikso pri labor-pruvo:",
+      "ENDPOINTS": {
+        "BMAS": "Sekurigita interfaco (SSL)",
+        "BMATOR": "Reta interfaco TOR",
+        "WS2P": "Interfaco WS2P",
+        "ES_USER_API": "Nodo de datenoj Cesium+"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "La nodoj ne-SSL estas mis-afiŝitaj, ĉar Cesium funkcias laŭ moduso HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Nodoj",
+    "SIGNED_ON_BLOCK": "Skribita en la bloko",
+    "MIRROR": "spegulo",
+    "MIRRORS": "Speguloj",
+    "MIRROR_PEERS": "Spegul-nodoj",
+    "PEER_LIST": "Listo de la nodoj",
+    "MEMBERS": "Membroj",
+    "MEMBER_PEERS": "Membro-nodoj",
+    "ALL_PEERS": "Ĉiuj nodoj",
+    "DIFFICULTY": "Malfacileco",
+    "API": "API",
+    "CURRENT_BLOCK": "Bloko #",
+    "POPOVER_FILTER_TITLE": "Filtrilo",
+    "OFFLINE": "Nekonektita",
+    "OFFLINE_PEERS": "Nekonektitaj nodoj",
+    "BTN_SHOW_PEER": "Vidi la nodon",
+    "VIEW": {
+      "TITLE": "Nodo",
+      "OWNER": "Apartenas al",
+      "SHOW_RAW_PEERING": "Vidi la samrangan dokumenton",
+      "SHOW_RAW_CURRENT_BLOCK": "Vidi la lastan blokon (kompleta strukturo)",
+      "LAST_BLOCKS": "Lastaj blokoj konataj",
+      "KNOWN_PEERS": "Konataj nodoj:",
+      "GENERAL_DIVIDER": "Äœeneralaj informoj",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Neeblas ricevi la informojn de la nodo. La limdaÅ­ro de atendado estas transpasita.",
+        "LOADING_NODE_ERROR": "Neeblas ricevi la informojn de la nodo"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Traserĉado (pseŭdo aŭ publika ŝlosilo)",
+    "SEARCH_INIT_PHASE_WARNING": "Dum la periodo de antaŭ-aliĝo, la traserĉado de la atendantaj aliĝoj <b>povas esti longa</b>. Bonvolu pacienci...",
+    "REGISTERED_SINCE": "Enskribita la",
+    "REGISTERED_SINCE_BLOCK": "Enskribita en la bloko #",
+    "NO_CERTIFICATION": "Neniu atestaĵo validigita",
+    "NO_GIVEN_CERTIFICATION": "Neniu atestaĵo sendita",
+    "NOT_MEMBER_PARENTHESIS": "(ne membro)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identeco nuligita)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(nuliĝanta)",
+    "EXPIRE_IN": "Finiĝo",
+    "NOT_WRITTEN_EXPIRE_IN": "Limdato<br/>de traktado",
+    "EXPIRED": "Finiĝinta",
+    "PSEUDO": "PseÅ­donimo",
+    "SIGNED_ON_BLOCK": "Sendita en la bloko #{{block}}",
+    "WRITTEN_ON_BLOCK": "Enskribita en la bloko #{{block}}",
+    "GENERAL_DIVIDER": "Äœeneralaj informoj",
+    "NOT_MEMBER_ACCOUNT": "Simpla konto (ne membro)",
+    "NOT_MEMBER_ACCOUNT_HELP": "Temas pri simpla monujo, sen aliĝ-peto atendanta.",
+    "TECHNICAL_DIVIDER": "Teknikaj informoj",
+    "BTN_CERTIFY": "Atesti",
+    "BTN_YES_CERTIFY": "Jes, atesti",
+    "BTN_SELECT_AND_CERTIFY": "Nova atestaĵo",
+    "ACCOUNT_OPERATIONS": "Spezoj en la konto",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identeco {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Reto de fido",
+      "NEWCOMERS": "Novaj membroj",
+      "NEWCOMERS_COUNT": "{{count}} membroj",
+      "PENDING": "Atendantaj enskribiĝoj",
+      "PENDING_COUNT": "{{count}} atendantaj enskribiĝoj",
+      "REGISTERED": "Enskribita {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Membro depost {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Novaj membroj",
+      "BTN_PENDING": "Atendantaj enskribiĝoj",
+      "SHOW_MORE": "Afiŝi pli",
+      "SHOW_MORE_COUNT": "(nuna limo je {{limit}})",
+      "NO_PENDING": "Neniu enskribiĝo atendanta.",
+      "NO_NEWCOMERS": "Neniu membro."
+    },
+    "CONTACTS": {
+      "TITLE": "Kontaktoj"
+    },
+    "MODAL": {
+      "TITLE": "Traserĉado"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Atestaĵoj",
+      "SUMMARY": "Ricevitaj atestaĵoj",
+      "LIST": "Detalo pri la ricevitaj atestaĵoj",
+      "PENDING_LIST": "Atestaĵoj atendantaj traktadon",
+      "RECEIVED": "Ricevitaj atestaĵoj",
+      "RECEIVED_BY": "Atestaĵoj ricevitaj de {{uid}}",
+      "ERROR": "Atestaĵoj erare ricevitaj",
+      "SENTRY_MEMBER": "Referenca membro"
+    },
+    "OPERATIONS": {
+      "TITLE": "Spezoj"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Senditaj atestaĵoj",
+      "SUMMARY": "Senditaj atestaĵoj",
+      "LIST": "Detalo pri la senditaj atestaĵoj",
+      "PENDING_LIST": "Atestaĵoj atendantaj traktadon",
+      "SENT": "Senditaj atestaĵoj",
+      "SENT_BY": "Atestaĵoj senditaj de {{uid}}",
+      "ERROR": "Atestaĵoj erare senditaj"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-log-in\"></i> Konektiĝo",
+    "SCRYPT_FORM_HELP": "Bonvolu tajpi viajn identigilojn.<br>Pensu kontroli, ke la publika ŝlosilo estas tiu de via konto.",
+    "PUBKEY_FORM_HELP": "Bonvolu tajpi publikan ŝlosilon de konto:",
+    "FILE_FORM_HELP": "Elektu la ŝlosilaro-dosieron uzotan:",
+    "SCAN_FORM_HELP": "Skani la QR-kodon de monujo.",
+    "SALT": "Sekreta identigilo",
+    "SALT_HELP": "Sekreta identigilo",
+    "SHOW_SALT": "Afiŝi la sekretan identigilon?",
+    "PASSWORD": "Pasvorto",
+    "PASSWORD_HELP": "Pasvorto",
+    "PUBKEY_HELP": "Publika ŝlosilo aŭ pseŭdonimo",
+    "NO_ACCOUNT_QUESTION": "Vi ankoraÅ­ ne havas konton?",
+    "HAVE_ACCOUNT_QUESTION": "Vi jam havas konton?",
+    "CREATE_ACCOUNT": "Krei konton...",
+    "CREATE_FREE_ACCOUNT": "Krei konton senpage",
+    "FORGOTTEN_ID": "Pasvorto forgesita?",
+    "ASSOCIATED_PUBKEY": "Publika ŝlosilo de la ŝlosilaro:",
+    "BTN_METHODS": "Aliaj metodoj",
+    "BTN_METHODS_DOTS": "Ŝanĝi metodon...",
+    "METHOD_POPOVER_TITLE": "Metodoj",
+    "MEMORIZE_AUTH_FILE": "Memorigi tiun ŝlosilaron por la daŭro de la retum-seanco",
+    "SCRYPT_PARAMETERS": "Parametroj (Skripto):",
+    "AUTO_LOGOUT": {
+      "TITLE": "Informo",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> Vi estis <b>malkonektita</b> aÅ­tomate, pro tro longa senaktiveco.",
+      "BTN_RELOGIN": "Rekonektiĝi",
+      "IDLE_WARNING": "Vi estos malkonektita... {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Sekreta identigilo kaj pasvorto",
+      "SCRYPT_ADVANCED": "Sperta salumado",
+      "FILE": "Dosiero pri ŝlosilaro",
+      "PUBKEY": "Publika ŝlosilo aŭ pseŭdonimo",
+      "SCAN": "Skani QR-kodon"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Malpeza salumado",
+      "DEFAULT": "Kutima salumado",
+      "SECURE": "Sekura salumado",
+      "HARDEST": "Plej sekura salumado",
+      "EXTREME": "Ekstrema salumado",
+      "USER": "Personigita salumado",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Atendita strukturo de dosiero: <b>.yml</b> aÅ­ <b>.dunikey</b> (tipo PubSec, WIF aÅ­ EWIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> AÅ­tentigado",
+    "BTN_AUTH": "Aŭtentiĝi",
+    "GENERAL_HELP": "Bonvolu aŭtentiĝi:",
+    "EXPECTED_UID_HELP": "Bonvolu aŭtentiĝi ĉe la konto <i class=\"ion-person\"></i> {{uid}} :",
+    "EXPECTED_PUBKEY_HELP": "Bonvolu aŭtentiĝi ĉe la monujo <br class=\"visible-xs\"/><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} :",
+    "SCAN_FORM_HELP": "Skani la QR-kodon de la <b>privata ŝlosilo</b> de la monujo."
+  },
+  "ACCOUNT": {
+    "TITLE": "Mia konto",
+    "BALANCE": "Saldo",
+    "LAST_TX": "Lastaj spezoj validigitaj",
+    "BALANCE_ACCOUNT": "Konto-saldo",
+    "NO_TX": "Neniu spezo",
+    "SHOW_MORE_TX": "Afiŝi pli",
+    "SHOW_ALL_TX": "Afiŝi ĉion",
+    "TX_FROM_DATE": "(nuna limo je {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Spezoj atendantaj traktadon",
+    "VALIDATING_TX": "Spezoj traktitaj, ne validigitaj",
+    "ERROR_TX": "Spezoj ne realigitaj",
+    "ERROR_TX_SENT": "Spezoj malsukcesintaj",
+    "PENDING_TX_RECEIVED": "Spezoj atendantaj ricevon",
+    "EVENTS": "Okazaĵoj",
+    "OUT_DISTANCED": "Viaj nunaj atestaĵoj venas de tro izolita grupo de la <a ng-click=\"showHelpModal('wot')\">Reto de Fido</a> (RdF): al la <a ng-click=\"showHelpModal('distance_rule')\">regulo de maksimuma distanco</a> vi ne konformiĝas.<br/>Vi devas akiri atestaĵojn venantajn de aliaj lokoj de la RdF, aŭ atendi ke tiu ĉi densiĝos.",
+    "WAITING_MEMBERSHIP": "Aliĝo-peto sendita. Atendanta akcepton.",
+    "WAITING_CERTIFICATIONS": "Vi devas <b>akiri {{needCertificationCount}} atestaĵo(j)n</b> por fariĝi membro kaj produkti la <a ng-click=\"showHelpModal('ud')\">Universalan Dividendon</a>. Via konto tamen estas jam funkcianta, por ricevi kaj efektivigi pagojn.",
+    "WAITING_CERTIFICATIONS_HELP": "Por akiri viajn atestaĵojn, petu nur membrojn <b>kiuj sufiĉe konas vin</b>, kiel postulas <a ng-click=\"showLicenseModal()\">la licenco de la mono</a>, kiun vi akceptis.<br/>Se vi ne konas sufiĉe da membroj, sciigu tion ĉe <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">la forumo por uzantoj</a>.",
+    "WILL_MISSING_CERTIFICATIONS": "Baldaŭ <b>mankos al vi atestaĵoj</b> (almenaŭ {{willNeedCertificationCount}} estas necesaj)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Via aliĝo kiel membro <b>estas finiĝonta {{membershipExpiresIn|formatDurationTo}}</b>. Pensu <a ng-click=\"doQuickFix('renew')\">revalidigi vian aliĝon</a> ĝis tiam.",
+    "NEED_RENEW_MEMBERSHIP": "Vi ne plu estas membro de la mono, ĉar <b>via aliĝo finiĝis</b>. Pensu <a ng-click=\"doQuickFix('renew')\">revalidigi vian aliĝon</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Vi ne plu estas membro de la mono, <b>pro manko da atestaĵoj</b>. Pensu <a ng-click=\"doQuickFix('renew')\">revalidigi vian aliĝon</a>.",
+    "NO_WAITING_MEMBERSHIP": "Neniu aliĝo-peto atendanta. Se vi deziras <b>fariĝi membro</b>, pensu <a ng-click=\"doQuickFix('membership')\">sendi la aliĝo-peton</a>.",
+    "CERTIFICATION_COUNT": "Ricevitaj atestaĵoj",
+    "CERTIFICATION_COUNT_SHORT": "Atestaĵoj",
+    "SIG_STOCK": "Senditaj atestaĵoj",
+    "BTN_RECEIVE_MONEY": "Enkasigi",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Aliri alian identecon...",
+    "BTN_FIX_MEMBERSHIP": "Resendi la aliĝo-peton...",
+    "BTN_MEMBERSHIP_RENEW": "Revalidigi la aliĝon",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Revalidigi la aliĝon...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Ĉesigi la aliĝon...",
+    "BTN_SECURITY_DOTS": "Konto kaj sekureco...",
+    "BTN_SHOW_DETAILS": "Afiŝi la teknikajn informojn",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Sumo blokita",
+      "DESCRIPTION": "Jen la kondiĉoj de malblokado de tiu sumo:",
+      "DESCRIPTION_MANY": "Tiu spezo entenas plurajn partojn, pri kiuj la kondiĉoj de malblokado estas:",
+      "LOCKED_AMOUNT": "Kondiĉoj por la sumo:"
+    },
+    "NEW": {
+      "TITLE": "Kreado de konto",
+      "INTRO_WARNING_TIME": "La kreado de konto ĉe {{name|capitalize}} estas tre simpla. Bonvolu tamen dediĉi sufiĉe da tempo por ĝuste efektivigi tiun proceduron (por ne forgesi la identigilojn, pasvortojn, ktp.).",
+      "INTRO_WARNING_SECURITY": "Kontrolu ke la aparatoj, kiujn vi nun uzas (komputilo, tabuleto, telefono), <b>estas sekurigitaj kaj fidindaj</b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Senvirusigilo ĝisdata, fajroŝirmilo aktivigita, seanco protektita per pasvorto aŭ PIN-kodo, ktp.",
+      "INTRO_HELP": "Alklaku <b>{{'COMMON.BTN_START'|translate}}</b> por ekigi la kreadon de konto. Vi estos gvidata paŝon post paŝo.",
+      "REGISTRATION_NODE": "Via aliĝo estos registrita tra la nodo Duniter <b>{{server}}</b>, kiu dissendos ĝin poste al la cetero de la mon-reto.",
+      "REGISTRATION_NODE_HELP": "Se vi ne fidas tiun nodon, bonvolu ŝanĝi ĝin <a ng-click=\"doQuickFix('settings')\">en la parametroj</a> de Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Elektu la tipon de konto kreota:",
+      "MEMBER_ACCOUNT": "Membro-konto",
+      "MEMBER_ACCOUNT_TITLE": "Kreado de membro-konto",
+      "MEMBER_ACCOUNT_HELP": "Se vi ankoraŭ ne enskribiĝis kiel individuo (nur unu konto eblas por unu individuo). Tia konto ebligas kunprodukti la monon, ricevante <b> universalan dividendon</b> ĉiun {{parameters.dt|formatPeriod}}n.",
+      "WALLET_ACCOUNT": "Simpla monujo",
+      "WALLET_ACCOUNT_TITLE": "Kreado de monujo",
+      "WALLET_ACCOUNT_HELP": "Por ĉiuj aliaj kazoj, ekzemple se vi bezonas plian konton.<br/>Neniu universala dividendo estos kreita per tia konto.",
+      "SALT_WARNING": "Elektu vian sekretan identigilon.<br/>Oni petos ĝin de vi ĉiufoje, kiam vi konektiĝos al tiu konto.<br/><br/><b>Bone memorigu ĝin</b>: kaze de perdo, neniu alia povos aliri vian konton!",
+      "PASSWORD_WARNING": "Elektu pasvorton.<br/>Oni petos ĝin de vi ĉiufoje, kiam vi konektiĝos al tiu konto.<br/><br/><b>Bone memorigu tiun pasvorton</b: kaze de perdo, neniu alia povos aliri vian konton!",
+      "PSEUDO_WARNING": "Elektu pseÅ­donimon.<br/>Äœi utilas al la aliaj membroj, por identigi vin pli facile.<div class='hidden-xs'><br/>Äœi <b>ne povos esti modifita</b>, sen rekrei konton.</div><br/><br/>Äœi entenu <b>nek spacon, nek diakritan literon (kun supersigno, ktp.)</b>.<div class='hidden-xs'><br/>Ekzemple: <span class='gray'>NataljaBelulino, JohanoStelaro, ktp.</span>",
+      "PSEUDO": "PseÅ­donimo",
+      "PSEUDO_HELP": "PseÅ­donimo",
+      "SALT_CONFIRM": "Konfirmo",
+      "SALT_CONFIRM_HELP": "Konfirmo de la sekreta identigilo",
+      "PASSWORD_CONFIRM": "Konfirmo",
+      "PASSWORD_CONFIRM_HELP": "Konfirmo de la pasvorto",
+      "SLIDE_6_TITLE": "Konfirmo:",
+      "COMPUTING_PUBKEY": "Kalkulanta...",
+      "LAST_SLIDE_CONGRATULATION": "Vi tajpis ĉiujn necesajn informojn: Gratulon!<br/>Vi nun povas <b>sendi la peton por kreado</b> de la konto.</b><br/><br/>Por informo, la publika ŝlosilo ĉi-sube identigos vian estontan konton.<br/>Ĝi povos estis sciigita al aliuloj por ricevi iliajn pagojn.<br/><b>Ne estas devige</b> noti ĝin nun, vi ankaŭ povos fari tion poste.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Averto:</b> la sekreta identigilo, la pasvorto kaj la pseŭdonimo ne plu povos esti modifitaj.<br/><br/><b>Certiĝu, ke vi ĉiam rememorigos ĝin!</b><br/><br/><b>Ĉu vi certas</b>, ke vi deziras sendi tiun ĉi aliĝo-peton?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Averto:</b> la sekreta identigilo kaj la pasvorto ne plu povos esti modifitaj.<br/><br/><b>Certiĝu, ke vi ĉiam rememorigos ĝin!</b><br/><br/><b>Ĉu vi certas</b>, ke vi deziras daŭrigi per tiuj ĉi identigiloj?",
+      "CHECKING_PSEUDO": "Kontrolo...",
+      "PSEUDO_AVAILABLE": "PseÅ­donimo disponebla",
+      "PSEUDO_NOT_AVAILABLE": "PseÅ­donimo ne disponebla",
+      "INFO_LICENSE": "AntaÅ­ ol krei membro-konton, <b>bonvolu legi kaj akcepti la licencon</b> pri uzado de la mono:",
+      "BTN_ACCEPT": "Mi akceptas",
+      "BTN_ACCEPT_LICENSE": "Mi akceptas la licencon"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Elektu pseÅ­donimon",
+      "HELP": "Pseŭdonimo estas deviga por fariĝi membro."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Elekto de la identeco",
+      "HELP": "Pluraj <b>malsamaj identecoj</b> estis senditaj, por la publika ŝlosilo <span class=\"gray\"><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</span>.<br/>Bonvolu elekti la dosierujon uzotan:"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Elekto de la monujo"
+    },
+    "WALLET_LIST": {
+      "TITLE": "Miaj monujoj",
+      "BTN_NEW": "Aldoni monujon",
+      "BTN_DOWNLOAD": "Elŝuti la liston",
+      "BTN_IMPORT_FILE_DOTS": "Enporti el dosiero...",
+      "NO_WALLET": "Neniu kroma monujo",
+      "BTN_DELETE": "Forigi kroman monujon...",
+      "BTN_RENAME": "Renomi la monujon",
+      "EXPORT_FILENAME": "miaj_monujoj-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Sumo: ",
+      "EDIT_POPOVER": {
+        "TITLE": "Renomi la monujon",
+        "HELP": "Sciigu la novan nomon",
+        "NAME_HELP": "Nomo de la monujo"
+      },
+      "IMPORT_MODAL": {
+        "TITLE": "Enporti monujojn",
+        "HELP": "Por <b>enporti monujojn</b>, bonvolu glitigi en la ĉi-suban zonon la dosieron pri la listo de monujoj, aŭ alklaki la zonon por serĉadi dosieron.",
+        "WALLET_COUNT": "<b>{{count}}</b> nova{{count > 1 ? 'j' : ''}} monujo{{count > 1 ? 'j' : ''}}",
+        "NO_NEW_WALLET": "Neniu nova monujo"
+      }
+    },
+    "SECURITY": {
+      "ADD_QUESTION": "Aldoni personigitan demandon",
+      "BTN_CLEAN": "Malplenigi",
+      "BTN_RESET": "Restartigi",
+      "DOWNLOAD_REVOKE": "Konservi mian dosieron pri nuligo",
+      "DOWNLOAD_REVOKE_HELP": "Disponi dosieron pri nuligo estas grave, ekzemple kaze de perdo de viaj identigiloj. Ĝi ebligas al vi <b>elirigi tiun konton el la reto de fido</b>, tiel ke ĝi refariĝu simpla monujo.",
+      "GENERATE_KEYFILE": "Krei mian dosieron pri ŝlosilaro...",
+      "GENERATE_KEYFILE_HELP": "Kreas dosieron, kiu ebligas al vi aŭtentiĝi sen tajpi viajn identigilojn.<br/><b>Atenton:</b> tiu dosiero entenos vian konto-ŝlosilaron (publikan kaj sekretan ŝlosilojn); do tre gravas meti ĝin en sekuran lokon!",
+      "KEYFILE_FILENAME": "ŝlosilaro-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Transformi en membro-konton...",
+      "MEMBERSHIP_IN_HELP": "Ebligas <b>transformi</b> simplan monujo-konton <b>en membro-konton</b>, sendante aliĝo-peton. Utilas nur se vi ne havas jam alian membro-konton.",
+      "SEND_IDENTITY": "Publikigi sian identecon...",
+      "SEND_IDENTITY_HELP": "Ebligas kunligi pseŭdonimon kun tiu ĉi konto, sed <b>sen fari aliĝo-peton</b> por iĝi membro. Tiu kunligo kutime ne utilas, ĉar la valideco de tiu kunligo de pseŭdonimo estas limigita en la tempo.",
+      "HELP_LEVEL": "Por krei konserv-dosieron pri viaj identigiloj, elektu <strong> almenaÅ­ {{nb}} demandojn:</strong>",
+      "LEVEL": "Nivelo de sekureco",
+      "LOW_LEVEL": "Malforta <span class=\"hidden-xs\">(2 demandoj minimume)</span>",
+      "MEDIUM_LEVEL": "Meza <span class=\"hidden-xs\">(4 demandoj minimume)</span>",
+      "QUESTION_1": "Kiel nomiĝis via plej bona amik.in.o, kiam vi estis adoleskant.in.o?",
+      "QUESTION_2": "Kiel nomiĝis via unua hejm-besto?",
+      "QUESTION_3": "Kiun pladon vi unue lernis kuiradi?",
+      "QUESTION_4": "Kiun filmon vi unue spektis en kinejo?",
+      "QUESTION_5": "Kien vi iris la unuan fojon, kiam vi vojaĝis per aviadilo?",
+      "QUESTION_6": "Kiel nomiĝis via preferata instruist.i.no en bazlernejo?",
+      "QUESTION_7": "Kio estus laÅ­ vi la ideala profesio?",
+      "QUESTION_8": "Kiun libron por infanoj vi preferas?",
+      "QUESTION_9": "Kio estis la marko de via unua veturilo?",
+      "QUESTION_10": "Kio estis via kromnomo, kiam vi estis infano?",
+      "QUESTION_11": "Kiun rolant.in.on aÅ­ aktor.in.on vi preferis en kino, kiam vi estis student.in.o?",
+      "QUESTION_12": "Kiun kanzonist.ino.n aÅ­ muzikgrupon vi preferis, kiam vi estis student.in.o?",
+      "QUESTION_13": "En kiu urbo renkontiĝis viaj gepatroj?",
+      "QUESTION_14": "Kiel nomiĝis via unua ĉefo?",
+      "QUESTION_15": "Kiel nomiĝas la strato, kie vi kreskis?",
+      "QUESTION_16": "Kiel nomiĝas la marbordo, kie vi unuafoje baniĝis?",
+      "QUESTION_17": "Kiun muzik-albumon vi unuafoje aĉetis?",
+      "QUESTION_18": "Kiel nomiĝas via preferata sporto-teamo?",
+      "QUESTION_19": "Kio estis la profesio de via avo?",
+      "RECOVER_ID": "Retrovi mian pasvorton...",
+      "RECOVER_ID_HELP": "Se vi disponas <b>konserv-dosieron pri viaj identigiloj</b>, vi povas retrovi ilin respondante ĝuste viajn personajn demandojn.",
+      "RECOVER_ID_SELECT_FILE": "Elektu la uzotan <b>konserv-dosieron pri viaj identigiloj</b>:",
+      "REVOCATION_WITH_FILE": "Nuligi mian membro-konton...",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "Se vi <b>definitive perdis viajn identigilojn</b> pri via membro-konto (aŭ ke la sekureco de la konto estas endanĝerigita), vi povas uzi <b>la dosieron pri nuligo</b> de la konto por <b>trudi ties definitivan eliradon el la reto de fido</b>.",
+      "REVOCATION_WITH_FILE_HELP": "Por <b>definitive nuligi</b> membro-konton, bonvolu glitigi en la ĉi-suban zonon vian dosieron pri nuligo, aŭ alklaki la zonon por serĉadi dosieron.",
+      "REVOCATION_WALLET": "Nuligi tiun ĉi konton tuj",
+      "REVOCATION_WALLET_HELP": "Peti la nuligon de via identeco estigas la <b>eliradon el la reto de fido</b> (definitivan por la pseŭdonimo kaj la publika ŝlosilo kunligitaj). La konto ne plu povos produkti Universalan Dividendon.<br/>Vi tamen daŭre povos konektiĝi al ĝi, kiel al simpla monujo.",
+      "REVOCATION_FILENAME": "nuligo-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "SAVE_ID": "Konservi miajn identigilojn...",
+      "SAVE_ID_HELP": "Kreado de konserv-dosiero, por <b>retrovi vian pasvorton</b> (kaj la sekretan identigilon) <b>kaze de forgeso</b>. La dosiero estas <b>sekurigita</b> (ĉifrita) dank'al personaj demandoj.",
+      "STRONG_LEVEL": "Forta <span class=\"hidden-xs \">(6 demandoj minimume)</span>",
+      "TITLE": "Konto kaj sekureco",
+      "KEYFILE": {
+        "PUBSEC_FORMAT": "Strukturo PubSec.",
+        "PUBSEC_FORMAT_HELP": "Tiu strukturo stokas vian ŝlosilaron laŭ tre simpla maniero. Ĝi kongruas aparte kun Cesium, ğannonce kaj Duniter.<br/><b>Atenton:</b>La dosiero <b>ne estas ĉifrita</b> (la sekreta ŝlosilo klare aperas en ĝi); bonvolu do stoki ĝin en sekura loko!",
+        "WIF_FORMAT": "Strukturo WIF (Wallet Import Format) - v1",
+        "WIF_FORMAT_HELP": "Tiu strukturo stokas vian ŝlosilaron inkluzivante en ĝin kontrol-sumon por kontroli la sendifektecon de la dosiero. Ĝi kongruas aparte kun la paper-monujoj (Duniter paper wallet).<br/><b>Atenton:</b>La dosiero <b>ne estas ĉifrita</b> (la sekreta ŝlosilo klare aperas en ĝi); bonvolu do stoki ĝin en sekura loko!",
+        "EWIF_FORMAT": "Strukturo EWIF (Encrypted Wallet Import Format) - v1",
+        "EWIF_FORMAT_HELP": "Tiu strukturo stokas vian ŝlosilaron <b>laŭ ĉifrita maniero</b> dank'al sekreta frazo elektita de vi. Ĝi ankaŭ inkluzivas kontrol-sumon por kontroli la sendifektecon de la dosiero.<br/><b>Atenton:</b> Zorgu, ke vi ĉiam rememoru vian sekretan frazon!",
+        "PASSWORD_POPUP": {
+          "TITLE": "Ĉifrita dosiero pri ŝlosilaro",
+          "HELP": "Bonvolu indiki la la sekretan frazon:",
+          "PASSWORD_HELP": "Sekreta frazo"
+        },
+        "ERROR": {
+          "BAD_PASSWORD": "Sekreta frazo malĝusta",
+          "BAD_CHECKSUM": "Kontrol-sumo malĝusta"
+        }
+      }
+    },
+    "FILE_NAME": "{{currency}} - Konto-tabelo {{pubkey|formatPubkey}} je {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Dato",
+      "AMOUNT": "Sumo",
+      "COMMENT": "Komento"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Elspezo",
+    "SUB_TITLE": "Fari elspezon",
+    "SUB_TITLE_ALL": "Malplenigi la konton",
+    "FROM": "De",
+    "TO": "Al",
+    "AMOUNT": "Sumo",
+    "AMOUNT_HELP": "Sumo",
+    "COMMENT": "Komento",
+    "COMMENT_HELP": "Komento",
+    "BTN_SEND": "Sendi",
+    "BTN_ADD_COMMENT": "Aldoni komenton",
+    "REST": "Resto de la konto",
+    "REST_TO": "al",
+    "WARN_COMMENT_IS_PUBLIC": "Bonvolu noti, ke <b>la komentoj estas publikaj</b> (ne ĉifritaj).",
+    "MODAL": {
+      "TITLE": "Elspezo"
+    }
+  },
+  "ERROR": {
+    "UNKNOWN_URI_FORMAT": "URI-strukturo nekonata",
+    "PUBKEY_INVALID_CHECKSUM": "Publika ŝlosilo nevalida (bad checksum).",
+    "POPUP_TITLE": "Eraro",
+    "UNKNOWN_ERROR": "Eraro nekonata",
+    "CRYPTO_UNKNOWN_ERROR": "Via retumilo ŝajnas ne kongrua kun la kriptografiaj funkcioj.",
+    "DOWNLOAD_KEYFILE_FAILED": "Malsukceso por la kreado de la dosiero pri ŝlosilaro.",
+    "EQUALS_TO_PSEUDO": "Devas esti malsama ol la pseÅ­donimo",
+    "EQUALS_TO_SALT": "Devas esti malsama ol la sekreta identigilo",
+    "FIELD_REQUIRED": "Deviga kampo",
+    "FIELD_TOO_SHORT": "Signaro tro mallonga",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Signaro tro mallonga ({{minLength}} signoj minimume)",
+    "FIELD_TOO_LONG": "Signaro tro longa",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Signaro tro longa ({{maxLength}} signoj maksimume)",
+    "FIELD_MIN": "Minimuma longeco: {{min}}",
+    "FIELD_MAX": "Maksimuma longeco: {{max}}",
+    "FIELD_ACCENT": "Diakritaj literoj kaj komoj ne permesataj",
+    "FIELD_NOT_NUMBER": "Nombra valoro atendata",
+    "FIELD_NOT_INT": "Entjera nombro atendata",
+    "FIELD_NOT_EMAIL": "Retadreso nevalida",
+    "PASSWORD_NOT_CONFIRMED": "Ne kongruas kun la pasvorto",
+    "SALT_NOT_CONFIRMED": "Ne kongruas kun la sekreta identigilo",
+    "SEND_IDENTITY_FAILED": "Aliĝo malsukcesa",
+    "SEND_CERTIFICATION_FAILED": "Atestado malsukcesa",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "Vi ne povas efektivigi atestadon, ĉar via konto <b>ne estas membro</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "Vi ne povas efektivigi atestadon, ĉar via konto ankoraŭ ne estas membro.<br/><br/>Ankoraŭ mankas al vi atestaĵoj, aŭ tiuj ĉi ankoraŭ ne estis validigitaj.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Konto ne atestebla. Neniu aliĝo-peto estis farita, aŭ la aliĝo ne estis revalidigita.",
+    "LOGIN_FAILED": "Eraro dum konektiĝo.",
+    "LOAD_IDENTITY_FAILED": "Eraro por ŝarĝi la identecon.",
+    "LOAD_REQUIREMENTS_FAILED": "Eraro por ŝarĝi la antaŭ-necesaĵoj de la identeco.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Malsukceso pri la provado eniri la komunumon.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Malsukceso pri la ĉesigo de la aliĝo.",
+    "REFRESH_WALLET_DATA": "Malsukceso pri la ĝisdatigo de la monujo.",
+    "GET_CURRENCY_PARAMETER": "Malsukceso por ricevi la regulojn de la mono.",
+    "GET_CURRENCY_FAILED": "Ne eblis ŝarĝi la monon. Bonvolu reprovi pli poste.",
+    "SEND_TX_FAILED": "Elspezado malsukcesa.",
+    "ALL_SOURCES_USED": "Bonvolu atendi la kalkulon de la venonta bloko (ĉiuj viaj monfontoj estis uzitaj).",
+    "NOT_ENOUGH_SOURCES": "Ne sufiĉe da mono por sendi tiun ĉi sumon per ununura spezo.<br/>Maksimuma sumo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Malsukceso por krei la membro-konton.",
+    "RESTORE_WALLET_DATA_ERROR": "Malsukceso por reŝarĝi la parametrojn de la loka stokaĵo",
+    "LOAD_WALLET_DATA_ERROR": "Malsukceso por ŝarĝi la datenojn de la monujo.",
+    "COPY_CLIPBOARD_FAILED": "Ne eblis kopii la valoron.",
+    "TAKE_PICTURE_FAILED": "Malsukceso por ricevi la foton.",
+    "SCAN_FAILED": "Malsukceso por skani la QR-kodon.",
+    "SCAN_UNKNOWN_FORMAT": "Kodo nerekonata.",
+    "WOT_LOOKUP_FAILED": "Serĉado malsukcesa.",
+    "LOAD_PEER_DATA_FAILED": "Ne eblis legi la nodon Duniter. Bonvolu reprovi poste.",
+    "NEED_LOGIN_FIRST": "Bonvolu unue konektiĝi.",
+    "AMOUNT_REQUIRED": "La monsumo estas deviga.",
+    "AMOUNT_NEGATIVE": "Negativa sumo nepermesata.",
+    "NOT_ENOUGH_CREDIT": "Saldo nesufiĉa.",
+    "INVALID_NODE_SUMMARY": "Nodo neatingebla aÅ­ adreso nevalida.",
+    "INVALID_USER_ID": "La pseÅ­donimo devas enteni nek spacon nek signon specialan aÅ­ kun supersigno.",
+    "INVALID_COMMENT": "La kampo 'referenco' ne devas enteni literojn kun supersigno.",
+    "INVALID_PUBKEY": "La publika ŝlosilo ne havas la atenditan strukturon.",
+    "INVALID_PUBKEY_CHECKSUM": "Kontrol-sumo nevalida.",
+    "IDENTITY_REVOKED": "Tiu ĉi identeco <b>estis nuligita</b>. Ĝi ne plu povas fariĝi membro.",
+    "IDENTITY_REVOKED_WITH_TIME": "Tiu ĉi identeco <b>estis nuligita {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). Ĝi ne plu povas fariĝi membro.",
+    "IDENTITY_PENDING_REVOCATION": "La <b>nuligo de tiu ĉi identeco</b> estis petita kaj atendas traktadon. La atestado estas do malaktivigita.",
+    "IDENTITY_INVALID_BLOCK_HASH": "Tiu ĉi aliĝo-peto ne plu validas (ĉar ĝi rilatas al bloko, kiun nuligis la nodoj de la reto): tiu persono devas refari sian aliĝo-peton <b>antaŭ ol</b> esti atestita.",
+    "IDENTITY_EXPIRED": "La publikigo de tiu ĉi identeco finiĝis: tiu persono devas fari novan aliĝo-peton <b>antaŭ ol</b> esti atestita.",
+    "IDENTITY_SANDBOX_FULL": "La nodo Duniter uzata de Cesium ne plu povas ricevi novajn identecojn, ĉar ĝia atendo-vico estas plena.<br/><br/>Bonvolu reprovi poste aŭ ŝanĝi la nodon (per la menuo <b>Parametroj</b>).",
+    "IDENTITY_NOT_FOUND": "Identeco ne trovita.",
+    "IDENTITY_TX_FAILED": "Malsukceso por ŝarĝi la spezojn.",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Aliĝo ne valida.",
+    "WALLET_INVALID_BLOCK_HASH": "Via aliĝo-peto ne plu validas (ĉar ĝi rilatas al bloko, kiun nuligis la nodoj de la reto).<br/>Vi devas <a ng-click=\"doQuickFix('fixMembership')\">sendi novan peton</a> por solvi tiun ĉi problemon.",
+    "WALLET_IDENTITY_EXPIRED": "La publikigo de <b>via identeco finiĝis</b>.<br/>Vi devas <a ng-click=\"doQuickFix('fixIdentity')\">publikigi denove vian identecon</a> por solvi tiun ĉi problemon.",
+    "WALLET_REVOKED": "Via identeco estis <b>nuligita</b>: nek via pseŭdonimo nek via publika ŝlosilo povos esti uzata en la estonteco por membro-konto.",
+    "WALLET_HAS_NO_SELF": "Via identeco devas unue esti publikigita, kaj ne esti finiĝinta.",
+    "AUTH_REQUIRED": "AÅ­tentigado necesa.",
+    "AUTH_INVALID_PUBKEY": "La atendata ŝlosilo estas <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}...",
+    "AUTH_INVALID_SCRYPT": "Identigilo aÅ­ pasvorto nevalida.",
+    "AUTH_INVALID_FILE": "Dosiero pri ŝlosilaro nevalida.",
+    "AUTH_FILE_ERROR": "Malsukceso por malfermi la dosieron pri ŝlosilaro.",
+    "IDENTITY_ALREADY_CERTIFY": "Vi <b>jam atestis</b> tiun identecon.<br/><br/>Tiu atestado daŭre validas (finiĝo {{expiresIn|formatDurationTo}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "Vi <b>jam atestis</b> tiun identecon.<br/><br/>Tiu atestado atendas traktadon (limdato de traktado {{expiresIn|formatDurationTo}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Atestado neebla",
+    "LOAD_NEWCOMERS_FAILED": "Malsukceso por ŝarĝi la novajn membrojn.",
+    "LOAD_PENDING_FAILED": "Malsukceso por ŝarĝi la atendantajn aliĝojn.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vi devas <b>esti membro</b> por rajti efektivigi tiun ĉi agon.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vi devas <b>esti membro (aŭ eksa membro)</b> por rajti efektivigi tiun ĉi agon.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Via identeco devas <b>jam esti publikigita</b>, por ke vi rajtu efektivigi tiun ĉi agon.",
+    "GET_BLOCK_FAILED": "Malsukceso por ricevi la blokon.",
+    "INVALID_BLOCK_HASH": "Bloko ne trovita (haketo malsama)",
+    "DOWNLOAD_REVOCATION_FAILED": "Malsukceso por elŝuti la dosieron pri nuligo.",
+    "REVOCATION_FAILED": "Malsukceso pri nuligo.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Sekreta identigilo aŭ pasvorto malĝusta.",
+    "RECOVER_ID_FAILED": "Malsukceso por ricevi la identigilojn",
+    "LOAD_FILE_FAILED": "Malsukceso por ŝarĝi la dosieron",
+    "NOT_VALID_REVOCATION_FILE": "Dosiero pri nuligo ne valida (malĝusta strukturo de dosiero)",
+    "NOT_VALID_SAVE_ID_FILE": "Dosiero pri konservado ne valida (malĝusta strukturo de dosiero)",
+    "NOT_VALID_KEY_FILE": "Dosiero pri ŝlosilaro ne valida (strukturo ne rekonata)",
+    "EXISTING_ACCOUNT": "Viaj identigiloj rilatas al jam ekzistanta konto, kies <a ng-click=\"showHelpModal('pubkey')\">publika ŝlosilo</a> estas:",
+    "EXISTING_ACCOUNT_REQUEST": "Bonvolu modifi viajn identigilojn, por ke ili rilatu al ne uzata konto.",
+    "GET_LICENSE_FILE_FAILED": "La ricevo de la dosiero pri licenco ne eblis.",
+    "CHECK_NETWORK_CONNECTION": "Neniu nodo ŝajnas atingebla.<br/><br/>Bonvolu <b>kontroli vian retkonekton</b>.",
+    "ISSUE_524_TX_FAILED": "Malsukcesa elspezo.<br/><br/>Mesaĝo estis sendita al la programistoj por faciligi la solvadon de la problemo. <b>Dankon pro via helpo</b>.",
+    "ADD_SECONDARY_WALLET_FAILED": "Malsukceso por aldoni kroman monujon.",
+    "REMOVE_SECONDARY_WALLET_FAILED": "Malsukceso por forigi la kroman monujon.",
+    "UPDATE_WALLET_LIST_FAILED": "Malsukceso por ĝisdatigi la kromajn monujojn.",
+    "LOAD_WALLET_LIST_FAILED": "Malsukceso por ŝarĝi la kromajn monujojn.",
+    "SAVE_WALLET_LIST_FAILED": "Malsukceso por konservi la kromajn monujojn.",
+    "COULD_NOT_ADD_MAIN_WALLET": "Tiu ĉi monujo <b>rilatas al la ĉefa konto</b>, kun kiu vi estas konektita.<br/>Ne eblas aldoni ĝin kiel kroman monujon.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Monujo jam ekzistanta en la listo.",
+    "UNKNOWN_WALLET_ID": "Kroma monujo nekonata.",
+    "RESTORE_WALLET_LIST_FAILED": "Malsukceso por restarigi la kromajn monujojn.",
+    "INVALID_FILE_FORMAT": "Strukturo de dosiero nevalida.",
+    "SAME_TX_RECIPIENT": "La adresito devas malsami ol la sendanto."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Informo",
+    "CERTIFICATION_DONE": "Atestaĵo sendita",
+    "NOT_ENOUGH_CREDIT": "Saldo nesufiĉa",
+    "TRANSFER_SENT": "Elspezo sendita",
+    "COPY_TO_CLIPBOARD_DONE": "Kopiita en la memoreto",
+    "MEMBERSHIP_OUT_SENT": "Eksiĝo sendita",
+    "NOT_NEED_MEMBERSHIP": "Vi jam estas membro.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "Al tiu ĉi identeco baldaŭ mankos atestaĵoj (almenaŭ {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "Tiu ĉi identeco ne sendis aliĝo-peton. Tion ĝi devos fari, se ĝi deziras fariĝi membro.",
+    "HAS_ALTERNATIVE_IDENTITIES": "Ekzistas <b>pluraj identecoj</b> ligitaj kun tiu ĉi publika ŝlosilo. <b>Antaŭ ĉia atestado</b>, pensu <a ng-click=\"doQuickFix('showSelectIdentities')\">trarigardi la aliajn identecojn</a> por elekti la ĝustan, aŭ kontaktu la posedanton de la konto.",
+    "REVOCATION_SENT": "Nuligo sendita",
+    "REVOCATION_SENT_WAITING_PROCESS": "La <b>nuligo de tiu ĉi identeco</b> estis petita kaj atendas traktadon.",
+    "FEATURES_NOT_IMPLEMENTED": "Tiu ĉi funkciaro ankoraŭ estas programiĝanta.<br/>Kial ne <b>kontribui al Cesium</b>, por ekhavi ĝin pli rapide? ;)",
+    "EMPTY_TX_HISTORY": "Neniu spezo elportota"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
+    "POPUP_TITLE": "<b>Konfirmo</b>",
+    "POPUP_WARNING_TITLE": "<b>Averto</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Averto pri sekureco</b>",
+    "CERTIFY_RULES_TITLE_UID": "Atesti {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">NE atestu</b> konton, se vi pensas ke:<br/><br/><ul><li>1.) ĝi ne rilatas al persono <b>fizika kaj vivanta</b>.<li>2.) ĝia posedanto <b>havas alian konton</b> jam atestitan.<li>3.) ĝia posedanto malobservas (vole aŭ ne) la regulon 1 aŭ 2 (ekzemple atestante falsajn kontojn aŭ duoblajn).</ul><br/><b>Ĉu vi certas,</b> ke vi tamen volas atesti tiun ĉi identecon?",
+    "FULLSCREEN": "Afiŝi la programon plen-ekrane?",
+    "EXIT_APP": "Fermi la programon?",
+    "TRANSFER": "<b>Resumo de la elspezo</b> :<br/><br/><ul><li> - De: {{from}}</li><li> - Al: <b>{{to}}</b></li><li> - Sumo: <b>{{amount}} {{unit}}</b></li><li> - Komento: <i>{{comment}}</i></li></ul><br/><b>Ĉu vi certas, ke vi volas efektivigi tiun ĉi elspezon?</b>",
+    "TRANSFER_ALL": "<b>Resumo de la elspezo</b>:<br/><br/><ul><li> - De : {{from}}</li><li> - Al : <b>{{to}}</b></li><li> - Sumo: <b>{{amount}} {{unit}}</b></li><li> - Komento: <i>{{comment}}</i></li><br/><li> - Resto: <b>{{restAmount}} {{unit}}</b> al <b>{{restTo}}</b></li></ul><br/><b>Ĉu vi certas, ke vi volas efektivigi tiun ĉi elspezon?</b>",
+    "MEMBERSHIP_OUT": "Tiu ĉi ago estas <b>neinversigebla</b>.<br/></br/>Ĉu vi certas, ke vi volas <b>nuligi vian membro-konton</b>?",
+    "MEMBERSHIP_OUT_2": "Tiu ĉi ago estas <b>neinversigebla</b> !<br/><br/>Ĉu vi vere certas, ke vi volas <b>nuligi vian aliĝon</b> kiel membron?",
+    "LOGIN_UNUSED_WALLET_TITLE": "Tajperaro?",
+    "LOGIN_UNUSED_WALLET": "La konektita konto ŝajnas <b>neaktiva</b>.<br/><br/>Temas probable pri <b>tajperaro</b> en viaj konekto-identigiloj. Bonvolu rekomenci, kontrolante ke <b>la publika ŝlosilo estas tiu de via konto</b>.",
+    "FIX_IDENTITY": "La pseŭdonimo <b>{{uid}}</b> estos denove publikigita, anstataŭigante la malnovan publikigon, kiu finiĝis.<br/></br/><b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
+    "FIX_MEMBERSHIP": "Via aliĝo-peto kiel membro tuj estos resendita.<br/></br/><b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
+    "MEMBERSHIP": "Via aliĝo-peto kiel membro tuj estos sendita.<br/></br/><b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
+    "RENEW_MEMBERSHIP": "Via aliĝo kiel membro tuj estos revalidigita.<br/></br/><b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
+    "REVOKE_IDENTITY": "Vi estas <b>nuligonta definitive tiun ĉi identecon</b>.<br/><br/>La publika ŝlosilo kaj la ligita pseŭdonimo <b>neniam plu povos esti uzataj</b> (por membro-konto). <br/></br/><b>Ĉu vi certas</b>, ke vi volas definitive nuligi tiun ĉi konton?",
+    "REVOKE_IDENTITY_2": "Tiu ĉi ago estas <b>neinversigebla</b>!<br/><br/>Ĉu vi vere certas, ke vi volas <b>definitive nuligi</b> tiun ĉi konton?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Via aliĝo ne bezonas esti revalidigita (ĝi finiĝos nur post {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Ĉu vi certas</b>, ke vi volas revalidigi vian aliĝon?",
+    "SAVE_BEFORE_LEAVE": "Ĉu vi volas <b>konservi viajn modifojn</b> antaŭ ol eliri el la paĝo?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Modifoj ne registritaj",
+    "LOGOUT": "Ĉu vi certas, ke vi volas malkonektiĝi?",
+    "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Ĉu vi volas provizore uzi la nodon <b>{{new}}</b> ?",
+    "ISSUE_524_SEND_LOG": "La spezo estis forĵetita, pro konata anomalio (petslipo #524) sed <b>ne ripetita</b>.<br/><br/>Por helpi la programistojn korekti tiun eraron, <b>ĉu vi akceptas la sendadon de viaj protokolaj dosieroj</b> per mesaĝo?<br/><small>(neniu konfidenca dateno estas sendita)</small>."
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Provo",
+      "MODE": "Provmontra moduso",
+      "FEATURE_NOT_AVAILABLE": "Funkcio <b>ne disponebla</b> en tiu ĉi provmontra retejo.",
+      "MODE_HELP": "Cesium funkcias en <b>provmontra moduso</b>: Konsultado de konto eblas, sed neniu operacio povos esti registrita.",
+      "INSTALL_HELP": "Pro <b>sekurecaj kialoj</b> ni rekomendas al vi <b>instali</b> vian kopion de la programo Cesium. Vizitu la retejon <a href='https://cesium.app'>www.cesium.app</a> por ricevi helpon."
+    },
+    "READONLY": {
+      "BADGE": "Observo",
+      "MODE": "Observada moduso",
+      "MODE_HELP": "Cesium funkcias en <b>observada moduso</b>: disponeblas nur la funkciaro pri observado de la valuto.",
+      "INSTALL_HELP": "Se vi deziras <b>krei monuj-konton</b> por sendi aÅ­ ricevi monon, ni rekomendas al vi <b>instali vian kopion</b> de la programo Cesium. Vizitu la retejon <a href='https://cesium.app'>www.cesium.app</a> por ricevi helpon."
+    }
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Dosiero pri nuligo</b>",
+    "POPUP_REVOKE_MESSAGE": "Por sekurigi vian konton, bonvolu elŝuti la <b>dokumenton pri konto-nuligo</b>. Ĝi ebligos al vi eventuale nuligi vian konton (kaze de konto-ŝtelo, ŝanĝo de identigilo, konto erare kreita, ktp.).<br/><br/><b>Bonvolu stoki ĝin en sekura loko.</b>"
+  },
+  "HELP": {
+    "TITLE": "Ret-helpo",
+    "JOIN": {
+      "SECTION": "Enskribiĝo",
+      "SALT": "La sekreta identigilo estas tre grava. Ĝi utilas por miksi la pasvorton, antaŭ ol ĝi servos por kalkuli la <span class=\"text-italic\">publikan ŝlosilon</span> de via konto (ties numeron) kaj la sekretan ŝlosilon por aliri ĝin.<br/><b>Zorgu pri ĝia bona memorigado</b>, ĉar neniu rimedo estas nuntempe planita por retrovi ĝin kaze de perdo.<br/>Krom tio, ĝi ne povas esti modifita sen devige krei novan konton.<br/><br/>Bona sekreta identigilo devas esti sufiĉe longa (kun almenaŭ 8 signoj) kaj kiel eble plej originala.",
+      "PASSWORD": "La pasvorto estas tre grava. Kun la sekreta identigilo, ĝi servas por kalkuli la numeron (la publikan ŝlosilon) de via konto, kaj la sekretan ŝlosilon por aliri ĝin.<br/><b>Zorgu pri ĝia bona memorigado</b>, ĉar neniu rimedo estas planita por retrovi ĝin kaze de perdo (krom se oni generas konserv-dosieron).<br/>Krom tio, ĝi ne povas esti modifita sen devige krei novan konton.<br/><br/>Bona pasvorto entenas (ideale) almenaŭ 8 signojn, inter kiuj estas almenaŭ unu majusklo kaj unu cifero.",
+      "PSEUDO": "La pseŭdonimo estas utila nur kaze de enskribiĝo kiel <span class=\"text-italic\">membro</span>. Ĝi ĉiam estas ligita kun monujo (tra ĝia <span class=\"text-italic\">publika ŝlosilo</span>).<br/>Ĝi estas publikigita en la reto, tiel ke la aliaj uzantoj povu identigi ĝin, atesti ĝin aŭ sendi monon al ĝia konto.<br/>Pseŭdonimo devas esti unika ene de la membroj (<u>nunaj</u> kaj eksaj)."
+    },
+    "LOGIN": {
+      "SECTION": "Konekto",
+      "PUBKEY": "Publika ŝlosilo de la ŝlosilaro",
+      "PUBKEY_DEF": "La publika ŝlosilo de la ŝlosilaro estas kreita per la tajpitaj identigiloj (iuj ajn), sen ke ili necese rilatu al konto jam uzata.<br/><b>Atente kontrolu, ke la publika ŝlosilo estas tiu de via konto</b>. Alikaze, vi estos konektita al konto probable neniam uzita, la risko de kolizio kun ekzistanta konto estante tre eta.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">Scii pli pri kriptografio</a> per publika ŝlosilo.",
+      "METHOD": "Konekto-metodoj",
+      "METHOD_DEF": "Pluraj eblecoj disponeblas por konekti vin al monujo:<br/> - La konekto <b>per salumado (simpla aŭ sperta)</b> miksas vian pasvorton dank'al la sekreta identigilo, por limigi la provojn de <a href=\"https://fr.wikipedia.org/wiki/Attaque_par_force_brute\" target=\"_system\">kodrompado per kruda forto</a> (ekzemple per konataj vortoj.<br/> - La konekto <b>per publika ŝlosilo</b> evitigas tajpi viajn identigilojn, kiuj estos petataj de vi, nur kiam venos la momento dum operacio ĉe la konto.<br/> - La konekto <b>per dosiero pri ŝlosilaro</b> legas la ŝlosilojn (publikan kaj privatan) de la konto, per dosiero, sen la bezono tajpi identigilojn. Pluraj strukturoj de dosiero eblas."
+    },
+    "GLOSSARY": {
+      "SECTION": "Glosaro",
+      "PUBKEY_DEF": "Publika ŝlosilo identigas monujon, kiu povas identigi membron aŭ rilati al anonima monujo. Ĉe Cesium la publika ŝlosilo estas kalkulita (implicite) dank'al la sekreta identigilo kaj la pasvorto.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">Scii pli pri kriptografio</a> per publika ŝlosilo.",
+      "MEMBER": "Membro",
+      "MEMBER_DEF": "Membro estas homa persono fizika kaj vivanta, kiu deziras libere partopreni en la mona komunumo. Li/ŝi kunproduktas universalan dividendon, laŭ periodo kaj sumo tiel difinitaj kiel en la <span class=\"text-italic\">reguloj de la mono</span>",
+      "CURRENCY_RULES": "Reguloj de la mono",
+      "CURRENCY_RULES_DEF": "La reguloj de la mono estas difinitaj definitive. Ili fiksas la funkciadon de la mono: la kalkulon de la universala dividendo, la nombron de necesaj atestaĵoj por esti membro, la maksimuman nombron da atestaĵoj, kiujn povas doni unu membro, ktp. <a href=\"#/app/currency\">Vidi la nuntempajn regulojn</a>.<br/>La nemodifo de la reguloj tra la tempo eblas per uzado de <span class=\"text-italic\">Blokĉeno</span>, kiu entenas kaj plenumas tiujn regulojn, kaj konstante kontrolas ties ĝustan aplikadon.",
+      "BLOCKCHAIN": "Ĉeno de blokoj (<span class=\"text-italic\">Blokchain/Blokĉeno</span>)",
+      "BLOCKCHAIN_DEF": "La Blokĉeno estas malcentrigita sistemo, kiu, kaze de Duniter, servas por enteni kaj plenumi la <span class=\"text-italic\">regulojn de la mono</span>.<br/><a href=\"https://duniter.org/fr/comprendre/\" target=\"_system\">Scii pli pri Duniter</a> kaj la funkciado de ties blokĉeno.",
+      "UNIVERSAL_DIVIDEND_DEF": "La Universala Dividendo (UD) estas la kvanto de mono kunkreita de ĉiu membro, laŭ la periodo kaj kalkulo difinitaj en la <span class=\"text-italic\">reguloj de la mono</span>.<br/>Por ĉiu perioda dato, la membroj ricevas en sian konton la saman kvanton da nova mono.<br/><br/>La UD spertas regulan kreskon, por resti justa inter la membroj (nunaj kaj venontaj), kalkulitan depende de la meza vivespero, kiel estas demonstrite en la Teorio Relativa pri la Mono (TRM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">Scii pli pri la TRM</a> kaj la liberaj monoj.",
+      "WOT": "Reto de Fido (RdF)",
+      "WOT_DEF": "La Reto de Fido konsistas el la tuto de la membroj de la mono, kaj el la atesto-ligoj, kiuj kunligas ilin.",
+      "DISTANCE_RULE": "Regulo pri distanco",
+      "DISTANCE_RULE_DEF": "La regulo pri distanco de la Reto de Fido difinas <b>maksimuman distancon nepran</b> inter petanto kaj minimuma nombro da referencaj membroj (aŭ centraj membroj). Tiu distanco estas kalkulita uzante la ligojn inter atestaĵoj."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "La menuo <b>{{'MENU.CURRENCY'|translate}}</b> ebligas konsulti la <b>regulojn de la mono</b> kaj ties staton.",
+      "CURRENCY_WOT": "La <b>nombro de membroj</b> montras la gravecon de la komunumo kaj ebligas <b>sekvi ties evoluon</b>.",
+      "CURRENCY_MASS": "Sekvu ĉi tie la <b>ĉioman kvanton da mono</b> ekzistanta kaj ties <b>mezan distribuon</b> por membro.<br/><br/>Tio ĉi ebligas taksi la <b>gravecon de iu sumo</b>, kompare kun tio, kion <b>posedas la aliuloj</b> en sia konto (mezume).",
+      "CURRENCY_UNIT_RELATIVE": "La unuo uzata (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifas, ke la sumoj en {{currency|capitalize}} estis dividitaj per la <b> Universala Dividendo</b> (UD).<br/><br/><small>Tiu relativa unuo estas <b>trafa</b>, ĉar stabila malgraŭ la kvanto de mono, kiu kreskas seninterrompe.</small>",
+      "CURRENCY_CHANGE_UNIT": "La kromaĵo <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> ebligas <b>ŝanĝi la unuon</b>, por vidigi la sumojn <b>rekte en {{currency|capitalize}}</b> (prefere ol en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "La kromaĵo <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> ebligas <b>ŝanĝi la unuon</b>, por vidigi la sumojn en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, tio estas rilate al la Universala Dividendo (la sumo kunproduktita de ĉiu membro).",
+      "CURRENCY_RULES": "La <b>reguloj</b> de la mono fiksas ties funkciadon <b>ĝustan kaj antaŭvideblan</b>.<br/><br/>Vera DNA de la mono, ili igas sian monan kodon <b>legebla kaj travidebla</b>.",
+      "MENU_BTN_NETWORK": "La menuo <b>{{'MENU.NETWORK'|translate}}</b> ebligas konsulti la staton de la reto.",
+      "NETWORK_BLOCKCHAIN": "Ĉiuj operacioj pri la mono estas registritaj en granda konto-libro <b>publika kaj nefalsigebla</b>, ankaŭ nomata <b>blokĉeno</b> (<em>BlockChain</em> en la angla).",
+      "NETWORK_PEERS": "La <b>nodoj</b> videblaj ĉi tie rilatas al la <b>komputiloj, kiuj ĝisdatigas kaj kontrolas</b> la blokĉenon.<br/><br/>Ju pli estas nodoj, des pli la mono havas administradon <b>malcentrigitan</b> kaj fidindan.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "Tiu ĉi <b>numero</b> (verda) indikas la <b>lastan blokon validigitan</b> por tiu ĉi nodo (lasta paĝo skribita en la granda konto-libro).<br/><br/>La verda koloro indikas, ke tiu ĉi bloko estas validigita ankaŭ de <b>la plej multaj el la aliaj nodoj</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Ĉiu membro</b>, ekipita per komputilo kun interreto, <b>povas partopreni aldonante nodon</b>. Sufiĉas <b>instali la programon Duniter</b> (libera kaj senpaga). <a href=\"{{installDocUrl}}\" target=\"_system\">Vidi la gvidilon pri instalado &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "La menuo <b>{{'MENU.ACCOUNT'|translate}}</b> ebligas aliri la administradon de via konto.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Konsultu ĉi tie la staton de via konto kaj la informojn pri viaj atestaĵoj.",
+      "WALLET_CERTIFICATIONS": "Alklaku ĉi tien por konsulti la detalon pri viaj atestaĵoj (ricevitaj kaj senditaj).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Alklaku ĉi tien por konsulti la detalon pri viaj <b>ricevitaj atestaĵoj</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Alklaku ĉi tien por konsulti la detalon pri viaj <b>senditaj atestaĵoj</b>.",
+      "WALLET_BALANCE": "La <b>saldo</b> de via konto afiŝiĝas tie ĉi.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>La uzata unuo (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifas, ke la sumo en {{currency|capitalize}} estis dividita per la <b>Universala Dividendo</b> (UD) kunkreita de ĉiu membro.<br/><br/>Nuntempe 1 UD valoras {{currentUD|formatInteger}} {{currency|capitalize}}j.",
+      "WALLET_BALANCE_CHANGE_UNIT": "Vi povos <b>ŝanĝi la unuon</b> afiŝitan por la sumoj en la <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Ekzemple por vidigi la sumojn <b>rekte en {{currency|capitalize}}</b>, prefere ol en relativa unuo.",
+      "WALLET_PUBKEY": "Jen la publika ŝlosilo de via konto. Vi povas sciigi ĝin al aliulo, por ke li identigu pli simple vian konton.",
+      "WALLET_SEND": "Efektivigi pagon per kelkaj klakoj.",
+      "WALLET_SEND_NO_MONEY": "Efektivigi pagon per kelkaj klakoj.<br/>(Via saldo ankoraÅ­ ne permesas tion)",
+      "WALLET_OPTIONS": "Tiu ĉi butono ebligas aliri la <b>agojn pri aliĝo</b> kaj sekureco.<br/><br/>Ne forgesu okulumi al ĝi!",
+      "WALLET_RECEIVED_CERTS": "Afiŝiĝos ĉi tie la listo de la personoj, kiuj atestis vin.",
+      "WALLET_CERTIFY": "La butono <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> ebligas elekti identecon kaj atesti ĝin.<br/><br/>Nur uzantoj <b>jam membroj</b> povas atesti aliajn.",
+      "WALLET_CERT_STOCK": "Via stoko da atestaĵoj (senditaj) estas limigita je <b>{{sigStock}} atestaĵoj</b>.<br/><br/>Tiu stoko plu evoluas laŭ la tempo, samtempe kiam la atestaĵoj malvalidiĝas.",
+      "MENU_BTN_WALLETS": "La menuo <b>{{'MENU.WALLETS'|translate}}</b> ebligas aldoni kromajn monujojn, kiujn vi mastrumas.",
+      "MENU_BTN_TX": "La menuo <b>{{'MENU.TRANSACTIONS'|translate}}</b> ebligas konsulti vian saldon, la histori-liston de viaj spezoj, kaj sendi pagon.",
+      "MENU_BTN_WOT": "La menuo <b>{{'MENU.WOT'|translate}}</b> ebligas traserĉi inter la <b>uzantoj</b> de la mono (membroj aŭ ne).",
+      "WOT_SEARCH_TEXT_XS": "Por traserĉi en la kontaro, tajpu la <b>unuajn literojn de pseŭdonimo</b> (aŭ de publika ŝlosilo).<br/><br/>La serĉado ekos aŭtomate.",
+      "WOT_SEARCH_TEXT": "Por traserĉi en la kontaro, tajpu la <b>unuajn literojn de de pseŭdonimo</b> (aŭ de publika ŝlosilo). <br/><br/>Premu poste sur la klavon <b>Enigi</b> por ekigi la serĉadon.",
+      "WOT_SEARCH_RESULT": "Vidigu la detalan slipon simple <b>alklakante</b> linion.",
+      "WOT_VIEW_CERTIFICATIONS": "La linio <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> montras kiom da membroj validigis tiun ĉi identecon.<br/><br/>Tiuj atestaĵoj pruvas, ke la konto apartenas al <b>persono homa kaj vivanta</b>, havanta <b>neniun alian membro-konton</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "Necesas almenaŭ <b>{{sigQty}} atestaĵoj</b> por fariĝi membro kaj ricevi la <b>Universalan Dividendon</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Alklaki ĉi tien ebligas malfermi <b>la liston de ĉiuj atestaĵoj</b> de la identeco (ricevitaj kaj senditaj).",
+      "WOT_VIEW_CERTIFY": "La butono <b>{{'WOT.BTN_CERTIFY'|translate}}</b> ebligas aldoni vian atestaĵon al tiu identeco.",
+      "CERTIFY_RULES": "<b>Atenton:</b> Atestu nur <b>personojn fizikajn vivantajn</b>, posedantajn neniun alian membro-konton.<br/><br/>La sekureco de la mono dependas de ĉies atentego!",
+      "MENU_BTN_SETTINGS": "La <b>{{'MENU.SETTINGS'|translate}}</b> ebligos al vi agordi la programon.",
+      "HEADER_BAR_BTN_PROFILE": "Alklaku ĉi tien por aliri vian <b>uzanto-profilon.</b>",
+      "SETTINGS_CHANGE_UNIT": "Vi povos <b>ŝanĝi la afiŝ-unuon</b> de la sumoj alklakante ĉi-supren.<br/><br/>- Malaktivigu la kromaĵon por afiŝi sumojn en {{currency|capitalize}}.<br/>- Aktivigu la kromaĵon por relativa afiŝado en {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (ĉiuj sumoj estos <b>dividitaj</b> per la Universala Dividendo aktuala).",
+      "END_LOGIN": "Tiu ĉi gvidata vizito <b>finiĝis</b>!<br/><br/>Bonan daŭrigon al vi, en la nova mondo de la<b>libera ekonomio</b>!",
+      "END_NOT_LOGIN": "Tiu ĉi gvidata vizito <b>finiĝis</b>!<br/><br/>Se vi deziras partopreni en la mono {{currency|capitalize}}, sufiĉos al vi alklaki <b>{{'LOGIN.CREATE_FREE_ACCOUNT'|translate}}</b> ĉi-sube.",
+      "END_READONLY": "Tiu ĉi gvidata vizito <b>finiĝis</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."
+    }
+  },
+  "API": {
+    "COMMON": {
+      "LINK_DOC": "Dokumentaro API",
+      "LINK_DOC_HELP": "Dokumentaro por la programistoj",
+      "LINK_STANDARD_APP": "Klasika versio",
+      "LINK_STANDARD_APP_HELP": "Malfermi la klasikan version de {{'COMMON.APP_NAME'|translate}}",
+      "CONNECTION_ERROR": "Nodo <b>{{server}}</b> neatingebla aÅ­ adreso nevalida.<br/><br/>Kontrolu vian interretan konekton, aÅ­ kontaktu la administranton de la retejo</a>."
+    },
+    "HOME": {
+      "TITLE": "Dokumentaro API {{'COMMON.APP_NAME'|translate}}",
+      "MESSAGE": "Bonvenon en la <b>dokumentaro de la API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Konektu viajn retejojn al <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> tre simple!",
+      "MESSAGE_SHORT": "Konektu viajn retejojn al <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> tre simple!",
+      "DOC_HEADER": "Servoj disponeblaj:"
+    },
+    "TRANSFER": {
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} - Reta pago",
+      "TITLE_SHORT": "Reta pago",
+      "SUMMARY": "Resumo de la pago:",
+      "AMOUNT": "Sumo:",
+      "AMOUNTS_HELP": "Bonvolu elekti la sumon:",
+      "NAME": "Nomo:",
+      "PUBKEY": "Publika ŝlosilo de la ricevonto:",
+      "COMMENT": "Referenco de la spezo:",
+      "NODE": "Adreso de la nodo:",
+      "DEMO": {
+        "SALT": "demo",
+        "PASSWORD": "demo",
+        "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
+        "HELP": "<b>Demonstra moduso</b>: Neniu pago reale estos sendita dum tiu simulado.<br/>Bonvolu uzi la identigilojn: <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
+        "BAD_CREDENTIALS": "Kontrolu vian tajpaĵon.<br/>En demonstra moduso, la identigiloj estas: {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"
+      },
+      "INFO": {
+        "SUCCESS_REDIRECTING_WITH_NAME": "Pago sendita.<br/>Redirektiĝo al <b>{{name}}</b>...",
+        "SUCCESS_REDIRECTING": "Pago sendita.<br/>Redirektiĝo al la retejo de la vendanto...",
+        "CANCEL_REDIRECTING_WITH_NAME": "Pago nuligita.<br/>Redirektiĝo al <b>{{name}}</b>...",
+        "CANCEL_REDIRECTING": "Pago nuligita.<br/>Redirektiĝo al la retejo de la vendanto..."
+      },
+      "ERROR": {
+        "TRANSFER_FAILED": "Pago malsukcesa"
+      }
+    },
+    "DOC": {
+      "DESCRIPTION_DIVIDER": "Priskribo",
+      "URL_DIVIDER": "Adreso alvokita",
+      "PARAMETERS_DIVIDER": "Parametroj",
+      "AVAILABLE_PARAMETERS": "Jen la listo de la eblaj parametroj:",
+      "DEMO_DIVIDER": "Testi",
+      "DEMO_HELP": "Por testi tiun servon, alklaku la butonon ĉi-apude. La rezulto afiŝiĝos sube.",
+      "DEMO_RESULT": "Rezulto sendita de la alvoko:",
+      "DEMO_RESULT_PEER": "Adreso de la uzata nodo:",
+      "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> Sukceso!",
+      "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Nuligita de la uzanto",
+      "INTEGRATE_DIVIDER": "Integri",
+      "INTEGRATE_CODE": "Kodo:",
+      "INTEGRATE_RESULT": "AntaÅ­vidigo de la rezulto:",
+      "INTEGRATE_PARAMETERS": "Parametroj",
+      "TRANSFER": {
+        "TITLE": "Pagoj",
+        "DESCRIPTION": "De retejo (ekz.: ret-vendado) vi povas komisii la pagon en libera mono al Cesium API. Por tio, sufiĉas al vi ekigi la malfermon de paĝo ĉe la sekvanta adreso:",
+        "PARAM_PUBKEY": "Publika ŝlosilo de la ricevonto",
+        "PARAM_PUBKEY_HELP": "Publika ŝlosilo de la ricevonto (devige)",
+        "PARAM_AMOUNT": "Sumo",
+        "PARAM_AMOUNT_HELP": "Sumo de la spezo (devige). Pluraj valoroj permesataj, uzante apartigilon (punkto-komo, vertikala streko aÅ­ spaco).",
+        "PARAM_COMMENT": "Referenco (aÅ­ komento)",
+        "PARAM_COMMENT_HELP": "Referenco aŭ komento. Tio ekzemple ebligos al vi identigi la pagon en la blokĉeno.",
+        "PARAM_NAME": "Nomo (de la ricevonto aÅ­ de la retejo)",
+        "PARAM_NAME_HELP": "La nomo de la ricevonto, aÅ­ de la retejo alvokanta. Tio povas estis legebla nomo (\"Mia retejo\"), aÅ­ alie pseÅ­do-retadreso (\"MiaRetejo.com\").",
+        "PARAM_REDIRECT_URL": "Retadreso por redirektiĝo",
+        "PARAM_REDIRECT_URL_HELP": "Retadreso (URL) por redirektiĝo, alvokita kiam la pago estis sendita. Ĝi povas enteni la sekvantajn signojn, kiuj estos anstataŭigitaj per la valoroj de la spezo: \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" kaj \"{node}\".",
+        "PARAM_CANCEL_URL": "Retadreso por nuligo",
+        "PARAM_CANCEL_URL_HELP": "Retadreso (URL) kaze de nuligo de la pago, fare de la uzanto. Äœi povas enteni la sekvantajn signojn, kiuj estos anstataÅ­igitaj lastmomente: \"{comment}\", \"{amount}\" kaj \"{pubkey}\".",
+        "PARAM_PREFERRED_NODE": "Adreso de la preferata nodo",
+        "PARAM_PREFERRED_NODE_HELP": "Adreso (URL) de la nodo Duniter preferinde uzota (\"g1.domaine.com:443\" aÅ­ \"https://g1.domaine.com\").",
+        "EXAMPLES_HELP": "Jen ekzemploj pri integrado:",
+        "EXAMPLE_BUTTON": "Butono HTML",
+        "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pagi en {{currency|currencySymbol}}",
+        "EXAMPLE_BUTTON_DEFAULT_STYLE": "Personigita stilo",
+        "EXAMPLE_BUTTON_TEXT_HELP": "Buton-teksto",
+        "EXAMPLE_BUTTON_BG_COLOR": "Fon-koloro",
+        "EXAMPLE_BUTTON_BG_COLOR_HELP": "Ekzemplo: #fbc14c, nigra, helgriza, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_FONT_COLOR": "Teksto-koloro",
+        "EXAMPLE_BUTTON_FONT_COLOR_HELP": "Ekzemplo: nigra, oranĝa, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_TEXT_ICON": "Ikono",
+        "EXAMPLE_BUTTON_TEXT_WIDTH": "Larĝeco",
+        "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Ekzemplo: 200px, 50%",
+        "EXAMPLE_BUTTON_ICON_NONE": "Neniu",
+        "EXAMPLE_BUTTON_ICON_DUNITER": "Insigno Duniter",
+        "EXAMPLE_BUTTON_ICON_CESIUM": "Insigno Cesium",
+        "EXAMPLE_BUTTON_ICON_G1_COLOR": "Insigno Äž1",
+        "EXAMPLE_BUTTON_ICON_G1_BLACK": "Insigno Äž1 (nigra)"
+      }
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/es-ES-2.0.0-alpha42.json b/ios/App/public/assets/i18n/es-ES-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..c1a3eb41496cbdef74fcc43348da50a6040ccc8f
--- /dev/null
+++ b/ios/App/public/assets/i18n/es-ES-2.0.0-alpha42.json
@@ -0,0 +1,1000 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "fecha: {{build}}",
+    "PUBKEY": "Llave pública",
+    "MEMBER": "Miembro",
+    "BLOCK": "Bloque",
+    "BTN_OK": "OK",
+    "BTN_YES": "Sí",
+    "BTN_NO": "No",
+    "BTN_SEND": "Enviar",
+    "BTN_SEND_MONEY": "Hacer un pago",
+    "BTN_SEND_MONEY_SHORT": "Pago",
+    "BTN_SAVE": "Guardar",
+    "BTN_YES_SAVE": "Sí, guardar",
+    "BTN_YES_CONTINUE": "Sí, continuar",
+    "BTN_SHOW": "Ver",
+    "BTN_SHOW_PUBKEY": "Ver la llave",
+    "BTN_RELATIVE_UNIT": "Mostrar importes en DU",
+    "BTN_BACK": "Anterior",
+    "BTN_NEXT": "Siguiente",
+    "BTN_IMPORT": "Importar",
+    "BTN_CANCEL": "Cancelar",
+    "BTN_CLOSE": "Cerrar",
+    "BTN_LATER": "Más tarde",
+    "BTN_LOGIN": "Conectarse",
+    "BTN_LOGOUT": "Desconexión",
+    "BTN_ADD_ACCOUNT": "Nueva cuenta",
+    "BTN_SHARE": "Compartir",
+    "BTN_EDIT": "Modificar",
+    "BTN_DELETE": "Suprimir",
+    "BTN_ADD": "Añadir",
+    "BTN_SEARCH": "Buscar",
+    "BTN_REFRESH": "Actualizar",
+    "BTN_RETRY": "Empezar de nuevo",
+    "BTN_START": "Empezar",
+    "BTN_CONTINUE": "Continuar",
+    "BTN_CREATE": "Crear",
+    "BTN_UNDERSTOOD": "Entendido",
+    "BTN_OPTIONS": "Opciones",
+    "BTN_HELP_TOUR": "Visita guiada",
+    "BTN_HELP_TOUR_SCREEN": "Explicar esta pantalla",
+    "BTN_DOWNLOAD": "Descargar",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Descargar historial de cuenta",
+    "BTN_MODIFY": "Modificar",
+    "CHOOSE_FILE": "Arrastre el archivo<br/>o haga clic para seleccionarlo",
+    "DAYS": "Días",
+    "NO_ACCOUNT_QUESTION": "¿Todavía no es miembro? ¡Crear una cuenta!",
+    "SEARCH_NO_RESULT": "Ningún resultado encontrado",
+    "LOADING": "Espere por favor…",
+    "LOADING_WAIT": "Espere por favor…<br/><small>(Esperando disponibilidad de nodo)</small>",
+    "SEARCHING": "Búsqueda en proceso…",
+    "FROM": "De",
+    "TO": "A",
+    "COPY": "Copiar",
+    "LANGUAGE": "Idioma",
+    "UNIVERSAL_DIVIDEND": "Dividendo universal",
+    "UD": "DU",
+    "DATE_PATTERN": "DD/MM/YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(vacío)",
+    "UID": "Seudónimo",
+    "ENABLE": "Activado",
+    "DISABLE": "Desactivado",
+    "RESULTS_LIST": "Resultados:",
+    "RESULTS_COUNT": "{{count}} resultados",
+    "EXECUTION_TIME": "ejecutado en {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Revelar contraseñas",
+    "POPOVER_ACTIONS_TITLE": "Opciones",
+    "POPOVER_FILTER_TITLE": "Filtros",
+    "SHOW_MORE": "Mostrar más",
+    "SHOW_MORE_COUNT": "(límite actual {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Compartir",
+      "SHARE_ON_TWITTER": "Compartir en Twitter",
+      "SHARE_ON_FACEBOOK": "Compartir en Facebook",
+      "SHARE_ON_DIASPORA": "Compartir en Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Compartir en Google+"
+    },
+    "FILE": {
+      "DATE": "Fecha:",
+      "TYPE": "Tipo:",
+      "SIZE": "Tamaño:",
+      "VALIDATING": "Validando…"
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Elegir la fuente:",
+    "BTN_PICTURE_GALLERY": "Galería",
+    "BTN_PICTURE_CAMERA": "<b>Cámara</b>"
+  },
+  "MENU": {
+    "HOME": "Inicio",
+    "WOT": "Directorio",
+    "CURRENCY": "Moneda",
+    "ACCOUNT": "Mi cuenta",
+    "WALLETS": "Mis monederos",
+    "SETTINGS": "Ajustes",
+    "NETWORK": "Red",
+    "TRANSACTIONS": "Mis transacciones"
+  },
+  "ABOUT": {
+    "BTN_OPEN_DEV_WINDOW": "Abrir ventana de depuración",
+    "TITLE": "Acerca de",
+    "LICENSE": "Software <b>libre</b> (licencia GNU AGPLv3).",
+    "LATEST_RELEASE": "Existe una <b>versión más nueva</b> de {{'COMMON.APP_NAME' | translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Por favor actualice {{'COMMON.APP_NAME' | translate}} (última versión: <b>v{{version}}</b>)",
+    "CODE": "Código fuente:",
+    "OFFICIAL_WEB_SITE": "Web oficial:",
+    "DEVELOPERS": "Desarrollado por:",
+    "FORUM": "Foro:",
+    "PLEASE_REPORT_ISSUE": "No dude en informarnos de anomalías encontradas",
+    "REPORT_ISSUE": "Reportar un problema"
+  },
+  "HOME": {
+    "FEED_SOURCE": "Fuente",
+    "READ_MORE": "Leer más",
+    "SHOW_ALL_FEED": "Ver todo",
+    "TITLE": "Cesium",
+    "WELCOME": "¡Bienvenida/o a la aplicación Cesium!",
+    "MESSAGE": "Reciba y envíe moneda libre {{currency}} fácilmente",
+    "BTN_CURRENCY": "Explorar la moneda",
+    "BTN_ABOUT": "Acerca de",
+    "BTN_HELP": "Ayuda en línea",
+    "REPORT_ISSUE": "Reportar anomalía",
+    "NOT_YOUR_ACCOUNT_QUESTION": "¿No es suya la cuenta <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
+    "BTN_CHANGE_ACCOUNT": "Desconectar esta cuenta",
+    "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Compruebe su conexión a Internet, o nodo Duniter <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en los ajustes</a>."
+  },
+  "SETTINGS": {
+    "TITLE": "Ajustes",
+    "DISPLAY_DIVIDER": "Visualización",
+    "STORAGE_DIVIDER": "Almacenamiento",
+    "NETWORK_SETTINGS": "Red",
+    "PEER": "Dirección del nodo Duniter",
+    "PEER_CHANGED_TEMPORARY": "Dirección utilizada temporalmente",
+    "PEER_SHORT": "Nodo Duniter",
+    "PERSIST_CACHE": "Conservar los datos de navegación (experimental)",
+    "PERSIST_CACHE_HELP": "Permite una navegación más rápida, conservando localmente los datos recibidos, para usar de una sesión a otra.",
+    "USE_LOCAL_STORAGE": "Activar el almacenamiento local",
+    "USE_LOCAL_STORAGE_HELP": "Permitir conservar sus ajustes",
+    "WALLETS_SETTINGS": "Mis monederos",
+    "USE_WALLETS_ENCRYPTION": "Cifrar el listado",
+    "USE_WALLETS_ENCRYPTION_HELP": "Permite proteger la lista de sus monederos (mediante cifrado), exigiendo una autenticación para acceder.",
+    "ENABLE_HELPTIP": "Activar la ayuda contextual",
+    "ENABLE_UI_EFFECTS": "Activar los efectos visuales",
+    "HISTORY_SETTINGS": "Transacciones de la cuenta",
+    "DISPLAY_UD_HISTORY": "Mostrar los DU creados",
+    "TX_HISTORY_AUTO_REFRESH": "Activar actualización automática",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Actualizar el saldo y las transacciones automáticamente, con cada nuevo bloque.",
+    "AUTHENTICATION_SETTINGS": "Autenticación",
+    "KEEP_AUTH": "Caducidad de la autenticación",
+    "KEEP_AUTH_SHORT": "Caducidad",
+    "KEEP_AUTH_HELP": "Defina cuándo expira su sesión",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Después de cada operación",
+      "SECONDS": "Después de {{value}} segundos de inactividad",
+      "MINUTE": "Después de {{value}}min de inactividad",
+      "MINUTES": "Después de {{value}}mins de inactividad",
+      "HOUR": "Después de {{value}}h de inactividad",
+      "ALWAYS": "Al finalizar la sesión"
+    },
+    "KEYRING_FILE": "Archivo de llaves",
+    "KEYRING_FILE_HELP": "Le permite <b>conectarse</b> automáticamente en cada inicio <br/>e incluso de <b>autenticarse</b> (solo si \"Caducidad de la autenticación\" está configurada en modo: \"al finalizar la sesión\").",
+    "REMEMBER_ME": "Recordarme",
+    "REMEMBER_ME_HELP": "Permite mantenerse siempre conectado (no recomendado), conservando localmente la llave pública.",
+    "PLUGINS_SETTINGS": "Extensiones",
+    "BTN_RESET": "Restaurar los valores por defecto",
+    "EXPERT_MODE": "Modo experto",
+    "EXPERT_MODE_HELP": "Permite una visualización más detallada",
+    "BLOCK_VALIDITY_WINDOW": "Tiempo de incertitud de los bloques",
+    "DISABLE_HELPTIP": "Desactivar la opción de ayuda contextual",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Tiempo de incertitud",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Tiempo de espera antes de considerar una información como validada",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "Sin espera",
+      "N": "{{time | formatDuration}} ({{count}} bloques)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Nodo Duniter",
+      "HOST": "Dirección",
+      "HOST_HELP": "Dirección: servidor:puerto",
+      "USE_SSL": "Conexión segura",
+      "USE_SSL_HELP": "(Cifrado SSL)",
+      "BTN_SHOW_LIST": "Lista de nodos"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Bloque #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Bloque actual",
+      "TITLE": "Bloque #{{number|formatInteger}}",
+      "COMPUTED_BY": "Calculado por el nodo de",
+      "SHOW_RAW": "Ver el fichero en bruto",
+      "TECHNICAL_DIVIDER": "Informaciones técnicas",
+      "VERSION": "Versión del formato",
+      "HASH": "Hash calculado",
+      "UNIVERSAL_DIVIDEND_HELP": "Moneda co-producida por cada uno de los {{membersCount}} miembros",
+      "EMPTY": "Ningún dato en este bloque",
+      "POW_MIN": "Dificultad mínima",
+      "POW_MIN_HELP": "Dificultad impuesta por el cálculo del hash",
+      "DATA_DIVIDER": "Datos",
+      "IDENTITIES_COUNT": "Nuevas identidades",
+      "JOINERS_COUNT": "Nuevos miembros",
+      "ACTIVES_COUNT": "Renovaciones",
+      "ACTIVES_COUNT_HELP": "Miembros que han renovado sus adhesiones",
+      "LEAVERS_COUNT": "Miembros salientes",
+      "LEAVERS_COUNT_HELP": "Miembros salientes que ya no quieren estar certificados",
+      "EXCLUDED_COUNT": "Miembros excluidos",
+      "EXCLUDED_COUNT_HELP": "Antiguos miembros excluidos por no renovación o falta de certificaciones",
+      "REVOKED_COUNT": "Identidades revocadas",
+      "REVOKED_COUNT_HELP": "Estas cuentas no podrán ser miembros",
+      "TX_COUNT": "Transacciones",
+      "CERT_COUNT": "Certificaciones",
+      "TX_TO_HIMSELF": "Operación de cambio",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Condiciones de desbloqueo",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "y",
+        "OR": "o"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Firma</b> de ",
+        "XHX": "<b>Contraseña</b>, cuyo SHA256 =",
+        "CSV": "Bloqueado durante",
+        "CLTV": "Bloqueado hasta"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Bloques",
+      "NO_BLOCK": "Ningún bloque",
+      "LAST_BLOCKS": "Últimos bloques:",
+      "BTN_COMPACT": "Compactar"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Moneda",
+      "TAB_CURRENCY": "Moneda",
+      "TAB_WOT": "Red de confianza",
+      "TAB_NETWORK": "Red",
+      "TAB_BLOCKS": "Bloques",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} es una <b>moneda libre</b>, originada {{firstBlockTime|formatFromNow}}. Cuenta actualmente con <b>{{N}} miembros</b>, que producen y reciben un <a ng-click=\"showHelpModal('ud')\">Dividendo Universal</a> (DU) cada {{dt|formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Reglas de la red",
+      "CURRENCY_NAME": "Nombre de la moneda",
+      "MEMBERS": "Cantidad de miembros",
+      "MEMBERS_VARIATION": "Variación desde último DU",
+      "MONEY_DIVIDER": "Moneda",
+      "MASS": "Masa monetaria",
+      "SHARE": "Masa media por miembro",
+      "UD": "Dividendo Universal",
+      "C_ACTUAL": "Crecimiento actual",
+      "MEDIAN_TIME": "Hora de la cadena de bloques",
+      "POW_MIN": "Nivel mínimo de dificultad de cálculo",
+      "MONEY_RULES_DIVIDER": "Reglas de la moneda",
+      "C_RULE": "Crecimiento teórico objetivo",
+      "UD_RULE": "Cálculo del dividendo universal",
+      "DT_REEVAL": "Periodo de revalorización del DU",
+      "REEVAL_SYMBOL": "reval",
+      "DT_REEVAL_VALUE": "Todos los <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Fecha de la primera revalorización",
+      "SIG_QTY_RULE": "Certificaciones requeridas para ser miembro",
+      "SIG_STOCK": "Máximo de certificaciones emitibles por miembros",
+      "SIG_PERIOD": "Espera mínima entre 2 certificaciones sucesivas emitidas por el mismo individuo",
+      "SIG_WINDOW": "Límite para tener en cuenta una certificación",
+      "SIG_VALIDITY": "Duración de una certificación tenida en cuenta",
+      "MS_WINDOW": "Límite para aprobar una solicitud de membresía",
+      "MS_VALIDITY": "Duración de una membresía aprobada",
+      "STEP_MAX": "Distancia máxima entre una nueva candidatura y cada miembro referente",
+      "WOT_RULES_DIVIDER": "Reglas de la red de confianza",
+      "SENTRIES": "Certificaciones necesarias para ser miembro referente",
+      "SENTRIES_FORMULA": "Fórmula de las certificaciones necesarias para ser miembro referente",
+      "XPERCENT": "Porcentaje mínimo necesario de miembros referentes respentando la regla de distancia máxima",
+      "AVG_GEN_TIME": "Tiempo medio entre dos bloques",
+      "CURRENT": "actual",
+      "MATH_CEILING": "TECHO",
+      "DISPLAY_ALL_RULES": "¿Ver todas las reglas?",
+      "BTN_SHOW_LICENSE": "Ver la licencia",
+      "WOT_DIVIDER": "Red de confianza"
+    },
+    "LICENSE": {
+      "TITLE": "Licencia de la moneda",
+      "BTN_DOWNLOAD": "Descargar el fichero",
+      "NO_LICENSE_FILE": "Fichero de licencia no encontrado."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Hora de la cadena de bloques",
+      "LOADING_PEERS": "Cargando nodos…",
+      "NODE_ADDRESS": "Dirección:",
+      "SOFTWARE": "Software:",
+      "WARN_PRE_RELEASE": "Prelanzamiento (última versión estable: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Versión <b>{{version}}</b> disponible",
+      "WS2PID": "ID:",
+      "PRIVATE_ACCESS": "Acceso privado",
+      "POW_PREFIX": "Prefijo de la prueba de trabajo:",
+      "ENDPOINTS": {
+        "BMAS": "Interfaz segura (SSL)",
+        "BMATOR": "Interfaz red TOR",
+        "WS2P": "Interfaz WS2P",
+        "ES_USER_API": "Nodo de datos Cesium+"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "La visualización de los nodos sin SSL está deteriorada porque Cesium funciona en modo HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Nodos",
+    "SIGNED_ON_BLOCK": "Firmado sobre el bloque",
+    "MIRROR": "espejo",
+    "MIRRORS": "Espejo",
+    "MIRROR_PEERS": "Nodos espejo",
+    "PEER_LIST": "Lista de nodos",
+    "MEMBERS": "Miembro",
+    "MEMBER_PEERS": "Nodos miembro",
+    "ALL_PEERS": "Todos los nodos",
+    "DIFFICULTY": "Dificultad",
+    "API": "API",
+    "CURRENT_BLOCK": "Bloque #",
+    "POPOVER_FILTER_TITLE": "Filtro",
+    "OFFLINE": "Fuera de línea",
+    "OFFLINE_PEERS": "Nodos fuera de línea",
+    "BTN_SHOW_PEER": "Ver nodo",
+    "VIEW": {
+      "TITLE": "Nodo",
+      "OWNER": "Propiedad de",
+      "SHOW_RAW_PEERING": "Ver la ficha del par",
+      "SHOW_RAW_CURRENT_BLOCK": "Ver el último bloque (formato bruto)",
+      "LAST_BLOCKS": "Bloques recientes",
+      "KNOWN_PEERS": "Nodos conocidos:",
+      "GENERAL_DIVIDER": "Información general",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "No se pudo obtener la información del nodo usando la red TOR.",
+        "LOADING_NODE_ERROR": "No se pudo obtener la información del nodo"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Buscar (seudónimo o llave pública)",
+    "SEARCH_INIT_PHASE_WARNING": "Durante la etapa de preinscripción, el tiempo de búsqueda de las candidaturas en espera <b>puede tardar</b>. Por favor espere…",
+    "REGISTERED_SINCE": "Se registró en",
+    "REGISTERED_SINCE_BLOCK": "Se registró en el bloque #",
+    "NO_CERTIFICATION": "Ninguna certificación validada",
+    "NO_GIVEN_CERTIFICATION": "Ninguna certificación emitida",
+    "NOT_MEMBER_PARENTHESIS": "(no miembro)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identidad revocada)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(revocación en proceso)",
+    "EXPIRE_IN": "Expira",
+    "NOT_WRITTEN_EXPIRE_IN": "Fecha límite<br/>de procesamiento",
+    "EXPIRED": "Expirado",
+    "PSEUDO": "Seudónimo",
+    "SIGNED_ON_BLOCK": "Emitida en el bloque #{{block}}",
+    "WRITTEN_ON_BLOCK": "Escrita en el bloque #{{block}}",
+    "GENERAL_DIVIDER": "Informaciones generales",
+    "NOT_MEMBER_ACCOUNT": "Cuenta no miembro",
+    "NOT_MEMBER_ACCOUNT_HELP": "Se trata de un monedero simple, sin solicitud de membresía en espera",
+    "TECHNICAL_DIVIDER": "Informaciones técnicas",
+    "BTN_CERTIFY": "Certificar",
+    "BTN_YES_CERTIFY": "Sí, certificar",
+    "BTN_SELECT_AND_CERTIFY": "Nueva certificación",
+    "ACCOUNT_OPERATIONS": "Transacciones de la cuenta",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identidad {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Directorio",
+      "NEWCOMERS": "Nuevos miembros:",
+      "NEWCOMERS_COUNT": "{{count}} miembros",
+      "PENDING": "Inscripciones en espera:",
+      "PENDING_COUNT": "{{count}} inscripciones en espera",
+      "REGISTERED": "Se inscribió {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Miembro desde {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Miembros recientes",
+      "BTN_PENDING": "Candidaturas en espera",
+      "SHOW_MORE": "Mostrar más",
+      "SHOW_MORE_COUNT": "(mostrar solo {{limit}})",
+      "NO_PENDING": "Ninguna candidatura en espera.",
+      "NO_NEWCOMERS": "Sin miembros."
+    },
+    "CONTACTS": {
+      "TITLE": "Contactos"
+    },
+    "MODAL": {
+      "TITLE": "Buscar"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificaciones",
+      "SUMMARY": "Certificaciones recibidas",
+      "LIST": "Detalle de las certificaciones recibidas",
+      "PENDING_LIST": "Certificaciones en espera de tratamiento",
+      "RECEIVED": "Certificaciones recibidas",
+      "RECEIVED_BY": "Certificaciones recibidas por {{uid}}",
+      "ERROR": "Certificaciones recibidas por error",
+      "SENTRY_MEMBER": "Miembro referente"
+    },
+    "OPERATIONS": {
+      "TITLE": "Transacciones"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificaciones emitidas",
+      "SUMMARY": "Certificaciones emitidas",
+      "LIST": "Detalle de las certificaciones emitidas",
+      "PENDING_LIST": "Certificaciones en espera a ser procesadas",
+      "SENT": "Certificaciones emitidas",
+      "SENT_BY": "Certificaciones emitidas por {{uid}}",
+      "ERROR": "Certificaciones emitidas por error"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Conexión",
+    "SCRYPT_FORM_HELP": "Ingrese sus credenciales.<br>Recuerde comprobar que la llave pública pertenece a su cuenta.",
+    "PUBKEY_FORM_HELP": "Por favor ingrese una llave pública de cuenta:",
+    "FILE_FORM_HELP": "Elija el archivo de llaves a usar:",
+    "SCAN_FORM_HELP": "Escanee el código QR de un monedero.",
+    "SALT": "Frase secreta",
+    "SALT_HELP": "Frase secreta",
+    "SHOW_SALT": "Mostrar la frase secreta",
+    "PASSWORD": "Contraseña",
+    "PASSWORD_HELP": "Contraseña",
+    "PUBKEY_HELP": "llave pública",
+    "NO_ACCOUNT_QUESTION": "¿Aún no tiene cuenta? ",
+    "HAVE_ACCOUNT_QUESTION": "¿Ya tiene cuenta?",
+    "CREATE_ACCOUNT": "Crear una cuenta",
+    "CREATE_FREE_ACCOUNT": "Crear una cuenta gratis",
+    "FORGOTTEN_ID": "¿Olvidó su contraseña?",
+    "ASSOCIATED_PUBKEY": "Llave pública del archivo de llaves:",
+    "BTN_METHODS": "Otros métodos",
+    "BTN_METHODS_DOTS": "Otras vías…",
+    "METHOD_POPOVER_TITLE": "Métodos",
+    "MEMORIZE_AUTH_FILE": "Memorizar las llaves durante la sesión de navegación",
+    "SCRYPT_PARAMETERS": "Ajustes (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Información",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> Se ha <b>desconectado</b> de forma automática, después de un periodo de inactividad prolongada.",
+      "BTN_RELOGIN": "Volver a conectarme",
+      "IDLE_WARNING": "Será desconectado en… {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Estándar (por defecto)",
+      "SCRYPT_ADVANCED": "Aleatoriedad avanzada",
+      "FILE": "Archivo de llaves",
+      "PUBKEY": "Llave pública o seudónimo",
+      "SCAN": "Escanear un código QR"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Ligero",
+      "DEFAULT": "Predeterminado",
+      "SECURE": "Seguro",
+      "HARDEST": "El más seguro",
+      "EXTREME": "Extremo",
+      "USER": "Personalizado",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Formato de archivo esperado: <b>.yml</b> o <b>.dunikey</b> (tipo PubSec, WIF o EWIF)."
+    }
+  },
+  "API": {
+    "COMMON": {
+      "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Verifique su conexión a Internet, o contacte con la administración del sitio.</a>.",
+      "LINK_DOC": "Documentación API",
+      "LINK_DOC_HELP": "Documentación para desarrolladores",
+      "LINK_STANDARD_APP": "Versión clásica",
+      "LINK_STANDARD_APP_HELP": "Abrir la versión clásica de {{'COMMON.APP_NAME'|translate}}"
+    },
+    "DOC": {
+      "AVAILABLE_PARAMETERS": "Lista de parámetros disponibles :",
+      "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Cancelado por el usuario",
+      "DEMO_DIVIDER": "Probar",
+      "DEMO_HELP": "Para probar este servicio, haga clic en este botón. El resultado se mostrará debajo.",
+      "DEMO_RESULT": "Resultado retornado por la llamada :",
+      "DEMO_RESULT_PEER": "Dirección del nodo utilizado :",
+      "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> ¡ Éxito !",
+      "DESCRIPTION_DIVIDER": "Descripción",
+      "INTEGRATE_CODE": "Código :",
+      "INTEGRATE_DIVIDER": "Integrar",
+      "INTEGRATE_PARAMETERS": "Parámetros",
+      "INTEGRATE_RESULT": "Previsualización del resultado :",
+      "PARAMETERS_DIVIDER": "Parámetros",
+      "TRANSFER": {
+        "DESCRIPTION": "Desde una web (ej: tienda online) puede delegar el pago en moneda libre con la API de Cesium. Para eso, simplemente ponga un link a la siguiente dirección :",
+        "EXAMPLE_BUTTON": "Botón HTML",
+        "EXAMPLE_BUTTON_BG_COLOR": "Color de fondo",
+        "EXAMPLE_BUTTON_BG_COLOR_HELP": "Ejemplo : #fbc14c, black, lightgrey, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_DEFAULT_STYLE": "Estilo personalizado",
+        "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pagar en {{currency|currencySymbol}}",
+        "EXAMPLE_BUTTON_FONT_COLOR": "Color del texto",
+        "EXAMPLE_BUTTON_FONT_COLOR_HELP": "Ejemplo : black, orange, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium",
+        "EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter",
+        "EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Äž1 (negro)",
+        "EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Äž1",
+        "EXAMPLE_BUTTON_ICON_NONE": "Ninguno",
+        "EXAMPLE_BUTTON_TEXT_HELP": "Texto del botón",
+        "EXAMPLE_BUTTON_TEXT_ICON": "Icono",
+        "EXAMPLE_BUTTON_TEXT_WIDTH": "Anchura",
+        "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Ejemplo : 200px, 50%",
+        "EXAMPLES_HELP": "Ejemplos de integración :",
+        "PARAM_AMOUNT": "Cuantía",
+        "PARAM_AMOUNT_HELP": "Cuantía de la transición (obligatorio). Valores múltiples permitidos utilizando un separador (punto y coma, barra vertical o espacio).",
+        "PARAM_CANCEL_URL": "Dirección web de cancelación",
+        "PARAM_CANCEL_URL_HELP": "Dirección web (URL) en caso de anulación del pago por parte del usuario. Puede contener las siguientes palabras que serán remplazadas por sus valores dinámicamente en cada caso: \"{comment}\", \"{amount}\" y \"{pubkey}\".",
+        "PARAM_COMMENT": "Concepto (o comentario)",
+        "PARAM_COMMENT_HELP": "Concepto o comentario. Le permitirá por ejemplo identificar el pago en la cadena de bloques (blockchain).",
+        "PARAM_NAME": "Nombre (del destinatario o de su sitio web)",
+        "PARAM_NAME_HELP": "El nombre del destinatario, o de su sitio web. Puede ser un nombre leíble (\"Mi tienda en línea\"), o un dominio (\"Mitienda.com\").",
+        "PARAM_PREFERRED_NODE": "Dirección del nodo preferido",
+        "PARAM_PREFERRED_NODE_HELP": "Dirección (URL) del nodo Duniter a utilizar preferentemente (\"g1.domaine.com:443\" o \"https://g1.domaine.com\").",
+        "PARAM_PUBKEY": "Llave pública del destinatario",
+        "PARAM_PUBKEY_HELP": "La llave pública del destinatario (obligatoria)",
+        "PARAM_REDIRECT_URL": "Dirección web de redirección",
+        "PARAM_REDIRECT_URL_HELP": "Dirección web (URL) de redirección, llamada cuanda el pago ha sido enviado. Puede contener las palabras siguientes, que serán remplazadas por los valores de la transacción dinámicanente : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" y \"{node}\".",
+        "TITLE": "Pagos"
+      },
+      "URL_DIVIDER": "Dirección de llamada"
+    },
+    "HOME": {
+      "DOC_HEADER": "Servicios disponibles :",
+      "MESSAGE": "Bienvenido/a a la <b>documentación de la API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Conecte sus sitios webs a la cadena de bloques <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !",
+      "MESSAGE_SHORT": "Conecte sus sitios a <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !",
+      "TITLE": "Documentación API {{'COMMON.APP_NAME'|translate}}"
+    },
+    "TRANSFER": {
+      "AMOUNT": "Cuantía :",
+      "AMOUNTS_HELP": "Elija la cuantía :",
+      "COMMENT": "Concepto/Comentario de la operación :",
+      "DEMO": {
+        "BAD_CREDENTIALS": "Verifique sus credenciales.<br/>En modo demostración, las credenciales son : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}",
+        "HELP": "<b>Modo demostración</b> : Ningún pago será enviado realmente durante esta simulación.<br/>Utilice las credenciales : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
+        "PASSWORD": "demo",
+        "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
+        "SALT": "demo"
+      },
+      "ERROR": {
+        "TRANSFER_FAILED": "Error en el pago"
+      },
+      "INFO": {
+        "CANCEL_REDIRECTING": "Pago cancelado.<br/>Redirigiendo al sitio del vendedor...",
+        "CANCEL_REDIRECTING_WITH_NAME": "Pago cancelado.<br/>Redirigiendo a <b>{{name}}</b>...",
+        "SUCCESS_REDIRECTING": "Pago enviado.<br/>Redirigiendo al sitio del vendedor...",
+        "SUCCESS_REDIRECTING_WITH_NAME": "Pago enviado.<br/>Redirigiendo a <b>{{name}}</b>..."
+      },
+      "NAME": "Nombre :",
+      "NODE": "Dirección del nodo :",
+      "PUBKEY": "Llave pública del destinatario :",
+      "SUMMARY": "Resumen del pago :",
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} - Pago en línea",
+      "TITLE_SHORT": "Pago en línea"
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Autenticación",
+    "BTN_AUTH": "Autenticar",
+    "GENERAL_HELP": "Por favor, autentíquese:",
+    "EXPECTED_UID_HELP": "Por favor inicie sesión en la cuenta de <i class=\"ion-person\"></i> {{uid}}:",
+    "EXPECTED_PUBKEY_HELP": "Por favor, autentíquese en el monedero <br class=\"visible-xs\"/><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} :",
+    "SCAN_FORM_HELP": "Escanee el código QR de la <b>llave privada</b> del monedero."
+  },
+  "ACCOUNT": {
+    "TITLE": "Mi cuenta",
+    "BALANCE": "Saldo",
+    "LAST_TX": "Últimas transacciones validadas",
+    "BALANCE_ACCOUNT": "Saldo de la cuenta",
+    "NO_TX": "Ninguna transacción",
+    "SHOW_MORE_TX": "Mostrar más",
+    "SHOW_ALL_TX": "Mostrar todo",
+    "TX_FROM_DATE": "(mostrar solo {{fromTime|medianFromNowShort}})",
+    "OUT_DISTANCED": "Sus certificaciones recibidas provienen de un grupo demasiado aislado de la <a ng-click=\"showHelpModal('wot')\">Red de Confianza</a> (RdC) : la <a ng-click=\"showHelpModal('distance_rule')\">regla de distancia máxima</a> no se cumple.<br/>Deberá obtener certificaciones provinientes de otros sectores de la RdC, o esperar a que ésta estreche sus vínculos.",
+    "PENDING_TX": "Transacciones pendientes",
+    "VALIDATING_TX": "Transacciones validadas",
+    "ERROR_TX": "Transacciones no ejecutadas",
+    "ERROR_TX_SENT": "Transacciones ejecutadas fallidas",
+    "PENDING_TX_RECEIVED": "Transacciones en espera de recepción",
+    "EVENTS": "Eventos",
+    "WAITING_MEMBERSHIP": "Solicitud de membresía emitida. En espera de aceptación.",
+    "WAITING_CERTIFICATIONS": "Debe obtener {{needCertificationCount}} certificación(es) para ser miembro.",
+    "WAITING_CERTIFICATIONS_HELP": "Para obtener sus certificaciones, solicitelas únicamente a miembros <b>que le conozcan bien (y físicamente)</b>, como exige <a ng-click=\"showLicenseModal()\">la licencia de la moneda</a> que usted ha aceptado.<br/>Si no conoce lo suficiente a miembros, hágalo saber en <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">el foro</a> para conocerse físicamente o asistir a algún encuentro.",
+    "WILL_MISSING_CERTIFICATIONS": "Pronto le van a <b>faltar certificaciones</b> (al menos {{willNeedCertificationCount}} son necesarias)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Su adhesión como miembro <b>va a expirar {{membershipExpiresIn|formatDurationTo}}</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a> mientras tanto.",
+    "NEED_RENEW_MEMBERSHIP": "Ya no es miembro porque su adhesión <b>ha expirado</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Ya no es miembro de la moneda, <b>por falta de certificaciones</b>. Considere <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.",
+    "NO_WAITING_MEMBERSHIP": "No hay adhesión miembro en espera. Si desea <b>convertirse en miembro</b>, por favor <a ng-click=\"doQuickFix('membership')\">envíe su adhesión como miembro</a>.",
+    "CERTIFICATION_COUNT": "Certificaciones recibidas",
+    "CERTIFICATION_COUNT_SHORT": "Certificaciones",
+    "SIG_STOCK": "Certificaciones emitidas",
+    "BTN_RECEIVE_MONEY": "Recibir",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Cambiar a otra identidad…",
+    "BTN_FIX_MEMBERSHIP": "Volver a enviar la candidatura…",
+    "BTN_MEMBERSHIP_RENEW": "Renovar la membresía",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Renovar la membresía…",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Cancelar la membresía…",
+    "BTN_SECURITY_DOTS": "Cuenta y seguridad…",
+    "BTN_SHOW_DETAILS": "Publicar la información técnica",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Importe bloqueado",
+      "DESCRIPTION": "Aquí están las condiciones para desbloquear este importe:",
+      "DESCRIPTION_MANY": "Esta transacción esta compuesta de varias partes, cuyas condiciones de desbloqueo son:",
+      "LOCKED_AMOUNT": "Condiciones del importe:"
+    },
+    "NEW": {
+      "TITLE": "Registrarse",
+      "INTRO_WARNING_TIME": "Crear una cuenta en {{name|capitalize}} es muy simple. Sin embargo, por favor tome el tiempo suficiente para hacerlo correctamente (generar y memorizar bien las credenciales, etc.)",
+      "INTRO_WARNING_SECURITY": "Asegúrese de que el dispositivo actual (ordenador, tablet, teléfono) <b>es seguro y de confianza</b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Antivirus, cortafuegos, sesión protegida por contraseña o número PIN, etc.",
+      "INTRO_HELP": "Haga clic en <b>{{'COMMON.BTN_START'|translate}}</b> para iniciar la creación de la cuenta. Se le guiará paso a paso.",
+      "REGISTRATION_NODE": "Su registro será grabado a través del nodo Duniter <b>{{server}}</b>, que luego se transmitirá al resto del sistema de la moneda.",
+      "REGISTRATION_NODE_HELP": "Si no confía en este nodo, <a ng-click=\"doQuickFix('settings')\">cambie los ajustes</a> de Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Elegir el tipo de cuenta a crear:",
+      "MEMBER_ACCOUNT": "Cuenta miembro",
+      "MEMBER_ACCOUNT_TITLE": "Crear una cuenta miembro",
+      "MEMBER_ACCOUNT_HELP": "Si todavía no es miembro (solamente una cuenta miembro posible por ser humano).",
+      "WALLET_ACCOUNT": "Simple monedero",
+      "WALLET_ACCOUNT_TITLE": "Crear una cuenta simple",
+      "WALLET_ACCOUNT_HELP": "Monedero simple para todos los demás casos, por ejemplo si necesita una cuenta suplementaria para un proyecto, colectivo, para hacer pruebas, etc.<br/>El Dividendo Universal no será producido para esta cuenta.",
+      "SALT_WARNING": "Elija su frase secreta.<br/>Se solicitará cada vez que se conectará con esta cuenta.<br/><br/><b>Conserve bien esta frase secreta</b>.<br/>¡En caso de pérdida, nadie podrá acceder a su cuenta!",
+      "PASSWORD_WARNING": "Elija su contraseña.<br/>Se solicitará cada vez que se conectará con esta cuenta.<br/><br/><b>Conserve bien esta contraseña</b>.<br/>¡En caso de pérdida, nadie podrá acceder su cuenta!",
+      "PSEUDO_WARNING": "Elija un seudónimo.<br/>Sirve para que los otros miembros puedan encontrarlo más fácilmente.<br/><br/>No debe contener <b>ni espacios ni caracteres acentuados</b>.<div class='hidden-xs'><br/>Ejemplo: <span class='gray'>SophieDupond, MarcelChemin, etc.</span>",
+      "PSEUDO": "Seudónimo",
+      "PSEUDO_HELP": "Seudónimo",
+      "SALT_CONFIRM": "Confirmación",
+      "SALT_CONFIRM_HELP": "Confirmación de la frase secreta",
+      "PASSWORD_CONFIRM": "Confirmación",
+      "PASSWORD_CONFIRM_HELP": "Confirmación de la contraseña",
+      "SLIDE_6_TITLE": "Confirmación:",
+      "COMPUTING_PUBKEY": "Cálculo en proceso…",
+      "LAST_SLIDE_CONGRATULATION": "<b>¡Bien!</b> Ha introducido todas los datos necesarios.<br/><b>Puede solicitar</b> la creación de su cuenta.</b><br/><br/>Para su información, la llave pública que se muestra más abajo identificará su futura cuenta.<br/>Esta podrá ser comunicada a terceros para recibir pagos.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Advertencia:</b> la frase secreta, la contraseña y el seudónimo no podrán ser modificados.<br/><b>¡Asegúrese siempre de recordarlos!</b><br/><br/><b>¿Desea</b> solicitar la inscripción?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Advertencia:</b> la frase secreta y la contraseña no podrán ser modificados.<br/><b>¡Asegúrese de recordarlos siempre!</b><br/><br/><b>¿Desea</b> continuar?",
+      "CHECKING_PSEUDO": "Verificando…",
+      "PSEUDO_AVAILABLE": "Este nombre está disponible",
+      "PSEUDO_NOT_AVAILABLE": "Este nombre de usuario no está disponible",
+      "INFO_LICENSE": "Para unirse a la moneda, le pedimos leer y aceptar esta licencia.",
+      "BTN_ACCEPT": "Acepto",
+      "BTN_ACCEPT_LICENSE": "Acepto la licencia"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Elija un seudónimo",
+      "HELP": "Un seudónimo es obligatorio para ser miembro."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Selección de identidad",
+      "HELP": "Se han enviado varias <b>identidades diferentes</b> para la llave pública <span class=\"gray\"><i class=\"ion-key\"></i>{{pubkey | formatPubkey}}</span>.<br/>Por favor, selecciona la carpeta para usar:"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Selección de monedero"
+    },
+    "WALLET_LIST": {
+      "IMPORT_MODAL": {
+        "HELP": "Para <b>importar monederos</b>, haga clic para seleccionar o arrastre en la zona de abajo el archivo con la lista de monederos.",
+        "NO_NEW_WALLET": "Ningún monedero nuevo",
+        "TITLE": "Importar monederos",
+        "WALLET_COUNT": "<b>{{count}}</b> nuevo{{count > 1 ? 's' : ''}} monedero{{count > 1 ? 's' : ''}}"
+      },
+      "TITLE": "Mis monederos",
+      "BTN_NEW": "Añadir un monedero",
+      "BTN_DOWNLOAD": "Descargue el listado",
+      "BTN_IMPORT_FILE_DOTS": "Importar desde fichero…",
+      "NO_WALLET": "Sin monedero secundario",
+      "BTN_DELETE": "Eliminar un monedero secundario…",
+      "BTN_RENAME": "Renombrar el monedero",
+      "EXPORT_FILENAME": "monederos-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Total : ",
+      "EDIT_POPOVER": {
+        "TITLE": "Renombrar el monedero",
+        "HELP": "Escribe el nuevo nombre",
+        "NAME_HELP": "Nombre del monedero"
+      }
+    },
+    "SECURITY": {
+      "KEYFILE": {
+        "ERROR": {
+          "BAD_CHECKSUM": "Suma de control (checksum) incorrecta",
+          "BAD_PASSWORD": "Frase secreta incorrecta"
+        },
+        "EWIF_FORMAT": "Formato EWIF (Encrypted Wallet Import Format) - v1",
+        "EWIF_FORMAT_HELP": "Este formato almacena su archivo de llaves <b>de forma cifrada</b> a partir de una frase secreta de su elección. También guarda una suma de control (checksum) para verificar la integridad del archivo.<br/><b>Atención :</b>¡ Asegúrese siempre de recordar su frase secreta !",
+        "PASSWORD_POPUP": {
+          "HELP": "Indique la frase secreta :",
+          "PASSWORD_HELP": "Frase secreta",
+          "TITLE": "Archivo de llaves cifrado"
+        },
+        "PUBSEC_FORMAT": "Formato PubSec",
+        "PUBSEC_FORMAT_HELP": "Este formato almacena su archivo de llaves de forma simple. Es compatible con Cesium, ğannonce y Duniter.<br/><b>Atención :</b>El archivo <b>no está cifrado</b> (la llave privada aparece en claro) ; ¡ guárdelo en un lugar seguro !",
+        "WIF_FORMAT": "Formato WIF (Wallet Import Format) - v1",
+        "WIF_FORMAT_HELP": "Este formato almacena su archivo de llaves con una suma de control (checksum) para verificar la integridad del archivo. Es compatible con los monederos en papel (Duniter paper wallet).<br/><b>Atención :</b>El archivo <b>no está cifrado</b> (la llave privada aparece en claro) ; ¡ guárdelo en un lugar seguro !"
+      },
+      "ADD_QUESTION": "Añadir pregunta personalizada",
+      "BTN_CLEAN": "Limpiar",
+      "BTN_RESET": "Reiniciar",
+      "DOWNLOAD_REVOKE": "Guardar un archivo de revocación",
+      "DOWNLOAD_REVOKE_HELP": "Tener un archivo de revocación es importante, en caso de perdida de las credenciales. Le permitirá <b>invalidar y sacar su cuenta miembro fuera de la Red de Confianza</b>, convirtíendose en un monedero simple.",
+      "RECOVER_ID_SELECT_FILE": "Elija el <b>archivo para salvaguardar sus credenciales</b> a utilizar :",
+      "GENERATE_KEYFILE": "Generar mi archivo de llaves…",
+      "GENERATE_KEYFILE_HELP": "Genera un archivo que le permitirá atenticarse sin tener que introducir las credenciales.<br/><b>Cuidado:</b> este archivo contendrá su llave secreta; ¡Es muy importante conservarlo en un lugar seguro!",
+      "KEYFILE_FILENAME": "llavero-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Registrarse como miembro…",
+      "MEMBERSHIP_IN_HELP": "Le permite <b>transformar</b> una cuenta de monedero simple <b>en una cuenta miembro</b>, enviando una petición de membresía. Solo si todavía no tiene una cuenta miembro.",
+      "SEND_IDENTITY": "Publicar identidad…",
+      "SEND_IDENTITY_HELP": "Le permite asociar un seudónimo a esta cuenta, pero <b>sin pedir ser miembro</b>. La validez de este seudónimo tiene un plazo limitado.",
+      "HELP_LEVEL": "Elija <strong> al menos {{nb}} preguntas:</strong>",
+      "LEVEL": "Nivel de seguridad",
+      "LOW_LEVEL": "Bajo <span class=\"hidden-xs\">(2 preguntas min.)</span>",
+      "MEDIUM_LEVEL": "Medio <span class=\"hidden-xs\">(4 preguntas min.)</span>",
+      "QUESTION_1": "¿Cómo se llamaba su mejor amigo de la adolescencia?",
+      "QUESTION_2": "¿Cómo se llamaba su primer animal de compañía?",
+      "QUESTION_3": "¿Cuál es el primer plato que aprendió a cocinar?",
+      "QUESTION_4": "¿Cuál es la primera película que vió en un cine?",
+      "QUESTION_5": "¿Cuál era el destino del primer avión que cogió?",
+      "QUESTION_6": "¿Cómo se llamaba su docente favorito en la escuela primaria?",
+      "QUESTION_7": "¿Cuál sería para usted el mejor oficio?",
+      "QUESTION_8": "¿Cuál es su libro infantil preferido?",
+      "QUESTION_9": "¿Cuál fue el modelo de su primer vehículo?",
+      "QUESTION_10": "¿Cuál fue su sobrenombre durante su infancia?",
+      "QUESTION_11": "¿Cuál fue su personaje o actor/actriz preferido/a cuando era estudiante?",
+      "QUESTION_12": "¿Cuál fue su cantante o grupo preferido cuando era estudiante?",
+      "QUESTION_13": "¿En qué ciudad sus padres se encontraron?",
+      "QUESTION_14": "¿Cómo se llamaba su primer jefe/a?",
+      "QUESTION_15": "¿Cómo se llama la calle donde creció?",
+      "QUESTION_16": "¿Cómo se llama la primera playa donde se bañó?",
+      "QUESTION_17": "¿Cuál es el primer álbum que compró?",
+      "QUESTION_18": "¿Cuál es el nombre de su equipo deportivo preferido?",
+      "QUESTION_19": "¿Cuál fue el oficio de su abuelo?",
+      "RECOVER_ID": "Recuperar sus credenciales",
+      "REVOCATION_WITH_FILE": "Revocar una identidad a partir de un fichero",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "Si ha perdido de forma permanente las credenciales de su cuenta miembro (o la seguridad de la cuenta se ve comprometida), puede usar <b>el archivo de revocación de la cuenta</b> para forzar la salida de la Red de Confianza.",
+      "REVOCATION_WITH_FILE_HELP": "Para <b>revocar permanentemente</b> una cuenta miembro, arrastre el archivo de revocación en el cuadro siguiente o haga clic en el cuadro para seleccionar un archivo.",
+      "REVOCATION_FILENAME": "revocacion-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "REVOCATION_WALLET": "Revocar esta identidad",
+      "SAVE_ID": "Guardar mis credenciales",
+      "STRONG_LEVEL": "Alto <span class=\"hidden-xs \">(6 preguntas min.)</span>",
+      "TITLE": "Cuenta y seguridad",
+      "RECOVER_ID_HELP": "Si dispone de un <b>archivo de recuperación de sus credenciales</b>, las puede reobtener respondiendo correctamente a las preguntas personales elegidas en su momento.",
+      "REVOCATION_WALLET_HELP": "Pedir la revocación de vuestra identidad comporta la <b>salida de la red de confianza</b> (definitiva para el seudónimo y la llave pública asociada). La cuenta no producirá ya más el Dividendo Universal.<br/>Podrá seguir usándola como monedero simple.",
+      "SAVE_ID_HELP": "Creación de un archivo de recuperación, para <b>reobtener su contraseña</b> (y frase secreta) en caso de olvido. El archivo se <b>cifra</b> con ayuda de las preguntas personales elegidas."
+    },
+    "FILE_NAME": "{{currency}}_HistorialDeCuenta_{{pubkey|formatPubkey}}_{{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Fecha",
+      "AMOUNT": "Cantidad",
+      "COMMENT": "Comentario"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Transferencia",
+    "SUB_TITLE": "Hacer una transferencia",
+    "FROM": "De",
+    "TO": "A",
+    "AMOUNT": "Importe",
+    "AMOUNT_HELP": "Importe",
+    "COMMENT": "Comentario",
+    "COMMENT_HELP": "Comentario",
+    "BTN_SEND": "Enviar",
+    "BTN_ADD_COMMENT": "Añadir un comentario",
+    "REST": "Resto de cuenta",
+    "REST_TO": "a",
+    "WARN_COMMENT_IS_PUBLIC": "Tenga en cuenta que los <b>comentarios son públicos</b> (sin encriptar).",
+    "MODAL": {
+      "TITLE": "Transferencia"
+    }
+  },
+  "ERROR": {
+    "ADD_SECONDARY_WALLET_FAILED": "Error añadiendo el monedero secundario.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Monedero ya existe en la lista.",
+    "COULD_NOT_ADD_MAIN_WALLET": "Este monedero <b>corresponde a la cuenta principal</b> con la que se conecta.<br/>Imposible añadirlo como monedero secundario.",
+    "ISSUE_524_TX_FAILED": "Error en la transferencia.<br/><br/>Un mensaje ha sido enviado a los/as desarrolladores/as para facilitar la resolución del problema. <b>Gracias por su ayuda</b>.",
+    "LOAD_WALLET_LIST_FAILED": "Error cargando los monederos secundarios.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Usted debe <b>ser miembro (o haber sido miembro)</b> para poder efectuar esta acción.",
+    "RESTORE_WALLET_LIST_FAILED": "Error en la restauración de los monederos secundarios.",
+    "SAVE_WALLET_LIST_FAILED": "Error al guardar los monederos secundarios.",
+    "UNKNOWN_WALLET_ID": "Monedero secundario desconocido.",
+    "UPDATE_WALLET_LIST_FAILED": "Error en la actualización de los monederos secundarios.",
+    "UNKNOWN_URI_FORMAT": "Formato URI desconocido",
+    "PUBKEY_INVALID_CHECKSUM": "Llave pública no válida (suma de comprobación incorrecta).",
+    "POPUP_TITLE": "Error",
+    "UNKNOWN_ERROR": "Error desconocido",
+    "CRYPTO_UNKNOWN_ERROR": "Su navegador parece incompatible con las funcionalidades de cryptografía.",
+    "DOWNLOAD_KEYFILE_FAILED": "Error al generar el archivo de llaves.",
+    "EQUALS_TO_PSEUDO": "Debe ser diferente del seudónimo.",
+    "EQUALS_TO_SALT": "Debe ser diferente de la frase secreta.",
+    "FIELD_REQUIRED": "Campo obligatorio.",
+    "FIELD_TOO_SHORT": "Valor demasiado corta.",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Valor demasiado corta ({{minLength}} carácteres mín)",
+    "FIELD_TOO_LONG": "Valor demasiado largo",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Valor demasiado largo, ({{maxLength}} carácteres máx)",
+    "FIELD_MIN": "Valor mínimo: {{min}}",
+    "FIELD_MAX": "Valor máximo: {{max}}",
+    "FIELD_ACCENT": "Caracteres acentuados y comas no autorizados",
+    "FIELD_NOT_NUMBER": "Valor numérico esperado",
+    "FIELD_NOT_INT": "Valor entero esperado",
+    "FIELD_NOT_EMAIL": "Correo electrónico no válido",
+    "PASSWORD_NOT_CONFIRMED": "No coincide con la contraseña anterior.",
+    "SALT_NOT_CONFIRMED": "No corresponde a la frase secreta anterior.",
+    "SEND_IDENTITY_FAILED": "Error de la inscripción.",
+    "SEND_CERTIFICATION_FAILED": "Error de la certificación.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "No se puede certificar, porque su cuenta no <b>es miembro</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "No se puede certificar, porque su cuenta todavía no es miembro.<br/><br/>Todavía faltan certificaciones para serlo.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Esta cuenta no se pudo certificar. No se ha solicitado la membresía, o se necesita renovarla.",
+    "LOGIN_FAILED": "Error durante la autentificación.",
+    "LOAD_IDENTITY_FAILED": "Error de carga de la identidad.",
+    "LOAD_REQUIREMENTS_FAILED": "Error de carga de las condiciones de la identidad.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Error en el intento de entrada en la comunidad.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Error en la interrupción de adhesión.",
+    "REFRESH_WALLET_DATA": "Error en la actualización del monedero.",
+    "GET_CURRENCY_PARAMETER": "Error en la recuperación de las reglas de moneda.",
+    "GET_CURRENCY_FAILED": "Carga de la moneda imposible. Por favor, intente más tarde.",
+    "SEND_TX_FAILED": "Error en la transferencia.",
+    "ALL_SOURCES_USED": "Por favor, espera el cálculo del bloque siguiente (Todas sus fuentes de moneda fueron utilizada).",
+    "NOT_ENOUGH_SOURCES": "No lo bastante cambio para mandar este importe en una sola transacción.<br/>Importe máximo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Error en la creación de la cuenta miembro.",
+    "RESTORE_WALLET_DATA_ERROR": "Error en la recarga de los ajustes desde el almacenamiento local",
+    "LOAD_WALLET_DATA_ERROR": "Error en la carga de los datos del monedero.",
+    "COPY_CLIPBOARD_FAILED": "Copia de la valor imposible.",
+    "TAKE_PICTURE_FAILED": "Error en la recuperación de la foto.",
+    "SCAN_FAILED": "Error en el escán del Codigo QR",
+    "SCAN_UNKNOWN_FORMAT": "Codigo no reconocido.",
+    "WOT_LOOKUP_FAILED": "Error en la búsqueda",
+    "LOAD_PEER_DATA_FAILED": "Lectura del nodo Duniter imposible. Por favor, intente más tarde.",
+    "NEED_LOGIN_FIRST": "Por favor, conéctese en primer lugar.",
+    "AMOUNT_REQUIRED": "El importe es obligatorio.",
+    "AMOUNT_NEGATIVE": "Importe negativo no autorizado.",
+    "NOT_ENOUGH_CREDIT": "Crédito insuficiente.",
+    "INVALID_NODE_SUMMARY": "Nodo ilocalizable o dirección inválida.",
+    "INVALID_USER_ID": "El seudónimo no debe contener ni espacios ni caracteres especiales o acentuado.",
+    "INVALID_COMMENT": "El campo 'referencia’ no debe contener carácteres acentuados.",
+    "INVALID_PUBKEY": "La llave pública no tiene el formato esperado.",
+    "INVALID_PUBKEY_CHECKSUM": "Suma de comprobación inválida.",
+    "IDENTITY_REVOKED": "Esta identidad <b>fue revocada</b>. No puede volver a convertirla en miembro.",
+    "IDENTITY_REVOKED_WITH_TIME": "Esta identidad <b>fue revocada {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). No puede volver a convertirla en miembro.",
+    "IDENTITY_PENDING_REVOCATION": "La <b>revocación de esta identidad</b> fue solicitado y esta en espera de tratamiento. Por lo que, la certificación es desactivada.",
+    "IDENTITY_INVALID_BLOCK_HASH": "Esta solicitud de adhesión no es valida (porque denomina un bloque los nodos de la red han anulado): este individuo/a debe renovelar su solicitud de adhesión <b>antes que</b> estar certificada.",
+    "IDENTITY_EXPIRED": "La publicación de esta identidad ha caducada: este individuo/a debe realizar una nueva solicitud de adhesión <b>antes que</b> estar certificada.",
+    "IDENTITY_SANDBOX_FULL": "EL nodo Duniter utilizado por Cesium ya no puede recibir más nuevas identidades, porque la fila de espera es llena.<br/><br/>Por favor, intenta ulteriormente o cambia de nodo (vía el menú <b>Ajustes</b>).",
+    "IDENTITY_NOT_FOUND": "Identidad no encontrada",
+    "IDENTITY_TX_FAILED": "Error cargando las transacciones de la identidad",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Adhesión no validada.",
+    "WALLET_INVALID_BLOCK_HASH": "Su solicitud de adhesión ya no está validada (porque denomina un bloque los nodos de la red han anulado).<br/>Debe <a ng-click=\"doQuickFix('fixMembership')\">mandar una nueva solicitud</a> para resolver este problema.",
+    "WALLET_IDENTITY_EXPIRED": "La publicación de <b>su identidad ha caducada</b>.<br/>Debe <a ng-click=\"doQuickFix('fixIdentity')\">publicar une outra vez su identidad</a> para resolver este problema.",
+    "WALLET_REVOKED": "Su identidad fue <b>revocada</b>: ni su seudónimo ni su llave pública podrán estar utilizados en el futuro por una cuenta miembro.",
+    "WALLET_HAS_NO_SELF": "Su identidad debe en primer lugar haber estado publicado, y no estar caducada.",
+    "AUTH_REQUIRED": "Autenticación requerida.",
+    "AUTH_INVALID_PUBKEY": "La llave pública no se corresponde con la cuenta conectada",
+    "AUTH_INVALID_SCRYPT": "De usuario o contraseña no válidos.",
+    "AUTH_INVALID_FILE": "archivo de llave no válido.",
+    "AUTH_FILE_ERROR": "No se pudo abrir el archivo de llave",
+    "IDENTITY_ALREADY_CERTIFY": "Ha <b>ya certificado</b> esta identidad.<br/><br/>Esta certificación todavía es valida (expiration {{expiresIn|formatDurationTo}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "Ha <b>ya certificado</b> esta identidad.<br/><br/>Esta certificación está en espera de tratamiento (fecha límite de tratamiento {{expiresIn|formatDurationTo}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Certificación imposible",
+    "LOAD_NEWCOMERS_FAILED": "No se pudo cargar las nuevas membresías.",
+    "LOAD_PENDING_FAILED": "No se pudo cargar las inscripciones pendientes.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Debe <b>ser miembro</b> para poder realizar esta acción.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Debe haber <b>publicado su identidad</b> para poder realizar esta acción.",
+    "GET_BLOCK_FAILED": "Error en la recuperación del bloque",
+    "INVALID_BLOCK_HASH": "Bloque no encontrado (hash diferente)",
+    "DOWNLOAD_REVOCATION_FAILED": "Debe seleccionar un fichero de texto",
+    "REVOCATION_FAILED": "Error en la revocación.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Frase secreta o contraseña incorrectos",
+    "RECOVER_ID_FAILED": "Error en la recuperación de las credenciales",
+    "LOAD_FILE_FAILED": "Error en la carga del archivo",
+    "NOT_VALID_REVOCATION_FILE": "Archivo de revocación no válido (formato de archivo erróneo)",
+    "NOT_VALID_SAVE_ID_FILE": "Archivo no válido (formato de archivo erróneo)",
+    "NOT_VALID_KEY_FILE": "Archivo no válido (formato de archivo erróneo)",
+    "EXISTING_ACCOUNT": "Sus credenciales corresponden a una cuenta existente, la <a ng-click=\"showHelpModal('pubkey')\">llave pública</a> es:",
+    "EXISTING_ACCOUNT_REQUEST": "Por favor, cambie sus credenciales para que coincida con una cuenta sin usar.",
+    "GET_LICENSE_FILE_FAILED": "Error al obtener el archivo de licencia",
+    "CHECK_NETWORK_CONNECTION": "No se puede conectar a ningún nodo.<br/><br/><b>Compruebe la conexión a Internet</b>.",
+    "INVALID_FILE_FORMAT": "Formato de archivo inválido.",
+    "SAME_TX_RECIPIENT": "El destinatario debe ser diferente del emisor."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Información",
+    "CERTIFICATION_DONE": "Certificación enviada",
+    "NOT_ENOUGH_CREDIT": "Crédito insuficiente",
+    "TRANSFER_SENT": "Transferencia enviada",
+    "COPY_TO_CLIPBOARD_DONE": "Copia realizada",
+    "MEMBERSHIP_OUT_SENT": "Anulación enviada",
+    "NOT_NEED_MEMBERSHIP": "Ya es miembro.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "Esta identidad pronto va a necesitar certificaciones (al menos {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "Esta identidad no ha enviado una solicitud de membresía para convertirse en miembro.",
+    "HAS_ALTERNATIVE_IDENTITIES": "Hay <b>identidades múltiples</b> adjuntas a esta llave pública. <b>Antes de cualquier certificación</b>, <a ng-click=\"doQuickFix('showSelectIdentities')\">verifique otras identidades</a> para elegir la correcta o comuníquese con el propietario de la cuenta.",
+    "REVOCATION_SENT": "Revocación enviada",
+    "REVOCATION_SENT_WAITING_PROCESS": "La <b>revocación de esta identidad</b> fue solicitada y está en espera de ser procesada.",
+    "FEATURES_NOT_IMPLEMENTED": "Esta funcionalidad todavía está en proceso de desarrollo.<br/><br/>¿Por qué no <b>contribuir a Cesium</b>, para obtenerla más rápido? ;)",
+    "EMPTY_TX_HISTORY": "Ninguna operación a exportar"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>¿Desea</b> continuar?",
+    "EXIT_APP": "¿ Cerrar la aplicación ?",
+    "FULLSCREEN": "¿ Mostrar la aplicación en pantalla completa ?",
+    "ISSUE_524_SEND_LOG": "La transacción ha sido rechazada a causa de una anomalía conocida (ticket #524) pero todavía <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envío de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>.",
+    "POPUP_TITLE": "<b>Confirmación</b>",
+    "POPUP_WARNING_TITLE": "<b>Advertencia</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Advertencia de seguridad</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certificar {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">NO CERTIFICAR</b> una cuenta si piensa que:<br/><br/><ul><li>1.) no corresponde a un ser humano <b>físico y vivo</b>.<li>2.) su propietario/a <b>posee otra cuenta</b> ya certificada.<li>3.) su propietaria/o incumple (voluntariamente o no) la regla 1 o 2 (por ejemplo certificando cuentas fantasmas o duplicadas).</ul><br/><b>¿Desea</b> todavía certificar esta identidad?",
+    "TRANSFER": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li></ul><br/><b>Desea realizar esta transferencia?</b>",
+    "TRANSFER_ALL": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li><br/><li> - Resto: <b>{{restAmount}} {{unit}}</b> para <b>{{restTo}}</b></li></ul><br/><b>¿Desea realizar esta transferencia?</b>",
+    "MEMBERSHIP_OUT": "Esta operación es <b>irreversible</b>.<br/></br/>¿Desea <b>anular su cuenta miembro</b>?",
+    "MEMBERSHIP_OUT_2": "¡Esta operación es <b>irreversible</b>!<br/><br/>¿Desea <b>anular su candidatura</b> como miembro?",
+    "LOGIN_UNUSED_WALLET_TITLE": "¿Error de introducción de datos?",
+    "LOGIN_UNUSED_WALLET": "Las credenciales introducidas corresponden a una cuenta que parece <b>inactiva</b>.<br/></br/><b>¿Quiere sin embargo continuar con esta cuenta?</b>",
+    "FIX_IDENTITY": "El seudónimo <b>{{uid}}</b> va a ser publicado de nuevo, en reemplazo del antiguo que caducó.<br/></br/><b>¿Desea</b> continuar?",
+    "FIX_MEMBERSHIP": "Su solicitud de adhesión como miembro va a ser enviada de nuevo.<br/></br/><b>¿Desea</b> continuar?",
+    "MEMBERSHIP": "Se enviará su solicitud de membresía como miembro.<br/></br/><b>¿Desea</b> continuar?",
+    "RENEW_MEMBERSHIP": "Su adhesión como miembro va a estar renovada.<br/></br/><b>¿Desea</b> continuar?",
+    "REVOKE_IDENTITY": "Va a <b>revocar definitivamente esta identidad</b>.<br/><br/>La llave pública y el seudónimo asociados <b>jamás podrán ser utilizados</b> (para una cuenta miembro). <br/><br/><b>¿Desea</b> revocar definitivamente esta cuenta?",
+    "REVOKE_IDENTITY_2": "¡Esta operación es <b>irreversible</b>!<br/><br/>¿Desea <b>revocar definitivamente</b> esta cuenta?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Su membresía no necesita ser renovada actualmente (caducará en {{membershipExpiresIn|formatDuration}}).<br/></br/><b>¿Confirma</b> querer renovar su membresía?",
+    "SAVE_BEFORE_LEAVE": "¿Desea <b>guardar sus cambios</b> antes de abandonar la página?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Cambios no registrados",
+    "LOGOUT": "¿Desea desconectarse?",
+    "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> inalcanzable o dirección inválida.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{new}}</b>?"
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Revocación del archivo</b>",
+    "POPUP_REVOKE_MESSAGE": "Para proteger su cuenta, descargue el <b>documento de revocación de cuenta</b>. Le permitirá cancelar su cuenta (en caso de robo, cambio de identificadores, cuenta creada incorrectamente, etc.).<br/><br/><b>Por favor, almacénelo en un lugar seguro.</b>"
+  },
+  "HELP": {
+    "TITLE": "Ayuda en línea",
+    "JOIN": {
+      "SECTION": "Inscripción",
+      "SALT": "La frase secreta es muy importante. Sirve para mezclar(<span class=\"text-italic\">hash</span>) la contraseña, antes de calcular la <span class=\"text-italic\">llave pública</span> (el número de cuenta) y la <span class=\"text-italic\">llave privada</span> para acceder a esta.<br/><b>Por favor, memorícelo muy bien</b> porque no existe ninguna forma de recuperarlo en caso de pérdida.<br/>No puede ser modificado. Deberá crear una nueva cuenta si lo pierde o se olvida.<br/><br/>Una buena frase secreta debe ser suficientemente larga (al menos 8 carácteres) y lo más original posible.",
+      "PASSWORD": "La contraseña es muy importante. Junto a la frase secreta, sirve para calcular la llave pública (el número de cuenta), y la llave privada para acceder a ella.<br/><b>Por favor, memorícela muy bien</b> porque no existe ninguna forma de recuperarla en caso de pérdida (excepto si se tuviese un fichero de respaldo o <span class=\"text-italic\">backup</span>.).<br/>No puede ser modificada. Deberá crear una nueva cuenta si la pierde o se olvida.<br/><br/>Una buena contraseña contiene al menos 8 carácteres, con al menos una mayúscula y un dígito.",
+      "PSEUDO": "El seudónimo se utiliza solamente en caso de inscripción como <span class=\"text-italic\">miembro</span>. Siempre está asociado a un monedero (vía su <span class=\"text-italic\">llave pública</span>).<br/>Este se publica en la red para que los demás usuarios puedan identificar, certificar o enviar dinero a la cuenta.<br/>Un seudónimo debe ser único para cada miembro (actuales y antiguos)."
+    },
+    "LOGIN": {
+      "SECTION": "Autenticación",
+      "PUBKEY": "Llave pública",
+      "PUBKEY_DEF": "La llave pública del archivo de llaves es generada de las credenciales introducidas (cualquiera que sean), sin estar obligatoriamente vinculadas o contrastadas con ninguna cuenta ya usada. <br/><b>Asegúrese por lo tanto de que la llave pública es la misma con la que se creó originalmente su cuenta</b>. De lo contrario, se autogenerará una cuenta vacía que probablemente nunca ha sido usada, ya que el riesgo de coincidir con las credenciales de otra cuenta ajena es muy pequeño.<br/><a href=\"https://es.wikipedia.org/wiki/Criptograf%C3%ADa_de_curva_el%C3%ADptica\" target=\"_ system\">Conozca más sobre criptografía</a> con llaves públicas.",
+      "METHOD": "Métodos de autenticación",
+      "METHOD_DEF": "Diversas opciones están disponibles para conectar a las cuentas: <br/> - La conexión <b>con aleatoriedad (estándar o avanzada)</b> mezcla su contraseña con su frase secreta, para limitar las posibilidades de ataque<br/> - La conexión <b>usando llave pública</b> le permite entrar sin credenciales, las cuales solo se le pedirán cuando alguna operación lo necesite.<br/> - La conexión <b>usando archivo de llaves</b> leerá las llave pública y privada de la cuenta desde un archivo sin necesitar sus credenciales. Varios formatos son posibles."
+    },
+    "GLOSSARY": {
+      "DISTANCE_RULE": "Regla de distancia",
+      "DISTANCE_RULE_DEF": "La regle de distancia de la Red de Confianza define <b>una distancia máxima a respetar</b> entre una candidatura y número mínimo miembros referentes (aquellos más conectados). Esta distancia es calculada utilizando los enlaces de certificación.",
+      "WOT": "Red de Confianza (RdC)",
+      "WOT_DEF": "La Red de Confianza se compone del conjunto de miembros de la moneda, y de los enlaces de certificaciones que los conectan.",
+      "SECTION": "Glosario",
+      "PUBKEY_DEF": "Una llave pública identifica un monedero, que puede estar asociado a un miembro o ser un monedero anónimo. En Cesium se calcula a partir de la frase secreta y la contraseña.",
+      "MEMBER": "Miembro",
+      "MEMBER_DEF": "Cada miembro es una ser humano físico y vivo, deseosa de participar libremente en la comunidad monetaria. Percibe un dividendo universal, de acuerdo a un periodo e importe definido en las <span class=\"text-italic\">reglas de la moneda</span>",
+      "CURRENCY_RULES": "Reglas de la moneda",
+      "CURRENCY_RULES_DEF": "Las reglas de la moneda se han definido una vez y para siempre. Establecen el funcionamiento de la moneda: el cálculo del dividendo universal, la cantidad de certificaciones necesarias para ser miembro, la cantidad máxima de certificaciones que cada miembro puede emitir, etc. <a href=\"#/app/currency\">Ver las reglas actuales</a>.<br/> Sus parámetros no pueden alterarse gracias a una <span class=\"text-italic\">Cadena de Bloques</span> que soporta, implementa y verifica la buena aplicación de estas reglas.",
+      "BLOCKCHAIN": "Cadena de bloques (<span class=\"text-italic\">Blockchain</span>)",
+      "BLOCKCHAIN_DEF": "La cadena de bloques es un sistema descentralizado, que en el caso de Duniter, sirve para mantener e implementar las <span class=\"text-italic\">reglas de la moneda</span>.<br/><a href=\"http://duniter.org\" target=\"_system\">Más información</a> acerca de Duniter y el funcionamiento de su cadena de bloques.",
+      "UNIVERSAL_DIVIDEND_DEF": "El Dividendo Universal (DU) es la cantidad de moneda co-creada por cada miembro, dependiendo del periodo y del cálculo definidos en las <span class=\"text-italic\">reglas de la moneda</span>.<br/>En cada periodo, los miembros reciben en sus cuentas la misma cantidad de moneda.<br/><br/>El DU crece regularmente, para ser justo entre cada miembro (actualmente y en el futuro), y calculado en función de la esperanza de vida media, como se demuestra en la <span class=\"text-italic\">Teoría Relativa de la Moneda</span> (TRM, de Stéphane Laborde).<br/><a href=\"http://trm.creationmonetaire.info\">Más información</a> sobre la TRM y las monedas libres."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "El menú <b>{{'MENU.CURRENCY'|translate}}</b> permite consultar las <b>reglas de la moneda</b> y su estado.",
+      "CURRENCY_WOT": "El <b>número de miembros</b> muestra el peso de la comunidad y permite <b>seguir su evolución</b>.",
+      "CURRENCY_MASS": "Siga aquí la <b>cantidad total de moneda</b> existente y su <b>distribución media</b> por miembro.<br/><br/>Esto permite juzgar la <b>relevancia de un importe</b>, en relación con lo que <b>poseen los demás</b> en sus cuentas (de media).",
+      "CURRENCY_UNIT_RELATIVE": "La unidad utilizada (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa que los importes en {{currency|capitalize}} han sido divididos entre el valor del <b>Dividendo Universal</b> (DU).<br/><br/><small> Esta unidad relativa es <b>pertinente</b>, porque permanece estable, independiente de la cantidad de moneda que aumenta constantemente.</small>",
+      "CURRENCY_CHANGE_UNIT": "Este botón permite <b>cambiar la unidad</b>, para visualizar los importes <b>directamente en {{currency|capitalize}}</b> (en lugar de &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "Este botón permite <b>cambiar la unidad</b>, para visualizar los importes en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, es decir, relativo al Dividendo Universal (el monto co-producido por cada miembro).",
+      "CURRENCY_RULES": "Las <b>reglas</b> de la moneda fijan su funcionamiento <b>exacto y previsible</b>.<br/><br/>Es el propio ADN de la moneda, que hace que su código monetario sea <b>legible y transparente</b>.",
+      "MENU_BTN_NETWORK": "El menú <b>{{'MENU.NETWORK'|translate}}</b> permite consultar el estado de la red.",
+      "NETWORK_BLOCKCHAIN": "Todas las transacciones de la moneda están registradas dentro de un gran libro de contabilidad <b>público e infalsificable</b>, conocido como la <b>cadena de bloques</b> (<em>BlockChain</em> en inglés).",
+      "NETWORK_PEERS": "Los <b>nodos</b> visibles aquí corresponden a los <b>dispositivos de miembros que actualizan y validan</b> la cadena de bloques.<br/><br/>Cuanto más nodos haya conectados, la moneda tendrá una gestión más <b>descentralizada</b> y digna de confianza.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "Este <b>número</b> (en verde) indica el <b>último bloque validado</b> por este nodo (última página escrita en la cadena de bloques).<br/><br/>El color verde indica que este bloque ha sido también validado por <b>la mayoría del resto de nodos</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Cada miembro</b>, equipado de un dispositivo conectado a Internet, <b>puede contribuir añadiendo un nodo</b>.  Necesita <b>instalar el programa Duniter</b> (libre y gratuito). <a href=\"{{installDocUrl}}\" target=\"_system\">Ver manual de uso &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> permite acceder a la gestión y al historial de su cuenta.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Consulte aquí el estado de su cuenta y la información sobre sus certificaciones.",
+      "WALLET_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus certificaciones (recibidas y emitidas).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus <b>certificaciones recibidas</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Haga clic aquí para consultar el detalle de sus <b>certificaciones emitidas</b>.",
+      "WALLET_BALANCE": "El <b>saldo</b> de su cuenta se visualiza aquí.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>La unidad utilizada (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa que el importe en {{currency|capitalize}} fue dividido entre el <b>Dividendo Universal</b> (DU) co-producido por cada miembro.<br/><br/>Actualmente un DU vale {{currentUD|formatInteger}} {{currency|capitalize}}s.",
+      "WALLET_BALANCE_CHANGE_UNIT": "Podrá <b>cambiar la unidad</b> de visualización de los importes en los <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Por ejemplo, para visualizar los importes <b>directamente en {{currency|capitalize}}</b>, en lugar de unidad relativa.",
+      "WALLET_PUBKEY": "Esta es la llave pública de su cuenta. Puede comunicarla a un tercero para que pueda identificar su cuenta de forma simple.",
+      "WALLET_SEND": "Realizar un pago en algunos clics",
+      "WALLET_SEND_NO_MONEY": "Realizar un pago en algunos clics.<br/>(Su saldo ya no lo permite)",
+      "WALLET_OPTIONS": "Este botón permite acceder a las <b>acciones de adhesión</b> y de seguridad.<br/><br/>¡No olvide echar un vistazo!",
+      "WALLET_RECEIVED_CERTS": "Se exhibirá aquí la lista de individuo/as que le han certificado.",
+      "WALLET_CERTIFY": "El botón <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permite seleccionar una identidad y certificarla.<br/><br/>Solo quienes son <b>miembros</b> pueden certificar a otros seres humanos.",
+      "WALLET_CERT_STOCK": "Su stock de certificaciones (emitidas) es limitado a <b>{{sigStock}} certificaciones</b>.<br/><br/>Este stock se renueva con el tiempo, a medida que las certificaciones caducan.",
+      "MENU_BTN_TX": "El menú <b>{{'MENU.TRANSACTIONS'|translate}}</b> permite consultar su saldo, el historial de transacciones y realizar nuevos pagos.",
+      "MENU_BTN_WALLETS": "El menú <b>{{'MENU.WALLETS'|translate}}</b> permite añadir monederos complementarios que usted maneja.",
+      "MENU_BTN_WOT": "El menú <b>{{'MENU.WOT'|translate}}</b> permite buscar <b>usuarios</b> de la moneda (miembro o no).",
+      "WOT_SEARCH_TEXT_XS": "Para buscar en el directorio, escriba las <b>primeras letras de un seudónimo</b> (o de una llave pública).<br/><br/>La búsqueda se iniciará automáticamente.",
+      "WOT_SEARCH_TEXT": "Para buscar en el directorio, escriba las <b>primeras letras de un seudónimo</b> (o de una llave pública). <br/><br/>Luego, pulse en la tecla <b>Intro</b> para iniciar la búsqueda.",
+      "WOT_SEARCH_RESULT": "Visualice la ficha detallada <b>haciendo clic</b> sobre una fila.",
+      "WOT_VIEW_CERTIFICATIONS": "La opción <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> muestra qué miembros han validado esta identidad.<br/><br/>Estas certificaciones atestiguan que la cuenta pertenece a <b>un ser humano vivo</b> y que no posee <b>ninguna otra cuenta miembro</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "Necesita al menos <b>{{sigQty}} certificaciones</b> para ser miembro y recibir el <b>Dividendo Universal</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Un clic aquí permite abrir <b>la lista de todas las certificaciones</b> de la identidad (recibidas y emitidas).",
+      "WOT_VIEW_CERTIFY": "El botón <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permite añadir su certificación a esta identidad.",
+      "CERTIFY_RULES": "<b>Atención:</b> Certifique solamente <b>seres humanos físicos vivos</b>, que no posean ya ninguna otra cuenta miembro.<br/><br/>¡La seguridad de la red de la moneda depende del cuidado de cada individuo/a!",
+      "MENU_BTN_SETTINGS": "En <b>{{'MENU.SETTINGS'|translate}}</b> podrá configurar la aplicación.",
+      "HEADER_BAR_BTN_PROFILE": "Haga clic aquí para acceder a su <b>perfil</b>",
+      "SETTINGS_CHANGE_UNIT": "Podrá <b>cambiar la unidad de visualización</b> de los importes haciendo clic aquí.<br/><br/>- Desactive la opción para mostrar los importes en {{currency|capitalize}}.<br/>- Actívela para importes relativos al {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (las cantidades de los importes se mostrarán <b>divididos</b> entre el Dividendo Universal actual).",
+      "END_LOGIN": "¡La visita guiada ha <b>terminado</b>!<br/><br/>¡Buena suerte en este nuevo mundo de la <b>economía libre</b> !",
+      "END_NOT_LOGIN": "¡La visita guiada ha <b>terminado</b>!<br/><br/>Si quiere utilizar la moneda {{currency|capitalize}}, tiene que hacer un clic en <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> más abajo."
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/fr-2.0.0-alpha42.json b/ios/App/public/assets/i18n/fr-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..47d6ba2030a10f06161f6ce8f877faf26bb1e4a5
--- /dev/null
+++ b/ios/App/public/assets/i18n/fr-2.0.0-alpha42.json
@@ -0,0 +1,987 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium²",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "date : {{build}}",
+    "PUBKEY": "Clé publique",
+    "ADDRESS": "Addresse SS58",
+    "MEMBER": "Membre",
+    "BLOCK": "Bloc",
+    "BTN_OK": "OK",
+    "BTN_YES": "Oui",
+    "BTN_NO": "Non",
+    "BTN_SEND": "Envoyer",
+    "BTN_SEND_MONEY": "Faire un virement",
+    "BTN_SEND_MONEY_SHORT": "Virement",
+    "BTN_SAVE": "Enregistrer",
+    "BTN_YES_SAVE": "Oui, Enregistrer",
+    "BTN_YES_CONTINUE": "Oui, Continuer",
+    "BTN_SHOW": "Voir",
+    "BTN_SHOW_PUBKEY": "Afficher la clé publique",
+    "BTN_RELATIVE_UNIT": "Afficher les montants en DU ?",
+    "BTN_BACK": "Retour",
+    "BTN_NEXT": "Suivant",
+    "BTN_IMPORT": "Importer",
+    "BTN_CANCEL": "Annuler",
+    "BTN_CLOSE": "Fermer",
+    "BTN_LATER": "Plus tard",
+    "BTN_LOGIN": "Se connecter",
+    "BTN_LOGOUT": "Déconnexion",
+    "BTN_ADD_ACCOUNT": "Nouveau compte",
+    "BTN_SHARE": "Partager",
+    "BTN_EDIT": "Modifier",
+    "BTN_DELETE": "Supprimer",
+    "BTN_ADD": "Ajouter",
+    "BTN_SEARCH": "Rechercher",
+    "BTN_REFRESH": "Actualiser",
+    "BTN_RETRY": "Recommencer",
+    "BTN_START": "Commencer",
+    "BTN_CONTINUE": "Continuer",
+    "BTN_CREATE": "Créer",
+    "BTN_CONFIRM": "Confirmer",
+    "BTN_UNDERSTOOD": "J'ai compris",
+    "BTN_OPTIONS": "Options",
+    "BTN_HELP_TOUR": "Visite guidée",
+    "BTN_HELP_TOUR_SCREEN": "Découvrir cet écran",
+    "BTN_DOWNLOAD": "Télécharger",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Télécharger le relevé du compte",
+    "BTN_MODIFY": "Modifier",
+    "CHOOSE_FILE": "Déposez votre fichier <br/>ou cliquez pour le sélectionner",
+    "DAYS": "jours",
+    "NO_ACCOUNT_QUESTION": "Pas encore de compte ? Créez-en un gratuitement !",
+    "SEARCH_NO_RESULT": "Aucun résultat",
+    "LOADING": "Veuillez patienter...",
+    "LOADING_WAIT": "Veuillez patienter...<br/><small>(Cesium interroge le nœud Duniter)</small>",
+    "SEARCHING": "Recherche en cours...",
+    "FROM": "De",
+    "TO": "À",
+    "COPY": "Copier",
+    "LANGUAGE": "Langue",
+    "UNIVERSAL_DIVIDEND": "Dividende universel",
+    "UD": "DU",
+    "DATE_PATTERN": "DD/MM/YY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(vide)",
+    "UID": "Pseudonyme",
+    "ENABLE": "Activé",
+    "DISABLE": "Désactivé",
+    "RESULTS_LIST": "Résultats",
+    "RESULTS_COUNT": "{{count}} résultats",
+    "EXECUTION_TIME": "exécuté en {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Afficher les valeurs en clair ?",
+    "POPOVER_ACTIONS_TITLE": "Options",
+    "POPOVER_FILTER_TITLE": "Filtres",
+    "SHOW_MORE": "Afficher plus",
+    "SHOW_MORE_COUNT": "(limite actuelle à {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Partager",
+      "SHARE_ON_TWITTER": "Partager sur Twitter",
+      "SHARE_ON_FACEBOOK": "Partager sur Facebook",
+      "SHARE_ON_DIASPORA": "Partager sur Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Partager sur Google+"
+    },
+    "FILE": {
+      "DATE": "Date :",
+      "TYPE": "Type :",
+      "SIZE": "Taille :",
+      "VALIDATING": "Validation en cours..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Choisir la source :",
+    "BTN_PICTURE_GALLERY": "Galerie",
+    "BTN_PICTURE_CAMERA": "<b>Caméra</b>"
+  },
+  "MENU": {
+    "HOME": "Accueil",
+    "WOT": "Annuaire",
+    "CURRENCY": "Monnaie",
+    "ACCOUNT": "Mon compte",
+    "WALLETS": "Mes portefeuilles",
+    "SETTINGS": "Paramètres",
+    "NETWORK": "Réseau",
+    "TRANSACTIONS": "Mes opérations"
+  },
+  "ABOUT": {
+    "TITLE": "À propos",
+    "LICENSE": "Application <b>libre</b> (Licence GNU AGPLv3).",
+    "LATEST_RELEASE": "Il existe une <b>version plus récente</b> de {{'COMMON.APP_NAME'|translate}} (<b>v{{version}}</b>)",
+    "PLEASE_UPDATE": "Veuillez mettre à jour {{'COMMON.APP_NAME'|translate}} (dernière version : <b>v{{version}}</b>)",
+    "CODE": "Code source :",
+    "OFFICIAL_WEB_SITE": "Site web officiel :",
+    "DEVELOPERS": "Développé par :",
+    "FORUM": "Forum :",
+    "PLEASE_REPORT_ISSUE": "N'hésitez pas à nous remonter les anomalies rencontrées",
+    "REPORT_ISSUE": "Remonter un problème",
+    "BTN_OPEN_DEV_WINDOW": "Ouvrir la fenêtre de debuggage"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Bienvenue dans l'application Cesium !",
+    "WELCOME_READONLY": "Bienvenue dans Cesium <span class='badge badge-balanced'>Monit</span> !",
+    "MESSAGE": "Recevez et envoyez de la monnaie libre {{currency}}",
+    "MESSAGE_READONLY": "Suivez l'état de la monnaie libre {{currency}} en temps réel.",
+    "BTN_CURRENCY": "Explorer la monnaie {{currency}}",
+    "BTN_ABOUT": "à propos",
+    "BTN_HELP": "Aide en ligne",
+    "BTN_NETWORK": "État du réseau",
+    "FREE_SOFTWARE": "Logiciel libre",
+    "FORK_ME": "Clonez-moi !",
+    "SHOW_LICENSE": "Voir la license de l'application",
+    "REPORT_ISSUE": "anomalie",
+    "NOT_YOUR_ACCOUNT_QUESTION": "Vous n'êtes pas propriétaire du compte <b class=\"ion-key\"> {{pubkey}}</b>&nbsp;?",
+    "BTN_CHANGE_ACCOUNT": "Déconnecter ce compte",
+    "CONNECTION_ERROR": "Nœud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connexion Internet, ou changer de nœud <a class=\"positive\" ng-click=\"doQuickFix('settings')\">dans les paramètres</a>.",
+    "SHOW_ALL_FEED": "Voir tout",
+    "READ_MORE": "Lire la suite",
+    "FEED_SOURCE": "Source"
+  },
+  "SETTINGS": {
+    "TITLE": "Paramètres",
+    "DISPLAY_DIVIDER": "Affichage",
+    "STORAGE_DIVIDER": "Stockage",
+    "NETWORK_SETTINGS": "Réseau",
+    "BTN_DARK_MODE": "Mode sombre/clair",
+    "PEER": "Nœud Duniter",
+    "PEER_SHORT": "Nœud Duniter",
+    "INDEXER": "Indexeur de données",
+    "POD": "Serveur de données",
+    "IPFS": "Passerelle IPFS",
+    "PEER_CHANGED_TEMPORARY": "Adresse utilisée temporairement",
+    "PERSIST_CACHE": "Conserver les données de navigation (expérimental)",
+    "PERSIST_CACHE_HELP": "Permet une navigation plus rapide, en conservant localement les données reçues, pour les utiliser d'une session à l'autre.",
+    "USE_LOCAL_STORAGE": "Activer le stockage local",
+    "USE_LOCAL_STORAGE_HELP": "Permet de sauvegarder vos paramètres",
+    "WALLETS_SETTINGS": "Mes portefeuilles",
+    "USE_WALLETS_ENCRYPTION": "Sécuriser la liste ?",
+    "USE_WALLETS_ENCRYPTION_HELP": "Permet de sécuriser la liste de vos portefeuilles (par chiffrement), en exigeant une authentification pour y accéder.",
+    "ENABLE_HELPTIP": "Activer les bulles d'aide contextuelles ?",
+    "DISABLE_HELPTIP": "Désactiver les bulles d'aide contextuelles",
+    "ENABLE_UI_EFFECTS": "Activer les effets visuels ?",
+    "ENABLE_UI_EFFECTS_HELP": "Transition entre les pages, animation des listes, etc.",
+    "HISTORY_SETTINGS": "Mes opérations",
+    "DISPLAY_UD_HISTORY": "Afficher les dividendes produits ?",
+    "TX_HISTORY_AUTO_REFRESH": "Rafraîchir automatiquement",
+    "TX_HISTORY_AUTO_REFRESH_HELP": "Rafraîchit le solde et les opérations automatiquement, à chaque nouveau bloc du réseau.",
+    "AUTHENTICATION_SETTINGS": "Authentification",
+    "KEEP_AUTH": "Désauthentification automatique",
+    "KEEP_AUTH_SHORT": "Désauthentification",
+    "KEEP_AUTH_HELP": "Définit le moment où l'authentification est nettoyée de la mémoire.",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Après chaque opération",
+      "SECONDS": "Après {{value}}s d'inactivité",
+      "MINUTE": "Après {{value}}min d'inactivité",
+      "MINUTES": "Après {{value}}min d'inactivité",
+      "HOUR": "Après {{value}}h d'inactivité",
+      "ALWAYS": "A la fin de la session"
+    },
+    "KEYRING_FILE": "Fichier de trousseau",
+    "KEYRING_FILE_HELP": "Permet de vous <b>connecter</b> automatiquement à chaque lancement<br/>et même de vous <b>authentifier</b> (seulement si \"Expiration de l'authentification\" est configurée \"à la fin de la session\").",
+    "REMEMBER_ME": "Se souvenir de moi ?",
+    "REMEMBER_ME_HELP": "Permet de rester identifié d'une session à l'autre, en conservant localement la clé publique.",
+    "PLUGINS_SETTINGS": "Extensions",
+    "BTN_RESET": "Restaurer les valeurs par défaut",
+    "EXPERT_MODE": "Activer le mode expert",
+    "EXPERT_MODE_HELP": "Permet un affichage plus détaillé.",
+    "BLOCK_VALIDITY_WINDOW": "Délai d'incertitude des blocs",
+    "BLOCK_VALIDITY_WINDOW_SHORT": "Délai d'incertitude",
+    "BLOCK_VALIDITY_WINDOW_HELP": "Délai avant de considérer qu'une information est validée",
+    "BLOCK_VALIDITY_OPTION": {
+      "NONE": "Aucun délai",
+      "N": "{{time | formatDuration}} ({{count}} blocs)"
+    },
+    "POPUP_PEER": {
+      "TITLE": "Nœud Duniter",
+      "HOST": "Adresse",
+      "HOST_HELP": "Adresse : serveur:port",
+      "USE_SSL": "Sécurisé ?",
+      "USE_SSL_HELP": "(Chiffrement SSL)",
+      "BTN_SHOW_LIST": "Liste des noeuds"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash : {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Bloc #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Bloc courant",
+      "TITLE": "Bloc #{{number}}",
+      "COMPUTED_BY": "Calculé par le noeud de",
+      "SHOW_RAW": "Voir le fichier brut",
+      "TECHNICAL_DIVIDER": "Informations techniques",
+      "VERSION": "Version du format",
+      "HASH": "Hash calculé",
+      "UNIVERSAL_DIVIDEND_HELP": "Monnaie co-produite par chacun des {{membersCount}} membres",
+      "EMPTY": "Aucune donnée dans ce bloc",
+      "POW_MIN": "Difficulté minimale",
+      "POW_MIN_HELP": "Difficulté imposée pour le calcul du hash",
+      "DATA_DIVIDER": "Données",
+      "CALLS_COUNT": "Nombre de calls",
+      "EXTRINSICS_COUNT": "Nombre d'extrinsics",
+      "EVENTS_COUNT": "Nombre d'évènements",
+      "IDENTITIES_COUNT": "Nouvelles identités",
+      "JOINERS_COUNT": "Nouveaux membres",
+      "ACTIVES_COUNT": "Renouvellements",
+      "ACTIVES_COUNT_HELP": "Membres ayant renouvelé leur adhésion",
+      "LEAVERS_COUNT": "Membres sortants",
+      "LEAVERS_COUNT_HELP": "Membres ne souhaitant plus de certification",
+      "EXCLUDED_COUNT": "Membres exclus",
+      "EXCLUDED_COUNT_HELP": "Anciens membres exclus par non renouvellement ou manque de certifications",
+      "REVOKED_COUNT": "Identités révoquées",
+      "REVOKED_COUNT_HELP": "Ces comptes ne pourront plus être membres",
+      "TX_COUNT": "Transactions",
+      "CERT_COUNT": "Certifications",
+      "TX_TO_HIMSELF": "Opération de change",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Conditions de déblocage",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "et",
+        "OR": "ou"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Signature</b> de ",
+        "XHX": "<b>Mot de passe</b>, dont SHA256 =",
+        "CSV": "Bloqué pendant",
+        "CLTV": "Bloqué jusqu'à"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blocs",
+      "NO_BLOCK": "Aucun bloc",
+      "LAST_BLOCKS": "Derniers blocs :",
+      "BTN_COMPACT": "Compacter"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Monnaie",
+      "TAB_CURRENCY": "Monnaie",
+      "TAB_WOT": "Toile de confiance",
+      "TAB_NETWORK": "Réseau",
+      "TAB_BLOCKS": "Blocs",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} est une <b>monnaie libre</b>, démarrée {{firstBlockTime|formatFromNow}}. Elle compte actuellement <b>{{N}} membres</b>, qui produisent et perçoivent un <a ng-click=\"showHelpModal('ud')\">Dividende Universel</a> (DU), chaque {{dt|formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Règles du réseau",
+      "CURRENCY_NAME": "Nom de la monnaie",
+      "MEMBERS": "Nombre de membres",
+      "MEMBERS_VARIATION": "Variation depuis le dernier DU",
+      "MONEY_DIVIDER": "Monnaie",
+      "MASS": "Masse monétaire",
+      "SHARE": "Masse par membre",
+      "UD": "Dividende universel",
+      "C_ACTUAL": "Croissance actuelle",
+      "MEDIAN_TIME": "Heure de la blockchain",
+      "POW_MIN": "Niveau minimal de difficulté de calcul",
+      "MONEY_RULES_DIVIDER": "Règles de la monnaie",
+      "C_RULE": "Croissance théorique cible",
+      "UD_RULE": "Calcul du dividende universel",
+      "DT_REEVAL": "Période de revalorisation du DU",
+      "REEVAL_SYMBOL": "reval",
+      "DT_REEVAL_VALUE": "Tous les <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Date de la 1ère revalorisation",
+      "SIG_QTY_RULE": "Nombre de certifications requises pour devenir membre",
+      "SIG_STOCK": "Nombre maximal de certifications émises par membre",
+      "SIG_PERIOD": "Délai minimal d'attente entre 2 certifications successives émises par une même personne",
+      "SIG_WINDOW": "Délai limite de prise en compte d'une certification",
+      "SIG_VALIDITY": "Durée de vie d'une certification qui a été prise en compte",
+      "MS_WINDOW": "Délai limite de prise en compte d'une demande d'adhésion comme membre",
+      "MS_VALIDITY": "Durée de vie d'une adhésion qui a été prise en compte",
+      "STEP_MAX": "Distance maximale, par les certifications, entre un nouvel entrant et les membres référents",
+      "WOT_RULES_DIVIDER": "Règles de la toile de confiance",
+      "SENTRIES": "Nombre de certifications (émises <b>et</b> reçues) pour devenir membre référent",
+      "SENTRIES_FORMULA": "Nombre de certifications (émises <b>et</b> reçues) pour devenir membre référent (formule)",
+      "XPERCENT": "Pourcentage minimum de membres référents à atteindre pour respecter la règle de distance",
+      "AVG_GEN_TIME": "Temps moyen entre deux blocs",
+      "CURRENT": "actuel",
+      "MATH_CEILING": "PLAFOND",
+      "DISPLAY_ALL_RULES": "Afficher toutes les règles ?",
+      "BTN_SHOW_LICENSE": "Voir la licence",
+      "WOT_DIVIDER": "Toile de confiance"
+    },
+    "LICENSE": {
+      "TITLE": "Licence de la monnaie",
+      "BTN_DOWNLOAD": "Télécharger le fichier",
+      "NO_LICENSE_FILE": "Fichier de licence non trouvé."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Heure de la blockchain",
+      "LOADING_PEERS": "Chargement des noeuds...",
+      "NODE_ADDRESS": "Adresse :",
+      "SOFTWARE": "Logiciel",
+      "WARN_PRE_RELEASE": "Pré-version (dernière version stable : <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Version <b>{{version}}</b> disponible",
+      "WS2PID": "Identifiant :",
+      "PRIVATE_ACCESS": "Accès privé",
+      "POW_PREFIX": "Préfixe de preuve de travail :",
+      "ENDPOINTS": {
+        "BMAS": "Interface sécurisée (SSL)",
+        "BMATOR": "Interface réseau TOR",
+        "WS2P": "Interface WS2P",
+        "ES_USER_API": "Noeud de données Cesium+"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "Les noeuds non SSL ont un affichage dégradé, car Cesium fonctionne en mode HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Nœuds",
+    "SIGNED_ON_BLOCK": "Signé sur le bloc",
+    "MIRROR": "miroir",
+    "MIRRORS": "Miroirs",
+    "MIRROR_PEERS": "Nœuds miroirs",
+    "PEER_LIST": "Liste des nœuds",
+    "MEMBERS": "Membres",
+    "MEMBER_PEERS": "Nœuds membres",
+    "ALL_PEERS": "Tous les nœuds",
+    "DIFFICULTY": "Difficulté",
+    "API": "API",
+    "CURRENT_BLOCK": "Bloc #",
+    "POPOVER_FILTER_TITLE": "Filtre",
+    "OFFLINE": "Hors ligne",
+    "OFFLINE_PEERS": "Nœuds hors ligne",
+    "BTN_SHOW_PEER": "Voir le nœud",
+    "VIEW": {
+      "TITLE": "Nœud",
+      "OWNER": "Appartient à",
+      "SHOW_RAW_PEERING": "Voir la fiche de pair",
+      "SHOW_RAW_CURRENT_BLOCK": "Voir le dernier bloc (format brut)",
+      "LAST_BLOCKS": "Derniers blocs connus",
+      "KNOWN_PEERS": "Nœuds connus :",
+      "GENERAL_DIVIDER": "Informations générales",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Récupération des informations du noeud impossible. Le délai d'attente est dépassé.",
+        "LOADING_NODE_ERROR": "Récupération des informations du noeud impossible"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Recherche (pseudo ou clé publique)",
+    "SEARCH_INIT_PHASE_WARNING": "Durant la phase de pré-inscription, la recherche des inscriptions en attente <b>peut être longue</b>. Merci de patienter...",
+    "REGISTERED_SINCE": "Inscrit le",
+    "REGISTERED_SINCE_BLOCK": "Inscrit au bloc #",
+    "NO_CERTIFICATION": "Aucune certification validée",
+    "NO_GIVEN_CERTIFICATION": "Aucune certification émise",
+    "NOT_MEMBER_PARENTHESIS": "(non membre)",
+    "IDENTITY_UNCONFIRMED": "Demande d'adhésion <b>non confirmée</b>",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identité révoquée)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(en cours de révocation)",
+    "EXPIRE_IN": "Expiration",
+    "NOT_WRITTEN_EXPIRE_IN": "Date limite<br/>de traitement",
+    "EXPIRED": "Expiré",
+    "PSEUDO": "Pseudonyme",
+    "SIGNED_ON_BLOCK": "Émise au bloc #{{block}}",
+    "WRITTEN_ON_BLOCK": "Écrite au bloc #{{block}}",
+    "GENERAL_DIVIDER": "Informations générales",
+    "NOT_MEMBER_ACCOUNT": "Compte simple (non membre)",
+    "NOT_MEMBER_ACCOUNT_HELP": "Il s'agit d'un simple portefeuille, sans demande d'adhésion en attente.",
+    "TECHNICAL_DIVIDER": "Informations techniques",
+    "BTN_CERTIFY": "Certifier",
+    "BTN_YES_CERTIFY": "Oui, certifier",
+    "BTN_SELECT_AND_CERTIFY": "Nouvelle certification",
+    "ACCOUNT_OPERATIONS": "Opérations sur le compte",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identité {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Toile de confiance",
+      "NEWCOMERS": "Nouveaux membres",
+      "NEWCOMERS_COUNT": "{{count}} membres",
+      "PENDING": "Inscriptions en attente",
+      "PENDING_COUNT": "{{count}} inscriptions en attente",
+      "REGISTERED": "Inscrit {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Membre depuis {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Nouveaux membres",
+      "BTN_PENDING": "Inscriptions en attente",
+      "SHOW_MORE": "Afficher plus",
+      "SHOW_MORE_COUNT": "(limite actuelle à {{limit}})",
+      "NO_PENDING": "Aucune inscription en attente.",
+      "NO_NEWCOMERS": "Aucun membre."
+    },
+    "CONTACTS": {
+      "TITLE": "Contacts"
+    },
+    "MODAL": {
+      "TITLE": "Recherche"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications",
+      "SUMMARY": "Certifications reçues",
+      "LIST": "Détail des certifications reçues",
+      "PENDING_LIST": "Certifications en attente de traitement",
+      "RECEIVED": "Certifications reçues",
+      "RECEIVED_BY": "Certifications reçues par {{uid}}",
+      "ERROR": "Certifications reçues en erreur",
+      "SENTRY_MEMBER": "Membre référent"
+    },
+    "OPERATIONS": {
+      "TITLE": "Opérations"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certifications émises",
+      "SUMMARY": "Certifications émises",
+      "LIST": "Détail des certifications émises",
+      "PENDING_LIST": "Certifications en attente de traitement",
+      "SENT": "Certifications émises",
+      "SENT_BY": "Certifications émises par {{uid}}",
+      "ERROR": "Certifications émises en erreur"
+    },
+    "STATUS_ENUM": {
+      "MEMBER": "Membre",
+      "NOTMEMBER": "Non membre",
+      "REMOVED": "Non membre",
+      "REVOKED": "Identité révoquée",
+      "UNCONFIRMED": "Non confirmé",
+      "UNVALIDATED": "En attente de validation"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-log-in\"></i> Connexion",
+    "SCRYPT_FORM_HELP": "Veuillez saisir vos identifiants.<br>Pensez à vérifier que la clé publique est celle de votre compte.",
+    "PUBKEY_FORM_HELP": "Veuillez saisir une clé publique de compte :",
+    "FILE_FORM_HELP": "Choisissez le fichier de trousseau à utiliser :",
+    "SCAN_FORM_HELP": "Scanner le QR code d'un portefeuille.",
+    "SALT": "Identifiant secret",
+    "SALT_HELP": "Identifiant secret",
+    "SHOW_SALT": "Afficher l'identifiant secret ?",
+    "PASSWORD": "Mot de passe",
+    "PASSWORD_HELP": "Mot de passe",
+    "PUBKEY_HELP": "Clé publique ou pseudonyme",
+    "MNEMONIC": "Phrase de restauration",
+    "NO_ACCOUNT_QUESTION": "Vous n'avez pas encore de compte ?",
+    "HAVE_ACCOUNT_QUESTION": "Vous avez déjà un compte ?",
+    "CREATE_ACCOUNT": "Créer un compte...",
+    "CREATE_FREE_ACCOUNT": "Créer un compte gratuitement",
+    "FORGOTTEN_ID": "Mot de passe oublié ?",
+    "ASSOCIATED_PUBKEY": "Clé publique du trousseau :",
+    "BTN_METHODS": "Autres méthodes",
+    "BTN_METHODS_DOTS": "Changer de méthode...",
+    "METHOD_POPOVER_TITLE": "Méthodes de connexion :",
+    "MEMORIZE_AUTH_FILE": "Mémoriser ce trousseau le temps de la session de navigation",
+    "SCRYPT_PARAMETERS": "Paramètres (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Information",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> Vous avez été <b>déconnecté</b> automatiquement, suite à une inactivité prolongée.",
+      "BTN_RELOGIN": "Me reconnecter",
+      "IDLE_WARNING": "Vous allez être déconnecté... {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Identifiant secret et mot de passe",
+      "SCRYPT_ADVANCED": "Salage avancé",
+      "FILE": "Fichier de trousseau",
+      "PUBKEY": "Clé publique ou pseudonyme",
+      "ADDRESS": "Addresse SS58",
+      "SCAN": "Scanner un QR code",
+      "MNEMONIC": "Phrase de restauration"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Salage léger",
+      "DEFAULT": "Salage standard",
+      "SECURE": "Salage sûr",
+      "HARDEST": "Salage le plus sûr",
+      "EXTREME": "Salage extrême",
+      "USER": "Salage personnalisé",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Format de fichier attendu : <b>.yml</b> ou <b>.dunikey</b> (type PubSec, WIF ou EWIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Authentification",
+    "BTN_AUTH": "S'authentifier",
+    "PASSPHRASE": "Code secret",
+    "PASSPHRASE_HELP": "Veuillez vous authentifier, en tapant votre code secret :",
+    "GENERAL_HELP": "Veuillez vous authentifier :",
+    "EXPECTED_UID_HELP": "Veuillez vous authentifier sur le compte <i class=\"ion-person\"></i> {{uid}} :",
+    "EXPECTED_PUBKEY_HELP": "Veuillez vous authentifier sur le portefeuille <br class=\"visible-xs\"/><i class=\"ion-key\"></i> {{pubkey|formatPubkey}} :",
+    "SCAN_FORM_HELP": "Scanner le QR code de la <b>clef privée</b> du portefeuille."
+  },
+  "ACCOUNT": {
+    "TITLE": "Mon compte",
+    "BALANCE": "Solde",
+    "LAST_TX": "Dernières transactions validées",
+    "WALLET": "Portefeuille",
+    "BALANCE_ACCOUNT": "Solde du compte",
+    "NO_TX": "Aucune transaction",
+    "SHOW_MORE_TX": "Afficher plus",
+    "SHOW_ALL_TX": "Afficher tout",
+    "TX_FROM_DATE": "(limite actuelle à {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Transactions en attente de traitement",
+    "VALIDATING_TX": "Transactions traitées, non validées",
+    "ERROR_TX": "Transactions non exécutées",
+    "ERROR_TX_SENT": "Transactions envoyées en échec",
+    "PENDING_TX_RECEIVED": "Transactions en attente de réception",
+    "EVENTS": "Evénements",
+    "OUT_DISTANCED": "Vos certifications actuelles proviennent d'un groupe trop isolé de la <a ng-click=\"showHelpModal('wot')\">Toile de Confiance</a> (TdC) : la <a ng-click=\"showHelpModal('distance_rule')\">règle de distance maximale</a> n'est pas respectée.<br/>Vous devez obtenir des certifications provenant d'autres secteurs de la TdC, ou bien attendre que celle-ci se resserre.",
+    "WAITING_MEMBERSHIP": "Demande d'adhésion envoyée. En attente d'acceptation.",
+    "WAITING_CERTIFICATIONS": "Vous devez <b>obtenir {{needCertificationCount}} certification(s)</b> pour devenir membre et produire le <a ng-click=\"showHelpModal('ud')\">Dividende Universel</a>. Votre compte est cependant déjà opérationnel, pour recevoir et effectuer des paiements.",
+    "WAITING_CERTIFICATIONS_HELP": "Pour obtenir vos certifications, sollicitez uniquement des membres <b>qui vous connaissent suffisamment</b>, comme l'exige <a ng-click=\"showLicenseModal()\">la licence de la monnaie</a> que vous avez acceptée.<br/>Si vous ne connaissez pas (encore) suffisamment de membres, allez aux rencontres ou proposez en sur <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">le forum utilisateur</a>.",
+    "WILL_MISSING_CERTIFICATIONS": "Vous allez bientôt <b>manquer de certifications</b> (au moins {{willNeedCertificationCount}} sont requises)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Votre adhésion comme membre <b>va expirer {{membershipExpiresIn|formatDurationTo}}</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a> d'ici là.",
+    "NEED_RENEW_MEMBERSHIP": "Vous n'êtes plus membre de la monnaie, car <b>votre adhésion a expiré</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a>.",
+    "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Vous n'êtes plus membre de la monnaie, <b>pour manque de certifications</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a>.",
+    "NO_WAITING_MEMBERSHIP": "Aucune demande d'adhésion en attente. Si vous souhaitez <b>devenir membre</b>, pensez à <a ng-click=\"doQuickFix('membership')\">envoyer la demande d'adhésion</a>.",
+    "CERTIFICATION_COUNT": "Certifications reçues",
+    "CERTIFICATION_COUNT_SHORT": "Certifications",
+    "SIG_STOCK": "Certifications envoyées",
+    "BTN_CONFIRM_MEMBERSHIP": "Confirmer mon adhésion",
+    "BTN_RECEIVE_MONEY": "Encaisser",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Basculer vers une autre identité...",
+    "BTN_FIX_MEMBERSHIP": "Renvoyer la demande d'adhésion...",
+    "BTN_MEMBERSHIP_RENEW": "Renouveler l'adhésion",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Renouveler l'adhésion...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Arrêter l'adhésion...",
+    "BTN_SECURITY_DOTS": "Compte et sécurité...",
+    "BTN_SHOW_DETAILS": "Afficher les infos techniques",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Montant verrouillé",
+      "DESCRIPTION": "Voici les conditions de déverrouillage de ce montant :",
+      "DESCRIPTION_MANY": "Cette transaction est composé de plusieurs parties, dont voici les conditions de déverrouillage :",
+      "LOCKED_AMOUNT": "Conditions pour le montant :"
+    },
+    "NEW": {
+      "TITLE": "Création de compte",
+      "INTRO_WARNING_TIME": "La création d'un compte sur {{name}} est très simple. Veuillez néanmoins prendre suffisamment de temps pour faire correctement cette formalité.",
+      "INTRO_WARNING_SECURITY": "Vérifiez que le matériel que vous utilisez actuellement (ordinateur, tablette, téléphone) <b>est sécurisé et digne de confiance</b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Anti-virus à jour, pare-feu activé, session protégée par mot de passe ou code pin, etc.",
+      "INTRO_HELP": "Cliquez sur <b>Commencer</b> pour débuter la création de compte. Vous serez guidé étape par étape.",
+      "STEP_1_HELP": "Cesium va générer <b>phrase de restauration</b>. Elle est un peu comme un plan, qui permet de fabriquer les clefs d'accès à votre compte.",
+      "STEP_2_HELP": "Conservez cette phrase précieusement, car sans elle Cesium ne pourra pas reconstruire les clefs d'accès à votre compte. <br/>Vous en aurez besoin dès que vous devez installer Cesium sur un nouveau téléphone ou ordinateur.",
+      "STEP_3_HELP": "Dans une blockchain, pas de procédure de récupération par mail ou SMS. Seule votre phrase de restauration peut vous permettre de récupérer vos {{currency}} à tout moment.",
+      "STEP_4_HELP": "Il est temps de vous munir d'<b>un papier et d'un crayon</b> afin de pouvoir noter votre phrase de restauration.",
+      "STEP_MNEMONIC_HELP": "Voici votre phrase de restauration !<br/>Tâcher de la garder bien secrète, car quiconque la trouve pourra vider votre compte.",
+      "STEP_CHECK_WORD_HELP": "Avez-vous bien noté votre phrase de restauration ?<br/>Pour en être sûr, veuillez taper dans le champs ci-dessous le mot n°{{number}} de la phrase :",
+      "STEP_CODE_1_HELP": "<b>Un code secret</b> va maintenant être généré.<br/>Il est nécessaire pour accéder à votre compte sur cet appareil, sans avoir à utiliser la phrase de restauration.",
+      "STEP_CODE_2_HELP": "Ce code secret a aussi pour but de <b>protèger aussi votre compte</b>. C'est pourquoi <b>vous seul devez le posséder</b>.",
+      "STEP_CODE_3_HELP": "Voici votre code secret !<br/>Mémorisez-le parfaitement, ou notez-le, car il vous sera demandé <b>à chaque fois</b> que voudrez effectuer un paiement sur cet appareil. Un peu comme le code pin pour un paiement par carte bancaire.",
+      "STEP_CHECK_CODE_HELP": "Pour vérifier que vous avez bien mémorisé ou noté votre code secret, veuillez le taper ci-dessous :",
+      "STEP_CONGRATULATION_1_HELP": "Bravo ! Tout est prêt pour créer votre compte.<br/><br/>Celui-ci aura le <b>numéro de compte</b> suivant :",
+      "STEP_CONGRATULATION_2_HELP": "Cesium pourra aussi afficher ce numéro de compte <b>sous une forme plus compacte</b> :",
+      "PSEUDO": "Pseudonyme",
+      "PSEUDO_HELP": "Pseudonyme",
+      "SALT_CONFIRM": "Confirmation",
+      "SALT_CONFIRM_HELP": "Confirmation de l'identifiant secret",
+      "PASSWORD_CONFIRM": "Confirmation",
+      "PASSWORD_CONFIRM_HELP": "Confirmation du mot de passe",
+      "SLIDE_6_TITLE": "Confirmation :",
+      "COMPUTING_PUBKEY": "Calcul en cours...",
+      "LAST_SLIDE_CONGRATULATION": "Vous avez saisi toutes les informations nécessaires : Bravo !<br/>Vous pouvez maintenant <b>envoyer la demande de création</b> de compte.</b><br/><br/>Pour information, la clé publique ci-dessous identifiera votre futur compte.<br/>Elle pourra être communiquée à des tiers pour recevoir leurs paiements.<br/><b>Il n'est pas obligatoire</b> de la noter ici, vous pourrez également le faire plus tard.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Avertissement :</b> l'identifiant secret, le mot de passe et le pseudonyme ne pourront plus être modifiés.<br/><br/><b>Assurez-vous de toujours vous en rappeler !</b><br/><br/><b>Êtes-vous sûr</b> de vouloir envoyer cette demande d'inscription ?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Avertissement :</b> l'identifiant secret et le mot de passe ne pourront plus être modifiés.<br/><br/><b>Assurez-vous de toujours vous en rappeler !</b><br/><br/><b>Êtes-vous sûr</b> de vouloir continuer avec ces identifiants ?",
+      "CHECKING_PSEUDO": "Vérification...",
+      "PSEUDO_AVAILABLE": "Pseudonyme disponible",
+      "PSEUDO_NOT_AVAILABLE": "Pseudonyme non disponible",
+      "INFO_LICENSE": "Avant de créer un compte membre, <b>veuillez lire et accepter la licence</b> d'usage de la monnaie :",
+      "BTN_ACCEPT": "J'accepte",
+      "BTN_ACCEPT_LICENSE": "J'accepte la licence",
+      "BTN_GENERATE_NEW_PHRASE": "Choisir une autre phrase",
+      "BTN_GENERATE_NEW_CODE": "Choisir un autre code secret",
+      "BTN_WROTE_MY_PHRASE": "OK, J'ai noté ma phrase",
+      "INPUT_WORD": "Mot n°{{number}}",
+      "YOUR_SECRET_CODE": "Votre code secret"
+    },
+    "CONFIRM_IDENTITY": {
+      "TITLE": "Confirmer mon adhésion",
+      "PSEUDO_HELP": "Choisissez un pseudonyme.<br/>Il sert aux autres membres, pour vous identifier plus facilement.<div class='hidden-xs'><br/>Il <b>ne pourra pas être modifié</b>, sans refaire un compte.</div><br/><br/>Il ne doit contenir <b>ni espace, ni de caractère accentué</b>.<div class='hidden-xs'><br/>Exemple : <span class='gray'>SophieDupond, MarcelChemin, etc.</span>"
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Sélection de l'identité",
+      "HELP": "Plusieurs <b>identités différentes</b> ont été envoyées, pour la clé publique <span class=\"gray\"><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</span>.<br/>Veuillez sélectionner le dossier à utiliser :"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Sélection du portefeuille"
+    },
+    "WALLET_LIST": {
+      "TITLE": "Mes portefeuilles",
+      "BTN_NEW": "Ajouter un portefeuille",
+      "BTN_NEW_DOTS": "Ajouter un portefeuille...",
+      "BTN_DOWNLOAD": "Télécharger la liste",
+      "BTN_IMPORT_FILE_DOTS": "Importer depuis un fichier...",
+      "NO_WALLET": "Aucun portefeuille secondaire",
+      "BTN_DELETE": "Retirer un portefeuille secondaire...",
+      "BTN_RENAME": "Renommer le portefeuille",
+      "EXPORT_FILENAME": "mes_portefeuilles-{{pubkey|formatPubkey}}-{{currency}}.csv",
+      "TOTAL_DOTS": "Total : ",
+      "EDIT_POPOVER": {
+        "TITLE": "Renommer le portefeuille",
+        "HELP": "Renseignez le nouveau nom",
+        "NAME_HELP": "Nom du portefeuille"
+      },
+      "IMPORT_MODAL": {
+        "TITLE": "Importer des portefeuilles",
+        "HELP": "Pour <b>importer des porftefeuilles</b>, veuillez glisser dans la zone ci-dessous le fichier de la liste des portefeuilles, ou bien cliquer dans la zone pour rechercher un fichier.",
+        "WALLET_COUNT": "<b>{{count}}</b> nouveau{{count > 1 ? 'x' : ''}} portefeuille{{count > 1 ? 's' : ''}}",
+        "NO_NEW_WALLET": "Aucun nouveau portefeuille"
+      }
+    },
+    "SECURITY": {
+      "ADD_QUESTION": "Ajouter une question personnalisée",
+      "BTN_CLEAN": "Vider",
+      "BTN_RESET": "Réinitialiser",
+      "DOWNLOAD_REVOKE": "Sauvegarder mon fichier de révocation (uniquement sur ordinateur)",
+      "DOWNLOAD_REVOKE_HELP": "Disposer d'un fichier de révocation est important, par exemple en cas de perte de vos identifiants. Il vous permet de <b>sortir ce compte de la toile de confiance</b>, en redevenant ainsi un simple portefeuille. Ne fonctionne pas sur smartphone.",
+      "GENERATE_KEYFILE": "Générer mon fichier de trousseau...",
+      "GENERATE_KEYFILE_HELP": "Génère un fichier permettant de vous authentifier sans saisir vos identifiants.<br/><b>Attention :</b> ce fichier contiendra votre trousseau de compte (clefs publique et secrète) ; il est donc très important de le mettre en lieu sûr !",
+      "KEYFILE_FILENAME": "trousseau-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
+      "MEMBERSHIP_IN": "Transformer en compte membre...",
+      "MEMBERSHIP_IN_HELP": "Permet de <b>transformer</b> un compte simple portefeuille <b>en compte membre</b>, en envoyant une demande d'adhésion. Utile uniquement si vous n'avez pas déjà un autre compte membre.",
+      "SEND_IDENTITY": "Publier son identité...",
+      "SEND_IDENTITY_HELP": "Permet d'associer un pseudonyme à ce compte, mais <b>sans faire de demande d'adhésion</b> pour devenir membre. Cette association n'est généralement pas utile, car la validité de cette association de pseudonyme est limitée dans le temps.",
+      "HELP_LEVEL": "Pour générer un fichier de sauvegarde de vos identifiants, choisissez <strong> au moins {{nb}} questions :</strong>",
+      "LEVEL": "Niveau de sécurité",
+      "LOW_LEVEL": "Faible <span class=\"hidden-xs\">(2 questions minimum)</span>",
+      "MEDIUM_LEVEL": "Moyen <span class=\"hidden-xs\">(4 questions minimum)</span>",
+      "QUESTION_1": "Comment s'appelait votre meilleur ami lorsque vous étiez adolescent ?",
+      "QUESTION_2": "Comment s'appelait votre premier animal de compagnie ?",
+      "QUESTION_3": "Quel est le premier plat que vous avez appris à cuisiner ?",
+      "QUESTION_4": "Quel est le premier film que vous avez vu au cinéma ?",
+      "QUESTION_5": "Où êtes-vous allé la première fois que vous avez pris l'avion ?",
+      "QUESTION_6": "Comment s'appelait votre instituteur préféré à l'école primaire ?",
+      "QUESTION_7": "Quel serait selon vous le métier idéal ?",
+      "QUESTION_8": "Quel est le livre pour enfants que vous préférez ?",
+      "QUESTION_9": "Quel était le modèle de votre premier véhicule ?",
+      "QUESTION_10": "Quel était votre surnom lorsque vous étiez enfant ?",
+      "QUESTION_11": "Quel était votre personnage ou acteur de cinéma préféré lorsque vous étiez étudiant ?",
+      "QUESTION_12": "Quel était votre chanteur ou groupe préféré lorsque vous étiez étudiant ?",
+      "QUESTION_13": "Dans quelle ville vos parents se sont-ils rencontrés ?",
+      "QUESTION_14": "Comment s'appelait votre premier patron ?",
+      "QUESTION_15": "Quel est le nom de la rue où vous avez grandi ?",
+      "QUESTION_16": "Quel est le nom de la première plage où vous vous êtes baigné ?",
+      "QUESTION_17": "Quel est le premier album que vous avez acheté ?",
+      "QUESTION_18": "Quel est le nom de votre équipe de sport préférée ?",
+      "QUESTION_19": "Quel était le métier de votre grand-père ?",
+      "RECOVER_ID": "Retrouver mon mot de passe...",
+      "RECOVER_ID_HELP": "Si vous disposez d'un <b>fichier de sauvegarde de vos identifiants</b>, vous pouvez les retrouver en répondant correctement à vos questions personnelles.",
+      "RECOVER_ID_SELECT_FILE": "Choisissez le <b>fichier de sauvegarde de vos identifiants</b> à utiliser :",
+      "REVOCATION_WITH_FILE": "Révoquer mon compte membre...",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "Si vous avez <b>définitivement perdus vos identifiants</b> de compte membre (ou que la sécurité du compte est compromise), vous pouvez utiliser <b>le fichier de révocation</b> du compte pour <b>forcer sa sortie définitive de la toile de confiance</b>.",
+      "REVOCATION_WITH_FILE_HELP": "Pour <b>révoquer définitivement</b> un compte membre, veuillez glisser dans la zone ci-dessous votre fichier de révocation, ou bien cliquer dans la zone pour rechercher un fichier.",
+      "REVOCATION_WALLET": "Révoquer immédiatement ce compte",
+      "REVOCATION_WALLET_HELP": "Demander la révocation de votre identité entraîne la <b>sortie de la toile de confiance</b> (définitive pour le pseudonyme et la clé publique associés). Le compte ne pourra plus produire de Dividende Universel.<br/>Vous pourrez toutefois encore vous y connecter, comme à un simple portefeuille.",
+      "REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "SAVE_ID": "Sauvegarder mes identifiants...",
+      "SAVE_ID_HELP": "Création d'un fichier de sauvegarde, pour <b>retrouver votre mot de passe</b> (et l'identifiant secret) <b>en cas de d'oubli</b>. Le fichier est <b>sécurisé</b> (chiffré) à l'aide de questions personnelles.",
+      "STRONG_LEVEL": "Fort <span class=\"hidden-xs \">(6 questions minimum)</span>",
+      "TITLE": "Compte et sécurité",
+      "KEYFILE": {
+        "PUBSEC_FORMAT": "Format PubSec.",
+        "PUBSEC_FORMAT_HELP": "Ce format stocke votre trousseau de manière très simple. Il est compatible notamment avec Cesium, ğannonce et Duniter.<br/><b>Attention :</b>Le fichier <b>n'est pas chiffré</b> (la clef secrète y apparaît en clair) ; veuillez donc le stocker en lieu sûr !",
+        "WIF_FORMAT": "Format WIF (Wallet Import Format) - v1",
+        "WIF_FORMAT_HELP": "Ce format stocke votre trousseau en y intégrant une somme de contrôle pour vérifier l'intégrité du fichier. Il est compatible notamment avec les portefeuilles papier (Duniter paper wallet).<br/><b>Attention :</b>Le fichier <b>n'est pas chiffré</b> (la clef secrète y apparaît en clair) ; veuillez donc le stocker en lieu sûr !",
+        "EWIF_FORMAT": "Format EWIF (Encrypted Wallet Import Format) - v1",
+        "EWIF_FORMAT_HELP": "Ce format stocke votre trousseau <b>de manière chiffrée</b> à partir d'une phrase secrète de votre choix. Il intègre aussi une somme de contrôle pour vérifier l'intégrité du fichier.<br/><b>Attention :</b> Veillez à toujours vous souvenir de votre phrase secrète !",
+        "PASSWORD_POPUP": {
+          "TITLE": "Fichier de trousseau chiffré",
+          "HELP": "Veuillez indiquer la phrase secrète :",
+          "PASSWORD_HELP": "Phrase secrète"
+        },
+        "ERROR": {
+          "BAD_PASSWORD": "Phrase secrète incorrecte",
+          "BAD_CHECKSUM": "Somme de contrôle incorrecte"
+        }
+      }
+    },
+    "FILE_NAME": "{{currency}} - Relevé du compte {{pubkey|formatPubkey}} au {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Date",
+      "AMOUNT": "Montant",
+      "COMMENT": "Commentaire"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Virement",
+    "SUB_TITLE": "Faire un virement",
+    "SUB_TITLE_ALL": "Vider le compte",
+    "FROM": "De",
+    "TO": "À",
+    "AMOUNT": "Montant",
+    "AMOUNT_HELP": "Montant",
+    "COMMENT": "Commentaire",
+    "COMMENT_HELP": "Commentaire",
+    "FEE": "+{{fee}} {{currency}} frais",
+    "BTN_ADD_COMMENT": "Ajouter un commentaire",
+    "REST": "Reste du compte",
+    "REST_TO": "à",
+    "WARN_COMMENT_IS_PUBLIC": "Veuillez noter que <b>les commentaires sont publics</b> (non chiffrés).",
+    "BTN_SCAN_HELP": "Scanner un QR Code",
+    "BTN_QR_CODE": "QR Code",
+    "QR_CODE_HELP": "Demander au destinataire de flasher ce code. Il pourra alors déposer le paiement plus tard, quand il le souhaite.",
+    "MODAL": {
+      "TITLE": "Virement"
+    }
+  },
+  "ERROR": {
+    "UNKNOWN_URI_FORMAT": "Format d'URI inconnu",
+    "PUBKEY_INVALID_CHECKSUM": "Clé publique invalide (bad checksum).",
+    "POPUP_TITLE": "Erreur",
+    "UNKNOWN_ERROR": "Erreur inconnue",
+    "CRYPTO_UNKNOWN_ERROR": "Votre navigateur ne semble pas compatible avec les fonctionnalités de cryptographie.",
+    "DOWNLOAD_KEYFILE_FAILED": "Échec de la génération du fichier de trousseau.",
+    "EQUALS_TO_PSEUDO": "Doit être différent du pseudonyme",
+    "EQUALS_TO_SALT": "Doit être différent de l'identifiant secret",
+    "FIELD_REQUIRED": "Champ obligatoire",
+    "FIELD_TOO_SHORT": "Valeur trop courte",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Valeur trop courte ({{minLength}} caractères min)",
+    "FIELD_TOO_LONG": "Valeur trop longue",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Valeur trop longue ({{maxLength}} caractères max)",
+    "FIELD_MIN": "Valeur minimale : {{min}}",
+    "FIELD_MAX": "Valeur maximale : {{max}}",
+    "FIELD_ACCENT": "Caractères accentués et virgules non autorisés",
+    "FIELD_NOT_NUMBER": "Valeur numérique attendue",
+    "FIELD_MAXIMUM_DECIMALS": "Trop de décimales (max : {{maxDecimals}})",
+    "FIELD_NOT_VALID_DECIMAL": "Valeur décimale attendue",
+    "FIELD_NOT_INT": "Valeur entière attendue",
+    "FIELD_NOT_EMAIL": "Adresse email non valide",
+    "FIELD_NOT_VALID_DATE": "Date invalide",
+    "FIELD_NOT_VALID_DATE_AFTER": "Doit être postérieure à {{minDate}}",
+    "FIELD_NOT_VALID_DATE_BEFORE": "Doit être antérieure à {{maxDate}}",
+    "FIELD_NOT_VALID_DATE_RANGE": "Dates incohérentes",
+    "FIELD_NOT_VALID_DATE_MAX_DURATION": "Durée trop longue",
+    "FIELD_NOT_VALID_DATE_MIN_DURATION": "Durée trop courte",
+    "FIELD_NOT_VALID_HOUR_MINUTE": "Heure/minute invalide",
+    "FIELD_NOT_VALID_DATE_TIME": "Date/heure invalide",
+    "FIELD_NOT_VALID_LATITUDE": "Latitude invalide",
+    "FIELD_NOT_VALID_LONGITUDE": "Longitude invalide",
+    "FIELD_NOT_VALID_PATTERN": "Format incorrect",
+    "FIELD_NOT_VALID_PUBKEY": "Clé publique invalide",
+    "FIELD_NOT_VALID_ADDRESS": "Addresse SS58 invalide",
+    "PASSWORD_NOT_CONFIRMED": "Ne correspond pas au mot de passe",
+    "SALT_NOT_CONFIRMED": "Ne correspond pas à l'identifiant secret",
+    "SEND_IDENTITY_FAILED": "Échec de l'inscription",
+    "SEND_CERTIFICATION_FAILED": "Échec de la certification",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "Vous ne pouvez pas effectuer de certification, car ce compte n'est <b>pas membre</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "Vous ne pouvez pas effectuer de certification, car ce compte n'est pas encore membre.<br/><br/>Il vous manque encore des certifications, ou bien celles-ci n'ont pas encore été validées.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Compte non certifiable. Aucune demande d'adhésion n'a été faite, ou bien elle n'a pas été renouvelée.",
+    "LOGIN_FAILED": "Erreur lors de la connexion.",
+    "LOAD_IDENTITY_FAILED": "Erreur de chargement de l'identité.",
+    "LOAD_REQUIREMENTS_FAILED": "Erreur de chargement des prérequis de l'identité.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Échec de la tentative d'entrée dans la communauté.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Échec de l'arrêt de l'adhésion.",
+    "REFRESH_WALLET_DATA": "Échec du rafraîchissement du portefeuille.",
+    "GET_CURRENCY_PARAMETER": "Échec de la récupération des règles de la monnaie.",
+    "GET_CURRENCY_FAILED": "Chargement de la monnaie impossible. Veuillez réessayer plus tard.",
+    "SEND_TX_FAILED": "Échec du virement.",
+    "ALL_SOURCES_USED": "Veuillez attendre le calcul du prochain bloc (toutes vos sources de monnaie ont été utilisées).",
+    "NOT_ENOUGH_SOURCES": "Pas assez de change pour envoyer ce montant en une seule transaction.<br/>Montant maximum : {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Échec de la création du compte membre.",
+    "RESTORE_WALLET_DATA_ERROR": "Échec du rechargement des paramètres depuis le stockage local",
+    "LOAD_WALLET_DATA_ERROR": "Échec du chargement des données du portefeuille.",
+    "COPY_CLIPBOARD_FAILED": "Copie de la valeur impossible.",
+    "TAKE_PICTURE_FAILED": "Échec de la récupération de la photo.",
+    "SCAN_FAILED": "Échec du scan de QR-code.",
+    "SCAN_UNKNOWN_FORMAT": "Code non reconnu.",
+    "WOT_LOOKUP_FAILED": "Échec de la recherche.",
+    "LOAD_PEER_DATA_FAILED": "Lecture du nœud Duniter impossible. Veuillez réessayer ultérieurement.",
+    "NEED_LOGIN_FIRST": "Veuillez d'abord vous connecter.",
+    "AMOUNT_REQUIRED": "Le montant est obligatoire.",
+    "AMOUNT_NEGATIVE": "Montant négatif non autorisé.",
+    "FEE_NEGATIVE": "Frais négatif non autorisé.",
+    "NOT_ENOUGH_CREDIT": "Crédit insuffisant.",
+    "INVALID_NODE_SUMMARY": "Nœud injoignable ou adresse invalide.",
+    "INVALID_USER_ID": "Ne doit contenir ni espace ni caractère spécial ou accentué.",
+    "INVALID_COMMENT": "Le champ 'référence' ne doit pas contenir de caractères accentués.",
+    "INVALID_PUBKEY": "La clé publique n'a pas le format attendu.",
+    "INVALID_PUBKEY_CHECKSUM": "Somme de contrôle invalide.",
+    "IDENTITY_REVOKED": "Cette identité <b>a été révoquée</b>. Elle ne peut plus devenir membre.",
+    "IDENTITY_REVOKED_WITH_TIME": "Cette identité <b>a été révoquée {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). Elle ne peut plus devenir membre.",
+    "IDENTITY_PENDING_REVOCATION": "La <b>révocation de cette identité</b> a été demandée et est en attente de traitement. La certification est donc désactivée.",
+    "IDENTITY_INVALID_BLOCK_HASH": "Cette demande d'adhésion n'est plus valide (car elle référence un bloc que les nœuds du réseau ont annulé) : cette personne doit renouveler sa demande d'adhésion <b>avant</b> d'être certifiée.",
+    "IDENTITY_EXPIRED": "La publication de cette identité a expiré : cette personne doit effectuer une nouvelle demande d'adhésion <b>avant</b> d'être certifiée.",
+    "IDENTITY_SANDBOX_FULL": "Le nœud Duniter utilisé par Cesium ne peut plus recevoir de nouvelles identités, car sa file d'attente est pleine.<br/><br/>Veuillez réessayer ultérieurement ou changer de nœud (via le menu <b>Paramètres</b>).",
+    "IDENTITY_NOT_FOUND": "Identité non trouvée.",
+    "IDENTITY_TX_FAILED": "Échec du chargement des opérations.",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Adhésion non valide.",
+    "WALLET_INVALID_BLOCK_HASH": "Votre demande d'adhésion n'est plus valide (car elle référence un bloc que les nœuds du réseau ont annulé).<br/>Vous devez <a ng-click=\"doQuickFix('fixMembership')\">envoyer une nouvelle demande</a> pour résoudre ce problème.",
+    "WALLET_IDENTITY_EXPIRED": "La publication de <b>votre identité a expirée</b>.<br/>Vous devez <a ng-click=\"doQuickFix('fixIdentity')\">publier à nouveau votre identité</a> pour résoudre ce problème.",
+    "WALLET_REVOKED": "Votre identité a été <b>révoquée</b> : ni votre pseudonyme ni votre clef publique ne pourra être utilisé à l'avenir pour un compte membre.",
+    "WALLET_HAS_NO_SELF": "Votre identité doit d'abord avoir été publiée, et ne pas être expirée.",
+    "AUTH_REQUIRED": "Authentification requise.",
+    "AUTH_INVALID_PUBKEY": "La clef attendue est <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}...",
+    "AUTH_INVALID_SCRYPT": "Identifiant ou mot de passe invalide.",
+    "AUTH_INVALID_FILE": "Fichier de trousseau invalide.",
+    "AUTH_FILE_ERROR": "Échec de l'ouverture du fichier de trousseau.",
+    "IDENTITY_ALREADY_CERTIFY": "Vous avez <b>déjà certifié</b> cette identité.<br/><br/>Cette certification est encore valide (expiration {{expiresIn|formatDurationTo}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "Vous avez <b>déjà certifié</b> cette identité.<br/><br/>Cette certification est en attente de traitement (date limite de traitement {{expiresIn|formatDurationTo}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Certification impossible",
+    "LOAD_NEWCOMERS_FAILED": "Échec du chargement des nouveaux membres.",
+    "LOAD_PENDING_FAILED": "Échec du chargement des inscriptions en attente.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vous devez <b>être membre</b> pour pouvoir effectuer cette action.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Vous devez <b>être membre (ou ancien membre)</b> pour pouvoir effectuer cette action.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Vous devez avoir <b>publié votre identité</b> pour pouvoir effectuer cette action.",
+    "GET_BLOCK_FAILED": "Échec de la récupération du bloc.",
+    "INVALID_BLOCK_HASH": "Bloc non trouvé (hash différent).",
+    "DOWNLOAD_REVOCATION_FAILED": "Échec du téléchargement du fichier de révocation.",
+    "REVOCATION_FAILED": "Échec de la révocation.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Identifiant secret ou mot de passe incorrect.",
+    "RECOVER_ID_FAILED": "Échec de la récupération des identifiants",
+    "LOAD_FILE_FAILED": "Échec du chargement du fichier",
+    "NOT_VALID_REVOCATION_FILE": "Fichier de révocation non valide (mauvais format de fichier)",
+    "NOT_VALID_SAVE_ID_FILE": "Fichier de récupération non valide (mauvais format de fichier)",
+    "NOT_VALID_KEY_FILE": "Fichier de trousseau non valide (format non reconnu)",
+    "EXISTING_ACCOUNT": "Vos identifiants correspondent à un compte déjà existant, dont la <a ng-click=\"showHelpModal('pubkey')\">clef publique</a> est :",
+    "EXISTING_ACCOUNT_REQUEST": "Veuillez modifier vos identifiants afin qu'ils correspondent à un compte non utilisé.",
+    "GET_LICENSE_FILE_FAILED": "Récupération du fichier de licence impossible.",
+    "CHECK_NETWORK_CONNECTION": "Aucun nœud ne semble accessible.<br/><br/>Veuillez <b>vérifier votre connexion Internet</b>.",
+    "ISSUE_524_TX_FAILED": "Échec du virement.<br/><br/>Un message a été envoyé aux développeurs pour faciliter la résolution du problème. <b>Merci de votre aide</b>.",
+    "ADD_SECONDARY_WALLET_FAILED": "Échec de l'ajout du portefeuille secondaire.",
+    "REMOVE_SECONDARY_WALLET_FAILED": "Échec de la suppression du portefeuille secondaire.",
+    "UPDATE_WALLET_LIST_FAILED": "Échec du rafraîchissement des portefeuilles secondaires.",
+    "LOAD_WALLET_LIST_FAILED": "Échec du chargement des portefeuilles secondaires.",
+    "SAVE_WALLET_LIST_FAILED": "Échec de la sauvegarde des portefeuilles secondaires.",
+    "COULD_NOT_ADD_MAIN_WALLET": "Ce portefeuille <b>correspond au compte principal</b> avec lequel vous êtes connecté.<br/>Impossible de l'ajouter comme portefeuille secondaire.",
+    "COULD_NOT_ADD_EXISTING_WALLET": "Portefeuille déjà existant dans la liste.",
+    "UNKNOWN_WALLET_ID": "Portefeuille secondaire inconnu.",
+    "RESTORE_WALLET_LIST_FAILED": "Échec de la restauration des portefeuilles secondaires.",
+    "INVALID_FILE_FORMAT": "Format de fichier invalide.",
+    "SAME_TX_RECIPIENT": "Le destinataire doit être différent de l'émetteur."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Information",
+    "CERTIFICATION_PENDING": "Certification envoyée. En attente de validation...",
+    "CERTIFICATION_DONE": "Certification validée",
+    "CONFIRM_IDENTITY_PENDING": "Confirmation d'adhésion envoyée. En attente de validation...",
+    "CONFIRM_IDENTITY_DONE": "Confirmation d'adhésion validée",
+    "NOT_ENOUGH_CREDIT": "Crédit insuffisant",
+    "TRANSFER_SENT": "Virement envoyé",
+    "COPY_TO_CLIPBOARD_DONE": "Copié dans le presse-papier",
+    "MEMBERSHIP_OUT_SENT": "Résiliation envoyée",
+    "NOT_NEED_MEMBERSHIP": "Vous êtes déjà membre.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "Cette identité va bientôt manquer de certifications (au moins {{willNeedCertificationCount}}).",
+    "IDENTITY_NEED_MEMBERSHIP": "Cette identité n'a pas envoyée de demande d'adhésion. Elle le devra si elle souhaite devenir membre.",
+    "HAS_ALTERNATIVE_IDENTITIES": "Il existe <b>plusieurs identités</b> rattachées à cette clé publique. <b>Avant toute certification</b>, pensez à <a ng-click=\"doQuickFix('showSelectIdentities')\">consulter les autres identités</a> pour choisir la bonne, ou bien contacter le propriétaire du compte.",
+    "REVOCATION_SENT": "Révocation envoyée",
+    "REVOCATION_SENT_WAITING_PROCESS": "La <b>révocation de cette identité</b> a été demandée et est en attente de traitement.",
+    "FEATURES_NOT_IMPLEMENTED": "Cette fonctionnalité est encore en cours de développement.<br/>Pourquoi ne pas <b>contribuer à Cesium</b>, pour l'obtenir plus rapidement ? ;)",
+    "EMPTY_TX_HISTORY": "Aucune opération à exporter"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Êtes-vous sûr</b> de vouloir continuer ?",
+    "POPUP_TITLE": "Confirmation",
+    "POPUP_WARNING_TITLE": "<b>Avertissement</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Avertissement de sécurité</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certifier {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">Ne PAS certifier</b> un compte si vous pensez que :<br/><br/><ul><li>1.) il ne correspond pas à une personne <b>physique et vivante</b>.<li>2.) son propriétaire <b>possède un autre compte</b> déjà certifié.<li>3.) son propriétaire viole (volontairement ou non) la règle 1 ou 2 (par exemple en certifiant des comptes factices ou en double).</ul><br/><b>Êtes-vous sûr</b> de vouloir néanmoins certifier cette identité ?",
+    "FULLSCREEN": "Afficher l'application en plein écran ?",
+    "EXIT_APP": "Fermer l'application ?",
+    "TRANSFER": "<b>Récapitulatif du virement</b> :<br/><br/><ul><li> - De : {{from}}</li><li> - A : <b>{{to}}</b></li><li> - Montant : <b>{{amount}} {{unit}}</b></li><li> - Commentaire : <i>{{comment}}</i></li></ul><br/><b>Êtes-vous sûr de vouloir effectuer ce virement ?</b>",
+    "TRANSFER_ALL": "<b>Récapitulatif du virement</b> :<br/><br/><ul><li> - De : {{from}}</li><li> - A : <b>{{to}}</b></li><li> - Montant : <b>{{amount}} {{unit}}</b></li><li> - Commentaire : <i>{{comment}}</i></li><br/><li> - Reste : <b>{{restAmount}} {{unit}}</b> à <b>{{restTo}}</b></li></ul><br/><b>Êtes-vous sûr de vouloir effectuer ce virement ?</b>",
+    "MEMBERSHIP_OUT": "Cette opération est <b>irréversible</b>.<br/></br/>Êtes-vous sûr de vouloir <b>résilier votre compte membre</b> ?",
+    "MEMBERSHIP_OUT_2": "Cette opération est <b>irreversible</b> !<br/><br/>Êtes-vous vraiment sûr de vouloir <b>résilier votre adhésion</b> comme membre ?",
+    "LOGIN_UNUSED_WALLET_TITLE": "Erreur de saisie ?",
+    "LOGIN_UNUSED_WALLET": "Le compte connecté semble <b>inactif</b>.<br/><br/>Il s'agit probablement d'une <b>erreur de saisie</b> dans vos identifiants de connexion. Veuillez recommencer, en vérifiant que <b>la clé publique est celle de votre compte</b>.",
+    "FIX_IDENTITY": "Le pseudonyme <b>{{uid}}</b> va être publiée à nouveau, en remplacement de l'ancienne publication qui a expirée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
+    "FIX_MEMBERSHIP": "Votre demande d'adhésion comme membre va être renvoyée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
+    "MEMBERSHIP": "Votre demande d'adhésion comme membre va être envoyée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
+    "RENEW_MEMBERSHIP": "Votre adhésion comme membre va être renouvelée.<br/></br/><b>Êtes-vous sûr</b> de vouloir continuer ?",
+    "REVOKE_IDENTITY": "Vous allez <b>revoquer définitivement cette identité</b>.<br/><br/>La clé publique et le pseudonyme associés <b>ne pourront plus jamais être utilisés</b> (pour un compte membre). <br/></br/><b>Êtes-vous sûr</b> de vouloir révoquer définitivement ce compte ?",
+    "REVOKE_IDENTITY_2": "Cette opération est <b>irreversible</b> !<br/><br/>Êtes-vous vraiment sûr de vouloir <b>révoquer définitivement</b> ce compte ?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Votre adhésion n'a pas besoin d'être renouvelée (elle n'expirera que dans {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Êtes-vous sûr</b> de vouloir renouveler votre adhésion ?",
+    "SAVE_BEFORE_LEAVE": "Voulez-vous <b>sauvegarder vos modifications</b> avant de quitter la page ?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Modifications non enregistrées",
+    "LOGOUT": "Êtes-vous sûr de vouloir vous déconnecter ?",
+    "USE_FALLBACK_NODE": "Nœud <b>{{old}}</b> injoignable ou adresse invalide.<br/><br/>Voulez-vous temporairement utiliser le nœud <b>{{new}}</b> ?",
+    "ISSUE_524_SEND_LOG": "La transaction a été rejetée, à cause d'une anomalie connue (ticket #524) mais <b>non reproduite</b>.<br/><br/>Pour aider les développeurs à corriger cette erreur, <b>acceptez-vous la transmission de vos logs</b> par message ?<br/><small>(aucune donnée confidentielle n'est envoyée)</small>."
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Démo",
+      "MODE": "Mode démonstration",
+      "FEATURE_NOT_AVAILABLE": "Fonctionnalité <b>non disponible</b> sur ce site de démonstration.",
+      "MODE_HELP": "Cesium fonctionne en <b>mode démonstration</b> : la consultation de compte est possible, mais aucune opération ne pourra être réalisée.",
+      "INSTALL_HELP": "Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Mode monitoring",
+      "MODE_HELP": "Cesium fonctionne en <b>mode monitoring</b> : ne sont disponibles que les fonctionnalités de supervision de la monnaie.",
+      "INSTALL_HELP": "Si vous souhaitez <b>créer un compte portefeuille</b> pour envoyer ou recevoir de la monnaie, nous vous recommandons <b>d'installer votre copie</b> de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
+    }
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Fichier de révocation</b>",
+    "POPUP_REVOKE_MESSAGE": "Pour sécuriser votre compte, veuillez télécharger le <b>document de révocation de compte</b>. Il vous permettra le cas échéant d'annuler votre compte (en cas d'un vol de compte, d'un changement d'identifiant, d'un compte créé à tort, etc.).<br/><br/><b>Veuillez le stocker en lieu sûr.</b>"
+  },
+  "HELP": {
+    "TITLE": "Aide en ligne",
+    "JOIN": {
+      "SECTION": "Inscription",
+      "SALT": "L'identifiant secret est très important. Il sert à mélanger le mot de passe, avant qu'il ne serve à calculer la <span class=\"text-italic\">clé publique</span> de votre compte (son numéro) et la clé secrète pour y accéder.<br/><b>Veillez à bien la mémoriser</b>, car aucun moyen n'est actuellement prévu pour la retrouver en cas de perte.<br/>Par ailleurs, il ne peut pas être modifié sans devoir créer un nouveau compte.<br/><br/>Un bon identifiant secret doit être suffisamment long (au moins 8 caractères) et le plus original possible.",
+      "PASSWORD": "Le mot de passe est très important. Avec l'identifiant secret, il sert à calculer le numéro (la clé publique) de votre compte, et la clé secrète pour y accéder.<br/><b>Veillez à bien le mémoriser</b>, car aucun moyen n'est prévu de le retrouver en cas de perte (sauf à générer un fichier de sauvegarde).<br/>Par ailleurs, il ne peut pas être modifié sans devoir créer un nouveau compte.<br/><br/>Un bon mot de passe contient (idéalement) au moins 8 caractères, dont au moins une majuscule et un chiffre.",
+      "PSEUDO": "Le pseudonyme est utilisé uniquement dans le cas d'inscription comme <span class=\"text-italic\">membre</span>. Il est toujours associé à un portefeuille (via sa <span class=\"text-italic\">clé publique</span>).<br/>Il est publié sur le réseau, afin que les autres utilisateurs puisse l'identifier, le certifier ou envoyer de la monnaie sur le compte.<br/>Un pseudonyme doit être unique au sein des membres (<u>actuels</u> et anciens)."
+    },
+    "LOGIN": {
+      "SECTION": "Connexion",
+      "PUBKEY": "Clé publique du trousseau",
+      "PUBKEY_DEF": "La clef publique du trousseau est générée à partir des identifiants saisis (n'importe lesquels), sans pour autant qu'ils correspondent à un compte déjà utilisé.<br/><b>Vérifiez attentivement que la clé publique est celle de votre compte</b>. Dans le cas contraire, vous serez connecté à un compte probablement jamais utilisé, le risque de collision avec un compte existant étant infime.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">En savoir plus sur la cryptographie</a> par clé publique.",
+      "METHOD": "Méthodes de connexion",
+      "METHOD_DEF": "Plusieurs options sont disponibles pour vous connecter à un portefeuille :<br/> - La connexion <b>par salage (simple ou avancé)</b> mélange votre mot de passe grâce à l'identifiant secret, pour limiter les tentatives de <a href=\"https://fr.wikipedia.org/wiki/Attaque_par_force_brute\" target=\"_system\">piratage par force brute</a> (par exemple à partir de mots connus).<br/> - La connexion <b>par clé publique</b> évite de saisir vos identifiants, qui vous seront demandé seulement le moment venu lors d'une opération sur le compte.<br/> - La connexion <b>par fichier de trousseau</b> va lire les clés (publique et privée) du compte, depuis un fichier, sans besoin de saisir d'identifiants. Plusieurs formats de fichier sont possibles.",
+      "MNEMONIC": "Phrase de restauration",
+      "MNEMONIC_HELP": "TODO"
+    },
+    "GLOSSARY": {
+      "SECTION": "Glossaire",
+      "PUBKEY_DEF": "Une clé publique identifie un portefeuille de monnaie, qui peut identifier un membre ou correspondre à un portefeuille anonyme. Dans Cesium la clé publique est calculée (par défaut) grâce à l'identifiant secret et au mot de passe.<br/><a href=\"https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique\" target=\"_system\">En savoir plus sur la cryptographie</a> par clé publique.",
+      "MEMBER": "Membre",
+      "MEMBER_DEF": "Un membre est une personne humaine physique et vivante, désireuse de participer librement à la communauté monétaire. Elle co-produit un dividende universel, suivant une période et un montant tels que définis dans les <span class=\"text-italic\">règles de la monnaie</span>",
+      "CURRENCY_RULES": "Règles de la monnaie",
+      "CURRENCY_RULES_DEF": "Les règles de la monnaie sont définies une fois pour toutes. Elle fixe le fonctionnement de la monnaie : le calcul du dividende universel, le nombre de certifications nécessaire pour être membre, le nombre de certification maximum qu'un membre peut donner, etc. <a href=\"#/app/currency\">Voir les règles actuelles</a>.<br/>La non modification des règles dans le temps est possible par l'utilisation d'une <span class=\"text-italic\">BlockChain</span> qui porte et exécute ces règles, et en vérifie constamment la bonne application.",
+      "BLOCKCHAIN": "Chaîne de blocs (<span class=\"text-italic\">Blockchain</span>)",
+      "BLOCKCHAIN_DEF": "La BlockChain est un système décentralisé, qui, dans le cas de Duniter, sert à porter et exécuter les <span class=\"text-italic\">règles de la monnaie</span>.<br/><a href=\"https://duniter.org/fr/comprendre/\" target=\"_system\">En savoir plus sur Duniter</a> et le fonctionnement de sa blockchain.",
+      "UNIVERSAL_DIVIDEND_DEF": "Le Dividende Universel (DU) est la quantité de monnaie co-créée par chaque membre, suivant la période et le calcul définis dans les <span class=\"text-italic\">règles de la monnaie</span>.<br/>A chaque échéance, les membres reçoivent sur leur compte la même quantité de nouvelle monnaie.<br/><br/>Le DU subit une croissance régulière, pour rester juste entre les membres (actuels et à venir), calculée en fonction de l'espérance de vie moyenne, telle que démontré dans la Théorie Relative de la Monnaie (TRM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">En savoir plus sur la TRM</a> et les monnaies libres.",
+      "WOT": "Toile de Confiance (TdC)",
+      "WOT_DEF": "La Toile de Confiance est constituée de l'ensemble des membres de la monnaie, et des liens de certification qui les relient.",
+      "DISTANCE_RULE": "Règle de distance",
+      "DISTANCE_RULE_DEF": "La règle de distance de la Toile de Confiance définie <b>une distance maximale à respecter</b> entre un postulant et un nombre minimum de membres référents (ou membres centraux). Cette distance est calculée en utilisant les liens de certification."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "Le menu <b>{{'MENU.CURRENCY'|translate}}</b> permet la consultation des <b>règles de la monnaie</b> et de son état.",
+      "CURRENCY_WOT": "Le <b>nombre de membres</b> montre l'importance de la communauté et permet de <b>suivre son évolution</b>.",
+      "CURRENCY_MASS": "Suivez ici la <b>quantité totale de monnaie</b> existante et sa <b>répartition moyenne</b> par membre.<br/><br/>Ceci permet de juger de l'<b>importance d'un montant</b>, vis à vis de ce que <b>possède les autres</b> sur leur compte (en moyenne).",
+      "CURRENCY_UNIT_RELATIVE": "L'unité utilisée (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifie que les montants en {{currency|capitalize}} ont été divisés par le <b>Dividende Universel</b> (DU).<br/><br/><small>Cette unité relative est <b>pertinente</b>, car stable malgré la quantitié de monnaie qui augmente en permanence.</small>",
+      "CURRENCY_CHANGE_UNIT": "L'option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permet de <b>changer d'unité</b>, pour visualiser les montants <b>directement en {{currency|capitalize}}</b> (plutôt qu'en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "L'option <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permet de <b>changer d'unité</b>, pour visualiser les montants en &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, c'est-à-dire relativement au Dividende Universel (le montant co-produit par chaque membre).",
+      "CURRENCY_RULES": "Les <b>règles</b> de la monnaie fixent son fonctionnement <b>exact et prévisible</b>.<br/><br/>Véritable ADN de la monnaie, elles rendent son code monétaire <b>lisible et transparent</b>.",
+      "MENU_BTN_NETWORK": "Le menu <b>{{'MENU.NETWORK'|translate}}</b> permet la consultation de l'état du réseau.",
+      "NETWORK_BLOCKCHAIN": "Toutes les opérations de la monnaie sont enregistrées dans un grand livre de compte <b>public et infalsifiable</b>, appelé aussi <b>chaine de blocs</b> (<em>BlockChain</em> en anglais).",
+      "NETWORK_PEERS": "Les <b>nœuds</b> visibles ici correspondent aux <b>ordinateurs qui actualisent et contrôlent</b> la chaine de blocs.<br/><br/>Plus il y a de nœuds, plus la monnaie a une gestion <b>décentralisée</b> et digne de confiance.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "Ce <b>numéro</b> (en vert) indique le <b>dernier bloc validé</b> pour ce nœud (dernière page écrite dans le grand livre de comptes).<br/><br/>La couleur verte indique que ce bloc est également validé par <b>la plupart des autres nœuds</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Chaque membre</b>, équipé d'un ordinateur avec Internet, <b>peut participer en ajoutant un nœud</b>. Il suffit d'<b>installer le logiciel Duniter</b> (libre et gratuit). <a href=\"{{installDocUrl}}\" target=\"_system\">Voir le manuel d'installation &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "Le menu <b>{{'MENU.ACCOUNT'|translate}}</b> permet d'accéder à la gestion de votre compte.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Consultez ici l'état de votre compte et les informations sur vos certifications.",
+      "WALLET_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos certifications (reçues et émises).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications reçues</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications émises</b>.",
+      "WALLET_BALANCE": "Le <b>solde</b> de votre compte s'affiche ici.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>L'unité utilisée (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifie que le montant en {{currency|capitalize}} a été divisé par le <b>Dividende Universel</b> (DU) co-créé par chaque membre.<br/><br/>Actuellement 1 DU vaut {{currentUD|formatInteger}} {{currency|capitalize}}s.",
+      "WALLET_BALANCE_CHANGE_UNIT": "Vous pourrez <b>changer l'unité</b> d'affichage des montants dans les <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Par exemple pour visualiser les montants <b>directement en {{currency|capitalize}}</b>, plutôt qu'en unité relative.",
+      "WALLET_PUBKEY": "Voici la clé publique de votre compte. Vous pouvez la communiquer à un tiers afin qu'il identifie plus simplement votre compte.",
+      "WALLET_SEND": "Effectuer un paiement en quelques clics.",
+      "WALLET_SEND_NO_MONEY": "Effectuer un paiement en quelques clics.<br/>(Votre solde ne le permet pas encore)",
+      "WALLET_OPTIONS": "Ce bouton permet l'accès aux <b>actions d'adhésion</b> et de sécurité.<br/><br/>N'oubliez pas d'y jeter un oeil !",
+      "WALLET_RECEIVED_CERTS": "S'affichera ici la liste des personnes qui vous ont certifié.",
+      "WALLET_CERTIFY": "Le bouton <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permet de sélectionner une identité et de la certifier.<br/><br/>Seuls des utilisateurs <b>déjà membres</b> peuvent en certifier d'autres.",
+      "WALLET_CERT_STOCK": "Votre stock de certifications (émises) est limité à <b>{{sigStock}} certifications</b>.<br/><br/>Ce stock se renouvelle avec le temps, au fur et à mesure que les certifications s'invalident.",
+      "MENU_BTN_WALLETS": "Le menu <b>{{'MENU.WALLETS'|translate}}</b> permet d'ajouter des portefeuilles supplémentaires que vous gérez.",
+      "MENU_BTN_TX": "Le menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> permet de consulter votre solde, l'historique vos transactions et d'envoyer un paiement.",
+      "MENU_BTN_WOT": "Le menu <b>{{'MENU.WOT'|translate}}</b> permet de rechercher parmi les <b>utilisateurs</b> de la monnaie (membres ou non).",
+      "WOT_SEARCH_TEXT_XS": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique).<br/><br/>La recherche se lancera automatiquement.",
+      "WOT_SEARCH_TEXT": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique). <br/><br/>Appuyer ensuite sur <b>Entrée</b> pour lancer la recherche.",
+      "WOT_SEARCH_RESULT": "Visualisez la fiche détaillée simplement en <b>cliquant</b> sur une ligne.",
+      "WOT_VIEW_CERTIFICATIONS": "La ligne <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> montre combien de membres ont validé cette identité.<br/><br/>Ces certifications attestent que le compte appartient à <b>une personne humaine vivante</b> n'ayant <b>aucun autre compte membre</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "Il faut au moins <b>{{sigQty}} certifications</b> pour devenir membre et recevoir le <b>Dividende Universel</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Un clic ici permet d'ouvrir <b>la liste de toutes les certifications</b> de l'identité (reçues et émises).",
+      "WOT_VIEW_CERTIFY": "Le bouton <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permet d'ajouter votre certification à cette identité.",
+      "CERTIFY_RULES": "<b>Attention :</b> Ne certifiez que des <b>personnes physiques vivantes</b>, ne possédant aucun autre compte membre.<br/><br/>La sécurité de la monnaie dépend de la vigilance de chacun !",
+      "MENU_BTN_SETTINGS": "Les <b>{{'MENU.SETTINGS'|translate}}</b> vous permettront de configurer l'application.",
+      "HEADER_BAR_BTN_PROFILE": "Cliquez ici pour accéder à votre <b>profil utilisateur.</b>",
+      "SETTINGS_CHANGE_UNIT": "Vous pourrez <b>changer d'unité d'affichage</b> des montants en cliquant ci-dessus.<br/><br/>- Désactivez l'option pour un affichage des montants en {{currency|capitalize}}.<br/>- Activez l'option pour un affichage relatif en {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (tous les montants seront <b>divisés</b> par le Dividende Universel courant).",
+      "END_LOGIN": "Cette visite guidée est <b>terminée</b> !<br/><br/>Bonne continuation à vous, dans le nouveau monde de l'<b>économie libre</b> !",
+      "END_NOT_LOGIN": "Cette visite guidée est <b>terminée</b> !<br/><br/>Si vous souhaitez rejoindre la monnaie {{currency|capitalize}}, il vous suffira de cliquer sur <b>{{'LOGIN.CREATE_FREE_ACCOUNT'|translate}}</b> ci-dessous.",
+      "END_READONLY": "Cette visite guidée est <b>terminée</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/it-IT-2.0.0-alpha42.json b/ios/App/public/assets/i18n/it-IT-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..74727b91dfa998e962618ccdd9ffbb6b8005c97b
--- /dev/null
+++ b/ios/App/public/assets/i18n/it-IT-2.0.0-alpha42.json
@@ -0,0 +1,936 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "build {{build}}",
+    "PUBKEY": "Chiave pubblica",
+    "MEMBER": "Membro",
+    "BLOCK": "Blocco",
+    "BTN_OK": "OK",
+    "BTN_YES": "Sì",
+    "BTN_NO": "No",
+    "BTN_SEND": "Inviare",
+    "BTN_SEND_MONEY": "Effettuare un pagamento",
+    "BTN_SEND_MONEY_SHORT": "Pagare",
+    "BTN_SAVE": "Salvare",
+    "BTN_YES_SAVE": "Sì, salvare",
+    "BTN_YES_CONTINUE": "Sì, continuare",
+    "BTN_SHOW": "Mostrare",
+    "BTN_SHOW_PUBKEY": "Mostrare chiave pubblica",
+    "BTN_RELATIVE_UNIT": "Mostra importi in DU?",
+    "BTN_BACK": "Indietro",
+    "BTN_NEXT": "Avanti",
+    "BTN_IMPORT": "Importare",
+    "BTN_CANCEL": "Cancellare",
+    "BTN_CLOSE": "Chiudere",
+    "BTN_LATER": "Più tardi",
+    "BTN_LOGIN": "Accedi",
+    "BTN_LOGOUT": "Esci",
+    "BTN_ADD_ACCOUNT": "Nuovo conto",
+    "BTN_SHARE": "Condividere",
+    "BTN_EDIT": "Modificare",
+    "BTN_DELETE": "Eliminare",
+    "BTN_ADD": "Aggiungere",
+    "BTN_SEARCH": "Cercare",
+    "BTN_REFRESH": "Aggiornare",
+    "BTN_RETRY": "Riprovare",
+    "BTN_START": "Iniziare",
+    "BTN_CONTINUE": "Continuare",
+    "BTN_CREATE": "Creare",
+    "BTN_UNDERSTOOD": "Ho capito",
+    "BTN_OPTIONS": "Opzioni",
+    "BTN_HELP_TOUR": "Mostrami le funzionalità",
+    "BTN_HELP_TOUR_SCREEN": "Scoprire questa schermata",
+    "BTN_DOWNLOAD": "Scaricare",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Scaricare estratto conto",
+    "BTN_MODIFY": "Modificare",
+    "CHOOSE_FILE": "Trascina un file <br/>o clicca per selezionare",
+    "DAYS": "Giorni",
+    "NO_ACCOUNT_QUESTION": "Non sei ancora membro? Registrati subito!",
+    "SEARCH_NO_RESULT": "Nessun risultato trovato",
+    "LOADING": "Caricando...",
+    "LOADING_WAIT": "Caricando...<br/><small>(Cesium interroga il nodo nodo Duniter)</small>",
+    "SEARCHING": "Cercando...",
+    "FROM": "Da",
+    "TO": "A",
+    "COPY": "Copiare",
+    "LANGUAGE": "Lingua",
+    "UNIVERSAL_DIVIDEND": "Dividendo Universale",
+    "UD": "UD",
+    "DATE_PATTERN": "DD/MM/YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD/MM/YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM/YYYY",
+    "EMPTY_PARENTHESIS": "(empty)",
+    "UID": "Pseudonimo",
+    "ENABLE": "Attivato",
+    "DISABLE": "Disattivato",
+    "RESULTS_LIST": "Risultati:",
+    "RESULTS_COUNT": "{{count}} risultati",
+    "EXECUTION_TIME": "Eseguito in {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Mostrare valori in modo trasparente?",
+    "POPOVER_ACTIONS_TITLE": "Opzioni",
+    "POPOVER_FILTER_TITLE": "Filtri",
+    "SHOW_MORE": "Mostrare di più",
+    "SHOW_MORE_COUNT": "(limite attuale di {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Condividere",
+      "SHARE_ON_TWITTER": "Condividere su Twitter",
+      "SHARE_ON_FACEBOOK": "Condividere su Facebook",
+      "SHARE_ON_DIASPORA": "Condividere su Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Condividere su Google+"
+    },
+    "FILE": {
+      "DATE": "Data:",
+      "TYPE": "Tipo:",
+      "SIZE": "Dimensioni del file:",
+      "VALIDATING": "Validazione in corso..."
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Scegliere un file:",
+    "BTN_PICTURE_GALLERY": "Galleria",
+    "BTN_PICTURE_CAMERA": "<b>Camera</b>"
+  },
+  "MENU": {
+    "HOME": "Inizio",
+    "WOT": "Rubrica",
+    "CURRENCY": "Moneta",
+    "ACCOUNT": "Il mio conto",
+    "WALLETS": "I miei portafogli",
+    "SETTINGS": "Impostazioni",
+    "NETWORK": "Rete",
+    "TRANSACTIONS": "I miei pagamenti"
+  },
+  "ABOUT": {
+    "TITLE": "A proposito",
+    "LICENSE": "<b>Free/libre software</b> (License GNU AGPLv3).",
+    "CODE": "Codice sorgente:",
+    "OFFICIAL_WEB_SITE": "Sito ufficiale:",
+    "DEVELOPERS": "Sviluppatori:",
+    "FORUM": "Forum:",
+    "PLEASE_REPORT_ISSUE": "Non esitare a commentarci delle anomalie riscontrate",
+    "REPORT_ISSUE": "Segnalare un bug"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Benvenuti al Cesium App!",
+    "WELCOME_READONLY": "Benvenuti nel Cesium <span class='badge badge-balanced'>Monit</span>!",
+    "MESSAGE": "Scambiate in moneta libera {{currency}}",
+    "MESSAGE_READONLY": "Monitoraggio in tempo reale della moneta libera {{currency}}",
+    "BTN_CURRENCY": "Esplorare la moneta {{currency}}",
+    "BTN_ABOUT": "A proposito",
+    "BTN_HELP": "Aiuto",
+    "BTN_NETWORK": "Stato della rete",
+    "FREE_SOFTWARE": "Free software",
+    "FORK_ME": "Fork me!",
+    "SHOW_LICENSE": "Mostra licenza",
+    "REPORT_ISSUE": "Segnalare un bug",
+    "NOT_YOUR_ACCOUNT_QUESTION": "Non sei proprietario del conto <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
+    "BTN_CHANGE_ACCOUNT": "Disconettere questo conto",
+    "CONNECTION_ERROR": "Nodo <b>{{server}}</b> irraggiungibile o indirizzo non valido. <br/><br/> Verifica tua connessione or cambia nodo. <a class=\"positive\" ng-click=\"doQuickFix('settings')\">nell impostazioni. </a>.",
+    "SHOW_ALL_FEED": "Mostra tutto",
+    "READ_MORE": "Leggi di più",
+    "FEED_SOURCE": "Fonte"
+  },
+  "SETTINGS": {
+    "TITLE": "Impostazioni",
+    "DISPLAY_DIVIDER": "Schermo",
+    "STORAGE_DIVIDER": "Salvataggio",
+    "NETWORK_SETTINGS": "Rete",
+    "PEER": "Indirizzo del nodo Duniter",
+    "PEER_SHORT": "Indirizzo del nodo",
+    "PEER_CHANGED_TEMPORARY": "Indirizzo usato per un tempo determinato",
+    "PERSIST_CACHE": "Conserva i dati di navigazione (sperimentale)",
+    "USE_LOCAL_STORAGE": "Abilitare local storage",
+    "USE_LOCAL_STORAGE_HELP": "Permette di salvare tue impostazioni",
+    "ENABLE_HELPTIP": "Abilitare consigli dinamici",
+    "ENABLE_UI_EFFECTS": "Abilitare effetti visivi",
+    "HISTORY_SETTINGS": "Mio conto",
+    "DISPLAY_UD_HISTORY": "Mostrare dividendi prodotti?",
+    "AUTHENTICATION_SETTINGS": "Autenticazione",
+    "KEEP_AUTH": "Scadenza dell'autenticazione",
+    "KEEP_AUTH_SHORT": "Scadenza",
+    "KEEP_AUTH_HELP": "Definire quando l'autenticazione verrà eliminata dalla memoria.",
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Dopo ogni operazione",
+      "SECONDS": "Dopo {{value}}s d'inattività",
+      "MINUTE": "Dopo{{value}}min d'inattività",
+      "MINUTES": "Dopo {{value}}min d'inattività",
+      "HOUR": "Dopo {{value}}h d'inattività",
+      "ALWAYS": "Alla fine della sessione"
+    },
+    "REMEMBER_ME": "Ricordarsi di me?",
+    "REMEMBER_ME_HELP": "Rimanere identificato da una sessione all'altra, conservando la chiave localmente.",
+    "PLUGINS_SETTINGS": "Estensioni",
+    "BTN_RESET": "Ripristina valori predefiniti",
+    "EXPERT_MODE": "Abilitare modalità eseperto",
+    "EXPERT_MODE_HELP": "Permette di vedere più dettagli",
+    "POPUP_PEER": {
+      "TITLE": "Nodo Duniter",
+      "HOST": "Indirizzo",
+      "HOST_HELP": "Indirizzo: server:port",
+      "USE_SSL": "Cifrato?",
+      "USE_SSL_HELP": "(Cifratura SSL)",
+      "BTN_SHOW_LIST": "Lista dei nodi"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hash: {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Blocco #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Blocco attuale",
+      "TITLE": "Blocco #{{number|formatInteger}}",
+      "COMPUTED_BY": "Calcolato da",
+      "SHOW_RAW": "Mostrare dati grezzi",
+      "TECHNICAL_DIVIDER": "Informazioni tecniche",
+      "VERSION": "Versione di formato",
+      "HASH": "Hash calcolato",
+      "UNIVERSAL_DIVIDEND_HELP": "Moneta co-prodotta da ciasciuno dei {{membersCount}} membri",
+      "EMPTY": "Nessun dato in questo blocco",
+      "POW_MIN": "Difficoltà minima",
+      "POW_MIN_HELP": "Difficoltà imposta nel calcolo del hash",
+      "DATA_DIVIDER": "Dati",
+      "IDENTITIES_COUNT": "Nuove identità",
+      "JOINERS_COUNT": "Nuovi membri",
+      "ACTIVES_COUNT": "Rinnovi",
+      "ACTIVES_COUNT_HELP": "Membri che hanno rinnovato la loro presenza nella rete",
+      "LEAVERS_COUNT": "Abbandoni",
+      "LEAVERS_COUNT_HELP": "Membri che hanno abbandonato la rete",
+      "EXCLUDED_COUNT": "Membri esclusi",
+      "EXCLUDED_COUNT_HELP": "Vecchi membri, esclusi per certificazione non rinnovata o soglia di certificazioni non raggiunta.",
+      "REVOKED_COUNT": "Identità revocate",
+      "REVOKED_COUNT_HELP": "Può essere che queste identità non siano più membri",
+      "TX_COUNT": "Transazioni",
+      "CERT_COUNT": "Certificazioni",
+      "TX_TO_HIMSELF": "Cambio",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Sbloccare condizioni",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "e",
+        "OR": "o"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>Firma</b> della chive pubblica",
+        "XHX": "<b>Password</b>, incluso SHA256 =",
+        "CSV": "Bloccato per",
+        "CLTV": "Bloccato fino a"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blocchi",
+      "NO_BLOCK": "Nessun blocco",
+      "LAST_BLOCKS": "Ultimi blocchi:",
+      "BTN_COMPACT": "Compact"
+    }
+  },
+  "CURRENCY": {
+    "VIEW": {
+      "TITLE": "Moneta",
+      "TAB_CURRENCY": "Moneta",
+      "TAB_WOT": "Rete di Fiducia",
+      "TAB_NETWORK": "Rete",
+      "TAB_BLOCKS": "Blocchi",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency|capitalize}} è <b>una moneta libera</b>, {{firstBlockTime | formatFromNow}}. La rete comprende <b>{{N}} membri </b>, che produccono e ricevono un <a ng-click=\"showHelpModal('ud')\">Dividendo Universale</a> (DU), ogni {{dt | formatPeriod}}.",
+      "NETWORK_RULES_DIVIDER": "Regole della rete",
+      "CURRENCY_NAME": "Nome della moneta",
+      "MEMBERS": "Numero di membri",
+      "MEMBERS_VARIATION": "Variazione da {{duration|formatDuration}} (dall' ultimo UD)",
+      "MONEY_DIVIDER": "Moneta",
+      "MASS": "Massa monetaria",
+      "SHARE": "Quantità pro capite",
+      "UD": "Dividendo universale",
+      "C_ACTUAL": "Crescita attuale",
+      "MEDIAN_TIME": "Tempo attuale della blockchain",
+      "POW_MIN": "Difficoltà comune",
+      "MONEY_RULES_DIVIDER": "Regole della moneta",
+      "C_RULE": "Obiettivo teorico di crescità",
+      "UD_RULE": "Dividendo universale (formula)",
+      "DT_REEVAL": "Periodo tra due rivalutazioni del DU",
+      "REEVAL_SYMBOL": "rival",
+      "DT_REEVAL_VALUE": "Ogni <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",
+      "UD_REEVAL_TIME0": "Data della prima rivalutazione del DU",
+      "SIG_QTY_RULE": "Numero di certificazioni richieste per diventare membro",
+      "SIG_STOCK": "Numero massimo di certificazioni inviate da un membro",
+      "SIG_PERIOD": "Tempo minimo tra 2 certificazioni inviate da un unico membro.",
+      "SIG_WINDOW": "Periodo massimo prima che una candidatura a membro venga studiata",
+      "SIG_VALIDITY": "Durata di vita di una certificazione convalidata",
+      "MS_WINDOW": "Periodo massimo prima che una certificazione in attesa sia convalidata",
+      "MS_VALIDITY": "Durata di vita di un'adesione convalidata",
+      "STEP_MAX": "Distanza massima tra un nuovo membro e ogni membro referente.",
+      "WOT_RULES_DIVIDER": "Regole della Rete di Fiducia",
+      "SENTRIES": "Numero di certificazioni (date <b>e</b> ricevute) per diventare membro referente ",
+      "SENTRIES_FORMULA": "Numero di certificazioni necessarie per diventare membro (formula)",
+      "XPERCENT": "Percentuale minima di membri referenti per rispettare la regola di distanza tra i membri",
+      "AVG_GEN_TIME": "Tempo medio tra due blocchi",
+      "CURRENT": "attuale",
+      "MATH_CEILING": "TETTO",
+      "DISPLAY_ALL_RULES": "Mostrare tutte le regole?",
+      "BTN_SHOW_LICENSE": "Mostrare licenza",
+      "WOT_DIVIDER": "Rete di Fiducia"
+    },
+    "LICENSE": {
+      "TITLE": "Licenza attuale",
+      "BTN_DOWNLOAD": "Scaricare il file",
+      "NO_LICENSE_FILE": "File di licenza non trovato."
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Blockchain tempo",
+      "LOADING_PEERS": "Caricando la lista dei nodi...",
+      "NODE_ADDRESS": "Indirizzo del nodo",
+      "SOFTWARE": "Software",
+      "WARN_PRE_RELEASE": "Pre-versione (ultima versione stabile: <b>{{version}}</b>)",
+      "WARN_NEW_RELEASE": "Versione <b>{{version}}</b> disponibile",
+      "WS2PID": "Identificativo:",
+      "PRIVATE_ACCESS": "Accesso privato",
+      "POW_PREFIX": "Prefisso Prova di Lavoro:",
+      "ENDPOINTS": {
+        "BMAS": "Endpoint sicuro (SSL)",
+        "BMATOR": "Interfaccia rete TOR",
+        "WS2P": "Interfaccia WS2P",
+        "ES_USER_API": "Cesium+ data node"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "I nodi non-SSL hanno un display semplificato perche Cesium funziona in modalità HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Nodi",
+    "SIGNED_ON_BLOCK": "Firmato nel blocco",
+    "MIRROR": "Specchio",
+    "MIRRORS": "Specchi",
+    "MIRROR_PEERS": "Nodi specchio",
+    "PEER_LIST": "Lista dei nodi",
+    "MEMBERS": "Membri",
+    "MEMBER_PEERS": "Nodi membri",
+    "ALL_PEERS": "Tutti i nodi",
+    "DIFFICULTY": "Difficoltà",
+    "API": "API",
+    "CURRENT_BLOCK": "Blocco #",
+    "POPOVER_FILTER_TITLE": "Filtro",
+    "OFFLINE": "Sconessi",
+    "OFFLINE_PEERS": "Nodi sconessi",
+    "BTN_SHOW_PEER": "Mostrare Nodo",
+    "VIEW": {
+      "TITLE": "Nodo",
+      "OWNER": "Proprietà di",
+      "SHOW_RAW_PEERING": "Vedere il documento di peering",
+      "SHOW_RAW_CURRENT_BLOCK": "Vedere l'utimo blocco (formatto grezzo)",
+      "LAST_BLOCKS": "Ultimi blocchi",
+      "KNOWN_PEERS": "Nodi conosciuti:",
+      "GENERAL_DIVIDER": "Informazioni generali",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Impossibile ottenere i dati del nodo, tempo di attesa scaduto.",
+        "LOADING_NODE_ERROR": "Impossibile ottenere i dati del nodo"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Cercare (membro o chiave pubblica)",
+    "SEARCH_INIT_PHASE_WARNING": "La ricerca per le certificazioni in attesa <b>può essere lunga</b> durante la fase di pre-certificazione. La preghiamo di attendere...",
+    "REGISTERED_SINCE": "Certificato dal",
+    "REGISTERED_SINCE_BLOCK": "Certificato dal blocco #",
+    "NO_CERTIFICATION": "Nessuna certificazione valida",
+    "NO_GIVEN_CERTIFICATION": "Nessuna certificazione data",
+    "NOT_MEMBER_PARENTHESIS": "(non-membro)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(identità revocata)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(Cancellazione dell'identità in corso)",
+    "EXPIRE_IN": "Scade",
+    "NOT_WRITTEN_EXPIRE_IN": "Scadenza <br/> ",
+    "EXPIRED": "Scaduto",
+    "PSEUDO": "Pseudonimo",
+    "SIGNED_ON_BLOCK": "Emessa nel blocco #{{block}}",
+    "WRITTEN_ON_BLOCK": "Scritta nel blocco #{{block}}",
+    "GENERAL_DIVIDER": "Informazioni generali",
+    "NOT_MEMBER_ACCOUNT": "Conto non-membro",
+    "NOT_MEMBER_ACCOUNT_HELP": "Questo è un portafoglio semplice, senza richiesta di certificazione emessa.",
+    "TECHNICAL_DIVIDER": "Dati tecnici",
+    "BTN_CERTIFY": "Certificare",
+    "BTN_YES_CERTIFY": "Si, certificare",
+    "BTN_SELECT_AND_CERTIFY": "Nuova certificazione",
+    "ACCOUNT_OPERATIONS": "Operazioni sul conto",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identità {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Annuario",
+      "NEWCOMERS": "Nuovi membri:",
+      "NEWCOMERS_COUNT": "{{count}} membri",
+      "PENDING": "Registrazioni in attesa",
+      "PENDING_COUNT": "{{count}} inscrizioni in attesa",
+      "REGISTERED": "Registrato {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Membro dal {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Ultimi membri",
+      "BTN_PENDING": "Registrazioni in attesa",
+      "SHOW_MORE": "Vedere di più",
+      "SHOW_MORE_COUNT": "(limite attuale di {{limit}})",
+      "NO_PENDING": "Nessuna certificazione in attesa.",
+      "NO_NEWCOMERS": "Nessun membro."
+    },
+    "CONTACTS": {
+      "TITLE": "Contatti"
+    },
+    "MODAL": {
+      "TITLE": "Ricerca"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificazioni",
+      "SUMMARY": "Certificazioni ricevute",
+      "LIST": "Dettagli delle certificazioni ricevute",
+      "PENDING_LIST": "Certificazioni in attesa",
+      "RECEIVED": "Certificazioni ricevute",
+      "RECEIVED_BY": "Certifications ricevute da {{uid}}",
+      "ERROR": "Certificazioni ricevute per errore",
+      "SENTRY_MEMBER": "Membro referente"
+    },
+    "OPERATIONS": {
+      "TITLE": "Operazioni"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificazioni inviate",
+      "SUMMARY": "Certificazioni inviate",
+      "LIST": "Dettagli delle certificazioni inviate",
+      "PENDING_LIST": "Certificazioni ",
+      "SENT": "Certificazioni inviate",
+      "SENT_BY": "Certificazioni inviate da {{uid}}",
+      "ERROR": "Certificazioni inviate per errore"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-log-in\"></i> Accedi",
+    "SCRYPT_FORM_HELP": "Accedi con tuoi dati <br> Ricordati di verificare che stai utilizzando la chiave del tuo conto.",
+    "PUBKEY_FORM_HELP": "Scrivi qui la tua chiave pubblica:",
+    "FILE_FORM_HELP": "Scegliere un portachiavi da utilizzare:",
+    "SCAN_FORM_HELP": "Scansiona il codice QR di un portafoglio.",
+    "SALT": "Identificativo segreto",
+    "SALT_HELP": "Identificativo segreto",
+    "SHOW_SALT": "Mostrare identificativo segreto?",
+    "PASSWORD": "Password",
+    "PASSWORD_HELP": "Password",
+    "PUBKEY_HELP": "Chiave pubblica, pseudonimo",
+    "NO_ACCOUNT_QUESTION": "Non hai ancora un conto?",
+    "HAVE_ACCOUNT_QUESTION": "Hai già un conto?",
+    "CREATE_ACCOUNT": "Creare un conto",
+    "CREATE_FREE_ACCOUNT": "Crea un conto gratuito",
+    "FORGOTTEN_ID": "Non ricordi la password?",
+    "ASSOCIATED_PUBKEY": "Chiave pubblica:",
+    "BTN_METHODS": "Altri metodi",
+    "BTN_METHODS_DOTS": "Cambiare metodo...",
+    "METHOD_POPOVER_TITLE": "Metodi",
+    "MEMORIZE_AUTH_FILE": "Memorizzare questo portachiavi per la durata di questa sessione",
+    "SCRYPT_PARAMETERS": "Parametri (Scrypt) :",
+    "AUTO_LOGOUT": {
+      "TITLE": "Informazioni",
+      "MESSAGE": "<i class=\"ion-android-time\"></i> Sei stato <b>sconesso/ b> automaticamente, per un periodo di inattività prolongata",
+      "BTN_RELOGIN": "Accedi",
+      "IDLE_WARNING": "Sarai disconesso in... {{countdown}}"
+    },
+    "METHOD": {
+      "SCRYPT_DEFAULT": "Accesso standard (imp. predefinita)",
+      "SCRYPT_ADVANCED": "Accesso avanzato",
+      "FILE": "File del portachiavi",
+      "PUBKEY": "Chiave pubblica soltanto",
+      "SCAN": "Scansiona un codice QR"
+    },
+    "SCRYPT": {
+      "SIMPLE": "Accesso rapido",
+      "DEFAULT": "Accesso standard",
+      "SECURE": "Accesso sicuro",
+      "HARDEST": "Accesso più sicuro",
+      "EXTREME": "Accesso estremo",
+      "USER": "Accesso personalizzato",
+      "N": "N (Loop):",
+      "r": "r (RAM):",
+      "p": "p (CPU):"
+    },
+    "FILE": {
+      "HELP": "Formato del file atteso: <b>.dunikey</b> (type PubSec). Altri formati in sviluppo (EWIF, WIF)."
+    }
+  },
+  "AUTH": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Autenticazione",
+    "BTN_AUTH": "Autenticarsi",
+    "GENERAL_HELP": "Autenticati :",
+    "EXPECTED_UID_HELP": "Effettua il login nel conto <i class=\"ion-person\"></i> {{uid}}:",
+    "EXPECTED_PUBKEY_HELP": "Si prega di autenticarsi nel portafoglio <i class=\"ion-key\"></i> {{pubkey|formatPubkey}}:",
+    "SCAN_FORM_HELP": "Scansiona il codice QR della <b>chiave pubblica</b> del portafoglio."
+  },
+  "ACCOUNT": {
+    "TITLE": "Il mio conto",
+    "BALANCE": "Saldo",
+    "LAST_TX": "Ultime transazioni",
+    "BALANCE_ACCOUNT": "Saldo del conto",
+    "NO_TX": "Nessuna transazione",
+    "SHOW_MORE_TX": "Mostrare di più",
+    "SHOW_ALL_TX": "Mostrare tutte",
+    "TX_FROM_DATE": "(limite attuale del {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Transazioni in attesa",
+    "VALIDATING_TX": "Transazioni in corso di convalida",
+    "ERROR_TX": "Transazioni non eseguite",
+    "ERROR_TX_SENT": "Transazioni inviate",
+    "PENDING_TX_RECEIVED": "Transazioni in attesa di recezione",
+    "EVENTS": "Eventi",
+    "WAITING_MEMBERSHIP": "Richiesta di certificazione inviata. In attesa di validazione.",
+    "WAITING_CERTIFICATIONS": "Hai bisogno di {{needCertificationCount}} certificazione(i) per diventare membro.",
+    "WILL_MISSING_CERTIFICATIONS": "Ti serviranno a breve <b>di certificazioni</b> (occorrono almeno altre{{willNeedCertificationCount}} certificazioni)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "La tua certificazione <b>scadrà{{membershipExpiresIn|formatDurationTo}}</b>. Ricordati di <a ng-click=\"doQuickFix('renew')\">rinnovarla</a> prima.",
+    "NEED_RENEW_MEMBERSHIP": "Non sei più un membro perchè la tua adesione <b>è scaduta</b>. Ricordati di <a ng-click=\"doQuickFix('renew')\">rinnovare la tua iscrizione</a>.",
+    "NO_WAITING_MEMBERSHIP": "Nessuna domanda di adesione in attesa. Se desideri <b>diventare membro</b>, ricordati di <a ng-click=\"doQuickFix('membership')\">inviare tua domanda di adesione</a>.",
+    "CERTIFICATION_COUNT": "Certificazioni ricevute",
+    "CERTIFICATION_COUNT_SHORT": "Certificazioni",
+    "SIG_STOCK": "Stock di certificazioni da inviare",
+    "BTN_RECEIVE_MONEY": "Ricevere",
+    "BTN_SELECT_ALTERNATIVES_IDENTITIES": "Usare un'altra identità..",
+    "BTN_FIX_MEMBERSHIP": "Invia nuovamente una richiesta di adesione...",
+    "BTN_MEMBERSHIP_RENEW": "Rinnovare adesione",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Rinnovare adesione ...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Revocare adesione...",
+    "BTN_SECURITY_DOTS": "Login e securità...",
+    "BTN_SHOW_DETAILS": "Visualizza dati tecnici",
+    "LOCKED_OUTPUTS_POPOVER": {
+      "TITLE": "Importo bloccato",
+      "DESCRIPTION": "Ecco le condizioni per sbloccare questo importo:",
+      "DESCRIPTION_MANY": "Questa transazione è fatta da diverse parti, queste sono le condizioni di sblocco:",
+      "LOCKED_AMOUNT": "Importo bloccato:"
+    },
+    "NEW": {
+      "TITLE": "Registrazione",
+      "INTRO_WARNING_TIME": "Crearsi un conto su {{name|capitalize}} è molto semplice. È consigliato prendere il giusto tempo per farlo correttamente (per evitare di dimenticare passwords, pseudonimi etc.).",
+      "INTRO_WARNING_SECURITY": "Occorre verificare che l'hardware che stai utilizzando (computer, tablet, cellulare) <b>è sicuro e affidabile</b>.",
+      "INTRO_WARNING_SECURITY_HELP": "Anti-virus aggiornato, firewall abilitato, sessione protteta da una password o codice PIN...",
+      "INTRO_HELP": "Cliccare <b> {{'COMMON.BTN_START'|translate}}</b> per avviare la creazione del conto. Ti accompagniamo passo a passo.",
+      "REGISTRATION_NODE": "La tua iscrizione verrà salvata dal nodo Duniter <b>{{server}}</b>, è verrà poi condivisa nella rete della moneta.",
+      "REGISTRATION_NODE_HELP": "Se non ti fidi di questo nodo, per favore cambialo <a ng-click=\"doQuickFix('settings')\">nelle impostazioni/a> di Cesium.",
+      "SELECT_ACCOUNT_TYPE": "Scegliere un tipo di conto:",
+      "MEMBER_ACCOUNT": "Conto membro",
+      "MEMBER_ACCOUNT_TITLE": "Creare un conto membro",
+      "MEMBER_ACCOUNT_HELP": "Se non sei ancora registrato come individuo (un conto per persona soltanto).",
+      "WALLET_ACCOUNT": "Portafoglio semplice",
+      "WALLET_ACCOUNT_TITLE": "Creare un portafoglio",
+      "WALLET_ACCOUNT_HELP": "Se rappresenti un'azienda, associazione, altra ente o hai necessita di un altro portafoglio. Nessun Dividendo Universale sarà prodotto da questo conto.",
+      "SALT_WARNING": "Scegliere un identificativo segreto.<br/>È necessario per ogni connessione a questo conto.<br/><br/><b>Accertati di ricordarlo!</b>.<br/>Se lo dimentichi non ti potrà aiutare nessuno!",
+      "PASSWORD_WARNING": "Scegliere una password.<br/>E necessario per ogni connessione a questo conto.<br/><br/><b>Accertati di ricordarla!</b>.<br/>Se la dimentichi non ti potrà aiutare nessuno!",
+      "PSEUDO_WARNING": "Segliere uno pseudonimo.<br/>Puo essere utile per chi ti cerca nella rete.<br/><br/>.L'utilizzo delle<b>virgole, spazi e accenti</b> è vietato.<br/><div class='hidden-xs'><br/>Esempio: <span class='gray'>JohnDalton, JackieChan, etc.</span>",
+      "PSEUDO": "Pseudonimo",
+      "PSEUDO_HELP": "joe123",
+      "SALT_CONFIRM": "Confermare",
+      "SALT_CONFIRM_HELP": "Confermare l'identificativo segreto",
+      "PASSWORD_CONFIRM": "Confermare",
+      "PASSWORD_CONFIRM_HELP": "Confermare la password",
+      "SLIDE_6_TITLE": "Conferma:",
+      "COMPUTING_PUBKEY": "Calcolando...",
+      "LAST_SLIDE_CONGRATULATION": "Hai riempito tutti i campi richiesti.<br/><b>Puoi inviare la richiesta di creazione del conto</b>.<br/><br/>Per tua informazione, la chiave pubblica qui sotto identifica il tuo futuro conto.<br/>Puo essere comunicata a chi ti deve pagare.<br/>Quando il tuo conto verrà approvato potrai trovare la chiave qui <b>{{'ACCOUNT.TITLE'|translate}}</b>.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Warning:</b>Il tuo identificatore segreto, la tua password e il tuo pseudonimo non si possono cambiare.<br/><b>Ricordali per sempre!</b><br/><b>Sei sicuro/a</b>di voler inviare questa richiesta di creazione di conto?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Warning:</b>Il tuo identificatore segreto, la tua password e tuo pseudonimo non si possono cambiare..<br/><b>Ricordali per sempre!</b><br/><b>Sei sicuro/a</b> di voler continuare?",
+      "CHECKING_PSEUDO": "Verificazione in corso...",
+      "PSEUDO_AVAILABLE": "Pseudonimo disponibile",
+      "PSEUDO_NOT_AVAILABLE": "Pseudonimo indisponibile",
+      "INFO_LICENSE": "Per aderire alla moneta, ti chiediamo di leggere e accetare le condizioni della licenza.",
+      "BTN_ACCEPT": "Accetto",
+      "BTN_ACCEPT_LICENSE": "Accetto la licenza"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Pseudonimo",
+      "HELP": "Uno pseudonimo è necessario per che gli altri ti possino trovare."
+    },
+    "SELECT_IDENTITY_MODAL": {
+      "TITLE": "Selezionare una identità",
+      "HELP": "Più <b>identità diverse</b> sono state inviate per la chiave pubblica <span class=\"gray\"><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</span>.<br/>Seleziona un dossier da usare :"
+    },
+    "SELECT_WALLET_MODAL": {
+      "TITLE": "Selezione del portafoglio"
+    },
+    "WALLET_LIST": {
+      "TITLE": "Portafoglio secondario",
+      "BTN_NEW": "Aggiungi un portfolio",
+      "NO_WALLET": "Nessun portafoglio secondario",
+      "BTN_DELETE": "Rimuovi un portafoglio secondario ...",
+      "BTN_RENAME": "Rinominare il portafoglio",
+      "EDIT_POPOVER": {
+        "TITLE": "Rinominare il portafoglio",
+        "HELP": "Compila il nuovo nome",
+        "NAME_HELP": "Nome del portafoglio"
+      }
+    },
+    "SECURITY": {
+      "ADD_QUESTION": "Aggiungere domanda personalizzata",
+      "BTN_CLEAN": "Svuotare",
+      "BTN_RESET": "Reset",
+      "DOWNLOAD_REVOKE": "Salvare un file di revoca",
+      "DOWNLOAD_REVOKE_HELP": "Avere une file di revoca è necessario in caso di smarrimento delle tue credenziali. Ti permette <b> di rimuovere tuo conto dalla Rete di Fiducia</b>, per farlo tornare ad essere un semplice portafoglio.",
+      "HELP_LEVEL": "Scegliere <strong> almeno{{nb}} domande </strong> :",
+      "LEVEL": "Livello di sicurezza",
+      "LOW_LEVEL": "Basso <span class=\"hidden-xs\">(minimo di 2 domande)</span>",
+      "MEDIUM_LEVEL": "Medio <span class=\"hidden-xs\">(minimo di 4 domande)</span>",
+      "QUESTION_1": "Qual'era il nome del tuo miglior amico quando eri adolescente?",
+      "QUESTION_2": "Qual'era il nome del tuo primo animale domestico?",
+      "QUESTION_3": "Qual'è il primo piatto che imparasti a cucinare?",
+      "QUESTION_4": "Qual'è il primo film che hai visto al cinema?",
+      "QUESTION_5": "Qual'era la destinazione del tuo primo volo?",
+      "QUESTION_6": "Qual'era il nome del tuo professore preferito a scuola?",
+      "QUESTION_7": "Quale sarebbe il tuo lavoro preferito?",
+      "QUESTION_8": "Qual'è il tuo libro per bimbi preferito?",
+      "QUESTION_9": "Qual'era il marchio della tua prima macchina?",
+      "QUESTION_10": "Qual'era il tuo nomignolo da ragazzino/a?",
+      "QUESTION_11": "Qual'era il tuo personaggio di film o attore preferito quand eri studente?",
+      "QUESTION_12": "Qual'era il tuo musicista/cantante/grupo preferito quando eri studente?",
+      "QUESTION_13": "In che città si sono conosciuti i tuoi genitori?",
+      "QUESTION_14": "Qual'era il nome del tuo primo capo?",
+      "QUESTION_15": "Qual'è il nome della strada dove sei cresciuto/a?",
+      "QUESTION_16": "Qual'è il nome della tua spiaggia preferita?",
+      "QUESTION_17": "Qual'è il primo album che ti sei comprato?",
+      "QUESTION_18": "Qual'è il nome della squadra di sport preferita?",
+      "QUESTION_19": "Cosa faceva il tuo nonno?",
+      "RECOVER_ID": "Ricuperare la mia password...",
+      "RECOVER_ID_HELP": "Se hai un<b<file di backup deelle tue credenziali</b>, li puoi trovare rispondendo correttamente alle tue domande personalizzate.",
+      "REVOCATION_WITH_FILE": "Revocare il mio conto membro...",
+      "REVOCATION_WITH_FILE_DESCRIPTION": "Se pensi di aver perso <b>definitivamente le tue credenziali</b> di conto membro (o che la sicurezza del tuo conto è compromessa), puoi usare <b>il file di revoca</b> del conto <b>per forzare la sua uscita permanente dalla Rete di Fiducia</b>.",
+      "REVOCATION_WITH_FILE_HELP": "Se hai <b>definitivamente perso le tue credenziali (o se la sicurezza del tuo conto è compromessa), puoi usare <b>il file di revoca</b> del conto <b>per uscire dalla Rete di Fiducia</b>.",
+      "REVOCATION_WALLET": "Revocare questo conto subito",
+      "REVOCATION_WALLET_HELP": "Richiedere la cancellazione dell'identità <b>revocherà la tua adesione alla Rete di Fiducia</ b> (definitivamente per lo pseudonimo e per la chiave pubblica associata). Il conto non potrà più produrre il Dividendo Universale.<br/>Nonostante ciò, puoi ancora usare il conto come semplice portafoglio.",
+      "REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
+      "SAVE_ID": "Salvare le mie credenziali...",
+      "SAVE_ID_HELP": "Creare un file di backup, per <b>recuperare la vostra password</b> (e l'identificativo segreto) <b> in caso di smarrimento</b>. Il file è <b>sicuro</ b> (cryptato) utilizzando le domande personalizzate.",
+      "STRONG_LEVEL": "Alto <span class=\"hidden-xs \">(minimo di 6 domande)</span>",
+      "TITLE": "Conto e sicurezza"
+    },
+    "FILE_NAME": "{{currency}} - Account statement {{pubkey|formatPubkey}} to {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Data",
+      "AMOUNT": "Importo",
+      "COMMENT": "Commento"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Bonifico",
+    "SUB_TITLE": "Fare un bonifico",
+    "FROM": "Da",
+    "TO": "A",
+    "AMOUNT": "Importo",
+    "AMOUNT_HELP": "Importo",
+    "COMMENT": "Commenti",
+    "COMMENT_HELP": "Commenti",
+    "BTN_SEND": "Inviare",
+    "BTN_ADD_COMMENT": "Scrivere un commento?",
+    "WARN_COMMENT_IS_PUBLIC": "Ti avvertiamo <b>che i commenti sono pubblici</b> (non cifrati).",
+    "MODAL": {
+      "TITLE": "Bonifico"
+    }
+  },
+  "ERROR": {
+    "UNKNOWN_URI_FORMAT": "Formato URI sconosciuto",
+    "POPUP_TITLE": "Errore",
+    "UNKNOWN_ERROR": "Errore",
+    "CRYPTO_UNKNOWN_ERROR": "Il tuo navigatore non sembra compatibile con le funzionalità di cryptografia.",
+    "EQUALS_TO_PSEUDO": "Deve essere diverso dallo pseudonimo",
+    "EQUALS_TO_SALT": "Deve essere diverso dall'identificativo segreto",
+    "FIELD_REQUIRED": "Campo obbligatorio.",
+    "FIELD_TOO_SHORT": "Valore troppo corto.",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "Valore troppo corto ({{minLength}} caratteri min)",
+    "FIELD_TOO_LONG": "Valore troppo lungo",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Valore troppo lungo ({{maxLength}} caractteri max)",
+    "FIELD_MIN": "Valore minimo : {{min}}",
+    "FIELD_MAX": "Valore massimo : {{max}}",
+    "FIELD_ACCENT": "Virgole e caratteri accentati vietati",
+    "FIELD_NOT_NUMBER": "Valore numerico atteso",
+    "FIELD_NOT_INT": "Valore intero atteso",
+    "FIELD_NOT_EMAIL": "Indirizzo mail non valido",
+    "PASSWORD_NOT_CONFIRMED": "Non corrisponde alla password.",
+    "SALT_NOT_CONFIRMED": "Non corrisponde all'identificativo segreto.",
+    "SEND_IDENTITY_FAILED": "Iscrizione fallita.",
+    "SEND_CERTIFICATION_FAILED": "Certificazione fallita.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "Non puoi inviare certificazioni perchè il tuo conto <b>non è ancora un conto membro</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "Non puoi inviare certificazioni adesso perchè <b>non sei ancora membro</b>.<br/><br/>Devi ancora entrare nella Rete di Fiducia.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "Impossibile certificare questo conto. Nessuna richiesta di certificazione trovata o bisogna rinnovarla.",
+    "LOGIN_FAILED": "Errore di login.",
+    "LOAD_IDENTITY_FAILED": "Impossibile caricare la tua identità.",
+    "LOAD_REQUIREMENTS_FAILED": "Impossibile caricare i prerequisiti dell'identità.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Ingresso nella RdF fallito.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Errore nell'invio della revocazione.",
+    "REFRESH_WALLET_DATA": "Impossibile aggiornare il portafoglio.",
+    "GET_CURRENCY_PARAMETER": "Impossibile ricuperare i parametri della moneta.",
+    "GET_CURRENCY_FAILED": "Impossibile caricare la moneta. Riprovare più tardi.",
+    "SEND_TX_FAILED": "Impossibile eseguire la transazione.",
+    "ALL_SOURCES_USED": "Per favore aspetta il calcolo del prossimo blocco (Tutte le tue fonti di moneta sono state utilizzate).",
+    "NOT_ENOUGH_SOURCES": "Non hai abbastanza cambio per inviare questo importo in una sola transazione.<br/>Importo massimo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Errore nella creazione del tuo conto membro.",
+    "RESTORE_WALLET_DATA_ERROR": "Errore nell'aggiornamento delle impostazioni definite in local storage.",
+    "LOAD_WALLET_DATA_ERROR": "Errore nel caricamento dei dati del portafoglio.",
+    "COPY_CLIPBOARD_FAILED": "Impossibile copiare al clipboard",
+    "TAKE_PICTURE_FAILED": "Impossibile recuperare foto.",
+    "SCAN_FAILED": "Impossibile scansionare il codice QR.",
+    "SCAN_UNKNOWN_FORMAT": "Codice non riconosciuto.",
+    "WOT_LOOKUP_FAILED": "Ricerca fallita.",
+    "LOAD_PEER_DATA_FAILED": "Nodo Duniter non accessibile. Riprovare più tardi.",
+    "NEED_LOGIN_FIRST": "Accedi prima al tuo conto.",
+    "AMOUNT_REQUIRED": "Importo necessario.",
+    "AMOUNT_NEGATIVE": "Importo negativo non consentito.",
+    "NOT_ENOUGH_CREDIT": "Saldo insufficiente",
+    "INVALID_NODE_SUMMARY": "Impossibile comunicare col nodo o indirizzo non valido",
+    "INVALID_USER_ID": "Il campo dello 'pseudonimo' non deve avere spazi vuoti o caratteri speciali.",
+    "INVALID_COMMENT": "Il formato del campo 'reference' è errato.",
+    "INVALID_PUBKEY": "If formato della chiave pubblica è errato.",
+    "INVALID_PUBKEY_CHECKSUM": "Checksum non valido.",
+    "IDENTITY_REVOKED": "Questa identità <b>è stata revocata</b>. Non puo più diventare membro.",
+    "IDENTITY_REVOKED_WITH_TIME": "Questa identità <b>è stata revocata {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). Non puo più diventare membro.",
+    "IDENTITY_PENDING_REVOCATION": "L'<b>annulamento di questa identità</b> è stata richiesta ed è in corso di valutazione. Capacità ad inviare certificazioni disabilitata",
+    "IDENTITY_INVALID_BLOCK_HASH": "Questa richiesta di certificazione non è più valida (perche si riferisce ad un blocco che è stato eliminato dai nodi): la persona deve rinnovare la sua domanda di certificazione <b>prima</b> di essere certificata.",
+    "IDENTITY_EXPIRED": "Questa identità è scaduta: la persona deve fare una nuova domanda di certificazione <b>prima di</b> essere certificata.",
+    "IDENTITY_SANDBOX_FULL": "Il nodo Duniter utilizzato dal Cesium non può ricevere altre domande di certificazione per ora, la lista d'attesa è piena.<br/><br/>Riprova più tardi o scegli un'altro nodo Duniter (nelle <b>Impostazioni</b>).",
+    "IDENTITY_NOT_FOUND": "Identità non trovata",
+    "IDENTITY_TX_FAILED": "Impossibile caricare le operazioni",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Adesione non valida.",
+    "WALLET_INVALID_BLOCK_HASH": "La tua domanda di certificazione non è più valida (perché si riferisce ad un blocco che è stato eliminato dai nodi).<br/>Devi <a ng-click=\"doQuickFix('renew')\">rinnovare la tua richiesta di adesione alla RdF</a> per risolvere il problema.",
+    "WALLET_IDENTITY_EXPIRED": "La pubblicazione della tua identità <b>è scaduta</b>.<br/>Devi <a ng-click=\"doQuickFix('fixIdentity')\">ripubblicare la tua identità</a> per risolvere il problema.",
+    "WALLET_REVOKED": "La tua identità è stata <b>revocata</b>: né il tuo pseudonimo né la tua chiave pubblica sarano utilizzati in futuro.",
+    "WALLET_HAS_NO_SELF": "La tua identità deve prima essere stata pubblicata e non essere ancora scaduta.",
+    "AUTH_REQUIRED": "Autenticazione necessaria.",
+    "AUTH_INVALID_PUBKEY": "La chiave pubblica non corrisponde al conto conesso.",
+    "AUTH_INVALID_SCRYPT": "Password o nome di utente non valido.",
+    "AUTH_INVALID_FILE": "File di portachiavi non valido.",
+    "AUTH_FILE_ERROR": "Impossibile aprire il file di portachiavi",
+    "IDENTITY_ALREADY_CERTIFY": "Hai <b>già certificato</b> questa identità.<br/><br/>Il tuo certificato è ancora valido (scade {{expiresIn|formatDuration}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "Hai <b>già certificato</b> questa identità.<br/><br/>La tua certificazione è ancora pendente (Scadenza del periodo di  treatment {{expiresIn|formatDuration}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Impossibile certificare",
+    "LOAD_NEWCOMERS_FAILED": "Impossibile caricare i nuovi membri.",
+    "LOAD_PENDING_FAILED": "Impossibile caricare le certificazioni pendenti.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Devi <b>essere membro</b> per poter fare questo.",
+    "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Devi <b>essere membro</b> (o un ex-membro) per poter fare questo.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Devi aver <b>pubblicato tua identità</b> per poter fare questo.",
+    "GET_BLOCK_FAILED": "Impossibile caricare il blocco",
+    "INVALID_BLOCK_HASH": "Blocco non trovato (hash errato)",
+    "DOWNLOAD_REVOCATION_FAILED": "Errore avvenuto nel download del file di cancellazione d'identità.",
+    "REVOCATION_FAILED": "Errore avvenuto durante la richiesta di cancellazione dell'identità.",
+    "SALT_OR_PASSWORD_NOT_CONFIRMED": "Identificativo segreto o password sbagliati",
+    "RECOVER_ID_FAILED": "Impossibile recuperare la password",
+    "LOAD_FILE_FAILED": "Impossibile caricare il file",
+    "NOT_VALID_REVOCATION_FILE": "File di cancellazione dell'identità errato (formato di file incorreto)",
+    "NOT_VALID_SAVE_ID_FILE": "File di backup dei credenziali errato (formato di file incorreto)",
+    "NOT_VALID_KEY_FILE": "File di portachiavi non valido (formato non riconosciuto)",
+    "EXISTING_ACCOUNT": "Le tue credenziali corrispondono a quelli di un conto già esistente,di cui <a ng-click=\"showHelpModal('pubkey')\">la chiave pubblica</a> è:",
+    "EXISTING_ACCOUNT_REQUEST": "Per favore cambia le tue credenziali in modo che corrispondino ad un conto non utilizzato.",
+    "GET_LICENSE_FILE_FAILED": "Impossibile caricare il file della licenza",
+    "CHECK_NETWORK_CONNECTION": "Nessun nodo sembra disponibile.<br/><br/>Per favore <b>verifica la tua connessione Internet</b>.",
+    "ISSUE_524_TX_FAILED": "Bonifico .<br/><br/>Un messaggio è stato inviato agli sviluppatori per aiutare a risolvere il problema. <b>Grazie per il tuo aiuto</b>."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Informazioni",
+    "CERTIFICATION_DONE": "Identità firmata con successo",
+    "NOT_ENOUGH_CREDIT": "Saldo insufficiente",
+    "TRANSFER_SENT": "Transazione inviata con successo",
+    "COPY_TO_CLIPBOARD_DONE": "Copiato con successo",
+    "MEMBERSHIP_OUT_SENT": "Revoca dell'identità inviata",
+    "NOT_NEED_MEMBERSHIP": "Già membro.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "A questa identità mancheranno a breve certificazioni (almeno {{willNeedCertificationCount}}).",
+    "REVOCATION_SENT": "Revoca dell'identità inviata",
+    "REVOCATION_SENT_WAITING_PROCESS": "Cancellazione dell'identità <b>inviata con successo</b>. In attesa di validazione.",
+    "FEATURES_NOT_IMPLEMENTED": "Questa funzionalità non è ancora disponibile.<br/><br/>Vuoi contribuire per velocizzarne la disponibilità? ;)",
+    "EMPTY_TX_HISTORY": "Nessuna operazione da esportare"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Sei sicuro/a</b> di voler procedere?",
+    "POPUP_TITLE": "<b>Conferma</b>",
+    "POPUP_WARNING_TITLE": "<b>Avviso</b>",
+    "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Avvertimento di sicurezza</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certificare {{uid}}",
+    "CERTIFY_RULES": "<b class=\"assertive\">Non certificare un conto</b> se credi che: <ul><li>1.) L'identità della persona potrebbe essere finta.<li>2.) La persona ha già un conto certicato.<li>3.) La persona trasgredisce la regola 1 o 2 o entrambe. (Certifica conti finti o gemelli).</ul></small><br/>Sei sicuro di voler certificare questa identità?",
+    "TRANSFER": "<b>Resoconto del bonifico:</b><br/><br/><ul><li> - Inviato da: <b>{{from}}</b></li><li> - A: <b>{{to}}</b></li><li> - Importo: <b>{{amount}} {{unit}}</b></li><li> - Comemnto: <i>{{comment}}</i></li></ul><br/><b>Sei sicuro di voler procedere con questo bonifico?</b>",
+    "MEMBERSHIP_OUT": "Questa operazione è <b>irreversibile</b>.<br/></br/><b>Sei sicuro di voler cancellare la tua presenza nella RdF?</b>",
+    "MEMBERSHIP_OUT_2": "Questa operazione è <b>irreversibile</b>!<br/><br/>Sei sicuro/a <b>di voler revocare la tua identità</b>?",
+    "LOGIN_UNUSED_WALLET_TITLE": "Errore di battitura?",
+    "LOGIN_UNUSED_WALLET": "Il conto sembra <b>inattivo</b>.<br/><br/>Probabilmente è un<b>errore di battitura</b> delle tue credenziali. Per favore riprova, verificando che la <b>chiave pubblica sia la tua<b/>.",
+    "FIX_IDENTITY": "Lo pseudonimo <b>{{uid}}</b> verrà pubblicato nuovamente. Si sostituirà alla precedente pubblicazione che è scaduta.<br/></br/><b>Sei sicuro/a</b> di voler procedere?",
+    "FIX_MEMBERSHIP": "La tua domanda di certificazione sarà inviata alla rete.<br/></br/><b>Sei sicuro?</b>",
+    "MEMBERSHIP": "La tua domanda per diventare membro sta per essere inviata alla rete.<br/></br/><b>Sei sicuro/b> di voler continuare ?",
+    "RENEW_MEMBERSHIP": "La tua adesione verrà rinnovata.<br/></br/><b>Sei sicuro?</b>",
+    "REVOKE_IDENTITY": "Stai per <b>revocare definitivamente questa identità</b>.<br/><br/>La chiave pubblica e lo pseudonimo associato <b>non saranno mai più utilizzati</b> (da un conto membro).<br/></br/><b>Sei sicuro</b> di voler revocare questa identità?",
+    "REVOKE_IDENTITY_2": "Questa operazione è <b>irreversibile</b>!<br/><br/>Sei sicuro di volern<b>revocare questa identità</b>?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "La tua presenza nella rete non deve ancora essere rinnovata (scadrà tra {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Sei sicuro</b> di voler rinnovare la tua presenza?",
+    "SAVE_BEFORE_LEAVE": "Vuoi <b>salvare le tue modifiche</b> prima di uscira dalla pagina?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Modifiche non salvate",
+    "LOGOUT": "Sei sicuro di voler chiudere la sessione?",
+    "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> indisponibile o indirizzo errato.<br/><br/>Vuoi utilizzare temporanemante il <b>{{new}}</b> nodo?",
+    "INVALID_FILE_FORMAT": "Formato file non valido.",
+    "SAME_TX_RECIPIENT": "Il destinatario deve essere diverso dall'emittente."
+  },
+  "MODE": {
+    "DEMO": {
+      "BADGE": "Demo",
+      "MODE": "Modalità dimostrativa",
+      "FEATURE_NOT_AVAILABLE": "Funzionalità <b>non disponibile</b> su questo sito dimostrativo.",
+      "MODE_HELP": "Il Cesium funziona in <b>modalità dimostrativa</b>: è disponibile la consultazione del conto, ma non è possibile eseguire alcuna operazione.",
+      "INSTALL_HELP": "Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
+    },
+    "READONLY": {
+      "BADGE": "Monit",
+      "MODE": "Modalità di monitoraggio",
+      "MODE_HELP": "Il Cesium funziona in <b>modalità monitoraggio</b>: sono disponibili solo le funzionalità di monitoraggio della valuta.",
+      "INSTALL_HELP": "Se desidera <b>creare un account di portafoglio</b> per inviare o ricevere valuta, ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
+    }
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>File di revoca dell'identità/b>",
+    "POPUP_REVOKE_MESSAGE": "Per migliorare la sicurezza del tuo conto, scarica <b>il documento di revoca del conto</b>. Ti consentirà di revocare il tuo conto (nel caso di violazione del conto, della tua identità, conto creato con errori, etc.).<br/><br/><b>Hai salvato questo documento in un luogo sicuro.</b>"
+  },
+  "HELP": {
+    "TITLE": "Aiuto online",
+    "JOIN": {
+      "SECTION": "Entrare nella rete",
+      "SALT": "Il tuo identificativo segreto è molto importante. È utilizzato per cifrare la tua password che permette poi di calcolare tua <span class=\"text-italic\">chiave pubblica</span> (suo numero) e la chiave privata per consentire l'accesso.<br/><b>Ricordati bene di questo identificativo</b>, perche non ti potrà aiutare nessuno se lo perdi.<br/>Tra l'altro, non può essere cambiato senza dover creare un conto nuovo.<br/><br/>Raccomandiamo che sia abbastanza lungo (8 caratteri almeno) è il più originale possibile. (buona entropia)",
+      "PASSWORD": "La password è molto importante, è utilizzata per calcolare il tuo numero di conto (la tua chiave pubblica) e la chiave privata per consentire l'accesso.<br/><b>Ricordatela bene</b>, perché non ti potrà aiutare nessuno se la perdi.<br/>Tra l'altro, non puo essere cambiata senza dover creare un conto nuovo.<br/><br/>Una buona password (preferibilmente) è composta da almeno 8 caratteri, con almeno una maiuscola e un numero.",
+      "PSEUDO": "Un pseudonimo è utilizzato quando ti iscrivi come <span class=\"text-italic\">membro</span>. E sempre associato ad un portafoglio (con la sua <span class=\"text-italic\">chiave pubblica</span>).<br/>È pubblicato sulla rete perche gli altri membri possano identificarla, certificarla o invarle moneta. <br/> Lo pseudonimo deve essere unico nella rete (tra quelli utilizzati adesso e in passato)."
+    },
+    "LOGIN": {
+      "SECTION": "Accedi",
+      "PUBKEY": "Chiave pubblica del conto",
+      "PUBKEY_DEF": "La chiave pubblica del portachiavi è generata dalle credenziali, ma non corrispode ad un conto già utilizzato.<br/><b>Accertati che tua chiave pubblica corrisponda al tuo conto</b>. Nel caso contrario, sarai conesso/a ad un conto probabilmente mai usato, datto che il rischio di collisione con un conto esistente è molto ridotto.<br/><a href=\"https://en.wikipedia.org/wiki/Elliptic_curve_cryptography\" target=\"_ system\">Saperne di più sulla cryptografia </a> con chiave pubblica.",
+      "METHOD": "Metodi di connessione",
+      "METHOD_DEF": "Hai diverse opzioni per accedere ad un portafoglio:<br/> - Accedendo con <b>cifratura (leggera o sicura)</b> tua password sarà cifrata dal tuo identificativo segreto per scoraggiare tentativi di attacchi di 'brute force' (per esempio con passwords conosciute).<br/> - Accedendo con la <b>chiave pubblica</b> ti evita di dover digitare le tue credenziali che ti saranno chieste solo quando vorrai fare una operazione sul conto.<br/> - Accedendo <b>con un portachiavi</b> che leggerà le tue chiavi pubblica e privata da un file esterno, senza che tu li debba introdurre."
+    },
+    "GLOSSARY": {
+      "SECTION": "Glossario",
+      "PUBKEY_DEF": "Una chiave pubblica permette di identificare un portafoglio. Puo anche identificare un membro. Nel Cesium  è calcolata con la password e lo pseudonimo.",
+      "MEMBER": "Membro",
+      "MEMBER_DEF": "Un membro è una persona reale e viva, che desidera participare liberamente alla communità monetaria. Questo membro riceverà un Dividendo Universale, a secondo delle regole definite <span class=\"text-italic\">nei parametri della moneta</span>.",
+      "CURRENCY_RULES": "Regole della moneta",
+      "CURRENCY_RULES_DEF": "I parametri delle moneta sono state definite per sempre e per tutti. I parametri con i quali la moneta si comporta: il calcolo del Dividendo Universale, il numero di certificazioni necessarie per diventare membro, il numero massimo di certificazioni che un membro può inviare, etc.<br/><br/>I parametri non possono essere modificati perche c'è una<span class=\"text-italic\">Blockchain</span> che implementa ed esegue queste regole e verifica costantemente la loro applicazione. <a href=\"#/app/currency\">Vedere i parametri </a>.",
+      "BLOCKCHAIN": "Blockchain",
+      "BLOCKCHAIN_DEF": "La Blockchain è un sistema decentralizzato che, nel caso di Duniter, permette di rispettare e implementare <span class=\"text-italic\">le regole della moneta</span>.<br/><a href=\"http://en.duniter.org/presentation/\" target=\"_blank\">Saperne di più su Duniter</a> e il funzionamento della blockchain.",
+      "UNIVERSAL_DIVIDEND_DEF": "Il Dividendo Universale (UD) è la quantità di moneta co-creata da ogni membro, seguendo le formule matematiche definite nelle <span class=\"text-italic\">regole della moneta</span>.<br/>All'inizio di ogni periodo, il conto di ogni membro riceve una quantità uguale della nuova moneta creata. <br/><br/>Il DU prevede una crescita costante per rimanere equo nei confronti dei membri (attuali e passati). Viene calcolato tenendo in conto la speranza di vita media, cosi come dimostrato nella Teoria Relativa della Moneta (TRM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">Peraperne di più sulla TRM</a> e la moneta libera."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "Menu <b>{{'MENU.CURRENCY'|translate}}</b> permette la scoperta dei <b>parametri della moneta</b> e la sua condizione presente.",
+      "CURRENCY_WOT": "Il <b>numero di membri</b> mostra <b>le dimensioni della RdF e la sua evoluzione </b>.",
+      "CURRENCY_MASS": "In evidenza qui è <b>l'importo totale</b> attualmente in circolazione e la sua <b> ripartizione media </b> a testa.<br/><br/>Questa cifra permette di avere un'idea <b>del valore di qualsiasi importo</b>, in base a quello che <b>hanno gli altri</b> sul loro conto (in media).",
+      "CURRENCY_UNIT_RELATIVE": "L'unità usata qui (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa che gli importi in {{currency|capitalize}} sono stati divisi dal <b>Dividendo Universale</b> (DU).<br/><br/><small>Questa unità relativa <b>ha senso</b> perche è stabile in contrasto con la massa monetaria che cresce costantemente.</small>",
+      "CURRENCY_CHANGE_UNIT": "Questa opzione <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permette di <b>permutare unità</b> per vedere gli importi in <b>{{currency|capitalize}}</b>, non divisi dal Dividendo Universale (piuttosto che in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "Questa opzione <b>{{'COMMON.BTN_RELATIVE_UNIT'|translate}}</b> permette <b>di permutare unità</b> per vedere gli importi in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, che è relativo al Dividendo Universale (l'importo co-prodotto da ogni membro).",
+      "CURRENCY_RULES": "Le<b>regole</b> della moneta determinano il suo <b>esatto e previdibile</b> comportamento.<br/><br/> Considerate come il proprio DNA della moneta, queste regole rendono il codice monetario <b>trasparente e comprensibile</b>.",
+      "MENU_BTN_NETWORK": "Menu <b>{{'MENU.NETWORK'|translate}}</b> permette la scopertà dello <b>stato della rete<b>.",
+      "NETWORK_BLOCKCHAIN": "Tutte le transazioni monetarie sono registrate in <b>registro sicuro e a prova di manomissione</b>, spesso chiamato <b>blockchain</b>.",
+      "NETWORK_PEERS": "I<b>nodi</b> mostrati qui corrispondono a <b>dei computers che aggiornano e monitorano</b> la blockchain.<br/><br/>Più nodi ci sono, più <b>decentralizzata</b> e più affidabile diventa la moneta.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "Questo <b>numero</b> (in verda) indica <b>l'ultimo blocco validato</b> dal nodo (ultima pagina scritta nel regitro).<br/><br/>Il verda indica che il blocco è stato validato anche dalla <b>maggioranza degli altri nodi</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Ogni membro</b>, che dispone di un computer connesso a Internet <b>puo partecipare, aggiungendosi come nodo installando il software Duniter</b> (free/libre). <a target=\"_new\" href=\"{{installDocUrl}}\" target=\"_system\">Leggi il manuale d'installazione &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> permette l'accesso al saldo del conto e la cronologia delle transazioni.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Qui puoi consultare lo stato del tuo conto, la cronologia delle transazioni e le tue certificazioni.",
+      "WALLET_CERTIFICATIONS": "Clicca qui per vedere i dettagli delle tue certificazioni (date o ricevute).",
+      "WALLET_RECEIVED_CERTIFICATIONS": "Clicca qui per vedere i dettagli delle <b>certificazioni che hai ricevuto</b>.",
+      "WALLET_GIVEN_CERTIFICATIONS": "Clicca qui per vedere i dettagli delle <b>certificazioni che hai dato</b>.",
+      "WALLET_BALANCE": "Il <b>saldo</b> del tuo conto è visibile qui.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>L'unità utilizzata (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) significa che questo importo in {{currency|capitalize}} è stato diviso dal <b>Dividendo Universale</b> (DU) co-creato da ogni membro.<br/>Ad oggi, 1 DU equivale a {{currentUD}} {{currency|capitalize}}.",
+      "WALLET_BALANCE_CHANGE_UNIT": "Puoi <b>cambiare l'unità</b> in cui sono mostrati gli importi in <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Per esempio, per mostrare gli importi <b>direttamente in {{currency|capitalize}}</b> piuttosto che in unità relativa.",
+      "WALLET_PUBKEY": "Questa è la chiave pubblica del tuo conto. La puoi dare ad un terzo perché possa identificare tuo conto.",
+      "WALLET_SEND": "Paghi in pochi clics.",
+      "WALLET_SEND_NO_MONEY": "Paghi in pochi clics.<br/>(Il tuo saldo ancora non lo permette)",
+      "WALLET_OPTIONS": "Questo bottone permette di fare <b>altre, meno frequenti azioni</b>.<br/><br/> Non dimenticarti di fare il tour guidato del Cesium quando hai un attimo!",
+      "WALLET_RECEIVED_CERTS": "Questo mostra l'elenco delle persone che ti hanno fatto entrare nella RdF.",
+      "WALLET_CERTIFY": "Questo bottone <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permette di selezionare e certificare una identità.<br/><br/>Solo gli utenti <b>che sono già membri</b> possono certificare gli altri.",
+      "WALLET_CERT_STOCK": "Il tuo stock di certificazioni da dare è limitato a <b>{{sigStock}} certificazioni</b>.<br/><br/>Questo stock si rifornisce con il tempo, man mano che le certificazioni inviate scadono.",
+      "MENU_BTN_TX": "<b>{{'MENU.TRANSACTIONS'|translate}}</b> permette l'accesso alla cronologia delle transazioni, e permette di fare nuovi bonifici.",
+      "MENU_BTN_WOT": "Il menu<b>{{'MENU.WOT'|translate}}</b> permette di cercare <b>utenti</b> della moneta (membri o non).",
+      "WOT_SEARCH_TEXT_XS": "Per fare una ricerca nella rubrica, digita <b>le prime lettere dello pseudonimo o della chiave pubblica di un utente</b>.<br/><br/>La ricerca inizierà automaticamente.",
+      "WOT_SEARCH_TEXT": "Per cercare nella rubrica, digita <b>le prime lettere dello pseudonimo o della chiave pubblica di un utente</b>.<br/><br/>Dopodichè premi <b>Invio</b> per avviare la ricerca.",
+      "WOT_SEARCH_RESULT": "Visualizza la scheda dettagliata di un utente con un semplice click sulla linea.",
+      "WOT_VIEW_CERTIFICATIONS": "La linea <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> mostra quanti membri hanno certificato questa identità.<br/><br/>Queste certificazioni dimostrano che il conto appartiene ad <b>una persona viva</b> e che questa persona non ha <b>nessun altro conto membro</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "Ci vogliono almeno <b>{{sigQty}} certificazioni</b> per diventare membro e co-produrre il <b>Dividendo Universale</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Clicca qui per aprire <b>una lista di tutte le certificazioni</b> ricevute e date da questa identità.",
+      "WOT_VIEW_CERTIFY": "Il bottone <b>{{'WOT.BTN_CERTIFY'|translate}}</b> permette di aggiungere tua certificazione a questa identità.",
+      "CERTIFY_RULES": "<b>Attenzione:</b> Certifica <b>solo persone reali e vive</b> che non hanno nessun altro conto membro.<br/><br/>L'affidabilità della moneta dipende della vigilanza di ciascuno.",
+      "MENU_BTN_SETTINGS": "Le <b>{{'MENU.SETTINGS'|translate}}</b> ti permettono di configurare il Cesium.<br/><br/>Per esempio, puoi <b>cambiare l'unità</b> in cui visualizzi la moneta.",
+      "HEADER_BAR_BTN_PROFILE": "Clicca qui per entrare nel <b>tuo profilo utente</b>",
+      "SETTINGS_CHANGE_UNIT": "Puoi cambiare <b>l'unità</b> della moneta cliccando qui.<br/><br/>- Disabilita questa opzione per vedere gli importi in {{currency|capitalize}}.<br/>- Abilita l'opzione per importi relativi in {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (<b>divisi</b> dal attuale Dividendo Universale).",
+      "END_LOGIN": "Il tour guidato <b>è finito</b>.<br/><br/>Benvenuto nel <b>economia libera</b>!",
+      "END_NOT_LOGIN": "Il tour guidato <b>è finito</b>.<br/><br/>Se desideri entrare nella Rete di Fiducia {{currency|capitalize}}, basta cliccare <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> qui sotto.",
+      "END_READONLY": "Il tour guidato <b>è finito</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."
+    }
+  },
+  "API": {
+    "COMMON": {
+      "LINK_DOC": "documentazione API",
+      "LINK_DOC_HELP": "Documentazione dello sviluppatore",
+      "LINK_STANDARD_APP": "versione classica",
+      "LINK_STANDARD_APP_HELP": "Apri la versione classica di {{'COMMON.APP_NAME'|translate}}"
+    },
+    "HOME": {
+      "TITLE": "Documentazione API {{'COMMON.APP_NAME'|translate}}",
+      "MESSAGE": "Benvenuto alla <b>documentazione dell'API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Connettiti alla pagina web <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> molto facilmente!",
+      "MESSAGE_SHORT": "Connettiti alla pagina web <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> molto facilmente!",
+      "DOC_HEADER": "Servizi disponibili:"
+    },
+    "TRANSFER": {
+      "TITLE": "{{'COMMON.APP_NAME'|translate}} - Pagamento online",
+      "TITLE_SHORT": "Pagamento online",
+      "SUMMARY": "Riepilogo dell'ordine:",
+      "AMOUNT": "Importo:",
+      "NAME": "Nome :",
+      "PUBKEY": "Chiave pubblica del destinatario:",
+      "COMMENT": "Riferimento dell'ordine:",
+      "DEMO": {
+        "SALT": "demo",
+        "PASSWORD": "demo",
+        "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",
+        "HELP": "<b>Modo dimostrativo</b>: Nessun pagamento sarà realmente inviato con questa simulazione.<br/>Per favore usa le credenziali: <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",
+        "BAD_CREDENTIALS": "Credenziali non valide.<br/>In modalità demo, le credenziali sono: {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"
+      },
+      "INFO": {
+        "SUCCESS_REDIRECTING_WITH_NAME": "Pagamento inviato.<br/>Redirigendo a <b>{{name}}</b>...",
+        "SUCCESS_REDIRECTING": "Pagamento inviato.<br/>Redirigendo al sito del venditore...",
+        "CANCEL_REDIRECTING_WITH_NAME": "Pagamento annullato.<br/>Redirigendo a<b>{{name}}</b>...",
+        "CANCEL_REDIRECTING": "Pagamento annullato.<br/>Redirigendo al sito del venditore..."
+      },
+      "ERROR": {
+        "TRANSFER_FAILED": "Mancato pagamento"
+      }
+    },
+    "DOC": {
+      "DESCRIPTION_DIVIDER": "Descrizione",
+      "URL_DIVIDER": "Indirizzo chiamata",
+      "PARAMETERS_DIVIDER": "Impostazioni",
+      "AVAILABLE_PARAMETERS": "Ecco l'elenco dei parametri disponibili :",
+      "DEMO_DIVIDER": "Provare",
+      "DEMO_HELP": "Per provare questo servizio, clicca sul bottone qui a fianco. Il risultato apparirà qui sotto .",
+      "DEMO_RESULT": "Risultato della chiamata:",
+      "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> Successo!",
+      "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Annulato dall'utente",
+      "INTEGRATE_DIVIDER": "Integrare",
+      "INTEGRATE_CODE": "Codice:",
+      "INTEGRATE_RESULT": "Previsualizzare il risultato:",
+      "INTEGRATE_PARAMETERS": "Parametri",
+      "TRANSFER": {
+        "TITLE": "Pagamenti",
+        "DESCRIPTION": "Da un sito (per es. : un sito di e-commerce) si può delegare il pagamento in moneta libera a Cesium API. Per invocare l'API, basta innescare l'apertura di una pagina con questo indirizzo:",
+        "PARAM_PUBKEY": "Chiave pubblica del destinatario",
+        "PARAM_PUBKEY_HELP": "Chiave pubblica del destinatario (obbligatoria)",
+        "PARAM_AMOUNT": "Importo",
+        "PARAM_AMOUNT_HELP": "Importo della transazione (obbligatorio)",
+        "PARAM_COMMENT": "Riferimento (o commento)",
+        "PARAM_COMMENT_HELP": "Riferimento o commento. Ti può aiutare per esempio a trovare tuo pagamento nella blockchain.",
+        "PARAM_NAME": "Nome (del destinatario o del sito web)",
+        "PARAM_NAME_HELP": "Nome del sito web o del destinatario chiamando l'API. Può essere un nome leggibile (\"Mio sito\"), oppure l'indirizzo http del sito (\"MioSito.com\").",
+        "PARAM_REDIRECT_URL": "Indirizzo web di redirezione",
+        "PARAM_REDIRECT_URL_HELP": "Indirizzo web (URL) di redirezione, chiamato dopo aver inviato il pagamento. Può includere le seguenti stringe, che saranno sostituite con i valori della transazione : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\" e {pubkey}.",
+        "PARAM_CANCEL_URL": "Indirizzo web della cancellazione",
+        "PARAM_CANCEL_URL_HELP": "Indirizzo web (URL) in caso dell'annullamento del pagamento dall'utente. Può includere le seguenti stringe, che saranno sostituite dinamicamente : \"{comment}\", \"{amount}\" e {pubkey}.",
+        "EXAMPLES_HELP": "Alcuni esempi di integrazione :",
+        "EXAMPLE_BUTTON": "Bottone HTML",
+        "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pagare in {{currency|currencySymbol}}",
+        "EXAMPLE_BUTTON_DEFAULT_STYLE": "Stile personalizzato",
+        "EXAMPLE_BUTTON_TEXT_HELP": "Testo del bottone",
+        "EXAMPLE_BUTTON_BG_COLOR": "Colore del fondo",
+        "EXAMPLE_BUTTON_BG_COLOR_HELP": "Per esempio: #fbc14c, black, lightgrey, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_FONT_COLOR": "Colore del testo",
+        "EXAMPLE_BUTTON_FONT_COLOR_HELP": "Esempio: black, orange, rgb(180,180,180)",
+        "EXAMPLE_BUTTON_TEXT_ICON": "Icona",
+        "EXAMPLE_BUTTON_TEXT_WIDTH": "Larghezza",
+        "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Esempio: 200px, 50%",
+        "EXAMPLE_BUTTON_ICON_NONE": "Nessuna",
+        "EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter",
+        "EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium",
+        "EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Äž1",
+        "EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Äž1 (nero)"
+      }
+    }
+  }
+}
diff --git a/ios/App/public/assets/i18n/nl-NL-2.0.0-alpha42.json b/ios/App/public/assets/i18n/nl-NL-2.0.0-alpha42.json
new file mode 100644
index 0000000000000000000000000000000000000000..55edee2dffdc571f4b85627db6caca05155fa4f2
--- /dev/null
+++ b/ios/App/public/assets/i18n/nl-NL-2.0.0-alpha42.json
@@ -0,0 +1,581 @@
+{
+  "COMMON": {
+    "APP_NAME": "Cesium",
+    "APP_VERSION": "v{{version}}",
+    "APP_BUILD": "build {{build}}",
+    "PUBKEY": "Publieke sleutel",
+    "MEMBER": "Lid",
+    "BLOCK": "Blok",
+    "BTN_OK": "OK",
+    "BTN_YES": "Ja",
+    "BTN_NO": "Nee",
+    "BTN_SEND": "Verzenden",
+    "BTN_SEND_MONEY": "Verstuur geld",
+    "BTN_SEND_MONEY_SHORT": "Versturen",
+    "BTN_SAVE": "Opslaan",
+    "BTN_YES_SAVE": "Ja, opslaan",
+    "BTN_YES_CONTINUE": "Ja, doorgaan",
+    "BTN_SHOW": "Tonen",
+    "BTN_SHOW_PUBKEY": "Toon sleutel",
+    "BTN_RELATIVE_UNIT": "Gebruik relatieve eenheid",
+    "BTN_BACK": "Terug",
+    "BTN_NEXT": "Volgende",
+    "BTN_CANCEL": "Annuleer",
+    "BTN_CLOSE": "Sluit",
+    "BTN_LATER": "Later",
+    "BTN_LOGIN": "Aanmelden",
+    "BTN_LOGOUT": "Uitloggen",
+    "BTN_ADD_ACCOUNT": "Nieuwe Rekening",
+    "BTN_SHARE": "Delen",
+    "BTN_EDIT": "Bewerken",
+    "BTN_DELETE": "Wissen",
+    "BTN_ADD": "Toevoegen",
+    "BTN_SEARCH": "Zoeken",
+    "BTN_REFRESH": "Verwezenlijken",
+    "BTN_START": "Beginnen",
+    "BTN_CONTINUE": "Doorgaan",
+    "BTN_UNDERSTOOD": "Ik heb het begrepen",
+    "BTN_OPTIONS": "Opties",
+    "BTN_HELP_TOUR": "Rondleiding",
+    "BTN_HELP_TOUR_SCREEN": "Ontdek dit scherm",
+    "BTN_DOWNLOAD": "Downloaden",
+    "BTN_DOWNLOAD_ACCOUNT_STATEMENT": "Downloaden het rekeningoverzicht",
+    "BTN_MODIFY": "Bewerken",
+    "DAYS": "dagen",
+    "NO_ACCOUNT_QUESTION": "Nog geen lid? Registreer nu!",
+    "SEARCH_NO_RESULT": "Geen resultaten",
+    "LOADING": "Even geduld...",
+    "SEARCHING": "Zoeken...",
+    "FROM": "Van",
+    "TO": "Aan",
+    "COPY": "Kopieren",
+    "LANGUAGE": "Taal",
+    "UNIVERSAL_DIVIDEND": "Universeel dividend",
+    "UD": "UD",
+    "DATE_PATTERN": "DD-MM-YYYY HH:mm",
+    "DATE_FILE_PATTERN": "YYYY-MM-DD",
+    "DATE_SHORT_PATTERN": "DD-MM-YY",
+    "DATE_MONTH_YEAR_PATTERN": "MM-YYYY",
+    "EMPTY_PARENTHESIS": "(leeg)",
+    "UID": "Pseudoniem",
+    "ENABLE": "Geactiveerd",
+    "DISABLE": "Gedeactiveerd",
+    "RESULTS_LIST": "Resultaten:",
+    "RESULTS_COUNT": "{{count}} uitslagen",
+    "EXECUTION_TIME": "uitgevoerd in {{duration|formatDurationMs}}",
+    "SHOW_VALUES": "Toon waarden openlijk?",
+    "POPOVER_ACTIONS_TITLE": "Opties",
+    "POPOVER_FILTER_TITLE": "Filters",
+    "SHOW_MORE": "Toon meer",
+    "SHOW_MORE_COUNT": "(huidig limiet op {{limit}})",
+    "POPOVER_SHARE": {
+      "TITLE": "Delen",
+      "SHARE_ON_TWITTER": "Deel op Twitter",
+      "SHARE_ON_FACEBOOK": "Deel op Facebook",
+      "SHARE_ON_DIASPORA": "Deel op Diaspora*",
+      "SHARE_ON_GOOGLEPLUS": "Deel op Google+"
+    }
+  },
+  "SYSTEM": {
+    "PICTURE_CHOOSE_TYPE": "Selecteer bron:",
+    "BTN_PICTURE_GALLERY": "Gallerij",
+    "BTN_PICTURE_CAMERA": "<b>Camera</b>"
+  },
+  "MENU": {
+    "HOME": "Welkom",
+    "WOT": "Register",
+    "CURRENCY": "Valuta",
+    "CURRENCIES": "Valuta's",
+    "ACCOUNT": "Mijn rekening",
+    "SETTINGS": "Instellingen",
+    "NETWORK": "Netwerk",
+    "TRANSACTIONS": "Mijn transacties"
+  },
+  "ABOUT": {
+    "TITLE": "Over",
+    "LICENSE": "<b>Vrije</b> software (GNU AGPLv3 licentie).",
+    "CODE": "Broncode:",
+    "DEVELOPERS": "Ontwikkelaars:",
+    "FORUM": "Forum:",
+    "DEV_WARNING": "Waarschuwing",
+    "DEV_WARNING_MESSAGE": "Deze applicatie is nog in actieve onwikkeling.<br/>Meld ons elk pobleem!",
+    "DEV_WARNING_MESSAGE_SHORT": "Deze App is nog instabiel (in ontwikkeling).",
+    "REPORT_ISSUE": "Meld een probleem"
+  },
+  "HOME": {
+    "TITLE": "Cesium",
+    "WELCOME": "Welkom bij de Cesium Applicatie!",
+    "MESSAGE": "Bekijk je {{currency}} portefeilles in real time.",
+    "BTN_REGISTRY": "Register",
+    "BTN_CURRENCY": "Verken valuta",
+    "BTN_ABOUT": "over",
+    "BTN_HELP": "Help",
+    "REPORT_ISSUE": "Meld een probleem",
+    "NOT_YOUR_ACCOUNT_QUESTION": "Is rekening <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b> niet van jou?",
+    "BTN_CHANGE_ACCOUNT": "Dze rekening ontkoppelen",
+    "CONNECTION_ERROR": "Node <b>{{server}}</b> onbereikbaar of ongeldig adres.<br/><br/>Controleer de internetverbinding, of schakel knooppunt <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in parameters</a>."
+  },
+  "SETTINGS": {
+    "TITLE": "Instellingen",
+    "NETWORK_SETTINGS": "Netwerk",
+    "PEER": "Duniter knooppunt adres",
+    "PEER_CHANGED_TEMPORARY": "Adres tijdelijk worden gebruikt",
+    "USE_LOCAL_STORAGE": "Lokale opslag inschakelen",
+    "USE_LOCAL_STORAGE_HELP": "Laat je instellingen opslaan",
+    "ENABLE_HELPTIP": "Contextgebonden hulp inschakelen",
+    "ENABLE_UI_EFFECTS": "Schakel visuele effecten",
+    "HISTORY_SETTINGS": "Mijn rekening",
+    "DISPLAY_UD_HISTORY": "Toon geproduceerde dividenden?",
+    "AUTHENTICATION_SETTINGS": "Authentificatie",
+    "REMEMBER_ME": "Onthoud mij",
+    "REMEMBER_ME_HELP": "Hiermee kunt u blijven altijd aangesloten (niet aanbevolen).",
+    "PLUGINS_SETTINGS": "Uitbreidingen",
+    "BTN_RESET": "Herstel standaardinstellingen",
+    "EXPERT_MODE": "Geavanceerde modus inschakelen",
+    "EXPERT_MODE_HELP": "Toon meer details",
+    "POPUP_PEER": {
+      "TITLE": "Duniter Knooppunt",
+      "HOST": "Adres",
+      "HOST_HELP": "Aadres: server:poort",
+      "USE_SSL": "Secure?",
+      "USE_SSL_HELP": "(SSL-encryptie)",
+      "BTN_SHOW_LIST": "Lijst van knooppunten"
+    }
+  },
+  "BLOCKCHAIN": {
+    "HASH": "Hachee : {{hash}}",
+    "VIEW": {
+      "HEADER_TITLE": "Blok #{{number}}-{{hash|formatHash}}",
+      "TITLE_CURRENT": "Huidige blok",
+      "TITLE": "Blok #{{number|formatInteger}}",
+      "COMPUTED_BY": "Berekend door het knooppunt",
+      "SHOW_RAW": "Bekijk RAW-bestand",
+      "TECHNICAL_DIVIDER": "Technische informatie",
+      "VERSION": "Format versie",
+      "HASH": "Hash berekend",
+      "UNIVERSAL_DIVIDEND_HELP": "Munt gecoproduceerd door elk van de {{membersCount}} ledental",
+      "EMPTY": "Er zijn geen gegevens in dit blok",
+      "POW_MIN": "Mminimum moeilijkheid",
+      "POW_MIN_HELP": "Moeilijkheid opgelegd hash te berekenen",
+      "DATA_DIVIDER": "Gegevens",
+      "IDENTITIES_COUNT": "Nieuwe identiteiten",
+      "JOINERS_COUNT": "Nieuwe leden",
+      "ACTIVES_COUNT": "Verlengingen",
+      "ACTIVES_COUNT_HELP": "Leden die hun lidmaatschap te vernieuwen",
+      "LEAVERS_COUNT": "Verlaters",
+      "LEAVERS_COUNT_HELP": "Leden die niet langer wenst certificering",
+      "EXCLUDED_COUNT": "Uitgesloten leden",
+      "EXCLUDED_COUNT_HELP": "Oud-leden uitgesloten door niet-verlenging of gebrek aan certificeringen",
+      "REVOKED_COUNT": "Identiteiten ingetrokken",
+      "REVOKED_COUNT_HELP": "Deze rekeningen zullen niet langer leden",
+      "TX_COUNT": "Transacties",
+      "CERT_COUNT": "Certificeringen",
+      "TX_TO_HIMSELF": "Ruil deal",
+      "TX_OUTPUT_UNLOCK_CONDITIONS": "Omstandigheden van de introductie",
+      "TX_OUTPUT_OPERATOR": {
+        "AND": "en",
+        "OR": "of"
+      },
+      "TX_OUTPUT_FUNCTION": {
+        "SIG": "<b>handtekening</b> ",
+        "XHX": "<b>Wachtwoord</b>, wiens SHA256 =",
+        "CSV": "Geblokkeerd",
+        "CLTV": "Opgesloten"
+      }
+    },
+    "LOOKUP": {
+      "TITLE": "Blokken",
+      "NO_BLOCK": "Geen blok",
+      "LAST_BLOCKS": "Recente blokken :",
+      "BTN_COMPACT": "Compact"
+    }
+  },
+  "CURRENCY": {
+    "SELECT": {
+      "TITLE": "Valuta's",
+      "CURRENCIES": "Bekende valuta's",
+      "MEMBERS_COUNT": "{{membersCount}} leden"
+    },
+    "VIEW": {
+      "TITLE": "Valuta",
+      "TAB_CURRENCY": "Valuta",
+      "TAB_WOT": "Gemeenschap",
+      "TAB_NETWORK": "Netwerk",
+      "CURRENCY_NAME": "Valuta naam",
+      "MEMBERS": "Ledental",
+      "MEMBERS_VARIATION": "Variatie since {{duration | formatDuration}}",
+      "MONEY_DIVIDER": "Geld",
+      "MASS": "Monetaire massa",
+      "SHARE": "Aandeel per lid",
+      "UD": "Universeel Dividend",
+      "C_ACTUAL": "Huidige toename",
+      "MEDIAN_TIME": "Blockchain tijd",
+      "POW_MIN": "Algemene moeilijkheidsgraad",
+      "MONEY_RULES_DIVIDER": "Monetaire regels",
+      "C_RULE": "Toename",
+      "UD_RULE": "Universeel dividend (formule)",
+      "SIG_QTY_RULE": "Benodigd aantal certificaties om lid te worden",
+      "SIG_STOCK": "Maximum aantal certificaties te versturen per lid",
+      "SIG_PERIOD": "Minimum vertraging tussen 2 certificaties verzonden door één en dezelfde persoon.",
+      "SIG_WINDOW": "Maximum vertraging voor een certificatie in behandeling wordt genomen",
+      "STEP_MAX": "Maximum afstand tussen elk WoT lid en een nieuw lid.",
+      "WOT_RULES_DIVIDER": "Lidmaatschapseisen",
+      "XPERCENT": "Minimum percentage schildwachten te bereiken om de afstandsregel te respecteren"
+    }
+  },
+  "NETWORK": {
+    "VIEW": {
+      "MEDIAN_TIME": "Blockchain tijd",
+      "LOADING_PEERS": "Even geduld...",
+      "NODE_ADDRESS": "Adres :",
+      "ENDPOINTS": {
+        "BMAS": "Endpoint (SSL)",
+        "BMATOR": "Endpoint TOR",
+        "ES_USER_API": "Knoop Cesium+"
+      }
+    },
+    "INFO": {
+      "ONLY_SSL_PEERS": "Les noeuds non SSL ont un affichage dégradé, car Cesium fonctionne en mode HTTPS."
+    }
+  },
+  "PEER": {
+    "PEERS": "Knopen",
+    "SIGNED_ON_BLOCK": "Getekend op blok",
+    "MIRROR": "spiegel",
+    "CURRENT_BLOCK": "Blok #",
+    "VIEW": {
+      "TITLE": "Knoop",
+      "OWNER": "Maakt deel uit van",
+      "SHOW_RAW_PEERING": "Zie netwerkdocument",
+      "KNOWN_PEERS": "Bekende knopen :",
+      "GENERAL_DIVIDER": "Algemene informatie",
+      "ERROR": {
+        "LOADING_TOR_NODE_ERROR": "Kan knooppunt niet worden opgehaald. De wachttijd wordt overschreden.",
+        "LOADING_NODE_ERROR": "Kan knooppunt niet worden opgehaald"
+      }
+    }
+  },
+  "WOT": {
+    "SEARCH_HELP": "Zoeken (lid of publieke sleutel)",
+    "SEARCH_INIT_PHASE_WARNING": "Tijdens de pre-registratiefase, het zoeken van lopende registraties <b>kan lang</b> zijn. Dank je wel geduld...",
+    "REGISTERED_SINCE": "Registratie",
+    "REGISTERED_SINCE_BLOCK": "Geregistreerd op blok #",
+    "NO_CERTIFICATION": "Geen gevalideerde certificaties",
+    "NO_GIVEN_CERTIFICATION": "Geen uitgegeven certificaties",
+    "NOT_MEMBER_PARENTHESIS": "(niet-lid)",
+    "IDENTITY_REVOKED_PARENTHESIS": "(ingetrokken identiteit)",
+    "MEMBER_PENDING_REVOCATION_PARENTHESIS": "(intrekking in behandeling)",
+    "EXPIRE_IN": "Verloopt",
+    "NOT_WRITTEN_EXPIRE_IN": "Uiterlijke<br/>behandeling",
+    "EXPIRED": "Verlopen",
+    "PSEUDO": "Pseudoniem",
+    "SIGNED_ON_BLOCK": "Uitgegeven op block #{{block}}",
+    "WRITTEN_ON_BLOCK": "Geschreven op block #{{block}}",
+    "GENERAL_DIVIDER": "Algemene informatie",
+    "NOT_MEMBER_ACCOUNT": "Simpele rekening (geen lid)",
+    "NOT_MEMBER_ACCOUNT_HELP": "Dit is een eenvoudige rekening, zonder dat er een aanvraag voor lidmaatschap in de wacht wordt gezet.",
+    "TECHNICAL_DIVIDER": "Technische informatie",
+    "BTN_CERTIFY": "Certificeren",
+    "BTN_YES_CERTIFY": "Ja, Certificeren",
+    "BTN_SELECT_AND_CERTIFY": "Nieuwe certificatie",
+    "ACCOUNT_OPERATIONS": "Operaties op de rekening",
+    "VIEW": {
+      "POPOVER_SHARE_TITLE": "Identiteit {{title}}"
+    },
+    "LOOKUP": {
+      "TITLE": "Register",
+      "NEWCOMERS": "Nieuwe leden:",
+      "PENDING": "Aspirant leden:",
+      "REGISTERED": "Geregistreerd {{sigDate | formatFromNow}}",
+      "MEMBER_FROM": "Lid sinds {{memberDate|medianFromNowShort}}",
+      "BTN_NEWCOMERS": "Nieuwste leden",
+      "BTN_PENDING": "Registraties in afwachting",
+      "SHOW_MORE": "Toon meer",
+      "SHOW_MORE_COUNT": "(huidige limiet op {{limit}})",
+      "NO_PENDING": "Er zijn geen registraties in afwachting gevonden.",
+      "NO_NEWCOMERS": "Er zijn geen nieuwe leden gevonden."
+    },
+    "MODAL": {
+      "TITLE": "Zoeken"
+    },
+    "CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Certificaties",
+      "SUMMARY": "Ontvangen certificaties",
+      "LIST": "Details van ontvangen certificaties",
+      "PENDING_LIST": "Certificaties in afwachting",
+      "RECEIVED": "Ontvangen certificaties",
+      "RECEIVED_BY": "Certificaties ontvanged door {{uid}}",
+      "ERROR": "Ontvangen vertificaties met fout",
+      "SENTRY_MEMBER": "Referent lid"
+    },
+    "OPERATIONS": {
+      "TITLE": "Transacties"
+    },
+    "GIVEN_CERTIFICATIONS": {
+      "TITLE": "{{uid}} - Verzonden certificaties",
+      "SUMMARY": "Verzonden certificaties",
+      "LIST": "Details van verzonden certificaties",
+      "PENDING_LIST": "Certificaties in afwachting",
+      "SENT": "Verzonden certificaties",
+      "SENT_BY": "Certificaties verzonden door {{uid}}",
+      "ERROR": "Verzonden certificaties met fout"
+    }
+  },
+  "LOGIN": {
+    "TITLE": "<i class=\"icon ion-locked\"></i> Inloggen",
+    "SALT": "Beveiligingszin",
+    "SALT_HELP": "Zin ter beveiliging van je rekening",
+    "SHOW_SALT": "Toon de beveiligingszin",
+    "PASSWORD": "Wachtwoord",
+    "PASSWORD_HELP": "Wachtwoord ter beveiliging van je rekening",
+    "NO_ACCOUNT_QUESTION": "Nog geen rekening?",
+    "CREATE_ACCOUNT": "Open een rekening",
+    "FORGOTTEN_ID": "Wachtwoord vergeten?"
+  },
+  "ACCOUNT": {
+    "TITLE": "Mijn rekening",
+    "BALANCE": "Saldo",
+    "LAST_TX": "Recente transacties",
+    "BALANCE_ACCOUNT": "Rekeningsaldo",
+    "NO_TX": "Geen transacties",
+    "SHOW_MORE_TX": "Show more",
+    "SHOW_ALL_TX": "Show all",
+    "TX_FROM_DATE": "(huidige limiet op {{fromTime|medianFromNowShort}})",
+    "PENDING_TX": "Transacties in afwachting",
+    "ERROR_TX": "Niet uitgevoerde transacties",
+    "ERROR_TX_SENT": "Verzonden transacties",
+    "ERROR_TX_RECEIVED": "Ontvangen transacties",
+    "EVENTS": "Gebeurtenissen",
+    "WAITING_MEMBERSHIP": "Lidmaatschapsverzoek verzonden. In afwachting van validatie.",
+    "WAITING_CERTIFICATIONS": "Je hebt {{needCertificationCount}} certificatie(s) nodig om lid te worden",
+    "WILL_MISSING_CERTIFICATIONS": "Je heeft binnenkort <b>onvoldoende certificaties</b> (ten minste {{willNeedCertificationCount}} benodigd)",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Je lidmaatschap <b>gaat verlopen op {{membershipExpiresIn|formatDurationTo}}</b>. Vergeet niet <a ng-click=\"doQuickFix('renew')\">je lidmaatschap te vernieuwen</a> voor die tijd.",
+    "CERTIFICATION_COUNT": "Aantal certificaties",
+    "CERTIFICATION_COUNT_SHORT": "Certificaties",
+    "SIG_STOCK": "Voorraad uit te geven certificaties",
+    "BTN_RECEIVE_MONEY": "Ontvangen",
+    "BTN_MEMBERSHIP_IN_DOTS": "Lidmaatschap aanvragen...",
+    "BTN_MEMBERSHIP_RENEW": "Lidmaatschap verlengen",
+    "BTN_MEMBERSHIP_RENEW_DOTS": "Lidmaatschap verlengen...",
+    "BTN_MEMBERSHIP_OUT_DOTS": "Lidmaatschap opzeggen...",
+    "BTN_SEND_IDENTITY_DOTS": "Identiteit publiceren...",
+    "BTN_SECURITY_DOTS": "Rekening en veiligheid...",
+    "BTN_SHOW_DETAILS": "Tonen technische informatie",
+    "BTN_REVOKE": "Deze identiteit<span class='hidden-xs hidden-sm'> definitief</span> opzeggen...",
+    "NEW": {
+      "TITLE": "Registratie",
+      "SLIDE_1_TITLE": "Selecteer een valuta:",
+      "SLIDE_2_TITLE": "Soort rekening:",
+      "MEMBER_ACCOUNT": "Persoonlijke rekening (lidmaatschap)",
+      "MEMBER_ACCOUNT_HELP": "Als je nog niet als individu geregistreerd bent (één rekening per individu mogelijk).",
+      "WALLET_ACCOUNT": "Eenvoudige portefeille",
+      "WALLET_ACCOUNT_HELP": "Als je een onderneming, stichting etc. vertegenwoordigd of eenvoudigweg een additionele portefeille nodig hebt. Geen individueel universeel dividend zal door deze rekening gecréeerd worden.",
+      "SALT_WARNING": "Kies een beveiligingszin.<br/>Deze heb je nodig voor ieder verbinding met je rekening.<br/><br/><b>Zorg dat je deze zin goed onthoud</b>.<br/>Eenmaal verloren, is er geen mogelijkheid om hem te achterhalen!",
+      "PASSWORD_WARNING": "Kies een wachtwoord.<br/>Deze heb je nodig voor ieder verbinding met je rekening.<br/><br/><b>Zorg dat je dit woord goed onthoud</b>.<br/>Eenmaal verloren, is er geen mogelijkheid om hem te achterhalen!",
+      "PSEUDO_WARNING": "Kies een pseudoniem.<br/>Het dient om makkelijker gevonden te worden door anderen.<br/><br/>.Gebruik van spaties, komma's en accenten is niet toegestaan.<br/><div class='hidden-xs'><br/>Voorbeeld: <span class='gray'>JulesDeelder, JohanVermeer, etc.</span>",
+      "PSEUDO": "Pseudoniem",
+      "PSEUDO_HELP": "joe123",
+      "SALT_CONFIRM": "Bevestig",
+      "SALT_CONFIRM_HELP": "Bevestig de beveiligingszin",
+      "PASSWORD_CONFIRM": "Bevestig",
+      "PASSWORD_CONFIRM_HELP": "Bevestig het wachtwoord",
+      "SLIDE_6_TITLE": "Bevestiging:",
+      "COMPUTING_PUBKEY": "Berekening...",
+      "LAST_SLIDE_CONGRATULATION": "Bravo! Je hebt alle verplichte velden ingevuld.<br/>Je kunt je <b>rekeningaanvraag verzenden</b>.<br/><br/>Ter informatie, de publieke sleutel hieronder identificeert je toekomstige rekening.<br/>Je kunt deze aan derde partijen communiceren om geld te ontvangen. Zodra je rekening geopend is, kun je de sleutel terugvinden onder <b>{{'ACCOUNT.TITLE'|translate}}</b>.",
+      "CONFIRMATION_MEMBER_ACCOUNT": "<b class=\"assertive\">Waarschuwing:</b> je beveiligingszin, wachtwoord en pseudoniem kunnen hierna niet gewijzigd worden.<br/><b>Zorg dat ze goed onthoudt!</b><br/><b>Weet je zeker</b> dat je je persoonlijke rekeningaanvraag wil verzenden?",
+      "CONFIRMATION_WALLET_ACCOUNT": "<b class=\"assertive\">Waarschuwing:</b> je wachtwoord en pseudoniem kunnen hierna niet gewijzigd worden.<br/><b>Zorg dat ze goed onthoudt!</b><br/><b>Weet je zeker</b> dat je deze portefeilleaanvraag wil verzenden?",
+      "PSEUDO_AVAILABLE": "Deze naam is beschikbaar",
+      "PSEUDO_NOT_AVAILABLE": "Deze gebruikersnaam is niet beschikbaar",
+      "INFO_LICENSE": "Om de valuta te sluiten, vragen wij u om te lezen en deze licentie te accepteren.",
+      "BTN_ACCEPT": "Ik accepteer",
+      "BTN_ACCEPT_LICENSE": "Ik ga akkoord met de licentie"
+    },
+    "POPUP_REGISTER": {
+      "TITLE": "Voer een pseudoniem in",
+      "HELP": "Een pseudoniem is nodig voor anderen om je te kunnen vinden."
+    },
+    "FILE_NAME": "{{currency}} - Rekeningafschrift {{pubkey|formatPubkey}} {{currentTime|formatDateForFile}}.csv",
+    "HEADERS": {
+      "TIME": "Datum",
+      "AMOUNT": "Bedrag",
+      "COMMENT": "Commentaar"
+    }
+  },
+  "TRANSFER": {
+    "TITLE": "Overboeken",
+    "SUB_TITLE": "Geld overboeken",
+    "FROM": "Van",
+    "TO": "Aan",
+    "AMOUNT": "Bedrag",
+    "AMOUNT_HELP": "Bedrag",
+    "COMMENT": "Opmerking",
+    "COMMENT_HELP": "Opmerking (optioneel)",
+    "BTN_SEND": "Verzenden",
+    "BTN_ADD_COMMENT": "Opmerking toevoegen",
+    "WARN_COMMENT_IS_PUBLIC": "Houd er rekening mee dat <b>reacties openbaar zijn </b> (niet-versleuteld).",
+    "MODAL": {
+      "TITLE": "Overboeking"
+    }
+  },
+  "ERROR": {
+    "POPUP_TITLE": "Error",
+    "UNKNOWN_ERROR": "Unknown error",
+    "CRYPTO_UNKNOWN_ERROR": "Your browser is not compatible with cryptographic features.",
+    "FIELD_REQUIRED": "This field is required.",
+    "FIELD_TOO_SHORT": "Value is too short (min {{minLength]] characters).",
+    "FIELD_TOO_SHORT_WITH_LENGTH": "This field value is too short.",
+    "FIELD_TOO_LONG": "Value is exceeding max length.",
+    "FIELD_TOO_LONG_WITH_LENGTH": "Value is too long (max {{maxLength}} characters).",
+    "FIELD_ACCENT": "Commas and accent characters not allowed",
+    "FIELD_NOT_NUMBER": "Value is not a number",
+    "FIELD_NOT_INT": "Value is not an integer",
+    "PASSWORD_NOT_CONFIRMED": "Must match previous password.",
+    "SALT_NOT_CONFIRMED": "Must match previous phrase.",
+    "SEND_IDENTITY_FAILED": "Error while trying to register.",
+    "SEND_CERTIFICATION_FAILED": "Could not certify identity.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY": "You could not send certification, because your account is <b>not a member account</b>.",
+    "NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF": "You could not send certification now, because your are <b>not a member</b> yet.<br/><br/>You still need certification to become a member.",
+    "IDENTITY_TO_CERTIFY_HAS_NO_SELF": "This account could not be certified. No registration found, or need to renew.",
+    "LOGIN_FAILED": "Error while sign in.",
+    "LOAD_IDENTITY_FAILED": "Could not load identity.",
+    "LOAD_REQUIREMENTS_FAILED": "Could not load identity requirements.",
+    "SEND_MEMBERSHIP_IN_FAILED": "Error while sending registration as member.",
+    "SEND_MEMBERSHIP_OUT_FAILED": "Error while sending membership revocation.",
+    "REFRESH_WALLET_DATA": "Could not refresh wallet.",
+    "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
+    "GET_CURRENCY_FAILED": "Could not load currency.",
+    "SEND_TX_FAILED": "Could not send transaction.",
+    "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
+    "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
+    "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
+    "RESTORE_WALLET_DATA_ERROR": "Error while reloading settings from local storage",
+    "LOAD_WALLET_DATA_ERROR": "Error while loading wallet data.",
+    "COPY_CLIPBOARD_FAILED": "Could not copy to clipboard",
+    "TAKE_PICTURE_FAILED": "Could not get picture.",
+    "SCAN_FAILED": "Could not scan QR code.",
+    "SCAN_UNKNOWN_FORMAT": "Code not recognized.",
+    "WOT_LOOKUP_FAILED": "Search failed.",
+    "LOAD_PEER_DATA_FAILED": "Duniter peer not accessible. Please retry later.",
+    "NEED_LOGIN_FIRST": "Please sign in first.",
+    "AMOUNT_REQUIRED": "Amount is required.",
+    "AMOUNT_NEGATIVE": "Negative amount not allowed.",
+    "NOT_ENOUGH_CREDIT": "Not enough credit.",
+    "INVALID_NODE_SUMMARY": "Unreachable peer or invalid address",
+    "INVALID_USER_ID": "Field 'pseudonym' must not contains spaces or special characters.",
+    "INVALID_COMMENT": "Field 'reference' has a bad format.",
+    "INVALID_PUBKEY": "Public key has a bad format.",
+    "IDENTITY_INVALID_BLOCK_HASH": "This membership application is no longer valid (because it references a block that network peers are cancelled): the person must renew its application for membership <b>before</b> being certified.",
+    "IDENTITY_EXPIRED": "This identity has expired: this person must re-apply <b>before</b> being certified.",
+    "IDENTITY_SANDBOX_FULL": "Could not register, because peer's sandbox is full.<br/><br/>Please retry later or choose another Duniter peer (in <b>Settings</b>).",
+    "WOT_PENDING_INVALID_BLOCK_HASH": "Membership not valid.",
+    "WALLET_INVALID_BLOCK_HASH": "Your membership application is no longer valid (because it references a block that network peers are cancelled).<br/>You must <a ng-click=\"doQuickFix('renew')\">renew your application for membership</a> to fix this issue.",
+    "WALLET_IDENTITY_EXPIRED": "The publication of your identity <b>has expired</b>.<br/>You must <a ng-click=\"doQuickFix('fixIdentity')\">re-issue your identity</a> to resolve this issue.",
+    "WALLET_HAS_NO_SELF": "Your identity must first have been published, and not expired.",
+    "IDENTITY_ALREADY_CERTIFY": "You have <b>already certified</b> that identity.<br/><br/>Your certificate is still valid (expires {{expiresIn|formatDuration}}).",
+    "IDENTITY_ALREADY_CERTIFY_PENDING": "You have <b>already certified</b> that identity.<br/><br/>Your certification is still pending (Deadline for treatment {{expiresIn|formatDuration}}).",
+    "UNABLE_TO_CERTIFY_TITLE": "Unable to certify",
+    "LOAD_NEWCOMERS_FAILED": "Unable to load new members.",
+    "LOAD_PENDING_FAILED": "Unable to load pending registrations.",
+    "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "You must <b>be a member</b> in order to perform this action.",
+    "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "You must have <b>published your identity</b> in order to perform this action.",
+    "EXISTING_ACCOUNT": "Je gegevens komen overeen met een bestaande rekening, met de <a ng-click=\"showHelpModal('pubkey')\">publieke sleutel</a>:",
+    "EXISTING_ACCOUNT_REQUEST": "Gelieve je gegevens te wijzigen zodat ze met een niet gebruikte rekening overeenkomen."
+  },
+  "INFO": {
+    "POPUP_TITLE": "Informatie",
+    "CERTIFICATION_DONE": "Identiteit succesvol getekend",
+    "NOT_ENOUGH_CREDIT": "Niet genoeg krediet",
+    "TRANSFER_SENT": "Verzoek tot overboeken succesvol verzonden",
+    "COPY_TO_CLIPBOARD_DONE": "Kopie geslaagd",
+    "MEMBERSHIP_OUT_SENT": "Opzegging lidmaatschap succesvol verzonden",
+    "NOT_NEED_MEMBERSHIP": "Je bent al lid.",
+    "IDENTITY_WILL_MISSING_CERTIFICATIONS": "Deze identiteit heeft binnenkort onvoldoende certificaties (ten minste {{willNeedCertificationCount}} nodig).",
+    "REVOCATION_SENT": "Intrekking succesvol verzonden",
+    "REVOCATION_SENT_WAITING_PROCESS": "Intrekking <b>is succesvol verzonden</b>. Het wacht op verwerking.",
+    "FEATURE_NOT_AVAILABLE_ON_DEMO": "Functionaliteit niet beschikbaar op deze demonstratiesite.<br/>Om <b>veiligheidsredenen</b> raden we u aan uw kopie van de software te <b>installeren</b>.<br/>Bezoek de website <a href='https://cesium.app'>www.cesium.app</a> voor hulp.",
+    "EMPTY_TX_HISTORY": "Aucune operatie à exporteur"
+  },
+  "CONFIRM": {
+    "CAN_CONTINUE": "<b>Weet je zeker</b> dat je door wil gaan?",
+    "POPUP_TITLE": "<b>Bevestiging</b>",
+    "POPUP_WARNING_TITLE": "<b>Waarschuwing</b>",
+    "CERTIFY_RULES_TITLE_UID": "Certificeer {{uid}}",
+    "CERTIFY_RULES": "<b>Beveiligingswaarschuwing:</b><br/><br/><b class=\"assertive\">Certificeer een rekening niet</b> als je gelooft dat: <ul><li>1.) de aanvrager niet echt is.<li>2.) de aanvrager al een andere gecertificeerde rekening heeft.<li>3.) de aanvrager opzettelijk of door onzorgvuldigheid regel 1 of 2 overtreedt bij het verzenden van certificaten.</ul></small><br/>Weet je zeker dat je deze identieit wilt certificeren?",
+    "TRANSFER": "<b>Samenvatting van de overboeking:</b><br/><br/><ul><li> - Van: <b>{{from}}</b></li><li> - Aan: <b>{{to}}</b></li><li> - Bedrag: <b>{{amount}} {{unit}}</b></li><li> - Opmerking: <i>{{comment}}</i></li></ul><br/><b>Weet je zeker dat je deze overboeking wil doen?</b>",
+    "MEMBERSHIP_OUT": "<b>Waarschuwing</b>:<br/>Je staat op het punt je lidmaatschap te beëindigen. Dit kan <b>niet ongedaan</b> worden gemaakt.<br/></br/><b>Weet je zeker dat je door wil gaan?</b>",
+    "LOGIN_UNUSED_WALLET_TITLE": "Typefout?",
+    "LOGIN_UNUSED_WALLET": "Je bent ingelogged op een rekening die <b>inactief</b> lijkt te zijn.<br/><br/>Als deze rekening niet met de jouwe overeenkomt, komt dat waarschijnlijk door een <b>typefout</b> bij het inloggen.<br/><br/><b>Wilt u toch doorgaan met deze rekening?</b>",
+    "FIX_IDENTITY": "De pseudoniem <b>{{uid}}</b> zal opnieuw gepubliceerd worden, waarmee de oude verlopen publicatie wordt vervangen.<br/></br/><b>Weet je zeker</b> dat je door wil gaan?",
+    "FIX_MEMBERSHIP": "Je verzoek to lidmaatschap zal verstuurd worden.<br/></br/><b>Weet je het zeker?</b>",
+    "RENEW_MEMBERSHIP": "Je lidmaatschap zal verlengd worden.<br/></br/><b>Weet je het zeker?</b>",
+    "REVOKE_IDENTITY": "<b>Beveiligingswaarschuwing:</b><br/>You will <b>definitely revoke this identity</b>.<br/><br/>The public key and the associated nickname <b>will never be used again</b> (for a member account).<br/></br/><b>Are you sure</b> you want to continue?",
+    "REVOKE_IDENTITY_2": "Deze handeling is <b>niet terug te draaien</b>!<br/><br/><b>Weet je zeker</b> dat je door wil gaan?",
+    "NOT_NEED_RENEW_MEMBERSHIP": "Je lidmaatschap hoeft niet verlengd te worden (het zal pas verlopen na {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Weet je zeker</b> dat je een verlengingsaanvraag wil versturen?",
+    "SAVE_BEFORE_LEAVE": "Wil je <b>je wijzigingen opslaan</b> voor je de pagina verlaat?",
+    "SAVE_BEFORE_LEAVE_TITLE": "Wijzigingen niet opgeslagen",
+    "LICENCE": "Ik heb gelezen en geaccepteerd de voorwaarden van de vergunning G1"
+  },
+  "DOWNLOAD": {
+    "POPUP_TITLE": "<b>Intrekkingsdocument</b>",
+    "POPUP_REVOKE_MESSAGE": "Om je rekening te beveiligen, download het <b>rekening intrekkingsdocument</b>. Dit heb je nodig om je rekening op te heffen (in het geval van diefstal, een verandering van ID, een ten onrechte gemaakte rekening, etc.).<br/><br/><b>Bewaar deze op een veilige plaats.</b>"
+  },
+  "HELP": {
+    "TITLE": "Online help",
+    "JOIN": {
+      "SECTION": "Join",
+      "SALT": "The protection phrase is very important. It is used to hash you password, which in turn is used to calculate your <span class=\"text-italic\">public account key</span> (its number) and the private key to access it. <b>Please remeber this phrase well</b>, because there is no way to recover it when lost. What's more, it cannot be changed without having to create a new account.<br/><br/>A good protection phrase must be sufficiently long (8 characters at the very least) and as original as possible.",
+      "PASSWORD": "The password is very important. Together with the protection phrase, it is use to calculate your account number (public key) and the private key to access it. <b>Please remember it well</b>, because there is no way to recover it when lost. What's more, it cannot be changed without having to create a new account.<br/><br/>A good password is made (ideally) of at least 8 characters, with at least one capital and one number.",
+      "PSEUDO": "A pseudonym is used only when joining as <span class=\"text-italic\">member</span>. It is always associated with a wallet (by its <span class=\"text-italic\">public key</span>). It is published on the network so that other users may identify it, certify or send money to the account. A pseudonym must be unique among all members (current and past)."
+    },
+    "GLOSSARY": {
+      "SECTION": "Glossary",
+      "PUBKEY_DEF": "Een publieke sleutel identificeert altijd een portemonnee. Het kan een lid identificeren. In Cesium wordt berekend met de geheime ID en wachtwoord.",
+      "MEMBER": "Member",
+      "MEMBER_DEF": "A member is a real and living human, wishing to participate freely to the monitary community. The member will receive universal dividend, according to the period and amount as defined in the <span class=\"text-italic\">currency parameters</span>.",
+      "CURRENCY_RULES": "Currency rules",
+      "CURRENCY_RULES_DEF": "The currency rules are defined only once, and for all. They set the parameters under which the currency will perform: universal dividend calculation, the amount of certifications needed to become a member, the maximum amount of certifications a member can send, etc.<br/><br/>The parameters cannot be modified because of the use of a <span class=\"text-italic\">Blockchain</span> which carries and executes these rules, and constantly verifies their correct application. <a href=\"#/app/currency\">See current parameters</a>.",
+      "BLOCKCHAIN": "Blockchain",
+      "BLOCKCHAIN_DEF": "The Blockchain is a decentralised system which, in case of Duniter, serves to carry and execute the <span class=\"text-italic\">currency rules</span>.<br/><a href=\"http://en.duniter.org/presentation/\" target=\"_blank\">Read more about Duniter</a> and the working of its blockchain.",
+      "UNIVERSAL_DIVIDEND_DEF": "The Universal Dividend (UD) is the quantity of money co-created by each member, according to the period and the calculation defined in the <span class=\"text-italic\">currency rules</span>.<br/>Every term, the members receive an equal amount of new money on their account.<br/><br/>The UD undergoes a steady growth, to remain fair under its members (current and future), calculated by an average life expectancy, as demonstrated in the Relative Theory of Money (RTM).<br/><a href=\"http://trm.creationmonetaire.info\" target=\"_system\">Read more about RTM</a> and open money."
+    },
+    "TIP": {
+      "MENU_BTN_CURRENCY": "Menu <b>{{'MENU.CURRENCY'|translate}}</b> allows discovery of <b>currency parameters</b> and its state.",
+      "CURRENCY_WOT": "The <b>member count</b> shows the <b>community's weight and evolution</b>.",
+      "CURRENCY_MASS": "Shown here is the <b>total amount</b> currently in circulation and its <b>average distribution</b> per member.<br/><br/>This allows to estimate the <b>worth of any amount</b>, in respect to what <b>others own</b> on their account (on average).",
+      "CURRENCY_UNIT_RELATIVE": "The unit used here (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amounts in {{currency|capitalize}} have been devided by the <b>Universal Dividend</b> (UD).<br/><br/><small>This relative unit is <b>relevant</b> because it is stable in contrast to the permanently growing monitary mass.</small>",
+      "CURRENCY_CHANGE_UNIT": "This button allows to <b>switch the unit</b> to show amounts in <b>{{currency|capitalize}}</b>, undevided by the Universal Dividend (instead of in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;).",
+      "CURRENCY_CHANGE_UNIT_TO_RELATIVE": "This button allows to <b>switch the unit</b> to show amounts in &ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;, which is relative to the Universal Dividend (the amount co-produced by each member).",
+      "CURRENCY_RULES": "The <b>rules</b> of the currency determine its <b>exact and predictible</b> performance.<br/><br/>As a true DNA of the currency these rules make the monetary code <b>transparent and understandable</b>.",
+      "NETWORK_BLOCKCHAIN": "All monetary transactions are recoded in a <b>public and tamper proof</b> ledger, generally referred to as the <b>blockchain</b>.",
+      "NETWORK_PEERS": "The <b>peers</b> shown here correspond to <b>computers that update and check</b> the blockchain.<br/><br/>The more active peers there are, the more <b>decentralised</b> and therefore trustworhty the currency becomes.",
+      "NETWORK_PEERS_BLOCK_NUMBER": "This <b>number</b> indicates the peer's <b>latest validated block</b> (last page written in the ledger).<br/><br/>Green indicates that the block was equally validated by the <b>majority of other peers</b>.",
+      "NETWORK_PEERS_PARTICIPATE": "<b>Each member</b>, equiped with a computer with Internet, <b>can participate, adding a peer</b> simply by <b>installing the Duniter software</b> (free/libre and open source). <a href=\"{{installDocUrl}}\" target=\"_system\">Read the installation manual &gt;&gt;</a>.",
+      "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> allows access to your account balance and transaction history.",
+      "MENU_BTN_ACCOUNT_MEMBER": "Here you can consult your account status, transaction history and your certifications.",
+      "WALLET_CERTIFICATIONS": "Click here to reveiw the details of your certifications (given and received).",
+      "WALLET_BALANCE": "Your account <b>balance</b> is shown here.",
+      "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>The used unit (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency}}</sub></b>&rdquo;) signifies that the amount in {{currency|capitalize}} has been divided by the <b>Universal Dividend</b> (UD) co-created by each member.<br/>At this moment, 1 UD equals {{currentUD}} {{currency|capitalize}}.",
+      "WALLET_BALANCE_CHANGE_UNIT": "You can <b>change the unit</b> in which amounts are shown in <b><i class=\"icon ion-android-settings\"></i>&nbsp;{{'MENU.SETTINGS'|translate}}</b>.<br/><br/>For example, to display amounts <b>directly in {{currency|capitalize}}</b> instead of relative amounts.",
+      "WALLET_SEND": "Issue a payment in just a few clicks.",
+      "WALLET_SEND_NO_MONEY": "Issue a payment in just a few clicks.<br/>(Your balance does not allow this yet)",
+      "WALLET_OPTIONS": "Please note that this button allows access to <b>other, less used actions</b>.<br/><br/>Don't forget to take a quick look, when you have a moment!",
+      "WALLET_RECEIVED_CERTS": "This shows the list of persons that certified you.",
+      "WALLET_CERTIFY": "The button <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> allows selecting an identity and certifying it.<br/><br/>Only users that are <b>already member</b> may certify others.",
+      "WALLET_CERT_STOCK": "Your supply of certifications (to send) is limited to <b>{{sigStock}} certifications</b>.<br/><br/>This supply will replete itself over time, as and when earlier certifications expire.",
+      "MENU_BTN_WOT": "The menu <b>{{'MENU.WOT'|translate}}</b> allows searching <b>users</b> of the currency (member or not).",
+      "WOT_SEARCH_TEXT_XS": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>The search will start automatically.",
+      "WOT_SEARCH_TEXT": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>Then hit <b>Enter</b> to start the search.",
+      "WOT_SEARCH_RESULT": "Simply click a user row to view the details sheet.",
+      "WOT_VIEW_CERTIFICATIONS": "The row <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> shows how many members members validated this identity.<br/><br/>These certifications testify that the account belongs to <b>a living human</b> and this person has <b>no other member account</b>.",
+      "WOT_VIEW_CERTIFICATIONS_COUNT": "There are at least <b>{{sigQty}} certifications</b> needed to become a member and receive the <b>Universal Dividend</b>.",
+      "WOT_VIEW_CERTIFICATIONS_CLICK": "Click here to open <b>a list of all certifications</b> given to and by this identity.",
+      "WOT_VIEW_CERTIFY": "The button <b>{{'WOT.BTN_CERTIFY'|translate}}</b> allows to add your certification to this identity.",
+      "CERTIFY_RULES": "<b>Attention:</b> Only certify <b>real and living persons</b> that do not own any other certified account.<br/><br/>The trust carried by the currency depends on each member's vigilance!",
+      "MENU_BTN_SETTINGS": "The <b>{{'MENU.SETTINGS'|translate}}</b> allow you to configure the Cesium application.<br/><br/>For example, you can <b>change the unit</b> in which the currency will be shown.",
+      "HEADER_BAR_BTN_PROFILE": "Click here to access your <b>user profile</b>",
+      "SETTINGS_CHANGE_UNIT": "You can <b>change the display unit</b> of amounts by clicking here.<br/><br/>- Deactivate the option to show amounts in {{currency|capitalize}}.<br/>- Activate the option for relative amounts in {{'COMMON.UD'|translate}}<sub>{{currency}}</sub> (<b>divided</b> by the current Universal Dividend).",
+      "END_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>Welcome to the <b>free economy</b>!",
+      "END_NOT_LOGIN": "This guided visit has <b>ended</b>.<br/><br/>If you wish to join the currency {{currency|capitalize}}, simply click <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> below."
+    }
+  }
+}
diff --git a/package-lock.json b/package-lock.json
index 2490240e2357b965720c48b4eaf5527fbc81eeb2..9cd2692d7290ab8d07921914adbce87e59ec7deb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "cesium",
-  "version": "2.0.0-alpha42",
+  "version": "2.0.0-alpha43",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cesium",
-      "version": "2.0.0-alpha42",
+      "version": "2.0.0-alpha43",
       "license": "AGPL-3.0",
       "dependencies": {
         "@angular/animations": "^18.2.13",
@@ -55,8 +55,10 @@
         "apollo3-cache-persist": "~0.14.1",
         "bs58": "^5.0.0",
         "chart.js": "^4.4.7",
+        "discourse2": "^1.1.25",
         "graphql-tag": "~2.12.6",
         "graphql-ws": "~5.16.0",
+        "ionic-cache": "^6.0.3",
         "ionicons": "~7.4.0",
         "jdenticon": "^3.3.0",
         "localforage": "~1.10.0",
@@ -12408,6 +12410,14 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
+    "node_modules/ajv-errors": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz",
+      "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==",
+      "peerDependencies": {
+        "ajv": "^8.0.1"
+      }
+    },
     "node_modules/ajv-formats": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
@@ -16191,6 +16201,17 @@
         "node": ">=8"
       }
     },
+    "node_modules/discourse2": {
+      "version": "1.1.26",
+      "resolved": "https://registry.npmjs.org/discourse2/-/discourse2-1.1.26.tgz",
+      "integrity": "sha512-unXK6XyFnLmdcMJI8GyU4NS/uoQdvHJTJTzWMqZrnuTkAcfwfnZLpxHVp7Nm7BnKvXzltuuv3cgGUS3WfSIjgg==",
+      "dependencies": {
+        "ajv": "^8.17.1",
+        "ajv-errors": "^3.0.0",
+        "ajv-formats": "^3.0.1",
+        "openapi-types": "^12.1.3"
+      }
+    },
     "node_modules/dns-packet": {
       "version": "5.6.1",
       "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@@ -19670,6 +19691,19 @@
         "loose-envify": "^1.0.0"
       }
     },
+    "node_modules/ionic-cache": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/ionic-cache/-/ionic-cache-6.0.3.tgz",
+      "integrity": "sha512-jlnFC5aVW6bslP8m4a4U287kwpfY5ZzKD0EhO6ko+coYwIsC2VXgcTDPheH7F5ydgW5ioyCq6Z2gkSPYDDe21w==",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@angular/common": ">=9.0.0",
+        "@angular/core": ">=9.0.0",
+        "@ionic/storage-angular": ">=3"
+      }
+    },
     "node_modules/ionicons": {
       "version": "7.4.0",
       "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz",
@@ -24672,6 +24706,11 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/openapi-types": {
+      "version": "12.1.3",
+      "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
+      "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="
+    },
     "node_modules/optimism": {
       "version": "0.18.1",
       "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz",
diff --git a/package.json b/package.json
index 95e4f54ab9e41648ec7ee80e050a865ad85a427e..42a6fb1ecb8909087f856529e4ae1e80a6bd94d0 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,13 @@
     "android:install": "node scripts/node/android-install.js",
     "android:clean": "cd android && ./gradlew clean",
     "android:list": "native-run android --list",
+    "ios:init": "ionic capacitor add ios && npm run resources",
+    "ios:sync": "ionic capacitor sync ios",
+    "ios:start": "ionic capacitor run ios -l --external",
+    "ios:build": "ionic capacitor build ios --no-open --configuration production --release && npm run ios:i18n:build",
+    "ios:i18n:build": "npm run i18n:build ios/App/App/public/assets/i18n",
+    "ios:open": "ionic capacitor build ios --prod && npm run ios:i18n:build && ionic capacitor open ios",
+    "ios:list": "native-run ios --list",
     "electron:sync": "ionic capacitor sync electron",
     "electron:start": "ionic capacitor build electron",
     "electron:build": "ionic capacitor sync electron && cd electron && npm run build",
@@ -76,12 +83,12 @@
     "src/**/*.{css,json,md,scss}": "prettier --write"
   },
   "peerDependencies": {
+    "@angular/cdk": "^18.2.13",
+    "@angular/common": "^18.2.13",
     "@apollo/client": "~3.12.11",
     "localforage": "~1.10.0",
     "rxjs": "~7.8.1",
-    "zone.js": "~0.14.10",
-    "@angular/common": "^18.2.13",
-    "@angular/cdk": "^18.2.13"
+    "zone.js": "~0.14.10"
   },
   "dependencies": {
     "@angular/animations": "^18.2.13",
@@ -130,8 +137,10 @@
     "apollo3-cache-persist": "~0.14.1",
     "bs58": "^5.0.0",
     "chart.js": "^4.4.7",
+    "discourse2": "^1.1.25",
     "graphql-tag": "~2.12.6",
     "graphql-ws": "~5.16.0",
+    "ionic-cache": "^6.0.3",
     "ionicons": "~7.4.0",
     "jdenticon": "^3.3.0",
     "localforage": "~1.10.0",
diff --git a/src/app/account/accounts.service.ts b/src/app/account/accounts.service.ts
index 81a7f1fcb128f33f99d4511cfbaac97a28338c18..9e1ef7e8bf15db57d089e2d8cbe6c0efb72a5b40 100644
--- a/src/app/account/accounts.service.ts
+++ b/src/app/account/accounts.service.ts
@@ -35,6 +35,9 @@ import { ExtrinsicError, ExtrinsicUtils } from '@app/shared/substrate/extrinsic.
 import { IdentityStatusEnum } from '@app/network/indexer/indexer-types.generated';
 import { PodService } from '@app/network/pod/pod.service';
 import { FetchPolicy } from '@apollo/client';
+import { TranslateService } from '@ngx-translate/core';
+import { WotService } from '@app/wot/wot.service';
+import { CertificationSearchFilter } from '@app/certification/history/cert-history.model';
 
 // kind of certify action
 enum CertType {
@@ -56,6 +59,7 @@ export interface LoadAccountDataOptions {
   withProfile?: boolean;
   fetchPolicy?: FetchPolicy;
 }
+
 export interface WatchAccountDataOptions extends LoadAccountDataOptions {}
 
 export interface AccountsState {
@@ -85,8 +89,10 @@ export class AccountsService extends RxStartableService<AccountsState> {
   constructor(
     protected network: NetworkService,
     protected indexer: IndexerService,
+    protected wot: WotService,
     protected pod: PodService,
     protected settings: SettingsService,
+    protected translate: TranslateService,
     @Inject(APP_STORAGE) protected storage: IStorage,
     @Inject(APP_AUTH_CONTROLLER) protected authController: IAuthController
   ) {
@@ -222,6 +228,7 @@ export class AccountsService extends RxStartableService<AccountsState> {
       default: true,
       ...data.meta,
       self: true,
+      isMember: true,
     };
 
     const { pair, account } = await this.createAccount(data);
@@ -502,7 +509,13 @@ export class AccountsService extends RxStartableService<AccountsState> {
       return this.accounts$.pipe(
         map((accounts) => accounts?.find((a) => a.address === address)),
         tap((account) => account || stopWatching.next()),
-        mergeMap(async (account) => this.loadData(account, { ...opts, withMembership: false, fetchPolicy: 'cache-first' })),
+        mergeMap(async (account) =>
+          this.loadData(account, {
+            ...opts,
+            withMembership: false,
+            fetchPolicy: 'cache-first',
+          })
+        ),
         takeUntil(stopWatching)
       );
     }
@@ -514,7 +527,13 @@ export class AccountsService extends RxStartableService<AccountsState> {
 
     return this.indexer.wotSearch({ address }, { first: 1, fetchPolicy: 'cache-first' }).pipe(
       map(({ data }) => firstArrayValue(data) || { address, meta: { name: formatAddress(address) } }),
-      mergeMap(async (account) => this.loadData(account, { ...opts, withMembership: false, fetchPolicy: 'cache-first' }))
+      mergeMap(async (account) =>
+        this.loadData(account, {
+          ...opts,
+          withMembership: false,
+          fetchPolicy: 'cache-first',
+        })
+      )
     );
   }
 
@@ -523,9 +542,10 @@ export class AccountsService extends RxStartableService<AccountsState> {
    * @param from
    * @param to
    * @param amount the TX amount, using decimals
+   * @param comment
    * @param fee the TX fee, using decimals
    */
-  async transfer(from: Partial<Account>, to: Partial<Account>, amount: number, fee?: number): Promise<string> {
+  async transfer(from: Partial<Account>, to: Partial<Account>, amount: number, comment?: string, fee?: number): Promise<string> {
     if (!from || !to) throw new Error("Missing argument 'from' or 'to' !");
     const currency = this.network.currency;
 
@@ -578,31 +598,59 @@ export class AccountsService extends RxStartableService<AccountsState> {
     }
 
     try {
+      let txHash;
       // Sign and send a transfer from Alice to Bob
-      const txHash = await this.api.tx.balances.transferKeepAlive(to.address, amount).signAndSend(issuerPair, async ({ status, events }) => {
-        if (status.isInBlock) {
-          console.info(`${this._logPrefix}Extrinsic status`, status.toHuman());
-          console.info(`${this._logPrefix}Completed at block hash #${status.hash.toHuman()}`);
-
-          if (this._debug) console.debug(`${this._logPrefix}Block events:`, JSON.stringify(events));
+      if (isNotNilOrBlank(comment)) {
+        const txTransfer = this.api.tx.balances.transferKeepAlive(to.address, amount);
+        const txComment = this.api.tx.system.remarkWithEvent(comment ?? '');
+        txHash = this.api.tx.utility.batch([txTransfer, txComment]).signAndSend(issuerPair, async ({ status, events }) => {
+          if (status.isInBlock) {
+            console.info(`${this._logPrefix}Extrinsic status`, status.toHuman());
+            console.info(`${this._logPrefix}Completed at block hash #${status.hash.toHuman()}`);
+
+            if (this._debug) console.debug(`${this._logPrefix}Block events:`, JSON.stringify(events));
+
+            // List of outdated accounts
+            const outdatedAccounts = [issuerAccount];
+
+            // Add receiver to outdated account
+            if (await this.isAvailable(to.address)) {
+              const toAccount = await this.getByAddress(to.address);
+              outdatedAccounts.push(toAccount);
+            }
+
+            await sleep(200); // Wait 200ms
+
+            await this.refreshData(outdatedAccounts, { reload: true });
+          } else {
+            console.info(`${this._logPrefix}Current status: `, status.toHuman());
+          }
+        });
+      } else {
+        txHash = this.api.tx.balances.transferKeepAlive(to.address, amount).signAndSend(issuerPair, async ({ status, events }) => {
+          if (status.isInBlock) {
+            console.info(`${this._logPrefix}Extrinsic status`, status.toHuman());
+            console.info(`${this._logPrefix}Completed at block hash #${status.hash.toHuman()}`);
 
-          // List of outdated accounts
-          const outdatedAccounts = [issuerAccount];
+            if (this._debug) console.debug(`${this._logPrefix}Block events:`, JSON.stringify(events));
 
-          // Add receiver to outdated account
-          if (await this.isAvailable(to.address)) {
-            const toAccount = await this.getByAddress(to.address);
-            outdatedAccounts.push(toAccount);
-          }
+            // List of outdated accounts
+            const outdatedAccounts = [issuerAccount];
 
-          await sleep(200); // Wait 200ms
+            // Add receiver to outdated account
+            if (await this.isAvailable(to.address)) {
+              const toAccount = await this.getByAddress(to.address);
+              outdatedAccounts.push(toAccount);
+            }
 
-          await this.refreshData(outdatedAccounts, { reload: true });
-        } else {
-          console.info(`${this._logPrefix}Current status: `, status.toHuman());
-        }
-      });
+            await sleep(200); // Wait 200ms
 
+            await this.refreshData(outdatedAccounts, { reload: true });
+          } else {
+            console.info(`${this._logPrefix}Current status: `, status.toHuman());
+          }
+        });
+      }
       // Show the hash
       console.info(`${this._logPrefix}Finalized hash ${txHash}`);
 
@@ -617,8 +665,16 @@ export class AccountsService extends RxStartableService<AccountsState> {
    *
    * @param from
    * @param to
+   * @param opts
    */
-  async cert(from: Partial<Account>, to: Partial<Account>, opts = { allowCreation: true, confirmBeforeCreation: true }): Promise<string> {
+  async cert(
+    from: Account,
+    to: Account,
+    opts = {
+      allowCreation: true,
+      confirmBeforeCreation: true,
+    }
+  ): Promise<string> {
     if (!from || !to) throw new Error("Missing argument 'from' or 'to' !");
 
     // Check currency
@@ -670,17 +726,35 @@ export class AccountsService extends RxStartableService<AccountsState> {
         case IdentityStatusEnum.Unconfirmed:
           console.log('can not certify unconfirmed identity');
           break;
-        case IdentityStatusEnum.Unvalidated:
-          // TODO special case for last certification: request distance evaluation
+        case IdentityStatusEnum.Unvalidated: {
+          // special case for last certification: request distance evaluation
+          const toAccount = <Account>{ address: to.address, meta: to.meta, data: to.data, publicKey: to.publicKey };
+          const toAccountRefereePercent = await this.wot.getRefereePercentByAccount(toAccount);
+          if (toAccountRefereePercent > this.network.currency.params.minAccessibleReferees / 1000000000) {
+            certType = CertType.IdentityCreation;
+          } else {
+            certType = CertType.CertCreation;
+          }
           break;
-        case IdentityStatusEnum.Notmember:
-          // TODO prevent certifying if lost membership for membership non renewal
+        }
+        case IdentityStatusEnum.Notmember: {
+          // prevent certifying if lost membership for membership non renewal
+          const toAccountRefereePercent = await this.wot.getRefereePercentByAccount(to);
+          if (toAccountRefereePercent > this.network.currency.params.minAccessibleReferees / 1000000000) {
+            certType = CertType.CertRenewal;
+          }
           break;
-        default:
-          // ok to certify
-          // TODO check if certification already exists (renewal)
-          certType = CertType.CertCreation;
+        }
+        default: {
+          // check if certification already exists (renewal)
+          const isRenewal = await this.isCertValid({ receiver: to.address, issuer: from.address });
+          if (isRenewal) {
+            certType = CertType.CertRenewal;
+          } else {
+            certType = CertType.CertCreation;
+          }
           break;
+        }
       }
     }
 
@@ -689,9 +763,12 @@ export class AccountsService extends RxStartableService<AccountsState> {
     try {
       let tx = null;
       switch (certType) {
-        case CertType.IdentityCreation:
-          tx = this.api.tx.identity.createIdentity(to.address);
+        case CertType.IdentityCreation: {
+          const txCertify = this.api.tx.identity.addCert(to.meta.index);
+          const txIdentity = this.api.tx.identity.createIdentity(to.address);
+          tx = this.api.tx.utility.batch([txCertify, txIdentity]);
           break;
+        }
         case CertType.CertCreation:
           tx = this.api.tx.certification.addCert(to.meta.index);
           break;
@@ -759,7 +836,7 @@ export class AccountsService extends RxStartableService<AccountsState> {
       const derivationPath = i === -1 ? '' : `//${i}`;
       const address = this.generateAddress(`${mnemonic}${derivationPath}`);
       const shortAddress = formatAddress(address);
-      derivationAccounts.push({ derivation: derivationPath, address, meta: { name: shortAddress} });
+      derivationAccounts.push({ derivation: derivationPath, address, meta: { name: shortAddress } });
     }
     // Load balances data (e.g. balance)
     await Promise.all(derivationAccounts.map((account) => this.loadData(account, { withBalance: true })));
@@ -768,6 +845,31 @@ export class AccountsService extends RxStartableService<AccountsState> {
     return derivationAccounts.filter((account) => AccountUtils.getBalance(account) > 0);
   }
 
+  async isCertValid(filter: CertificationSearchFilter) {
+    const certs = await firstValueFrom(this.indexer.certsSearch({ receiver: filter.receiver }));
+    return isNotEmptyArray(certs.data.filter((cert) => cert.account.address === filter.issuer));
+  }
+
+  async claimUds(account: Account) {
+    const issuerPair = keyring.getPair(account.address);
+    if (issuerPair.isLocked) {
+      console.debug(`[account-service] Unlocking address ${account.address} ...`);
+      const isAuth = await this.auth();
+      if (!isAuth) throw new Error('ERROR.AUTH_REQUIRED');
+      issuerPair.unlock(this._password);
+    }
+
+    try {
+      const tx = this.api.tx.universalDividend.claimUds();
+      const { status } = await ExtrinsicUtils.submit(tx, issuerPair);
+      console.info(`${this._logPrefix}Extrinsic status`, status.toHuman());
+      return status.toHuman();
+    } catch (err) {
+      console.error(err);
+      throw new Error('ERROR.CLAIM_UD_FAILED');
+    }
+  }
+
   /**
    * Load account data (balance, tx history, etc.).
    * This load can be skipped, when data already loaded (See options)
diff --git a/src/app/account/wallet/wallet.page.html b/src/app/account/wallet/wallet.page.html
index 0238549e084dc6564913930c3994e55ae45305d5..cdb23b72a6cdc45f5f8202f8109f327d7f8cea7f 100644
--- a/src/app/account/wallet/wallet.page.html
+++ b/src/app/account/wallet/wallet.page.html
@@ -17,12 +17,12 @@
 </ion-header>
 
 <!-- options menu -->
-<ion-popover #optionsPopover trigger="options-menu-trigger" triggerAction="click">
+<ion-popover #optionsPopover [dismissOnSelect]="true" trigger="options-menu-trigger" triggerAction="click">
   <ng-template>
     <ion-content class="ion-no-padding">
       <ion-list-header translate>COMMON.POPOVER_ACTIONS_TITLE</ion-list-header>
       <ion-list>
-        <ion-item (click)="addNewWallet($event)" tappable>
+        <ion-item (click)="addNewWallet()" tappable>
           <ion-label translate>ACCOUNT.WALLET_LIST.BTN_NEW_DOTS</ion-label>
         </ion-item>
       </ion-list>
@@ -75,9 +75,9 @@
         </ion-button>
 
         <!-- Confirm identity -->
-        @if (account.meta?.status === IdentityStatusEnum.Unconfirmed) {
+        @if (account.meta?.status === IdentityStatusEnum.Unconfirmed && distanceRuleValid()) {
           <ion-button (click)="confirmIdentity()" [disabled]="loading" color="tertiary">
-            <!--            <ion-icon slot="start" name="checkmark-circle-outline"></ion-icon>-->
+            <ion-icon slot="start" name="checkmark-circle"></ion-icon>
             <ion-label translate>ACCOUNT.BTN_CONFIRM_MEMBERSHIP</ion-label>
           </ion-button>
         }
@@ -178,6 +178,18 @@
             <ion-label translate>WOT.GIVEN_CERTIFICATIONS.SENT</ion-label>
             <ion-badge color="success" slot="end">{{ givenCertCount$ | push }}</ion-badge>
           </ion-item>
+
+          <!-- Distance rule -->
+          <ion-item [disabled]="disableDistanceRule()">
+            <ion-icon aria-hidden="true" slot="start" name="logo-steam"></ion-icon>
+            <ion-label translate>
+              HELP.GLOSSARY.DISTANCE_RULE
+              <ion-icon [color]="'tertiary'" name="help-circle-outline" (click)="showModalDistanceRuleDefinition()" tappable></ion-icon>
+            </ion-label>
+            <ion-badge title="{{ titleDistanceRule() }}" color="{{ distanceRuleValid() ? 'success' : 'danger' }}">
+              {{ refereePercent$ | async | percent: '1.1' }}
+            </ion-badge>
+          </ion-item>
         }
 
         <!-- TX history -->
diff --git a/src/app/account/wallet/wallet.page.ts b/src/app/account/wallet/wallet.page.ts
index ca08ac231e1b41141827c8e43c0c41645087a54b..0c2dafb972f758469b5246cff5b47ad10dfd63cb 100644
--- a/src/app/account/wallet/wallet.page.ts
+++ b/src/app/account/wallet/wallet.page.ts
@@ -10,7 +10,7 @@ import { ActivatedRoute, Router } from '@angular/router';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
 import { distinctUntilChanged, filter, mergeMap, switchMap } from 'rxjs/operators';
 import { AccountsService } from '@app/account/accounts.service';
-import { map, merge, Observable } from 'rxjs';
+import { from, map, merge, Observable } from 'rxjs';
 import { RxState } from '@rx-angular/state';
 import { APP_TRANSFER_CONTROLLER, ITransferController, TransferFormOptions } from '@app/transfer/transfer.model';
 import { TranslateModule } from '@ngx-translate/core';
@@ -21,16 +21,22 @@ import { IdentityStatusEnum } from '@app/network/indexer/indexer-types.generated
 import { AppIdentityConfirmModule } from '@app/account/confirm/identity-confirm.module';
 import { IdentityConfirmModal } from '@app/account/confirm/identity-confirm.modal';
 import { fadeInOutAnimation, slideUpDownAnimation } from '@app/shared/animations';
+import { Currency } from '@app/currency/currency.model';
+import { DistanceInformation, WotService } from '@app/wot/wot.service';
+import { HelpPage } from '@app/home/help/help.page';
 
 export interface WalletState extends AppPageState {
   accounts: Account[];
   account: Account;
   address: string;
-  currency: string;
+  currencySymbol: string;
+  currency: Currency;
   balance: number;
   receivedCertCount: number;
   givenCertCount: number;
   status: IdentityStatusEnum;
+  refereePercent: number;
+  distanceInformation: DistanceInformation;
 }
 
 @Component({
@@ -56,13 +62,17 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
   @RxStateProperty() accounts: Account[];
   @RxStateProperty() account: Account;
   @RxStateProperty() address: string;
-  @RxStateProperty() currency: string;
+  @RxStateProperty() currencySymbol: string;
+  @RxStateProperty() currency: Currency;
+  @RxStateProperty() refereePercent: number;
+  @RxStateProperty() distanceInformation: DistanceInformation;
 
   @RxStateSelect() account$: Observable<Account>;
   @RxStateSelect() accounts$: Observable<Account[]>;
   @RxStateSelect() receivedCertCount$: Observable<number>;
   @RxStateSelect() givenCertCount$: Observable<number>;
   @RxStateSelect() status$: Observable<IdentityStatusEnum>;
+  @RxStateSelect() refereePercent$: Observable<number>;
 
   get balance(): number {
     if (!this.account?.data) return undefined;
@@ -89,6 +99,7 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
     protected route: ActivatedRoute,
     protected networkService: NetworkService,
     protected accountService: AccountsService,
+    protected wotService: WotService,
     protected modalCtrl: ModalController,
     @Inject(APP_TRANSFER_CONTROLLER) protected transferController: ITransferController
   ) {
@@ -171,6 +182,15 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
         filter(isNotNil)
       )
     );
+
+    this._state.connect(
+      'refereePercent',
+      this._state.select('account').pipe(switchMap((account) => from(this.wotService.getRefereePercentByAccount(account))))
+    );
+    this._state.connect(
+      'distanceInformation',
+      this._state.select('account').pipe(switchMap((account) => from(this.wotService.getDistanceInformation(account))))
+    );
   }
 
   async ngOnInit() {
@@ -184,7 +204,8 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
     return <WalletState>{
       account: null,
       address: this.activatedRoute.snapshot.paramMap.get('address'),
-      currency: this.networkService.currencySymbol,
+      currencySymbol: this.networkService.currencySymbol, // TODO: delete to use instead currency.currencySymbol?
+      currency: this.networkService.currency,
     };
   }
 
@@ -207,16 +228,11 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
     return this.qrCodeModal.present();
   }
 
-  async addNewWallet(event?: Event): Promise<Account> {
-    event?.preventDefault();
-    event?.stopPropagation();
-    this.optionsPopover?.dismiss();
-
+  async addNewWallet(): Promise<Account> {
     const data = await this.accountService.createNew();
     if (!data) return null;
 
     this.account = data;
-
     return data;
   }
 
@@ -229,8 +245,18 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
   }
 
   async confirmIdentity(): Promise<void> {
-    console.info(`${this._logPrefix}Opening identity confirm modal...`);
+    if (!this.distanceRuleValid()) {
+      console.info(`${this._logPrefix}Distance rule not valid`);
+      await this.showToast({
+        id: 'distance-rule-not-valid',
+        message: 'ACCOUNT.MEMBER_CONVERT_FAILED',
+        swipeGesture: 'vertical',
+        color: 'danger',
+      });
+      return;
+    }
 
+    console.info(`${this._logPrefix}Opening identity confirm modal...`);
     const modal = await this.modalCtrl.create({
       component: IdentityConfirmModal,
       presentingElement: this._presentingElement,
@@ -255,10 +281,44 @@ export class WalletPage extends AppPage<WalletState> implements OnInit {
       await this.accountService.confirm(this.account, data.pseudo);
 
       // Show toast
-      await this.showToast({ id: 'confirm-identity', message: 'INFO.CONFIRM_IDENTITY_DONE', swipeGesture: 'vertical', color: 'secondary' });
+      await this.showToast({
+        id: 'confirm-identity',
+        message: 'INFO.CONFIRM_IDENTITY_DONE',
+        swipeGesture: 'vertical',
+        color: 'secondary',
+      });
     } catch (err) {
       this.showErrorToast(err, { id: 'confirm-identity' });
       this.markAsLoaded();
     }
   }
+
+  distanceRuleValid(): boolean {
+    return this.refereePercent > this.networkService.currency.params.minAccessibleReferees / 1000000000;
+  }
+
+  disableDistanceRule(): boolean {
+    return isNil(this.refereePercent);
+  }
+
+  titleDistanceRule() {
+    return this.translate.instant('ACCOUNT.TITLE_DISTANCE_RULES', {
+      refereesReached: this.distanceInformation?.refereesReached,
+      refereesCount: this.distanceInformation?.refereesCount,
+      height: this.distanceInformation?.height,
+    });
+  }
+
+  async showModalDistanceRuleDefinition() {
+    const modal = await this.modalCtrl.create({
+      id: 'help-modal',
+      component: HelpPage,
+      componentProps: <HelpPage>{
+        highlightedDefinition: 'GLOSSARY_DISTANCE_RULE',
+      },
+      presentingElement: this._presentingElement,
+      canDismiss: true,
+    });
+    await modal.present();
+  }
 }
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 3840930e009ce246137ef43dddbdddd0fcfb37c6..5b89b2302dc972493e8374a37893541fe4e575bf 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -44,6 +44,10 @@ const routes: Routes = [
     path: 'settings',
     loadChildren: () => import('./settings/settings-routing.module').then((m) => m.AppSettingsRoutingModule),
   },
+  {
+    path: 'help',
+    loadChildren: () => import('./home/help/help-routing.module').then((m) => m.HelpPageRoutingModule),
+  },
 
   // -- DEV only
   {
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 0ba8858afdbfdffceaa9da7a91ce1b117d86ac74..034a1ff69efbe215a16f01e80e27017928f69c8e 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -3,7 +3,20 @@
     <ion-menu contentId="main-content" type="overlay">
       <ion-content [class.dark]="settings.darkMode$ | async">
         <ion-list id="main-menu-list">
-          <ion-list-header class="title" [innerHTML]="'COMMON.APP_NAME' | translate"></ion-list-header>
+          <div style="display: inline-block">
+            <ion-list-header style="overflow: visible">
+              @if (isDemo()) {
+                <a>
+                  <ion-badge color="danger" (click)="openHelpModal('DEMO_MODE_HELP')" tappable translate>MODE.DEMO.BADGE</ion-badge>
+                </a>
+              } @else if (isDev()) {
+                <a>
+                  <ion-badge color="success" (click)="openHelpModal('READONLY_MODE_HELP')" tappable translate>MODE.READONLY.BADGE</ion-badge>
+                </a>
+              }
+              <ion-label [innerHTML]="'COMMON.APP_NAME' | translate"></ion-label>
+            </ion-list-header>
+          </div>
 
           <ion-note></ion-note>
 
@@ -12,6 +25,13 @@
           }
         </ion-list>
       </ion-content>
+      <ion-footer>
+        <ion-item color="light" class="ion-tappable ion-focusable">
+          <ion-icon color="medium" slot="start" name="help-circle-outline" routerDirection="root" [routerLink]="'/help'" tappable></ion-icon>
+          <ion-label color="medium" [translateParams]="{ version: getVersion() }" translate>COMMON.APP_VERSION</ion-label>
+          <ion-label color="medium" slot="end" (click)="openAboutModal()" tappable translate>HOME.BTN_ABOUT</ion-label>
+        </ion-item>
+      </ion-footer>
     </ion-menu>
     <ion-router-outlet id="main-content"></ion-router-outlet>
   </ion-split-pane>
diff --git a/src/app/app.component.scss b/src/app/app.component.scss
index b54b539ccf84ad1876df77f187244b11b012d94e..290ea63cf74b31948fff6386c8a889ce3d9110cd 100644
--- a/src/app/app.component.scss
+++ b/src/app/app.component.scss
@@ -4,6 +4,12 @@
 ion-menu {
   --side-min-width: #{$app-menu-width};
   --side-max-width: #{$app-menu-width};
+
+}
+
+ion-menu ion-footer {
+  background-image: linear-gradient(180deg, #b2b2b2, #b2b2b2 50%, transparent 50%);
+  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .26);
 }
 
 ion-menu ion-content {
@@ -16,15 +22,37 @@ ion-menu ion-content {
     flex-direction: column;
     justify-content: flex-start;
 
+    ion-list-header {
+      ion-badge {
+        font-size: 12px;
+        left: 1px;
+        transform-origin: 26px 5px;
+        transform: rotate(-10deg);
+
+      }
+      ion-badge:hover {
+        font-size: 14px;
+        right: 1px;
+        transform-origin: 26px 5px;
+        transform: rotate(-10deg);
+      }
+      ion-label {
+        padding-left: 10px;
+      }
+    }
+
     ion-item-divider {
       background: transparent;
     }
+
     .flex-spacer {
       flex: 1 1 auto;
       display: flex;
       flex-direction: column;
       justify-content: flex-end;
     }
+
+
   }
 
   &.dark {
@@ -33,11 +61,10 @@ ion-menu ion-content {
 
     ion-list-header.title {
       color: yellow;
-      text-shadow:
-        0 0 10px var(--background-color),
-        0 0 20px var(--background-color),
-        0 0 30px var(--background-color),
-        0 0 40px var(--background-color);
+      text-shadow: 0 0 10px var(--background-color),
+      0 0 20px var(--background-color),
+      0 0 30px var(--background-color),
+      0 0 40px var(--background-color);
       overflow: visible;
     }
   }
@@ -115,6 +142,7 @@ ion-menu.md ion-item.selected ion-icon {
 ion-menu.md ion-item ion-icon {
   color: #616e7e;
 }
+
 ion-menu ion-item {
   user-select: none;
 }
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 3dfd6e035adb74e770aa32bf55f9e35fa2dbf1b7..5f52358a41dc845180b748d592c9c8fd4e0509cb 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -9,9 +9,12 @@ import { PredefinedColors } from '@app/shared/colors/colors.utils';
 import { fadeInAnimation } from '@app/shared/animations';
 import { SettingsService } from '@app/settings/settings.service';
 import { TranslateService } from '@ngx-translate/core';
-import { AlertController } from '@ionic/angular';
-import { WotController } from './wot/wot.controller';
+import { AlertController, ModalController } from '@ionic/angular';
 import { Observable } from 'rxjs';
+import { environment } from '@environments/environment';
+import { AboutModal } from '@app/home/about/about.modal';
+import { HelpPage } from '@app/home/help/help.page';
+import { isDemo, isDev } from '@app/shared/environment/environment.utils';
 
 export interface IMenuItem {
   title: string;
@@ -80,10 +83,10 @@ export class AppComponent {
     protected settings: SettingsService,
     private accountService: AccountsService,
     private transferController: TransferController,
-    private wotController: WotController,
     private translate: TranslateService,
     private alertController: AlertController,
-    private router: Router
+    private router: Router,
+    private modalCtrl: ModalController
   ) {
     this.start();
   }
@@ -148,4 +151,31 @@ export class AppComponent {
       // Continue
     }
   }
+
+  getVersion() {
+    return environment.version;
+  }
+
+  async openAboutModal() {
+    const modal = await this.modalCtrl.create({
+      id: 'about-modal',
+      component: AboutModal,
+      canDismiss: true,
+    });
+    await modal.present();
+  }
+  async openHelpModal(definition: string) {
+    const modal = await this.modalCtrl.create({
+      id: 'help-modal',
+      component: HelpPage,
+      componentProps: {
+        highlightedDefinition: definition,
+      },
+      canDismiss: true,
+    });
+    await modal.present();
+  }
+  protected readonly environment = environment;
+  protected readonly isDemo = isDemo;
+  protected readonly isDev = isDev;
 }
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index b8a3e69d691e5a2d7d261b1576b3d8ae4aeebcbc..73967b6bf8c5369d7fd3cfeaf8392c7b5685ce6b 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -29,6 +29,8 @@ import { AppWotModule } from './wot/wot.module';
 import { APP_FORM_ERROR_I18N_KEYS } from '@app/shared/form/form-error-translator.service';
 import { IdentityConfirmValidators } from '@app/account/confirm/identity-confirm.validator';
 import { CodeInputModule } from 'angular-code-input';
+import { HelpModule } from '@app/home/help/help.module';
+import { AboutModule } from '@app/home/about/about.module';
 
 export function createTranslateLoader(http: HttpClient) {
   if (environment.production) {
@@ -38,86 +40,97 @@ export function createTranslateLoader(http: HttpClient) {
   return new TranslateHttpLoader(http, './assets/i18n/', `.json`);
 }
 
-@NgModule({ declarations: [AppComponent],
-    bootstrap: [AppComponent], imports: [BrowserModule,
-        BrowserAnimationsModule,
-        IonicModule.forRoot(),
-        IonicStorageModule.forRoot({
-            name: environment.name || 'cesium2',
-            ...environment.storage,
-        }),
-        TranslateModule.forRoot({
-            defaultLanguage: environment.defaultLocale,
-            loader: {
-                provide: TranslateLoader,
-                useFactory: createTranslateLoader,
-                deps: [HttpClient],
-            },
-        }),
-        CodeInputModule.forRoot({
-            codeLength: 6,
-            isCharsCode: true,
-            code: 'abcdef',
-        }),
-        AppRoutingModule,
-        AppSharedModule,
-        AppWotModule.forRoot(),
-        AppAccountModule.forRoot(),
-        AppTransferModule.forRoot()], providers: [
-        PlatformService,
-        StorageService,
-        AccountsService,
-        { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
-        {
-            provide: APP_GRAPHQL_TYPE_POLICIES,
-            useValue: {
-                ...INDEXER_GRAPHQL_TYPE_POLICIES,
-                ...POD_GRAPHQL_TYPE_POLICIES,
-            },
+@NgModule({
+  declarations: [AppComponent],
+  bootstrap: [AppComponent],
+  imports: [
+    BrowserModule,
+    BrowserAnimationsModule,
+    IonicModule.forRoot({
+      innerHTMLTemplatesEnabled: true,
+    }),
+    IonicStorageModule.forRoot({
+      name: environment.name || 'cesium2',
+      ...environment.storage,
+    }),
+    TranslateModule.forRoot({
+      defaultLanguage: environment.defaultLocale,
+      loader: {
+        provide: TranslateLoader,
+        useFactory: createTranslateLoader,
+        deps: [HttpClient],
+      },
+    }),
+    HelpModule,
+    AboutModule,
+    CodeInputModule.forRoot({
+      codeLength: 6,
+      isCharsCode: true,
+      code: 'abcdef',
+    }),
+    HelpModule,
+    AppRoutingModule,
+    AppSharedModule,
+    AppWotModule.forRoot(),
+    AppAccountModule.forRoot(),
+    AppTransferModule.forRoot(),
+  ],
+  providers: [
+    PlatformService,
+    StorageService,
+    AccountsService,
+    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
+    {
+      provide: APP_GRAPHQL_TYPE_POLICIES,
+      useValue: {
+        ...INDEXER_GRAPHQL_TYPE_POLICIES,
+        ...POD_GRAPHQL_TYPE_POLICIES,
+      },
+    },
+    { provide: APP_STORAGE, useExisting: StorageService },
+    { provide: APP_BASE_HREF, useValue: environment.baseUrl || '/' },
+    {
+      provide: APP_LOCALES,
+      useValue: [
+        { key: 'en', value: 'English', country: 'us' },
+        { key: 'en-GB', value: 'English (UK)', country: 'gb' },
+        { key: 'eo-EO', value: 'Esperanto', country: 'eo' },
+        { key: 'fr', value: 'Français', country: 'fr' },
+        { key: 'nl-NL', value: 'Nederlands', country: 'nl' },
+        { key: 'es-ES', value: 'Spanish', country: 'es' },
+        { key: 'ca', value: 'Català', country: 'ca' },
+        { key: 'it-IT', value: 'Italiano', country: 'it' },
+      ],
+    },
+    // Custom identicon style
+    // https://jdenticon.com/icon-designer.html?config=4451860010ff320028501e5a
+    {
+      provide: JDENTICON_CONFIG,
+      useValue: {
+        lightness: {
+          color: [0.26, 0.8],
+          grayscale: [0.3, 0.9],
         },
-        { provide: APP_STORAGE, useExisting: StorageService },
-        { provide: APP_BASE_HREF, useValue: environment.baseUrl || '/' },
-        {
-            provide: APP_LOCALES,
-            useValue: [
-                { key: 'en', value: 'English', country: 'us' },
-                { key: 'en-GB', value: 'English (UK)', country: 'gb' },
-                { key: 'eo-EO', value: 'Esperanto', country: 'eo' },
-                { key: 'fr', value: 'Français', country: 'fr' },
-                { key: 'nl-NL', value: 'Nederlands', country: 'nl' },
-                { key: 'es-ES', value: 'Spanish', country: 'es' },
-                { key: 'ca', value: 'Català', country: 'ca' },
-                { key: 'it-IT', value: 'Italiano', country: 'it' },
-            ],
-        },
-        // Custom identicon style
-        // https://jdenticon.com/icon-designer.html?config=4451860010ff320028501e5a
-        {
-            provide: JDENTICON_CONFIG,
-            useValue: {
-                lightness: {
-                    color: [0.26, 0.8],
-                    grayscale: [0.3, 0.9],
-                },
-                saturation: {
-                    color: 0.5,
-                    grayscale: 0.46,
-                },
-                backColor: '#0000',
-            },
-        },
-        // Custom error i18nk keys
-        {
-            provide: APP_FORM_ERROR_I18N_KEYS,
-            useValue: {
-                ...IdentityConfirmValidators.I18N_ERROR_KEYS,
-            },
+        saturation: {
+          color: 0.5,
+          grayscale: 0.46,
         },
+        backColor: '#0000',
+      },
+    },
+    // Custom error i18nk keys
+    {
+      provide: APP_FORM_ERROR_I18N_KEYS,
+      useValue: {
+        ...IdentityConfirmValidators.I18N_ERROR_KEYS,
+      },
+    },
 
-      // Http client
-      provideHttpClient(withInterceptorsFromDi()),
+    // Http client
+    provideHttpClient(withInterceptorsFromDi()),
 
-      // Zone less (experimental)
-      provideExperimentalZonelessChangeDetection(),
-    ] })
+    // Zone less (experimental)
+    provideExperimentalZonelessChangeDetection(),
+  ],
+})
 export class AppModule {}
diff --git a/src/app/currency/currency.model.ts b/src/app/currency/currency.model.ts
index e65a6534c84e45c3b130029927a593741bb6b510..f1b931939f58d5ff70debf1e1b3b937fdd01535a 100644
--- a/src/app/currency/currency.model.ts
+++ b/src/app/currency/currency.model.ts
@@ -16,4 +16,7 @@ export interface Currency {
   };
   decimals: number;
   minBlockHeight?: number;
+  params: {
+    minAccessibleReferees: number;
+  };
 }
diff --git a/src/app/currency/currency.page.html b/src/app/currency/currency.page.html
index 17b4c2441e24f3e6c0c5ce77e598cb3d8da88e5f..94b83521c9c300eda4fda49e1b4099bdfafeb387 100644
--- a/src/app/currency/currency.page.html
+++ b/src/app/currency/currency.page.html
@@ -14,11 +14,33 @@
     </ion-toolbar>
   </ion-header>
 
-  <div id="container">
+  <div id="container" *rxIf="loaded$; else listSkeleton">
     <ion-grid class="ion-no-padding">
+      <ion-row>
+        <ion-col size="2" size-sm="0" size-md="0" size-lg="2"></ion-col>
+        <ion-col size="8" size-sm="12" size-md="12" size-lg="8" size-xs="12">
+          <ion-card>
+            <ion-card-content>
+              <ion-label
+                [innerHTML]="
+                  'CURRENCY.VIEW.CURRENCY_SHORT_DESCRIPTION'
+                    | translate
+                      : {
+                          currency: params.currencyName,
+                          firstBlockTime: firstBlockTime$ | async | dateFromNow,
+                          N: params.members,
+                          dt: params.udCreationPeriodMs | duration: 'ms'
+                        }
+                "
+              ></ion-label>
+            </ion-card-content>
+          </ion-card>
+        </ion-col>
+        <ion-col size="2" size-sm="0" size-md="0" size-lg="2"></ion-col>
+      </ion-row>
       <ion-row>
         <ion-col size="12" size-sm="6">
-          <ion-list *rxIf="loaded$; else listSkeleton" lines="none">
+          <ion-list lines="none">
             <ion-item-divider translate>CURRENCY.VIEW.TITLE</ion-item-divider>
 
             <ion-item>
diff --git a/src/app/currency/currency.page.ts b/src/app/currency/currency.page.ts
index e17deda9cc65ace591a18f17a8a964e75f6d7a15..42392ab8650722a66621590e011bb082c00afcf5 100644
--- a/src/app/currency/currency.page.ts
+++ b/src/app/currency/currency.page.ts
@@ -7,15 +7,17 @@ import { RxState } from '@rx-angular/state';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
 import { SettingsService } from '@app/settings/settings.service';
 import { CurrencyDisplayUnit } from '@app/settings/settings.model';
-import { map, switchMap } from 'rxjs/operators';
 import { isNotEmptyArray, toBoolean, toNumber } from '@app/shared/functions';
 import { CurrencyHistory } from '@app/currency/currency-history.model';
 import { ChartDataset, ChartOptions } from 'chart.js';
-import { Observable } from 'rxjs';
+import { Observable, switchMap } from 'rxjs';
 import { IndexerService } from '@app/network/indexer/indexer.service';
 import { Currency } from '@app/currency/currency.model';
-import moment from 'moment';
+import moment, { Moment } from 'moment';
 import { Color } from '@app/shared/colors/graph-colors';
+import { ModalController } from '@ionic/angular';
+import { Promise } from '@rx-angular/cdk/zone-less/browser';
+import { map } from 'rxjs/operators';
 
 export interface CurrencyParameters {
   currencyName: string;
@@ -61,6 +63,7 @@ export interface CurrencyPageState extends AppPageState {
   isLogarithmic: boolean;
   chartReady: boolean;
   membersVariation: number;
+  firstBlockTime: Moment;
 }
 
 @Component({
@@ -76,6 +79,7 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
   @RxStateSelect() protected chartLabels$: Observable<string[]>;
   @RxStateSelect() protected chartReady$: Observable<string[]>;
   @RxStateSelect() protected membersVariation$: Observable<number>;
+  @RxStateSelect() protected firstBlockTime$: Observable<Moment>;
 
   @RxStateProperty() protected params: CurrencyParameters;
   @RxStateProperty() protected wotParams: WotParameters;
@@ -87,6 +91,7 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
   @RxStateProperty() protected chartLoaded: boolean;
   @RxStateProperty() protected chartReady: boolean;
   @RxStateProperty() protected membersVariation: number;
+  @RxStateProperty() protected firstBlockTime: Moment;
 
   @Input() @RxStateProperty() showAllRulesCurrency: boolean;
   @Input() @RxStateProperty() showAllRulesWot: boolean;
@@ -154,6 +159,7 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
     protected indexer: IndexerService,
     protected settings: SettingsService,
     protected cd: ChangeDetectorRef,
+    protected modalCtrl: ModalController,
     private sanitizer: DomSanitizer
   ) {
     super({ name: 'currency-service' });
@@ -178,6 +184,7 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
     );
     this._state.connect('membersVariation', this._state.select('currencyHistory').pipe(map((value) => this.getMembersVariation(value))));
     this._state.connect('chartLabels', this._state.select('currencyHistory').pipe(map((value) => this.prepareLineChartLabel(value))));
+    this._state.connect('firstBlockTime', this._state.select('currencyHistory').pipe(map((value) => this.getFirstBlockValue(value))));
     this._state.connect(
       'chartReady',
       this._state
@@ -262,6 +269,7 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
       sentries,
       xPercent,
     };
+
     return { currency, paramsByUnit, showAllRulesCurrency, showAllRulesWot, useRelativeUnit, wotParams };
   }
 
@@ -375,4 +383,8 @@ export class CurrencyPage extends AppPage<CurrencyPageState> {
     const membersCountPast = histories[histories.length - 2];
     return membersCountCurrent.membersCount - membersCountPast.membersCount;
   }
+
+  private getFirstBlockValue(histories: CurrencyHistory[]): Moment {
+    return moment(histories[0].timestamp);
+  }
 }
diff --git a/src/app/currency/currency.service.ts b/src/app/currency/currency.service.ts
deleted file mode 100644
index e41923b0f749ffcfdecffe72a5aad45de52da6a5..0000000000000000000000000000000000000000
--- a/src/app/currency/currency.service.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Injectable } from '@angular/core';
-import { SettingsService } from '@app/settings/settings.service';
-import { StartableService } from '@app/shared/services/startable-service.class';
-import { Promise } from '@rx-angular/cdk/zone-less/browser';
-import { IndexerService } from '@app/network/indexer/indexer.service';
-
-@Injectable({ providedIn: 'root' })
-export class CurrencyService extends StartableService {
-  constructor(
-    private indexer: IndexerService,
-    private settings: SettingsService
-  ) {
-    super(settings);
-  }
-
-  protected ngOnStart(): Promise<void> {
-    return Promise.resolve(undefined);
-  }
-}
diff --git a/src/app/home/about/about.modal.css b/src/app/home/about/about.modal.css
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/app/home/about/about.modal.html b/src/app/home/about/about.modal.html
new file mode 100644
index 0000000000000000000000000000000000000000..4acaa1eb98f4a443d2f52000bf62f5656d8e6f23
--- /dev/null
+++ b/src/app/home/about/about.modal.html
@@ -0,0 +1,111 @@
+<ion-header [translucent]="true" *ngIf="showToolbar">
+  <ion-toolbar color="primary">
+    <ion-buttons slot="start">
+      <ion-menu-button *ngIf="!canGoBack"></ion-menu-button>
+      <ion-back-button></ion-back-button>
+    </ion-buttons>
+    <ion-title translate>ABOUT.TITLE</ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content [fullscreen]="true">
+  <ion-header collapse="condense">
+    <ion-toolbar>
+      <ion-title size="large" translate>ABOUT.TITLE</ion-title>
+    </ion-toolbar>
+  </ion-header>
+
+  <ion-list lines="none">
+    <ion-item class="item-icon-left item-text-wrap">
+      <ion-icon slot="start"></ion-icon>
+      <ion-label>
+        {{ 'COMMON.APP_NAME' | translate }}&nbsp;
+        <b>{{ 'COMMON.APP_VERSION' | translate: { version: environment.version } }}</b>
+        -
+        <a href="{{ environment.officialUrl }}" target="_system">{{ environment.officialUrl }}</a>
+      </ion-label>
+      <ion-label [innerHTML]="'ABOUT.LICENSE' | translate"></ion-label>
+    </ion-item>
+
+    @if (isUpdateAvailable()) {
+      <ion-item>
+        <ion-icon slot="start" color="danger" name="alert-circle-outline"></ion-icon>
+        <ion-label
+          [innerHTML]="'ABOUT.LATEST_RELEASE' | translate: { appName: 'COMMON.APP_NAME' | translate, version: environment.version }"
+        ></ion-label>
+      </ion-item>
+    }
+
+    <ion-item>
+      <ion-icon slot="start" name="laptop-outline"></ion-icon>
+      <ion-label translate>ABOUT.OFFICIAL_WEB_SITE</ion-label>
+      <ion-label>
+        <a href="{{ environment.sourceUrl }}" target="_system" translate>{{ environment.sourceUrl }}</a>
+      </ion-label>
+    </ion-item>
+
+    <ion-item>
+      <ion-icon slot="start" name="chatbubbles"></ion-icon>
+      <ion-label translate>ABOUT.FORUM</ion-label>
+      <ion-label>
+        <a href="{{ environment.forumUrl }}" target="_system">{{ environment.forumUrl }}</a>
+      </ion-label>
+    </ion-item>
+
+    <ion-item>
+      <ion-icon slot="start" name="bug"></ion-icon>
+      <ion-label translate>ABOUT.PLEASE_REPORT_ISSUE</ion-label>
+      <ion-label>
+        <a href="{{ environment.reportIssueUrl }}" target="_system" translate>ABOUT.REPORT_ISSUE</a>
+      </ion-label>
+    </ion-item>
+
+    <ion-item>
+      <ion-icon slot="start" name="git-network"></ion-icon>
+      <ion-label translate>ABOUT.CODE</ion-label>
+      <ion-label>
+        <a href="{{ environment.sourceUrl }}" target="_system" translate>{{ environment.sourceUrl }}</a>
+      </ion-label>
+    </ion-item>
+    <ion-item>
+      <ion-icon slot="start" name="people"></ion-icon>
+      <ion-label translate>ABOUT.DEVELOPERS</ion-label>
+      <ion-label>
+        <a href="https://github.com/blavenie" target="_system">Benoit Lavenier</a>
+        ,
+        <a href="https://github.com/bpresles" target="_system">bpresles</a>
+        ,
+        <a href="https://github.com/c-geek" target="_system">cgeek</a>
+        ,
+        <a href="https://github.com/devingfx" target="_system">DiG</a>
+        ,
+        <a href="https://git.duniter.org/ji_emme" target="_system">Ji_emme</a>
+        ,
+        <a href="https://git.duniter.org/matograine" target="_system">matograine</a>
+        ,
+        <a href="https://github.com/duniter/cesium/graphs/contributors" target="_system" title="{{ 'HOME.SHOW_ALL_FEED' | translate }}">...</a>
+      </ion-label>
+    </ion-item>
+  </ion-list>
+</ion-content>
+@if (!mobile) {
+  <ion-footer>
+    <ion-toolbar>
+      <ion-row class="ion-no-padding" nowrap>
+        <ion-col size="4"></ion-col>
+        <!-- buttons -->
+        <ion-col size="8">
+          <ion-button color="light" (click)="goToHelpPage()" tappable>
+            <ion-icon slot="start" name="help-circle-outline"></ion-icon>
+            <ion-label translate>HOME.BTN_HELP</ion-label>
+          </ion-button>
+
+          <ion-button (click)="cancel()">
+            <ion-label translate>COMMON.BTN_CLOSE</ion-label>
+          </ion-button>
+        </ion-col>
+        <ion-col size="4"></ion-col>
+      </ion-row>
+    </ion-toolbar>
+  </ion-footer>
+}
diff --git a/src/app/home/about/about.modal.spec.ts b/src/app/home/about/about.modal.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1523334ee1b58d960ba4f352e12fa8855ff388f1
--- /dev/null
+++ b/src/app/home/about/about.modal.spec.ts
@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { AboutModal } from './about.modal';
+
+describe('AboutModalComponent', () => {
+  let component: AboutModal;
+  let fixture: ComponentFixture<AboutModal>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [AboutModal],
+      imports: [IonicModule.forRoot()],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(AboutModal);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/home/about/about.modal.ts b/src/app/home/about/about.modal.ts
new file mode 100644
index 0000000000000000000000000000000000000000..19a937591de9218e03cea51376b7cb87ddb3d48a
--- /dev/null
+++ b/src/app/home/about/about.modal.ts
@@ -0,0 +1,51 @@
+import { Component, Input } from '@angular/core';
+import { AppPage, AppPageState } from '@app/shared/pages/base-page.class';
+import { RxState } from '@rx-angular/state';
+import { Promise } from '@rx-angular/cdk/zone-less/browser';
+import { TranslateService } from '@ngx-translate/core';
+import { environment } from '@environments/environment';
+import { ModalController } from '@ionic/angular';
+import { Router } from '@angular/router';
+
+export interface AboutModalState extends AppPageState {}
+
+@Component({
+  selector: 'app-about',
+  templateUrl: './about.modal.html',
+  styleUrls: ['./about.modal.css'],
+  providers: [RxState],
+})
+export class AboutModal extends AppPage<AboutModalState> {
+  protected readonly environment = environment;
+
+  @Input() showToolbar = true;
+  version: string;
+
+  constructor(
+    protected translate: TranslateService,
+    protected viewCtrl: ModalController,
+    protected router: Router
+  ) {
+    super({ name: 'about-modal' });
+    this.version = environment.version;
+  }
+
+  protected ngOnLoad(): Promise<Partial<AboutModalState>> {
+    return Promise.resolve(undefined);
+  }
+
+  cancel() {
+    this.viewCtrl.dismiss();
+  }
+
+  goToHelpPage() {
+    this.viewCtrl.dismiss();
+    this.router.navigateByUrl('/help', {
+      replaceUrl: true,
+    });
+  }
+
+  isUpdateAvailable() {
+    return this.environment.version !== this.version; //TODO: need more information about the current version and remote version
+  }
+}
diff --git a/src/app/home/about/about.module.ts b/src/app/home/about/about.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ca6aa6aaa63ff69224a2b06f37c85e7a3adfba3f
--- /dev/null
+++ b/src/app/home/about/about.module.ts
@@ -0,0 +1,14 @@
+import { NgModule } from '@angular/core';
+import { AppSharedModule } from '@app/shared/shared.module';
+import { TranslateModule } from '@ngx-translate/core';
+import { HomePageRoutingModule } from '@app/home/home-routing.module';
+import { AppAuthModule } from '@app/account/auth/auth.module';
+import { AppRegisterModule } from '@app/account/register/register.module';
+import { AppTransferModule } from '@app/transfer/send/transfer.module';
+import { AboutModal } from '@app/home/about/about.modal';
+
+@NgModule({
+  imports: [AppSharedModule, TranslateModule.forChild(), HomePageRoutingModule, AppAuthModule, AppRegisterModule, AppTransferModule],
+  declarations: [AboutModal],
+})
+export class AboutModule {}
diff --git a/src/app/home/feed/feed.component.html b/src/app/home/feed/feed.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..c46963b79c798a6d834f2889c736f613e587a100
--- /dev/null
+++ b/src/app/home/feed/feed.component.html
@@ -0,0 +1,56 @@
+@if ((topics | isNotEmptyArray) && topics.length > 0) {
+  <div class="feed ion-padding-horizontal ion-no-padding ion-padding-top">
+    <ion-item color="transparent" lines="none">
+      <ion-icon color="light" slot="start" name="megaphone"></ion-icon>
+      <ion-label color="light">
+        <b translate>HOME.NEWS</b>
+        <ion-button fill="clear" (click)="redirectToForumHome()" translate>
+          HOME.SHOW_ALL_FEED
+          <ion-icon slot="end" color="medium" name="chevron-forward-outline"></ion-icon>
+        </ion-button>
+      </ion-label>
+    </ion-item>
+    @for (topic of topics; track topic) {
+      <ion-card>
+        <ion-card-header>
+          <ion-card-subtitle style="vertical-align: middle">
+            <ion-chip>
+              <ion-avatar>
+                <img [alt]="topic?.authorAvatar" [src]="topic?.feedItem.authorAvatar" />
+              </ion-avatar>
+              <ion-label color="medium">{{ topic?.feedItem.author }}</ion-label>
+            </ion-chip>
+            <ion-note class="ion-float-end">
+              <small>{{ topic?.feedItem.date_published | dateFromNow }}</small>
+            </ion-note>
+          </ion-card-subtitle>
+          <ion-card-title (click)="redirectToForum(topic.feedUrl)" tappable>{{ topic?.fancyTitle }}</ion-card-title>
+          @if (topic?.tags | isNotEmptyArray) {
+            <div style="display: inline">
+              @for (tag of topic.tags; track tag) {
+                <ion-chip>
+                  <ion-label color="medium">#{{ tag }}</ion-label>
+                </ion-chip>
+              }
+            </div>
+          }
+        </ion-card-header>
+
+        <ion-card-content>
+          <ion-text [innerHTML]="topic?.feedItem.content_html"></ion-text>
+        </ion-card-content>
+        @if (!topic?.feedItem.truncated) {
+          <ion-button (click)="redirectToForum(topic.feedUrl)" class="ion-float-end" fill="clear" translate>
+            COMMON.BTN_SHOW
+            <ion-icon slot="end" name="chevron-forward-outline"></ion-icon>
+          </ion-button>
+        } @else {
+          <ion-button (click)="redirectToForum(topic.feedUrl)" class="ion-float-end" fill="clear" translate>
+            HOME.READ_MORE
+            <ion-icon slot="end" name="chevron-forward-outline"></ion-icon>
+          </ion-button>
+        }
+      </ion-card>
+    }
+  </div>
+}
diff --git a/src/app/home/feed/feed.component.scss b/src/app/home/feed/feed.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2b087e3d36c87194376996312c521b8d8c43ca9d
--- /dev/null
+++ b/src/app/home/feed/feed.component.scss
@@ -0,0 +1,40 @@
+
+.feed {
+  ion-item {
+    --color: var(--ion-color-dark-contrast);
+    ion-icon[slot=start] {
+      -webkit-margin-end: 8px;
+      margin-inline-end: 8px;
+    }
+  }
+
+
+  ion-card {
+    --ion-card-background: rgba(var(--ion-text-color-rgb), 0.3);
+    --ion-card-color: var(--ion-color-dark-contrast);
+
+    ion-card-header {
+      ion-card-title {
+        --color: var(--ion-color-dark-contrast);
+      }
+      ion-chip {
+        --background: transparent;
+        --border-color: transparent;
+        --border-width: 0;
+
+        ion-avatar {
+          border: 1px solid var(--ion-color-medium);
+        }
+      }
+    }
+  }
+
+  ion-button {
+    text-transform: unset;
+    color: var(--ion-color-step-400);
+  }
+
+  a:hover {
+    color: var(--ion-color-medium);
+  }
+}
diff --git a/src/app/home/feed/feed.component.spec.ts b/src/app/home/feed/feed.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..204301f3aea8a384170357962f51e2ee48f9b31f
--- /dev/null
+++ b/src/app/home/feed/feed.component.spec.ts
@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { FeedComponent } from './feed.component';
+
+describe('AboutModalComponent', () => {
+  let component: FeedComponent;
+  let fixture: ComponentFixture<FeedComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [FeedComponent],
+      imports: [IonicModule.forRoot()],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(FeedComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/home/feed/feed.component.ts b/src/app/home/feed/feed.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3303c16c82a7907e32cf8e99119d0589bd84ae0
--- /dev/null
+++ b/src/app/home/feed/feed.component.ts
@@ -0,0 +1,55 @@
+import { Component, Input } from '@angular/core';
+import { AppPage, AppPageState } from '@app/shared/pages/base-page.class';
+import { RxState } from '@rx-angular/state';
+import { Promise } from '@rx-angular/cdk/zone-less/browser';
+import { TranslateService } from '@ngx-translate/core';
+import { environment } from '@environments/environment';
+import { Router } from '@angular/router';
+import { NetworkService } from '@app/network/network.service';
+import { JsonTopic } from '@app/home/feed/feed.model';
+import { SettingsService } from '@app/settings/settings.service';
+import { isNotNil } from '@app/shared/functions';
+
+export interface FeedState extends AppPageState {
+  topics: JsonTopic[];
+}
+
+@Component({
+  selector: 'app-feeds',
+  templateUrl: './feed.component.html',
+  styleUrls: ['./feed.component.scss'],
+  providers: [RxState],
+})
+export class FeedComponent extends AppPage<FeedState> {
+  @Input() showToolbar = true;
+
+  topics: JsonTopic[];
+  version: string;
+
+  constructor(
+    protected translate: TranslateService,
+    protected settings: SettingsService,
+    protected networkService: NetworkService,
+    protected router: Router
+  ) {
+    super({ name: 'about-modal' });
+  }
+
+  protected async ngOnLoad(): Promise<FeedState> {
+    await Promise.all([this.settings.ready(), this.networkService.ready()]);
+    const feedUrl = environment.feed.jsonFeed.get(this.settings.locale);
+    this.topics = await this.networkService.loadJsonFeed(feedUrl);
+    this.topics = this.topics.filter(isNotNil).map((value) => value);
+    return <FeedState>{ topics: this.topics };
+  }
+
+  redirectToForum(url: string) {
+    window.open(url.replace(/\.json$/, ''), '_blank');
+  }
+
+  redirectToForumHome() {
+    window.open(environment.forumUrl, '_blank');
+  }
+
+  protected readonly environment = environment;
+}
diff --git a/src/app/home/feed/feed.model.ts b/src/app/home/feed/feed.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ba6cfc1e968b275e7426ffe3d98ba43000d029e9
--- /dev/null
+++ b/src/app/home/feed/feed.model.ts
@@ -0,0 +1,88 @@
+import { Moment } from 'moment';
+
+export class JsonFeedItem {
+  constructor(author: string, authorAvatar: string, content_html: string, date_published: string, truncated: boolean) {
+    this.author = author;
+    this.authorAvatar = authorAvatar;
+    this.content_html = content_html;
+    this.date_published = date_published;
+    this.truncated = truncated;
+  }
+  author: string;
+  authorAvatar: string;
+  content_html: string;
+  date_published: string;
+  truncated: boolean;
+}
+
+export class JsonTopic {
+  constructor(
+    archived: boolean,
+    createdAt: Moment,
+    updatedAt: Moment,
+    author: string,
+    authorAvatar: string,
+    fancyTitle: string,
+    tags: unknown[],
+    feedItem: JsonFeedItem,
+    feedUrl: string
+  ) {
+    this.archived = archived;
+    this.createdAt = createdAt;
+    this.updatedAt = updatedAt;
+    this.author = author;
+    this.authorAvatar = authorAvatar;
+    this.fancyTitle = fancyTitle;
+    this.tags = tags;
+    this.feedItem = feedItem;
+    this.feedUrl = feedUrl;
+  }
+  feedItem: JsonFeedItem;
+  archived: boolean;
+  createdAt: Moment;
+  updatedAt: Moment;
+  author: string;
+  authorAvatar: string;
+  fancyTitle: string;
+  tags: unknown[];
+  feedUrl: string;
+}
+
+export interface Topic {
+  id: number;
+  title: string;
+  fancy_title: string;
+  slug: string;
+  posts_count: number;
+  reply_count: number;
+  highest_post_number: number;
+  image_url: string | null;
+  created_at: string;
+  last_posted_at: string;
+  bumped: boolean;
+  bumped_at: string;
+  archetype: string;
+  unseen: boolean;
+  pinned: boolean;
+  unpinned: string | null;
+  excerpt: string;
+  visible: boolean;
+  closed: boolean;
+  archived: boolean;
+  bookmarked: string | null;
+  liked: string | null;
+  views: number;
+  like_count: number;
+  has_summary: boolean;
+  last_poster_username: string;
+  category_id: number;
+  pinned_globally: boolean;
+  featured_link: string | null;
+  tags: string[];
+  posters: {
+    extras: string;
+    description: string;
+    user_id: number;
+    primary_group_id: number | null;
+  }[];
+}
diff --git a/src/app/home/feed/feed.module.ts b/src/app/home/feed/feed.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c4fa3fd2ea09800035af0a3a2929bdf143f5343
--- /dev/null
+++ b/src/app/home/feed/feed.module.ts
@@ -0,0 +1,24 @@
+import { NgModule } from '@angular/core';
+import { AppSharedModule } from '@app/shared/shared.module';
+import { TranslateModule } from '@ngx-translate/core';
+import { HomePageRoutingModule } from '@app/home/home-routing.module';
+import { AppAuthModule } from '@app/account/auth/auth.module';
+import { AppRegisterModule } from '@app/account/register/register.module';
+import { AppTransferModule } from '@app/transfer/send/transfer.module';
+import { FeedComponent } from '@app/home/feed/feed.component';
+import { NgOptimizedImage } from '@angular/common';
+
+@NgModule({
+  imports: [
+    AppSharedModule,
+    TranslateModule.forChild(),
+    HomePageRoutingModule,
+    AppAuthModule,
+    AppRegisterModule,
+    AppTransferModule,
+    NgOptimizedImage,
+  ],
+  declarations: [FeedComponent],
+  exports: [FeedComponent],
+})
+export class FeedModule {}
diff --git a/src/app/home/help/help-routing.module.ts b/src/app/home/help/help-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1de2427694a044b7f01bd5bdd0ce4cffb2415e0
--- /dev/null
+++ b/src/app/home/help/help-routing.module.ts
@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { HelpPage } from '@app/home/help/help.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    pathMatch: 'full',
+    component: HelpPage,
+  },
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class HelpPageRoutingModule {}
diff --git a/src/app/home/help/help.module.ts b/src/app/home/help/help.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aaba39986d6800d42f1a92c7b02cb50dc44f8778
--- /dev/null
+++ b/src/app/home/help/help.module.ts
@@ -0,0 +1,12 @@
+import { NgModule } from '@angular/core';
+
+import { AppSharedModule } from '@app/shared/shared.module';
+import { TranslateModule } from '@ngx-translate/core';
+import { HomePageRoutingModule } from '@app/home/home-routing.module';
+import { HelpPage } from '@app/home/help/help.page';
+
+@NgModule({
+  imports: [AppSharedModule, TranslateModule, HomePageRoutingModule],
+  declarations: [HelpPage],
+})
+export class HelpModule {}
diff --git a/src/app/home/help/help.page.html b/src/app/home/help/help.page.html
new file mode 100644
index 0000000000000000000000000000000000000000..1c7dd5e8778486153efeaa3e35d40e7c18d78527
--- /dev/null
+++ b/src/app/home/help/help.page.html
@@ -0,0 +1,197 @@
+<ion-header [translucent]="true">
+  <ion-toolbar color="primary">
+    <ion-buttons slot="start">
+      <ion-menu-button *ngIf="!canGoBack"></ion-menu-button>
+      <ion-back-button></ion-back-button>
+    </ion-buttons>
+    <ion-title translate>HELP.TITLE</ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content [fullscreen]="true">
+  <ion-header collapse="condense">
+    <ion-toolbar>
+      <ion-title size="large" translate>HELP.TITLE</ion-title>
+    </ion-toolbar>
+  </ion-header>
+
+  <ion-list>
+    @if (isDemo()) {
+      <ion-item id="DEMO_MODE_HELP" lines="none">
+        <ion-grid class="highlight">
+          <ion-row>
+            <ion-col size="4" size-lg="4" size-sm="12">
+              <ion-label translate>MODE.DEMO.MODE</ion-label>
+            </ion-col>
+            <ion-col size="8" size-lg="8" size-sm="12">
+              <ion-label color="dark" [innerHTML]="'MODE.DEMO.MODE_HELP' | translate"></ion-label>
+            </ion-col>
+          </ion-row>
+        </ion-grid>
+      </ion-item>
+    }
+    @if (isReadonly()) {
+      <ion-item id="READONLY_MODE_HELP" lines="none">
+        <ion-grid class="highlight">
+          <ion-row>
+            <ion-col size="4" size-lg="4" size-sm="12">
+              <ion-label translate>MODE.READONLY.MODE</ion-label>
+            </ion-col>
+            <ion-col size="8" size-lg="8" size-sm="12">
+              <ion-label color="dark" [innerHTML]="'MODE.READONLY.MODE_HELP' | translate"></ion-label>
+            </ion-col>
+          </ion-row>
+        </ion-grid>
+      </ion-item>
+    }
+    <ion-item-divider translate>HELP.JOIN.SECTION</ion-item-divider>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>LOGIN.SALT</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.JOIN.SALT' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>LOGIN.PASSWORD</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.JOIN.PASSWORD' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>WOT.PSEUDO</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.JOIN.PSEUDO' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+
+    <ion-item-divider translate>HELP.LOGIN.SECTION</ion-item-divider>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>HELP.LOGIN.PUBKEY</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.LOGIN.PUBKEY_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>HELP.LOGIN.METHOD</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.LOGIN.METHOD_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+
+    <ion-item-divider translate>HELP.GLOSSARY.SECTION</ion-item-divider>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>COMMON.PUBKEY</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.PUBKEY_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label [innerHTML]="'HELP.GLOSSARY.BLOCKCHAIN' | translate"></ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.BLOCKCHAIN_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>COMMON.UNIVERSAL_DIVIDEND</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.UNIVERSAL_DIVIDEND_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>HELP.GLOSSARY.MEMBER</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.MEMBER_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>HELP.GLOSSARY.WOT</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.WOT_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item lines="none">
+      <ion-grid>
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12">
+            <ion-label translate>HELP.GLOSSARY.CURRENCY_RULES</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.CURRENCY_RULES_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+    <ion-item id="GLOSSARY_DISTANCE_RULE" lines="none">
+      <ion-grid [ngClass]="{ highlight: isDefinitionGlossaryDistanceRule() }">
+        <ion-row>
+          <ion-col size="4" size-lg="4" size-sm="12" [ngClass]="{ 'text-bold': isDefinitionGlossaryDistanceRule() }">
+            <ion-label translate>HELP.GLOSSARY.DISTANCE_RULE</ion-label>
+          </ion-col>
+          <ion-col size="8" size-lg="8" size-sm="12">
+            <ion-label color="dark" [innerHTML]="'HELP.GLOSSARY.DISTANCE_RULE_DEF' | translate"></ion-label>
+          </ion-col>
+        </ion-row>
+      </ion-grid>
+    </ion-item>
+  </ion-list>
+</ion-content>
diff --git a/src/app/home/help/help.page.scss b/src/app/home/help/help.page.scss
new file mode 100644
index 0000000000000000000000000000000000000000..aa9ad85da71a8dd719a93547e5c032d8a73de0fd
--- /dev/null
+++ b/src/app/home/help/help.page.scss
@@ -0,0 +1,11 @@
+@import 'ionic.globals';
+@import 'cesium.globals';
+
+ion-item-divider {
+  font-size: 24px;
+  color: $font-family-base;
+}
+
+.highlight {
+  background-color: #ffe0b2;
+}
diff --git a/src/app/home/help/help.page.spec.ts b/src/app/home/help/help.page.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/app/home/help/help.page.ts b/src/app/home/help/help.page.ts
new file mode 100644
index 0000000000000000000000000000000000000000..15d477f54870e5e55b8115ad83465942d76f09ca
--- /dev/null
+++ b/src/app/home/help/help.page.ts
@@ -0,0 +1,78 @@
+import { Component, inject, Inject, Input, OnInit, ViewChild } from '@angular/core';
+import { APP_LOCALES, LocaleConfig, Settings } from '@app/settings/settings.model';
+import { AppPage, AppPageState } from '@app/shared/pages/base-page.class';
+import { NetworkService } from '@app/network/network.service';
+import { fadeInAnimation } from '@app/shared/animations';
+import { Router } from '@angular/router';
+import { RxStateProperty } from '@app/shared/decorator/state.decorator';
+import { RxState } from '@rx-angular/state';
+import { TranslateService } from '@ngx-translate/core';
+import { IonContent } from '@ionic/angular';
+import { isNotNilOrBlank } from '@app/shared/functions';
+
+export interface HelpPageState extends AppPageState, Settings {}
+
+export declare type HighlightedDefinition = 'GLOSSARY_DISTANCE_RULE' | 'DEMO_MODE_HELP' | 'READONLY_MODE_HELP' | '';
+
+@Component({
+  selector: 'app-help',
+  templateUrl: './help.page.html',
+  styleUrls: ['./help.page.scss'],
+  animations: [fadeInAnimation],
+  providers: [RxState],
+})
+export class HelpPage extends AppPage<HelpPageState> implements OnInit {
+  @ViewChild(IonContent, { static: true }) content: IonContent;
+  @RxStateProperty() locale: string;
+
+  @Input() highlightedDefinition: HighlightedDefinition;
+
+  protected translate = inject(TranslateService);
+
+  constructor(
+    protected networkService: NetworkService,
+    protected router: Router,
+    @Inject(APP_LOCALES) public locales: LocaleConfig[]
+  ) {
+    super({ name: 'help' });
+  }
+
+  protected async ngOnLoad() {
+    await Promise.all([this.networkService.ready()]);
+
+    if (isNotNilOrBlank(this.highlightedDefinition)) {
+      this.scrollToDefinition(this.highlightedDefinition);
+    }
+    return {
+      ...this.settings.clone(),
+    };
+  }
+
+  isDefinitionGlossaryDistanceRule() {
+    return this.highlightedDefinition === 'GLOSSARY_DISTANCE_RULE';
+  }
+
+  isDemo() {
+    return this.highlightedDefinition === 'DEMO_MODE_HELP';
+  }
+
+  isReadonly() {
+    return this.highlightedDefinition === 'READONLY_MODE_HELP';
+  }
+
+  async scrollToDefinition(definitionId: string) {
+    const targetElement = document.getElementById(definitionId);
+    if (targetElement) {
+      const scrollElement = await this.content.getScrollElement();
+      const yOffset = targetElement.getBoundingClientRect().top - scrollElement.getBoundingClientRect().top;
+      this.content
+        .scrollToPoint(0, yOffset, 500)
+        .then(() => {
+          console.log(`${this._logPrefix}Scrolled to ${definitionId}`);
+        })
+        .catch((err) => {
+          console.error(`${this._logPrefix}Scroll error:`, err);
+        });
+    }
+  }
+}
diff --git a/src/app/home/home.module.ts b/src/app/home/home.module.ts
index 7dd5a1b3728d6adb055e50c56336502dc8e9d43b..e83c53af3f4a5759b5b68759cb24c9506fc262c6 100644
--- a/src/app/home/home.module.ts
+++ b/src/app/home/home.module.ts
@@ -7,9 +7,10 @@ import { HomePageRoutingModule } from '@app/home/home-routing.module';
 import { AppAuthModule } from '@app/account/auth/auth.module';
 import { AppRegisterModule } from '@app/account/register/register.module';
 import { AppTransferModule } from '@app/transfer/send/transfer.module';
+import { FeedModule } from '@app/home/feed/feed.module';
 
 @NgModule({
-  imports: [AppSharedModule, TranslateModule.forChild(), HomePageRoutingModule, AppAuthModule, AppRegisterModule, AppTransferModule],
+  imports: [AppSharedModule, TranslateModule.forChild(), HomePageRoutingModule, AppAuthModule, AppRegisterModule, AppTransferModule, FeedModule],
   declarations: [HomePage],
 })
 export class HomeModule {}
diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html
index 6b532d86628ebedb97726724ad27dd3a4fc0fc91..0307edc85eaaa25abc02f55958d217d67b3f7492 100644
--- a/src/app/home/home.page.html
+++ b/src/app/home/home.page.html
@@ -1,4 +1,4 @@
-<ion-header [translucent]="true" *ngIf="mobile">
+<ion-header [translucent]="true">
   <ion-toolbar color="primary">
     <ion-buttons slot="start">
       <ion-menu-button></ion-menu-button>
@@ -11,77 +11,112 @@
 </ion-header>
 
 <ion-content [fullscreen]="true" class="circle-bg-dark">
+  <app-error-item [message]="error$ | async" [backgroundColor]="'danger'"></app-error-item>
+
+  @if (isDev() || isDemo()) {
+    <div class="ribbon">
+      @if (isDemo()) {
+        <ion-badge color="danger" (click)="openHelpModal('DEMO_MODE_HELP')" translate>MODE.DEMO.BADGE</ion-badge>
+      }
+      @if (isDev()) {
+        <ion-badge color="success" (click)="openHelpModal('READONLY_MODE_HELP')" translate>MODE.READONLY.BADGE</ion-badge>
+      }
+      <a [href]="environment.sourceUrl" target="_blank" title="{{ 'HOME.FORK_ME' | translate }}">
+        <ion-badge color="secondary" translate>HOME.FREE_SOFTWARE</ion-badge>
+      </a>
+      <a href="https://git.duniter.org/clients/cesium-grp/cesium/-/raw/master/LICENSE" target="_blank" title="{{ 'HOME.SHOW_LICENSE' | translate }}">
+        <ion-badge color="light">AGPL-3.0</ion-badge>
+      </a>
+    </div>
+  }
+
   <!-- Desktop: translucent top toolbar -->
-  <div *ngIf="!mobile">
-    <ion-toolbar color="transparent">
-      <ion-buttons slot="start">
-        <ion-menu-toggle>
-          <ion-button color="light" fill="clear">
-            <ion-icon slot="icon-only" name="menu"></ion-icon>
-          </ion-button>
-        </ion-menu-toggle>
-      </ion-buttons>
+  <!--  <div *ngIf="!mobile">-->
+  <!--    <ion-toolbar color="transparent">-->
+  <!--      <ion-buttons slot="start">-->
+  <!--        <ion-menu-toggle>-->
+  <!--          <ion-button color="light" fill="clear">-->
+  <!--            <ion-icon slot="icon-only" name="menu"></ion-icon>-->
+  <!--          </ion-button>-->
+  <!--        </ion-menu-toggle>-->
+  <!--      </ion-buttons>-->
 
-      <ion-buttons slot="end">
-        <ng-container *ngTemplateOutlet="darkModeButton; context: { $implicit: 'light' }"></ng-container>
-        <ng-container *ngTemplateOutlet="localeButton; context: { $implicit: 'light' }"></ng-container>
-      </ion-buttons>
-    </ion-toolbar>
-  </div>
+  <!--      <ion-buttons slot="end">-->
+  <!--        <ng-container *ngTemplateOutlet="darkModeButton; context: { $implicit: 'light' }"></ng-container>-->
+  <!--        <ng-container *ngTemplateOutlet="localeButton; context: { $implicit: 'light' }"></ng-container>-->
+  <!--      </ion-buttons>-->
+  <!--    </ion-toolbar>-->
+  <!--  </div>-->
+  <ion-row class="ion-no-padding">
+    <ion-col size="0" [sizeXl]="hasFeeds() ? 3 : 0"></ion-col>
+    <ion-col>
+      <ion-card class="main welcome ion-padding ion-text-center ion-align-self-center">
+        <ion-card-header>
+          <div class="logo"></div>
+          <ion-card-subtitle [innerHTML]="'HOME.WELCOME' | translate"></ion-card-subtitle>
+          <ion-card-title class="ion-text-center">
+            <ion-spinner *rxIf="loading$; else message"></ion-spinner>
+            <ng-template #message>
+              {{ 'HOME.MESSAGE' | translate: { currency: currency$ | async } }}
+            </ng-template>
+          </ion-card-title>
+        </ion-card-header>
+        <ion-card-content *rxIf="loaded$" @fadeInAnimation>
+          <ng-container *ngIf="isLogin; else noAccount">
+            <!-- my account -->
+            <ion-button expand="block" [routerLink]="'/wallet'">
+              <ion-icon name="person" slot="start"></ion-icon>
+              <ion-label translate>MENU.ACCOUNT</ion-label>
+            </ion-button>
 
-  <div id="container">
-    <ion-card class="main welcome ion-padding ion-text-center ion-align-self-center">
-      <ion-card-header>
-        <div class="logo"></div>
-        <ion-card-subtitle [innerHTML]="'HOME.WELCOME' | translate"></ion-card-subtitle>
-        <ion-card-title class="ion-text-center">
-          <ion-spinner *rxIf="loading$; else message"></ion-spinner>
-          <ng-template #message>
-            {{ 'HOME.MESSAGE' | translate: { currency: currency$ | async } }}
-          </ng-template>
-        </ion-card-title>
-      </ion-card-header>
-      <ion-card-content *rxIf="loaded$" @fadeInAnimation>
-        <ng-container *ngIf="isLogin; else noAccount">
-          <!-- my account -->
-          <ion-button expand="block" [routerLink]="'/wallet'">
-            <ion-icon name="person" slot="start"></ion-icon>
-            <ion-label translate>MENU.ACCOUNT</ion-label>
-          </ion-button>
+            <!-- transfer -->
+            <ion-button expand="block" (click)="transfer()">
+              <ion-icon name="paper-plane" slot="start"></ion-icon>
+              <ion-label translate>COMMON.BTN_SEND_MONEY</ion-label>
+            </ion-button>
 
-          <!-- transfer -->
-          <ion-button expand="block" (click)="transfer()">
-            <ion-icon name="paper-plane" slot="start"></ion-icon>
-            <ion-label translate>COMMON.BTN_SEND_MONEY</ion-label>
-          </ion-button>
+            <!-- disconnect button -->
+            <p [class.cdk-visually-hidden]="mobile" *rxIf="defaultAccount$; let defaultAccount">
+              <ion-text [innerHTML]="'HOME.NOT_YOUR_ACCOUNT_QUESTION' | translate: { pubkey: (defaultAccount | accountName) }"></ion-text>
+              <br />
+              <ion-text>
+                <a href="#" (click)="logout($event)">
+                  <span translate>HOME.BTN_CHANGE_ACCOUNT</span>
+                </a>
+              </ion-text>
+            </p>
 
-          <!-- disconnect button -->
-          <p [class.cdk-visually-hidden]="mobile" *rxIf="defaultAccount$; let defaultAccount">
-            <ion-text [innerHTML]="'HOME.NOT_YOUR_ACCOUNT_QUESTION' | translate: { pubkey: (defaultAccount | accountName) }"></ion-text>
-            <br />
-            <ion-text>
-              <a href="#" (click)="logout($event)">
-                <span translate>HOME.BTN_CHANGE_ACCOUNT</span>
-              </a>
-            </ion-text>
-          </p>
-        </ng-container>
+            @if (isDemo()) {
+              <p>
+                <ion-icon name="help-circle" slot="start"></ion-icon>
+                <ion-label [innerHTML]="'MODE.DEMO.MODE_HELP' | translate"></ion-label>
+              </p>
+              <p>
+                <a (click)="openHelpModal('DEMO_MODE_HELP')" tappable translate>HOME.READ_MORE</a>
+              </p>
+            }
+          </ng-container>
 
-        <ng-template #noAccount>
-          <!-- register -->
-          <ion-button expand="block" (click)="register($event)">
-            <ion-label translate>LOGIN.CREATE_FREE_ACCOUNT</ion-label>
-          </ion-button>
+          <ng-template #noAccount>
+            <!-- register -->
+            <ion-button expand="block" (click)="register($event)">
+              <ion-label translate>LOGIN.CREATE_FREE_ACCOUNT</ion-label>
+            </ion-button>
 
-          <!-- login -->
-          <p class="ion-padding-top" translate>LOGIN.HAVE_ACCOUNT_QUESTION</p>
-          <ion-button expand="block" (click)="login($event)">
-            <ion-label translate>COMMON.BTN_LOGIN</ion-label>
-          </ion-button>
-        </ng-template>
-      </ion-card-content>
-    </ion-card>
-  </div>
+            <!-- login -->
+            <p class="ion-padding-top" translate>LOGIN.HAVE_ACCOUNT_QUESTION</p>
+            <ion-button expand="block" (click)="login($event)">
+              <ion-label translate>COMMON.BTN_LOGIN</ion-label>
+            </ion-button>
+          </ng-template>
+        </ion-card-content>
+      </ion-card>
+    </ion-col>
+    <ion-col size="0" [sizeXl]="hasFeeds() ? 1 : 0"></ion-col>
+    <ion-col [size]="hasFeeds() ? 12 : 0" [sizeXl]="hasFeeds() ? 4 : 0">
+      <app-feeds #feeds></app-feeds>
+    </ion-col>
+  </ion-row>
 </ion-content>
 
 <ng-template #localeButton let-buttonColor>
@@ -106,9 +141,7 @@
 </ng-template>
 
 <ng-template #darkModeButton let-buttonColor>
-  <ion-button (click)="toggleDarkMode()"
-              [color]="buttonColor"
-              [title]="'SETTINGS.BTN_DARK_MODE' | translate">
+  <ion-button (click)="toggleDarkMode()" [color]="buttonColor" [title]="'SETTINGS.BTN_DARK_MODE' | translate">
     <ion-icon slot="icon-only" [name]="settings.darkMode ? 'sunny' : 'moon'"></ion-icon>
   </ion-button>
 </ng-template>
diff --git a/src/app/home/home.page.scss b/src/app/home/home.page.scss
index 475104bbfbf3ab04bfd9d4eb00f1a6c8efa653b6..c371df05f688ae12a9017e560f5b23811e8ead5d 100644
--- a/src/app/home/home.page.scss
+++ b/src/app/home/home.page.scss
@@ -11,6 +11,7 @@ h5 {
 .ion-text-center {
   text-align: center;
 }
+
 ion-content {
   --background: transparent;
   --ion-toolbar-background: transparent;
@@ -26,6 +27,7 @@ ion-content {
 
   ion-card {
     z-index: 9;
+
     ion-card-header {
       display: block;
 
@@ -98,3 +100,34 @@ ion-content {
     background-size: 1024px 1024px;
   }
 }
+
+.ribbon {
+  position: absolute;
+  top: 70px;
+  right: -100px;
+  z-index: 500;
+  transform: rotate(45deg);
+  width: 300px;
+  text-decoration: none;
+  box-shadow: 0 0 5px #000;
+  a {
+    text-decoration: none;
+  }
+  ion-badge:first-child {
+    opacity: 1 !important;
+  }
+
+  ion-badge {
+    display: block;
+    width: 100%;
+    line-height: 16px;
+    opacity: 0.9;
+  }
+
+  ion-badge:hover {
+    opacity: 1;
+    font-size: 16px;
+  }
+}
+
+
diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts
index 8fb25a686176bf6e7695aa9ea91344053b1eef7b..b79f499fbbd37c056cd06bb90210a344048ff276 100644
--- a/src/app/home/home.page.ts
+++ b/src/app/home/home.page.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit, ViewChild } from '@angular/core';
 import { APP_LOCALES, LocaleConfig, Settings } from '@app/settings/settings.model';
 import { AppPage, AppPageState } from '@app/shared/pages/base-page.class';
 import { NetworkService } from '@app/network/network.service';
@@ -13,7 +13,13 @@ import { Observable } from 'rxjs';
 import { Currency } from '@app/currency/currency.model';
 import { RxState } from '@rx-angular/state';
 import { setTimeout } from '@rx-angular/cdk/zone-less/browser';
-import { AlertController } from '@ionic/angular';
+import { AlertController, ModalController } from '@ionic/angular';
+import { FeedComponent } from '@app/home/feed/feed.component';
+import { isNotEmptyArray } from '@app/shared/functions';
+import { environment } from '@environments/environment';
+import { HelpPage } from '@app/home/help/help.page';
+import { isDemo, isDev } from '@app/shared/environment/environment.utils';
+import moment from 'moment';
 
 export interface HomePageState extends AppPageState, Settings {
   defaultAccount: Account;
@@ -28,6 +34,8 @@ export interface HomePageState extends AppPageState, Settings {
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class HomePage extends AppPage<HomePageState> implements OnInit {
+  @ViewChild('feeds') feeds: FeedComponent;
+
   @RxStateProperty() defaultAccount: Account;
   @RxStateProperty() locale: string;
 
@@ -45,6 +53,7 @@ export class HomePage extends AppPage<HomePageState> implements OnInit {
     protected authController: AuthController,
     protected transferController: TransferController,
     protected router: Router,
+    protected modalCtrl: ModalController,
     private cd: ChangeDetectorRef,
     @Inject(APP_LOCALES) public locales: LocaleConfig[]
   ) {
@@ -78,6 +87,18 @@ export class HomePage extends AppPage<HomePageState> implements OnInit {
       //auth: true,
     });
     if (data?.address) {
+      if (data.meta?.isMember) {
+        const redeemPeriod = this.settings.selectedRedeemPeriod;
+        const now = moment();
+
+        const lastRedeem = this.settings.lastRedeemDate.startOf('day');
+
+        if (lastRedeem.add(1, redeemPeriod).isBefore(now)) {
+          await this.accountService.claimUds(data);
+          this.settings.patchValue({ lastRedeemDate: now });
+        }
+      }
+
       this.defaultAccount = data;
       setTimeout(() => this.router.navigate(['/wallet', data.address]));
     }
@@ -125,6 +146,27 @@ export class HomePage extends AppPage<HomePageState> implements OnInit {
   }
 
   toggleDarkMode() {
-      this.settings.patchValue({ darkMode: !this.settings.darkMode});
+    this.settings.patchValue({ darkMode: !this.settings.darkMode });
+  }
+
+  hasFeeds() {
+    return isNotEmptyArray(this.feeds?.topics);
+  }
+
+  async openHelpModal(definition: string) {
+    const modal = await this.modalCtrl.create({
+      id: 'help-modal',
+      component: HelpPage,
+      componentProps: {
+        highlightedDefinition: definition,
+      },
+      presentingElement: this._presentingElement,
+      canDismiss: true,
+    });
+    await modal.present();
   }
+  protected readonly environment = environment;
+  protected readonly open = open;
+  protected readonly isDemo = isDemo;
+  protected readonly isDev = isDev;
 }
diff --git a/src/app/network/indexer/indexer-certification.gql b/src/app/network/indexer/indexer-certification.gql
index 98a04d2e805dc6c1faed64520a9541ca97f6084b..4f298e63f6871b1a3f764dd5ea52b3f1dfaf2690 100644
--- a/src/app/network/indexer/indexer-certification.gql
+++ b/src/app/network/indexer/indexer-certification.gql
@@ -1,4 +1,3 @@
-
 fragment LightCert on Cert {
   __typename
   id
diff --git a/src/app/network/indexer/indexer-helpers.generated.ts b/src/app/network/indexer/indexer-helpers.generated.ts
index 51973f2fd2edccf6ab313a559274172f06f02466..819f9b354a07fc0ea4a3a070e8892e3e23f049d3 100644
--- a/src/app/network/indexer/indexer-helpers.generated.ts
+++ b/src/app/network/indexer/indexer-helpers.generated.ts
@@ -1,10 +1,20 @@
 import { FieldPolicy, FieldReadFunction, TypePolicies, TypePolicy } from '@apollo/client/cache';
-export type AccountKeySpecifier = ('id' | 'identity' | 'linkedIdentity' | 'linkedIdentityId' | 'transfersIssued' | 'transfersIssuedAggregate' | 'transfersIssued_connection' | 'transfersReceived' | 'transfersReceivedAggregate' | 'transfersReceived_connection' | 'wasIdentity' | 'wasIdentityAggregate' | 'wasIdentity_connection' | AccountKeySpecifier)[];
+export type AccountKeySpecifier = ('balance' | 'commentsIssued' | 'commentsIssuedAggregate' | 'commentsIssued_connection' | 'createdOn' | 'id' | 'identity' | 'isActive' | 'linkedIdentity' | 'linkedIdentityId' | 'removedIdentities' | 'removedIdentitiesAggregate' | 'removedIdentities_connection' | 'totalBalance' | 'transfersIssued' | 'transfersIssuedAggregate' | 'transfersIssued_connection' | 'transfersReceived' | 'transfersReceivedAggregate' | 'transfersReceived_connection' | 'wasIdentity' | 'wasIdentityAggregate' | 'wasIdentity_connection' | AccountKeySpecifier)[];
 export type AccountFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentsIssued?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentsIssuedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentsIssued_connection?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
 	identity?: FieldPolicy<any> | FieldReadFunction<any>,
+	isActive?: FieldPolicy<any> | FieldReadFunction<any>,
 	linkedIdentity?: FieldPolicy<any> | FieldReadFunction<any>,
 	linkedIdentityId?: FieldPolicy<any> | FieldReadFunction<any>,
+	removedIdentities?: FieldPolicy<any> | FieldReadFunction<any>,
+	removedIdentitiesAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	removedIdentities_connection?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>,
 	transfersIssued?: FieldPolicy<any> | FieldReadFunction<any>,
 	transfersIssuedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
 	transfersIssued_connection?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -20,11 +30,25 @@ export type AccountAggregateFieldPolicy = {
 	aggregate?: FieldPolicy<any> | FieldReadFunction<any>,
 	nodes?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type AccountAggregateFieldsKeySpecifier = ('count' | 'max' | 'min' | AccountAggregateFieldsKeySpecifier)[];
+export type AccountAggregateFieldsKeySpecifier = ('avg' | 'count' | 'max' | 'min' | 'stddev' | 'stddevPop' | 'stddevSamp' | 'sum' | 'varPop' | 'varSamp' | 'variance' | AccountAggregateFieldsKeySpecifier)[];
 export type AccountAggregateFieldsFieldPolicy = {
+	avg?: FieldPolicy<any> | FieldReadFunction<any>,
 	count?: FieldPolicy<any> | FieldReadFunction<any>,
 	max?: FieldPolicy<any> | FieldReadFunction<any>,
-	min?: FieldPolicy<any> | FieldReadFunction<any>
+	min?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddev?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	sum?: FieldPolicy<any> | FieldReadFunction<any>,
+	varPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	varSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	variance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountAvgFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountAvgFieldsKeySpecifier)[];
+export type AccountAvgFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
 };
 export type AccountConnectionKeySpecifier = ('edges' | 'pageInfo' | AccountConnectionKeySpecifier)[];
 export type AccountConnectionFieldPolicy = {
@@ -36,15 +60,63 @@ export type AccountEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type AccountMaxFieldsKeySpecifier = ('id' | 'linkedIdentityId' | AccountMaxFieldsKeySpecifier)[];
+export type AccountMaxFieldsKeySpecifier = ('balance' | 'createdOn' | 'id' | 'linkedIdentityId' | 'totalBalance' | AccountMaxFieldsKeySpecifier)[];
 export type AccountMaxFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
-	linkedIdentityId?: FieldPolicy<any> | FieldReadFunction<any>
+	linkedIdentityId?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type AccountMinFieldsKeySpecifier = ('id' | 'linkedIdentityId' | AccountMinFieldsKeySpecifier)[];
+export type AccountMinFieldsKeySpecifier = ('balance' | 'createdOn' | 'id' | 'linkedIdentityId' | 'totalBalance' | AccountMinFieldsKeySpecifier)[];
 export type AccountMinFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
-	linkedIdentityId?: FieldPolicy<any> | FieldReadFunction<any>
+	linkedIdentityId?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountStddevFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountStddevFieldsKeySpecifier)[];
+export type AccountStddevFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountStddevPopFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountStddevPopFieldsKeySpecifier)[];
+export type AccountStddevPopFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountStddevSampFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountStddevSampFieldsKeySpecifier)[];
+export type AccountStddevSampFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountSumFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountSumFieldsKeySpecifier)[];
+export type AccountSumFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountVarPopFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountVarPopFieldsKeySpecifier)[];
+export type AccountVarPopFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountVarSampFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountVarSampFieldsKeySpecifier)[];
+export type AccountVarSampFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type AccountVarianceFieldsKeySpecifier = ('balance' | 'createdOn' | 'totalBalance' | AccountVarianceFieldsKeySpecifier)[];
+export type AccountVarianceFieldsFieldPolicy = {
+	balance?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	totalBalance?: FieldPolicy<any> | FieldReadFunction<any>
 };
 export type BlockKeySpecifier = ('calls' | 'callsAggregate' | 'callsCount' | 'calls_connection' | 'events' | 'eventsAggregate' | 'eventsCount' | 'events_connection' | 'extrinsics' | 'extrinsicsAggregate' | 'extrinsicsCount' | 'extrinsics_connection' | 'extrinsicsicRoot' | 'hash' | 'height' | 'id' | 'implName' | 'implVersion' | 'parentHash' | 'specName' | 'specVersion' | 'stateRoot' | 'timestamp' | 'validator' | BlockKeySpecifier)[];
 export type BlockFieldPolicy = {
@@ -668,10 +740,12 @@ export type ExtrinsicVarianceFieldsFieldPolicy = {
 	tip?: FieldPolicy<any> | FieldReadFunction<any>,
 	version?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type IdentityKeySpecifier = ('account' | 'accountId' | 'certIssued' | 'certIssuedAggregate' | 'certIssued_connection' | 'certReceived' | 'certReceivedAggregate' | 'certReceived_connection' | 'createdIn' | 'createdInId' | 'createdOn' | 'expireOn' | 'id' | 'index' | 'isMember' | 'lastChangeOn' | 'linkedAccount' | 'linkedAccountAggregate' | 'linkedAccount_connection' | 'membershipHistory' | 'membershipHistoryAggregate' | 'membershipHistory_connection' | 'name' | 'ownerKeyChange' | 'ownerKeyChangeAggregate' | 'ownerKeyChange_connection' | 'smithCertIssued' | 'smithCertIssuedAggregate' | 'smithCertIssued_connection' | 'smithCertReceived' | 'smithCertReceivedAggregate' | 'smithCertReceived_connection' | 'smithStatus' | 'status' | 'udHistory' | IdentityKeySpecifier)[];
+export type IdentityKeySpecifier = ('account' | 'accountId' | 'accountRemoved' | 'accountRemovedId' | 'certIssued' | 'certIssuedAggregate' | 'certIssued_connection' | 'certReceived' | 'certReceivedAggregate' | 'certReceived_connection' | 'createdIn' | 'createdInId' | 'createdOn' | 'expireOn' | 'firstEligibleUd' | 'id' | 'index' | 'isMember' | 'lastChangeOn' | 'linkedAccount' | 'linkedAccountAggregate' | 'linkedAccount_connection' | 'membershipHistory' | 'membershipHistoryAggregate' | 'membershipHistory_connection' | 'name' | 'ownerKeyChange' | 'ownerKeyChangeAggregate' | 'ownerKeyChange_connection' | 'smith' | 'status' | 'udHistory' | IdentityKeySpecifier)[];
 export type IdentityFieldPolicy = {
 	account?: FieldPolicy<any> | FieldReadFunction<any>,
 	accountId?: FieldPolicy<any> | FieldReadFunction<any>,
+	accountRemoved?: FieldPolicy<any> | FieldReadFunction<any>,
+	accountRemovedId?: FieldPolicy<any> | FieldReadFunction<any>,
 	certIssued?: FieldPolicy<any> | FieldReadFunction<any>,
 	certIssuedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
 	certIssued_connection?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -682,6 +756,7 @@ export type IdentityFieldPolicy = {
 	createdInId?: FieldPolicy<any> | FieldReadFunction<any>,
 	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
 	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
 	index?: FieldPolicy<any> | FieldReadFunction<any>,
 	isMember?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -696,16 +771,37 @@ export type IdentityFieldPolicy = {
 	ownerKeyChange?: FieldPolicy<any> | FieldReadFunction<any>,
 	ownerKeyChangeAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
 	ownerKeyChange_connection?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertIssued?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertIssuedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertIssued_connection?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertReceived?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertReceivedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithCertReceived_connection?: FieldPolicy<any> | FieldReadFunction<any>,
-	smithStatus?: FieldPolicy<any> | FieldReadFunction<any>,
+	smith?: FieldPolicy<any> | FieldReadFunction<any>,
 	status?: FieldPolicy<any> | FieldReadFunction<any>,
 	udHistory?: FieldPolicy<any> | FieldReadFunction<any>
 };
+export type IdentityAggregateKeySpecifier = ('aggregate' | 'nodes' | IdentityAggregateKeySpecifier)[];
+export type IdentityAggregateFieldPolicy = {
+	aggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	nodes?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityAggregateFieldsKeySpecifier = ('avg' | 'count' | 'max' | 'min' | 'stddev' | 'stddevPop' | 'stddevSamp' | 'sum' | 'varPop' | 'varSamp' | 'variance' | IdentityAggregateFieldsKeySpecifier)[];
+export type IdentityAggregateFieldsFieldPolicy = {
+	avg?: FieldPolicy<any> | FieldReadFunction<any>,
+	count?: FieldPolicy<any> | FieldReadFunction<any>,
+	max?: FieldPolicy<any> | FieldReadFunction<any>,
+	min?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddev?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	sum?: FieldPolicy<any> | FieldReadFunction<any>,
+	varPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	varSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	variance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityAvgFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityAvgFieldsKeySpecifier)[];
+export type IdentityAvgFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
 export type IdentityConnectionKeySpecifier = ('edges' | 'pageInfo' | IdentityConnectionKeySpecifier)[];
 export type IdentityConnectionFieldPolicy = {
 	edges?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -716,6 +812,88 @@ export type IdentityEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
+export type IdentityMaxFieldsKeySpecifier = ('accountId' | 'accountRemovedId' | 'createdInId' | 'createdOn' | 'expireOn' | 'firstEligibleUd' | 'id' | 'index' | 'lastChangeOn' | 'name' | IdentityMaxFieldsKeySpecifier)[];
+export type IdentityMaxFieldsFieldPolicy = {
+	accountId?: FieldPolicy<any> | FieldReadFunction<any>,
+	accountRemovedId?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdInId?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	name?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityMinFieldsKeySpecifier = ('accountId' | 'accountRemovedId' | 'createdInId' | 'createdOn' | 'expireOn' | 'firstEligibleUd' | 'id' | 'index' | 'lastChangeOn' | 'name' | IdentityMinFieldsKeySpecifier)[];
+export type IdentityMinFieldsFieldPolicy = {
+	accountId?: FieldPolicy<any> | FieldReadFunction<any>,
+	accountRemovedId?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdInId?: FieldPolicy<any> | FieldReadFunction<any>,
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	name?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityStddevFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityStddevFieldsKeySpecifier)[];
+export type IdentityStddevFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityStddevPopFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityStddevPopFieldsKeySpecifier)[];
+export type IdentityStddevPopFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityStddevSampFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityStddevSampFieldsKeySpecifier)[];
+export type IdentityStddevSampFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentitySumFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentitySumFieldsKeySpecifier)[];
+export type IdentitySumFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityVarPopFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityVarPopFieldsKeySpecifier)[];
+export type IdentityVarPopFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityVarSampFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityVarSampFieldsKeySpecifier)[];
+export type IdentityVarSampFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type IdentityVarianceFieldsKeySpecifier = ('createdOn' | 'expireOn' | 'firstEligibleUd' | 'index' | 'lastChangeOn' | IdentityVarianceFieldsKeySpecifier)[];
+export type IdentityVarianceFieldsFieldPolicy = {
+	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	expireOn?: FieldPolicy<any> | FieldReadFunction<any>,
+	firstEligibleUd?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChangeOn?: FieldPolicy<any> | FieldReadFunction<any>
+};
 export type ItemsCounterKeySpecifier = ('id' | 'level' | 'total' | 'type' | ItemsCounterKeySpecifier)[];
 export type ItemsCounterFieldPolicy = {
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -829,6 +1007,44 @@ export type PageInfoFieldPolicy = {
 	hasPreviousPage?: FieldPolicy<any> | FieldReadFunction<any>,
 	startCursor?: FieldPolicy<any> | FieldReadFunction<any>
 };
+export type PopulationHistoryKeySpecifier = ('activeAccountCount' | 'blockNumber' | 'id' | 'memberCount' | 'smithCount' | PopulationHistoryKeySpecifier)[];
+export type PopulationHistoryFieldPolicy = {
+	activeAccountCount?: FieldPolicy<any> | FieldReadFunction<any>,
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	memberCount?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCount?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type PopulationHistoryConnectionKeySpecifier = ('edges' | 'pageInfo' | PopulationHistoryConnectionKeySpecifier)[];
+export type PopulationHistoryConnectionFieldPolicy = {
+	edges?: FieldPolicy<any> | FieldReadFunction<any>,
+	pageInfo?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type PopulationHistoryEdgeKeySpecifier = ('cursor' | 'node' | PopulationHistoryEdgeKeySpecifier)[];
+export type PopulationHistoryEdgeFieldPolicy = {
+	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
+	node?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithKeySpecifier = ('forged' | 'id' | 'identity' | 'identityId' | 'index' | 'lastChanged' | 'lastForged' | 'smithCertIssued' | 'smithCertIssuedAggregate' | 'smithCertIssued_connection' | 'smithCertReceived' | 'smithCertReceivedAggregate' | 'smithCertReceived_connection' | 'smithHistory' | 'smithHistoryAggregate' | 'smithHistory_connection' | 'smithStatus' | SmithKeySpecifier)[];
+export type SmithFieldPolicy = {
+	forged?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	identity?: FieldPolicy<any> | FieldReadFunction<any>,
+	identityId?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastChanged?: FieldPolicy<any> | FieldReadFunction<any>,
+	lastForged?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertIssued?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertIssuedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertIssued_connection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertReceived?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertReceivedAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithCertReceived_connection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithHistory?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithHistoryAggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithHistory_connection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithStatus?: FieldPolicy<any> | FieldReadFunction<any>
+};
 export type SmithCertKeySpecifier = ('createdOn' | 'id' | 'issuer' | 'issuerId' | 'receiver' | 'receiverId' | SmithCertKeySpecifier)[];
 export type SmithCertFieldPolicy = {
 	createdOn?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -913,11 +1129,109 @@ export type SmithCertVarianceFieldsKeySpecifier = ('createdOn' | SmithCertVarian
 export type SmithCertVarianceFieldsFieldPolicy = {
 	createdOn?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type TransferKeySpecifier = ('amount' | 'blockNumber' | 'comment' | 'from' | 'fromId' | 'id' | 'timestamp' | 'to' | 'toId' | TransferKeySpecifier)[];
+export type SmithConnectionKeySpecifier = ('edges' | 'pageInfo' | SmithConnectionKeySpecifier)[];
+export type SmithConnectionFieldPolicy = {
+	edges?: FieldPolicy<any> | FieldReadFunction<any>,
+	pageInfo?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEdgeKeySpecifier = ('cursor' | 'node' | SmithEdgeKeySpecifier)[];
+export type SmithEdgeFieldPolicy = {
+	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
+	node?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventKeySpecifier = ('blockNumber' | 'event' | 'eventId' | 'eventType' | 'id' | 'smith' | 'smithId' | SmithEventKeySpecifier)[];
+export type SmithEventFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	event?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventType?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	smith?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithId?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventAggregateKeySpecifier = ('aggregate' | 'nodes' | SmithEventAggregateKeySpecifier)[];
+export type SmithEventAggregateFieldPolicy = {
+	aggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	nodes?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventAggregateFieldsKeySpecifier = ('avg' | 'count' | 'max' | 'min' | 'stddev' | 'stddevPop' | 'stddevSamp' | 'sum' | 'varPop' | 'varSamp' | 'variance' | SmithEventAggregateFieldsKeySpecifier)[];
+export type SmithEventAggregateFieldsFieldPolicy = {
+	avg?: FieldPolicy<any> | FieldReadFunction<any>,
+	count?: FieldPolicy<any> | FieldReadFunction<any>,
+	max?: FieldPolicy<any> | FieldReadFunction<any>,
+	min?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddev?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	sum?: FieldPolicy<any> | FieldReadFunction<any>,
+	varPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	varSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	variance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventAvgFieldsKeySpecifier = ('blockNumber' | SmithEventAvgFieldsKeySpecifier)[];
+export type SmithEventAvgFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventConnectionKeySpecifier = ('edges' | 'pageInfo' | SmithEventConnectionKeySpecifier)[];
+export type SmithEventConnectionFieldPolicy = {
+	edges?: FieldPolicy<any> | FieldReadFunction<any>,
+	pageInfo?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventEdgeKeySpecifier = ('cursor' | 'node' | SmithEventEdgeKeySpecifier)[];
+export type SmithEventEdgeFieldPolicy = {
+	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
+	node?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventMaxFieldsKeySpecifier = ('blockNumber' | 'eventId' | 'id' | 'smithId' | SmithEventMaxFieldsKeySpecifier)[];
+export type SmithEventMaxFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithId?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventMinFieldsKeySpecifier = ('blockNumber' | 'eventId' | 'id' | 'smithId' | SmithEventMinFieldsKeySpecifier)[];
+export type SmithEventMinFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithId?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventStddevFieldsKeySpecifier = ('blockNumber' | SmithEventStddevFieldsKeySpecifier)[];
+export type SmithEventStddevFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventStddevPopFieldsKeySpecifier = ('blockNumber' | SmithEventStddevPopFieldsKeySpecifier)[];
+export type SmithEventStddevPopFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventStddevSampFieldsKeySpecifier = ('blockNumber' | SmithEventStddevSampFieldsKeySpecifier)[];
+export type SmithEventStddevSampFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventSumFieldsKeySpecifier = ('blockNumber' | SmithEventSumFieldsKeySpecifier)[];
+export type SmithEventSumFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventVarPopFieldsKeySpecifier = ('blockNumber' | SmithEventVarPopFieldsKeySpecifier)[];
+export type SmithEventVarPopFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventVarSampFieldsKeySpecifier = ('blockNumber' | SmithEventVarSampFieldsKeySpecifier)[];
+export type SmithEventVarSampFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type SmithEventVarianceFieldsKeySpecifier = ('blockNumber' | SmithEventVarianceFieldsKeySpecifier)[];
+export type SmithEventVarianceFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TransferKeySpecifier = ('amount' | 'blockNumber' | 'comment' | 'commentId' | 'event' | 'eventId' | 'from' | 'fromId' | 'id' | 'timestamp' | 'to' | 'toId' | TransferKeySpecifier)[];
 export type TransferFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
 	comment?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentId?: FieldPolicy<any> | FieldReadFunction<any>,
+	event?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
 	from?: FieldPolicy<any> | FieldReadFunction<any>,
 	fromId?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -959,21 +1273,23 @@ export type TransferEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type TransferMaxFieldsKeySpecifier = ('amount' | 'blockNumber' | 'comment' | 'fromId' | 'id' | 'timestamp' | 'toId' | TransferMaxFieldsKeySpecifier)[];
+export type TransferMaxFieldsKeySpecifier = ('amount' | 'blockNumber' | 'commentId' | 'eventId' | 'fromId' | 'id' | 'timestamp' | 'toId' | TransferMaxFieldsKeySpecifier)[];
 export type TransferMaxFieldsFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
-	comment?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentId?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
 	fromId?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
 	timestamp?: FieldPolicy<any> | FieldReadFunction<any>,
 	toId?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type TransferMinFieldsKeySpecifier = ('amount' | 'blockNumber' | 'comment' | 'fromId' | 'id' | 'timestamp' | 'toId' | TransferMinFieldsKeySpecifier)[];
+export type TransferMinFieldsKeySpecifier = ('amount' | 'blockNumber' | 'commentId' | 'eventId' | 'fromId' | 'id' | 'timestamp' | 'toId' | TransferMinFieldsKeySpecifier)[];
 export type TransferMinFieldsFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
-	comment?: FieldPolicy<any> | FieldReadFunction<any>,
+	commentId?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
 	fromId?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
 	timestamp?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -1014,6 +1330,98 @@ export type TransferVarianceFieldsFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
 };
+export type TxCommentKeySpecifier = ('author' | 'authorId' | 'blockNumber' | 'event' | 'eventId' | 'hash' | 'id' | 'remark' | 'remarkBytes' | 'type' | TxCommentKeySpecifier)[];
+export type TxCommentFieldPolicy = {
+	author?: FieldPolicy<any> | FieldReadFunction<any>,
+	authorId?: FieldPolicy<any> | FieldReadFunction<any>,
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	event?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	hash?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	remark?: FieldPolicy<any> | FieldReadFunction<any>,
+	remarkBytes?: FieldPolicy<any> | FieldReadFunction<any>,
+	type?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentAggregateKeySpecifier = ('aggregate' | 'nodes' | TxCommentAggregateKeySpecifier)[];
+export type TxCommentAggregateFieldPolicy = {
+	aggregate?: FieldPolicy<any> | FieldReadFunction<any>,
+	nodes?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentAggregateFieldsKeySpecifier = ('avg' | 'count' | 'max' | 'min' | 'stddev' | 'stddevPop' | 'stddevSamp' | 'sum' | 'varPop' | 'varSamp' | 'variance' | TxCommentAggregateFieldsKeySpecifier)[];
+export type TxCommentAggregateFieldsFieldPolicy = {
+	avg?: FieldPolicy<any> | FieldReadFunction<any>,
+	count?: FieldPolicy<any> | FieldReadFunction<any>,
+	max?: FieldPolicy<any> | FieldReadFunction<any>,
+	min?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddev?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	stddevSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	sum?: FieldPolicy<any> | FieldReadFunction<any>,
+	varPop?: FieldPolicy<any> | FieldReadFunction<any>,
+	varSamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	variance?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentAvgFieldsKeySpecifier = ('blockNumber' | TxCommentAvgFieldsKeySpecifier)[];
+export type TxCommentAvgFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentConnectionKeySpecifier = ('edges' | 'pageInfo' | TxCommentConnectionKeySpecifier)[];
+export type TxCommentConnectionFieldPolicy = {
+	edges?: FieldPolicy<any> | FieldReadFunction<any>,
+	pageInfo?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentEdgeKeySpecifier = ('cursor' | 'node' | TxCommentEdgeKeySpecifier)[];
+export type TxCommentEdgeFieldPolicy = {
+	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
+	node?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentMaxFieldsKeySpecifier = ('authorId' | 'blockNumber' | 'eventId' | 'hash' | 'id' | 'remark' | TxCommentMaxFieldsKeySpecifier)[];
+export type TxCommentMaxFieldsFieldPolicy = {
+	authorId?: FieldPolicy<any> | FieldReadFunction<any>,
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	hash?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	remark?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentMinFieldsKeySpecifier = ('authorId' | 'blockNumber' | 'eventId' | 'hash' | 'id' | 'remark' | TxCommentMinFieldsKeySpecifier)[];
+export type TxCommentMinFieldsFieldPolicy = {
+	authorId?: FieldPolicy<any> | FieldReadFunction<any>,
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
+	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
+	hash?: FieldPolicy<any> | FieldReadFunction<any>,
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	remark?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentStddevFieldsKeySpecifier = ('blockNumber' | TxCommentStddevFieldsKeySpecifier)[];
+export type TxCommentStddevFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentStddevPopFieldsKeySpecifier = ('blockNumber' | TxCommentStddevPopFieldsKeySpecifier)[];
+export type TxCommentStddevPopFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentStddevSampFieldsKeySpecifier = ('blockNumber' | TxCommentStddevSampFieldsKeySpecifier)[];
+export type TxCommentStddevSampFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentSumFieldsKeySpecifier = ('blockNumber' | TxCommentSumFieldsKeySpecifier)[];
+export type TxCommentSumFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentVarPopFieldsKeySpecifier = ('blockNumber' | TxCommentVarPopFieldsKeySpecifier)[];
+export type TxCommentVarPopFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentVarSampFieldsKeySpecifier = ('blockNumber' | TxCommentVarSampFieldsKeySpecifier)[];
+export type TxCommentVarSampFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type TxCommentVarianceFieldsKeySpecifier = ('blockNumber' | TxCommentVarianceFieldsKeySpecifier)[];
+export type TxCommentVarianceFieldsFieldPolicy = {
+	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>
+};
 export type UdHistoryKeySpecifier = ('amount' | 'blockNumber' | 'id' | 'identity' | 'identityId' | 'timestamp' | UdHistoryKeySpecifier)[];
 export type UdHistoryFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -1033,7 +1441,7 @@ export type UdHistoryEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type UdReevalKeySpecifier = ('blockNumber' | 'event' | 'eventId' | 'id' | 'membersCount' | 'monetaryMass' | 'newUdAmount' | 'timestamp' | UdReevalKeySpecifier)[];
+export type UdReevalKeySpecifier = ('blockNumber' | 'event' | 'eventId' | 'id' | 'membersCount' | 'monetaryMass' | 'newUdAmount' | 'timestamp' | 'udIndex' | UdReevalKeySpecifier)[];
 export type UdReevalFieldPolicy = {
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
 	event?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -1042,7 +1450,8 @@ export type UdReevalFieldPolicy = {
 	membersCount?: FieldPolicy<any> | FieldReadFunction<any>,
 	monetaryMass?: FieldPolicy<any> | FieldReadFunction<any>,
 	newUdAmount?: FieldPolicy<any> | FieldReadFunction<any>,
-	timestamp?: FieldPolicy<any> | FieldReadFunction<any>
+	timestamp?: FieldPolicy<any> | FieldReadFunction<any>,
+	udIndex?: FieldPolicy<any> | FieldReadFunction<any>
 };
 export type UdReevalConnectionKeySpecifier = ('edges' | 'pageInfo' | UdReevalConnectionKeySpecifier)[];
 export type UdReevalConnectionFieldPolicy = {
@@ -1054,13 +1463,14 @@ export type UdReevalEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type UniversalDividendKeySpecifier = ('amount' | 'blockNumber' | 'event' | 'eventId' | 'id' | 'membersCount' | 'monetaryMass' | 'timestamp' | UniversalDividendKeySpecifier)[];
+export type UniversalDividendKeySpecifier = ('amount' | 'blockNumber' | 'event' | 'eventId' | 'id' | 'index' | 'membersCount' | 'monetaryMass' | 'timestamp' | UniversalDividendKeySpecifier)[];
 export type UniversalDividendFieldPolicy = {
 	amount?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockNumber?: FieldPolicy<any> | FieldReadFunction<any>,
 	event?: FieldPolicy<any> | FieldReadFunction<any>,
 	eventId?: FieldPolicy<any> | FieldReadFunction<any>,
 	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>,
 	membersCount?: FieldPolicy<any> | FieldReadFunction<any>,
 	monetaryMass?: FieldPolicy<any> | FieldReadFunction<any>,
 	timestamp?: FieldPolicy<any> | FieldReadFunction<any>
@@ -1075,7 +1485,22 @@ export type UniversalDividendEdgeFieldPolicy = {
 	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type query_rootKeySpecifier = ('accountConnection' | 'blockConnection' | 'callConnection' | 'certConnection' | 'certEventConnection' | 'changeOwnerKeyConnection' | 'eventConnection' | 'extrinsicConnection' | 'getUdHistory_connection' | 'identityConnection' | 'itemsCounterConnection' | 'membershipEventConnection' | 'node' | 'smithCertConnection' | 'transferConnection' | 'udHistoryConnection' | 'udReevalConnection' | 'universalDividendConnection' | query_rootKeySpecifier)[];
+export type ValidatorKeySpecifier = ('id' | 'index' | ValidatorKeySpecifier)[];
+export type ValidatorFieldPolicy = {
+	id?: FieldPolicy<any> | FieldReadFunction<any>,
+	index?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type ValidatorConnectionKeySpecifier = ('edges' | 'pageInfo' | ValidatorConnectionKeySpecifier)[];
+export type ValidatorConnectionFieldPolicy = {
+	edges?: FieldPolicy<any> | FieldReadFunction<any>,
+	pageInfo?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type ValidatorEdgeKeySpecifier = ('cursor' | 'node' | ValidatorEdgeKeySpecifier)[];
+export type ValidatorEdgeFieldPolicy = {
+	cursor?: FieldPolicy<any> | FieldReadFunction<any>,
+	node?: FieldPolicy<any> | FieldReadFunction<any>
+};
+export type query_rootKeySpecifier = ('accountConnection' | 'blockConnection' | 'callConnection' | 'certConnection' | 'certEventConnection' | 'changeOwnerKeyConnection' | 'eventConnection' | 'extrinsicConnection' | 'getUdHistory_connection' | 'identityConnection' | 'itemsCounterConnection' | 'membershipEventConnection' | 'node' | 'populationHistoryConnection' | 'smithCertConnection' | 'smithConnection' | 'smithEventConnection' | 'transferConnection' | 'txCommentConnection' | 'udHistoryConnection' | 'udReevalConnection' | 'universalDividendConnection' | 'validatorConnection' | query_rootKeySpecifier)[];
 export type query_rootFieldPolicy = {
 	accountConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockConnection?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -1090,13 +1515,18 @@ export type query_rootFieldPolicy = {
 	itemsCounterConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	membershipEventConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>,
+	populationHistoryConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	smithCertConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithEventConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	transferConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	txCommentConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	udHistoryConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	udReevalConnection?: FieldPolicy<any> | FieldReadFunction<any>,
-	universalDividendConnection?: FieldPolicy<any> | FieldReadFunction<any>
+	universalDividendConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	validatorConnection?: FieldPolicy<any> | FieldReadFunction<any>
 };
-export type subscription_rootKeySpecifier = ('accountConnection' | 'blockConnection' | 'callConnection' | 'certConnection' | 'certEventConnection' | 'changeOwnerKeyConnection' | 'eventConnection' | 'extrinsicConnection' | 'getUdHistory_connection' | 'identityConnection' | 'itemsCounterConnection' | 'membershipEventConnection' | 'node' | 'smithCertConnection' | 'transferConnection' | 'udHistoryConnection' | 'udReevalConnection' | 'universalDividendConnection' | subscription_rootKeySpecifier)[];
+export type subscription_rootKeySpecifier = ('accountConnection' | 'blockConnection' | 'callConnection' | 'certConnection' | 'certEventConnection' | 'changeOwnerKeyConnection' | 'eventConnection' | 'extrinsicConnection' | 'getUdHistory_connection' | 'identityConnection' | 'itemsCounterConnection' | 'membershipEventConnection' | 'node' | 'populationHistoryConnection' | 'smithCertConnection' | 'smithConnection' | 'smithEventConnection' | 'transferConnection' | 'txCommentConnection' | 'udHistoryConnection' | 'udReevalConnection' | 'universalDividendConnection' | 'validatorConnection' | subscription_rootKeySpecifier)[];
 export type subscription_rootFieldPolicy = {
 	accountConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	blockConnection?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -1111,11 +1541,16 @@ export type subscription_rootFieldPolicy = {
 	itemsCounterConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	membershipEventConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	node?: FieldPolicy<any> | FieldReadFunction<any>,
+	populationHistoryConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	smithCertConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	smithEventConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	transferConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	txCommentConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	udHistoryConnection?: FieldPolicy<any> | FieldReadFunction<any>,
 	udReevalConnection?: FieldPolicy<any> | FieldReadFunction<any>,
-	universalDividendConnection?: FieldPolicy<any> | FieldReadFunction<any>
+	universalDividendConnection?: FieldPolicy<any> | FieldReadFunction<any>,
+	validatorConnection?: FieldPolicy<any> | FieldReadFunction<any>
 };
 export type StrictTypedTypePolicies = {
 	Account?: Omit<TypePolicy, "fields" | "keyFields"> & {
@@ -1130,6 +1565,10 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | AccountAggregateFieldsKeySpecifier | (() => undefined | AccountAggregateFieldsKeySpecifier),
 		fields?: AccountAggregateFieldsFieldPolicy,
 	},
+	AccountAvgFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountAvgFieldsKeySpecifier | (() => undefined | AccountAvgFieldsKeySpecifier),
+		fields?: AccountAvgFieldsFieldPolicy,
+	},
 	AccountConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | AccountConnectionKeySpecifier | (() => undefined | AccountConnectionKeySpecifier),
 		fields?: AccountConnectionFieldPolicy,
@@ -1146,6 +1585,34 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | AccountMinFieldsKeySpecifier | (() => undefined | AccountMinFieldsKeySpecifier),
 		fields?: AccountMinFieldsFieldPolicy,
 	},
+	AccountStddevFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountStddevFieldsKeySpecifier | (() => undefined | AccountStddevFieldsKeySpecifier),
+		fields?: AccountStddevFieldsFieldPolicy,
+	},
+	AccountStddevPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountStddevPopFieldsKeySpecifier | (() => undefined | AccountStddevPopFieldsKeySpecifier),
+		fields?: AccountStddevPopFieldsFieldPolicy,
+	},
+	AccountStddevSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountStddevSampFieldsKeySpecifier | (() => undefined | AccountStddevSampFieldsKeySpecifier),
+		fields?: AccountStddevSampFieldsFieldPolicy,
+	},
+	AccountSumFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountSumFieldsKeySpecifier | (() => undefined | AccountSumFieldsKeySpecifier),
+		fields?: AccountSumFieldsFieldPolicy,
+	},
+	AccountVarPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountVarPopFieldsKeySpecifier | (() => undefined | AccountVarPopFieldsKeySpecifier),
+		fields?: AccountVarPopFieldsFieldPolicy,
+	},
+	AccountVarSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountVarSampFieldsKeySpecifier | (() => undefined | AccountVarSampFieldsKeySpecifier),
+		fields?: AccountVarSampFieldsFieldPolicy,
+	},
+	AccountVarianceFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | AccountVarianceFieldsKeySpecifier | (() => undefined | AccountVarianceFieldsKeySpecifier),
+		fields?: AccountVarianceFieldsFieldPolicy,
+	},
 	Block?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | BlockKeySpecifier | (() => undefined | BlockKeySpecifier),
 		fields?: BlockFieldPolicy,
@@ -1490,6 +1957,18 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | IdentityKeySpecifier | (() => undefined | IdentityKeySpecifier),
 		fields?: IdentityFieldPolicy,
 	},
+	IdentityAggregate?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityAggregateKeySpecifier | (() => undefined | IdentityAggregateKeySpecifier),
+		fields?: IdentityAggregateFieldPolicy,
+	},
+	IdentityAggregateFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityAggregateFieldsKeySpecifier | (() => undefined | IdentityAggregateFieldsKeySpecifier),
+		fields?: IdentityAggregateFieldsFieldPolicy,
+	},
+	IdentityAvgFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityAvgFieldsKeySpecifier | (() => undefined | IdentityAvgFieldsKeySpecifier),
+		fields?: IdentityAvgFieldsFieldPolicy,
+	},
 	IdentityConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | IdentityConnectionKeySpecifier | (() => undefined | IdentityConnectionKeySpecifier),
 		fields?: IdentityConnectionFieldPolicy,
@@ -1498,6 +1977,42 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | IdentityEdgeKeySpecifier | (() => undefined | IdentityEdgeKeySpecifier),
 		fields?: IdentityEdgeFieldPolicy,
 	},
+	IdentityMaxFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityMaxFieldsKeySpecifier | (() => undefined | IdentityMaxFieldsKeySpecifier),
+		fields?: IdentityMaxFieldsFieldPolicy,
+	},
+	IdentityMinFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityMinFieldsKeySpecifier | (() => undefined | IdentityMinFieldsKeySpecifier),
+		fields?: IdentityMinFieldsFieldPolicy,
+	},
+	IdentityStddevFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityStddevFieldsKeySpecifier | (() => undefined | IdentityStddevFieldsKeySpecifier),
+		fields?: IdentityStddevFieldsFieldPolicy,
+	},
+	IdentityStddevPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityStddevPopFieldsKeySpecifier | (() => undefined | IdentityStddevPopFieldsKeySpecifier),
+		fields?: IdentityStddevPopFieldsFieldPolicy,
+	},
+	IdentityStddevSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityStddevSampFieldsKeySpecifier | (() => undefined | IdentityStddevSampFieldsKeySpecifier),
+		fields?: IdentityStddevSampFieldsFieldPolicy,
+	},
+	IdentitySumFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentitySumFieldsKeySpecifier | (() => undefined | IdentitySumFieldsKeySpecifier),
+		fields?: IdentitySumFieldsFieldPolicy,
+	},
+	IdentityVarPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityVarPopFieldsKeySpecifier | (() => undefined | IdentityVarPopFieldsKeySpecifier),
+		fields?: IdentityVarPopFieldsFieldPolicy,
+	},
+	IdentityVarSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityVarSampFieldsKeySpecifier | (() => undefined | IdentityVarSampFieldsKeySpecifier),
+		fields?: IdentityVarSampFieldsFieldPolicy,
+	},
+	IdentityVarianceFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | IdentityVarianceFieldsKeySpecifier | (() => undefined | IdentityVarianceFieldsKeySpecifier),
+		fields?: IdentityVarianceFieldsFieldPolicy,
+	},
 	ItemsCounter?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | ItemsCounterKeySpecifier | (() => undefined | ItemsCounterKeySpecifier),
 		fields?: ItemsCounterFieldPolicy,
@@ -1578,6 +2093,22 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | PageInfoKeySpecifier | (() => undefined | PageInfoKeySpecifier),
 		fields?: PageInfoFieldPolicy,
 	},
+	PopulationHistory?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | PopulationHistoryKeySpecifier | (() => undefined | PopulationHistoryKeySpecifier),
+		fields?: PopulationHistoryFieldPolicy,
+	},
+	PopulationHistoryConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | PopulationHistoryConnectionKeySpecifier | (() => undefined | PopulationHistoryConnectionKeySpecifier),
+		fields?: PopulationHistoryConnectionFieldPolicy,
+	},
+	PopulationHistoryEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | PopulationHistoryEdgeKeySpecifier | (() => undefined | PopulationHistoryEdgeKeySpecifier),
+		fields?: PopulationHistoryEdgeFieldPolicy,
+	},
+	Smith?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithKeySpecifier | (() => undefined | SmithKeySpecifier),
+		fields?: SmithFieldPolicy,
+	},
 	SmithCert?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | SmithCertKeySpecifier | (() => undefined | SmithCertKeySpecifier),
 		fields?: SmithCertFieldPolicy,
@@ -1638,6 +2169,74 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | SmithCertVarianceFieldsKeySpecifier | (() => undefined | SmithCertVarianceFieldsKeySpecifier),
 		fields?: SmithCertVarianceFieldsFieldPolicy,
 	},
+	SmithConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithConnectionKeySpecifier | (() => undefined | SmithConnectionKeySpecifier),
+		fields?: SmithConnectionFieldPolicy,
+	},
+	SmithEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEdgeKeySpecifier | (() => undefined | SmithEdgeKeySpecifier),
+		fields?: SmithEdgeFieldPolicy,
+	},
+	SmithEvent?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventKeySpecifier | (() => undefined | SmithEventKeySpecifier),
+		fields?: SmithEventFieldPolicy,
+	},
+	SmithEventAggregate?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventAggregateKeySpecifier | (() => undefined | SmithEventAggregateKeySpecifier),
+		fields?: SmithEventAggregateFieldPolicy,
+	},
+	SmithEventAggregateFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventAggregateFieldsKeySpecifier | (() => undefined | SmithEventAggregateFieldsKeySpecifier),
+		fields?: SmithEventAggregateFieldsFieldPolicy,
+	},
+	SmithEventAvgFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventAvgFieldsKeySpecifier | (() => undefined | SmithEventAvgFieldsKeySpecifier),
+		fields?: SmithEventAvgFieldsFieldPolicy,
+	},
+	SmithEventConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventConnectionKeySpecifier | (() => undefined | SmithEventConnectionKeySpecifier),
+		fields?: SmithEventConnectionFieldPolicy,
+	},
+	SmithEventEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventEdgeKeySpecifier | (() => undefined | SmithEventEdgeKeySpecifier),
+		fields?: SmithEventEdgeFieldPolicy,
+	},
+	SmithEventMaxFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventMaxFieldsKeySpecifier | (() => undefined | SmithEventMaxFieldsKeySpecifier),
+		fields?: SmithEventMaxFieldsFieldPolicy,
+	},
+	SmithEventMinFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventMinFieldsKeySpecifier | (() => undefined | SmithEventMinFieldsKeySpecifier),
+		fields?: SmithEventMinFieldsFieldPolicy,
+	},
+	SmithEventStddevFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventStddevFieldsKeySpecifier | (() => undefined | SmithEventStddevFieldsKeySpecifier),
+		fields?: SmithEventStddevFieldsFieldPolicy,
+	},
+	SmithEventStddevPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventStddevPopFieldsKeySpecifier | (() => undefined | SmithEventStddevPopFieldsKeySpecifier),
+		fields?: SmithEventStddevPopFieldsFieldPolicy,
+	},
+	SmithEventStddevSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventStddevSampFieldsKeySpecifier | (() => undefined | SmithEventStddevSampFieldsKeySpecifier),
+		fields?: SmithEventStddevSampFieldsFieldPolicy,
+	},
+	SmithEventSumFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventSumFieldsKeySpecifier | (() => undefined | SmithEventSumFieldsKeySpecifier),
+		fields?: SmithEventSumFieldsFieldPolicy,
+	},
+	SmithEventVarPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventVarPopFieldsKeySpecifier | (() => undefined | SmithEventVarPopFieldsKeySpecifier),
+		fields?: SmithEventVarPopFieldsFieldPolicy,
+	},
+	SmithEventVarSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventVarSampFieldsKeySpecifier | (() => undefined | SmithEventVarSampFieldsKeySpecifier),
+		fields?: SmithEventVarSampFieldsFieldPolicy,
+	},
+	SmithEventVarianceFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | SmithEventVarianceFieldsKeySpecifier | (() => undefined | SmithEventVarianceFieldsKeySpecifier),
+		fields?: SmithEventVarianceFieldsFieldPolicy,
+	},
 	Transfer?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | TransferKeySpecifier | (() => undefined | TransferKeySpecifier),
 		fields?: TransferFieldPolicy,
@@ -1698,6 +2297,66 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | TransferVarianceFieldsKeySpecifier | (() => undefined | TransferVarianceFieldsKeySpecifier),
 		fields?: TransferVarianceFieldsFieldPolicy,
 	},
+	TxComment?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentKeySpecifier | (() => undefined | TxCommentKeySpecifier),
+		fields?: TxCommentFieldPolicy,
+	},
+	TxCommentAggregate?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentAggregateKeySpecifier | (() => undefined | TxCommentAggregateKeySpecifier),
+		fields?: TxCommentAggregateFieldPolicy,
+	},
+	TxCommentAggregateFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentAggregateFieldsKeySpecifier | (() => undefined | TxCommentAggregateFieldsKeySpecifier),
+		fields?: TxCommentAggregateFieldsFieldPolicy,
+	},
+	TxCommentAvgFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentAvgFieldsKeySpecifier | (() => undefined | TxCommentAvgFieldsKeySpecifier),
+		fields?: TxCommentAvgFieldsFieldPolicy,
+	},
+	TxCommentConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentConnectionKeySpecifier | (() => undefined | TxCommentConnectionKeySpecifier),
+		fields?: TxCommentConnectionFieldPolicy,
+	},
+	TxCommentEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentEdgeKeySpecifier | (() => undefined | TxCommentEdgeKeySpecifier),
+		fields?: TxCommentEdgeFieldPolicy,
+	},
+	TxCommentMaxFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentMaxFieldsKeySpecifier | (() => undefined | TxCommentMaxFieldsKeySpecifier),
+		fields?: TxCommentMaxFieldsFieldPolicy,
+	},
+	TxCommentMinFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentMinFieldsKeySpecifier | (() => undefined | TxCommentMinFieldsKeySpecifier),
+		fields?: TxCommentMinFieldsFieldPolicy,
+	},
+	TxCommentStddevFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentStddevFieldsKeySpecifier | (() => undefined | TxCommentStddevFieldsKeySpecifier),
+		fields?: TxCommentStddevFieldsFieldPolicy,
+	},
+	TxCommentStddevPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentStddevPopFieldsKeySpecifier | (() => undefined | TxCommentStddevPopFieldsKeySpecifier),
+		fields?: TxCommentStddevPopFieldsFieldPolicy,
+	},
+	TxCommentStddevSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentStddevSampFieldsKeySpecifier | (() => undefined | TxCommentStddevSampFieldsKeySpecifier),
+		fields?: TxCommentStddevSampFieldsFieldPolicy,
+	},
+	TxCommentSumFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentSumFieldsKeySpecifier | (() => undefined | TxCommentSumFieldsKeySpecifier),
+		fields?: TxCommentSumFieldsFieldPolicy,
+	},
+	TxCommentVarPopFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentVarPopFieldsKeySpecifier | (() => undefined | TxCommentVarPopFieldsKeySpecifier),
+		fields?: TxCommentVarPopFieldsFieldPolicy,
+	},
+	TxCommentVarSampFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentVarSampFieldsKeySpecifier | (() => undefined | TxCommentVarSampFieldsKeySpecifier),
+		fields?: TxCommentVarSampFieldsFieldPolicy,
+	},
+	TxCommentVarianceFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | TxCommentVarianceFieldsKeySpecifier | (() => undefined | TxCommentVarianceFieldsKeySpecifier),
+		fields?: TxCommentVarianceFieldsFieldPolicy,
+	},
 	UdHistory?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | UdHistoryKeySpecifier | (() => undefined | UdHistoryKeySpecifier),
 		fields?: UdHistoryFieldPolicy,
@@ -1734,6 +2393,18 @@ export type StrictTypedTypePolicies = {
 		keyFields?: false | UniversalDividendEdgeKeySpecifier | (() => undefined | UniversalDividendEdgeKeySpecifier),
 		fields?: UniversalDividendEdgeFieldPolicy,
 	},
+	Validator?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | ValidatorKeySpecifier | (() => undefined | ValidatorKeySpecifier),
+		fields?: ValidatorFieldPolicy,
+	},
+	ValidatorConnection?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | ValidatorConnectionKeySpecifier | (() => undefined | ValidatorConnectionKeySpecifier),
+		fields?: ValidatorConnectionFieldPolicy,
+	},
+	ValidatorEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
+		keyFields?: false | ValidatorEdgeKeySpecifier | (() => undefined | ValidatorEdgeKeySpecifier),
+		fields?: ValidatorEdgeFieldPolicy,
+	},
 	query_root?: Omit<TypePolicy, "fields" | "keyFields"> & {
 		keyFields?: false | query_rootKeySpecifier | (() => undefined | query_rootKeySpecifier),
 		fields?: query_rootFieldPolicy,
diff --git a/src/app/network/indexer/indexer-schema.graphql b/src/app/network/indexer/indexer-schema.graphql
index 178ec39310b03e455d45814c4b2fe0ff245f46ee..b2f59d91ba99307bc6858a85e56d1405eb030bec 100644
--- a/src/app/network/indexer/indexer-schema.graphql
+++ b/src/app/network/indexer/indexer-schema.graphql
@@ -21,13 +21,96 @@ interface Node {
 
 "columns and relationships of \"account\""
 type Account implements Node {
+  balance: numeric!
+  "An array relationship"
+  commentsIssued(
+    "distinct select on columns"
+    distinctOn: [TxCommentSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [TxCommentOrderBy!],
+    "filter the rows returned"
+    where: TxCommentBoolExp
+  ): [TxComment!]!
+  "An aggregate relationship"
+  commentsIssuedAggregate(
+    "distinct select on columns"
+    distinctOn: [TxCommentSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [TxCommentOrderBy!],
+    "filter the rows returned"
+    where: TxCommentBoolExp
+  ): TxCommentAggregate!
+  "An array relationship connection"
+  commentsIssued_connection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [TxCommentSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [TxCommentOrderBy!],
+    "filter the rows returned"
+    where: TxCommentBoolExp
+  ): TxCommentConnection!
+  createdOn: Int!
   id: ID!
   "An object relationship"
   identity: Identity
+  isActive: Boolean!
   "An object relationship"
   linkedIdentity: Identity
   linkedIdentityId: String
   "An array relationship"
+  removedIdentities(
+    "distinct select on columns"
+    distinctOn: [IdentitySelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [IdentityOrderBy!],
+    "filter the rows returned"
+    where: IdentityBoolExp
+  ): [Identity!]!
+  "An aggregate relationship"
+  removedIdentitiesAggregate(
+    "distinct select on columns"
+    distinctOn: [IdentitySelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [IdentityOrderBy!],
+    "filter the rows returned"
+    where: IdentityBoolExp
+  ): IdentityAggregate!
+  "An array relationship connection"
+  removedIdentities_connection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [IdentitySelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [IdentityOrderBy!],
+    "filter the rows returned"
+    where: IdentityBoolExp
+  ): IdentityConnection!
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+  "An array relationship"
   transfersIssued(
     "distinct select on columns"
     distinctOn: [TransferSelectColumn!],
@@ -154,9 +237,25 @@ type AccountAggregate {
 
 "aggregate fields of \"account\""
 type AccountAggregateFields {
+  avg: AccountAvgFields
   count(columns: [AccountSelectColumn!], distinct: Boolean): Int!
   max: AccountMaxFields
   min: AccountMinFields
+  stddev: AccountStddevFields
+  stddevPop: AccountStddevPopFields
+  stddevSamp: AccountStddevSampFields
+  sum: AccountSumFields
+  varPop: AccountVarPopFields
+  varSamp: AccountVarSampFields
+  variance: AccountVarianceFields
+}
+
+"aggregate avg on columns"
+type AccountAvgFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
 }
 
 "A Relay connection object on \"account\""
@@ -172,14 +271,78 @@ type AccountEdge {
 
 "aggregate max on columns"
 type AccountMaxFields {
+  balance: numeric
+  createdOn: Int
   id: String
   linkedIdentityId: String
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
 }
 
 "aggregate min on columns"
 type AccountMinFields {
+  balance: numeric
+  createdOn: Int
   id: String
   linkedIdentityId: String
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate stddev on columns"
+type AccountStddevFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate stddevPop on columns"
+type AccountStddevPopFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate stddevSamp on columns"
+type AccountStddevSampFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate sum on columns"
+type AccountSumFields {
+  balance: numeric
+  createdOn: Int
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate varPop on columns"
+type AccountVarPopFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate varSamp on columns"
+type AccountVarSampFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
+}
+
+"aggregate variance on columns"
+type AccountVarianceFields {
+  balance: Float
+  createdOn: Float
+  "\"Get total balance including unclaimed UDs\""
+  totalBalance: numeric
 }
 
 "columns and relationships of \"block\""
@@ -1207,6 +1370,9 @@ type Identity implements Node {
   "An object relationship"
   account: Account
   accountId: String
+  "An object relationship"
+  accountRemoved: Account
+  accountRemovedId: String
   "An array relationship"
   certIssued(
     "distinct select on columns"
@@ -1290,6 +1456,7 @@ type Identity implements Node {
   createdInId: String
   createdOn: Int!
   expireOn: Int!
+  firstEligibleUd: Int
   id: ID!
   index: Int!
   isMember: Boolean!
@@ -1412,85 +1579,8 @@ type Identity implements Node {
     "filter the rows returned"
     where: ChangeOwnerKeyBoolExp
   ): ChangeOwnerKeyConnection!
-  "An array relationship"
-  smithCertIssued(
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    "limit the number of rows returned"
-    limit: Int,
-    "skip the first n rows. Use only with order_by"
-    offset: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): [SmithCert!]!
-  "An aggregate relationship"
-  smithCertIssuedAggregate(
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    "limit the number of rows returned"
-    limit: Int,
-    "skip the first n rows. Use only with order_by"
-    offset: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): SmithCertAggregate!
-  "An array relationship connection"
-  smithCertIssued_connection(
-    after: String,
-    before: String,
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    first: Int,
-    last: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): SmithCertConnection!
-  "An array relationship"
-  smithCertReceived(
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    "limit the number of rows returned"
-    limit: Int,
-    "skip the first n rows. Use only with order_by"
-    offset: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): [SmithCert!]!
-  "An aggregate relationship"
-  smithCertReceivedAggregate(
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    "limit the number of rows returned"
-    limit: Int,
-    "skip the first n rows. Use only with order_by"
-    offset: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): SmithCertAggregate!
-  "An array relationship connection"
-  smithCertReceived_connection(
-    after: String,
-    before: String,
-    "distinct select on columns"
-    distinctOn: [SmithCertSelectColumn!],
-    first: Int,
-    last: Int,
-    "sort the rows by one or more columns"
-    orderBy: [SmithCertOrderBy!],
-    "filter the rows returned"
-    where: SmithCertBoolExp
-  ): SmithCertConnection!
-  smithStatus: SmithStatusEnum
+  "An object relationship"
+  smith: Smith
   status: IdentityStatusEnum
   "\"Get UD History by Identity\""
   udHistory(
@@ -1507,6 +1597,36 @@ type Identity implements Node {
   ): [UdHistory!]
 }
 
+"aggregated selection of \"identity\""
+type IdentityAggregate {
+  aggregate: IdentityAggregateFields
+  nodes: [Identity!]!
+}
+
+"aggregate fields of \"identity\""
+type IdentityAggregateFields {
+  avg: IdentityAvgFields
+  count(columns: [IdentitySelectColumn!], distinct: Boolean): Int!
+  max: IdentityMaxFields
+  min: IdentityMinFields
+  stddev: IdentityStddevFields
+  stddevPop: IdentityStddevPopFields
+  stddevSamp: IdentityStddevSampFields
+  sum: IdentitySumFields
+  varPop: IdentityVarPopFields
+  varSamp: IdentityVarSampFields
+  variance: IdentityVarianceFields
+}
+
+"aggregate avg on columns"
+type IdentityAvgFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
 "A Relay connection object on \"identity\""
 type IdentityConnection {
   edges: [IdentityEdge!]!
@@ -1518,6 +1638,97 @@ type IdentityEdge {
   node: Identity!
 }
 
+"aggregate max on columns"
+type IdentityMaxFields {
+  accountId: String
+  accountRemovedId: String
+  createdInId: String
+  createdOn: Int
+  expireOn: Int
+  firstEligibleUd: Int
+  id: String
+  index: Int
+  lastChangeOn: Int
+  name: String
+}
+
+"aggregate min on columns"
+type IdentityMinFields {
+  accountId: String
+  accountRemovedId: String
+  createdInId: String
+  createdOn: Int
+  expireOn: Int
+  firstEligibleUd: Int
+  id: String
+  index: Int
+  lastChangeOn: Int
+  name: String
+}
+
+"aggregate stddev on columns"
+type IdentityStddevFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
+"aggregate stddevPop on columns"
+type IdentityStddevPopFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
+"aggregate stddevSamp on columns"
+type IdentityStddevSampFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
+"aggregate sum on columns"
+type IdentitySumFields {
+  createdOn: Int
+  expireOn: Int
+  firstEligibleUd: Int
+  index: Int
+  lastChangeOn: Int
+}
+
+"aggregate varPop on columns"
+type IdentityVarPopFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
+"aggregate varSamp on columns"
+type IdentityVarSampFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
+"aggregate variance on columns"
+type IdentityVarianceFields {
+  createdOn: Float
+  expireOn: Float
+  firstEligibleUd: Float
+  index: Float
+  lastChangeOn: Float
+}
+
 "columns and relationships of \"items_counter\""
 type ItemsCounter implements Node {
   id: ID!
@@ -1645,15 +1856,165 @@ type PageInfo {
   startCursor: String!
 }
 
-"columns and relationships of \"smith_cert\""
-type SmithCert implements Node {
-  createdOn: Int!
+"columns and relationships of \"population_history\""
+type PopulationHistory implements Node {
+  activeAccountCount: Int!
+  blockNumber: Int!
   id: ID!
-  "An object relationship"
-  issuer: Identity
-  issuerId: String
-  "An object relationship"
-  receiver: Identity
+  memberCount: Int!
+  smithCount: Int!
+}
+
+"A Relay connection object on \"population_history\""
+type PopulationHistoryConnection {
+  edges: [PopulationHistoryEdge!]!
+  pageInfo: PageInfo!
+}
+
+type PopulationHistoryEdge {
+  cursor: String!
+  node: PopulationHistory!
+}
+
+"columns and relationships of \"smith\""
+type Smith implements Node {
+  forged: Int!
+  id: ID!
+  "An object relationship"
+  identity: Identity
+  identityId: String
+  index: Int!
+  lastChanged: Int
+  lastForged: Int
+  "An array relationship"
+  smithCertIssued(
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): [SmithCert!]!
+  "An aggregate relationship"
+  smithCertIssuedAggregate(
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): SmithCertAggregate!
+  "An array relationship connection"
+  smithCertIssued_connection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): SmithCertConnection!
+  "An array relationship"
+  smithCertReceived(
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): [SmithCert!]!
+  "An aggregate relationship"
+  smithCertReceivedAggregate(
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): SmithCertAggregate!
+  "An array relationship connection"
+  smithCertReceived_connection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithCertSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithCertOrderBy!],
+    "filter the rows returned"
+    where: SmithCertBoolExp
+  ): SmithCertConnection!
+  "An array relationship"
+  smithHistory(
+    "distinct select on columns"
+    distinctOn: [SmithEventSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithEventOrderBy!],
+    "filter the rows returned"
+    where: SmithEventBoolExp
+  ): [SmithEvent!]!
+  "An aggregate relationship"
+  smithHistoryAggregate(
+    "distinct select on columns"
+    distinctOn: [SmithEventSelectColumn!],
+    "limit the number of rows returned"
+    limit: Int,
+    "skip the first n rows. Use only with order_by"
+    offset: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithEventOrderBy!],
+    "filter the rows returned"
+    where: SmithEventBoolExp
+  ): SmithEventAggregate!
+  "An array relationship connection"
+  smithHistory_connection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithEventSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithEventOrderBy!],
+    "filter the rows returned"
+    where: SmithEventBoolExp
+  ): SmithEventConnection!
+  smithStatus: SmithStatusEnum
+}
+
+"columns and relationships of \"smith_cert\""
+type SmithCert implements Node {
+  createdOn: Int!
+  id: ID!
+  "An object relationship"
+  issuer: Smith
+  issuerId: String
+  "An object relationship"
+  receiver: Smith
   receiverId: String
 }
 
@@ -1745,11 +2106,128 @@ type SmithCertVarianceFields {
   createdOn: Float
 }
 
+"A Relay connection object on \"smith\""
+type SmithConnection {
+  edges: [SmithEdge!]!
+  pageInfo: PageInfo!
+}
+
+type SmithEdge {
+  cursor: String!
+  node: Smith!
+}
+
+"columns and relationships of \"smith_event\""
+type SmithEvent implements Node {
+  blockNumber: Int!
+  "An object relationship"
+  event: Event
+  eventId: String
+  eventType: SmithEventTypeEnum
+  id: ID!
+  "An object relationship"
+  smith: Smith
+  smithId: String
+}
+
+"aggregated selection of \"smith_event\""
+type SmithEventAggregate {
+  aggregate: SmithEventAggregateFields
+  nodes: [SmithEvent!]!
+}
+
+"aggregate fields of \"smith_event\""
+type SmithEventAggregateFields {
+  avg: SmithEventAvgFields
+  count(columns: [SmithEventSelectColumn!], distinct: Boolean): Int!
+  max: SmithEventMaxFields
+  min: SmithEventMinFields
+  stddev: SmithEventStddevFields
+  stddevPop: SmithEventStddevPopFields
+  stddevSamp: SmithEventStddevSampFields
+  sum: SmithEventSumFields
+  varPop: SmithEventVarPopFields
+  varSamp: SmithEventVarSampFields
+  variance: SmithEventVarianceFields
+}
+
+"aggregate avg on columns"
+type SmithEventAvgFields {
+  blockNumber: Float
+}
+
+"A Relay connection object on \"smith_event\""
+type SmithEventConnection {
+  edges: [SmithEventEdge!]!
+  pageInfo: PageInfo!
+}
+
+type SmithEventEdge {
+  cursor: String!
+  node: SmithEvent!
+}
+
+"aggregate max on columns"
+type SmithEventMaxFields {
+  blockNumber: Int
+  eventId: String
+  id: String
+  smithId: String
+}
+
+"aggregate min on columns"
+type SmithEventMinFields {
+  blockNumber: Int
+  eventId: String
+  id: String
+  smithId: String
+}
+
+"aggregate stddev on columns"
+type SmithEventStddevFields {
+  blockNumber: Float
+}
+
+"aggregate stddevPop on columns"
+type SmithEventStddevPopFields {
+  blockNumber: Float
+}
+
+"aggregate stddevSamp on columns"
+type SmithEventStddevSampFields {
+  blockNumber: Float
+}
+
+"aggregate sum on columns"
+type SmithEventSumFields {
+  blockNumber: Int
+}
+
+"aggregate varPop on columns"
+type SmithEventVarPopFields {
+  blockNumber: Float
+}
+
+"aggregate varSamp on columns"
+type SmithEventVarSampFields {
+  blockNumber: Float
+}
+
+"aggregate variance on columns"
+type SmithEventVarianceFields {
+  blockNumber: Float
+}
+
 "columns and relationships of \"transfer\""
 type Transfer implements Node {
   amount: numeric!
   blockNumber: Int!
-  comment: String
+  "An object relationship"
+  comment: TxComment
+  commentId: String
+  "An object relationship"
+  event: Event
+  eventId: String
   "An object relationship"
   from: Account
   fromId: String
@@ -1802,7 +2280,8 @@ type TransferEdge {
 type TransferMaxFields {
   amount: numeric
   blockNumber: Int
-  comment: String
+  commentId: String
+  eventId: String
   fromId: String
   id: String
   timestamp: timestamptz
@@ -1813,7 +2292,8 @@ type TransferMaxFields {
 type TransferMinFields {
   amount: numeric
   blockNumber: Int
-  comment: String
+  commentId: String
+  eventId: String
   fromId: String
   id: String
   timestamp: timestamptz
@@ -1862,9 +2342,117 @@ type TransferVarianceFields {
   blockNumber: Float
 }
 
+"columns and relationships of \"tx_comment\""
+type TxComment implements Node {
+  "An object relationship"
+  author: Account
+  authorId: String
+  blockNumber: Int!
+  "An object relationship"
+  event: Event
+  eventId: String
+  hash: String!
+  id: ID!
+  remark: String!
+  remarkBytes: bytea!
+  type: CommentTypeEnum
+}
+
+"aggregated selection of \"tx_comment\""
+type TxCommentAggregate {
+  aggregate: TxCommentAggregateFields
+  nodes: [TxComment!]!
+}
+
+"aggregate fields of \"tx_comment\""
+type TxCommentAggregateFields {
+  avg: TxCommentAvgFields
+  count(columns: [TxCommentSelectColumn!], distinct: Boolean): Int!
+  max: TxCommentMaxFields
+  min: TxCommentMinFields
+  stddev: TxCommentStddevFields
+  stddevPop: TxCommentStddevPopFields
+  stddevSamp: TxCommentStddevSampFields
+  sum: TxCommentSumFields
+  varPop: TxCommentVarPopFields
+  varSamp: TxCommentVarSampFields
+  variance: TxCommentVarianceFields
+}
+
+"aggregate avg on columns"
+type TxCommentAvgFields {
+  blockNumber: Float
+}
+
+"A Relay connection object on \"tx_comment\""
+type TxCommentConnection {
+  edges: [TxCommentEdge!]!
+  pageInfo: PageInfo!
+}
+
+type TxCommentEdge {
+  cursor: String!
+  node: TxComment!
+}
+
+"aggregate max on columns"
+type TxCommentMaxFields {
+  authorId: String
+  blockNumber: Int
+  eventId: String
+  hash: String
+  id: String
+  remark: String
+}
+
+"aggregate min on columns"
+type TxCommentMinFields {
+  authorId: String
+  blockNumber: Int
+  eventId: String
+  hash: String
+  id: String
+  remark: String
+}
+
+"aggregate stddev on columns"
+type TxCommentStddevFields {
+  blockNumber: Float
+}
+
+"aggregate stddevPop on columns"
+type TxCommentStddevPopFields {
+  blockNumber: Float
+}
+
+"aggregate stddevSamp on columns"
+type TxCommentStddevSampFields {
+  blockNumber: Float
+}
+
+"aggregate sum on columns"
+type TxCommentSumFields {
+  blockNumber: Int
+}
+
+"aggregate varPop on columns"
+type TxCommentVarPopFields {
+  blockNumber: Float
+}
+
+"aggregate varSamp on columns"
+type TxCommentVarSampFields {
+  blockNumber: Float
+}
+
+"aggregate variance on columns"
+type TxCommentVarianceFields {
+  blockNumber: Float
+}
+
 "columns and relationships of \"ud_history\""
 type UdHistory implements Node {
-  amount: Int!
+  amount: numeric!
   blockNumber: Int!
   id: ID!
   "An object relationship"
@@ -1893,8 +2481,9 @@ type UdReeval implements Node {
   id: ID!
   membersCount: Int!
   monetaryMass: numeric!
-  newUdAmount: Int!
+  newUdAmount: numeric!
   timestamp: timestamptz!
+  udIndex: Int!
 }
 
 "A Relay connection object on \"ud_reeval\""
@@ -1910,12 +2499,13 @@ type UdReevalEdge {
 
 "columns and relationships of \"universal_dividend\""
 type UniversalDividend implements Node {
-  amount: Int!
+  amount: numeric!
   blockNumber: Int!
   "An object relationship"
   event: Event
   eventId: String
   id: ID!
+  index: Int!
   membersCount: Int!
   monetaryMass: numeric!
   timestamp: timestamptz!
@@ -1932,6 +2522,23 @@ type UniversalDividendEdge {
   node: UniversalDividend!
 }
 
+"columns and relationships of \"validator\""
+type Validator implements Node {
+  id: ID!
+  index: Int!
+}
+
+"A Relay connection object on \"validator\""
+type ValidatorConnection {
+  edges: [ValidatorEdge!]!
+  pageInfo: PageInfo!
+}
+
+type ValidatorEdge {
+  cursor: String!
+  node: Validator!
+}
+
 type query_root {
   "fetch data from the table: \"account\""
   accountConnection(
@@ -2095,6 +2702,19 @@ type query_root {
     "A globally unique id"
     id: ID!
   ): Node
+  "fetch data from the table: \"population_history\""
+  populationHistoryConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [PopulationHistorySelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [PopulationHistoryOrderBy!],
+    "filter the rows returned"
+    where: PopulationHistoryBoolExp
+  ): PopulationHistoryConnection!
   "fetch data from the table: \"smith_cert\""
   smithCertConnection(
     after: String,
@@ -2108,6 +2728,32 @@ type query_root {
     "filter the rows returned"
     where: SmithCertBoolExp
   ): SmithCertConnection!
+  "fetch data from the table: \"smith\""
+  smithConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithOrderBy!],
+    "filter the rows returned"
+    where: SmithBoolExp
+  ): SmithConnection!
+  "fetch data from the table: \"smith_event\""
+  smithEventConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithEventSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithEventOrderBy!],
+    "filter the rows returned"
+    where: SmithEventBoolExp
+  ): SmithEventConnection!
   "fetch data from the table: \"transfer\""
   transferConnection(
     after: String,
@@ -2121,6 +2767,19 @@ type query_root {
     "filter the rows returned"
     where: TransferBoolExp
   ): TransferConnection!
+  "fetch data from the table: \"tx_comment\""
+  txCommentConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [TxCommentSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [TxCommentOrderBy!],
+    "filter the rows returned"
+    where: TxCommentBoolExp
+  ): TxCommentConnection!
   "fetch data from the table: \"ud_history\""
   udHistoryConnection(
     after: String,
@@ -2160,6 +2819,19 @@ type query_root {
     "filter the rows returned"
     where: UniversalDividendBoolExp
   ): UniversalDividendConnection!
+  "fetch data from the table: \"validator\""
+  validatorConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [ValidatorSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [ValidatorOrderBy!],
+    "filter the rows returned"
+    where: ValidatorBoolExp
+  ): ValidatorConnection!
 }
 
 type subscription_root {
@@ -2325,6 +2997,19 @@ type subscription_root {
     "A globally unique id"
     id: ID!
   ): Node
+  "fetch data from the table: \"population_history\""
+  populationHistoryConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [PopulationHistorySelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [PopulationHistoryOrderBy!],
+    "filter the rows returned"
+    where: PopulationHistoryBoolExp
+  ): PopulationHistoryConnection!
   "fetch data from the table: \"smith_cert\""
   smithCertConnection(
     after: String,
@@ -2338,6 +3023,32 @@ type subscription_root {
     "filter the rows returned"
     where: SmithCertBoolExp
   ): SmithCertConnection!
+  "fetch data from the table: \"smith\""
+  smithConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithOrderBy!],
+    "filter the rows returned"
+    where: SmithBoolExp
+  ): SmithConnection!
+  "fetch data from the table: \"smith_event\""
+  smithEventConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [SmithEventSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [SmithEventOrderBy!],
+    "filter the rows returned"
+    where: SmithEventBoolExp
+  ): SmithEventConnection!
   "fetch data from the table: \"transfer\""
   transferConnection(
     after: String,
@@ -2351,6 +3062,19 @@ type subscription_root {
     "filter the rows returned"
     where: TransferBoolExp
   ): TransferConnection!
+  "fetch data from the table: \"tx_comment\""
+  txCommentConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [TxCommentSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [TxCommentOrderBy!],
+    "filter the rows returned"
+    where: TxCommentBoolExp
+  ): TxCommentConnection!
   "fetch data from the table: \"ud_history\""
   udHistoryConnection(
     after: String,
@@ -2390,16 +3114,47 @@ type subscription_root {
     "filter the rows returned"
     where: UniversalDividendBoolExp
   ): UniversalDividendConnection!
+  "fetch data from the table: \"validator\""
+  validatorConnection(
+    after: String,
+    before: String,
+    "distinct select on columns"
+    distinctOn: [ValidatorSelectColumn!],
+    first: Int,
+    last: Int,
+    "sort the rows by one or more columns"
+    orderBy: [ValidatorOrderBy!],
+    "filter the rows returned"
+    where: ValidatorBoolExp
+  ): ValidatorConnection!
 }
 
 "select columns of table \"account\""
 enum AccountSelectColumn {
+  "column name"
+  balance
+  "column name"
+  createdOn
   "column name"
   id
   "column name"
+  isActive
+  "column name"
   linkedIdentityId
 }
 
+"select \"accountAggregateBoolExpBool_andArgumentsColumns\" columns of table \"account\""
+enum AccountSelectColumnAccountAggregateBoolExpBool_andArgumentsColumns {
+  "column name"
+  isActive
+}
+
+"select \"accountAggregateBoolExpBool_orArgumentsColumns\" columns of table \"account\""
+enum AccountSelectColumnAccountAggregateBoolExpBool_orArgumentsColumns {
+  "column name"
+  isActive
+}
+
 "select columns of table \"block\""
 enum BlockSelectColumn {
   "column name"
@@ -2534,6 +3289,13 @@ enum ChangeOwnerKeySelectColumn {
   previousId
 }
 
+enum CommentTypeEnum {
+  ASCII
+  CID
+  RAW
+  UNICODE
+}
+
 enum CounterLevelEnum {
   GLOBAL
   ITEM
@@ -2613,12 +3375,16 @@ enum IdentitySelectColumn {
   "column name"
   accountId
   "column name"
+  accountRemovedId
+  "column name"
   createdInId
   "column name"
   createdOn
   "column name"
   expireOn
   "column name"
+  firstEligibleUd
+  "column name"
   id
   "column name"
   index
@@ -2629,11 +3395,21 @@ enum IdentitySelectColumn {
   "column name"
   name
   "column name"
-  smithStatus
-  "column name"
   status
 }
 
+"select \"identityAggregateBoolExpBool_andArgumentsColumns\" columns of table \"identity\""
+enum IdentitySelectColumnIdentityAggregateBoolExpBool_andArgumentsColumns {
+  "column name"
+  isMember
+}
+
+"select \"identityAggregateBoolExpBool_orArgumentsColumns\" columns of table \"identity\""
+enum IdentitySelectColumnIdentityAggregateBoolExpBool_orArgumentsColumns {
+  "column name"
+  isMember
+}
+
 enum IdentityStatusEnum {
   MEMBER
   NOTMEMBER
@@ -2691,6 +3467,20 @@ enum OrderBy {
   DESC_NULLS_LAST
 }
 
+"select columns of table \"population_history\""
+enum PopulationHistorySelectColumn {
+  "column name"
+  activeAccountCount
+  "column name"
+  blockNumber
+  "column name"
+  id
+  "column name"
+  memberCount
+  "column name"
+  smithCount
+}
+
 "select columns of table \"smith_cert\""
 enum SmithCertSelectColumn {
   "column name"
@@ -2703,6 +3493,45 @@ enum SmithCertSelectColumn {
   receiverId
 }
 
+"select columns of table \"smith_event\""
+enum SmithEventSelectColumn {
+  "column name"
+  blockNumber
+  "column name"
+  eventId
+  "column name"
+  eventType
+  "column name"
+  id
+  "column name"
+  smithId
+}
+
+enum SmithEventTypeEnum {
+  ACCEPTED
+  EXCLUDED
+  INVITED
+  PROMOTED
+}
+
+"select columns of table \"smith\""
+enum SmithSelectColumn {
+  "column name"
+  forged
+  "column name"
+  id
+  "column name"
+  identityId
+  "column name"
+  index
+  "column name"
+  lastChanged
+  "column name"
+  lastForged
+  "column name"
+  smithStatus
+}
+
 enum SmithStatusEnum {
   EXCLUDED
   INVITED
@@ -2717,7 +3546,9 @@ enum TransferSelectColumn {
   "column name"
   blockNumber
   "column name"
-  comment
+  commentId
+  "column name"
+  eventId
   "column name"
   fromId
   "column name"
@@ -2728,6 +3559,26 @@ enum TransferSelectColumn {
   toId
 }
 
+"select columns of table \"tx_comment\""
+enum TxCommentSelectColumn {
+  "column name"
+  authorId
+  "column name"
+  blockNumber
+  "column name"
+  eventId
+  "column name"
+  hash
+  "column name"
+  id
+  "column name"
+  remark
+  "column name"
+  remarkBytes
+  "column name"
+  type
+}
+
 "select columns of table \"ud_history\""
 enum UdHistorySelectColumn {
   "column name"
@@ -2758,6 +3609,8 @@ enum UdReevalSelectColumn {
   newUdAmount
   "column name"
   timestamp
+  "column name"
+  udIndex
 }
 
 "select columns of table \"universal_dividend\""
@@ -2771,6 +3624,8 @@ enum UniversalDividendSelectColumn {
   "column name"
   id
   "column name"
+  index
+  "column name"
   membersCount
   "column name"
   monetaryMass
@@ -2778,6 +3633,14 @@ enum UniversalDividendSelectColumn {
   timestamp
 }
 
+"select columns of table \"validator\""
+enum ValidatorSelectColumn {
+  "column name"
+  id
+  "column name"
+  index
+}
+
 scalar bytea
 
 scalar identity_scalar
@@ -2789,14 +3652,30 @@ scalar numeric
 scalar timestamptz
 
 input AccountAggregateBoolExp {
+  bool_and: accountAggregateBoolExpBool_and
+  bool_or: accountAggregateBoolExpBool_or
   count: accountAggregateBoolExpCount
 }
 
 "order by aggregate values of table \"account\""
 input AccountAggregateOrderBy {
+  avg: AccountAvgOrderBy
   count: OrderBy
   max: AccountMaxOrderBy
   min: AccountMinOrderBy
+  stddev: AccountStddevOrderBy
+  stddevPop: AccountStddevPopOrderBy
+  stddevSamp: AccountStddevSampOrderBy
+  sum: AccountSumOrderBy
+  varPop: AccountVarPopOrderBy
+  varSamp: AccountVarSampOrderBy
+  variance: AccountVarianceOrderBy
+}
+
+"order by avg() on columns of table \"account\""
+input AccountAvgOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
 }
 
 "Boolean expression to filter rows from the table \"account\". All fields are combined with a logical 'AND'."
@@ -2804,10 +3683,18 @@ input AccountBoolExp {
   _and: [AccountBoolExp!]
   _not: AccountBoolExp
   _or: [AccountBoolExp!]
+  balance: NumericComparisonExp
+  commentsIssued: TxCommentBoolExp
+  commentsIssuedAggregate: TxCommentAggregateBoolExp
+  createdOn: IntComparisonExp
   id: StringComparisonExp
   identity: IdentityBoolExp
+  isActive: BooleanComparisonExp
   linkedIdentity: IdentityBoolExp
   linkedIdentityId: StringComparisonExp
+  removedIdentities: IdentityBoolExp
+  removedIdentitiesAggregate: IdentityAggregateBoolExp
+  totalBalance: NumericComparisonExp
   transfersIssued: TransferBoolExp
   transfersIssuedAggregate: TransferAggregateBoolExp
   transfersReceived: TransferBoolExp
@@ -2818,27 +3705,79 @@ input AccountBoolExp {
 
 "order by max() on columns of table \"account\""
 input AccountMaxOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
   id: OrderBy
   linkedIdentityId: OrderBy
 }
 
 "order by min() on columns of table \"account\""
 input AccountMinOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
   id: OrderBy
   linkedIdentityId: OrderBy
 }
 
 "Ordering options when selecting data from \"account\"."
 input AccountOrderBy {
+  balance: OrderBy
+  commentsIssuedAggregate: TxCommentAggregateOrderBy
+  createdOn: OrderBy
   id: OrderBy
   identity: IdentityOrderBy
+  isActive: OrderBy
   linkedIdentity: IdentityOrderBy
   linkedIdentityId: OrderBy
+  removedIdentitiesAggregate: IdentityAggregateOrderBy
+  totalBalance: OrderBy
   transfersIssuedAggregate: TransferAggregateOrderBy
   transfersReceivedAggregate: TransferAggregateOrderBy
   wasIdentityAggregate: ChangeOwnerKeyAggregateOrderBy
 }
 
+"order by stddev() on columns of table \"account\""
+input AccountStddevOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by stddevPop() on columns of table \"account\""
+input AccountStddevPopOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by stddevSamp() on columns of table \"account\""
+input AccountStddevSampOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by sum() on columns of table \"account\""
+input AccountSumOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by varPop() on columns of table \"account\""
+input AccountVarPopOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by varSamp() on columns of table \"account\""
+input AccountVarSampOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
+"order by variance() on columns of table \"account\""
+input AccountVarianceOrderBy {
+  balance: OrderBy
+  createdOn: OrderBy
+}
+
 "Boolean expression to filter rows from the table \"block\". All fields are combined with a logical 'AND'."
 input BlockBoolExp {
   _and: [BlockBoolExp!]
@@ -3342,6 +4281,15 @@ input ChangeOwnerKeyVarianceOrderBy {
   blockNumber: OrderBy
 }
 
+"Boolean expression to compare columns of type \"CommentTypeEnum\". All fields are combined with logical 'AND'."
+input CommentTypeEnumComparisonExp {
+  _eq: CommentTypeEnum
+  _in: [CommentTypeEnum!]
+  _isNull: Boolean
+  _neq: CommentTypeEnum
+  _nin: [CommentTypeEnum!]
+}
+
 "Boolean expression to compare columns of type \"CounterLevelEnum\". All fields are combined with logical 'AND'."
 input CounterLevelEnumComparisonExp {
   _eq: CounterLevelEnum
@@ -3632,6 +4580,36 @@ input ExtrinsicVarianceOrderBy {
   version: OrderBy
 }
 
+input IdentityAggregateBoolExp {
+  bool_and: identityAggregateBoolExpBool_and
+  bool_or: identityAggregateBoolExpBool_or
+  count: identityAggregateBoolExpCount
+}
+
+"order by aggregate values of table \"identity\""
+input IdentityAggregateOrderBy {
+  avg: IdentityAvgOrderBy
+  count: OrderBy
+  max: IdentityMaxOrderBy
+  min: IdentityMinOrderBy
+  stddev: IdentityStddevOrderBy
+  stddevPop: IdentityStddevPopOrderBy
+  stddevSamp: IdentityStddevSampOrderBy
+  sum: IdentitySumOrderBy
+  varPop: IdentityVarPopOrderBy
+  varSamp: IdentityVarSampOrderBy
+  variance: IdentityVarianceOrderBy
+}
+
+"order by avg() on columns of table \"identity\""
+input IdentityAvgOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
 "Boolean expression to filter rows from the table \"identity\". All fields are combined with a logical 'AND'."
 input IdentityBoolExp {
   _and: [IdentityBoolExp!]
@@ -3639,6 +4617,8 @@ input IdentityBoolExp {
   _or: [IdentityBoolExp!]
   account: AccountBoolExp
   accountId: StringComparisonExp
+  accountRemoved: AccountBoolExp
+  accountRemovedId: StringComparisonExp
   certIssued: CertBoolExp
   certIssuedAggregate: CertAggregateBoolExp
   certReceived: CertBoolExp
@@ -3647,6 +4627,7 @@ input IdentityBoolExp {
   createdInId: StringComparisonExp
   createdOn: IntComparisonExp
   expireOn: IntComparisonExp
+  firstEligibleUd: IntComparisonExp
   id: StringComparisonExp
   index: IntComparisonExp
   isMember: BooleanComparisonExp
@@ -3658,25 +4639,52 @@ input IdentityBoolExp {
   name: StringComparisonExp
   ownerKeyChange: ChangeOwnerKeyBoolExp
   ownerKeyChangeAggregate: ChangeOwnerKeyAggregateBoolExp
-  smithCertIssued: SmithCertBoolExp
-  smithCertIssuedAggregate: SmithCertAggregateBoolExp
-  smithCertReceived: SmithCertBoolExp
-  smithCertReceivedAggregate: SmithCertAggregateBoolExp
-  smithStatus: SmithStatusEnumComparisonExp
+  smith: SmithBoolExp
   status: IdentityStatusEnumComparisonExp
   udHistory: UdHistoryBoolExp
 }
 
+"order by max() on columns of table \"identity\""
+input IdentityMaxOrderBy {
+  accountId: OrderBy
+  accountRemovedId: OrderBy
+  createdInId: OrderBy
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  id: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+  name: OrderBy
+}
+
+"order by min() on columns of table \"identity\""
+input IdentityMinOrderBy {
+  accountId: OrderBy
+  accountRemovedId: OrderBy
+  createdInId: OrderBy
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  id: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+  name: OrderBy
+}
+
 "Ordering options when selecting data from \"identity\"."
 input IdentityOrderBy {
   account: AccountOrderBy
   accountId: OrderBy
+  accountRemoved: AccountOrderBy
+  accountRemovedId: OrderBy
   certIssuedAggregate: CertAggregateOrderBy
   certReceivedAggregate: CertAggregateOrderBy
   createdIn: EventOrderBy
   createdInId: OrderBy
   createdOn: OrderBy
   expireOn: OrderBy
+  firstEligibleUd: OrderBy
   id: OrderBy
   index: OrderBy
   isMember: OrderBy
@@ -3685,9 +4693,7 @@ input IdentityOrderBy {
   membershipHistoryAggregate: MembershipEventAggregateOrderBy
   name: OrderBy
   ownerKeyChangeAggregate: ChangeOwnerKeyAggregateOrderBy
-  smithCertIssuedAggregate: SmithCertAggregateOrderBy
-  smithCertReceivedAggregate: SmithCertAggregateOrderBy
-  smithStatus: OrderBy
+  smith: SmithOrderBy
   status: OrderBy
   udHistoryAggregate: UdHistoryAggregateOrderBy
 }
@@ -3701,6 +4707,69 @@ input IdentityStatusEnumComparisonExp {
   _nin: [IdentityStatusEnum!]
 }
 
+"order by stddev() on columns of table \"identity\""
+input IdentityStddevOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by stddevPop() on columns of table \"identity\""
+input IdentityStddevPopOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by stddevSamp() on columns of table \"identity\""
+input IdentityStddevSampOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by sum() on columns of table \"identity\""
+input IdentitySumOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by varPop() on columns of table \"identity\""
+input IdentityVarPopOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by varSamp() on columns of table \"identity\""
+input IdentityVarSampOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
+"order by variance() on columns of table \"identity\""
+input IdentityVarianceOrderBy {
+  createdOn: OrderBy
+  expireOn: OrderBy
+  firstEligibleUd: OrderBy
+  index: OrderBy
+  lastChangeOn: OrderBy
+}
+
 "Boolean expression to compare columns of type \"Int\". All fields are combined with logical 'AND'."
 input IntArrayComparisonExp {
   "is the array contained in the given array value"
@@ -3900,6 +4969,48 @@ input NumericComparisonExp {
   _nin: [numeric!]
 }
 
+"Boolean expression to filter rows from the table \"population_history\". All fields are combined with a logical 'AND'."
+input PopulationHistoryBoolExp {
+  _and: [PopulationHistoryBoolExp!]
+  _not: PopulationHistoryBoolExp
+  _or: [PopulationHistoryBoolExp!]
+  activeAccountCount: IntComparisonExp
+  blockNumber: IntComparisonExp
+  id: StringComparisonExp
+  memberCount: IntComparisonExp
+  smithCount: IntComparisonExp
+}
+
+"Ordering options when selecting data from \"population_history\"."
+input PopulationHistoryOrderBy {
+  activeAccountCount: OrderBy
+  blockNumber: OrderBy
+  id: OrderBy
+  memberCount: OrderBy
+  smithCount: OrderBy
+}
+
+"Boolean expression to filter rows from the table \"smith\". All fields are combined with a logical 'AND'."
+input SmithBoolExp {
+  _and: [SmithBoolExp!]
+  _not: SmithBoolExp
+  _or: [SmithBoolExp!]
+  forged: IntComparisonExp
+  id: StringComparisonExp
+  identity: IdentityBoolExp
+  identityId: StringComparisonExp
+  index: IntComparisonExp
+  lastChanged: IntComparisonExp
+  lastForged: IntComparisonExp
+  smithCertIssued: SmithCertBoolExp
+  smithCertIssuedAggregate: SmithCertAggregateBoolExp
+  smithCertReceived: SmithCertBoolExp
+  smithCertReceivedAggregate: SmithCertAggregateBoolExp
+  smithHistory: SmithEventBoolExp
+  smithHistoryAggregate: SmithEventAggregateBoolExp
+  smithStatus: SmithStatusEnumComparisonExp
+}
+
 input SmithCertAggregateBoolExp {
   count: smithCertAggregateBoolExpCount
 }
@@ -3931,9 +5042,9 @@ input SmithCertBoolExp {
   _or: [SmithCertBoolExp!]
   createdOn: IntComparisonExp
   id: StringComparisonExp
-  issuer: IdentityBoolExp
+  issuer: SmithBoolExp
   issuerId: StringComparisonExp
-  receiver: IdentityBoolExp
+  receiver: SmithBoolExp
   receiverId: StringComparisonExp
 }
 
@@ -3957,9 +5068,9 @@ input SmithCertMinOrderBy {
 input SmithCertOrderBy {
   createdOn: OrderBy
   id: OrderBy
-  issuer: IdentityOrderBy
+  issuer: SmithOrderBy
   issuerId: OrderBy
-  receiver: IdentityOrderBy
+  receiver: SmithOrderBy
   receiverId: OrderBy
 }
 
@@ -3998,6 +5109,130 @@ input SmithCertVarianceOrderBy {
   createdOn: OrderBy
 }
 
+input SmithEventAggregateBoolExp {
+  count: smithEventAggregateBoolExpCount
+}
+
+"order by aggregate values of table \"smith_event\""
+input SmithEventAggregateOrderBy {
+  avg: SmithEventAvgOrderBy
+  count: OrderBy
+  max: SmithEventMaxOrderBy
+  min: SmithEventMinOrderBy
+  stddev: SmithEventStddevOrderBy
+  stddevPop: SmithEventStddevPopOrderBy
+  stddevSamp: SmithEventStddevSampOrderBy
+  sum: SmithEventSumOrderBy
+  varPop: SmithEventVarPopOrderBy
+  varSamp: SmithEventVarSampOrderBy
+  variance: SmithEventVarianceOrderBy
+}
+
+"order by avg() on columns of table \"smith_event\""
+input SmithEventAvgOrderBy {
+  blockNumber: OrderBy
+}
+
+"Boolean expression to filter rows from the table \"smith_event\". All fields are combined with a logical 'AND'."
+input SmithEventBoolExp {
+  _and: [SmithEventBoolExp!]
+  _not: SmithEventBoolExp
+  _or: [SmithEventBoolExp!]
+  blockNumber: IntComparisonExp
+  event: EventBoolExp
+  eventId: StringComparisonExp
+  eventType: SmithEventTypeEnumComparisonExp
+  id: StringComparisonExp
+  smith: SmithBoolExp
+  smithId: StringComparisonExp
+}
+
+"order by max() on columns of table \"smith_event\""
+input SmithEventMaxOrderBy {
+  blockNumber: OrderBy
+  eventId: OrderBy
+  id: OrderBy
+  smithId: OrderBy
+}
+
+"order by min() on columns of table \"smith_event\""
+input SmithEventMinOrderBy {
+  blockNumber: OrderBy
+  eventId: OrderBy
+  id: OrderBy
+  smithId: OrderBy
+}
+
+"Ordering options when selecting data from \"smith_event\"."
+input SmithEventOrderBy {
+  blockNumber: OrderBy
+  event: EventOrderBy
+  eventId: OrderBy
+  eventType: OrderBy
+  id: OrderBy
+  smith: SmithOrderBy
+  smithId: OrderBy
+}
+
+"order by stddev() on columns of table \"smith_event\""
+input SmithEventStddevOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by stddevPop() on columns of table \"smith_event\""
+input SmithEventStddevPopOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by stddevSamp() on columns of table \"smith_event\""
+input SmithEventStddevSampOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by sum() on columns of table \"smith_event\""
+input SmithEventSumOrderBy {
+  blockNumber: OrderBy
+}
+
+"Boolean expression to compare columns of type \"SmithEventTypeEnum\". All fields are combined with logical 'AND'."
+input SmithEventTypeEnumComparisonExp {
+  _eq: SmithEventTypeEnum
+  _in: [SmithEventTypeEnum!]
+  _isNull: Boolean
+  _neq: SmithEventTypeEnum
+  _nin: [SmithEventTypeEnum!]
+}
+
+"order by varPop() on columns of table \"smith_event\""
+input SmithEventVarPopOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by varSamp() on columns of table \"smith_event\""
+input SmithEventVarSampOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by variance() on columns of table \"smith_event\""
+input SmithEventVarianceOrderBy {
+  blockNumber: OrderBy
+}
+
+"Ordering options when selecting data from \"smith\"."
+input SmithOrderBy {
+  forged: OrderBy
+  id: OrderBy
+  identity: IdentityOrderBy
+  identityId: OrderBy
+  index: OrderBy
+  lastChanged: OrderBy
+  lastForged: OrderBy
+  smithCertIssuedAggregate: SmithCertAggregateOrderBy
+  smithCertReceivedAggregate: SmithCertAggregateOrderBy
+  smithHistoryAggregate: SmithEventAggregateOrderBy
+  smithStatus: OrderBy
+}
+
 "Boolean expression to compare columns of type \"SmithStatusEnum\". All fields are combined with logical 'AND'."
 input SmithStatusEnumComparisonExp {
   _eq: SmithStatusEnum
@@ -4102,7 +5337,10 @@ input TransferBoolExp {
   _or: [TransferBoolExp!]
   amount: NumericComparisonExp
   blockNumber: IntComparisonExp
-  comment: StringComparisonExp
+  comment: TxCommentBoolExp
+  commentId: StringComparisonExp
+  event: EventBoolExp
+  eventId: StringComparisonExp
   from: AccountBoolExp
   fromId: StringComparisonExp
   id: StringComparisonExp
@@ -4115,7 +5353,8 @@ input TransferBoolExp {
 input TransferMaxOrderBy {
   amount: OrderBy
   blockNumber: OrderBy
-  comment: OrderBy
+  commentId: OrderBy
+  eventId: OrderBy
   fromId: OrderBy
   id: OrderBy
   timestamp: OrderBy
@@ -4126,7 +5365,8 @@ input TransferMaxOrderBy {
 input TransferMinOrderBy {
   amount: OrderBy
   blockNumber: OrderBy
-  comment: OrderBy
+  commentId: OrderBy
+  eventId: OrderBy
   fromId: OrderBy
   id: OrderBy
   timestamp: OrderBy
@@ -4137,7 +5377,10 @@ input TransferMinOrderBy {
 input TransferOrderBy {
   amount: OrderBy
   blockNumber: OrderBy
-  comment: OrderBy
+  comment: TxCommentOrderBy
+  commentId: OrderBy
+  event: EventOrderBy
+  eventId: OrderBy
   from: AccountOrderBy
   fromId: OrderBy
   id: OrderBy
@@ -4188,6 +5431,116 @@ input TransferVarianceOrderBy {
   blockNumber: OrderBy
 }
 
+input TxCommentAggregateBoolExp {
+  count: txCommentAggregateBoolExpCount
+}
+
+"order by aggregate values of table \"tx_comment\""
+input TxCommentAggregateOrderBy {
+  avg: TxCommentAvgOrderBy
+  count: OrderBy
+  max: TxCommentMaxOrderBy
+  min: TxCommentMinOrderBy
+  stddev: TxCommentStddevOrderBy
+  stddevPop: TxCommentStddevPopOrderBy
+  stddevSamp: TxCommentStddevSampOrderBy
+  sum: TxCommentSumOrderBy
+  varPop: TxCommentVarPopOrderBy
+  varSamp: TxCommentVarSampOrderBy
+  variance: TxCommentVarianceOrderBy
+}
+
+"order by avg() on columns of table \"tx_comment\""
+input TxCommentAvgOrderBy {
+  blockNumber: OrderBy
+}
+
+"Boolean expression to filter rows from the table \"tx_comment\". All fields are combined with a logical 'AND'."
+input TxCommentBoolExp {
+  _and: [TxCommentBoolExp!]
+  _not: TxCommentBoolExp
+  _or: [TxCommentBoolExp!]
+  author: AccountBoolExp
+  authorId: StringComparisonExp
+  blockNumber: IntComparisonExp
+  event: EventBoolExp
+  eventId: StringComparisonExp
+  hash: StringComparisonExp
+  id: StringComparisonExp
+  remark: StringComparisonExp
+  remarkBytes: ByteaComparisonExp
+  type: CommentTypeEnumComparisonExp
+}
+
+"order by max() on columns of table \"tx_comment\""
+input TxCommentMaxOrderBy {
+  authorId: OrderBy
+  blockNumber: OrderBy
+  eventId: OrderBy
+  hash: OrderBy
+  id: OrderBy
+  remark: OrderBy
+}
+
+"order by min() on columns of table \"tx_comment\""
+input TxCommentMinOrderBy {
+  authorId: OrderBy
+  blockNumber: OrderBy
+  eventId: OrderBy
+  hash: OrderBy
+  id: OrderBy
+  remark: OrderBy
+}
+
+"Ordering options when selecting data from \"tx_comment\"."
+input TxCommentOrderBy {
+  author: AccountOrderBy
+  authorId: OrderBy
+  blockNumber: OrderBy
+  event: EventOrderBy
+  eventId: OrderBy
+  hash: OrderBy
+  id: OrderBy
+  remark: OrderBy
+  remarkBytes: OrderBy
+  type: OrderBy
+}
+
+"order by stddev() on columns of table \"tx_comment\""
+input TxCommentStddevOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by stddevPop() on columns of table \"tx_comment\""
+input TxCommentStddevPopOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by stddevSamp() on columns of table \"tx_comment\""
+input TxCommentStddevSampOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by sum() on columns of table \"tx_comment\""
+input TxCommentSumOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by varPop() on columns of table \"tx_comment\""
+input TxCommentVarPopOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by varSamp() on columns of table \"tx_comment\""
+input TxCommentVarSampOrderBy {
+  blockNumber: OrderBy
+}
+
+"order by variance() on columns of table \"tx_comment\""
+input TxCommentVarianceOrderBy {
+  blockNumber: OrderBy
+}
+
 "order by aggregate values of table \"ud_history\""
 input UdHistoryAggregateOrderBy {
   avg: UdHistoryAvgOrderBy
@@ -4214,7 +5567,7 @@ input UdHistoryBoolExp {
   _and: [UdHistoryBoolExp!]
   _not: UdHistoryBoolExp
   _or: [UdHistoryBoolExp!]
-  amount: IntComparisonExp
+  amount: NumericComparisonExp
   blockNumber: IntComparisonExp
   id: StringComparisonExp
   identity: IdentityBoolExp
@@ -4303,8 +5656,9 @@ input UdReevalBoolExp {
   id: StringComparisonExp
   membersCount: IntComparisonExp
   monetaryMass: NumericComparisonExp
-  newUdAmount: IntComparisonExp
+  newUdAmount: NumericComparisonExp
   timestamp: TimestamptzComparisonExp
+  udIndex: IntComparisonExp
 }
 
 "Ordering options when selecting data from \"ud_reeval\"."
@@ -4317,6 +5671,7 @@ input UdReevalOrderBy {
   monetaryMass: OrderBy
   newUdAmount: OrderBy
   timestamp: OrderBy
+  udIndex: OrderBy
 }
 
 "Boolean expression to filter rows from the table \"universal_dividend\". All fields are combined with a logical 'AND'."
@@ -4324,11 +5679,12 @@ input UniversalDividendBoolExp {
   _and: [UniversalDividendBoolExp!]
   _not: UniversalDividendBoolExp
   _or: [UniversalDividendBoolExp!]
-  amount: IntComparisonExp
+  amount: NumericComparisonExp
   blockNumber: IntComparisonExp
   event: EventBoolExp
   eventId: StringComparisonExp
   id: StringComparisonExp
+  index: IntComparisonExp
   membersCount: IntComparisonExp
   monetaryMass: NumericComparisonExp
   timestamp: TimestamptzComparisonExp
@@ -4341,11 +5697,41 @@ input UniversalDividendOrderBy {
   event: EventOrderBy
   eventId: OrderBy
   id: OrderBy
+  index: OrderBy
   membersCount: OrderBy
   monetaryMass: OrderBy
   timestamp: OrderBy
 }
 
+"Boolean expression to filter rows from the table \"validator\". All fields are combined with a logical 'AND'."
+input ValidatorBoolExp {
+  _and: [ValidatorBoolExp!]
+  _not: ValidatorBoolExp
+  _or: [ValidatorBoolExp!]
+  id: StringComparisonExp
+  index: IntComparisonExp
+}
+
+"Ordering options when selecting data from \"validator\"."
+input ValidatorOrderBy {
+  id: OrderBy
+  index: OrderBy
+}
+
+input accountAggregateBoolExpBool_and {
+  arguments: AccountSelectColumnAccountAggregateBoolExpBool_andArgumentsColumns!
+  distinct: Boolean
+  filter: AccountBoolExp
+  predicate: BooleanComparisonExp!
+}
+
+input accountAggregateBoolExpBool_or {
+  arguments: AccountSelectColumnAccountAggregateBoolExpBool_orArgumentsColumns!
+  distinct: Boolean
+  filter: AccountBoolExp
+  predicate: BooleanComparisonExp!
+}
+
 input accountAggregateBoolExpCount {
   arguments: [AccountSelectColumn!]
   distinct: Boolean
@@ -4441,6 +5827,27 @@ input getUdHistoryArgs {
   identity_row: identity_scalar
 }
 
+input identityAggregateBoolExpBool_and {
+  arguments: IdentitySelectColumnIdentityAggregateBoolExpBool_andArgumentsColumns!
+  distinct: Boolean
+  filter: IdentityBoolExp
+  predicate: BooleanComparisonExp!
+}
+
+input identityAggregateBoolExpBool_or {
+  arguments: IdentitySelectColumnIdentityAggregateBoolExpBool_orArgumentsColumns!
+  distinct: Boolean
+  filter: IdentityBoolExp
+  predicate: BooleanComparisonExp!
+}
+
+input identityAggregateBoolExpCount {
+  arguments: [IdentitySelectColumn!]
+  distinct: Boolean
+  filter: IdentityBoolExp
+  predicate: IntComparisonExp!
+}
+
 input membershipEventAggregateBoolExpCount {
   arguments: [MembershipEventSelectColumn!]
   distinct: Boolean
@@ -4455,9 +5862,23 @@ input smithCertAggregateBoolExpCount {
   predicate: IntComparisonExp!
 }
 
+input smithEventAggregateBoolExpCount {
+  arguments: [SmithEventSelectColumn!]
+  distinct: Boolean
+  filter: SmithEventBoolExp
+  predicate: IntComparisonExp!
+}
+
 input transferAggregateBoolExpCount {
   arguments: [TransferSelectColumn!]
   distinct: Boolean
   filter: TransferBoolExp
   predicate: IntComparisonExp!
 }
+
+input txCommentAggregateBoolExpCount {
+  arguments: [TxCommentSelectColumn!]
+  distinct: Boolean
+  filter: TxCommentBoolExp
+  predicate: IntComparisonExp!
+}
diff --git a/src/app/network/indexer/indexer-types.generated.ts b/src/app/network/indexer/indexer-types.generated.ts
index d6dae77458386c2e9a4d8769294ff44b7cea5673..7b48abfda0326c2b35a21bffd7853a437623d6e7 100644
--- a/src/app/network/indexer/indexer-types.generated.ts
+++ b/src/app/network/indexer/indexer-types.generated.ts
@@ -28,13 +28,30 @@ export type Scalars = {
 /** columns and relationships of "account" */
 export type Account = Node & {
   __typename?: 'Account';
+  balance: Scalars['numeric']['output'];
+  /** An array relationship */
+  commentsIssued: Array<TxComment>;
+  /** An aggregate relationship */
+  commentsIssuedAggregate: TxCommentAggregate;
+  /** An array relationship connection */
+  commentsIssued_connection: TxCommentConnection;
+  createdOn: Scalars['Int']['output'];
   id: Scalars['ID']['output'];
   /** An object relationship */
   identity?: Maybe<Identity>;
+  isActive: Scalars['Boolean']['output'];
   /** An object relationship */
   linkedIdentity?: Maybe<Identity>;
   linkedIdentityId?: Maybe<Scalars['String']['output']>;
   /** An array relationship */
+  removedIdentities: Array<Identity>;
+  /** An aggregate relationship */
+  removedIdentitiesAggregate: IdentityAggregate;
+  /** An array relationship connection */
+  removedIdentities_connection: IdentityConnection;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+  /** An array relationship */
   transfersIssued: Array<Transfer>;
   /** An aggregate relationship */
   transfersIssuedAggregate: TransferAggregate;
@@ -55,6 +72,70 @@ export type Account = Node & {
 };
 
 
+/** columns and relationships of "account" */
+export type AccountCommentsIssuedArgs = {
+  distinctOn?: InputMaybe<Array<TxCommentSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<TxCommentOrderBy>>;
+  where?: InputMaybe<TxCommentBoolExp>;
+};
+
+
+/** columns and relationships of "account" */
+export type AccountCommentsIssuedAggregateArgs = {
+  distinctOn?: InputMaybe<Array<TxCommentSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<TxCommentOrderBy>>;
+  where?: InputMaybe<TxCommentBoolExp>;
+};
+
+
+/** columns and relationships of "account" */
+export type AccountCommentsIssued_ConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<TxCommentSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<TxCommentOrderBy>>;
+  where?: InputMaybe<TxCommentBoolExp>;
+};
+
+
+/** columns and relationships of "account" */
+export type AccountRemovedIdentitiesArgs = {
+  distinctOn?: InputMaybe<Array<IdentitySelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<IdentityOrderBy>>;
+  where?: InputMaybe<IdentityBoolExp>;
+};
+
+
+/** columns and relationships of "account" */
+export type AccountRemovedIdentitiesAggregateArgs = {
+  distinctOn?: InputMaybe<Array<IdentitySelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<IdentityOrderBy>>;
+  where?: InputMaybe<IdentityBoolExp>;
+};
+
+
+/** columns and relationships of "account" */
+export type AccountRemovedIdentities_ConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<IdentitySelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<IdentityOrderBy>>;
+  where?: InputMaybe<IdentityBoolExp>;
+};
+
+
 /** columns and relationships of "account" */
 export type AccountTransfersIssuedArgs = {
   distinctOn?: InputMaybe<Array<TransferSelectColumn>>;
@@ -158,15 +239,25 @@ export type AccountAggregate = {
 };
 
 export type AccountAggregateBoolExp = {
+  bool_and?: InputMaybe<AccountAggregateBoolExpBool_And>;
+  bool_or?: InputMaybe<AccountAggregateBoolExpBool_Or>;
   count?: InputMaybe<AccountAggregateBoolExpCount>;
 };
 
 /** aggregate fields of "account" */
 export type AccountAggregateFields = {
   __typename?: 'AccountAggregateFields';
+  avg?: Maybe<AccountAvgFields>;
   count: Scalars['Int']['output'];
   max?: Maybe<AccountMaxFields>;
   min?: Maybe<AccountMinFields>;
+  stddev?: Maybe<AccountStddevFields>;
+  stddevPop?: Maybe<AccountStddevPopFields>;
+  stddevSamp?: Maybe<AccountStddevSampFields>;
+  sum?: Maybe<AccountSumFields>;
+  varPop?: Maybe<AccountVarPopFields>;
+  varSamp?: Maybe<AccountVarSampFields>;
+  variance?: Maybe<AccountVarianceFields>;
 };
 
 
@@ -178,9 +269,32 @@ export type AccountAggregateFieldsCountArgs = {
 
 /** order by aggregate values of table "account" */
 export type AccountAggregateOrderBy = {
+  avg?: InputMaybe<AccountAvgOrderBy>;
   count?: InputMaybe<OrderBy>;
   max?: InputMaybe<AccountMaxOrderBy>;
   min?: InputMaybe<AccountMinOrderBy>;
+  stddev?: InputMaybe<AccountStddevOrderBy>;
+  stddevPop?: InputMaybe<AccountStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<AccountStddevSampOrderBy>;
+  sum?: InputMaybe<AccountSumOrderBy>;
+  varPop?: InputMaybe<AccountVarPopOrderBy>;
+  varSamp?: InputMaybe<AccountVarSampOrderBy>;
+  variance?: InputMaybe<AccountVarianceOrderBy>;
+};
+
+/** aggregate avg on columns */
+export type AccountAvgFields = {
+  __typename?: 'AccountAvgFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by avg() on columns of table "account" */
+export type AccountAvgOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
 };
 
 /** Boolean expression to filter rows from the table "account". All fields are combined with a logical 'AND'. */
@@ -188,10 +302,18 @@ export type AccountBoolExp = {
   _and?: InputMaybe<Array<AccountBoolExp>>;
   _not?: InputMaybe<AccountBoolExp>;
   _or?: InputMaybe<Array<AccountBoolExp>>;
+  balance?: InputMaybe<NumericComparisonExp>;
+  commentsIssued?: InputMaybe<TxCommentBoolExp>;
+  commentsIssuedAggregate?: InputMaybe<TxCommentAggregateBoolExp>;
+  createdOn?: InputMaybe<IntComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
   identity?: InputMaybe<IdentityBoolExp>;
+  isActive?: InputMaybe<BooleanComparisonExp>;
   linkedIdentity?: InputMaybe<IdentityBoolExp>;
   linkedIdentityId?: InputMaybe<StringComparisonExp>;
+  removedIdentities?: InputMaybe<IdentityBoolExp>;
+  removedIdentitiesAggregate?: InputMaybe<IdentityAggregateBoolExp>;
+  totalBalance?: InputMaybe<NumericComparisonExp>;
   transfersIssued?: InputMaybe<TransferBoolExp>;
   transfersIssuedAggregate?: InputMaybe<TransferAggregateBoolExp>;
   transfersReceived?: InputMaybe<TransferBoolExp>;
@@ -216,12 +338,18 @@ export type AccountEdge = {
 /** aggregate max on columns */
 export type AccountMaxFields = {
   __typename?: 'AccountMaxFields';
+  balance?: Maybe<Scalars['numeric']['output']>;
+  createdOn?: Maybe<Scalars['Int']['output']>;
   id?: Maybe<Scalars['String']['output']>;
   linkedIdentityId?: Maybe<Scalars['String']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
 };
 
 /** order by max() on columns of table "account" */
 export type AccountMaxOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
   linkedIdentityId?: InputMaybe<OrderBy>;
 };
@@ -229,22 +357,34 @@ export type AccountMaxOrderBy = {
 /** aggregate min on columns */
 export type AccountMinFields = {
   __typename?: 'AccountMinFields';
+  balance?: Maybe<Scalars['numeric']['output']>;
+  createdOn?: Maybe<Scalars['Int']['output']>;
   id?: Maybe<Scalars['String']['output']>;
   linkedIdentityId?: Maybe<Scalars['String']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
 };
 
 /** order by min() on columns of table "account" */
 export type AccountMinOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
   linkedIdentityId?: InputMaybe<OrderBy>;
 };
 
 /** Ordering options when selecting data from "account". */
 export type AccountOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  commentsIssuedAggregate?: InputMaybe<TxCommentAggregateOrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
   identity?: InputMaybe<IdentityOrderBy>;
+  isActive?: InputMaybe<OrderBy>;
   linkedIdentity?: InputMaybe<IdentityOrderBy>;
   linkedIdentityId?: InputMaybe<OrderBy>;
+  removedIdentitiesAggregate?: InputMaybe<IdentityAggregateOrderBy>;
+  totalBalance?: InputMaybe<OrderBy>;
   transfersIssuedAggregate?: InputMaybe<TransferAggregateOrderBy>;
   transfersReceivedAggregate?: InputMaybe<TransferAggregateOrderBy>;
   wasIdentityAggregate?: InputMaybe<ChangeOwnerKeyAggregateOrderBy>;
@@ -252,12 +392,135 @@ export type AccountOrderBy = {
 
 /** select columns of table "account" */
 export enum AccountSelectColumn {
+  /** column name */
+  Balance = 'balance',
+  /** column name */
+  CreatedOn = 'createdOn',
   /** column name */
   Id = 'id',
   /** column name */
+  IsActive = 'isActive',
+  /** column name */
   LinkedIdentityId = 'linkedIdentityId'
 }
 
+/** select "accountAggregateBoolExpBool_andArgumentsColumns" columns of table "account" */
+export enum AccountSelectColumnAccountAggregateBoolExpBool_AndArgumentsColumns {
+  /** column name */
+  IsActive = 'isActive'
+}
+
+/** select "accountAggregateBoolExpBool_orArgumentsColumns" columns of table "account" */
+export enum AccountSelectColumnAccountAggregateBoolExpBool_OrArgumentsColumns {
+  /** column name */
+  IsActive = 'isActive'
+}
+
+/** aggregate stddev on columns */
+export type AccountStddevFields = {
+  __typename?: 'AccountStddevFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by stddev() on columns of table "account" */
+export type AccountStddevOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevPop on columns */
+export type AccountStddevPopFields = {
+  __typename?: 'AccountStddevPopFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by stddevPop() on columns of table "account" */
+export type AccountStddevPopOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevSamp on columns */
+export type AccountStddevSampFields = {
+  __typename?: 'AccountStddevSampFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by stddevSamp() on columns of table "account" */
+export type AccountStddevSampOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate sum on columns */
+export type AccountSumFields = {
+  __typename?: 'AccountSumFields';
+  balance?: Maybe<Scalars['numeric']['output']>;
+  createdOn?: Maybe<Scalars['Int']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by sum() on columns of table "account" */
+export type AccountSumOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varPop on columns */
+export type AccountVarPopFields = {
+  __typename?: 'AccountVarPopFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by varPop() on columns of table "account" */
+export type AccountVarPopOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varSamp on columns */
+export type AccountVarSampFields = {
+  __typename?: 'AccountVarSampFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by varSamp() on columns of table "account" */
+export type AccountVarSampOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate variance on columns */
+export type AccountVarianceFields = {
+  __typename?: 'AccountVarianceFields';
+  balance?: Maybe<Scalars['Float']['output']>;
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  /** "Get total balance including unclaimed UDs" */
+  totalBalance?: Maybe<Scalars['numeric']['output']>;
+};
+
+/** order by variance() on columns of table "account" */
+export type AccountVarianceOrderBy = {
+  balance?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+};
+
 /** columns and relationships of "block" */
 export type Block = Node & {
   __typename?: 'Block';
@@ -1656,6 +1919,22 @@ export type ChangeOwnerKeyVarianceOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
+export enum CommentTypeEnum {
+  Ascii = 'ASCII',
+  Cid = 'CID',
+  Raw = 'RAW',
+  Unicode = 'UNICODE'
+}
+
+/** Boolean expression to compare columns of type "CommentTypeEnum". All fields are combined with logical 'AND'. */
+export type CommentTypeEnumComparisonExp = {
+  _eq?: InputMaybe<CommentTypeEnum>;
+  _in?: InputMaybe<Array<CommentTypeEnum>>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  _neq?: InputMaybe<CommentTypeEnum>;
+  _nin?: InputMaybe<Array<CommentTypeEnum>>;
+};
+
 export enum CounterLevelEnum {
   Global = 'GLOBAL',
   Item = 'ITEM',
@@ -2419,6 +2698,9 @@ export type Identity = Node & {
   /** An object relationship */
   account?: Maybe<Account>;
   accountId?: Maybe<Scalars['String']['output']>;
+  /** An object relationship */
+  accountRemoved?: Maybe<Account>;
+  accountRemovedId?: Maybe<Scalars['String']['output']>;
   /** An array relationship */
   certIssued: Array<Cert>;
   /** An aggregate relationship */
@@ -2436,6 +2718,7 @@ export type Identity = Node & {
   createdInId?: Maybe<Scalars['String']['output']>;
   createdOn: Scalars['Int']['output'];
   expireOn: Scalars['Int']['output'];
+  firstEligibleUd?: Maybe<Scalars['Int']['output']>;
   id: Scalars['ID']['output'];
   index: Scalars['Int']['output'];
   isMember: Scalars['Boolean']['output'];
@@ -2459,19 +2742,8 @@ export type Identity = Node & {
   ownerKeyChangeAggregate: ChangeOwnerKeyAggregate;
   /** An array relationship connection */
   ownerKeyChange_connection: ChangeOwnerKeyConnection;
-  /** An array relationship */
-  smithCertIssued: Array<SmithCert>;
-  /** An aggregate relationship */
-  smithCertIssuedAggregate: SmithCertAggregate;
-  /** An array relationship connection */
-  smithCertIssued_connection: SmithCertConnection;
-  /** An array relationship */
-  smithCertReceived: Array<SmithCert>;
-  /** An aggregate relationship */
-  smithCertReceivedAggregate: SmithCertAggregate;
-  /** An array relationship connection */
-  smithCertReceived_connection: SmithCertConnection;
-  smithStatus?: Maybe<SmithStatusEnum>;
+  /** An object relationship */
+  smith?: Maybe<Smith>;
   status?: Maybe<IdentityStatusEnum>;
   /** "Get UD History by Identity" */
   udHistory?: Maybe<Array<UdHistory>>;
@@ -2639,76 +2911,82 @@ export type IdentityOwnerKeyChange_ConnectionArgs = {
 
 
 /** columns and relationships of "identity" */
-export type IdentitySmithCertIssuedArgs = {
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+export type IdentityUdHistoryArgs = {
+  distinctOn?: InputMaybe<Array<UdHistorySelectColumn>>;
   limit?: InputMaybe<Scalars['Int']['input']>;
   offset?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+  orderBy?: InputMaybe<Array<UdHistoryOrderBy>>;
+  where?: InputMaybe<UdHistoryBoolExp>;
 };
 
-
-/** columns and relationships of "identity" */
-export type IdentitySmithCertIssuedAggregateArgs = {
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
-  limit?: InputMaybe<Scalars['Int']['input']>;
-  offset?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+/** aggregated selection of "identity" */
+export type IdentityAggregate = {
+  __typename?: 'IdentityAggregate';
+  aggregate?: Maybe<IdentityAggregateFields>;
+  nodes: Array<Identity>;
 };
 
-
-/** columns and relationships of "identity" */
-export type IdentitySmithCertIssued_ConnectionArgs = {
-  after?: InputMaybe<Scalars['String']['input']>;
-  before?: InputMaybe<Scalars['String']['input']>;
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
-  first?: InputMaybe<Scalars['Int']['input']>;
-  last?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+export type IdentityAggregateBoolExp = {
+  bool_and?: InputMaybe<IdentityAggregateBoolExpBool_And>;
+  bool_or?: InputMaybe<IdentityAggregateBoolExpBool_Or>;
+  count?: InputMaybe<IdentityAggregateBoolExpCount>;
 };
 
-
-/** columns and relationships of "identity" */
-export type IdentitySmithCertReceivedArgs = {
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
-  limit?: InputMaybe<Scalars['Int']['input']>;
-  offset?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+/** aggregate fields of "identity" */
+export type IdentityAggregateFields = {
+  __typename?: 'IdentityAggregateFields';
+  avg?: Maybe<IdentityAvgFields>;
+  count: Scalars['Int']['output'];
+  max?: Maybe<IdentityMaxFields>;
+  min?: Maybe<IdentityMinFields>;
+  stddev?: Maybe<IdentityStddevFields>;
+  stddevPop?: Maybe<IdentityStddevPopFields>;
+  stddevSamp?: Maybe<IdentityStddevSampFields>;
+  sum?: Maybe<IdentitySumFields>;
+  varPop?: Maybe<IdentityVarPopFields>;
+  varSamp?: Maybe<IdentityVarSampFields>;
+  variance?: Maybe<IdentityVarianceFields>;
 };
 
 
-/** columns and relationships of "identity" */
-export type IdentitySmithCertReceivedAggregateArgs = {
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
-  limit?: InputMaybe<Scalars['Int']['input']>;
-  offset?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+/** aggregate fields of "identity" */
+export type IdentityAggregateFieldsCountArgs = {
+  columns?: InputMaybe<Array<IdentitySelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
 };
 
-
-/** columns and relationships of "identity" */
-export type IdentitySmithCertReceived_ConnectionArgs = {
-  after?: InputMaybe<Scalars['String']['input']>;
-  before?: InputMaybe<Scalars['String']['input']>;
-  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
-  first?: InputMaybe<Scalars['Int']['input']>;
-  last?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
-  where?: InputMaybe<SmithCertBoolExp>;
+/** order by aggregate values of table "identity" */
+export type IdentityAggregateOrderBy = {
+  avg?: InputMaybe<IdentityAvgOrderBy>;
+  count?: InputMaybe<OrderBy>;
+  max?: InputMaybe<IdentityMaxOrderBy>;
+  min?: InputMaybe<IdentityMinOrderBy>;
+  stddev?: InputMaybe<IdentityStddevOrderBy>;
+  stddevPop?: InputMaybe<IdentityStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<IdentityStddevSampOrderBy>;
+  sum?: InputMaybe<IdentitySumOrderBy>;
+  varPop?: InputMaybe<IdentityVarPopOrderBy>;
+  varSamp?: InputMaybe<IdentityVarSampOrderBy>;
+  variance?: InputMaybe<IdentityVarianceOrderBy>;
 };
 
+/** aggregate avg on columns */
+export type IdentityAvgFields = {
+  __typename?: 'IdentityAvgFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
 
-/** columns and relationships of "identity" */
-export type IdentityUdHistoryArgs = {
-  distinctOn?: InputMaybe<Array<UdHistorySelectColumn>>;
-  limit?: InputMaybe<Scalars['Int']['input']>;
-  offset?: InputMaybe<Scalars['Int']['input']>;
-  orderBy?: InputMaybe<Array<UdHistoryOrderBy>>;
-  where?: InputMaybe<UdHistoryBoolExp>;
+/** order by avg() on columns of table "identity" */
+export type IdentityAvgOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
 };
 
 /** Boolean expression to filter rows from the table "identity". All fields are combined with a logical 'AND'. */
@@ -2718,6 +2996,8 @@ export type IdentityBoolExp = {
   _or?: InputMaybe<Array<IdentityBoolExp>>;
   account?: InputMaybe<AccountBoolExp>;
   accountId?: InputMaybe<StringComparisonExp>;
+  accountRemoved?: InputMaybe<AccountBoolExp>;
+  accountRemovedId?: InputMaybe<StringComparisonExp>;
   certIssued?: InputMaybe<CertBoolExp>;
   certIssuedAggregate?: InputMaybe<CertAggregateBoolExp>;
   certReceived?: InputMaybe<CertBoolExp>;
@@ -2726,6 +3006,7 @@ export type IdentityBoolExp = {
   createdInId?: InputMaybe<StringComparisonExp>;
   createdOn?: InputMaybe<IntComparisonExp>;
   expireOn?: InputMaybe<IntComparisonExp>;
+  firstEligibleUd?: InputMaybe<IntComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
   index?: InputMaybe<IntComparisonExp>;
   isMember?: InputMaybe<BooleanComparisonExp>;
@@ -2737,11 +3018,7 @@ export type IdentityBoolExp = {
   name?: InputMaybe<StringComparisonExp>;
   ownerKeyChange?: InputMaybe<ChangeOwnerKeyBoolExp>;
   ownerKeyChangeAggregate?: InputMaybe<ChangeOwnerKeyAggregateBoolExp>;
-  smithCertIssued?: InputMaybe<SmithCertBoolExp>;
-  smithCertIssuedAggregate?: InputMaybe<SmithCertAggregateBoolExp>;
-  smithCertReceived?: InputMaybe<SmithCertBoolExp>;
-  smithCertReceivedAggregate?: InputMaybe<SmithCertAggregateBoolExp>;
-  smithStatus?: InputMaybe<SmithStatusEnumComparisonExp>;
+  smith?: InputMaybe<SmithBoolExp>;
   status?: InputMaybe<IdentityStatusEnumComparisonExp>;
   udHistory?: InputMaybe<UdHistoryBoolExp>;
 };
@@ -2759,42 +3036,105 @@ export type IdentityEdge = {
   node: Identity;
 };
 
-/** Ordering options when selecting data from "identity". */
-export type IdentityOrderBy = {
-  account?: InputMaybe<AccountOrderBy>;
+/** aggregate max on columns */
+export type IdentityMaxFields = {
+  __typename?: 'IdentityMaxFields';
+  accountId?: Maybe<Scalars['String']['output']>;
+  accountRemovedId?: Maybe<Scalars['String']['output']>;
+  createdInId?: Maybe<Scalars['String']['output']>;
+  createdOn?: Maybe<Scalars['Int']['output']>;
+  expireOn?: Maybe<Scalars['Int']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Int']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  index?: Maybe<Scalars['Int']['output']>;
+  lastChangeOn?: Maybe<Scalars['Int']['output']>;
+  name?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by max() on columns of table "identity" */
+export type IdentityMaxOrderBy = {
   accountId?: InputMaybe<OrderBy>;
-  certIssuedAggregate?: InputMaybe<CertAggregateOrderBy>;
-  certReceivedAggregate?: InputMaybe<CertAggregateOrderBy>;
-  createdIn?: InputMaybe<EventOrderBy>;
+  accountRemovedId?: InputMaybe<OrderBy>;
   createdInId?: InputMaybe<OrderBy>;
   createdOn?: InputMaybe<OrderBy>;
   expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
   index?: InputMaybe<OrderBy>;
-  isMember?: InputMaybe<OrderBy>;
   lastChangeOn?: InputMaybe<OrderBy>;
-  linkedAccountAggregate?: InputMaybe<AccountAggregateOrderBy>;
-  membershipHistoryAggregate?: InputMaybe<MembershipEventAggregateOrderBy>;
   name?: InputMaybe<OrderBy>;
-  ownerKeyChangeAggregate?: InputMaybe<ChangeOwnerKeyAggregateOrderBy>;
-  smithCertIssuedAggregate?: InputMaybe<SmithCertAggregateOrderBy>;
-  smithCertReceivedAggregate?: InputMaybe<SmithCertAggregateOrderBy>;
-  smithStatus?: InputMaybe<OrderBy>;
-  status?: InputMaybe<OrderBy>;
-  udHistoryAggregate?: InputMaybe<UdHistoryAggregateOrderBy>;
 };
 
-/** select columns of table "identity" */
-export enum IdentitySelectColumn {
-  /** column name */
-  AccountId = 'accountId',
-  /** column name */
-  CreatedInId = 'createdInId',
-  /** column name */
-  CreatedOn = 'createdOn',
+/** aggregate min on columns */
+export type IdentityMinFields = {
+  __typename?: 'IdentityMinFields';
+  accountId?: Maybe<Scalars['String']['output']>;
+  accountRemovedId?: Maybe<Scalars['String']['output']>;
+  createdInId?: Maybe<Scalars['String']['output']>;
+  createdOn?: Maybe<Scalars['Int']['output']>;
+  expireOn?: Maybe<Scalars['Int']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Int']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  index?: Maybe<Scalars['Int']['output']>;
+  lastChangeOn?: Maybe<Scalars['Int']['output']>;
+  name?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by min() on columns of table "identity" */
+export type IdentityMinOrderBy = {
+  accountId?: InputMaybe<OrderBy>;
+  accountRemovedId?: InputMaybe<OrderBy>;
+  createdInId?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+  name?: InputMaybe<OrderBy>;
+};
+
+/** Ordering options when selecting data from "identity". */
+export type IdentityOrderBy = {
+  account?: InputMaybe<AccountOrderBy>;
+  accountId?: InputMaybe<OrderBy>;
+  accountRemoved?: InputMaybe<AccountOrderBy>;
+  accountRemovedId?: InputMaybe<OrderBy>;
+  certIssuedAggregate?: InputMaybe<CertAggregateOrderBy>;
+  certReceivedAggregate?: InputMaybe<CertAggregateOrderBy>;
+  createdIn?: InputMaybe<EventOrderBy>;
+  createdInId?: InputMaybe<OrderBy>;
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  isMember?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+  linkedAccountAggregate?: InputMaybe<AccountAggregateOrderBy>;
+  membershipHistoryAggregate?: InputMaybe<MembershipEventAggregateOrderBy>;
+  name?: InputMaybe<OrderBy>;
+  ownerKeyChangeAggregate?: InputMaybe<ChangeOwnerKeyAggregateOrderBy>;
+  smith?: InputMaybe<SmithOrderBy>;
+  status?: InputMaybe<OrderBy>;
+  udHistoryAggregate?: InputMaybe<UdHistoryAggregateOrderBy>;
+};
+
+/** select columns of table "identity" */
+export enum IdentitySelectColumn {
+  /** column name */
+  AccountId = 'accountId',
+  /** column name */
+  AccountRemovedId = 'accountRemovedId',
+  /** column name */
+  CreatedInId = 'createdInId',
+  /** column name */
+  CreatedOn = 'createdOn',
   /** column name */
   ExpireOn = 'expireOn',
   /** column name */
+  FirstEligibleUd = 'firstEligibleUd',
+  /** column name */
   Id = 'id',
   /** column name */
   Index = 'index',
@@ -2805,11 +3145,21 @@ export enum IdentitySelectColumn {
   /** column name */
   Name = 'name',
   /** column name */
-  SmithStatus = 'smithStatus',
-  /** column name */
   Status = 'status'
 }
 
+/** select "identityAggregateBoolExpBool_andArgumentsColumns" columns of table "identity" */
+export enum IdentitySelectColumnIdentityAggregateBoolExpBool_AndArgumentsColumns {
+  /** column name */
+  IsMember = 'isMember'
+}
+
+/** select "identityAggregateBoolExpBool_orArgumentsColumns" columns of table "identity" */
+export enum IdentitySelectColumnIdentityAggregateBoolExpBool_OrArgumentsColumns {
+  /** column name */
+  IsMember = 'isMember'
+}
+
 export enum IdentityStatusEnum {
   Member = 'MEMBER',
   Notmember = 'NOTMEMBER',
@@ -2828,6 +3178,139 @@ export type IdentityStatusEnumComparisonExp = {
   _nin?: InputMaybe<Array<IdentityStatusEnum>>;
 };
 
+/** aggregate stddev on columns */
+export type IdentityStddevFields = {
+  __typename?: 'IdentityStddevFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddev() on columns of table "identity" */
+export type IdentityStddevOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevPop on columns */
+export type IdentityStddevPopFields = {
+  __typename?: 'IdentityStddevPopFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevPop() on columns of table "identity" */
+export type IdentityStddevPopOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevSamp on columns */
+export type IdentityStddevSampFields = {
+  __typename?: 'IdentityStddevSampFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevSamp() on columns of table "identity" */
+export type IdentityStddevSampOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate sum on columns */
+export type IdentitySumFields = {
+  __typename?: 'IdentitySumFields';
+  createdOn?: Maybe<Scalars['Int']['output']>;
+  expireOn?: Maybe<Scalars['Int']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Int']['output']>;
+  index?: Maybe<Scalars['Int']['output']>;
+  lastChangeOn?: Maybe<Scalars['Int']['output']>;
+};
+
+/** order by sum() on columns of table "identity" */
+export type IdentitySumOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varPop on columns */
+export type IdentityVarPopFields = {
+  __typename?: 'IdentityVarPopFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varPop() on columns of table "identity" */
+export type IdentityVarPopOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varSamp on columns */
+export type IdentityVarSampFields = {
+  __typename?: 'IdentityVarSampFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varSamp() on columns of table "identity" */
+export type IdentityVarSampOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
+/** aggregate variance on columns */
+export type IdentityVarianceFields = {
+  __typename?: 'IdentityVarianceFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+  expireOn?: Maybe<Scalars['Float']['output']>;
+  firstEligibleUd?: Maybe<Scalars['Float']['output']>;
+  index?: Maybe<Scalars['Float']['output']>;
+  lastChangeOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by variance() on columns of table "identity" */
+export type IdentityVarianceOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
+  expireOn?: InputMaybe<OrderBy>;
+  firstEligibleUd?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChangeOn?: InputMaybe<OrderBy>;
+};
+
 /** Boolean expression to compare columns of type "Int". All fields are combined with logical 'AND'. */
 export type IntArrayComparisonExp = {
   /** is the array contained in the given array value */
@@ -3234,77 +3717,284 @@ export type PageInfo = {
   startCursor: Scalars['String']['output'];
 };
 
-/** columns and relationships of "smith_cert" */
-export type SmithCert = Node & {
-  __typename?: 'SmithCert';
-  createdOn: Scalars['Int']['output'];
+/** columns and relationships of "population_history" */
+export type PopulationHistory = Node & {
+  __typename?: 'PopulationHistory';
+  activeAccountCount: Scalars['Int']['output'];
+  blockNumber: Scalars['Int']['output'];
   id: Scalars['ID']['output'];
-  /** An object relationship */
-  issuer?: Maybe<Identity>;
-  issuerId?: Maybe<Scalars['String']['output']>;
-  /** An object relationship */
-  receiver?: Maybe<Identity>;
-  receiverId?: Maybe<Scalars['String']['output']>;
+  memberCount: Scalars['Int']['output'];
+  smithCount: Scalars['Int']['output'];
 };
 
-/** aggregated selection of "smith_cert" */
-export type SmithCertAggregate = {
-  __typename?: 'SmithCertAggregate';
-  aggregate?: Maybe<SmithCertAggregateFields>;
-  nodes: Array<SmithCert>;
+/** Boolean expression to filter rows from the table "population_history". All fields are combined with a logical 'AND'. */
+export type PopulationHistoryBoolExp = {
+  _and?: InputMaybe<Array<PopulationHistoryBoolExp>>;
+  _not?: InputMaybe<PopulationHistoryBoolExp>;
+  _or?: InputMaybe<Array<PopulationHistoryBoolExp>>;
+  activeAccountCount?: InputMaybe<IntComparisonExp>;
+  blockNumber?: InputMaybe<IntComparisonExp>;
+  id?: InputMaybe<StringComparisonExp>;
+  memberCount?: InputMaybe<IntComparisonExp>;
+  smithCount?: InputMaybe<IntComparisonExp>;
 };
 
-export type SmithCertAggregateBoolExp = {
-  count?: InputMaybe<SmithCertAggregateBoolExpCount>;
+/** A Relay connection object on "population_history" */
+export type PopulationHistoryConnection = {
+  __typename?: 'PopulationHistoryConnection';
+  edges: Array<PopulationHistoryEdge>;
+  pageInfo: PageInfo;
 };
 
-/** aggregate fields of "smith_cert" */
-export type SmithCertAggregateFields = {
-  __typename?: 'SmithCertAggregateFields';
-  avg?: Maybe<SmithCertAvgFields>;
-  count: Scalars['Int']['output'];
-  max?: Maybe<SmithCertMaxFields>;
-  min?: Maybe<SmithCertMinFields>;
-  stddev?: Maybe<SmithCertStddevFields>;
-  stddevPop?: Maybe<SmithCertStddevPopFields>;
-  stddevSamp?: Maybe<SmithCertStddevSampFields>;
-  sum?: Maybe<SmithCertSumFields>;
-  varPop?: Maybe<SmithCertVarPopFields>;
-  varSamp?: Maybe<SmithCertVarSampFields>;
-  variance?: Maybe<SmithCertVarianceFields>;
+export type PopulationHistoryEdge = {
+  __typename?: 'PopulationHistoryEdge';
+  cursor: Scalars['String']['output'];
+  node: PopulationHistory;
 };
 
+/** Ordering options when selecting data from "population_history". */
+export type PopulationHistoryOrderBy = {
+  activeAccountCount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  memberCount?: InputMaybe<OrderBy>;
+  smithCount?: InputMaybe<OrderBy>;
+};
 
-/** aggregate fields of "smith_cert" */
-export type SmithCertAggregateFieldsCountArgs = {
-  columns?: InputMaybe<Array<SmithCertSelectColumn>>;
-  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+/** select columns of table "population_history" */
+export enum PopulationHistorySelectColumn {
+  /** column name */
+  ActiveAccountCount = 'activeAccountCount',
+  /** column name */
+  BlockNumber = 'blockNumber',
+  /** column name */
+  Id = 'id',
+  /** column name */
+  MemberCount = 'memberCount',
+  /** column name */
+  SmithCount = 'smithCount'
+}
+
+/** columns and relationships of "smith" */
+export type Smith = Node & {
+  __typename?: 'Smith';
+  forged: Scalars['Int']['output'];
+  id: Scalars['ID']['output'];
+  /** An object relationship */
+  identity?: Maybe<Identity>;
+  identityId?: Maybe<Scalars['String']['output']>;
+  index: Scalars['Int']['output'];
+  lastChanged?: Maybe<Scalars['Int']['output']>;
+  lastForged?: Maybe<Scalars['Int']['output']>;
+  /** An array relationship */
+  smithCertIssued: Array<SmithCert>;
+  /** An aggregate relationship */
+  smithCertIssuedAggregate: SmithCertAggregate;
+  /** An array relationship connection */
+  smithCertIssued_connection: SmithCertConnection;
+  /** An array relationship */
+  smithCertReceived: Array<SmithCert>;
+  /** An aggregate relationship */
+  smithCertReceivedAggregate: SmithCertAggregate;
+  /** An array relationship connection */
+  smithCertReceived_connection: SmithCertConnection;
+  /** An array relationship */
+  smithHistory: Array<SmithEvent>;
+  /** An aggregate relationship */
+  smithHistoryAggregate: SmithEventAggregate;
+  /** An array relationship connection */
+  smithHistory_connection: SmithEventConnection;
+  smithStatus?: Maybe<SmithStatusEnum>;
 };
 
-/** order by aggregate values of table "smith_cert" */
-export type SmithCertAggregateOrderBy = {
-  avg?: InputMaybe<SmithCertAvgOrderBy>;
-  count?: InputMaybe<OrderBy>;
-  max?: InputMaybe<SmithCertMaxOrderBy>;
-  min?: InputMaybe<SmithCertMinOrderBy>;
-  stddev?: InputMaybe<SmithCertStddevOrderBy>;
-  stddevPop?: InputMaybe<SmithCertStddevPopOrderBy>;
-  stddevSamp?: InputMaybe<SmithCertStddevSampOrderBy>;
-  sum?: InputMaybe<SmithCertSumOrderBy>;
-  varPop?: InputMaybe<SmithCertVarPopOrderBy>;
-  varSamp?: InputMaybe<SmithCertVarSampOrderBy>;
-  variance?: InputMaybe<SmithCertVarianceOrderBy>;
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertIssuedArgs = {
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
 };
 
-/** aggregate avg on columns */
-export type SmithCertAvgFields = {
-  __typename?: 'SmithCertAvgFields';
-  createdOn?: Maybe<Scalars['Float']['output']>;
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertIssuedAggregateArgs = {
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
 };
 
-/** order by avg() on columns of table "smith_cert" */
-export type SmithCertAvgOrderBy = {
-  createdOn?: InputMaybe<OrderBy>;
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertIssued_ConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertReceivedArgs = {
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertReceivedAggregateArgs = {
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithCertReceived_ConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithCertSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithCertOrderBy>>;
+  where?: InputMaybe<SmithCertBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithHistoryArgs = {
+  distinctOn?: InputMaybe<Array<SmithEventSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithEventOrderBy>>;
+  where?: InputMaybe<SmithEventBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithHistoryAggregateArgs = {
+  distinctOn?: InputMaybe<Array<SmithEventSelectColumn>>;
+  limit?: InputMaybe<Scalars['Int']['input']>;
+  offset?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithEventOrderBy>>;
+  where?: InputMaybe<SmithEventBoolExp>;
+};
+
+
+/** columns and relationships of "smith" */
+export type SmithSmithHistory_ConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithEventSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithEventOrderBy>>;
+  where?: InputMaybe<SmithEventBoolExp>;
+};
+
+/** Boolean expression to filter rows from the table "smith". All fields are combined with a logical 'AND'. */
+export type SmithBoolExp = {
+  _and?: InputMaybe<Array<SmithBoolExp>>;
+  _not?: InputMaybe<SmithBoolExp>;
+  _or?: InputMaybe<Array<SmithBoolExp>>;
+  forged?: InputMaybe<IntComparisonExp>;
+  id?: InputMaybe<StringComparisonExp>;
+  identity?: InputMaybe<IdentityBoolExp>;
+  identityId?: InputMaybe<StringComparisonExp>;
+  index?: InputMaybe<IntComparisonExp>;
+  lastChanged?: InputMaybe<IntComparisonExp>;
+  lastForged?: InputMaybe<IntComparisonExp>;
+  smithCertIssued?: InputMaybe<SmithCertBoolExp>;
+  smithCertIssuedAggregate?: InputMaybe<SmithCertAggregateBoolExp>;
+  smithCertReceived?: InputMaybe<SmithCertBoolExp>;
+  smithCertReceivedAggregate?: InputMaybe<SmithCertAggregateBoolExp>;
+  smithHistory?: InputMaybe<SmithEventBoolExp>;
+  smithHistoryAggregate?: InputMaybe<SmithEventAggregateBoolExp>;
+  smithStatus?: InputMaybe<SmithStatusEnumComparisonExp>;
+};
+
+/** columns and relationships of "smith_cert" */
+export type SmithCert = Node & {
+  __typename?: 'SmithCert';
+  createdOn: Scalars['Int']['output'];
+  id: Scalars['ID']['output'];
+  /** An object relationship */
+  issuer?: Maybe<Smith>;
+  issuerId?: Maybe<Scalars['String']['output']>;
+  /** An object relationship */
+  receiver?: Maybe<Smith>;
+  receiverId?: Maybe<Scalars['String']['output']>;
+};
+
+/** aggregated selection of "smith_cert" */
+export type SmithCertAggregate = {
+  __typename?: 'SmithCertAggregate';
+  aggregate?: Maybe<SmithCertAggregateFields>;
+  nodes: Array<SmithCert>;
+};
+
+export type SmithCertAggregateBoolExp = {
+  count?: InputMaybe<SmithCertAggregateBoolExpCount>;
+};
+
+/** aggregate fields of "smith_cert" */
+export type SmithCertAggregateFields = {
+  __typename?: 'SmithCertAggregateFields';
+  avg?: Maybe<SmithCertAvgFields>;
+  count: Scalars['Int']['output'];
+  max?: Maybe<SmithCertMaxFields>;
+  min?: Maybe<SmithCertMinFields>;
+  stddev?: Maybe<SmithCertStddevFields>;
+  stddevPop?: Maybe<SmithCertStddevPopFields>;
+  stddevSamp?: Maybe<SmithCertStddevSampFields>;
+  sum?: Maybe<SmithCertSumFields>;
+  varPop?: Maybe<SmithCertVarPopFields>;
+  varSamp?: Maybe<SmithCertVarSampFields>;
+  variance?: Maybe<SmithCertVarianceFields>;
+};
+
+
+/** aggregate fields of "smith_cert" */
+export type SmithCertAggregateFieldsCountArgs = {
+  columns?: InputMaybe<Array<SmithCertSelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+/** order by aggregate values of table "smith_cert" */
+export type SmithCertAggregateOrderBy = {
+  avg?: InputMaybe<SmithCertAvgOrderBy>;
+  count?: InputMaybe<OrderBy>;
+  max?: InputMaybe<SmithCertMaxOrderBy>;
+  min?: InputMaybe<SmithCertMinOrderBy>;
+  stddev?: InputMaybe<SmithCertStddevOrderBy>;
+  stddevPop?: InputMaybe<SmithCertStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<SmithCertStddevSampOrderBy>;
+  sum?: InputMaybe<SmithCertSumOrderBy>;
+  varPop?: InputMaybe<SmithCertVarPopOrderBy>;
+  varSamp?: InputMaybe<SmithCertVarSampOrderBy>;
+  variance?: InputMaybe<SmithCertVarianceOrderBy>;
+};
+
+/** aggregate avg on columns */
+export type SmithCertAvgFields = {
+  __typename?: 'SmithCertAvgFields';
+  createdOn?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by avg() on columns of table "smith_cert" */
+export type SmithCertAvgOrderBy = {
+  createdOn?: InputMaybe<OrderBy>;
 };
 
 /** Boolean expression to filter rows from the table "smith_cert". All fields are combined with a logical 'AND'. */
@@ -3314,9 +4004,9 @@ export type SmithCertBoolExp = {
   _or?: InputMaybe<Array<SmithCertBoolExp>>;
   createdOn?: InputMaybe<IntComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
-  issuer?: InputMaybe<IdentityBoolExp>;
+  issuer?: InputMaybe<SmithBoolExp>;
   issuerId?: InputMaybe<StringComparisonExp>;
-  receiver?: InputMaybe<IdentityBoolExp>;
+  receiver?: InputMaybe<SmithBoolExp>;
   receiverId?: InputMaybe<StringComparisonExp>;
 };
 
@@ -3371,9 +4061,9 @@ export type SmithCertMinOrderBy = {
 export type SmithCertOrderBy = {
   createdOn?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
-  issuer?: InputMaybe<IdentityOrderBy>;
+  issuer?: InputMaybe<SmithOrderBy>;
   issuerId?: InputMaybe<OrderBy>;
-  receiver?: InputMaybe<IdentityOrderBy>;
+  receiver?: InputMaybe<SmithOrderBy>;
   receiverId?: InputMaybe<OrderBy>;
 };
 
@@ -3466,364 +4156,940 @@ export type SmithCertVarianceOrderBy = {
   createdOn?: InputMaybe<OrderBy>;
 };
 
-export enum SmithStatusEnum {
-  Excluded = 'EXCLUDED',
-  Invited = 'INVITED',
-  Pending = 'PENDING',
-  Smith = 'SMITH'
-}
-
-/** Boolean expression to compare columns of type "SmithStatusEnum". All fields are combined with logical 'AND'. */
-export type SmithStatusEnumComparisonExp = {
-  _eq?: InputMaybe<SmithStatusEnum>;
-  _in?: InputMaybe<Array<SmithStatusEnum>>;
-  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
-  _neq?: InputMaybe<SmithStatusEnum>;
-  _nin?: InputMaybe<Array<SmithStatusEnum>>;
-};
-
-/** Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. */
-export type StringArrayComparisonExp = {
-  /** is the array contained in the given array value */
-  _containedIn?: InputMaybe<Array<Scalars['String']['input']>>;
-  /** does the array contain the given value */
-  _contains?: InputMaybe<Array<Scalars['String']['input']>>;
-  _eq?: InputMaybe<Array<Scalars['String']['input']>>;
-  _gt?: InputMaybe<Array<Scalars['String']['input']>>;
-  _gte?: InputMaybe<Array<Scalars['String']['input']>>;
-  _in?: InputMaybe<Array<Array<Scalars['String']['input']>>>;
-  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
-  _lt?: InputMaybe<Array<Scalars['String']['input']>>;
-  _lte?: InputMaybe<Array<Scalars['String']['input']>>;
-  _neq?: InputMaybe<Array<Scalars['String']['input']>>;
-  _nin?: InputMaybe<Array<Array<Scalars['String']['input']>>>;
-};
-
-/** Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. */
-export type StringComparisonExp = {
-  _eq?: InputMaybe<Scalars['String']['input']>;
-  _gt?: InputMaybe<Scalars['String']['input']>;
-  _gte?: InputMaybe<Scalars['String']['input']>;
-  /** does the column match the given case-insensitive pattern */
-  _ilike?: InputMaybe<Scalars['String']['input']>;
-  _in?: InputMaybe<Array<Scalars['String']['input']>>;
-  /** does the column match the given POSIX regular expression, case insensitive */
-  _iregex?: InputMaybe<Scalars['String']['input']>;
-  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
-  /** does the column match the given pattern */
-  _like?: InputMaybe<Scalars['String']['input']>;
-  _lt?: InputMaybe<Scalars['String']['input']>;
-  _lte?: InputMaybe<Scalars['String']['input']>;
-  _neq?: InputMaybe<Scalars['String']['input']>;
-  /** does the column NOT match the given case-insensitive pattern */
-  _nilike?: InputMaybe<Scalars['String']['input']>;
-  _nin?: InputMaybe<Array<Scalars['String']['input']>>;
-  /** does the column NOT match the given POSIX regular expression, case insensitive */
-  _niregex?: InputMaybe<Scalars['String']['input']>;
-  /** does the column NOT match the given pattern */
-  _nlike?: InputMaybe<Scalars['String']['input']>;
-  /** does the column NOT match the given POSIX regular expression, case sensitive */
-  _nregex?: InputMaybe<Scalars['String']['input']>;
-  /** does the column NOT match the given SQL regular expression */
-  _nsimilar?: InputMaybe<Scalars['String']['input']>;
-  /** does the column match the given POSIX regular expression, case sensitive */
-  _regex?: InputMaybe<Scalars['String']['input']>;
-  /** does the column match the given SQL regular expression */
-  _similar?: InputMaybe<Scalars['String']['input']>;
+/** A Relay connection object on "smith" */
+export type SmithConnection = {
+  __typename?: 'SmithConnection';
+  edges: Array<SmithEdge>;
+  pageInfo: PageInfo;
 };
 
-/** Boolean expression to compare columns of type "timestamptz". All fields are combined with logical 'AND'. */
-export type TimestamptzComparisonExp = {
-  _eq?: InputMaybe<Scalars['timestamptz']['input']>;
-  _gt?: InputMaybe<Scalars['timestamptz']['input']>;
-  _gte?: InputMaybe<Scalars['timestamptz']['input']>;
-  _in?: InputMaybe<Array<Scalars['timestamptz']['input']>>;
-  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
-  _lt?: InputMaybe<Scalars['timestamptz']['input']>;
-  _lte?: InputMaybe<Scalars['timestamptz']['input']>;
-  _neq?: InputMaybe<Scalars['timestamptz']['input']>;
-  _nin?: InputMaybe<Array<Scalars['timestamptz']['input']>>;
+export type SmithEdge = {
+  __typename?: 'SmithEdge';
+  cursor: Scalars['String']['output'];
+  node: Smith;
 };
 
-/** columns and relationships of "transfer" */
-export type Transfer = Node & {
-  __typename?: 'Transfer';
-  amount: Scalars['numeric']['output'];
+/** columns and relationships of "smith_event" */
+export type SmithEvent = Node & {
+  __typename?: 'SmithEvent';
   blockNumber: Scalars['Int']['output'];
-  comment?: Maybe<Scalars['String']['output']>;
   /** An object relationship */
-  from?: Maybe<Account>;
-  fromId?: Maybe<Scalars['String']['output']>;
+  event?: Maybe<Event>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  eventType?: Maybe<SmithEventTypeEnum>;
   id: Scalars['ID']['output'];
-  timestamp: Scalars['timestamptz']['output'];
   /** An object relationship */
-  to?: Maybe<Account>;
-  toId?: Maybe<Scalars['String']['output']>;
+  smith?: Maybe<Smith>;
+  smithId?: Maybe<Scalars['String']['output']>;
 };
 
-/** aggregated selection of "transfer" */
-export type TransferAggregate = {
-  __typename?: 'TransferAggregate';
-  aggregate?: Maybe<TransferAggregateFields>;
-  nodes: Array<Transfer>;
+/** aggregated selection of "smith_event" */
+export type SmithEventAggregate = {
+  __typename?: 'SmithEventAggregate';
+  aggregate?: Maybe<SmithEventAggregateFields>;
+  nodes: Array<SmithEvent>;
 };
 
-export type TransferAggregateBoolExp = {
-  count?: InputMaybe<TransferAggregateBoolExpCount>;
+export type SmithEventAggregateBoolExp = {
+  count?: InputMaybe<SmithEventAggregateBoolExpCount>;
 };
 
-/** aggregate fields of "transfer" */
-export type TransferAggregateFields = {
-  __typename?: 'TransferAggregateFields';
-  avg?: Maybe<TransferAvgFields>;
+/** aggregate fields of "smith_event" */
+export type SmithEventAggregateFields = {
+  __typename?: 'SmithEventAggregateFields';
+  avg?: Maybe<SmithEventAvgFields>;
   count: Scalars['Int']['output'];
-  max?: Maybe<TransferMaxFields>;
-  min?: Maybe<TransferMinFields>;
-  stddev?: Maybe<TransferStddevFields>;
-  stddevPop?: Maybe<TransferStddevPopFields>;
-  stddevSamp?: Maybe<TransferStddevSampFields>;
-  sum?: Maybe<TransferSumFields>;
-  varPop?: Maybe<TransferVarPopFields>;
-  varSamp?: Maybe<TransferVarSampFields>;
-  variance?: Maybe<TransferVarianceFields>;
+  max?: Maybe<SmithEventMaxFields>;
+  min?: Maybe<SmithEventMinFields>;
+  stddev?: Maybe<SmithEventStddevFields>;
+  stddevPop?: Maybe<SmithEventStddevPopFields>;
+  stddevSamp?: Maybe<SmithEventStddevSampFields>;
+  sum?: Maybe<SmithEventSumFields>;
+  varPop?: Maybe<SmithEventVarPopFields>;
+  varSamp?: Maybe<SmithEventVarSampFields>;
+  variance?: Maybe<SmithEventVarianceFields>;
 };
 
 
-/** aggregate fields of "transfer" */
-export type TransferAggregateFieldsCountArgs = {
-  columns?: InputMaybe<Array<TransferSelectColumn>>;
+/** aggregate fields of "smith_event" */
+export type SmithEventAggregateFieldsCountArgs = {
+  columns?: InputMaybe<Array<SmithEventSelectColumn>>;
   distinct?: InputMaybe<Scalars['Boolean']['input']>;
 };
 
-/** order by aggregate values of table "transfer" */
-export type TransferAggregateOrderBy = {
-  avg?: InputMaybe<TransferAvgOrderBy>;
+/** order by aggregate values of table "smith_event" */
+export type SmithEventAggregateOrderBy = {
+  avg?: InputMaybe<SmithEventAvgOrderBy>;
   count?: InputMaybe<OrderBy>;
-  max?: InputMaybe<TransferMaxOrderBy>;
-  min?: InputMaybe<TransferMinOrderBy>;
-  stddev?: InputMaybe<TransferStddevOrderBy>;
-  stddevPop?: InputMaybe<TransferStddevPopOrderBy>;
-  stddevSamp?: InputMaybe<TransferStddevSampOrderBy>;
-  sum?: InputMaybe<TransferSumOrderBy>;
-  varPop?: InputMaybe<TransferVarPopOrderBy>;
-  varSamp?: InputMaybe<TransferVarSampOrderBy>;
-  variance?: InputMaybe<TransferVarianceOrderBy>;
+  max?: InputMaybe<SmithEventMaxOrderBy>;
+  min?: InputMaybe<SmithEventMinOrderBy>;
+  stddev?: InputMaybe<SmithEventStddevOrderBy>;
+  stddevPop?: InputMaybe<SmithEventStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<SmithEventStddevSampOrderBy>;
+  sum?: InputMaybe<SmithEventSumOrderBy>;
+  varPop?: InputMaybe<SmithEventVarPopOrderBy>;
+  varSamp?: InputMaybe<SmithEventVarSampOrderBy>;
+  variance?: InputMaybe<SmithEventVarianceOrderBy>;
+};
+
+/** aggregate avg on columns */
+export type SmithEventAvgFields = {
+  __typename?: 'SmithEventAvgFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by avg() on columns of table "smith_event" */
+export type SmithEventAvgOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** Boolean expression to filter rows from the table "smith_event". All fields are combined with a logical 'AND'. */
+export type SmithEventBoolExp = {
+  _and?: InputMaybe<Array<SmithEventBoolExp>>;
+  _not?: InputMaybe<SmithEventBoolExp>;
+  _or?: InputMaybe<Array<SmithEventBoolExp>>;
+  blockNumber?: InputMaybe<IntComparisonExp>;
+  event?: InputMaybe<EventBoolExp>;
+  eventId?: InputMaybe<StringComparisonExp>;
+  eventType?: InputMaybe<SmithEventTypeEnumComparisonExp>;
+  id?: InputMaybe<StringComparisonExp>;
+  smith?: InputMaybe<SmithBoolExp>;
+  smithId?: InputMaybe<StringComparisonExp>;
+};
+
+/** A Relay connection object on "smith_event" */
+export type SmithEventConnection = {
+  __typename?: 'SmithEventConnection';
+  edges: Array<SmithEventEdge>;
+  pageInfo: PageInfo;
+};
+
+export type SmithEventEdge = {
+  __typename?: 'SmithEventEdge';
+  cursor: Scalars['String']['output'];
+  node: SmithEvent;
+};
+
+/** aggregate max on columns */
+export type SmithEventMaxFields = {
+  __typename?: 'SmithEventMaxFields';
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  smithId?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by max() on columns of table "smith_event" */
+export type SmithEventMaxOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  smithId?: InputMaybe<OrderBy>;
+};
+
+/** aggregate min on columns */
+export type SmithEventMinFields = {
+  __typename?: 'SmithEventMinFields';
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  smithId?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by min() on columns of table "smith_event" */
+export type SmithEventMinOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  smithId?: InputMaybe<OrderBy>;
+};
+
+/** Ordering options when selecting data from "smith_event". */
+export type SmithEventOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+  event?: InputMaybe<EventOrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  eventType?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  smith?: InputMaybe<SmithOrderBy>;
+  smithId?: InputMaybe<OrderBy>;
+};
+
+/** select columns of table "smith_event" */
+export enum SmithEventSelectColumn {
+  /** column name */
+  BlockNumber = 'blockNumber',
+  /** column name */
+  EventId = 'eventId',
+  /** column name */
+  EventType = 'eventType',
+  /** column name */
+  Id = 'id',
+  /** column name */
+  SmithId = 'smithId'
+}
+
+/** aggregate stddev on columns */
+export type SmithEventStddevFields = {
+  __typename?: 'SmithEventStddevFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddev() on columns of table "smith_event" */
+export type SmithEventStddevOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevPop on columns */
+export type SmithEventStddevPopFields = {
+  __typename?: 'SmithEventStddevPopFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevPop() on columns of table "smith_event" */
+export type SmithEventStddevPopOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevSamp on columns */
+export type SmithEventStddevSampFields = {
+  __typename?: 'SmithEventStddevSampFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevSamp() on columns of table "smith_event" */
+export type SmithEventStddevSampOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate sum on columns */
+export type SmithEventSumFields = {
+  __typename?: 'SmithEventSumFields';
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+};
+
+/** order by sum() on columns of table "smith_event" */
+export type SmithEventSumOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+export enum SmithEventTypeEnum {
+  Accepted = 'ACCEPTED',
+  Excluded = 'EXCLUDED',
+  Invited = 'INVITED',
+  Promoted = 'PROMOTED'
+}
+
+/** Boolean expression to compare columns of type "SmithEventTypeEnum". All fields are combined with logical 'AND'. */
+export type SmithEventTypeEnumComparisonExp = {
+  _eq?: InputMaybe<SmithEventTypeEnum>;
+  _in?: InputMaybe<Array<SmithEventTypeEnum>>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  _neq?: InputMaybe<SmithEventTypeEnum>;
+  _nin?: InputMaybe<Array<SmithEventTypeEnum>>;
+};
+
+/** aggregate varPop on columns */
+export type SmithEventVarPopFields = {
+  __typename?: 'SmithEventVarPopFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varPop() on columns of table "smith_event" */
+export type SmithEventVarPopOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varSamp on columns */
+export type SmithEventVarSampFields = {
+  __typename?: 'SmithEventVarSampFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varSamp() on columns of table "smith_event" */
+export type SmithEventVarSampOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate variance on columns */
+export type SmithEventVarianceFields = {
+  __typename?: 'SmithEventVarianceFields';
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by variance() on columns of table "smith_event" */
+export type SmithEventVarianceOrderBy = {
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** Ordering options when selecting data from "smith". */
+export type SmithOrderBy = {
+  forged?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  identity?: InputMaybe<IdentityOrderBy>;
+  identityId?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+  lastChanged?: InputMaybe<OrderBy>;
+  lastForged?: InputMaybe<OrderBy>;
+  smithCertIssuedAggregate?: InputMaybe<SmithCertAggregateOrderBy>;
+  smithCertReceivedAggregate?: InputMaybe<SmithCertAggregateOrderBy>;
+  smithHistoryAggregate?: InputMaybe<SmithEventAggregateOrderBy>;
+  smithStatus?: InputMaybe<OrderBy>;
+};
+
+/** select columns of table "smith" */
+export enum SmithSelectColumn {
+  /** column name */
+  Forged = 'forged',
+  /** column name */
+  Id = 'id',
+  /** column name */
+  IdentityId = 'identityId',
+  /** column name */
+  Index = 'index',
+  /** column name */
+  LastChanged = 'lastChanged',
+  /** column name */
+  LastForged = 'lastForged',
+  /** column name */
+  SmithStatus = 'smithStatus'
+}
+
+export enum SmithStatusEnum {
+  Excluded = 'EXCLUDED',
+  Invited = 'INVITED',
+  Pending = 'PENDING',
+  Smith = 'SMITH'
+}
+
+/** Boolean expression to compare columns of type "SmithStatusEnum". All fields are combined with logical 'AND'. */
+export type SmithStatusEnumComparisonExp = {
+  _eq?: InputMaybe<SmithStatusEnum>;
+  _in?: InputMaybe<Array<SmithStatusEnum>>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  _neq?: InputMaybe<SmithStatusEnum>;
+  _nin?: InputMaybe<Array<SmithStatusEnum>>;
+};
+
+/** Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. */
+export type StringArrayComparisonExp = {
+  /** is the array contained in the given array value */
+  _containedIn?: InputMaybe<Array<Scalars['String']['input']>>;
+  /** does the array contain the given value */
+  _contains?: InputMaybe<Array<Scalars['String']['input']>>;
+  _eq?: InputMaybe<Array<Scalars['String']['input']>>;
+  _gt?: InputMaybe<Array<Scalars['String']['input']>>;
+  _gte?: InputMaybe<Array<Scalars['String']['input']>>;
+  _in?: InputMaybe<Array<Array<Scalars['String']['input']>>>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  _lt?: InputMaybe<Array<Scalars['String']['input']>>;
+  _lte?: InputMaybe<Array<Scalars['String']['input']>>;
+  _neq?: InputMaybe<Array<Scalars['String']['input']>>;
+  _nin?: InputMaybe<Array<Array<Scalars['String']['input']>>>;
+};
+
+/** Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. */
+export type StringComparisonExp = {
+  _eq?: InputMaybe<Scalars['String']['input']>;
+  _gt?: InputMaybe<Scalars['String']['input']>;
+  _gte?: InputMaybe<Scalars['String']['input']>;
+  /** does the column match the given case-insensitive pattern */
+  _ilike?: InputMaybe<Scalars['String']['input']>;
+  _in?: InputMaybe<Array<Scalars['String']['input']>>;
+  /** does the column match the given POSIX regular expression, case insensitive */
+  _iregex?: InputMaybe<Scalars['String']['input']>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  /** does the column match the given pattern */
+  _like?: InputMaybe<Scalars['String']['input']>;
+  _lt?: InputMaybe<Scalars['String']['input']>;
+  _lte?: InputMaybe<Scalars['String']['input']>;
+  _neq?: InputMaybe<Scalars['String']['input']>;
+  /** does the column NOT match the given case-insensitive pattern */
+  _nilike?: InputMaybe<Scalars['String']['input']>;
+  _nin?: InputMaybe<Array<Scalars['String']['input']>>;
+  /** does the column NOT match the given POSIX regular expression, case insensitive */
+  _niregex?: InputMaybe<Scalars['String']['input']>;
+  /** does the column NOT match the given pattern */
+  _nlike?: InputMaybe<Scalars['String']['input']>;
+  /** does the column NOT match the given POSIX regular expression, case sensitive */
+  _nregex?: InputMaybe<Scalars['String']['input']>;
+  /** does the column NOT match the given SQL regular expression */
+  _nsimilar?: InputMaybe<Scalars['String']['input']>;
+  /** does the column match the given POSIX regular expression, case sensitive */
+  _regex?: InputMaybe<Scalars['String']['input']>;
+  /** does the column match the given SQL regular expression */
+  _similar?: InputMaybe<Scalars['String']['input']>;
+};
+
+/** Boolean expression to compare columns of type "timestamptz". All fields are combined with logical 'AND'. */
+export type TimestamptzComparisonExp = {
+  _eq?: InputMaybe<Scalars['timestamptz']['input']>;
+  _gt?: InputMaybe<Scalars['timestamptz']['input']>;
+  _gte?: InputMaybe<Scalars['timestamptz']['input']>;
+  _in?: InputMaybe<Array<Scalars['timestamptz']['input']>>;
+  _isNull?: InputMaybe<Scalars['Boolean']['input']>;
+  _lt?: InputMaybe<Scalars['timestamptz']['input']>;
+  _lte?: InputMaybe<Scalars['timestamptz']['input']>;
+  _neq?: InputMaybe<Scalars['timestamptz']['input']>;
+  _nin?: InputMaybe<Array<Scalars['timestamptz']['input']>>;
+};
+
+/** columns and relationships of "transfer" */
+export type Transfer = Node & {
+  __typename?: 'Transfer';
+  amount: Scalars['numeric']['output'];
+  blockNumber: Scalars['Int']['output'];
+  /** An object relationship */
+  comment?: Maybe<TxComment>;
+  commentId?: Maybe<Scalars['String']['output']>;
+  /** An object relationship */
+  event?: Maybe<Event>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  /** An object relationship */
+  from?: Maybe<Account>;
+  fromId?: Maybe<Scalars['String']['output']>;
+  id: Scalars['ID']['output'];
+  timestamp: Scalars['timestamptz']['output'];
+  /** An object relationship */
+  to?: Maybe<Account>;
+  toId?: Maybe<Scalars['String']['output']>;
+};
+
+/** aggregated selection of "transfer" */
+export type TransferAggregate = {
+  __typename?: 'TransferAggregate';
+  aggregate?: Maybe<TransferAggregateFields>;
+  nodes: Array<Transfer>;
+};
+
+export type TransferAggregateBoolExp = {
+  count?: InputMaybe<TransferAggregateBoolExpCount>;
+};
+
+/** aggregate fields of "transfer" */
+export type TransferAggregateFields = {
+  __typename?: 'TransferAggregateFields';
+  avg?: Maybe<TransferAvgFields>;
+  count: Scalars['Int']['output'];
+  max?: Maybe<TransferMaxFields>;
+  min?: Maybe<TransferMinFields>;
+  stddev?: Maybe<TransferStddevFields>;
+  stddevPop?: Maybe<TransferStddevPopFields>;
+  stddevSamp?: Maybe<TransferStddevSampFields>;
+  sum?: Maybe<TransferSumFields>;
+  varPop?: Maybe<TransferVarPopFields>;
+  varSamp?: Maybe<TransferVarSampFields>;
+  variance?: Maybe<TransferVarianceFields>;
+};
+
+
+/** aggregate fields of "transfer" */
+export type TransferAggregateFieldsCountArgs = {
+  columns?: InputMaybe<Array<TransferSelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+/** order by aggregate values of table "transfer" */
+export type TransferAggregateOrderBy = {
+  avg?: InputMaybe<TransferAvgOrderBy>;
+  count?: InputMaybe<OrderBy>;
+  max?: InputMaybe<TransferMaxOrderBy>;
+  min?: InputMaybe<TransferMinOrderBy>;
+  stddev?: InputMaybe<TransferStddevOrderBy>;
+  stddevPop?: InputMaybe<TransferStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<TransferStddevSampOrderBy>;
+  sum?: InputMaybe<TransferSumOrderBy>;
+  varPop?: InputMaybe<TransferVarPopOrderBy>;
+  varSamp?: InputMaybe<TransferVarSampOrderBy>;
+  variance?: InputMaybe<TransferVarianceOrderBy>;
+};
+
+/** aggregate avg on columns */
+export type TransferAvgFields = {
+  __typename?: 'TransferAvgFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by avg() on columns of table "transfer" */
+export type TransferAvgOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** Boolean expression to filter rows from the table "transfer". All fields are combined with a logical 'AND'. */
+export type TransferBoolExp = {
+  _and?: InputMaybe<Array<TransferBoolExp>>;
+  _not?: InputMaybe<TransferBoolExp>;
+  _or?: InputMaybe<Array<TransferBoolExp>>;
+  amount?: InputMaybe<NumericComparisonExp>;
+  blockNumber?: InputMaybe<IntComparisonExp>;
+  comment?: InputMaybe<TxCommentBoolExp>;
+  commentId?: InputMaybe<StringComparisonExp>;
+  event?: InputMaybe<EventBoolExp>;
+  eventId?: InputMaybe<StringComparisonExp>;
+  from?: InputMaybe<AccountBoolExp>;
+  fromId?: InputMaybe<StringComparisonExp>;
+  id?: InputMaybe<StringComparisonExp>;
+  timestamp?: InputMaybe<TimestamptzComparisonExp>;
+  to?: InputMaybe<AccountBoolExp>;
+  toId?: InputMaybe<StringComparisonExp>;
+};
+
+/** A Relay connection object on "transfer" */
+export type TransferConnection = {
+  __typename?: 'TransferConnection';
+  edges: Array<TransferEdge>;
+  pageInfo: PageInfo;
+};
+
+export type TransferEdge = {
+  __typename?: 'TransferEdge';
+  cursor: Scalars['String']['output'];
+  node: Transfer;
+};
+
+/** aggregate max on columns */
+export type TransferMaxFields = {
+  __typename?: 'TransferMaxFields';
+  amount?: Maybe<Scalars['numeric']['output']>;
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+  commentId?: Maybe<Scalars['String']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  fromId?: Maybe<Scalars['String']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  timestamp?: Maybe<Scalars['timestamptz']['output']>;
+  toId?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by max() on columns of table "transfer" */
+export type TransferMaxOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+  commentId?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  fromId?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  timestamp?: InputMaybe<OrderBy>;
+  toId?: InputMaybe<OrderBy>;
+};
+
+/** aggregate min on columns */
+export type TransferMinFields = {
+  __typename?: 'TransferMinFields';
+  amount?: Maybe<Scalars['numeric']['output']>;
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+  commentId?: Maybe<Scalars['String']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  fromId?: Maybe<Scalars['String']['output']>;
+  id?: Maybe<Scalars['String']['output']>;
+  timestamp?: Maybe<Scalars['timestamptz']['output']>;
+  toId?: Maybe<Scalars['String']['output']>;
+};
+
+/** order by min() on columns of table "transfer" */
+export type TransferMinOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+  commentId?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  fromId?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  timestamp?: InputMaybe<OrderBy>;
+  toId?: InputMaybe<OrderBy>;
+};
+
+/** Ordering options when selecting data from "transfer". */
+export type TransferOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+  comment?: InputMaybe<TxCommentOrderBy>;
+  commentId?: InputMaybe<OrderBy>;
+  event?: InputMaybe<EventOrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  from?: InputMaybe<AccountOrderBy>;
+  fromId?: InputMaybe<OrderBy>;
+  id?: InputMaybe<OrderBy>;
+  timestamp?: InputMaybe<OrderBy>;
+  to?: InputMaybe<AccountOrderBy>;
+  toId?: InputMaybe<OrderBy>;
+};
+
+/** select columns of table "transfer" */
+export enum TransferSelectColumn {
+  /** column name */
+  Amount = 'amount',
+  /** column name */
+  BlockNumber = 'blockNumber',
+  /** column name */
+  CommentId = 'commentId',
+  /** column name */
+  EventId = 'eventId',
+  /** column name */
+  FromId = 'fromId',
+  /** column name */
+  Id = 'id',
+  /** column name */
+  Timestamp = 'timestamp',
+  /** column name */
+  ToId = 'toId'
+}
+
+/** aggregate stddev on columns */
+export type TransferStddevFields = {
+  __typename?: 'TransferStddevFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddev() on columns of table "transfer" */
+export type TransferStddevOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevPop on columns */
+export type TransferStddevPopFields = {
+  __typename?: 'TransferStddevPopFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevPop() on columns of table "transfer" */
+export type TransferStddevPopOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate stddevSamp on columns */
+export type TransferStddevSampFields = {
+  __typename?: 'TransferStddevSampFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by stddevSamp() on columns of table "transfer" */
+export type TransferStddevSampOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate sum on columns */
+export type TransferSumFields = {
+  __typename?: 'TransferSumFields';
+  amount?: Maybe<Scalars['numeric']['output']>;
+  blockNumber?: Maybe<Scalars['Int']['output']>;
+};
+
+/** order by sum() on columns of table "transfer" */
+export type TransferSumOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varPop on columns */
+export type TransferVarPopFields = {
+  __typename?: 'TransferVarPopFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varPop() on columns of table "transfer" */
+export type TransferVarPopOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate varSamp on columns */
+export type TransferVarSampFields = {
+  __typename?: 'TransferVarSampFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by varSamp() on columns of table "transfer" */
+export type TransferVarSampOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** aggregate variance on columns */
+export type TransferVarianceFields = {
+  __typename?: 'TransferVarianceFields';
+  amount?: Maybe<Scalars['Float']['output']>;
+  blockNumber?: Maybe<Scalars['Float']['output']>;
+};
+
+/** order by variance() on columns of table "transfer" */
+export type TransferVarianceOrderBy = {
+  amount?: InputMaybe<OrderBy>;
+  blockNumber?: InputMaybe<OrderBy>;
+};
+
+/** columns and relationships of "tx_comment" */
+export type TxComment = Node & {
+  __typename?: 'TxComment';
+  /** An object relationship */
+  author?: Maybe<Account>;
+  authorId?: Maybe<Scalars['String']['output']>;
+  blockNumber: Scalars['Int']['output'];
+  /** An object relationship */
+  event?: Maybe<Event>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  hash: Scalars['String']['output'];
+  id: Scalars['ID']['output'];
+  remark: Scalars['String']['output'];
+  remarkBytes: Scalars['bytea']['output'];
+  type?: Maybe<CommentTypeEnum>;
+};
+
+/** aggregated selection of "tx_comment" */
+export type TxCommentAggregate = {
+  __typename?: 'TxCommentAggregate';
+  aggregate?: Maybe<TxCommentAggregateFields>;
+  nodes: Array<TxComment>;
+};
+
+export type TxCommentAggregateBoolExp = {
+  count?: InputMaybe<TxCommentAggregateBoolExpCount>;
+};
+
+/** aggregate fields of "tx_comment" */
+export type TxCommentAggregateFields = {
+  __typename?: 'TxCommentAggregateFields';
+  avg?: Maybe<TxCommentAvgFields>;
+  count: Scalars['Int']['output'];
+  max?: Maybe<TxCommentMaxFields>;
+  min?: Maybe<TxCommentMinFields>;
+  stddev?: Maybe<TxCommentStddevFields>;
+  stddevPop?: Maybe<TxCommentStddevPopFields>;
+  stddevSamp?: Maybe<TxCommentStddevSampFields>;
+  sum?: Maybe<TxCommentSumFields>;
+  varPop?: Maybe<TxCommentVarPopFields>;
+  varSamp?: Maybe<TxCommentVarSampFields>;
+  variance?: Maybe<TxCommentVarianceFields>;
+};
+
+
+/** aggregate fields of "tx_comment" */
+export type TxCommentAggregateFieldsCountArgs = {
+  columns?: InputMaybe<Array<TxCommentSelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+};
+
+/** order by aggregate values of table "tx_comment" */
+export type TxCommentAggregateOrderBy = {
+  avg?: InputMaybe<TxCommentAvgOrderBy>;
+  count?: InputMaybe<OrderBy>;
+  max?: InputMaybe<TxCommentMaxOrderBy>;
+  min?: InputMaybe<TxCommentMinOrderBy>;
+  stddev?: InputMaybe<TxCommentStddevOrderBy>;
+  stddevPop?: InputMaybe<TxCommentStddevPopOrderBy>;
+  stddevSamp?: InputMaybe<TxCommentStddevSampOrderBy>;
+  sum?: InputMaybe<TxCommentSumOrderBy>;
+  varPop?: InputMaybe<TxCommentVarPopOrderBy>;
+  varSamp?: InputMaybe<TxCommentVarSampOrderBy>;
+  variance?: InputMaybe<TxCommentVarianceOrderBy>;
 };
 
 /** aggregate avg on columns */
-export type TransferAvgFields = {
-  __typename?: 'TransferAvgFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentAvgFields = {
+  __typename?: 'TxCommentAvgFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by avg() on columns of table "transfer" */
-export type TransferAvgOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by avg() on columns of table "tx_comment" */
+export type TxCommentAvgOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
-/** Boolean expression to filter rows from the table "transfer". All fields are combined with a logical 'AND'. */
-export type TransferBoolExp = {
-  _and?: InputMaybe<Array<TransferBoolExp>>;
-  _not?: InputMaybe<TransferBoolExp>;
-  _or?: InputMaybe<Array<TransferBoolExp>>;
-  amount?: InputMaybe<NumericComparisonExp>;
+/** Boolean expression to filter rows from the table "tx_comment". All fields are combined with a logical 'AND'. */
+export type TxCommentBoolExp = {
+  _and?: InputMaybe<Array<TxCommentBoolExp>>;
+  _not?: InputMaybe<TxCommentBoolExp>;
+  _or?: InputMaybe<Array<TxCommentBoolExp>>;
+  author?: InputMaybe<AccountBoolExp>;
+  authorId?: InputMaybe<StringComparisonExp>;
   blockNumber?: InputMaybe<IntComparisonExp>;
-  comment?: InputMaybe<StringComparisonExp>;
-  from?: InputMaybe<AccountBoolExp>;
-  fromId?: InputMaybe<StringComparisonExp>;
+  event?: InputMaybe<EventBoolExp>;
+  eventId?: InputMaybe<StringComparisonExp>;
+  hash?: InputMaybe<StringComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
-  timestamp?: InputMaybe<TimestamptzComparisonExp>;
-  to?: InputMaybe<AccountBoolExp>;
-  toId?: InputMaybe<StringComparisonExp>;
+  remark?: InputMaybe<StringComparisonExp>;
+  remarkBytes?: InputMaybe<ByteaComparisonExp>;
+  type?: InputMaybe<CommentTypeEnumComparisonExp>;
 };
 
-/** A Relay connection object on "transfer" */
-export type TransferConnection = {
-  __typename?: 'TransferConnection';
-  edges: Array<TransferEdge>;
+/** A Relay connection object on "tx_comment" */
+export type TxCommentConnection = {
+  __typename?: 'TxCommentConnection';
+  edges: Array<TxCommentEdge>;
   pageInfo: PageInfo;
 };
 
-export type TransferEdge = {
-  __typename?: 'TransferEdge';
+export type TxCommentEdge = {
+  __typename?: 'TxCommentEdge';
   cursor: Scalars['String']['output'];
-  node: Transfer;
+  node: TxComment;
 };
 
 /** aggregate max on columns */
-export type TransferMaxFields = {
-  __typename?: 'TransferMaxFields';
-  amount?: Maybe<Scalars['numeric']['output']>;
+export type TxCommentMaxFields = {
+  __typename?: 'TxCommentMaxFields';
+  authorId?: Maybe<Scalars['String']['output']>;
   blockNumber?: Maybe<Scalars['Int']['output']>;
-  comment?: Maybe<Scalars['String']['output']>;
-  fromId?: Maybe<Scalars['String']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  hash?: Maybe<Scalars['String']['output']>;
   id?: Maybe<Scalars['String']['output']>;
-  timestamp?: Maybe<Scalars['timestamptz']['output']>;
-  toId?: Maybe<Scalars['String']['output']>;
+  remark?: Maybe<Scalars['String']['output']>;
 };
 
-/** order by max() on columns of table "transfer" */
-export type TransferMaxOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by max() on columns of table "tx_comment" */
+export type TxCommentMaxOrderBy = {
+  authorId?: InputMaybe<OrderBy>;
   blockNumber?: InputMaybe<OrderBy>;
-  comment?: InputMaybe<OrderBy>;
-  fromId?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  hash?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
-  timestamp?: InputMaybe<OrderBy>;
-  toId?: InputMaybe<OrderBy>;
+  remark?: InputMaybe<OrderBy>;
 };
 
 /** aggregate min on columns */
-export type TransferMinFields = {
-  __typename?: 'TransferMinFields';
-  amount?: Maybe<Scalars['numeric']['output']>;
+export type TxCommentMinFields = {
+  __typename?: 'TxCommentMinFields';
+  authorId?: Maybe<Scalars['String']['output']>;
   blockNumber?: Maybe<Scalars['Int']['output']>;
-  comment?: Maybe<Scalars['String']['output']>;
-  fromId?: Maybe<Scalars['String']['output']>;
+  eventId?: Maybe<Scalars['String']['output']>;
+  hash?: Maybe<Scalars['String']['output']>;
   id?: Maybe<Scalars['String']['output']>;
-  timestamp?: Maybe<Scalars['timestamptz']['output']>;
-  toId?: Maybe<Scalars['String']['output']>;
+  remark?: Maybe<Scalars['String']['output']>;
 };
 
-/** order by min() on columns of table "transfer" */
-export type TransferMinOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by min() on columns of table "tx_comment" */
+export type TxCommentMinOrderBy = {
+  authorId?: InputMaybe<OrderBy>;
   blockNumber?: InputMaybe<OrderBy>;
-  comment?: InputMaybe<OrderBy>;
-  fromId?: InputMaybe<OrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  hash?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
-  timestamp?: InputMaybe<OrderBy>;
-  toId?: InputMaybe<OrderBy>;
+  remark?: InputMaybe<OrderBy>;
 };
 
-/** Ordering options when selecting data from "transfer". */
-export type TransferOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** Ordering options when selecting data from "tx_comment". */
+export type TxCommentOrderBy = {
+  author?: InputMaybe<AccountOrderBy>;
+  authorId?: InputMaybe<OrderBy>;
   blockNumber?: InputMaybe<OrderBy>;
-  comment?: InputMaybe<OrderBy>;
-  from?: InputMaybe<AccountOrderBy>;
-  fromId?: InputMaybe<OrderBy>;
+  event?: InputMaybe<EventOrderBy>;
+  eventId?: InputMaybe<OrderBy>;
+  hash?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
-  timestamp?: InputMaybe<OrderBy>;
-  to?: InputMaybe<AccountOrderBy>;
-  toId?: InputMaybe<OrderBy>;
+  remark?: InputMaybe<OrderBy>;
+  remarkBytes?: InputMaybe<OrderBy>;
+  type?: InputMaybe<OrderBy>;
 };
 
-/** select columns of table "transfer" */
-export enum TransferSelectColumn {
+/** select columns of table "tx_comment" */
+export enum TxCommentSelectColumn {
   /** column name */
-  Amount = 'amount',
+  AuthorId = 'authorId',
   /** column name */
   BlockNumber = 'blockNumber',
   /** column name */
-  Comment = 'comment',
+  EventId = 'eventId',
   /** column name */
-  FromId = 'fromId',
+  Hash = 'hash',
   /** column name */
   Id = 'id',
   /** column name */
-  Timestamp = 'timestamp',
+  Remark = 'remark',
   /** column name */
-  ToId = 'toId'
+  RemarkBytes = 'remarkBytes',
+  /** column name */
+  Type = 'type'
 }
 
 /** aggregate stddev on columns */
-export type TransferStddevFields = {
-  __typename?: 'TransferStddevFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentStddevFields = {
+  __typename?: 'TxCommentStddevFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by stddev() on columns of table "transfer" */
-export type TransferStddevOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by stddev() on columns of table "tx_comment" */
+export type TxCommentStddevOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate stddevPop on columns */
-export type TransferStddevPopFields = {
-  __typename?: 'TransferStddevPopFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentStddevPopFields = {
+  __typename?: 'TxCommentStddevPopFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by stddevPop() on columns of table "transfer" */
-export type TransferStddevPopOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by stddevPop() on columns of table "tx_comment" */
+export type TxCommentStddevPopOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate stddevSamp on columns */
-export type TransferStddevSampFields = {
-  __typename?: 'TransferStddevSampFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentStddevSampFields = {
+  __typename?: 'TxCommentStddevSampFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by stddevSamp() on columns of table "transfer" */
-export type TransferStddevSampOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by stddevSamp() on columns of table "tx_comment" */
+export type TxCommentStddevSampOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate sum on columns */
-export type TransferSumFields = {
-  __typename?: 'TransferSumFields';
-  amount?: Maybe<Scalars['numeric']['output']>;
+export type TxCommentSumFields = {
+  __typename?: 'TxCommentSumFields';
   blockNumber?: Maybe<Scalars['Int']['output']>;
 };
 
-/** order by sum() on columns of table "transfer" */
-export type TransferSumOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by sum() on columns of table "tx_comment" */
+export type TxCommentSumOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate varPop on columns */
-export type TransferVarPopFields = {
-  __typename?: 'TransferVarPopFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentVarPopFields = {
+  __typename?: 'TxCommentVarPopFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by varPop() on columns of table "transfer" */
-export type TransferVarPopOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by varPop() on columns of table "tx_comment" */
+export type TxCommentVarPopOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate varSamp on columns */
-export type TransferVarSampFields = {
-  __typename?: 'TransferVarSampFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentVarSampFields = {
+  __typename?: 'TxCommentVarSampFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by varSamp() on columns of table "transfer" */
-export type TransferVarSampOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by varSamp() on columns of table "tx_comment" */
+export type TxCommentVarSampOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** aggregate variance on columns */
-export type TransferVarianceFields = {
-  __typename?: 'TransferVarianceFields';
-  amount?: Maybe<Scalars['Float']['output']>;
+export type TxCommentVarianceFields = {
+  __typename?: 'TxCommentVarianceFields';
   blockNumber?: Maybe<Scalars['Float']['output']>;
 };
 
-/** order by variance() on columns of table "transfer" */
-export type TransferVarianceOrderBy = {
-  amount?: InputMaybe<OrderBy>;
+/** order by variance() on columns of table "tx_comment" */
+export type TxCommentVarianceOrderBy = {
   blockNumber?: InputMaybe<OrderBy>;
 };
 
 /** columns and relationships of "ud_history" */
 export type UdHistory = Node & {
   __typename?: 'UdHistory';
-  amount: Scalars['Int']['output'];
+  amount: Scalars['numeric']['output'];
   blockNumber: Scalars['Int']['output'];
   id: Scalars['ID']['output'];
   /** An object relationship */
@@ -3858,7 +5124,7 @@ export type UdHistoryBoolExp = {
   _and?: InputMaybe<Array<UdHistoryBoolExp>>;
   _not?: InputMaybe<UdHistoryBoolExp>;
   _or?: InputMaybe<Array<UdHistoryBoolExp>>;
-  amount?: InputMaybe<IntComparisonExp>;
+  amount?: InputMaybe<NumericComparisonExp>;
   blockNumber?: InputMaybe<IntComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
   identity?: InputMaybe<IdentityBoolExp>;
@@ -3973,8 +5239,9 @@ export type UdReeval = Node & {
   id: Scalars['ID']['output'];
   membersCount: Scalars['Int']['output'];
   monetaryMass: Scalars['numeric']['output'];
-  newUdAmount: Scalars['Int']['output'];
+  newUdAmount: Scalars['numeric']['output'];
   timestamp: Scalars['timestamptz']['output'];
+  udIndex: Scalars['Int']['output'];
 };
 
 /** Boolean expression to filter rows from the table "ud_reeval". All fields are combined with a logical 'AND'. */
@@ -3988,8 +5255,9 @@ export type UdReevalBoolExp = {
   id?: InputMaybe<StringComparisonExp>;
   membersCount?: InputMaybe<IntComparisonExp>;
   monetaryMass?: InputMaybe<NumericComparisonExp>;
-  newUdAmount?: InputMaybe<IntComparisonExp>;
+  newUdAmount?: InputMaybe<NumericComparisonExp>;
   timestamp?: InputMaybe<TimestamptzComparisonExp>;
+  udIndex?: InputMaybe<IntComparisonExp>;
 };
 
 /** A Relay connection object on "ud_reeval" */
@@ -4015,6 +5283,7 @@ export type UdReevalOrderBy = {
   monetaryMass?: InputMaybe<OrderBy>;
   newUdAmount?: InputMaybe<OrderBy>;
   timestamp?: InputMaybe<OrderBy>;
+  udIndex?: InputMaybe<OrderBy>;
 };
 
 /** select columns of table "ud_reeval" */
@@ -4032,18 +5301,21 @@ export enum UdReevalSelectColumn {
   /** column name */
   NewUdAmount = 'newUdAmount',
   /** column name */
-  Timestamp = 'timestamp'
+  Timestamp = 'timestamp',
+  /** column name */
+  UdIndex = 'udIndex'
 }
 
 /** columns and relationships of "universal_dividend" */
 export type UniversalDividend = Node & {
   __typename?: 'UniversalDividend';
-  amount: Scalars['Int']['output'];
+  amount: Scalars['numeric']['output'];
   blockNumber: Scalars['Int']['output'];
   /** An object relationship */
   event?: Maybe<Event>;
   eventId?: Maybe<Scalars['String']['output']>;
   id: Scalars['ID']['output'];
+  index: Scalars['Int']['output'];
   membersCount: Scalars['Int']['output'];
   monetaryMass: Scalars['numeric']['output'];
   timestamp: Scalars['timestamptz']['output'];
@@ -4054,11 +5326,12 @@ export type UniversalDividendBoolExp = {
   _and?: InputMaybe<Array<UniversalDividendBoolExp>>;
   _not?: InputMaybe<UniversalDividendBoolExp>;
   _or?: InputMaybe<Array<UniversalDividendBoolExp>>;
-  amount?: InputMaybe<IntComparisonExp>;
+  amount?: InputMaybe<NumericComparisonExp>;
   blockNumber?: InputMaybe<IntComparisonExp>;
   event?: InputMaybe<EventBoolExp>;
   eventId?: InputMaybe<StringComparisonExp>;
   id?: InputMaybe<StringComparisonExp>;
+  index?: InputMaybe<IntComparisonExp>;
   membersCount?: InputMaybe<IntComparisonExp>;
   monetaryMass?: InputMaybe<NumericComparisonExp>;
   timestamp?: InputMaybe<TimestamptzComparisonExp>;
@@ -4084,6 +5357,7 @@ export type UniversalDividendOrderBy = {
   event?: InputMaybe<EventOrderBy>;
   eventId?: InputMaybe<OrderBy>;
   id?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
   membersCount?: InputMaybe<OrderBy>;
   monetaryMass?: InputMaybe<OrderBy>;
   timestamp?: InputMaybe<OrderBy>;
@@ -4100,6 +5374,8 @@ export enum UniversalDividendSelectColumn {
   /** column name */
   Id = 'id',
   /** column name */
+  Index = 'index',
+  /** column name */
   MembersCount = 'membersCount',
   /** column name */
   MonetaryMass = 'monetaryMass',
@@ -4107,6 +5383,63 @@ export enum UniversalDividendSelectColumn {
   Timestamp = 'timestamp'
 }
 
+/** columns and relationships of "validator" */
+export type Validator = Node & {
+  __typename?: 'Validator';
+  id: Scalars['ID']['output'];
+  index: Scalars['Int']['output'];
+};
+
+/** Boolean expression to filter rows from the table "validator". All fields are combined with a logical 'AND'. */
+export type ValidatorBoolExp = {
+  _and?: InputMaybe<Array<ValidatorBoolExp>>;
+  _not?: InputMaybe<ValidatorBoolExp>;
+  _or?: InputMaybe<Array<ValidatorBoolExp>>;
+  id?: InputMaybe<StringComparisonExp>;
+  index?: InputMaybe<IntComparisonExp>;
+};
+
+/** A Relay connection object on "validator" */
+export type ValidatorConnection = {
+  __typename?: 'ValidatorConnection';
+  edges: Array<ValidatorEdge>;
+  pageInfo: PageInfo;
+};
+
+export type ValidatorEdge = {
+  __typename?: 'ValidatorEdge';
+  cursor: Scalars['String']['output'];
+  node: Validator;
+};
+
+/** Ordering options when selecting data from "validator". */
+export type ValidatorOrderBy = {
+  id?: InputMaybe<OrderBy>;
+  index?: InputMaybe<OrderBy>;
+};
+
+/** select columns of table "validator" */
+export enum ValidatorSelectColumn {
+  /** column name */
+  Id = 'id',
+  /** column name */
+  Index = 'index'
+}
+
+export type AccountAggregateBoolExpBool_And = {
+  arguments: AccountSelectColumnAccountAggregateBoolExpBool_AndArgumentsColumns;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<AccountBoolExp>;
+  predicate: BooleanComparisonExp;
+};
+
+export type AccountAggregateBoolExpBool_Or = {
+  arguments: AccountSelectColumnAccountAggregateBoolExpBool_OrArgumentsColumns;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<AccountBoolExp>;
+  predicate: BooleanComparisonExp;
+};
+
 export type AccountAggregateBoolExpCount = {
   arguments?: InputMaybe<Array<AccountSelectColumn>>;
   distinct?: InputMaybe<Scalars['Boolean']['input']>;
@@ -4202,6 +5535,27 @@ export type GetUdHistoryArgs = {
   identity_row?: InputMaybe<Scalars['identity_scalar']['input']>;
 };
 
+export type IdentityAggregateBoolExpBool_And = {
+  arguments: IdentitySelectColumnIdentityAggregateBoolExpBool_AndArgumentsColumns;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<IdentityBoolExp>;
+  predicate: BooleanComparisonExp;
+};
+
+export type IdentityAggregateBoolExpBool_Or = {
+  arguments: IdentitySelectColumnIdentityAggregateBoolExpBool_OrArgumentsColumns;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<IdentityBoolExp>;
+  predicate: BooleanComparisonExp;
+};
+
+export type IdentityAggregateBoolExpCount = {
+  arguments?: InputMaybe<Array<IdentitySelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<IdentityBoolExp>;
+  predicate: IntComparisonExp;
+};
+
 export type MembershipEventAggregateBoolExpCount = {
   arguments?: InputMaybe<Array<MembershipEventSelectColumn>>;
   distinct?: InputMaybe<Scalars['Boolean']['input']>;
@@ -4236,16 +5590,26 @@ export type Query_Root = {
   /** fetch data from the table: "membership_event" */
   membershipEventConnection: MembershipEventConnection;
   node?: Maybe<Node>;
+  /** fetch data from the table: "population_history" */
+  populationHistoryConnection: PopulationHistoryConnection;
   /** fetch data from the table: "smith_cert" */
   smithCertConnection: SmithCertConnection;
+  /** fetch data from the table: "smith" */
+  smithConnection: SmithConnection;
+  /** fetch data from the table: "smith_event" */
+  smithEventConnection: SmithEventConnection;
   /** fetch data from the table: "transfer" */
   transferConnection: TransferConnection;
+  /** fetch data from the table: "tx_comment" */
+  txCommentConnection: TxCommentConnection;
   /** fetch data from the table: "ud_history" */
   udHistoryConnection: UdHistoryConnection;
   /** fetch data from the table: "ud_reeval" */
   udReevalConnection: UdReevalConnection;
   /** fetch data from the table: "universal_dividend" */
   universalDividendConnection: UniversalDividendConnection;
+  /** fetch data from the table: "validator" */
+  validatorConnection: ValidatorConnection;
 };
 
 
@@ -4387,6 +5751,17 @@ export type Query_RootNodeArgs = {
 };
 
 
+export type Query_RootPopulationHistoryConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<PopulationHistorySelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<PopulationHistoryOrderBy>>;
+  where?: InputMaybe<PopulationHistoryBoolExp>;
+};
+
+
 export type Query_RootSmithCertConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4398,6 +5773,28 @@ export type Query_RootSmithCertConnectionArgs = {
 };
 
 
+export type Query_RootSmithConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithOrderBy>>;
+  where?: InputMaybe<SmithBoolExp>;
+};
+
+
+export type Query_RootSmithEventConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithEventSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithEventOrderBy>>;
+  where?: InputMaybe<SmithEventBoolExp>;
+};
+
+
 export type Query_RootTransferConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4409,6 +5806,17 @@ export type Query_RootTransferConnectionArgs = {
 };
 
 
+export type Query_RootTxCommentConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<TxCommentSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<TxCommentOrderBy>>;
+  where?: InputMaybe<TxCommentBoolExp>;
+};
+
+
 export type Query_RootUdHistoryConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4441,6 +5849,17 @@ export type Query_RootUniversalDividendConnectionArgs = {
   where?: InputMaybe<UniversalDividendBoolExp>;
 };
 
+
+export type Query_RootValidatorConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<ValidatorSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<ValidatorOrderBy>>;
+  where?: InputMaybe<ValidatorBoolExp>;
+};
+
 export type SmithCertAggregateBoolExpCount = {
   arguments?: InputMaybe<Array<SmithCertSelectColumn>>;
   distinct?: InputMaybe<Scalars['Boolean']['input']>;
@@ -4448,6 +5867,13 @@ export type SmithCertAggregateBoolExpCount = {
   predicate: IntComparisonExp;
 };
 
+export type SmithEventAggregateBoolExpCount = {
+  arguments?: InputMaybe<Array<SmithEventSelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<SmithEventBoolExp>;
+  predicate: IntComparisonExp;
+};
+
 export type Subscription_Root = {
   __typename?: 'subscription_root';
   /** fetch data from the table: "account" */
@@ -4475,16 +5901,26 @@ export type Subscription_Root = {
   /** fetch data from the table: "membership_event" */
   membershipEventConnection: MembershipEventConnection;
   node?: Maybe<Node>;
+  /** fetch data from the table: "population_history" */
+  populationHistoryConnection: PopulationHistoryConnection;
   /** fetch data from the table: "smith_cert" */
   smithCertConnection: SmithCertConnection;
+  /** fetch data from the table: "smith" */
+  smithConnection: SmithConnection;
+  /** fetch data from the table: "smith_event" */
+  smithEventConnection: SmithEventConnection;
   /** fetch data from the table: "transfer" */
   transferConnection: TransferConnection;
+  /** fetch data from the table: "tx_comment" */
+  txCommentConnection: TxCommentConnection;
   /** fetch data from the table: "ud_history" */
   udHistoryConnection: UdHistoryConnection;
   /** fetch data from the table: "ud_reeval" */
   udReevalConnection: UdReevalConnection;
   /** fetch data from the table: "universal_dividend" */
   universalDividendConnection: UniversalDividendConnection;
+  /** fetch data from the table: "validator" */
+  validatorConnection: ValidatorConnection;
 };
 
 
@@ -4626,6 +6062,17 @@ export type Subscription_RootNodeArgs = {
 };
 
 
+export type Subscription_RootPopulationHistoryConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<PopulationHistorySelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<PopulationHistoryOrderBy>>;
+  where?: InputMaybe<PopulationHistoryBoolExp>;
+};
+
+
 export type Subscription_RootSmithCertConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4637,6 +6084,28 @@ export type Subscription_RootSmithCertConnectionArgs = {
 };
 
 
+export type Subscription_RootSmithConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithOrderBy>>;
+  where?: InputMaybe<SmithBoolExp>;
+};
+
+
+export type Subscription_RootSmithEventConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<SmithEventSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<SmithEventOrderBy>>;
+  where?: InputMaybe<SmithEventBoolExp>;
+};
+
+
 export type Subscription_RootTransferConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4648,6 +6117,17 @@ export type Subscription_RootTransferConnectionArgs = {
 };
 
 
+export type Subscription_RootTxCommentConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<TxCommentSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<TxCommentOrderBy>>;
+  where?: InputMaybe<TxCommentBoolExp>;
+};
+
+
 export type Subscription_RootUdHistoryConnectionArgs = {
   after?: InputMaybe<Scalars['String']['input']>;
   before?: InputMaybe<Scalars['String']['input']>;
@@ -4680,6 +6160,17 @@ export type Subscription_RootUniversalDividendConnectionArgs = {
   where?: InputMaybe<UniversalDividendBoolExp>;
 };
 
+
+export type Subscription_RootValidatorConnectionArgs = {
+  after?: InputMaybe<Scalars['String']['input']>;
+  before?: InputMaybe<Scalars['String']['input']>;
+  distinctOn?: InputMaybe<Array<ValidatorSelectColumn>>;
+  first?: InputMaybe<Scalars['Int']['input']>;
+  last?: InputMaybe<Scalars['Int']['input']>;
+  orderBy?: InputMaybe<Array<ValidatorOrderBy>>;
+  where?: InputMaybe<ValidatorBoolExp>;
+};
+
 export type TransferAggregateBoolExpCount = {
   arguments?: InputMaybe<Array<TransferSelectColumn>>;
   distinct?: InputMaybe<Scalars['Boolean']['input']>;
@@ -4687,6 +6178,13 @@ export type TransferAggregateBoolExpCount = {
   predicate: IntComparisonExp;
 };
 
+export type TxCommentAggregateBoolExpCount = {
+  arguments?: InputMaybe<Array<TxCommentSelectColumn>>;
+  distinct?: InputMaybe<Scalars['Boolean']['input']>;
+  filter?: InputMaybe<TxCommentBoolExp>;
+  predicate: IntComparisonExp;
+};
+
 export type LightIdentityFragment = { __typename?: 'Identity', id: string, index: number, name: string, accountId?: string | null, status?: IdentityStatusEnum | null, isMember: boolean, createdOn: number, membershipHistory: Array<{ __typename: 'MembershipEvent', id: string, eventType?: EventTypeEnum | null }> };
 
 export type LightAccountFragment = { __typename?: 'Account', id: string, identity?: { __typename?: 'Identity', id: string, index: number, name: string, accountId?: string | null, status?: IdentityStatusEnum | null, isMember: boolean, createdOn: number, membershipHistory: Array<{ __typename: 'MembershipEvent', id: string, eventType?: EventTypeEnum | null }> } | null };
@@ -5384,11 +6882,16 @@ export const WotSearchByUidDocument = gql`
       "Identity",
       "ItemsCounter",
       "MembershipEvent",
+      "PopulationHistory",
+      "Smith",
       "SmithCert",
+      "SmithEvent",
       "Transfer",
+      "TxComment",
       "UdHistory",
       "UdReeval",
-      "UniversalDividend"
+      "UniversalDividend",
+      "Validator"
     ]
   }
 };
diff --git a/src/app/network/indexer/indexer.service.ts b/src/app/network/indexer/indexer.service.ts
index 7ea83d4fe535bdb4294c04f81e451bb3d2b86a37..7d4a989a9b541eb4e38b0e2a2abc91a80119a53d 100644
--- a/src/app/network/indexer/indexer.service.ts
+++ b/src/app/network/indexer/indexer.service.ts
@@ -23,8 +23,7 @@ import {
   TransferFragment,
   UniversalDividendConnection,
 } from './indexer-types.generated';
-import { firstValueFrom, mergeMap, Observable } from 'rxjs';
-import { filter, map } from 'rxjs/operators';
+import { filter, firstValueFrom, map, mergeMap, Observable } from 'rxjs';
 import { Transfer, TransferConverter, TransferSearchFilter } from '@app/transfer/transfer.model';
 import { WotSearchFilter } from '@app/wot/wot.model';
 import { Block, BlockConverter, BlockSearchFilter } from '@app/block/block.model';
@@ -339,17 +338,28 @@ export class IndexerService extends GraphqlService<IndexerState> {
     // Wait settings and storage
     const [settings, currency] = await Promise.all([this.settings.ready(), firstNotNilPromise(this.currency$)]);
 
+    let isPeerAlive: boolean;
     let peer = Peers.fromUri(settings.indexer);
-    if (!peer) {
-      const peers = await this.filterAlivePeers(settings.preferredIndexers);
-      if (!peers.length) {
+
+    if (isNil(peer)) {
+      isPeerAlive = false;
+    } else {
+      isPeerAlive = await this.isPeerAlive(peer);
+    }
+
+    if (!peer || !isPeerAlive) {
+      const preferredFiltered = settings.preferredIndexers.filter((preferred) => preferred !== settings.indexer);
+      if (preferredFiltered.length === 0) throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
+
+      const peers = await this.filterAlivePeers(preferredFiltered);
+      if (peers.length === 0) {
         throw { message: 'ERROR.CHECK_NETWORK_CONNECTION' };
       }
       peer = arrayRandomPick(peers);
     }
 
     const client = await super.createClient(peer, 'indexer');
-
+    settings.indexer = Peers.getHttpUri(peer);
     return {
       peer,
       client,
diff --git a/src/app/network/ipfs/ipfs.service.ts b/src/app/network/ipfs/ipfs.service.ts
index dbcfb3b1993f75fec4a0683bf6df51d6c1515cb1..832b3ca1d853a65cc0df0f6f6b8971d8bfca69f6 100644
--- a/src/app/network/ipfs/ipfs.service.ts
+++ b/src/app/network/ipfs/ipfs.service.ts
@@ -7,6 +7,7 @@ import { StorageService } from '@app/shared/services/storage/storage.service';
 import { Observable } from 'rxjs';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
 import { RxStartableService } from '@app/shared/services/rx-startable-service.class';
+import { HttpClient } from '@angular/common/http';
 
 export interface IpfsState {
   peer: Peer;
@@ -22,7 +23,8 @@ export class IpfsService extends RxStartableService<IpfsState> {
 
   constructor(
     storage: StorageService,
-    private settings: SettingsService
+    private settings: SettingsService,
+    private httpClient: HttpClient
   ) {
     super(storage, {
       name: 'ipfs-service',
@@ -41,14 +43,18 @@ export class IpfsService extends RxStartableService<IpfsState> {
     const settings = await this.settings.ready();
 
     let peer = Peers.fromUri(settings.ipfsGateway);
-    if (!peer) {
-      const peers = await this.filterAlivePeers(settings.preferredIpfsGateways || []);
+    const isPeerAlive = await this.isPeerAlive(peer);
+
+    if (!peer || !isPeerAlive) {
+      const preferredFiltered = settings.preferredIpfsGateways.filter((preferred) => preferred !== settings.ipfsGateway);
+      if (preferredFiltered.length === 0) throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
+
+      const peers = await this.filterAlivePeers(settings.preferredPods);
       if (!peers.length) {
-        throw { message: 'ERROR.CHECK_NETWORK_CONNECTION' };
+        throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
       }
       peer = arrayRandomPick(peers);
     }
-
     const gatewayBaseUrl = Peers.getHttpUri(peer) + '/ipfs/';
 
     return {
@@ -58,29 +64,21 @@ export class IpfsService extends RxStartableService<IpfsState> {
     };
   }
 
-  protected async filterAlivePeers(
-    peers: string[],
-    opts?: {
-      timeout?: number;
-    }
-  ): Promise<Peer[]> {
+  protected async filterAlivePeers(peers: string[]): Promise<Peer[]> {
     return (
-      await Promise.all(
-        peers.map((peer) => Peers.fromUri(peer)).map((peer) => this.isPeerAlive(peer, opts).then((alive) => (alive ? peer : undefined)))
-      )
+      await Promise.all(peers.map((peer) => Peers.fromUri(peer)).map((peer) => this.isPeerAlive(peer).then((alive) => (alive ? peer : undefined))))
     ).filter(isNotNil);
   }
 
-  protected async isPeerAlive(
-    // eslint-disable-next-line @typescript-eslint/no-unused-vars
-    peer: Peer,
-    // eslint-disable-next-line @typescript-eslint/no-unused-vars
-    opts?: {
-      timeout?: number;
+  protected async isPeerAlive(peer: Peer): Promise<boolean> {
+    const url = Peers.getHttpUri(peer) + '/api/v0/version';
+
+    try {
+      await this.httpClient.get(url, {}).toPromise();
+      return true;
+    } catch (err) {
+      console.error(`${this._logPrefix}Le pair IPFS n'est pas accessible:`, peer, err);
+      return false;
     }
-  ): Promise<boolean> {
-    // TODO
-    console.log(`${this._logPrefix}TODO: implement ${this.constructor.name}.isPeerAlive()`, peer);
-    return Promise.resolve(true);
   }
 }
diff --git a/src/app/network/network.service.ts b/src/app/network/network.service.ts
index a2fcb75c5c2ce6c2cb18b1fd1151faa1a40531f1..9ec61953c6a724758617372bc89d82d615cf5a3c 100644
--- a/src/app/network/network.service.ts
+++ b/src/app/network/network.service.ts
@@ -6,13 +6,19 @@ import { abbreviate, WELL_KNOWN_CURRENCIES } from '@app/shared/currencies';
 import { Currency } from '../currency/currency.model';
 import { RxStartableService } from '@app/shared/services/rx-startable-service.class';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
-import { EMPTY, firstValueFrom, mergeMap, Observable, of, race, tap } from 'rxjs';
-import { catchError, filter, map, timeout } from 'rxjs/operators';
-import { arrayRandomPick, isNotNilOrBlank, toNumber } from '@app/shared/functions';
+import { firstValueFrom, mergeMap, Observable, tap, timer } from 'rxjs';
+import { filter, map } from 'rxjs/operators';
+import { arrayRandomPick, isNil, isNotNil, isNotNilOrBlank, toNumber } from '@app/shared/functions';
 import { IndexerService } from './indexer/indexer.service';
 import { fromDateISOString } from '@app/shared/dates';
 import { ContextService } from '@app/shared/services/storage/context.service';
 import { PodService } from '@app/network/pod/pod.service';
+import { HttpClient } from '@angular/common/http';
+import { environment } from '@environments/environment';
+import moment from 'moment';
+import DiscourseAPI from 'discourse2';
+import { JsonFeedItem, JsonTopic, Topic } from '@app/home/feed/feed.model';
+import { Promise } from '@rx-angular/cdk/zone-less/browser';
 
 export interface NetworkState {
   peer: Peer;
@@ -22,6 +28,13 @@ export interface NetworkState {
   api: ApiPromise;
 }
 
+export interface DistancePrecomputionData {
+  height: number;
+  referees_count: number;
+  min_certs_for_referee: number;
+  results: Map<number, number>;
+}
+
 @Injectable({ providedIn: 'root' })
 export class NetworkService extends RxStartableService<NetworkState> {
   indexer = inject(IndexerService);
@@ -39,7 +52,8 @@ export class NetworkService extends RxStartableService<NetworkState> {
 
   constructor(
     private settings: SettingsService,
-    private context: ContextService
+    private context: ContextService,
+    private http: HttpClient
   ) {
     super(settings, {
       name: 'network-service',
@@ -74,18 +88,30 @@ export class NetworkService extends RxStartableService<NetworkState> {
   protected async ngOnStart(): Promise<NetworkState> {
     const settings = await this.settings.ready();
 
+    let isPeerAlive: boolean;
     let peer = Peers.fromUri(settings.peer);
-    if (!peer) {
+
+    if (isNil(peer)) {
+      isPeerAlive = false;
+    } else {
+      isPeerAlive = await this.isPeerAlive(peer);
+    }
+
+    if (!peer || !isPeerAlive) {
+      const preferredFiltered = settings.preferredPeers.filter((preferred) => preferred !== settings.peer);
+      if (preferredFiltered.length === 0) throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
+
       const peers = await this.filterAlivePeers(settings.preferredPeers);
       if (!peers.length) {
-        throw { message: 'ERROR.CHECK_NETWORK_CONNECTION' };
+        throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
       }
       peer = arrayRandomPick(peers);
     }
-
     const wsUri = Peers.getWsUri(peer);
     console.info(`${this._logPrefix}Connecting to peer {${wsUri}}...`);
 
+    settings.peer = wsUri;
+
     // Extract all types from definitions - fast and dirty approach, flatted on 'types'
     // const types = Object.values(definitions).reduce((res: any, { types }): object => {
     //   return { ...res, ...types };
@@ -139,7 +165,9 @@ export class NetworkService extends RxStartableService<NetworkState> {
       ...WELL_KNOWN_CURRENCIES.GDEV.fees, // TODO use G1 defaults
       ...(currency.fees || {}),
     };
-
+    currency.params = {
+      minAccessibleReferees: toNumber(api.consts.distance.minAccessibleReferees),
+    };
     // Read the genesys block hash
     console.debug(`${this._logPrefix}Chain genesis: ${currency.genesis}`);
 
@@ -152,7 +180,9 @@ export class NetworkService extends RxStartableService<NetworkState> {
     // Configure and start indexer and pod
     this.indexer.currency = currency;
     this.pod.currency = currency;
-    await Promise.all([this.indexer.start(), this.pod.start()]);
+    await Promise.all([this.indexer.start(), this.pod.start()]).catch((err) =>
+      console.error(`${this._logPrefix}Error starting indexer or pod:`, err)
+    );
 
     return {
       api,
@@ -170,23 +200,19 @@ export class NetworkService extends RxStartableService<NetworkState> {
   }
 
   protected async filterAlivePeers(peers: string[]): Promise<Peer[]> {
-    const peerObjects = peers.map((peer) => Peers.fromUri(peer));
-
-    try {
-      // Try to get the first responding peer
-      const firstPeer = await firstValueFrom(race(peerObjects.map((peer) => this.isPeerAlive(peer))));
-      return [firstPeer];
-    } catch {
-      // If no quick response, check all peers
-      console.warn(`${this._logPrefix}No quick response, checking all peers...`);
-      const results = await Promise.all(peerObjects.map((peer) => firstValueFrom(this.isPeerAlive(peer).pipe(catchError(() => of(undefined))))));
-      return results.filter((peer): peer is Peer => !!peer);
-    }
+    return (
+      await Promise.all(peers.map((peer) => Peers.fromUri(peer)).map((peer) => this.isPeerAlive(peer).then((alive) => (alive ? peer : undefined))))
+    ).filter(isNotNil);
   }
-
-  protected isPeerAlive(peer: Peer): Observable<Peer> {
+  protected async isPeerAlive(peer: Peer): Promise<boolean> {
     const timeoutDuration = 4000;
-    return new Observable<Peer>((subscriber) => {
+
+    return new Promise<boolean>((resolve) => {
+      const timeoutId = setTimeout(() => {
+        ws.close();
+        resolve(false);
+      }, timeoutDuration);
+
       const wsUri = Peers.getWsUri(peer);
       const ws = new WebSocket(wsUri);
 
@@ -201,22 +227,169 @@ export class NetworkService extends RxStartableService<NetworkState> {
       };
 
       ws.onmessage = () => {
-        subscriber.next(peer);
-        subscriber.complete();
+        clearTimeout(timeoutId);
         ws.close();
+        resolve(true);
       };
 
       ws.onerror = () => {
-        subscriber.error(new Error('Connection error'));
+        clearTimeout(timeoutId);
         ws.close();
+        resolve(false);
       };
+    });
+  }
 
-      return () => {
-        ws.close();
-      };
-    }).pipe(
-      timeout(timeoutDuration),
-      catchError(() => EMPTY) // Return an empty Observable on error
+  async race(urls: string[]): Promise<any> {
+    return Promise.race(
+      urls.map(async (url) => {
+        try {
+          return await firstValueFrom(this.http.get(url));
+        } catch (error) {
+          console.error(`${this._logPrefix}Erreur lors de la récupération de ${url}:`, error);
+          return undefined;
+        }
+      })
+    );
+  }
+
+  async getDistancePrecomputionData(urls: string[]) {
+    const source = timer(0, 5 * 60 * 1000);
+    return firstValueFrom(source.pipe(map(() => this.race(urls))));
+  }
+
+  async loadJsonFeed(urls: string[]): Promise<JsonTopic[]> {
+    const topicsPromises = urls.map(async (url) => {
+      let topics: JsonTopic[] = [];
+      try {
+        if (this.isDiscourseCategory(url)) {
+          console.log(`${this._logPrefix}Une catégorie a été détectée dans l'url: ${url}`);
+          topics = await this.getTopicsByCategory(url);
+        } else {
+          topics = await this.getPostByUrl(url);
+        }
+        return topics;
+      } catch (err) {
+        console.error(`${this._logPrefix}`, err);
+      }
+    });
+    const allTopics = await Promise.all(topicsPromises);
+    // Aplatir le tableau en 1 dimension, car chaque URL retourne un tableau de topics
+    return allTopics.flat();
+  }
+
+  protected async getPostByUrl(url: string): Promise<JsonTopic[]> {
+    const maxAgeInMonths = environment.feed.maxAgeInMonths;
+    const minDate = maxAgeInMonths > 0 ? moment().subtract(maxAgeInMonths, 'month').startOf('day').utc() : undefined;
+    const topicId = this.extractTopicIdFromUrl(url);
+    if (!topicId) {
+      console.error(`${this._logPrefix}Invalid URL`);
+      return undefined;
+    }
+    const discourse = new DiscourseAPI(environment.forumUrl);
+    const topic = await discourse.getTopic({ id: topicId.toString() });
+    const posts = topic.post_stream.posts;
+    if (posts.length === 0) {
+      console.error(`${this._logPrefix}Aucun post trouvé dans ce topic.`);
+      return undefined;
+    }
+    const lastPost = posts[posts.length - 1];
+    if (moment(lastPost.created_at).isBefore(minDate)) {
+      console.log(`${this._logPrefix}Le post ne réponds pas la régle de date`);
+      return undefined;
+    }
+    return [this.formatTopics(lastPost, topic, url)];
+  }
+
+  private async getTopicsByCategory(url: string) {
+    console.log(`${this._logPrefix}Une catégorie a été détectée dans l'url: ${url}`);
+
+    const categoryId = this.extractCategoryIdFromUrl(url);
+    const categorySlug = this.extractCategorySlugFromUrl(url);
+    const discourse = new DiscourseAPI(environment.forumUrl);
+    const category = await discourse.listCategoryTopics({ id: categoryId, slug: categorySlug });
+
+    const topics = category.topic_list.topics.filter(
+      (topic: Topic) =>
+        topic.pinned &&
+        topic.visible &&
+        !topic.tags.includes('about-category') &&
+        this.getLanguageFromTitle(topic.fancy_title) != this.settings.locale
     );
+    return Promise.all(
+      topics.map(async (t) => {
+        const topic = await discourse.getTopic({ id: t.id.toString() });
+        const posts = topic.post_stream.posts;
+        if (posts.length === 0) {
+          console.error(`${this._logPrefix}Aucun post trouvé dans ce topic.`);
+          return undefined;
+        }
+        return this.formatTopics(posts[0], topic, url);
+      })
+    );
+  }
+
+  protected formatTopics(post, topic, url: string) {
+    const feedItem = this.prepareFeedItem(post, topic);
+    return <JsonTopic>{
+      fancyTitle: this.cleanTitle(topic.fancy_title),
+      archived: topic.archived,
+      author: topic.details.created_by.name,
+      authorAvatar: environment.forumUrl + topic.details.created_by.avatar_template.replace('{size}', '48'),
+      tags: topic.tags,
+      createdAt: moment(topic.created_at),
+      updatedAt: moment(topic.last_posted_at),
+      feedItem: feedItem,
+      feedUrl: url,
+    };
+  }
+
+  protected isDiscourseCategory(url: string) {
+    return url.match(/\/c\//);
+  }
+
+  protected prepareFeedItem(post, topic): JsonFeedItem {
+    const maxContentLength = environment.feed.maxContentLength;
+    if (maxContentLength > 0 && post.cooked && post.cooked.length > maxContentLength) {
+      const endIndex = Math.max(post.cooked.lastIndexOf(' ', maxContentLength), post.cooked.lastIndexOf('<', maxContentLength));
+      post.cooked = post.cooked.substring(0, endIndex) + ' (...)';
+      post.truncated = true;
+    }
+    post.name = post.name ?? topic.details.last_poster.name;
+    return <JsonFeedItem>{
+      author: post.name,
+      authorAvatar:
+        environment.forumUrl + (post.avatar_template.replace('{size}', '48') ?? topic.details.last_poster.avatar_template.replace('{size}', '48')),
+      content_html: post.cooked,
+      date_published: post.created_at,
+      truncated: post.truncated,
+    };
+  }
+
+  protected extractCategoryIdFromUrl(url: string) {
+    const idMatch = url.match(/\/(\d+)$/);
+    return idMatch ? parseInt(idMatch[1], 10) : null;
+  }
+
+  protected extractCategorySlugFromUrl(url: string) {
+    const match = url.match(/\/c\/([\w/-]+)\/\d+$/);
+    return match ? match[1] : null;
+  }
+
+  protected extractTopicIdFromUrl(url: string) {
+    const idMatch = url.match(/\/(\d+)(?:$|\/)/);
+    return idMatch ? parseInt(idMatch[1], 10) : null;
+  }
+
+  protected getLanguageFromTitle(title: string) {
+    if (!title) return '';
+
+    const matches = title.match('\\s\\(([a-z]{2}(?:-[A-Z]{2})?)\\)$');
+    return matches && matches[1];
+  }
+
+  protected cleanTitle(title: string) {
+    if (!title) return undefined;
+    return title.replace(/\s\([a-z]{2}(:?-[A-Z]{2})?\)$/, '');
   }
 }
diff --git a/src/app/network/pod/pod.service.ts b/src/app/network/pod/pod.service.ts
index 08903cfa9d4af10c20ac20b5ed2e7c2d9ac4e792..db661859e924d711a75ae532e47f7cb28e0ae715 100644
--- a/src/app/network/pod/pod.service.ts
+++ b/src/app/network/pod/pod.service.ts
@@ -12,8 +12,7 @@ import {
 } from '@app/shared/services/network/graphql/graphql.service';
 import { DocumentNode } from 'graphql/index';
 import { StorageService } from '@app/shared/services/storage/storage.service';
-import { firstValueFrom, Observable, of } from 'rxjs';
-import { map } from 'rxjs/operators';
+import { firstValueFrom, map, Observable, of } from 'rxjs';
 import { Currency } from '@app/currency/currency.model';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
 import { firstNotNilPromise } from '@app/shared/observables';
@@ -37,6 +36,8 @@ export class PodService extends GraphqlService<PodState> {
   @RxStateSelect() minBlockHeight$: Observable<number>;
   @RxStateProperty() minBlockHeight: number;
 
+  errors: Error;
+
   constructor(
     storage: StorageService,
     private settings: SettingsService,
@@ -55,111 +56,127 @@ export class PodService extends GraphqlService<PodState> {
     filter: WotSearchFilter,
     options: { after?: string; first?: number; fetchPolicy?: FetchPolicy; total?: number; withTotal?: boolean }
   ): Observable<LoadResult<Account>> {
+    if (this.errors) return of(<LoadResult<Account>>{});
     console.debug(`${this._logPrefix}Searching profiles by filter...`, filter);
-
     const now = Date.now();
     const offset = toNumber(+options?.after, 0);
     const limit = toNumber(+options?.first, this.fetchSize);
     const withTotal = offset === 0 && options?.withTotal !== false;
     let data$: Observable<LoadResult<ProfileFragment>>;
+    try {
+      // Load by unique address
+      if (isNotNilOrBlank(filter.address)) {
+        data$ = this.graphqlService
+          .profileByAddress(
+            {
+              address: filter.address,
+            },
+            options
+          )
+          .pipe(
+            map(({ data }) => {
+              return {
+                data: [data.profiles_by_pk],
+                total: isNil(data.profiles_by_pk) ? 0 : 1,
+              };
+            })
+          );
+      }
 
-    // Load by unique address
-    if (isNotNilOrBlank(filter.address)) {
-      data$ = this.graphqlService
-        .profileByAddress(
-          {
-            address: filter.address,
-          },
-          options
-        )
-        .pipe(
-          map(({ data }) => {
-            return {
-              data: [data.profiles_by_pk],
-              total: isNil(data.profiles_by_pk) ? 0 : 1,
-            };
+      // Load by adresses
+      else if (isNotEmptyArray(filter.addresses)) {
+        data$ = this.graphqlService
+          .profileSearchByAddresses(
+            {
+              addresses: filter.addresses,
+            },
+            options
+          )
+          .pipe(
+            map(({ data }) => {
+              return {
+                data: data.profiles as ProfileFragment[],
+              };
+            })
+          );
+      } else if (isNotNilOrBlank(filter.searchText)) {
+        data$ = this.graphqlService
+          .profileSearchByText({
+            offset,
+            limit,
+            searchText: `%${filter.searchText}%`,
+            orderBy: [{ time: Order_By.Asc }, { title: Order_By.Asc }],
+            withTotal,
           })
-        );
-    }
+          .pipe(
+            map(({ data }) => {
+              return {
+                data: data.profiles as ProfileFragment[],
+                total: data.profiles_aggregate?.aggregate.count,
+              };
+            })
+          );
+      } else {
+        return of(<LoadResult<Account>>{});
+      }
 
-    // Load by adresses
-    else if (isNotEmptyArray(filter.addresses)) {
-      data$ = this.graphqlService
-        .profileSearchByAddresses(
-          {
-            addresses: filter.addresses,
-          },
-          options
-        )
-        .pipe(
-          map(({ data }) => {
-            return {
-              data: data.profiles as ProfileFragment[],
+      return data$.pipe(
+        map((res) => {
+          const data = AccountConverter.profileToAccounts(res.data, { ipfsGateway: this.ipfsService.gatewayBaseUrl });
+
+          const duration = Date.now() - now;
+          if (duration > 10) {
+            console.info(`${this._logPrefix}${data.length} profiles loaded in ${duration}ms`);
+          }
+
+          const total = toNumber(res?.total, options?.total);
+          const result: LoadResult<Account> = { data, total };
+          const nextOffset = offset + limit;
+          if (isNotNil(total) && nextOffset < total) {
+            result.fetchMore = (first) => {
+              console.debug(`${this._logPrefix}Fetching more profiles - offset: ${nextOffset}`);
+              return firstValueFrom(
+                this.profileSearch(filter, { ...options, after: nextOffset.toString(), first: toNumber(first, options.first), total })
+              );
             };
-          })
-        );
-    } else if (isNotNilOrBlank(filter.searchText)) {
-      data$ = this.graphqlService
-        .profileSearchByText({
-          offset,
-          limit,
-          searchText: `%${filter.searchText}%`,
-          orderBy: [{ time: Order_By.Asc }, { title: Order_By.Asc }],
-          withTotal,
+          }
+          return result;
         })
-        .pipe(
-          map(({ data }) => {
-            return {
-              data: data.profiles as ProfileFragment[],
-              total: data.profiles_aggregate?.aggregate.count,
-            };
-          })
-        );
-    } else {
+      );
+    } catch (e) {
       return of(<LoadResult<Account>>{});
     }
-
-    return data$.pipe(
-      map((res) => {
-        const data = AccountConverter.profileToAccounts(res.data, { ipfsGateway: this.ipfsService.gatewayBaseUrl });
-
-        const duration = Date.now() - now;
-        if (duration > 10) {
-          console.info(`${this._logPrefix}${data.length} profiles loaded in ${duration}ms`);
-        }
-
-        const total = toNumber(res?.total, options?.total);
-        const result: LoadResult<Account> = { data, total };
-        const nextOffset = offset + limit;
-        if (isNotNil(total) && nextOffset < total) {
-          result.fetchMore = (first) => {
-            console.debug(`${this._logPrefix}Fetching more profiles - offset: ${nextOffset}`);
-            return firstValueFrom(
-              this.profileSearch(filter, { ...options, after: nextOffset.toString(), first: toNumber(first, options.first), total })
-            );
-          };
-        }
-        return result;
-      })
-    );
   }
 
   protected async ngOnStart(): Promise<PodState> {
-    if (!this.ipfsService.started) this.ipfsService.start();
+    if (!this.ipfsService.started) await this.ipfsService.start();
 
     // Wait settings and ipfs service
     const [settings, currency] = await Promise.all([this.settings.ready(), firstNotNilPromise(this.currency$)]);
 
+    let isPeerAlive: boolean;
     let peer = Peers.fromUri(settings.pod);
-    if (!peer) {
+
+    if (isNil(peer)) {
+      isPeerAlive = false;
+    } else {
+      isPeerAlive = await this.isPeerAlive(peer);
+    }
+
+    if (!peer || !isPeerAlive) {
+      const preferredFiltered = settings.preferredPods.filter((preferred) => preferred !== settings.pod);
+      if (preferredFiltered.length === 0) throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
+
       const peers = await this.filterAlivePeers(settings.preferredPods);
       if (!peers.length) {
-        throw { message: 'ERROR.CHECK_NETWORK_CONNECTION' };
+        this.errors = new Error('ERROR.CHECK_NETWORK_CONNECTION');
+        throw this.errors;
       }
       peer = arrayRandomPick(peers);
     }
 
     const client = await super.createClient(peer, 'pod');
+    settings.pod = Peers.getHttpUri(peer);
 
     return {
       peer,
diff --git a/src/app/settings/settings.model.ts b/src/app/settings/settings.model.ts
index 157a7a6a84d2406d206c0e3cf3100340f82f01ef..77f0a95827488c1479fbb0858825fc0233b22658 100644
--- a/src/app/settings/settings.model.ts
+++ b/src/app/settings/settings.model.ts
@@ -1,5 +1,7 @@
 import { PropertiesMap, Property } from '../shared/types';
 import { InjectionToken } from '@angular/core';
+import moment, { Moment } from 'moment';
+import DurationConstructor = moment.unitOfTime.DurationConstructor;
 
 export declare interface LocaleConfig extends Property {
   country?: string;
@@ -9,6 +11,11 @@ export const APP_LOCALES = new InjectionToken<LocaleConfig[]>('locales');
 
 export type CurrencyDisplayUnit = 'base' | 'du';
 
+export interface PeriodOption {
+  key: DurationConstructor;
+  i18nKey: string;
+}
+
 export interface Settings {
   peer: string;
   currency?: string;
@@ -19,6 +26,8 @@ export interface Settings {
   preferredPods?: string[];
   ipfsGateway: string;
   preferredIpfsGateways?: string[];
+  distanceFileUrl?: string;
+  preferredDistanteFileUrls?: string[];
   pages?: any; // Any pages settings
   locale?: string;
   mobile?: boolean;
@@ -27,4 +36,6 @@ export interface Settings {
   unAuthDelayMs?: number;
   darkMode: boolean;
   displayUnit: CurrencyDisplayUnit;
+  selectedRedeemPeriod?: DurationConstructor;
+  lastRedeemDate: Moment;
 }
diff --git a/src/app/settings/settings.page.html b/src/app/settings/settings.page.html
index 1f3f12b4de7ec3d6eceefa33073642a11628fa2f..72fbe614d20bde4a23941df11a5b352fba290277 100644
--- a/src/app/settings/settings.page.html
+++ b/src/app/settings/settings.page.html
@@ -38,6 +38,17 @@
         </ion-select>
       </ion-item>
 
+      <ion-item-divider translate>MENU.ACCOUNT</ion-item-divider>
+      <ion-item>
+        <ion-icon slot="start" name="timer-outline"></ion-icon>
+        <ion-label translate>SETTINGS.DURATION_BETWEEN_UD_CLAIM</ion-label>
+        <ion-select [interface]="mobile ? 'action-sheet' : 'popover'" [(ngModel)]="selectedRedeemPeriod">
+          @for (period of redeemPeriodOptions; track period.key) {
+            <ion-select-option [value]="period.key" translate>{{ period.i18nKey }}</ion-select-option>
+          }
+        </ion-select>
+      </ion-item>
+
       <ion-item>
         <ion-toggle [(ngModel)]="useRelativeUnit" justify="end">
           <ion-label color="medium" translate>COMMON.BTN_RELATIVE_UNIT</ion-label>
@@ -185,6 +196,12 @@
     </ion-toolbar>
   </ion-header>
   <ion-content>
+    <ion-item>
+      <ion-input [(ngModel)]="customPeer" (keydown.enter)="onPeerSubmit(property) && modal.dismiss()" labelPlacement="floating">
+        <div slot="label" translate>PEER.CUSTOM_PEER</div>
+      </ion-input>
+      <ion-icon name="enter-outline" slot="end" (click)="onPeerSubmit(property) && modal.dismiss()" tappable></ion-icon>
+    </ion-item>
     <ion-list>
       <ion-item
         *rxFor="let peer of peers$"
diff --git a/src/app/settings/settings.page.ts b/src/app/settings/settings.page.ts
index dc8ac6326b1bd1932c217011a2367d016bc2086e..c30c63211637c073f8e422d4ce9dda7ad750ed90 100644
--- a/src/app/settings/settings.page.ts
+++ b/src/app/settings/settings.page.ts
@@ -1,5 +1,5 @@
-import { Component, Inject, OnInit, ViewChild } from '@angular/core';
-import { APP_LOCALES, LocaleConfig, Settings } from '@app/settings/settings.model';
+import { Component, Inject, Input, OnInit, ViewChild } from '@angular/core';
+import { APP_LOCALES, LocaleConfig, PeriodOption, Settings } from '@app/settings/settings.model';
 import { AppPage, AppPageState } from '@app/shared/pages/base-page.class';
 import { RxState } from '@rx-angular/state';
 import { RxStateProperty, RxStateSelect } from '@app/shared/decorator/state.decorator';
@@ -7,10 +7,13 @@ import { Observable, skip } from 'rxjs';
 import { IonModal } from '@ionic/angular';
 import { NetworkService } from '@app/network/network.service';
 import { map } from 'rxjs/operators';
+import moment from 'moment';
+import DurationConstructor = moment.unitOfTime.DurationConstructor;
 
 export interface SettingsPageState extends Settings, AppPageState {
   useRelativeUnit: boolean;
   dirty: boolean;
+  newPeer: string;
 }
 
 @Component({
@@ -51,6 +54,22 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
       value: 9999 * 60_000,
     },
   ];
+
+  redeemPeriodOptions: PeriodOption[] = [
+    {
+      key: 'day',
+      i18nKey: 'SETTINGS.REDEEM_UD_PERIOD_OPTION.DAILY',
+    },
+    {
+      key: 'week',
+      i18nKey: 'SETTINGS.REDEEM_UD_PERIOD_OPTION.WEEKLY',
+    },
+    {
+      key: 'month',
+      i18nKey: 'SETTINGS.REDEEM_UD_PERIOD_OPTION.MONTHLY',
+    },
+  ];
+
   @RxStateSelect() preferredPeers$: Observable<string[]>;
   @RxStateSelect() peer$: Observable<string>;
   @RxStateSelect() preferredIndexers$: Observable<string[]>;
@@ -60,6 +79,8 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
   @RxStateSelect() preferredIpfsGateways$: Observable<string[]>;
   @RxStateSelect() ipfsGateway$: Observable<string>;
   @RxStateSelect() dirty$: Observable<boolean>;
+  @RxStateSelect() newPeer$: Observable<string>;
+  @RxStateSelect() durationRedeemUd$: Observable<number>;
 
   @RxStateProperty() darkMode: boolean;
   @RxStateProperty() locale: string;
@@ -70,6 +91,8 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
   @RxStateProperty() ipfsGateway: string;
   @RxStateProperty() unAuthDelayMs: number;
   @RxStateProperty() dirty: boolean;
+  @Input() @RxStateProperty() customPeer: string;
+  @Input() @RxStateProperty() selectedRedeemPeriod: DurationConstructor = 'week';
 
   @ViewChild('selectPeerModal') selectPeerModal: IonModal;
   @ViewChild('selectIndexerModal') selectIndexerModal: IonModal;
@@ -88,7 +111,9 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
 
     // Detect changes
     this._state.hold(
-      this._state.select(['locale', 'peer', 'indexer', 'pod', 'ipfsGateway', 'unAuthDelayMs', 'displayUnit'], (s) => s).pipe(skip(1)),
+      this._state
+        .select(['locale', 'peer', 'indexer', 'pod', 'ipfsGateway', 'unAuthDelayMs', 'displayUnit', 'selectedRedeemPeriod'], (s) => s)
+        .pipe(skip(1)),
       () => {
         if (this.mobile) {
           this.save();
@@ -122,6 +147,10 @@ export class SettingsPage extends AppPage<SettingsPageState> implements OnInit {
     return true;
   }
 
+  onPeerSubmit(property: keyof Settings) {
+    return this.setStateValue(this.customPeer, property);
+  }
+
   markAsDirty() {
     this.dirty = true;
   }
diff --git a/src/app/settings/settings.service.ts b/src/app/settings/settings.service.ts
index caced262851f9a5a5168f94f42ef9979d5c16011..094eba61eea1ed873eb35e51941b14bb43f995cf 100644
--- a/src/app/settings/settings.service.ts
+++ b/src/app/settings/settings.service.ts
@@ -26,6 +26,14 @@ export class SettingsService extends RxStartableService<SettingsState> {
     return this.get('mobile');
   }
 
+  get selectedRedeemPeriod() {
+    return this.get('selectedRedeemPeriod');
+  }
+
+  get lastRedeemDate() {
+    return this.get('lastRedeemDate');
+  }
+
   @RxStateSelect() locale$: Observable<string>;
   @RxStateSelect() darkMode$: Observable<boolean>;
   @RxStateSelect() peer$: Observable<string>;
@@ -77,13 +85,18 @@ export class SettingsService extends RxStartableService<SettingsState> {
 
   clone(): Settings {
     const data = this.get();
+    // const conf = await this.storage.get(SETTINGS_STORAGE_KEY);
+
+    // console.log('TODO storage', conf);
     return <Settings>{
       locale: environment.defaultLocale,
-      peer: environment.dev?.peer || environment.defaultPeers?.[0],
-      indexer: environment.dev?.indexer || environment.defaultIndexers?.[0],
-      pod: environment.dev?.pod || environment.defaultPods?.[0],
-      ipfsGateway: environment.dev?.ipfsGateway || environment.defaultIfpsGateways?.[0],
+      peer: environment.dev?.peer ?? environment.defaultPeers?.[0],
+      indexer: environment.dev?.indexer ?? environment.defaultIndexers?.[0],
+      pod: environment.dev?.pod ?? environment.defaultPods?.[0],
+      ipfsGateway: environment.dev?.ipfsGateway ?? environment.defaultIfpsGateways?.[0],
+      distanceFileUrl: environment.dev?.distanceFileUrl ?? environment.defaultDistanteFileUrl?.[0],
       ...this.get(),
+      preferredDistanteFileUrls: arrayDistinct([...environment.defaultDistanteFileUrl, ...(data?.preferredDistanteFileUrls || [])]),
       preferredPeers: arrayDistinct([...environment.defaultPeers, ...(data?.preferredPeers || [])]),
       preferredIndexers: arrayDistinct([...environment.defaultIndexers, ...(data?.preferredIndexers || [])]),
       preferredPods: arrayDistinct([...environment.defaultPods, ...(data?.preferredPods || [])]),
@@ -104,6 +117,7 @@ export class SettingsService extends RxStartableService<SettingsState> {
       preferredIndexers: arrayDistinct([...environment.defaultIndexers, ...(data?.preferredIndexers || [])]),
       preferredPods: arrayDistinct([...environment.defaultPods, ...(data?.preferredPods || [])]),
       preferredIpfsGateways: arrayDistinct([...environment.defaultIfpsGateways, ...(data?.preferredIpfsGateways || [])]),
+      preferredDistanteFileUrls: arrayDistinct([...environment.defaultDistanteFileUrl, ...(data?.preferredDistanceFileUrls || [])]),
     };
   }
 
@@ -126,7 +140,7 @@ export class SettingsService extends RxStartableService<SettingsState> {
   private getNumberFormatOptions(locale: string): Intl.NumberFormatOptions {
     const defaultOptions: Intl.NumberFormatOptions = { useGrouping: true, maximumFractionDigits: 3 };
     switch (locale) {
-      case 'fr-FR':
+      case 'fr':
         return <Intl.NumberFormatOptions>{ ...defaultOptions };
       case 'en-US':
       case 'en-GB':
diff --git a/src/app/shared/animations.ts b/src/app/shared/animations.ts
index 591fe731060a6a53fcc27e4b40b98bb4c628d196..ea7ff2f42975b9ef91218007e9289633c0db2cdf 100644
--- a/src/app/shared/animations.ts
+++ b/src/app/shared/animations.ts
@@ -96,6 +96,46 @@ export const slideInOutAnimation =
     ]),
   ]);
 
+export const slideDownAnimation =
+  // trigger name for attaching this animation to an element using the [@triggerName] syntax
+  trigger('slideDownAnimation', [
+    // end state styles for route container (host)
+    state(
+      '*',
+      style({
+        transform: 'translateY(0)',
+        opacity: 1,
+      })
+    ),
+
+    // route 'enter' transition
+    transition(':enter', [
+      // styles at start of transition
+      style({
+        transform: 'translateY(-400%)',
+        opacity: 0,
+      }),
+
+      // animation and styles at end of transition
+      animate(
+        '.3s ease-in-out',
+        style({
+          transform: 'translateY(0)',
+          opacity: 1,
+        })
+      ),
+    ]),
+
+    // route 'leave' transition
+    transition(':leave', [
+      // animation and styles at end of transition
+      style({
+        transform: 'translateY(-400%)',
+        opacity: 0,
+      }),
+    ]),
+  ]);
+
 export const slideUpDownAnimation =
   // trigger name for attaching this animation to an element using the [@triggerName] syntax
   trigger('slideUpDownAnimation', [
diff --git a/src/app/shared/colors.utils.ts b/src/app/shared/colors.utils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c9c92db8208a324161776260d7d316e946f00c84
--- /dev/null
+++ b/src/app/shared/colors.utils.ts
@@ -0,0 +1,3 @@
+import { PredefinedColors } from '@ionic/core';
+
+export declare type AppColors = PredefinedColors | 'secondary100' | 'warning900' | 'danger100' | 'danger900' | 'transparent';
diff --git a/src/app/shared/environment/environment.utils.ts b/src/app/shared/environment/environment.utils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4be7ca19df42b64a4d89dd4782655a29b727349c
--- /dev/null
+++ b/src/app/shared/environment/environment.utils.ts
@@ -0,0 +1,8 @@
+import { environment } from '@environments/environment';
+
+export function isDemo() {
+  return environment?.mode === 'demo' && environment.production === true;
+}
+export function isDev() {
+  return environment?.mode === 'dev' && environment.production === false;
+}
diff --git a/src/app/shared/error/error-item.component.html b/src/app/shared/error/error-item.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb5249f676cdd2419a3dcbb33e70e097ca9480c6
--- /dev/null
+++ b/src/app/shared/error/error-item.component.html
@@ -0,0 +1,7 @@
+<!-- error -->
+@if (message) {
+  <ion-item lines="none" [color]="backgroundColor" class="{{ size }} {{ classList }}" [@slideDownAnimation]="animated">
+    <ion-icon [color]="color" slot="start" [name]="icon"></ion-icon>
+    <ion-label [color]="color" [innerHTML]="message | translate"></ion-label>
+  </ion-item>
+}
diff --git a/src/app/shared/error/error-item.component.scss b/src/app/shared/error/error-item.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c5e6d7122bb1f35073a3f8bbbc3ccf869a0bcfa3
--- /dev/null
+++ b/src/app/shared/error/error-item.component.scss
@@ -0,0 +1,29 @@
+// Small
+ion-item.small {
+  ion-icon[slot='start'] {
+    height: 18px;
+    width: 18px;
+    font-size: 18px;
+    margin-inline-end: 8px;
+  }
+  ion-label {
+    font-size: 0.9rem;
+  }
+}
+
+// Medium
+ion-item.medium {
+  ion-icon[slot='start'] {
+    margin-inline-end: 10px;
+  }
+}
+
+// Large
+ion-item.large {
+  ion-icon[slot='start'] {
+    margin-inline-end: 10px;
+  }
+  ion-label {
+    font-size: 1.1rem;
+  }
+}
diff --git a/src/app/shared/error/error-item.component.ts b/src/app/shared/error/error-item.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd05bd131fc7ca4bbb141a493e668927cb89edc9
--- /dev/null
+++ b/src/app/shared/error/error-item.component.ts
@@ -0,0 +1,38 @@
+import { booleanAttribute, ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
+import { IonicModule } from '@ionic/angular';
+import { TranslateModule } from '@ngx-translate/core';
+import { SharedPipesModule } from '@app/shared/pipes/pipes.module';
+import { AppColors } from '@app/shared/colors.utils';
+import { slideDownAnimation } from '@app/shared/animations';
+
+@Component({
+  selector: 'app-error-item',
+  templateUrl: './error-item.component.html',
+  styleUrls: ['./error-item.component.scss'],
+  animations: [slideDownAnimation],
+  changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [IonicModule, TranslateModule, SharedPipesModule],
+})
+export class AppErrorItem implements OnInit {
+  protected defaultColor: AppColors;
+
+  @Input() message: string;
+  @Input() icon = 'alert-circle';
+  @Input() backgroundColor: AppColors = 'transparent';
+  @Input() color: AppColors;
+  @Input({ transform: booleanAttribute }) animated = true;
+  // eslint-disable-next-line @angular-eslint/no-input-rename
+  @Input('class') classList: string;
+  @Input() size: 'small' | 'medium' | 'large' = 'medium';
+  constructor() {
+    this.defaultColor = 'danger';
+  }
+
+  ngOnInit() {
+    this.backgroundColor = this.backgroundColor ?? 'transparent';
+    if ((!this.backgroundColor || this.backgroundColor === 'transparent') && !this.color) {
+      this.color = this.defaultColor || 'danger';
+    }
+  }
+}
diff --git a/src/app/shared/error/warning-item.component.ts b/src/app/shared/error/warning-item.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..df2eaf609bc9bddfd2b9a4163670507e074574a8
--- /dev/null
+++ b/src/app/shared/error/warning-item.component.ts
@@ -0,0 +1,27 @@
+import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
+import { IonicModule } from '@ionic/angular';
+import { TranslateModule } from '@ngx-translate/core';
+import { AppErrorItem } from '@app/shared/error/error-item.component';
+
+@Component({
+  selector: 'app-warning-item',
+  templateUrl: './error-item.component.html',
+  styleUrls: ['./error-item.component.scss'],
+  // animations: [slideDownAnimation],
+  changeDetection: ChangeDetectionStrategy.OnPush,
+  standalone: true,
+  imports: [IonicModule, TranslateModule],
+})
+export class AppWarningItem extends AppErrorItem {
+  // eslint-disable-next-line @angular-eslint/no-input-rename
+  @Input('class') classList: string;
+  constructor() {
+    super();
+    this.icon = 'warning';
+    this.defaultColor = 'tertiary';
+  }
+
+  ngOnInit() {
+    super.ngOnInit();
+  }
+}
diff --git a/src/app/shared/services/network/graphql/graphql.service.ts b/src/app/shared/services/network/graphql/graphql.service.ts
index d61df3580500920c937f2b207d20f27bba7a80b8..b89d22f2325a79177158d192674fa447b0caa740 100644
--- a/src/app/shared/services/network/graphql/graphql.service.ts
+++ b/src/app/shared/services/network/graphql/graphql.service.ts
@@ -7,10 +7,11 @@ import {
   ApolloQueryResult,
   FetchPolicy,
   InMemoryCache,
-  MutationUpdaterFn, MutationUpdaterFunction,
+  MutationUpdaterFunction,
   NetworkStatus,
   OperationVariables,
-  TypePolicies, Unmasked,
+  TypePolicies,
+  Unmasked,
   WatchQueryFetchPolicy,
 } from '@apollo/client/core';
 import { ErrorCodes, ServerErrorCodes } from '../network.errors';
@@ -25,7 +26,8 @@ import TrackerLink, {
   isMutationOperation,
   isSubscriptionOperation,
   restoreTrackedQueries,
-  StorageServiceWrapper, TrackableMutationContext,
+  StorageServiceWrapper,
+  TrackableMutationContext,
 } from './graphql.utils';
 import { RetryLink } from '@apollo/client/link/retry';
 import queueLinkImported from 'apollo-link-queue';
@@ -35,7 +37,7 @@ import { Platform } from '@ionic/angular';
 import { EntityUtils } from '../../entity.model';
 import { isNil, isNotEmptyArray, isNotNil, toNumber } from '../../../functions';
 import { Resolvers } from '@apollo/client/core/types';
-import { HttpHeaders } from '@angular/common/http';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
 import { HttpLink, Options } from 'apollo-angular/http';
 import { persistCache, PersistentStorage } from 'apollo3-cache-persist';
 import { ErrorPolicy, MutationBaseOptions } from '@apollo/client/core/watchQueryOptions';
@@ -65,10 +67,11 @@ export interface WatchQueryOptions<V> {
   fetchPolicy?: WatchQueryFetchPolicy;
 }
 
-export interface MutateQueryOptions<TData,
+export interface MutateQueryOptions<
+  TData,
   TVariables = OperationVariables,
   TContext = TrackableMutationContext,
-  TCache extends ApolloCache<any> = ApolloCache<any>
+  TCache extends ApolloCache<any> = ApolloCache<any>,
 > extends MutationBaseOptions<TData, TVariables, TContext, TCache> {
   mutation: any;
   variables?: TVariables;
@@ -107,6 +110,7 @@ export abstract class GraphqlService<
 
   private platform = inject(Platform);
   private httpLink = inject(HttpLink);
+  private httpClient = inject(HttpClient);
   private httpParams: Options;
   private wsParams: ClientOptions<ConnectionParams>;
   private connectionParams: ConnectionParams = {};
@@ -129,14 +133,6 @@ export abstract class GraphqlService<
     return this.client?.cache;
   }
 
-  get fetchPolicy(): FetchPolicy {
-    return this.offline ? 'cache-only' : this.defaultFetchPolicy;
-  }
-
-  get watchFetchPolicy(): WatchQueryFetchPolicy {
-    return this.offline ? 'cache-only' : this.defaultWatchFetchPolicy;
-  }
-
   protected constructor(
     private storage: StorageService,
     private typePolicies?: TypePolicies,
@@ -166,6 +162,14 @@ export abstract class GraphqlService<
     //   .subscribe(() => this.network.setForceOffline(true, { showToast: true }));
   }
 
+  get fetchPolicy(): FetchPolicy {
+    return this.offline ? 'cache-only' : this.defaultFetchPolicy;
+  }
+
+  get watchFetchPolicy(): WatchQueryFetchPolicy {
+    return this.offline ? 'cache-only' : this.defaultWatchFetchPolicy;
+  }
+
   /**
    * Allow to add a field resolver
    *  (see doc: https://www.apollographql.com/docs/react/data/local-state/#handling-client-fields-with-resolvers)
@@ -231,7 +235,7 @@ export abstract class GraphqlService<
         opts.optimisticResponse = (await optimisticResponseFn(opts.context)) as Unmasked<NoInfer<T>>;
         if (this._debug) console.debug('[graphql] [offline] Using an optimistic response: ', opts.optimisticResponse);
       } else {
-        opts.optimisticResponse = opts.offlineResponse  as Unmasked<NoInfer<T>>;
+        opts.optimisticResponse = opts.offlineResponse as Unmasked<NoInfer<T>>;
       }
       if (opts.forceOffline) {
         const res = { data: opts.optimisticResponse as Unmasked<NoInfer<T>> };
@@ -931,29 +935,36 @@ export abstract class GraphqlService<
     return undefined;
   }
 
-  protected async filterAlivePeers(
-    peers: string[],
-    opts?: {
-      timeout?: number;
-    }
-  ): Promise<Peer[]> {
+  protected async filterAlivePeers(peers: string[]): Promise<Peer[]> {
     return (
-      await Promise.all(
-        peers.map((peer) => Peers.fromUri(peer)).map((peer) => this.isPeerAlive(peer, opts).then((alive) => (alive ? peer : undefined)))
-      )
+      await Promise.all(peers.map((peer) => Peers.fromUri(peer)).map((peer) => this.isPeerAlive(peer).then((alive) => (alive ? peer : undefined))))
     ).filter(isNotNil);
   }
 
-  protected async isPeerAlive(
-    // eslint-disable-next-line @typescript-eslint/no-unused-vars
-    peer: Peer,
-    // eslint-disable-next-line @typescript-eslint/no-unused-vars
-    opts?: {
-      timeout?: number;
+  protected async isPeerAlive(peer: Peer): Promise<boolean> {
+    const query = `
+      query {
+        __schema {
+          types {
+            name
+          }
+        }
+      }
+    `;
+
+    try {
+      return await firstValueFrom(
+        this.httpClient.post(Peers.getHttpUri(peer), { query }).pipe(
+          map(() => true),
+          catchError((err) => {
+            console.error(`an error occurred during the verification :`, err);
+            throw new Error(`Unable to verify server status: ${err}`);
+          })
+        )
+      );
+    } catch (error) {
+      if (this._debug) console.debug(`${this._logPrefix}server not available.`, error);
+      return false;
     }
-  ): Promise<boolean> {
-    // TODO
-    console.log(`${this._logPrefix}TODO: implement ${this.constructor.name}.isPeerAlive()`, peer);
-    return Promise.resolve(true);
   }
 }
diff --git a/src/app/shared/services/rx-startable-service.class.ts b/src/app/shared/services/rx-startable-service.class.ts
index 1d5f8f77adb93a4e3e10b280632799b4b801ca3e..a9fe21b1c39cde9f95ac0e26693cb93204e73db5 100644
--- a/src/app/shared/services/rx-startable-service.class.ts
+++ b/src/app/shared/services/rx-startable-service.class.ts
@@ -56,10 +56,10 @@ export abstract class RxStartableService<T extends object = Object, O extends Rx
         return data;
       })
       .catch((err) => {
-        console.error('Failed to start a service: ' + ((err && err.message) || err), err);
+        console.error(`${this._logPrefix}Failed to start a service: ` + ((err && err.message) || err), err);
         this._started = false;
         this._startPromise = null;
-        return null;
+        throw err;
       });
     return this._startPromise;
   }
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index d1fe679046fd71b9c41571759d462bd2d9fda2bc..925813ec720ad85bbe2df36b8e3063b00d3ff7c4 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -16,6 +16,8 @@ import { SwiperDirective } from '@app/shared/swiper/app-swiper.directive';
 import { AppSkeletonListComponent } from '@app/shared/loading/skeleton.list/skeleton.list.component';
 import { AppGraphQLModule } from '@app/shared/services/network/graphql/graphql.module';
 import { RouterModule } from '@angular/router';
+import { AppErrorItem } from '@app/shared/error/error-item.component';
+import { AppWarningItem } from '@app/shared/error/warning-item.component';
 
 @NgModule({
   imports: [
@@ -40,6 +42,10 @@ import { RouterModule } from '@angular/router';
     SwiperDirective,
     AppGraphQLModule,
     AppSkeletonListComponent,
+
+    // Standalone components
+    AppErrorItem,
+    AppWarningItem,
   ],
   exports: [
     CommonModule,
@@ -63,6 +69,10 @@ import { RouterModule } from '@angular/router';
     SwiperDirective,
     AppGraphQLModule,
     AppSkeletonListComponent,
+
+    // Standalone components
+    AppErrorItem,
+    AppWarningItem,
   ],
 })
 export class AppSharedModule {}
diff --git a/src/app/transfer/send/transfer.page.html b/src/app/transfer/send/transfer.page.html
index 18f614c83cf015bd5b659aebc1ac201093c2336e..3384f5c85ff4ebf8ca341cb3bd59df031eb0cfd4 100644
--- a/src/app/transfer/send/transfer.page.html
+++ b/src/app/transfer/send/transfer.page.html
@@ -2,7 +2,9 @@
   <ion-toolbar [color]="toolbarColor">
     <ion-buttons slot="start" *ngIf="mobile">
       @if (_isModal) {
-        <ion-button (click)="cancel()"><ion-icon name="arrow-back"></ion-icon></ion-button>
+        <ion-button (click)="cancel()">
+          <ion-icon name="arrow-back"></ion-icon>
+        </ion-button>
       } @else {
         <ion-menu-button *ngIf="showMenuButton"></ion-menu-button>
         <ion-back-button></ion-back-button>
@@ -14,7 +16,7 @@
 
     <ion-buttons slot="end" *ngIf="mobile">
       <!-- Send-->
-      <ion-button (click)="doSubmit()" [disabled]="loading || invalid">
+      <ion-button (click)="doSubmit()" [disabled]="loading || invalid || isDemo()">
         <ion-icon name="send"></ion-icon>
       </ion-button>
     </ion-buttons>
@@ -97,16 +99,15 @@
     </ion-item>
 
     <ion-item lines="none">
-      <!--        <ion-toggle [(ngModel)]="showComment">-->
-      <!--        </ion-toggle>-->
-      <!--        <ion-label class="ion-text-start" color="medium" translate>TRANSFER.BTN_ADD_COMMENT</ion-label>-->
+      <ion-toggle [(ngModel)]="showComment"></ion-toggle>
+      <ion-label class="ion-text-start" color="medium" translate>TRANSFER.BTN_ADD_COMMENT</ion-label>
       <ion-badge slot="end" *ngIf="amount && fee" color="medium">
         {{ 'TRANSFER.FEE' | translate: { fee: fee, currency: currency.symbol } }}
       </ion-badge>
     </ion-item>
 
     <ion-item *ngIf="showComment">
-      <ion-textarea [placeholder]="'TRANSFER.COMMENT_HELP' | translate" rows="5"></ion-textarea>
+      <ion-textarea [(ngModel)]="comment" [placeholder]="'TRANSFER.COMMENT_HELP' | translate" rows="5"></ion-textarea>
     </ion-item>
   </ion-list>
 
@@ -120,7 +121,7 @@
     <ion-label translate>COMMON.BTN_CANCEL</ion-label>
   </ion-button>
 
-  <ion-button (click)="doSubmit()" [disabled]="loading || invalid" color="tertiary">
+  <ion-button (click)="doSubmit()" [disabled]="loading || invalid || isDemo()" color="tertiary">
     <ion-icon slot="start" name="paper-plane"></ion-icon>
     <ion-label translate>COMMON.BTN_SEND</ion-label>
   </ion-button>
diff --git a/src/app/transfer/send/transfer.page.ts b/src/app/transfer/send/transfer.page.ts
index 7a5711a3ab127562aba2d58bd54ddf670ea68ec3..202e73c2f97eb87efdec683f40b91be3f04ef5c9 100644
--- a/src/app/transfer/send/transfer.page.ts
+++ b/src/app/transfer/send/transfer.page.ts
@@ -16,6 +16,8 @@ import { WotController } from '@app/wot/wot.controller';
 import { TransferFormOptions } from '@app/transfer/transfer.model';
 import { PredefinedColors } from '@ionic/core';
 import { Capacitor } from '@capacitor/core';
+import { environment } from '@environments/environment';
+import { isDemo } from '@app/shared/environment/environment.utils';
 
 export interface TransferPageState extends AppPageState {
   currency: Currency;
@@ -24,6 +26,7 @@ export interface TransferPageState extends AppPageState {
   account: Account;
   recipient: Partial<Account>;
   submitted: boolean;
+  comment: string;
 }
 
 export interface TransferPageInputs extends TransferFormOptions {
@@ -56,12 +59,14 @@ export class TransferPage extends AppPage<TransferPageState> implements Transfer
   @RxStateSelect() protected account$: Observable<Account>;
   @RxStateSelect() protected recipient$: Observable<Partial<Account>>;
   @RxStateSelect() protected submitted$: Observable<boolean>;
+  @RxStateSelect() protected comment$: Observable<string>;
 
   @Input() @RxStateProperty() currency: Currency;
   @Input() @RxStateProperty() fee: number;
   @Input() @RxStateProperty() account: Account;
   @Input() @RxStateProperty() recipient: Partial<Account>;
   @Input() @RxStateProperty() amount: number;
+  @Input() @RxStateProperty() comment: string;
 
   @Input() showComment: boolean;
   @Input() dismissOnSubmit: boolean = false; // True is modal
@@ -115,8 +120,6 @@ export class TransferPage extends AppPage<TransferPageState> implements Transfer
         .pipe(
           tap((accounts) => console.debug(this._logPrefix + 'Accounts loaded:', accounts)),
           mergeMap(async (accounts) => {
-
-
             // Load recipient
             const toAddress = this.recipient?.address || this.activatedRoute.snapshot.paramMap.get('to');
             if (isNotNilOrBlank(toAddress)) {
@@ -127,26 +130,31 @@ export class TransferPage extends AppPage<TransferPageState> implements Transfer
         )
     );
 
-    this._state.connect('account', this.accounts$.pipe(
-      switchMap(accounts => merge(
-        this.account$.pipe(map(account => ({accounts, fromAddress: account?.address}))),
-        this.activatedRoute.paramMap.pipe(
-          map(paramMap => ({accounts, fromAddress: paramMap.get('from')})),
-          filter(({fromAddress}) => isNotNilOrBlank(fromAddress))
-        )
-      )),
-      mergeMap(async ({accounts, fromAddress}) => {
-        // Load account
-        if (isNotNilOrBlank(fromAddress)) {
-          return this.accountService.getByAddress(fromAddress);
-        }
-        // Get default
-        else if (isNotEmptyArray(accounts)) {
-          return this.accountService.getDefault();
-        }
-        return undefined;
-      })
-    ));
+    this._state.connect(
+      'account',
+      this.accounts$.pipe(
+        switchMap((accounts) =>
+          merge(
+            this.account$.pipe(map((account) => ({ accounts, fromAddress: account?.address }))),
+            this.activatedRoute.paramMap.pipe(
+              map((paramMap) => ({ accounts, fromAddress: paramMap.get('from') })),
+              filter(({ fromAddress }) => isNotNilOrBlank(fromAddress))
+            )
+          )
+        ),
+        mergeMap(async ({ accounts, fromAddress }) => {
+          // Load account
+          if (isNotNilOrBlank(fromAddress)) {
+            return this.accountService.getByAddress(fromAddress);
+          }
+          // Get default
+          else if (isNotEmptyArray(accounts)) {
+            return this.accountService.getDefault();
+          }
+          return undefined;
+        })
+      )
+    );
 
     this._state.connect('currency', this.networkService.currency$);
 
@@ -230,7 +238,7 @@ export class TransferPage extends AppPage<TransferPageState> implements Transfer
     this.resetError();
 
     try {
-      const hash = await this.accountService.transfer(this.account, this.recipient, this.amount);
+      const hash = await this.accountService.transfer(this.account, this.recipient, this.amount, this.comment);
 
       if (this.showToastOnSubmit) {
         await this.showToast({ message: 'INFO.TRANSFER_SENT' });
@@ -346,4 +354,7 @@ export class TransferPage extends AppPage<TransferPageState> implements Transfer
       if (opts.emitEvent !== false) this.markForCheck();
     }
   }
+
+  protected readonly environment = environment;
+  protected readonly isDemo = isDemo;
 }
diff --git a/src/app/wot/wot-details.page.html b/src/app/wot/wot-details.page.html
index 688edc77bc26bb0ddbdf95ec6c38f5a5c2b92c4b..da9c01e57429f97f02bdead7a922d8a8f1cbe2f4 100644
--- a/src/app/wot/wot-details.page.html
+++ b/src/app/wot/wot-details.page.html
@@ -47,9 +47,13 @@
     </ion-button>
 
     <!-- certify -->
-    <ion-button (click)="certifyTo()" [disabled]="loading">
+    <ion-button (click)="certifyTo()" [disabled]="loading || (canCertify$ | async)">
       <ion-icon slot="start" name="ribbon"></ion-icon>
-      <ion-label translate>WOT.BTN_CERTIFY</ion-label>
+      @if (!isRenewal) {
+        <ion-label translate>WOT.BTN_CERTIFY</ion-label>
+      } @else {
+        <ion-label translate>WOT.BTN_RENEWAL_CERTIFY</ion-label>
+      }
     </ion-button>
   </div>
 
@@ -99,7 +103,9 @@
           } @else {
             <ion-label>
               <h3 translate>COMMON.UID</h3>
-              <p>{{ 'WOT.REGISTERED_SINCE' | translate }}</p>
+              @if (account.meta?.isMember) {
+                <p>{{ 'WOT.REGISTERED_SINCE' | translate }} {{ account.meta.createdOn | date: 'dd/MM/YYYY' }}</p>
+              }
             </ion-label>
 
             <ion-buttons slot="end" class="vertical-alignment">
@@ -113,6 +119,17 @@
           }
         </ion-item>
 
+        <!-- Distance rule -->
+        <ion-item [disabled]="disableDistanceRule()">
+          <ion-icon aria-hidden="true" slot="start" name="logo-steam"></ion-icon>
+          <ion-label translate>
+            HELP.GLOSSARY.DISTANCE_RULE
+            <ion-icon [color]="'tertiary'" name="help-circle-outline" class="tappable" (click)="showModalDistanceRuleDefinition()"></ion-icon>
+          </ion-label>
+          <ion-badge title="{{ titleDistanceRule() }}" color="{{ distanceRuleValid() ? 'success' : 'danger' }}">
+            {{ refereePercent$ | async | percent: '1.1' }}
+          </ion-badge>
+        </ion-item>
         <!-- Received cert count -->
         <ion-item detail [routerLink]="['/wot', 'cert', account.address, account.meta?.uid || '', 'received']" routerDirection="forward">
           <ion-icon aria-hidden="true" slot="start" name="ribbon"></ion-icon>
diff --git a/src/app/wot/wot-details.page.ts b/src/app/wot/wot-details.page.ts
index f70530e9faa37520aa14486be5b55e59ff8fdd5f..5f5f2c22ca87889e5e3c7a112829443263de0c5a 100644
--- a/src/app/wot/wot-details.page.ts
+++ b/src/app/wot/wot-details.page.ts
@@ -9,16 +9,34 @@ import { firstValueFrom, mergeMap, Observable, switchMap } from 'rxjs';
 import { RxState } from '@rx-angular/state';
 import { APP_TRANSFER_CONTROLLER, ITransferController } from '@app/transfer/transfer.model';
 import { filter, map } from 'rxjs/operators';
-import { firstArrayValue, isNotNilOrBlank } from '@app/shared/functions';
+import { firstArrayValue, isNil, isNotEmptyArray, isNotNilOrBlank } from '@app/shared/functions';
 import { IndexerService } from '@app/network/indexer/indexer.service';
 import { address2PubkeyV1, pubkeyV1Checksum } from '@app/shared/currencies';
 import { IdentityStatusEnum } from '@app/network/indexer/indexer-types.generated';
+import { DistanceInformation, WotService } from '@app/wot/wot.service';
+import { NetworkService } from '@app/network/network.service';
+import { HelpPage } from '@app/home/help/help.page';
+import { AlertController, ModalController } from '@ionic/angular';
 
 export interface WotDetailsPageState extends AppPageState {
   address: string;
   account: Account;
   receivedCertCount: number;
   givenCertCount: number;
+  refereePercent: number;
+  distanceInformation: DistanceInformation;
+  accounts: Account[];
+  isRenewal: boolean;
+  canCertify: boolean;
+}
+interface CertificationVerificationStep {
+  labelKey: string;
+  expectedResponse: 'confirm' | 'cancel';
+  order: number;
+}
+interface ModalSequenceConfig {
+  title: string;
+  steps: CertificationVerificationStep[];
 }
 
 @Component({
@@ -33,16 +51,81 @@ export class WotDetailsPage extends AppPage<WotDetailsPageState> implements OnIn
   @RxStateSelect() account$: Observable<Account>;
   @RxStateSelect() receivedCertCount$: Observable<number>;
   @RxStateSelect() givenCertCount$: Observable<number>;
+  @RxStateSelect() refereePercent$: Observable<number>;
+  @RxStateSelect() accounts$: Observable<Account[]>;
+  @RxStateSelect() isRenewal$: Observable<boolean>;
+  @RxStateSelect() canCertify$: Observable<boolean>;
 
   @Input() showToolbar = true;
   @Input() showBalance = false;
   @Input() showToastOnCertify = true;
   @Input() @RxStateProperty() address: string;
   @Input() @RxStateProperty() account: Account;
+  @RxStateProperty() refereePercent: number;
+  @RxStateProperty() distanceInformation: DistanceInformation;
+  @RxStateProperty() accounts: Account[];
+  @RxStateProperty() isRenewal: boolean;
+  @RxStateProperty() canCertify: boolean;
+
+  private readonly certificationSteps: CertificationVerificationStep[] = [
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.WELL_KNOWN',
+      order: 0,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.REVOCATION',
+      order: 1,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.CONTACT',
+      order: 2,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.DOUBLE_IDENTITY',
+      order: 3,
+      expectedResponse: 'cancel',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.MASTER_ACCOUNT',
+      order: 4,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.LICENSE',
+      order: 5,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.CREDENTIALS',
+      order: 6,
+      expectedResponse: 'confirm',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.QUESTIONS.PUBLIC_KEY_DIFFERENT',
+      order: 7,
+      expectedResponse: 'cancel',
+    },
+    {
+      labelKey: 'ACCOUNT.CERTIFICATION_MODAL.SHORT_LICENSE_REMINDER',
+      order: 8,
+      expectedResponse: 'confirm',
+    },
+  ];
+  private readonly certificationModalConfig: ModalSequenceConfig = {
+    title: 'ACCOUNT.CERTIFICATION_MODAL.CHECKLIST_TITLE',
+    steps: this.certificationSteps,
+  };
 
   constructor(
     private accountsService: AccountsService,
     private indexerService: IndexerService,
+    private networkService: NetworkService,
+    private alertCtrl: AlertController,
+    private wotService: WotService,
+    private modalCtrl: ModalController,
     @Inject(APP_TRANSFER_CONTROLLER) private transferController: ITransferController
   ) {
     super({ name: 'wot-details-page' });
@@ -94,6 +177,8 @@ export class WotDetailsPage extends AppPage<WotDetailsPageState> implements OnIn
         map(({ total }) => total)
       )
     );
+
+    this._state.connect('accounts', this.accountsService.watchAll());
   }
 
   ngOnInit() {
@@ -102,7 +187,13 @@ export class WotDetailsPage extends AppPage<WotDetailsPageState> implements OnIn
 
   protected async ngOnLoad(): Promise<WotDetailsPageState> {
     const account = await firstValueFrom(this.account$);
-    return <WotDetailsPageState>{ account };
+    const accounts = await firstValueFrom(this.accounts$);
+
+    const refereePercent = await this.wotService.getRefereePercentByAccount(account);
+    const distanceInformation = await this.wotService.getDistanceInformation(account);
+    const canCertify = await this.enableCertify();
+    const isRenewal = await this.isRenewalCertification(accounts);
+    return <WotDetailsPageState>{ account, accounts, refereePercent, distanceInformation, canCertify, isRenewal };
   }
 
   async copyPubkey(event: UIEvent, pubkey?: string) {
@@ -138,17 +229,36 @@ export class WotDetailsPage extends AppPage<WotDetailsPageState> implements OnIn
 
   async certifyTo() {
     const issuer = await this.accountsService.selectAccount({ isMember: true });
-    if (!issuer) return; // Skip
+    if (!issuer) {
+      await this.showToast({
+        id: 'cert',
+        message: 'INFO.CERTIFICATION_PENDING',
+        duration: -1,
+      });
+      return; // Skip}
+    }
+    const verification = await this.showModalVerification();
+    if (!verification) return; // Skip
 
     this.markAsLoading();
     this.resetError();
 
     try {
-      if (this.showToastOnCertify) await this.showToast({ id: 'cert', message: 'INFO.CERTIFICATION_PENDING', duration: -1 });
+      if (this.showToastOnCertify)
+        await this.showToast({
+          id: 'cert',
+          message: 'INFO.CERTIFICATION_PENDING',
+          duration: -1,
+        });
       const certHash = await this.accountsService.cert(issuer, this.account);
 
       if (this.showToastOnCertify)
-        await this.showToast({ id: 'cert', message: 'INFO.CERTIFICATION_DONE', swipeGesture: 'vertical', color: 'secondary' });
+        await this.showToast({
+          id: 'cert',
+          message: 'INFO.CERTIFICATION_DONE',
+          swipeGesture: 'vertical',
+          color: 'secondary',
+        });
 
       return certHash;
     } catch (err) {
@@ -157,5 +267,99 @@ export class WotDetailsPage extends AppPage<WotDetailsPageState> implements OnIn
     }
   }
 
+  distanceRuleValid(): boolean {
+    return this.refereePercent > this.networkService.currency.params.minAccessibleReferees / 1000000000;
+  }
+
+  disableDistanceRule(): boolean {
+    return isNil(this.refereePercent);
+  }
+
+  titleDistanceRule() {
+    return this.translate.instant('ACCOUNT.TITLE_DISTANCE_RULES', {
+      refereesReached: this.distanceInformation?.refereesReached,
+      refereesCount: this.distanceInformation?.refereesCount,
+      height: this.distanceInformation?.height,
+    });
+  }
+
+  async showModalDistanceRuleDefinition() {
+    const modal = await this.modalCtrl.create({
+      id: 'help-modal',
+      component: HelpPage,
+      componentProps: <HelpPage>{
+        highlightedDefinition: 'GLOSSARY_DISTANCE_RULE',
+      },
+      presentingElement: this._presentingElement,
+      canDismiss: true,
+    });
+    await modal.present();
+  }
+
+  private async showModalVerification(): Promise<boolean> {
+    let confirm = true;
+    console.log(`${this._logPrefix}prepare verification modal`);
+
+    for (const step of this.certificationModalConfig.steps) {
+      const alert = await this.alertCtrl.create({
+        header: this.translate.instant(this.certificationModalConfig.title),
+        message: this.translate.instant(step.labelKey),
+        buttons: [
+          {
+            text: this.translate.instant('COMMON.BTN_NO'),
+            role: 'cancel',
+            cssClass: 'secondary',
+          },
+          {
+            text: this.translate.instant('COMMON.BTN_YES'),
+            role: 'confirm',
+            cssClass: 'primary',
+          },
+        ],
+      });
+      await alert.present();
+      const { role } = await alert.onDidDismiss();
+
+      if (role !== step.expectedResponse) {
+        confirm = false;
+        const warning = await this.alertCtrl.create({
+          header: this.translate.instant(this.certificationModalConfig.title),
+          message: this.translate.instant('ACCOUNT.CERTIFICATION_MODAL.CHECKLIST_CONDITIONS_NOT_MET'),
+          buttons: [
+            {
+              text: this.translate.instant('COMMON.BTN_NO'),
+              role: 'cancel',
+              cssClass: 'secondary',
+            },
+            {
+              text: this.translate.instant('COMMON.BTN_YES'),
+              role: 'confirm',
+              cssClass: 'primary',
+            },
+          ],
+        });
+        await warning.present();
+        break;
+      }
+    }
+
+    return confirm;
+  }
+
+  protected async enableCertify() {
+    const accounts = this.accounts.filter((account) => account.meta.isMember === true);
+    return !isNotEmptyArray(accounts);
+  }
+
+  private async isRenewalCertification(accounts: Account[]) {
+    return (
+      this.canCertify &&
+      (await this.accountsService.isCertValid({
+        receiver: this.account?.address,
+        issuer: accounts[0]?.address,
+      }))
+    );
+  }
+
   protected readonly IdentityStatusEnum = IdentityStatusEnum;
 }
diff --git a/src/app/wot/wot.service.ts b/src/app/wot/wot.service.ts
index 33cf2846b18f30893054112c24830332db4399b3..1230ce35c064ecd31f2f46c47357bab7cdc6fbc2 100644
--- a/src/app/wot/wot.service.ts
+++ b/src/app/wot/wot.service.ts
@@ -10,21 +10,39 @@ import { LoadResult } from '@app/shared/services/service.model';
 import { Account, AccountUtils } from '@app/account/account.model';
 import { map } from 'rxjs/operators';
 import { isNotEmptyArray, isNotNil } from '@app/shared/functions';
+import { DistancePrecomputionData, NetworkService } from '@app/network/network.service';
+import { SettingsService } from '@app/settings/settings.service';
+
+export interface DistanceInformation {
+  refereesReached: number;
+  refereesCount: number;
+  minCertsForReferee: number;
+  height: number;
+}
 
 @Injectable({ providedIn: 'root' })
 export class WotService extends StartableService {
   constructor(
     private indexer: IndexerService,
-    private pod: PodService
+    private pod: PodService,
+    private network: NetworkService,
+    private settings: SettingsService
   ) {
     super();
   }
 
   protected async ngOnStart(): Promise<void> {
-    await Promise.all([this.indexer.ready(), this.pod.ready()]);
+    await Promise.all([this.indexer.ready(), this.pod.ready(), this.network.ready()]);
   }
 
-  wotSearch(filter: WotSearchFilter, options: { after?: string; first?: number; fetchPolicy?: FetchPolicy }): Observable<LoadResult<Account>> {
+  wotSearch(
+    filter: WotSearchFilter,
+    options: {
+      after?: string;
+      first?: number;
+      fetchPolicy?: FetchPolicy;
+    }
+  ): Observable<LoadResult<Account>> {
     const search1$ = this.indexer.wotSearch(filter, options).pipe(toArray());
     const search2$ = this.pod.profileSearch(filter, options).pipe(toArray());
 
@@ -62,4 +80,38 @@ export class WotService extends StartableService {
 
     return result;
   }
+
+  async getRefereePercentByAccount(account: Account): Promise<number> {
+    const distanceData: DistancePrecomputionData = await this.getDistanceData();
+    if (!distanceData) {
+      return null;
+    }
+
+    const accountIndex = account?.meta.index;
+    const refereesReached = distanceData?.results[accountIndex];
+    const refereesCount = distanceData?.referees_count;
+
+    return refereesReached / refereesCount;
+  }
+
+  async getDistanceInformation(account: Account): Promise<DistanceInformation> {
+    const distanceData: DistancePrecomputionData = await this.getDistanceData();
+
+    if (!distanceData) {
+      return null;
+    }
+
+    const accountIndex = account?.meta.index;
+    const refereesReached = distanceData?.results[accountIndex];
+    const refereesCount = distanceData?.referees_count;
+    const minCertsForReferee = distanceData?.min_certs_for_referee;
+    const height = distanceData?.height;
+    return <DistanceInformation>{ refereesReached, refereesCount, height, minCertsForReferee };
+  }
+
+  protected async getDistanceData() {
+    const distanceFileUrls = this.settings.data.preferredDistanteFileUrls;
+    const distanceData: DistancePrecomputionData = await this.network.getDistancePrecomputionData(distanceFileUrls);
+    return distanceData;
+  }
 }
diff --git a/src/assets/feed/1.1/feed-en-GB.json b/src/assets/feed/1.1/feed-en-GB.json
new file mode 100644
index 0000000000000000000000000000000000000000..9509fc7f8c5df8948d2deacaa1726837feac72bc
--- /dev/null
+++ b/src/assets/feed/1.1/feed-en-GB.json
@@ -0,0 +1,9 @@
+{
+  "version": "https://jsonfeed.org/version/1.1",
+  "title": "News",
+  "user_comment": "Ce fichier redirige vers le forum Duniter (via 'next_url')",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-en-GB.json",
+
+  "home_page_url": "https://forum.duniter.org/t/new-version-of-cesium-en/11460",
+  "next_url": "https://forum.duniter.org/t/new-version-of-cesium-en/11460.json"
+}
diff --git a/src/assets/feed/1.1/feed-en.json b/src/assets/feed/1.1/feed-en.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c3547cf76503f80aa580cfbfac43d7cf614365a
--- /dev/null
+++ b/src/assets/feed/1.1/feed-en.json
@@ -0,0 +1,9 @@
+{
+  "version": "https://jsonfeed.org/version/1.1",
+  "title": "News",
+  "user_comment": "Ce fichier redirige vers le forum Duniter (via 'next_url')",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-en.json",
+
+  "home_page_url": "https://forum.duniter.org/t/new-version-of-cesium-en/11460",
+  "next_url": "https://forum.duniter.org/t/new-version-of-cesium-en/11460.json"
+}
diff --git a/src/assets/feed/1.1/feed-es-ES.json b/src/assets/feed/1.1/feed-es-ES.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4b16bdde3ba824c7aac92e454c83923f26e0844
--- /dev/null
+++ b/src/assets/feed/1.1/feed-es-ES.json
@@ -0,0 +1,9 @@
+{
+  "version": "https://jsonfeed.org/version/1.1",
+  "title": "Noticias",
+  "user_comment": "Ce fichier redirige vers le forum Duniter (via 'next_url')",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-es-ES.json",
+
+  "home_page_url": "https://forum.duniter.org/t/nueva-version-de-cesium-es/11459",
+  "next_url": "https://forum.duniter.org/t/nueva-version-de-cesium-es/11459.json"
+}
diff --git a/src/assets/feed/1.1/feed-fr-FR.json b/src/assets/feed/1.1/feed-fr-FR.json
new file mode 100644
index 0000000000000000000000000000000000000000..edaa05d981645c94292b88dfc33c354cabe23cae
--- /dev/null
+++ b/src/assets/feed/1.1/feed-fr-FR.json
@@ -0,0 +1,9 @@
+{
+  "version": "https://jsonfeed.org/version/1.1",
+  "title": "Actualités",
+  "user_comment": "Ce fichier redirige vers le forum Duniter (via 'next_url')",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-fr-FR.json",
+
+  "home_page_url": "https://forum.duniter.org/t/gchange-v2-moderation-ou-et-federation/12910/3",
+  "next_url": "https://forum.duniter.org/t/gchange-v2-moderation-ou-et-federation/12910/3.json"
+}
diff --git a/src/assets/feed/1.1/feed-fr.json b/src/assets/feed/1.1/feed-fr.json
new file mode 100644
index 0000000000000000000000000000000000000000..4ba478df592192c473dbe04f8a54ee59aa059f73
--- /dev/null
+++ b/src/assets/feed/1.1/feed-fr.json
@@ -0,0 +1,9 @@
+{
+  "version": "https://jsonfeed.org/version/1.1",
+  "title": "Actualités",
+  "user_comment": "Ce fichier redirige vers le forum Duniter (via 'next_url')",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-fr-FR.json",
+
+  "home_page_url": "https://forum.duniter.org/t/nouvelle-version-de-cesium-fr/11458/2",
+  "next_url": "https://forum.duniter.org/t/nouvelle-version-de-cesium-fr/11458/2.json"
+}
diff --git a/src/assets/feed/feed-en.json b/src/assets/feed/feed-en.json
new file mode 100644
index 0000000000000000000000000000000000000000..56886b9934dbb0577e5f840ba326c6a7605cb57e
--- /dev/null
+++ b/src/assets/feed/feed-en.json
@@ -0,0 +1,27 @@
+{
+  "version": "https://jsonfeed.org/version/1",
+  "title": "News",
+  "user_comment": "Ce fichier est nécessaire pour les versions avant la 1.7.7",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/feed-en.json",
+
+  "home_page_url": "https://forum.duniter.org/t/nouvelle-version-de-cesium-fr/11458/2",
+  "author": {
+    "name": "Benoit Lavenier",
+    "url": "@BenoitLavenier",
+    "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+  },
+  "items": [
+    {
+      "title": "New version of Cesium",
+      "author": {
+        "name": "Benoit Lavenier",
+        "url": "@BenoitLavenier",
+        "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+      },
+      "date_published": "2023-08-14T19:30:00+02:00",
+      "id": "https://forum.duniter.org/t/new-version-of-cesium-en/11460",
+      "url": "https://forum.duniter.org/t/new-version-of-cesium-en/11460",
+      "content_html": "<p>A new release version of Cesium <a href=\"https://cesium.app\">is available</a>!</p><blockquote><p>The cesium.app website is currently being updated... The same goes for the Play Store, App Store, etc.\nPlease be patient! :slight_smile:</p></blockquote><p>In recent months, many of you have encountered multiple difficulties: transactions disappearing or being completely lost, “timeout” error, desynchronized node, etc.</p><p>We are well aware of these issues. They are related to several factors:</p><ul><li>on the one hand, to the new version 1.7 of Cesium, which introduces automatic node selection for Duniter, by random drawing among synchronized nodes;</li><li>on the other hand, to the state of the Duniter nodes network, some nodes have been found to be misconfigured to work with Cesium, or using unstable versions of Duniter.</li></ul><h2><a name=\"new-features-1\" class=\"anchor\" href=\"#new-features-1\"></a>New Features</h2><h3><a name=\"at-start-up-2\" class=\"anchor\" href=\"#at-start-up-2\"></a>At Start-Up</h3><p>Node selection at startup has been reviewed to select only those compatible with Cesium’s features. This should fix the previously explained problems.</p><h3><a name=\"my-operations-3\" class=\"anchor\" href=\"#my-operations-3\"></a>My Operations</h3><p>In “My Operations,” long comments are now more visible, whether on a phone:<br><img src=\"https://forum.duniter.org/uploads/default/original/2X/4/4fa5d83286441e6689d93b6d636a46771fcb543d.png\" alt=\"image\" data-base62-sha1=\"bmB2vlwdnBe1zK86r7RGiQpJesl\" width=\"594\" height=\"357\"></p><p>…or in a web browser:</p><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png\" data-download-href=\"https://forum.duniter.org/uploads/default/7d081473f9398e237425c96c8b9d55ef81e5662e\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png\" alt=\"image\" data-base62-sha1=\"hQ4ZGoEbNyaKoAMxEGc1d0Ksby6\" width=\"690\" height=\"192\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 2x\" data-dominant-color=\"F2F6F8\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">819×229 36.5 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Other small improvements on this page:</p><ul><li>Refreshing the list no longer causes flickering of existing operations. Only new operations are animated;</li><li>loading older operations (at the bottom of the page) is now done directly by scrolling down. No need to click on “Show More” or “Show All”! Beyond 6 months of history, these buttons appear to limit the number of network requests.<br><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png\" data-download-href=\"https://forum.duniter.org/uploads/default/8617ad8aa899debbc16bd92f38f1eefe68ed4699\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png\" alt=\"image\" data-base62-sha1=\"j8eI3VQg2QseXemuowxFVl8qFlf\" width=\"690\" height=\"211\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png, https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_1035x316.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png 2x\" data-dominant-color=\"F7F9FA\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">1094×335 36.1 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></li></ul><h3><a name=\"networks-in-expert-mode-4\" class=\"anchor\" href=\"#networks-in-expert-mode-4\"></a>Networks (in expert mode)</h3><p>The network view now allows you to see the status of the waiting queues (or pools) containing pending documents (transactions and membership requests).</p><blockquote><p>Only if you have activated “expert mode” in the settings,<br>and for nodes that have activated the BMA API</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f475de5c8c5f2e8efa21e33a387c3262a33eded5\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png\" alt=\"image\" data-base62-sha1=\"ySB2aVf3V1kcQ5aWwasCVNCX9kN\" width=\"690\" height=\"258\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 2x\" data-dominant-color=\"F3F7F4\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">781×293 36.4 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Another small novelty: you can now see if a node (BMA) properly archives the history of transactions. The symbol <strong><img src=\"https://forum.duniter.org/images/emoji/twitter/credit_card.png?v=12\" title=\":credit_card:\" class=\"emoji\" alt=\":credit_card:\" loading=\"lazy\" width=\"20\" height=\"20\"> <code>TX</code></strong> now appears in the <code>API</code> column.</p><blockquote><p>Only visible in expert mode, by <strong>expanding the display</strong> of rows</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f6c5abe0063f927df3b6a1814f3265d611c4ac4c\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png\" alt=\"image\" data-base62-sha1=\"zd2XW5qedxuZ7gjgSiRiYV6K2D2\" width=\"690\" height=\"40\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 2x\" data-dominant-color=\"EFF3F1\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">787×46 8.14 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><h3><a name=\"other-fixes-5\" class=\"anchor\" href=\"#other-fixes-5\"></a>Other Fixes</h3><ul><li>Android / iOS: file downloading works! For the revocation file in particular, but also for the list of operations, the saving of identifiers, etc.<blockquote><p>You will find the downloaded file in the “Downloads” directory (on Android) or “Documents” (on iOS);</p></blockquote></li><li>My Operations: the list of UDs is now correctly displayed (without going through the Duniter nodes to bypass a limitation, but through the Cesium+ pod if activated);</li><li>Notifications: the number of messages or notifications is now correct when you log in for the first time on an account.</li></ul><br/><br/>(...)"
+    }
+  ]
+}
diff --git a/src/assets/feed/feed-es.json b/src/assets/feed/feed-es.json
new file mode 100644
index 0000000000000000000000000000000000000000..96302df9ae049451f097f0c96ac2220a65f183ff
--- /dev/null
+++ b/src/assets/feed/feed-es.json
@@ -0,0 +1,27 @@
+{
+  "version": "https://jsonfeed.org/version/1",
+  "title": "News",
+  "user_comment": "Ce fichier est nécessaire pour les versions avant la 1.7.7",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/feed-es.json",
+
+  "home_page_url": "https://forum.duniter.org/t/nueva-version-de-cesium-es/11459/3",
+  "author": {
+    "name": "Benoit Lavenier",
+    "url": "@BenoitLavenier",
+    "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+  },
+  "items": [
+    {
+      "title": "Nueva versión de Cesium",
+      "author": {
+        "name": "Benoit Lavenier",
+        "url": "@BenoitLavenier",
+        "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+      },
+      "date_published": "2023-08-14T19:30:00+02:00",
+      "id": "https://forum.duniter.org/t/nueva-version-de-cesium-es/11459",
+      "url": "https://forum.duniter.org/t/nueva-version-de-cesium-es/11459",
+      "content_html": "<p>¡Una nueva versión de Cesium <a href=\"https://cesium.app\">está disponible</a>!</p><blockquote><p>El sitio cesium.app está siendo actualizado... Lo mismo para Play Store, App Store, etc.\n¡Tengan paciencia!</p></blockquote><p>En los últimos meses, muchos de ustedes han encontrado múltiples dificultades: transacciones que desaparecen o se pierden completamente, error de “tiempo de espera excedido”, nodo desincronizado, etc.</p><p>Somos muy conscientes de estos problemas. Están relacionados con varios factores:</p><ul><li>por un lado, a la nueva versión 1.7 de Cesium, que introduce la selección automática del nodo Duniter, mediante sorteo entre los nodos sincronizados;</li><li>por otro lado, al estado de la red de nodos Duniter, algunos de los cuales se han revelado mal configurados para funcionar con Cesium, o utilizando versiones inestables de Duniter.</li></ul><h2><a name=\"novedades-1\" class=\"anchor\" href=\"#novedades-1\"></a>Novedades</h2><h3><a name=\"al-inicio-2\" class=\"anchor\" href=\"#al-inicio-2\"></a>Al inicio</h3><p>La selección de nodos al inicio ha sido revisada, para seleccionar solo aquellos compatibles con las funcionalidades de Cesium. Esto debería corregir los problemas explicados anteriormente.</p><h3><a name=\"mis-operaciones-3\" class=\"anchor\" href=\"#mis-operaciones-3\"></a>Mis operaciones</h3><p>En “Mis operaciones”, los comentarios largos son ahora más visibles, ya sea en un teléfono:<br><img src=\"https://forum.duniter.org/uploads/default/original/2X/4/4fa5d83286441e6689d93b6d636a46771fcb543d.png\" alt=\"image\" data-base62-sha1=\"bmB2vlwdnBe1zK86r7RGiQpJesl\" width=\"594\" height=\"357\"></p><p>…o en un navegador web:</p><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png\" data-download-href=\"https://forum.duniter.org/uploads/default/7d081473f9398e237425c96c8b9d55ef81e5662e\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png\" alt=\"image\" data-base62-sha1=\"hQ4ZGoEbNyaKoAMxEGc1d0Ksby6\" width=\"690\" height=\"192\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 2x\" data-dominant-color=\"F2F6F8\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">819×229 36.5 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Otras pequeñas mejoras en esta página:</p><ul><li>El hecho de refrescar la lista ya no provoca el parpadeo de las operaciones existentes. Solo las nuevas operaciones están animadas;</li><li>la carga de las operaciones más antiguas (en la parte inferior de la página) se hace directamente desplazándose hacia abajo. ¡No es necesario hacer clic en “Mostrar más” o “Mostrar todo”! Más allá de 6 meses de historial, estos botones aparecen para limitar el número de solicitudes a la red.<br><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png\" data-download-href=\"https://forum.duniter.org/uploads/default/8617ad8aa899debbc16bd92f38f1eefe68ed4699\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png\" alt=\"image\" data-base62-sha1=\"j8eI3VQg2QseXemuowxFVl8qFlf\" width=\"690\" height=\"211\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png, https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_1035x316.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png 2x\" data-dominant-color=\"F7F9FA\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">1094×335 36.1 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></li></ul><h3><a name=\"redes-en-modo-experto-4\" class=\"anchor\" href=\"#redes-en-modo-experto-4\"></a>Redes (en modo experto)</h3><p>La vista de red permite ahora ver el estado de las colas de espera (o piscinas) que contienen los documentos pendientes (transacciones y solicitudes de membresía).</p><blockquote><p>Solo si ha activado el “modo experto” en la configuración,<br>y para los nodos que han activado la API BMA</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f475de5c8c5f2e8efa21e33a387c3262a33eded5\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png\" alt=\"image\" data-base62-sha1=\"ySB2aVf3V1kcQ5aWwasCVNCX9kN\" width=\"690\" height=\"258\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 2x\" data-dominant-color=\"F3F7F4\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">781×293 36.4 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Otra pequeña novedad: ahora puede ver si un nodo (BMA) archiva correctamente el historial de transacciones. El símbolo <strong><img src=\"https://forum.duniter.org/images/emoji/twitter/credit_card.png?v=12\" title=\":credit_card:\" class=\"emoji\" alt=\":credit_card:\" loading=\"lazy\" width=\"20\" height=\"20\"> <code>TX</code></strong> aparece ahora en la columna <code>API</code>.</p><blockquote><p>Solo visible en modo experto, al <strong>expandir la visualización</strong> de las filas</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f6c5abe0063f927df3b6a1814f3265d611c4ac4c\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png\" alt=\"image\" data-base62-sha1=\"zd2XW5qedxuZ7gjgSiRiYV6K2D2\" width=\"690\" height=\"40\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 2x\" data-dominant-color=\"EFF3F1\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">787×46 8.14 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><h3><a name=\"otras-correcciones-5\" class=\"anchor\" href=\"#otras-correcciones-5\"></a>Otras correcciones</h3><ul><li>Android / iOS: ¡la descarga de archivos funciona! Para el archivo de revocación en particular, pero también para la lista de operaciones, la salvaguardia de identificadores, etc.<blockquote><p>Encontrarás el archivo descargado en el directorio “Descargas” (en Android) o “Documentos” (en iOS);</p></blockquote></li><li>Mis operaciones: la lista de UDs se muestra ahora correctamente (sin pasar por los nodos Duniter para eludir una limitación, pero a través del pod Cesium+ si está activado);</li><li>Notificaciones: el número de mensajes o notificaciones es ahora correcto cuando inicia sesión por primera vez en una cuenta.</li></ul><br/><br/>(...)"
+    }
+  ]
+}
diff --git a/src/assets/feed/feed-fr.json b/src/assets/feed/feed-fr.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4196df900223e9e91b7eaae768e3a20ad962862
--- /dev/null
+++ b/src/assets/feed/feed-fr.json
@@ -0,0 +1,26 @@
+{
+  "version": "https://jsonfeed.org/version/1",
+  "title": "Actualités",
+  "user_comment": "Ce fichier est nécessaire pour les versions avant la 1.7.7",
+  "feed_url": "https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/feed-ff.json",
+  "home_page_url": "https://forum.duniter.org/t/nouvelle-version-de-cesium-fr/11458/2",
+  "author": {
+    "name": "Benoit Lavenier",
+    "url": "@BenoitLavenier",
+    "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+  },
+  "items": [
+    {
+      "title": "Nouvelle version de Cesium",
+      "author": {
+        "name": "Benoit Lavenier",
+        "url": "@BenoitLavenier",
+        "avatar": "https://forum.duniter.org//user_avatar/forum.duniter.org/kimamila/48/185_2.png"
+      },
+      "date_published": "2024-01-14T19:30:00+02:00",
+      "id": "https://forum.duniter.org/t/nouvelle-version-de-cesium/11458",
+      "url": "https://forum.duniter.org/t/nouvelle-version-de-cesium/11458",
+      "content_html": "<p>Une nouvelle version de Cesium <a href=\"https://cesium.app\">est disponible</a> !</p><blockquote><p>La mise jour du site et des Play Store est en cours.\nSoyez patient !</p></blockquote><p>Ces derniers mois, beaucoup d’entre vous ont rencontré des difficultés multiples : transactions qui disparaissent ou sont carrément perdues, erreur “délai d’attente dépassé”, nœud désynchronisé, etc.</p><p>Nous sommes bien conscients de ces problèmes. Ils sont liés à plusieurs facteurs :</p><ul><li>d’une part, à la nouvelle version 1.7 de Cesium, qui introduit la sélection automatique du nœud Duniter, par tirage au sort parmi les nœuds synchronisés ;</li><li>d’autre part, à l’état du réseau des nœuds Duniter, dont certains nœuds se sont révélés mal configurés pour fonctionner avec Cesium, ou utilisant des versions de Duniter non stables.</li></ul><h2><a name=\"nouveauts-1\" class=\"anchor\" href=\"#nouveauts-1\"></a>Nouveautés</h2><h3><a name=\"au-dmarrage-2\" class=\"anchor\" href=\"#au-dmarrage-2\"></a>Au démarrage</h3><p>La sélection des nœuds au démarrage a été revue, pour ne sélectionner que ceux compatibles avec les fonctionnalités de Cesium. Ceci devrait corriger les problèmes précédemment expliqués.</p><h3><a name=\"mes-oprations-3\" class=\"anchor\" href=\"#mes-oprations-3\"></a>Mes opérations</h3><p>Dans “Mes opérations”, les longs commentaires sont mieux visibles, que ce soit sur téléphone :<br><img src=\"https://forum.duniter.org/uploads/default/original/2X/4/4fa5d83286441e6689d93b6d636a46771fcb543d.png\" alt=\"image\" data-base62-sha1=\"bmB2vlwdnBe1zK86r7RGiQpJesl\" width=\"594\" height=\"357\"></p><p>…ou dans un navigateur web :</p><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png\" data-download-href=\"https://forum.duniter.org/uploads/default/7d081473f9398e237425c96c8b9d55ef81e5662e\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png\" alt=\"image\" data-base62-sha1=\"hQ4ZGoEbNyaKoAMxEGc1d0Ksby6\" width=\"690\" height=\"192\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e_2_690x192.png, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/7/7d081473f9398e237425c96c8b9d55ef81e5662e.png 2x\" data-dominant-color=\"F2F6F8\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">819×229 36.5 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Autres petites améliorations sur cette page :</p><ul><li>Le fait de rafraîchir la liste ne provoque plus de clignotement des opérations déjà existantes. Seules les nouvelles opérations sont animées ;</li><li>le chargement des opérations plus anciennes (en bas de page) se fait directement par défilement vers le bas. Plus besoin de cliquer sur “Afficher plus” ou “Afficher tout” ! Au-delà de 6 mois d’historique, ces boutons apparaissent, pour limiter le nombre de requêtes au réseau.<br><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png\" data-download-href=\"https://forum.duniter.org/uploads/default/8617ad8aa899debbc16bd92f38f1eefe68ed4699\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png\" alt=\"image\" data-base62-sha1=\"j8eI3VQg2QseXemuowxFVl8qFlf\" width=\"690\" height=\"211\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_690x211.png, https://forum.duniter.org/uploads/default/optimized/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699_2_1035x316.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/8/8617ad8aa899debbc16bd92f38f1eefe68ed4699.png 2x\" data-dominant-color=\"F7F9FA\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">1094×335 36.1 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></li></ul><h3><a name=\"rseaux-en-mode-expert-4\" class=\"anchor\" href=\"#rseaux-en-mode-expert-4\"></a>Réseaux (en mode expert)</h3><p>La vue réseau permet maintenant de voir l’état des files d’attente (ou piscines) contenant les documents en attente (transactions et demandes d’adhésion).</p><blockquote><p>Uniquement si vous avez activé le “mode expert” dans les paramètres,<br>et pour les nœuds ayant activé l’API BMA</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f475de5c8c5f2e8efa21e33a387c3262a33eded5\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png\" alt=\"image\" data-base62-sha1=\"ySB2aVf3V1kcQ5aWwasCVNCX9kN\" width=\"690\" height=\"258\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5_2_690x258.png, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f475de5c8c5f2e8efa21e33a387c3262a33eded5.png 2x\" data-dominant-color=\"F3F7F4\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">781×293 36.4 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><p>Autre petite nouveauté : vous pouvez voir si un nœud (BMA) archive bien l’historique des transactions. Le symbole <strong><img src=\"https://forum.duniter.org/images/emoji/twitter/credit_card.png?v=12\" title=\":credit_card:\" class=\"emoji\" alt=\":credit_card:\" loading=\"lazy\" width=\"20\" height=\"20\"> <code>TX</code></strong> s’affiche maintenant, dans la colonne <code>API</code>.</p><blockquote><p>Visible uniquement en mode expert, en <strong>décompactant l’affichage</strong> des lignes</p></blockquote><p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png\" data-download-href=\"https://forum.duniter.org/uploads/default/f6c5abe0063f927df3b6a1814f3265d611c4ac4c\" title=\"image\"><img src=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png\" alt=\"image\" data-base62-sha1=\"zd2XW5qedxuZ7gjgSiRiYV6K2D2\" width=\"690\" height=\"40\" srcset=\"https://forum.duniter.org/uploads/default/optimized/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c_2_690x40.png, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 1.5x, https://forum.duniter.org/uploads/default/original/2X/f/f6c5abe0063f927df3b6a1814f3265d611c4ac4c.png 2x\" data-dominant-color=\"EFF3F1\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use href=\"#far-image\"></use></svg><span class=\"filename\">image</span><span class=\"informations\">787×46 8.14 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use href=\"#discourse-expand\"></use></svg></div></a></div></p><h3><a name=\"autres-correctifs-5\" class=\"anchor\" href=\"#autres-correctifs-5\"></a>Autres correctifs</h3><ul><li>Android / iOS : le téléchargement de fichier fonctionne ! Pour le fichier de révocation notamment, mais aussi pour la liste des opérations, la sauvegarde des identifiants, etc.<blockquote><p>Vous trouverez le fichier téléchargé dans le répertoire “Téléchargements” (sous Android) ou “Documents” (sous iOS) ;</p></blockquote></li><li>Mes opérations : la liste des DU s’affiche maintenant correctement (sans passer par les nœuds Duniter pour contourner une limitation, mais par le pod Cesium+ s’il est activé) ;</li><li>Notifications : le nombre de messages ou de notifications est maintenant correct lorsque vous vous connectez pour la première fois sur un compte.</li></ul><br/> (...)"
+    }
+  ]
+}
diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json
index 8ff034abebd1045c00300cca2166bcaab1bf717a..db0eaeff0a98e86854ea449796c4b79320506020 100644
--- a/src/assets/i18n/ca.json
+++ b/src/assets/i18n/ca.json
@@ -135,7 +135,8 @@
     "CONNECTION_ERROR": "Node <b>{{server}}</b> inabastable o adreça invàlida.<br/><br/>Comproveu bé la vostra connexió a Internet, o el node Duniter <a class=\"positive\" ng-click=\"doQuickFix('settings')\">als ajustos</a>.",
     "SHOW_ALL_FEED": "Veure-ho tot",
     "READ_MORE": "Llegiu més",
-    "FEED_SOURCE": "Font"
+    "FEED_SOURCE": "Font",
+    "NEWS": "Notícies"
   },
   "SETTINGS": {
     "TITLE": "Ajustos",
@@ -174,6 +175,11 @@
       "HOUR": "Després de {{value}}h d'inactivitat",
       "ALWAYS": "Al final de la sessió"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Cada dia",
+      "WEEKLY": "Cada setmana",
+      "MONTHLY": "Cada mes"
+    },
     "KEYRING_FILE": "Arxiu de claus",
     "KEYRING_FILE_HELP": "Us permet <b>connectar-vos</b> automàticament a cada inici <br/>i fins i tot <b>autenticar-vos</b> (només si \"Caducitat de l'autenticació\" està configurada en mode: \"al final de la sessió\").",
     "REMEMBER_ME": "Recordar-me",
@@ -328,6 +334,7 @@
     "MIRROR": "mirall",
     "MIRRORS": "Miralls",
     "MIRROR_PEERS": "Nodes mirall",
+    "CUSTOM_PEER": "Introduïu un node",
     "PEER_LIST": "Llista de nodes",
     "MEMBERS": "Membre",
     "MEMBER_PEERS": "Nodes membre",
@@ -374,6 +381,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Es tracta d'un moneder simple, sense solicitud d'inscripció en espera",
     "TECHNICAL_DIVIDER": "Informacions tècniques",
     "BTN_CERTIFY": "Certificar",
+    "BTN_RENEWAL_CERTIFY": "Renovar",
     "BTN_YES_CERTIFY": "Sí, certificar",
     "BTN_SELECT_AND_CERTIFY": "Nova certificació",
     "ACCOUNT_OPERATIONS": "Transaccions del compte",
@@ -524,6 +532,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Cancelar la membresía…",
     "BTN_SECURITY_DOTS": "Cuenta i seguridad…",
     "BTN_SHOW_DETAILS": "Publicar la información técnica",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} al bloc {{height}}",
+    "MEMBER_CONVERT_FAILED": "Error en la sol·licitud, no compleixes totes les normes de la xarxa de confiança.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Importe blocado",
       "DESCRIPTION": "Aquí están las condiciones para desblocar este importe:",
@@ -671,6 +681,23 @@
       "TIME": "Fecha",
       "AMOUNT": "Cantidad",
       "COMMENT": "Comentario"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Llista de verificacions abans de la certificació",
+      "INFOS": "La seguretat de la moneda Ğ1 recau sobre cada membre. Abans de certificar la identitat d'aquesta persona, cal que realitzis algunes verificacions. Si us plau, respon a les següents preguntes:",
+      "BTN_ALL_CHECK": "Certificar",
+      "CHECKLIST_CONDITIONS_NOT_MET": "La certificació no s'ha enviat. Les verificacions semblen insuficients. Si us plau, verifica de nou cada punt amb la persona a certificar.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>Coneixes bé</b> la persona que vols certificar, i coneixes altres persones que també la coneixen bé?",
+        "REVOCATION": "Ha descarregat el seu <b>document de revocació</b> i sap on trobar-lo?",
+        "CONTACT": "Has <b>contactat</b> amb aquesta persona per diversos mitjans i t'ha respost?",
+        "DOUBLE_IDENTITY": "La persona ha de tenir <b>una sola identitat de membre activa</b>. En té alguna <b>altra</b>?",
+        "MASTER_ACCOUNT": "Domina el seu compte i ja ha <b>enviat diners des del seu compte</b> com a mínim una vegada?",
+        "LICENSE": "Ha <b>entès la llicència</b> i accepta complir-la per a la certificació d'altres membres?",
+        "CREDENTIALS": "L'identificador i la contrasenya del seu compte són <b>suficientment llargs i complexos</b>? Ha entès que tant la contrasenya com la frase secreta han de romandre secret? Està segur que en recordarà o que podrà trobar-los?",
+        "PUBLIC_KEY_DIFFERENT": "La <b>clau pública</b> indicada ha de ser <b>idèntica</b> a la que aquesta persona t'ha donat. Les claus són <b>diferents</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "Pots recordar a la persona certificada els paràmetres de les certificacions:<br/><br/><ul><li> - Cada membre pot emetre com a màxim 100 certificacions vàlides.</li><li> - Les certificacions es registren amb un interval de 5 dies.</li><li> - Una nova identitat de membre ha de reunir com a mínim 5 certificacions en menys de dos mesos.</li><li> - Un membre ha de renovar la seva afiliació cada any.</li><li> - Les certificacions són vàlides durant dos anys.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -737,6 +764,7 @@
     "GET_CURRENCY_PARAMETER": "Error en la recuperación de les regles de moneda.",
     "GET_CURRENCY_FAILED": "Carga de la moneda imposible. Si us plau, intente más tarde.",
     "SEND_TX_FAILED": "Error en la transferencia.",
+    "CLAIM_UD_FAILED": "S'ha produït un error en reclamar el dividend universal.",
     "ALL_SOURCES_USED": "Si us plau, espera el càlcul del bloc siguiente (Todas sus fuentes de moneda fueron utilizada).",
     "NOT_ENOUGH_SOURCES": "No lo bastante cambio para mandar este importe en una sola transacció.<br/>Importe máximo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Error en la creación de la compte membre.",
diff --git a/src/assets/i18n/en-GB.json b/src/assets/i18n/en-GB.json
index 898c2a5ea9b09a0094c350a6a42a408a19858d67..47b2a8275bde18d76dd99ba41210db0a542aa31c 100644
--- a/src/assets/i18n/en-GB.json
+++ b/src/assets/i18n/en-GB.json
@@ -134,7 +134,8 @@
     "CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or change node <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
     "SHOW_ALL_FEED": "Show all",
     "READ_MORE": "Read more",
-    "FEED_SOURCE": "Source"
+    "FEED_SOURCE": "Source",
+    "NEWS": "News"
   },
   "SETTINGS": {
     "TITLE": "Settings",
@@ -171,6 +172,11 @@
       "HOUR": "After {{value}}h of inactivity",
       "ALWAYS": "At the end of the session"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Every day",
+      "WEEKLY": "Every week",
+      "MONTHLY": "Every month"
+    },
     "KEYRING_FILE": "Keyring file",
     "KEYRING_FILE_HELP": "Allow auto-connect at startup, or to authenticate (only if \"Expiration of authentication\" is \"at the end of the session\"",
     "REMEMBER_ME": "Remember me ?",
@@ -322,6 +328,7 @@
     "MIRROR": "mirror",
     "MIRRORS": "Mirrors",
     "MIRROR_PEERS": "Mirror peers",
+    "CUSTOM_PEER": "Enter a peer",
     "PEER_LIST": "Peer's list",
     "MEMBERS": "Members",
     "MEMBER_PEERS": "Member peers",
@@ -368,6 +375,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "This is a simple wallet, with no pending membership application.",
     "TECHNICAL_DIVIDER": "Technical data",
     "BTN_CERTIFY": "Certify",
+    "BTN_RENEWAL_CERTIFY": "Renew",
     "BTN_YES_CERTIFY": "Yes, certify",
     "BTN_SELECT_AND_CERTIFY": "New certification",
     "ACCOUNT_OPERATIONS": "Account operations",
@@ -512,6 +520,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
     "BTN_SECURITY_DOTS": "Sign-in and security...",
     "BTN_SHOW_DETAILS": "Display technical data",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} au bloc {{height}}",
+    "MEMBER_CONVERT_FAILED": "Request failed, you do not meet all the rules of the web of trust.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Locked amount",
       "DESCRIPTION": "Here are the conditions for unlocking this amount:",
@@ -659,6 +669,23 @@
       "TIME": "Date",
       "AMOUNT": "Amount",
       "COMMENT": "Comment"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Certification check list",
+      "INFOS": "Each member is responsible for the security of Äž1 currency. Before certifying this person's identity, you should have performed few checks. Please answer following questions:",
+      "BTN_ALL_CHECK": "Certify",
+      "CHECKLIST_CONDITIONS_NOT_MET": "The certification has not been sent. All answers are not right. Please recheck each point with the person to be certified.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "Do you know <b>well</b> the person you are about to certify? Do you know other people who also know this person well?",
+        "REVOCATION": "Has this person downloaded their <b>revocation document</b> and do they know where to find it?",
+        "CONTACT": "Have you <b>had contact</b> with this person by many means, and did they answer?",
+        "DOUBLE_IDENTITY": "The person should own <b>only one active member identity</b>. Do you think they own another one?",
+        "MASTER_ACCOUNT": "Does this person own their accounts secrets? Have they already <b>sent money from their account</b> at least once?",
+        "LICENSE": "Has this person <b>understood the Duniter license</b>? Do they agree to comply with it for future certifications?",
+        "CREDENTIALS": "Was the account created with <b>long and complex secret identifier and password</b> (ex. passphrases)? Did the person understand that both secret identifier and password must remain secret ? Are they <b>sure to remember them</b> or to be able to find them?",
+        "PUBLIC_KEY_DIFFERENT": "The <b>public key</b> that is shown must be <b>identical</b> to the one the person gave you. The public keys are they <b>different</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "You may remind the person to certify different certification parameters:<br/><br/><ul><li> - Each member can certify 100 other identities at most.</li><li> - The certifications are saved with a 5 days interval.</li><li> - A new identity must gather at least 5 certifications in less than 2 months.</li><li>- A member must renew its membership at least once a year.</li><li> - Certifications have a lifespan of two years.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -716,6 +743,7 @@
     "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
     "GET_CURRENCY_FAILED": "Could not load currency. Please retry later.",
     "SEND_TX_FAILED": "Could not send transaction.",
+    "CLAIM_UD_FAILED": "An error occurred while claiming your Universal Dividend.",
     "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
     "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
@@ -842,7 +870,7 @@
       "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
     },
     "READONLY": {
-      "BADGE": "Monit",
+      "BADGE": "Dev mode",
       "MODE": "Monitoring mode",
       "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
       "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 7ba358e787d91144578f0d56d670719c0590ec71..9fb124558c13d617982941c36d3f06664d40307c 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -135,7 +135,8 @@
     "CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or change node <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
     "SHOW_ALL_FEED": "Show all",
     "READ_MORE": "Read more",
-    "FEED_SOURCE": "Source"
+    "FEED_SOURCE": "Source",
+    "NEWS": "News"
   },
   "SETTINGS": {
     "TITLE": "Settings",
@@ -172,6 +173,11 @@
       "HOUR": "After {{value}}h of inactivity",
       "ALWAYS": "At the end of the session"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Every day",
+      "WEEKLY": "Every week",
+      "MONTHLY": "Every month"
+    },
     "KEYRING_FILE": "Keyring file",
     "KEYRING_FILE_HELP": "Allow auto-connect at startup, or to authenticate (only if \"Expiration of authentication\" is \"at the end of the session\"",
     "REMEMBER_ME": "Remember me ?",
@@ -323,6 +329,7 @@
     "MIRROR": "mirror",
     "MIRRORS": "Mirrors",
     "MIRROR_PEERS": "Mirror peers",
+    "CUSTOM_PEER": "Enter a peer",
     "PEER_LIST": "Peer's list",
     "MEMBERS": "Members",
     "MEMBER_PEERS": "Member peers",
@@ -370,6 +377,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "This is a simple wallet, with no pending membership application.",
     "TECHNICAL_DIVIDER": "Technical data",
     "BTN_CERTIFY": "Certify",
+    "BTN_RENEWAL_CERTIFY": "Renew",
     "BTN_YES_CERTIFY": "Yes, certify",
     "BTN_SELECT_AND_CERTIFY": "New certification",
     "ACCOUNT_OPERATIONS": "Account operations",
@@ -531,6 +539,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
     "BTN_SECURITY_DOTS": "Sign-in and security...",
     "BTN_SHOW_DETAILS": "Display technical data",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} au bloc {{height}}",
+    "MEMBER_CONVERT_FAILED": "Request failed, you do not meet all the rules of the web of trust.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Locked amount",
       "DESCRIPTION": "Here are the conditions for unlocking this amount:",
@@ -679,6 +689,23 @@
       "TIME": "Date",
       "AMOUNT": "Amount",
       "COMMENT": "Comment"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Certification check list",
+      "INFOS": "Each member is responsible for the security of Äž1 currency. Before certifying this person's identity, you should have performed few checks. Please answer following questions:",
+      "BTN_ALL_CHECK": "Certify",
+      "CHECKLIST_CONDITIONS_NOT_MET": "The certification has not been sent. All answers are not right. Please recheck each point with the person to be certified.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "Do you know <b>well</b> the person you are about to certify? Do you know other people who also know this person well?",
+        "REVOCATION": "Has this person downloaded their <b>revocation document</b> and do they know where to find it?",
+        "CONTACT": "Have you <b>had contact</b> with this person by many means, and did they answer?",
+        "DOUBLE_IDENTITY": "The person should own <b>only one active member identity</b>. Do you think they own another one?",
+        "MASTER_ACCOUNT": "Does this person own their accounts secrets? Have they already <b>sent money from their account</b> at least once?",
+        "LICENSE": "Has this person <b>understood the Duniter license</b>? Do they agree to comply with it for future certifications?",
+        "CREDENTIALS": "Was the account created with <b>long and complex secret identifier and password</b> (ex. passphrases)? Did the person understand that both secret identifier and password must remain secret ? Are they <b>sure to remember them</b> or to be able to find them?",
+        "PUBLIC_KEY_DIFFERENT": "The <b>public key</b> that is shown must be <b>identical</b> to the one the person gave you. The public keys are they <b>different</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "You may remind the person to certify different certification parameters:<br/><br/><ul><li> - Each member can certify 100 other identities at most.</li><li> - The certifications are saved with a 5 days interval.</li><li> - A new identity must gather at least 5 certifications in less than 2 months.</li><li>- A member must renew its membership at least once a year.</li><li> - Certifications have a lifespan of two years.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -740,6 +767,7 @@
     "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
     "GET_CURRENCY_FAILED": "Could not load currency. Please retry later.",
     "SEND_TX_FAILED": "Could not send transaction.",
+    "CLAIM_UD_FAILED": "An error occurred while claiming your Universal Dividend.",
     "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
     "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
@@ -868,7 +896,7 @@
       "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
     },
     "READONLY": {
-      "BADGE": "Monit",
+      "BADGE": "Dev mode",
       "MODE": "Monitoring mode",
       "MODE_HELP": "Cesium works in <b>monitoring mode</b>: only currency monitoring features are available.",
       "INSTALL_HELP": "If you want to <b>create a wallet account</b> to send or received money, we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help."
diff --git a/src/assets/i18n/eo-EO.json b/src/assets/i18n/eo-EO.json
index 931fbd430c497c46c6437ba140165d6a332972d1..39c1d4572170a7a64130577026c1dea8d1ea1ebd 100644
--- a/src/assets/i18n/eo-EO.json
+++ b/src/assets/i18n/eo-EO.json
@@ -134,7 +134,8 @@
     "CONNECTION_ERROR": "Nodo <b>{{server}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Kontrolu vian retkonekton, aŭ elektu alian nodon <a class=\"positive\" ng-click=\"doQuickFix('settings')\">ĉe la parametroj</a>.",
     "SHOW_ALL_FEED": "Vidi ĉion",
     "READ_MORE": "Legi la sekvon",
-    "FEED_SOURCE": "Fonto"
+    "FEED_SOURCE": "Fonto",
+    "NEWS": "Novaĵoj"
   },
   "SETTINGS": {
     "TITLE": "Parametroj",
@@ -170,6 +171,11 @@
       "HOUR": "Post {{value}}h de neatktiveco",
       "ALWAYS": "Fine de la seanco"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Ĉiutage",
+      "WEEKLY": "Ĉiusemajne",
+      "MONTHLY": "Ĉiumonate"
+    },
     "KEYRING_FILE": "Dosiero pri ŝlosilaro",
     "KEYRING_FILE_HELP": "Ebligas <b>konektiĝi</b> aŭtomate por ĉiu ekuzo<br/>kaj eĉ <b>aŭtentiĝi</b> (nur se \"Finiĝo de la aŭtentiĝo\" estas agordita kiel \"fine de la seanco\").",
     "REMEMBER_ME": "Memori min?",
@@ -321,6 +327,7 @@
     "MIRROR": "spegulo",
     "MIRRORS": "Speguloj",
     "MIRROR_PEERS": "Spegul-nodoj",
+    "CUSTOM_PEER": "Enigu nodon",
     "PEER_LIST": "Listo de la nodoj",
     "MEMBERS": "Membroj",
     "MEMBER_PEERS": "Membro-nodoj",
@@ -367,6 +374,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Temas pri simpla monujo, sen aliĝ-peto atendanta.",
     "TECHNICAL_DIVIDER": "Teknikaj informoj",
     "BTN_CERTIFY": "Atesti",
+    "BTN_RENEWAL_CERTIFY": "Renew",
     "BTN_YES_CERTIFY": "Jes, atesti",
     "BTN_SELECT_AND_CERTIFY": "Nova atestaĵo",
     "ACCOUNT_OPERATIONS": "Spezoj en la konto",
@@ -511,6 +519,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Ĉesigi la aliĝon...",
     "BTN_SECURITY_DOTS": "Konto kaj sekureco...",
     "BTN_SHOW_DETAILS": "Afiŝi la teknikajn informojn",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} ĉe la bloko {{height}}",
+    "MEMBER_CONVERT_FAILED": "Petado malsukcesis, vi ne plenumas ĉiujn regulojn de la reto de fido.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Sumo blokita",
       "DESCRIPTION": "Jen la kondiĉoj de malblokado de tiu sumo:",
@@ -658,6 +668,23 @@
       "TIME": "Dato",
       "AMOUNT": "Sumo",
       "COMMENT": "Komento"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Kontrolisto antaÅ­ atesto",
+      "INFOS": "La sekureco de la monero Ğ1 dependas de ĉiu membro. Antaŭ atesti la identon de tiu ĉi persono, vi devus fari kelkajn kontroladetojn. Bonvolu respondi la jenajn demandojn:",
+      "BTN_ALL_CHECK": "Atesti",
+      "CHECKLIST_CONDITIONS_NOT_MET": "La atesto ne estis sendita. La kontrolado ŝajnas nesufiĉa. Bonvolu rekontroli ĉiun punkton kun la persono, kiun vi volas atesti.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>Ĉu vi bone konas</b> la personon, kiun vi volas atesti, kaj ĉu vi konas aliajn homojn, kiuj ankaŭ bone konas tiun personon?",
+        "REVOCATION": "Ĉu tiu ĉi persono elŝutis sian <b>malkonfirmadon dokumenton</b> kaj ĉu ŝi scias, kie trovi ĝin?",
+        "CONTACT": "Ĉu vi <b>kontaktis</b> kun tiu ĉi persono per diversaj metodoj, kaj ĉu ŝi respondis?",
+        "DOUBLE_IDENTITY": "La persono devus havi <b>nur unu aktivan membro-identon</b>. Ĉu vi pensas, ke ŝi posedas alian?",
+        "MASTER_ACCOUNT": "Ĉu tiu ĉi persono posedas siajn kontosekretojn? Ĉu ŝi jam <b>sendis monon de sia konto</b> almenaŭ unufoje?",
+        "LICENSE": "Ĉu tiu ĉi persono <b>komprenis la permesilon</b> de Duniter, kaj ĉu ŝi konsentas konformiĝi al ĝi por estontaj atestoj?",
+        "CREDENTIALS": "Ĉu la konto estis kreita kun <b>longa kaj kompleksa identigilo/pasvorto</b> (ekz. pasfrazoj)? Ĉu la persono komprenis, ke ambaŭ la identigilo kaj la pasvorto devas resti sekretaj? Ĉu ŝi estas <b>certa, ke ŝi memoros ilin</b> aŭ povos retrovi ilin?",
+        "PUBLIC_KEY_DIFFERENT": "La montrata <b>publika ŝlosilo</b> devas esti <b>identa</b> al tiu, kiun la persono donis al vi. Ĉu la publika ŝlosiloj estas <b>malsamaj</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "Vi povas rememorigi al la atestota persono diversajn parametrojn pri atestoj:<br/><br/><ul><li> - Ĉiu membro povas atesti maksimume 100 aliajn identecojn.</li><li> - La atestoj estas konservataj kun intervolo de 5 tagoj.</li><li> - Nova membro devas kolekti minimume 5 atestojn en malpli ol 2 monatoj.</li><li> - Membro devas renovigi sian membrecon minimume unufoje jare.</li><li> - Atestoj estas validaj dum du jaroj.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -715,6 +742,7 @@
     "GET_CURRENCY_PARAMETER": "Malsukceso por ricevi la regulojn de la mono.",
     "GET_CURRENCY_FAILED": "Ne eblis ŝarĝi la monon. Bonvolu reprovi pli poste.",
     "SEND_TX_FAILED": "Elspezado malsukcesa.",
+    "CLAIM_UD_FAILED": "Eraro okazis dum la postulo de via Universala Dividendo.",
     "ALL_SOURCES_USED": "Bonvolu atendi la kalkulon de la venonta bloko (ĉiuj viaj monfontoj estis uzitaj).",
     "NOT_ENOUGH_SOURCES": "Ne sufiĉe da mono por sendi tiun ĉi sumon per ununura spezo.<br/>Maksimuma sumo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Malsukceso por krei la membro-konton.",
diff --git a/src/assets/i18n/es-ES.json b/src/assets/i18n/es-ES.json
index 85833486751c2201993524be19eab6cd05f51478..a63293ee653804ff20856c21100098d34e63964e 100644
--- a/src/assets/i18n/es-ES.json
+++ b/src/assets/i18n/es-ES.json
@@ -128,7 +128,9 @@
     "REPORT_ISSUE": "Reportar anomalía",
     "NOT_YOUR_ACCOUNT_QUESTION": "¿No es suya la cuenta <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
     "BTN_CHANGE_ACCOUNT": "Desconectar esta cuenta",
-    "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Compruebe su conexión a Internet, o nodo Duniter <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en los ajustes</a>."
+    "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Compruebe su conexión a Internet, o nodo Duniter <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en los ajustes</a>.",
+    "NEWS": "Notícies"
+
   },
   "SETTINGS": {
     "TITLE": "Ajustes",
@@ -163,6 +165,11 @@
       "HOUR": "Después de {{value}}h de inactividad",
       "ALWAYS": "Al finalizar la sesión"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Todos los días",
+      "WEEKLY": "Todas las semanas",
+      "MONTHLY": "Todos los meses"
+    },
     "KEYRING_FILE": "Archivo de llaves",
     "KEYRING_FILE_HELP": "Le permite <b>conectarse</b> automáticamente en cada inicio <br/>e incluso de <b>autenticarse</b> (solo si \"Caducidad de la autenticación\" está configurada en modo: \"al finalizar la sesión\").",
     "REMEMBER_ME": "Recordarme",
@@ -315,6 +322,7 @@
     "MIRROR": "espejo",
     "MIRRORS": "Espejo",
     "MIRROR_PEERS": "Nodos espejo",
+    "CUSTOM_PEER": "Ingresar un nodo",
     "PEER_LIST": "Lista de nodos",
     "MEMBERS": "Miembro",
     "MEMBER_PEERS": "Nodos miembro",
@@ -361,6 +369,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Se trata de un monedero simple, sin solicitud de membresía en espera",
     "TECHNICAL_DIVIDER": "Informaciones técnicas",
     "BTN_CERTIFY": "Certificar",
+    "BTN_RENEWAL_CERTIFY": "Renovar",
     "BTN_YES_CERTIFY": "Sí, certificar",
     "BTN_SELECT_AND_CERTIFY": "Nueva certificación",
     "ACCOUNT_OPERATIONS": "Transacciones de la cuenta",
@@ -603,6 +612,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Cancelar la membresía…",
     "BTN_SECURITY_DOTS": "Cuenta y seguridad…",
     "BTN_SHOW_DETAILS": "Publicar la información técnica",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} en el bloque {{height}}",
+    "MEMBER_CONVERT_FAILED": "Fallo en la solicitud, no cumples con todas las reglas de la red de confianza.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Importe bloqueado",
       "DESCRIPTION": "Aquí están las condiciones para desbloquear este importe:",
@@ -750,6 +761,23 @@
       "TIME": "Fecha",
       "AMOUNT": "Cantidad",
       "COMMENT": "Comentario"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Lista de verificación antes de certificar",
+      "INFOS": "La seguridad de la moneda Äž1 depende de cada miembro. Antes de certificar la identidad de este ser humano, debes realizar algunas verificaciones. Por favor, responde a las siguientes preguntas:",
+      "BTN_ALL_CHECK": "Certificar",
+      "CHECKLIST_CONDITIONS_NOT_MET": "La certificación no se ha enviado. Las verificaciones parecen insuficientes. Por favor, verifica nuevamente cada punto con la persona a certificar.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>¿Conoces bien</b> al ser humano que vas a certificar y conoces a otras personas que también lo conocen bien?",
+        "REVOCATION": "¿Ha descargado su <b>documento de revocación</b> y sabe dónde encontrarlo?",
+        "CONTACT": "¿Has <b>contactado</b> a esta persona por varios medios y te ha respondido?",
+        "DOUBLE_IDENTITY": "La persona debe tener <b>una sola identidad de miembro activa</b>. ¿Tiene alguna <b>otra</b>?",
+        "MASTER_ACCOUNT": "¿Controla bien su cuenta y ha realizado al menos <b>una transferencia</b> desde su cuenta?",
+        "LICENSE": "¿Ha <b>entendido la licencia</b> y está dispuesta a cumplirla para certificar a otros miembros?",
+        "CREDENTIALS": "¿Las credenciales de su cuenta, como el identificador y la contraseña, son suficientemente <b>largas y complejas</b>? ¿Ha comprendido que tanto la frase secreta como la contraseña deben mantenerse en secreto? ¿Está segura de recordarlos o de poder encontrarlos?",
+        "PUBLIC_KEY_DIFFERENT": "La <b>clave pública</b> indicada debe ser <b>idéntica</b> a la que esta persona te ha proporcionado. ¿Son <b>diferentes</b> las claves?"
+      },
+      "SHORT_LICENSE_REMINDER": "Puedes recordarle a la persona certificada los parámetros de las certificaciones:<br/><br/><ul><li> - Cada miembro puede emitir un máximo de 100 certificaciones válidas.</li><li> - Las certificaciones se registran con un intervalo de 5 días.</li><li> - Una nueva identidad de miembro debe reunir al menos 5 certificaciones en menos de dos meses.</li><li> - Un miembro debe renovar su membresía cada año.</li><li> - Las certificaciones son válidas durante dos años.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -816,6 +844,7 @@
     "GET_CURRENCY_PARAMETER": "Error en la recuperación de las reglas de moneda.",
     "GET_CURRENCY_FAILED": "Carga de la moneda imposible. Por favor, intente más tarde.",
     "SEND_TX_FAILED": "Error en la transferencia.",
+    "CLAIM_UD_FAILED": "Se produjo un error al reclamar su Dividendo Universal.",
     "ALL_SOURCES_USED": "Por favor, espera el cálculo del bloque siguiente (Todas sus fuentes de moneda fueron utilizada).",
     "NOT_ENOUGH_SOURCES": "No lo bastante cambio para mandar este importe en una sola transacción.<br/>Importe máximo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Error en la creación de la cuenta miembro.",
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index e89f33cd2657371df870250fa164c579c0f104c7..8dcf339e7a9275094c213e35acfeaaccbd652f0b 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -107,7 +107,7 @@
   "ABOUT": {
     "TITLE": "À propos",
     "LICENSE": "Application <b>libre</b> (Licence GNU AGPLv3).",
-    "LATEST_RELEASE": "Il existe une <b>version plus récente</b> de {{'COMMON.APP_NAME'|translate}} (<b>v{{version}}</b>)",
+    "LATEST_RELEASE": "Il existe une <b>version plus récente</b> de {{appName}} (<b>v{{version}}</b>)",
     "PLEASE_UPDATE": "Veuillez mettre à jour {{'COMMON.APP_NAME'|translate}} (dernière version : <b>v{{version}}</b>)",
     "CODE": "Code source :",
     "OFFICIAL_WEB_SITE": "Site web officiel :",
@@ -136,7 +136,8 @@
     "CONNECTION_ERROR": "Nœud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connexion Internet, ou changer de nœud <a class=\"positive\" ng-click=\"doQuickFix('settings')\">dans les paramètres</a>.",
     "SHOW_ALL_FEED": "Voir tout",
     "READ_MORE": "Lire la suite",
-    "FEED_SOURCE": "Source"
+    "FEED_SOURCE": "Source",
+    "NEWS": "Actualités"
   },
   "SETTINGS": {
     "TITLE": "Paramètres",
@@ -177,6 +178,11 @@
       "HOUR": "Après {{value}}h d'inactivité",
       "ALWAYS": "A la fin de la session"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Tous les jours",
+      "WEEKLY": "Toutes les semaines",
+      "MONTHLY": "Tous les mois"
+    },
     "KEYRING_FILE": "Fichier de trousseau",
     "KEYRING_FILE_HELP": "Permet de vous <b>connecter</b> automatiquement à chaque lancement<br/>et même de vous <b>authentifier</b> (seulement si \"Expiration de l'authentification\" est configurée \"à la fin de la session\").",
     "REMEMBER_ME": "Se souvenir de moi ?",
@@ -199,7 +205,8 @@
       "USE_SSL": "Sécurisé ?",
       "USE_SSL_HELP": "(Chiffrement SSL)",
       "BTN_SHOW_LIST": "Liste des noeuds"
-    }
+    },
+    "DURATION_BETWEEN_UD_CLAIM": "Période entre chaque récupération du dividende universel"
   },
   "BLOCKCHAIN": {
     "HASH": "Hash : {{hash}}",
@@ -259,7 +266,7 @@
       "TAB_WOT": "Toile de confiance",
       "TAB_NETWORK": "Réseau",
       "TAB_BLOCKS": "Blocs",
-      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} est une <b>monnaie libre</b>, démarrée {{firstBlockTime|formatFromNow}}. Elle compte actuellement <b>{{N}} membres</b>, qui produisent et perçoivent un <a ng-click=\"showHelpModal('ud')\">Dividende Universel</a> (DU), chaque {{dt|formatPeriod}}.",
+      "CURRENCY_SHORT_DESCRIPTION": "{{currency}} est une <b>monnaie libre</b>, démarrée {{firstBlockTime}}. Elle compte actuellement <b>{{N}} membres</b>, qui produisent et perçoivent un <a class='open-modal' (click)='onDividendeClick()' style='cursor: pointer;'>Dividende Universel</a> (DU), chaque {{dt}}.",
       "NETWORK_RULES_DIVIDER": "Règles du réseau",
       "CURRENCY_NAME": "Nom de la monnaie",
       "MEMBERS": "Nombre de membres",
@@ -331,6 +338,7 @@
     "MIRROR": "miroir",
     "MIRRORS": "Miroirs",
     "MIRROR_PEERS": "Nœuds miroirs",
+    "CUSTOM_PEER": "Saisir un nœud",
     "PEER_LIST": "Liste des nœuds",
     "MEMBERS": "Membres",
     "MEMBER_PEERS": "Nœuds membres",
@@ -378,6 +386,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Il s'agit d'un simple portefeuille, sans demande d'adhésion en attente.",
     "TECHNICAL_DIVIDER": "Informations techniques",
     "BTN_CERTIFY": "Certifier",
+    "BTN_RENEWAL_CERTIFY": "Renouveler",
     "BTN_YES_CERTIFY": "Oui, certifier",
     "BTN_SELECT_AND_CERTIFY": "Nouvelle certification",
     "ACCOUNT_OPERATIONS": "Opérations sur le compte",
@@ -543,6 +552,9 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Arrêter l'adhésion...",
     "BTN_SECURITY_DOTS": "Compte et sécurité...",
     "BTN_SHOW_DETAILS": "Afficher les infos techniques",
+    "BTN_CLAIMS_UD": "Réclamer son dividende universel",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} au bloc {{height}}",
+    "MEMBER_CONVERT_FAILED": "Echec de la demande, vous ne respectez pas toutes les régles de la toile de confiance.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Montant verrouillé",
       "DESCRIPTION": "Voici les conditions de déverrouillage de ce montant :",
@@ -696,6 +708,22 @@
       "TIME": "Date",
       "AMOUNT": "Montant",
       "COMMENT": "Commentaire"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Vérifications avant certification",
+      "INFOS": "La sécurité de la monnaie Ğ1 repose sur chaque membre. Avant de certifier l'identité de cette personne, vous devez avoir fait quelques vérifications à son propos. Veuillez répondre aux questions suivantes :",
+      "CHECKLIST_CONDITIONS_NOT_MET": "La certification n'a pas été envoyée. Les vérifications semblent insuffisantes. Veuillez vérifier de nouveau chaque point auprès de la personne à certifier.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>Connaissez-vous bien</b> la personne que vous certifiez, et connaissez-vous des gens qui la connaissent bien également ?",
+        "REVOCATION": "A-t-elle téléchargé son <b>document de révocation</b> et sait-elle où le retrouver ?",
+        "CONTACT": "Avez-vous <b>contacté</b> cette personne par plusieurs moyens et vous a-t-elle répondu ?",
+        "DOUBLE_IDENTITY": "La personne doit posséder <b>une seule identité membre active</b>. En possède-t-elle une <b>autre</b> ?",
+        "MASTER_ACCOUNT": "Maîtrise-t-elle son compte et a-t-elle déjà <b>effectué au moins un virement</b> depuis son compte ?",
+        "LICENSE": "A-t-elle <b>compris la licence</b> et accepte-t-elle de s'y conformer pour la certification d'autres membres ?",
+        "CREDENTIALS": "L’identifiant secret et le mot de passe de son compte sont-ils <b>longs et complexes</b> (phrases de passe) ? A-t-elle compris que l’identifiant doit également rester secret ? Est-elle <b>certaine de s’en souvenir</b> ou de pouvoir les retrouver ?",
+        "PUBLIC_KEY_DIFFERENT": "La <b>clef publique</b> indiquée doit être <b>identique</b> à celle que vous a communiqué cette personne. Les clefs sont-elles <b>différentes</b> ?"
+      },
+      "SHORT_LICENSE_REMINDER": "Vous pouvez rappeler à la personne certifiée les paramètres des certifications :<br/><br/><ul><li> - Chaque membre peut avoir émis 100 certifications valides au maximum.</li><li> - Les certifications sont enregistrées à un intervalle de 5 jours.</li><li> - Une nouvelle identité membre doit réunir au minimum 5 certifications en moins de deux mois.</li><li> - Un membre doit renouveler son adhésion chaque année.</li><li> - Les certifications sont valides durant deux ans.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -772,6 +800,7 @@
     "GET_CURRENCY_PARAMETER": "Échec de la récupération des règles de la monnaie.",
     "GET_CURRENCY_FAILED": "Chargement de la monnaie impossible. Veuillez réessayer plus tard.",
     "SEND_TX_FAILED": "Échec du virement.",
+    "CLAIM_UD_FAILED": "Une erreur est survenue au moment de réclamer votre dividende universel.",
     "ALL_SOURCES_USED": "Veuillez attendre le calcul du prochain bloc (toutes vos sources de monnaie ont été utilisées).",
     "NOT_ENOUGH_SOURCES": "Pas assez de change pour envoyer ce montant en une seule transaction.<br/>Montant maximum : {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Échec de la création du compte membre.",
@@ -902,7 +931,7 @@
       "INSTALL_HELP": "Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
     },
     "READONLY": {
-      "BADGE": "Monit",
+      "BADGE": "Dev mode",
       "MODE": "Mode monitoring",
       "MODE_HELP": "Cesium fonctionne en <b>mode monitoring</b> : ne sont disponibles que les fonctionnalités de supervision de la monnaie.",
       "INSTALL_HELP": "Si vous souhaitez <b>créer un compte portefeuille</b> pour envoyer ou recevoir de la monnaie, nous vous recommandons <b>d'installer votre copie</b> de l'application Cesium. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide."
diff --git a/src/assets/i18n/it-IT.json b/src/assets/i18n/it-IT.json
index 9be3d6e706f23f437cdc6cdfe23c188267466a5a..f534666d71fbc99323d27a3fd33366213ec69728 100644
--- a/src/assets/i18n/it-IT.json
+++ b/src/assets/i18n/it-IT.json
@@ -131,7 +131,8 @@
     "CONNECTION_ERROR": "Nodo <b>{{server}}</b> irraggiungibile o indirizzo non valido. <br/><br/> Verifica tua connessione or cambia nodo. <a class=\"positive\" ng-click=\"doQuickFix('settings')\">nell impostazioni. </a>.",
     "SHOW_ALL_FEED": "Mostra tutto",
     "READ_MORE": "Leggi di più",
-    "FEED_SOURCE": "Fonte"
+    "FEED_SOURCE": "Fonte",
+    "NEWS": "Notizie"
   },
   "SETTINGS": {
     "TITLE": "Impostazioni",
@@ -160,6 +161,11 @@
       "HOUR": "Dopo {{value}}h d'inattività",
       "ALWAYS": "Alla fine della sessione"
     },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Ogni giorno",
+      "WEEKLY": "Ogni settimana",
+      "MONTHLY": "Ogni mese"
+    },
     "REMEMBER_ME": "Ricordarsi di me?",
     "REMEMBER_ME_HELP": "Rimanere identificato da una sessione all'altra, conservando la chiave localmente.",
     "PLUGINS_SETTINGS": "Estensioni",
@@ -302,6 +308,7 @@
     "MIRROR": "Specchio",
     "MIRRORS": "Specchi",
     "MIRROR_PEERS": "Nodi specchio",
+    "CUSTOM_PEER": "Inserisci un nodo",
     "PEER_LIST": "Lista dei nodi",
     "MEMBERS": "Membri",
     "MEMBER_PEERS": "Nodi membri",
@@ -348,6 +355,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Questo è un portafoglio semplice, senza richiesta di certificazione emessa.",
     "TECHNICAL_DIVIDER": "Dati tecnici",
     "BTN_CERTIFY": "Certificare",
+    "BTN_RENEWAL_CERTIFY": "Rinnova",
     "BTN_YES_CERTIFY": "Si, certificare",
     "BTN_SELECT_AND_CERTIFY": "Nuova certificazione",
     "ACCOUNT_OPERATIONS": "Operazioni sul conto",
@@ -489,6 +497,8 @@
     "BTN_MEMBERSHIP_OUT_DOTS": "Revocare adesione...",
     "BTN_SECURITY_DOTS": "Login e securità...",
     "BTN_SHOW_DETAILS": "Visualizza dati tecnici",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} al blocco {{height}}",
+    "MEMBER_CONVERT_FAILED": "Richiesta fallita, non rispetti tutte le regole della rete di fiducia.",
     "LOCKED_OUTPUTS_POPOVER": {
       "TITLE": "Importo bloccato",
       "DESCRIPTION": "Ecco le condizioni per sbloccare questo importo:",
@@ -601,6 +611,23 @@
       "TIME": "Data",
       "AMOUNT": "Importo",
       "COMMENT": "Commento"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Lista di controllo prima della certificazione",
+      "INFOS": "La sicurezza della valuta Ğ1 dipende da ogni membro. Prima di certificare l'identità di questa persona, è necessario effettuare alcuni controlli. Si prega di rispondere alle seguenti domande:",
+      "BTN_ALL_CHECK": "Certifica",
+      "CHECKLIST_CONDITIONS_NOT_MET": "La certificazione non è stata inviata. I controlli sembrano insufficienti. Si prega di verificare nuovamente ogni punto con la persona che si desidera certificare.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>Conosci bene</b> la persona che stai per certificare e conosci altre persone che la conoscono bene?",
+        "REVOCATION": "Ha scaricato il suo <b>documento di revoca</b> e sa dove trovarlo?",
+        "CONTACT": "Hai <b>contattato</b> questa persona in vari modi e ti ha risposto?",
+        "DOUBLE_IDENTITY": "La persona dovrebbe possedere <b>solo un'identità di membro attiva</b>. Ne possiede un'altra?",
+        "MASTER_ACCOUNT": "Ha il controllo del suo account e ha già <b>effettuato almeno un trasferimento</b> dal suo account?",
+        "LICENSE": "Ha <b>compreso la licenza</b> di Duniter e accetta di conformarsi ad essa per le future certificazioni?",
+        "CREDENTIALS": "L'account è stato creato con un <b>ID/password lungo e complesso</b> (frasi segrete)? La persona ha compreso che sia l'ID che la password devono rimanere segreti? È sicura di ricordarli o di poterli recuperare?",
+        "PUBLIC_KEY_DIFFERENT": "La <b>chiave pubblica</b> mostrata deve essere <b>identica</b> a quella che la persona ti ha comunicato. Le chiavi pubbliche sono <b>diverse</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "Puoi ricordare alla persona da certificare i parametri delle certificazioni:<br/><br/><ul><li> - Ogni membro può certificare al massimo 100 identità.</li><li> - Le certificazioni vengono registrate con un intervallo di 5 giorni.</li><li> - Una nuova identità deve raccogliere almeno 5 certificazioni in meno di 2 mesi.</li><li> - Un membro deve rinnovare la sua adesione almeno una volta all'anno.</li><li> - Le certificazioni sono valide per due anni.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -653,6 +680,7 @@
     "GET_CURRENCY_PARAMETER": "Impossibile ricuperare i parametri della moneta.",
     "GET_CURRENCY_FAILED": "Impossibile caricare la moneta. Riprovare più tardi.",
     "SEND_TX_FAILED": "Impossibile eseguire la transazione.",
+    "CLAIM_UD_FAILED": "Si è verificato un errore durante la richiesta del Dividendo Universale.",
     "ALL_SOURCES_USED": "Per favore aspetta il calcolo del prossimo blocco (Tutte le tue fonti di moneta sono state utilizzate).",
     "NOT_ENOUGH_SOURCES": "Non hai abbastanza cambio per inviare questo importo in una sola transazione.<br/>Importo massimo: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Errore nella creazione del tuo conto membro.",
@@ -764,7 +792,7 @@
       "INSTALL_HELP": "Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
     },
     "READONLY": {
-      "BADGE": "Monit",
+      "BADGE": "Dev mode",
       "MODE": "Modalità di monitoraggio",
       "MODE_HELP": "Il Cesium funziona in <b>modalità monitoraggio</b>: sono disponibili solo le funzionalità di monitoraggio della valuta.",
       "INSTALL_HELP": "Se desidera <b>creare un account di portafoglio</b> per inviare o ricevere valuta, ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza."
diff --git a/src/assets/i18n/nl-NL.json b/src/assets/i18n/nl-NL.json
index 5c707d903c5373fdfdd423eb0cf1ef77cb67173d..861bee0aedb01ba68abb4ef41b34d676d40ad7f9 100644
--- a/src/assets/i18n/nl-NL.json
+++ b/src/assets/i18n/nl-NL.json
@@ -113,7 +113,8 @@
     "REPORT_ISSUE": "Meld een probleem",
     "NOT_YOUR_ACCOUNT_QUESTION": "Is rekening <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b> niet van jou?",
     "BTN_CHANGE_ACCOUNT": "Dze rekening ontkoppelen",
-    "CONNECTION_ERROR": "Node <b>{{server}}</b> onbereikbaar of ongeldig adres.<br/><br/>Controleer de internetverbinding, of schakel knooppunt <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in parameters</a>."
+    "CONNECTION_ERROR": "Node <b>{{server}}</b> onbereikbaar of ongeldig adres.<br/><br/>Controleer de internetverbinding, of schakel knooppunt <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in parameters</a>.",
+    "NEWS": "Nieuws"
   },
   "SETTINGS": {
     "TITLE": "Instellingen",
@@ -140,6 +141,19 @@
       "USE_SSL": "Secure?",
       "USE_SSL_HELP": "(SSL-encryptie)",
       "BTN_SHOW_LIST": "Lijst van knooppunten"
+    },
+    "KEEP_AUTH_OPTION": {
+      "NEVER": "Na elke handeling",
+      "SECONDS": "Na {{value}}s inactiviteit",
+      "MINUTE": "Na {{value}}min inactiviteit",
+      "MINUTES": "Na {{value}}min inactiviteit",
+      "HOUR": "Na {{value}}u inactiviteit",
+      "ALWAYS": "Aan het einde van de sessie"
+    },
+    "REDEEM_UD_PERIOD_OPTION": {
+      "DAILY": "Elke dag",
+      "WEEKLY": "Elke week",
+      "MONTHLY": "Elke maand"
     }
   },
   "BLOCKCHAIN": {
@@ -242,6 +256,7 @@
     "PEERS": "Knopen",
     "SIGNED_ON_BLOCK": "Getekend op blok",
     "MIRROR": "spiegel",
+    "CUSTOM_PEER": "Voer een peer in",
     "CURRENT_BLOCK": "Blok #",
     "VIEW": {
       "TITLE": "Knoop",
@@ -276,6 +291,7 @@
     "NOT_MEMBER_ACCOUNT_HELP": "Dit is een eenvoudige rekening, zonder dat er een aanvraag voor lidmaatschap in de wacht wordt gezet.",
     "TECHNICAL_DIVIDER": "Technische informatie",
     "BTN_CERTIFY": "Certificeren",
+    "BTN_RENEWAL_CERTIFY": "Vernieuw",
     "BTN_YES_CERTIFY": "Ja, Certificeren",
     "BTN_SELECT_AND_CERTIFY": "Nieuwe certificatie",
     "ACCOUNT_OPERATIONS": "Operaties op de rekening",
@@ -362,6 +378,8 @@
     "BTN_SECURITY_DOTS": "Rekening en veiligheid...",
     "BTN_SHOW_DETAILS": "Tonen technische informatie",
     "BTN_REVOKE": "Deze identiteit<span class='hidden-xs hidden-sm'> definitief</span> opzeggen...",
+    "TITLE_DISTANCE_RULES": "{{refereesReached}} / {{refereesCount}} bij blok {{height}}",
+    "MEMBER_CONVERT_FAILED": "Verzoek mislukt, u voldoet niet aan alle regels van het vertrouwensnetwerk.",
     "NEW": {
       "TITLE": "Registratie",
       "SLIDE_1_TITLE": "Selecteer een valuta:",
@@ -399,6 +417,23 @@
       "TIME": "Datum",
       "AMOUNT": "Bedrag",
       "COMMENT": "Commentaar"
+    },
+    "CERTIFICATION_MODAL": {
+      "CHECKLIST_TITLE": "Controles vóór certificering",
+      "INFOS": "De veiligheid van de munteenheid Äž1 is gebaseerd op elk lid. Voordat je de identiteit van deze persoon certificeert, moet je enkele controles over haar hebben uitgevoerd. Beantwoord de volgende vragen:",
+      "BTN_ALL_CHECK": "Certificeren",
+      "CHECKLIST_CONDITIONS_NOT_MET": "De certificering is niet verzonden. De controles lijken onvoldoende. Controleer elk punt opnieuw bij de persoon die moet worden gecertificeerd.",
+      "QUESTIONS": {
+        "WELL_KNOWN": "<b>Ken je</b> de persoon die je certificeert goed, en ken je ook mensen die haar goed kennen?",
+        "REVOCATION": "Heeft ze haar <b>herroepingsdocument</b> gedownload en weet ze waar ze het kan vinden?",
+        "CONTACT": "Heb je deze persoon op verschillende manieren <b>gecontacteerd</b> en heeft ze je geantwoord?",
+        "DOUBLE_IDENTITY": "De persoon moet <b>één actieve lididentiteit</b> hebben. Heeft ze er <b>een andere</b>?",
+        "MASTER_ACCOUNT": "Heeft ze controle over haar rekening, en heeft ze al <b>minstens één overboeking</b> gedaan vanaf haar rekening?",
+        "LICENSE": "Heeft ze de <b>licentie begrepen</b>, en gaat ze akkoord met de naleving ervan voor de certificering van andere leden?",
+        "CREDENTIALS": "Zijn de geheime identificatie en het wachtwoord van haar rekening <b>lang en complex</b> (wachtwoordzinnen)? Heeft ze begrepen dat de identificatie ook geheim moet blijven? Is ze er <b>zeker van dat ze deze zal onthouden</b> of terugvinden?",
+        "PUBLIC_KEY_DIFFERENT": "De <b>openbare sleutel</b> moet <b>identiek</b> zijn aan die welke deze persoon je heeft meegedeeld. Zijn de sleutels <b>verschillend</b>?"
+      },
+      "SHORT_LICENSE_REMINDER": "Je kunt de persoon eraan herinneren verschillende certificeringsparameters te certificeren:<br/><br/><ul><li> - Elk lid kan maximaal 100 andere identiteiten certificeren.</li><li> - De certificeringen worden met een interval van 5 dagen opgeslagen.</li><li> - Een nieuwe identiteit moet in minder dan 2 maanden minstens 5 certificeringen verzamelen.</li><li> - Een lid moet minstens eenmaal per jaar zijn lidmaatschap vernieuwen.</li><li> - Certificeringen hebben een levensduur van twee jaar.</li></ul>"
     }
   },
   "TRANSFER": {
@@ -445,6 +480,7 @@
     "GET_CURRENCY_PARAMETER": "Could not get currency parameters.",
     "GET_CURRENCY_FAILED": "Could not load currency.",
     "SEND_TX_FAILED": "Could not send transaction.",
+    "CLAIM_UD_FAILED": "Er is een fout opgetreden bij het claimen van uw Universeel Dividend.",
     "ALL_SOURCES_USED": "Please wait the next block computation (All transaction sources has been used).",
     "NOT_ENOUGH_SOURCES": "Not enough changes to send this amount in one time.<br/>Maximum amount: {{amount}} {{unit}}<sub>{{subUnit}}</sub>.",
     "ACCOUNT_CREATION_FAILED": "Error while creating your member account.",
diff --git a/src/environments/environment.class.ts b/src/environments/environment.class.ts
index bf0a8c400c656a12aeba6b12e837be3b60050f09..7e94192b60750a28d2782c958deaa2c893632ebc 100644
--- a/src/environments/environment.class.ts
+++ b/src/environments/environment.class.ts
@@ -7,16 +7,30 @@ export interface Environment {
   name: string;
   version?: string;
   production: boolean;
+  mode?: string;
 
   // Default values
   baseUrl?: string;
   useHash?: boolean;
   defaultLocale: string;
 
+  sourceUrl?: string;
+  reportIssueUrl?: string;
+  forumUrl?: string;
+  officialUrl?: string;
+
   defaultPeers: string[];
   defaultIndexers: string[];
   defaultPods: string[];
   defaultIfpsGateways: string[];
+  defaultDistanteFileUrl: string[];
+
+  feed?: {
+    jsonFeed: Map<string, string[]>;
+    maxContentLength: number;
+    maxAgeInMonths: number;
+    maxCount: number;
+  };
 
   // GraphQL
   graphql: {
@@ -41,6 +55,7 @@ export interface Environment {
     indexer?: string;
     pod?: string;
     ipfsGateway?: string;
+    distanceFileUrl?: string;
 
     // Load polkadot default account (alice, etc.)
     testingAccounts?: boolean;
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index 744751cc6b9eb3565228e353126bf9b241e212cb..1cbbe7fd61f4f8767ed488626e94fec8773ac8f3 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -12,6 +12,12 @@ export const environment = <Environment>{
   useHash: false,
   defaultLocale: 'fr',
 
+  // About
+  officialUrl: 'https://www.cesium.app',
+  sourceUrl: 'https://git.duniter.org/clients/cesium-grp/cesium',
+  reportIssueUrl: 'https://git.duniter.org/clients/cesium-grp/cesium/-/issues/new',
+  forumUrl: 'https://git.duniter.org/',
+
   graphql: {
     fetchPolicy: 'cache-first',
     watchFetchPolicy: 'cache-and-network',
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index be0ed973300aec30d99c9a3ce57329f7269493b0..77f12849b6ca92d883b936b354260706d275e14a 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -4,15 +4,21 @@
 
 import { Environment } from './environment.class';
 import { StorageDrivers } from '@app/shared/services/storage/storage.utils';
-
 import { AuthData } from '@app/account/auth/auth.model';
 
 export const environment = <Environment>{
   production: false,
-
+  version: '2.0.1',
   name: 'Cesium&sup2;',
-
+  mode: 'dev',
   defaultLocale: 'fr',
+  forumInformationUrl: 'https://forum.duniter.org/t/gchange-v2-moderation-ou-et-federation/12910/2',
+
+  // About
+  sourceUrl: 'https://git.duniter.org/clients/cesium-grp/cesium',
+  reportIssueUrl: 'https://git.duniter.org/clients/cesium-grp/cesium/-/issues/new',
+  forumUrl: 'https://forum.duniter.org/',
+  officialUrl: 'https://www.cesium.app',
 
   graphql: {
     fetchPolicy: 'cache-first',
@@ -31,6 +37,25 @@ export const environment = <Environment>{
     ss58Format: 42, // dev
   },
 
+  feed: {
+    jsonFeed: new Map<string, string[]>([
+      ['en', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-en.json']],
+      ['en-GB', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-en-GB.json']],
+      ['eo-EO', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-eo-EO.json']],
+      // ['fr', ['https://forum.duniter.org/t/nouvelle-version-1-7-9-de-cesium/11458/2.json']],
+      // ['fr', ['https://forum.duniter.org/c/clients/cesium/22']],
+      ['fr', ['https://forum.duniter.org/c/clients/cesium/22', 'https://forum.duniter.org/t/nouvelle-version-1-7-9-de-cesium/11458/2.json']],
+      ['nl-Nl', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-nl-NL.json']],
+      ['es-ES', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-es-ES.json']],
+      ['ca', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-ca.json']],
+      ['it-IT', ['https://raw.githubusercontent.com/duniter/cesium/master/doc/feed/1.1/feed-it-IT.json']],
+    ]),
+    maxContentLength: 1300,
+    // maxAgeInMonths: 1,
+    maxAgeInMonths: 120,
+    maxCount: 3,
+  },
+
   dev: {
     //peer: 'ws://127.0.0.1:9944',
     peer: 'wss://gdev.coinduf.eu/ws',
@@ -53,12 +78,15 @@ export const environment = <Environment>{
     /* Local endpoint */
     //'ws://127.0.0.1:9944',
     /* GDev endpoints */
+    // 'wss://vit.fdn.org/ws',
+    //'wss://1000i100.fr/ws',
     'wss://gdev.coinduf.eu/ws',
-    'wss://vit.fdn.org/ws',
     'wss://gdev.pini.fr/ws',
     'wss://gdev.cgeek.fr/ws',
     'wss://gdev.p2p.legal/ws',
-    //'wss://1000i100.fr/ws',
+    'wss://archive-rpc.gdev.brussels.ovh/ws',
+    'wss://archive-rpc.gdev.de.brussels.ovh/ws',
+    'wss://gdev.p2p.legal/ws',
   ],
 
   defaultIndexers: [
@@ -66,8 +94,8 @@ export const environment = <Environment>{
     //'http://localhost:8080/v1/graphql',
     /* GDev endpoints */
     'https://squid.gdev.coinduf.eu/v1beta1/relay',
-    //'https://gdev-squid.axiom-team.fr/graphql'
-    // 'https://gdev-squid.axiom-team.fr/v1beta1/relay',
+    // 'https://gdev-squid.axiom-team.fr/graphql',
+    'https://gdev-squid.axiom-team.fr/v1beta1/relay',
   ],
 
   defaultPods: [
@@ -75,6 +103,7 @@ export const environment = <Environment>{
     // 'http://localhost:8081/v1/graphql'
     /* GDev endpoints */
     'https://datapod.coinduf.eu/v1/graphql',
+    'https://datapod.gyroi.de:443/v1/graphql',
   ],
 
   defaultIfpsGateways: [
@@ -83,4 +112,9 @@ export const environment = <Environment>{
     /* GDev endpoints */
     'https://pagu.re',
   ],
+
+  defaultDistanteFileUrl: [
+    /* Distance file Urls */
+    'https://files.coinduf.eu/distance_precompute/latest_distance.json',
+  ],
 };
diff --git a/src/theme/_cesium.scss b/src/theme/_cesium.scss
index 3f430b3a6955ae8135fc78f374ebd58bd87b0d85..eec5a90d970cbdd9ae1b1051eb04b74b04268c9d 100644
--- a/src/theme/_cesium.scss
+++ b/src/theme/_cesium.scss
@@ -132,3 +132,7 @@ ion-icon.icon-secondary {
   left: 8px;
   top: -2px;
 }
+
+ion-icon.tappable {
+  cursor: pointer;
+}
diff --git a/src/theme/_ionic.globals.scss b/src/theme/_ionic.globals.scss
index 86978cab0850b52af5da205597fbd1d55338d57b..664c0e4f137bf79e769cb468501dc4ca42d410fe 100644
--- a/src/theme/_ionic.globals.scss
+++ b/src/theme/_ionic.globals.scss
@@ -63,7 +63,7 @@ $dark-disabled-text: rgba(black, 0.38);
 $light-primary-text: white;
 $light-secondary-text: rgba(white, 0.7);
 $light-disabled-text: rgba(white, 0.5);
-$text-color: $dark-primary-text;
+$text-color: rgba(black, 1);
 
 // Default General Colors
 // --------------------------------------------------
diff --git a/src/theme/_mixins.scss b/src/theme/_mixins.scss
index 45f54fc1f4efa376275ef262b07875eaf728a491..6122f6a3c7386912f2b26770c224573d1c1c8a04 100644
--- a/src/theme/_mixins.scss
+++ b/src/theme/_mixins.scss
@@ -74,6 +74,8 @@
 
 @mixin css-variables-to-root() {
   --ion-background-color: #{$background-color};
+  --ion-text-color:  #{$text-color};
+  --ion-text-color-rgb:  #{color-to-rgb-list($text-color)};
   --ion-toolbar-background: var(--ion-background-color);
   --ion-item-background: #{$ion-item-background-color};